let D be non empty set ; :: thesis: for f being FinSequence of D
for k1, k2 being Element of NAT st 1 <= k1 & k1 <= len f & 1 <= k2 & k2 <= len f holds
( (mid f,k1,k2) . 1 = f . k1 & ( k1 <= k2 implies ( len (mid f,k1,k2) = (k2 -' k1) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k1,k2) holds
(mid f,k1,k2) . i = f . ((i + k1) -' 1) ) ) ) & ( k1 > k2 implies ( len (mid f,k1,k2) = (k1 -' k2) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k1,k2) holds
(mid f,k1,k2) . i = f . ((k1 -' i) + 1) ) ) ) )

let f be FinSequence of D; :: thesis: for k1, k2 being Element of NAT st 1 <= k1 & k1 <= len f & 1 <= k2 & k2 <= len f holds
( (mid f,k1,k2) . 1 = f . k1 & ( k1 <= k2 implies ( len (mid f,k1,k2) = (k2 -' k1) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k1,k2) holds
(mid f,k1,k2) . i = f . ((i + k1) -' 1) ) ) ) & ( k1 > k2 implies ( len (mid f,k1,k2) = (k1 -' k2) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k1,k2) holds
(mid f,k1,k2) . i = f . ((k1 -' i) + 1) ) ) ) )

let k11, k21 be Element of NAT ; :: thesis: ( 1 <= k11 & k11 <= len f & 1 <= k21 & k21 <= len f implies ( (mid f,k11,k21) . 1 = f . k11 & ( k11 <= k21 implies ( len (mid f,k11,k21) = (k21 -' k11) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1) ) ) ) & ( k11 > k21 implies ( len (mid f,k11,k21) = (k11 -' k21) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1) ) ) ) ) )

assume A1: ( 1 <= k11 & k11 <= len f & 1 <= k21 & k21 <= len f ) ; :: thesis: ( (mid f,k11,k21) . 1 = f . k11 & ( k11 <= k21 implies ( len (mid f,k11,k21) = (k21 -' k11) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1) ) ) ) & ( k11 > k21 implies ( len (mid f,k11,k21) = (k11 -' k21) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1) ) ) ) )

A2: now
let k1, k2 be Element of NAT ; :: thesis: ( k1 <= k2 & 1 <= k1 & k1 <= len f implies (mid f,k1,k2) . 1 = f . k1 )
now
assume A3: ( k1 <= k2 & 1 <= k1 & k1 <= len f ) ; :: thesis: (mid f,k1,k2) . 1 = f . k1
then A4: (mid f,k1,k2) . 1 = ((f /^ (k1 -' 1)) | ((k2 -' k1) + 1)) . 1 by Def1
.= ((f /^ (k1 -' 1)) | (Seg ((k2 -' k1) + 1))) . 1 by FINSEQ_1:def 15 ;
k1 - 1 >= 0 by A3, XREAL_1:50;
then A5: 1 + (k1 -' 1) = 1 + (k1 - 1) by XREAL_0:def 2
.= k1 ;
then 1 + (k1 -' 1) <= ((len f) - (k1 -' 1)) + (k1 -' 1) by A3;
then A6: 1 <= (len f) - (k1 -' 1) by XREAL_1:8;
A7: k1 -' 1 <= len f by A3, NAT_D:44;
then A8: len (f /^ (k1 -' 1)) = (len f) - (k1 -' 1) by RFINSEQ:def 2;
0 + 1 <= (k2 -' k1) + 1 by XREAL_1:8;
then ( 1 in Seg ((k2 -' k1) + 1) & 1 in Seg (len (f /^ (k1 -' 1))) ) by A6, A8, FINSEQ_1:3;
then A9: ( 1 in dom (f /^ (k1 -' 1)) & 1 in Seg ((k2 -' k1) + 1) ) by FINSEQ_1:def 3;
then 1 in (dom (f /^ (k1 -' 1))) /\ (Seg ((k2 -' k1) + 1)) by XBOOLE_0:def 4;
then 1 in dom ((f /^ (k1 -' 1)) | (Seg ((k2 -' k1) + 1))) by RELAT_1:90;
then (mid f,k1,k2) . 1 = (f /^ (k1 -' 1)) . 1 by A4, FUNCT_1:70;
hence (mid f,k1,k2) . 1 = f . k1 by A5, A7, A9, RFINSEQ:def 2; :: thesis: verum
end;
hence ( k1 <= k2 & 1 <= k1 & k1 <= len f implies (mid f,k1,k2) . 1 = f . k1 ) ; :: thesis: verum
end;
thus (mid f,k11,k21) . 1 = f . k11 :: thesis: ( ( k11 <= k21 implies ( len (mid f,k11,k21) = (k21 -' k11) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1) ) ) ) & ( k11 > k21 implies ( len (mid f,k11,k21) = (k11 -' k21) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1) ) ) ) )
proof
per cases ( k11 <= k21 or k11 > k21 ) ;
suppose k11 <= k21 ; :: thesis: (mid f,k11,k21) . 1 = f . k11
hence (mid f,k11,k21) . 1 = f . k11 by A1, A2; :: thesis: verum
end;
suppose A10: k11 > k21 ; :: thesis: (mid f,k11,k21) . 1 = f . k11
A11: 1 <= (k11 -' k21) + 1 by NAT_1:11;
k21 -' 1 <= len f by A1, NAT_D:44;
then A12: len (f /^ (k21 -' 1)) = (len f) - (k21 -' 1) by RFINSEQ:def 2;
A13: k21 - 1 >= 0 by A1, XREAL_1:50;
A14: k11 - k21 >= 0 by A10, XREAL_1:50;
then A15: k11 -' k21 = k11 - k21 by XREAL_0:def 2;
(k11 -' k21) + 1 = (k11 - k21) + 1 by A14, XREAL_0:def 2
.= k11 - (k21 - 1)
.= k11 - (k21 -' 1) by A13, XREAL_0:def 2 ;
then A16: (k11 -' k21) + 1 <= len (f /^ (k21 -' 1)) by A1, A12, XREAL_1:11;
then A17: len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) = (k11 -' k21) + 1 by FINSEQ_1:80;
then A18: (k11 -' k21) + 1 in dom ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) by A11, FINSEQ_3:27;
A19: (k11 -' k21) + 1 in dom (f /^ (k21 -' 1)) by A11, A16, FINSEQ_3:27;
A20: (k21 -' 1) + ((k11 -' k21) + 1) = (k21 - 1) + (k11 - (k21 - 1)) by A13, A15, XREAL_0:def 2
.= k11 ;
A21: ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . (len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) = ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) /. ((k11 -' k21) + 1) by A11, A17, FINSEQ_4:24
.= (f /^ (k21 -' 1)) /. ((k11 -' k21) + 1) by A18, FINSEQ_4:85
.= f /. ((k21 -' 1) + ((k11 -' k21) + 1)) by A19, FINSEQ_5:30
.= f . k11 by A1, A20, FINSEQ_4:24 ;
1 in dom ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) by A11, A17, FINSEQ_3:27;
then (Rev ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) . 1 = ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . (((len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) - 1) + 1) by FINSEQ_5:61
.= f . k11 by A21 ;
hence (mid f,k11,k21) . 1 = f . k11 by A10, Def1; :: thesis: verum
end;
end;
end;
thus ( k11 <= k21 implies ( len (mid f,k11,k21) = (k21 -' k11) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1) ) ) ) :: thesis: ( k11 > k21 implies ( len (mid f,k11,k21) = (k11 -' k21) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1) ) ) )
proof
assume A22: k11 <= k21 ; :: thesis: ( len (mid f,k11,k21) = (k21 -' k11) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1) ) )

then A23: mid f,k11,k21 = (f /^ (k11 -' 1)) | ((k21 -' k11) + 1) by Def1;
k11 -' 1 <= len f by A1, NAT_D:44;
then A24: len (f /^ (k11 -' 1)) = (len f) - (k11 -' 1) by RFINSEQ:def 2;
A25: k11 - 1 >= 0 by A1, XREAL_1:50;
then A26: k11 -' 1 = k11 - 1 by XREAL_0:def 2;
A27: k21 - k11 >= 0 by A22, XREAL_1:50;
then A28: k21 -' k11 = k21 - k11 by XREAL_0:def 2;
(k21 -' k11) + 1 = (k21 - k11) + 1 by A27, XREAL_0:def 2
.= k21 - (k11 - 1)
.= k21 - (k11 -' 1) by A25, XREAL_0:def 2 ;
then A29: (k21 -' k11) + 1 <= len (f /^ (k11 -' 1)) by A1, A24, XREAL_1:11;
then A30: len ((f /^ (k11 -' 1)) | ((k21 -' k11) + 1)) = (k21 -' k11) + 1 by FINSEQ_1:80;
for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1)
proof
let i be Element of NAT ; :: thesis: ( 1 <= i & i <= len (mid f,k11,k21) implies (mid f,k11,k21) . i = f . ((i + k11) -' 1) )
assume A31: ( 1 <= i & i <= len (mid f,k11,k21) ) ; :: thesis: (mid f,k11,k21) . i = f . ((i + k11) -' 1)
then A32: i + (k11 - 1) <= (k21 - (k11 - 1)) + (k11 - 1) by A23, A28, A30, XREAL_1:8;
A33: ( i <= (k21 -' k11) + 1 & (k21 -' k11) + 1 <= len (f /^ (k11 -' 1)) ) by A23, A29, A31, FINSEQ_1:80;
A34: ( 1 <= i & i + (k11 -' 1) <= len f ) by A1, A26, A31, A32, XXREAL_0:2;
A35: k11 <= k11 + i by NAT_1:11;
A36: i + (k11 -' 1) = i + (k11 - 1) by A25, XREAL_0:def 2
.= (i + k11) - 1
.= (i + k11) -' 1 by A1, A35, XREAL_1:235, XXREAL_0:2 ;
(mid f,k11,k21) . i = ((f /^ (k11 -' 1)) | ((k21 -' k11) + 1)) . i by A22, Def1
.= (f /^ (k11 -' 1)) . i by A33, FINSEQ_3:121
.= f . (i + (k11 -' 1)) by A34, Th23 ;
hence (mid f,k11,k21) . i = f . ((i + k11) -' 1) by A36; :: thesis: verum
end;
hence ( len (mid f,k11,k21) = (k21 -' k11) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((i + k11) -' 1) ) ) by A23, A29, FINSEQ_1:80; :: thesis: verum
end;
assume A37: k11 > k21 ; :: thesis: ( len (mid f,k11,k21) = (k11 -' k21) + 1 & ( for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1) ) )

then A38: mid f,k11,k21 = Rev ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) by Def1;
then A39: len (mid f,k11,k21) = len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) by FINSEQ_5:def 3;
k21 -' 1 <= len f by A1, NAT_D:44;
then A40: len (f /^ (k21 -' 1)) = (len f) - (k21 -' 1) by RFINSEQ:def 2;
A41: k21 - 1 >= 0 by A1, XREAL_1:50;
then A42: k21 -' 1 = k21 - 1 by XREAL_0:def 2;
A43: k11 - k21 >= 0 by A37, XREAL_1:50;
then A44: k11 -' k21 = k11 - k21 by XREAL_0:def 2;
(k11 -' k21) + 1 = (k11 - k21) + 1 by A43, XREAL_0:def 2
.= k11 - (k21 - 1)
.= k11 - (k21 -' 1) by A41, XREAL_0:def 2 ;
then A45: (k11 -' k21) + 1 <= len (f /^ (k21 -' 1)) by A1, A40, XREAL_1:11;
then A46: len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) = (k11 -' k21) + 1 by FINSEQ_1:80;
thus A47: len (mid f,k11,k21) = (k11 -' k21) + 1 by A39, A45, FINSEQ_1:80; :: thesis: for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1)

thus for i being Element of NAT st 1 <= i & i <= len (mid f,k11,k21) holds
(mid f,k11,k21) . i = f . ((k11 -' i) + 1) :: thesis: verum
proof
let i be Element of NAT ; :: thesis: ( 1 <= i & i <= len (mid f,k11,k21) implies (mid f,k11,k21) . i = f . ((k11 -' i) + 1) )
assume A48: ( 1 <= i & i <= len (mid f,k11,k21) ) ; :: thesis: (mid f,k11,k21) . i = f . ((k11 -' i) + 1)
then A49: i <= (k11 -' k21) + 1 by A39, A45, FINSEQ_1:80;
A50: i + (k21 - 1) <= (k11 - (k21 - 1)) + (k21 - 1) by A44, A47, A48, XREAL_1:8;
A51: i <= i + (k21 -' 1) by NAT_1:11;
then A52: i <= k11 by A42, A50, XXREAL_0:2;
A53: ((((k11 -' k21) + 1) -' i) + 1) + (k21 -' 1) = ((((k11 -' k21) + 1) - i) + 1) + (k21 -' 1) by A47, A48, XREAL_1:235
.= (((k11 - (k21 - 1)) - i) + 1) + (k21 - 1) by A41, A44, XREAL_0:def 2
.= (k11 - i) + 1
.= (k11 -' i) + 1 by A42, A50, A51, XREAL_1:235, XXREAL_0:2 ;
(k11 -' k21) + 1 <= ((k11 -' k21) + 1) + (i -' 1) by NAT_1:11;
then (k11 -' k21) + 1 <= ((k11 -' k21) + 1) + (i - 1) by A48, XREAL_1:235;
then ((k11 -' k21) + 1) - (i - 1) <= (((k11 -' k21) + 1) + (i - 1)) - (i - 1) by XREAL_1:11;
then (((k11 -' k21) + 1) - i) + 1 <= (k11 -' k21) + 1 ;
then A54: (((k11 -' k21) + 1) -' i) + 1 <= (k11 -' k21) + 1 by A49, XREAL_1:235;
A55: 1 + k11 <= i + k11 by A48, XREAL_1:8;
i + k11 <= i + (len f) by A1, XREAL_1:8;
then 1 + k11 <= i + (len f) by A55, XXREAL_0:2;
then (1 + k11) - i <= (i + (len f)) - i by XREAL_1:11;
then (k11 - i) + 1 <= len f ;
then A56: ( 1 <= (((k11 -' k21) + 1) -' i) + 1 & ((((k11 -' k21) + 1) -' i) + 1) + (k21 -' 1) <= len f ) by A52, A53, NAT_1:11, XREAL_1:235;
(mid f,k11,k21) . i = ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . (((len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) - i) + 1) by A38, A39, A48, Th24
.= ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . (((len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) -' i) + 1) by A39, A48, XREAL_1:235
.= (f /^ (k21 -' 1)) . ((((k11 -' k21) + 1) -' i) + 1) by A46, A54, FINSEQ_3:121
.= f . ((k11 -' i) + 1) by A53, A56, Th23 ;
hence (mid f,k11,k21) . i = f . ((k11 -' i) + 1) ; :: thesis: verum
end;