finseq_6.miz



    begin

    reserve x,y,z for set;

    registration

      let x, y, z;

      cluster <*x, y, z*> -> non trivial;

      coherence

      proof

        ( len <*x, y, z*>) = 3 by FINSEQ_1: 45;

        hence thesis by NAT_D: 60;

      end;

    end

    registration

      let f be non empty FinSequence;

      cluster ( Rev f) -> non empty;

      coherence

      proof

        ( dom f) <> {} ;

        hence thesis by FINSEQ_5: 57, RELAT_1: 38;

      end;

    end

    

     Lm1: ( rng <*x, y*>) = {x, y}

    proof

      

      thus ( rng <*x, y*>) = (( rng <*x*>) \/ ( rng <*y*>)) by FINSEQ_1: 31

      .= ( {x} \/ ( rng <*y*>)) by FINSEQ_1: 38

      .= ( {x} \/ {y}) by FINSEQ_1: 38

      .= {x, y} by ENUMSET1: 1;

    end;

    

     Lm2: ( rng <*x, y, z*>) = {x, y, z}

    proof

      

      thus ( rng <*x, y, z*>) = (( rng <*x, y*>) \/ ( rng <*z*>)) by FINSEQ_1: 31

      .= ( {x, y} \/ ( rng <*z*>)) by Lm1

      .= ( {x, y} \/ {z}) by FINSEQ_1: 38

      .= {x, y, z} by ENUMSET1: 3;

    end;

    begin

    reserve f,f1,f2,f3 for FinSequence,

p,p1,p2,p3 for set,

i,k for Nat;

    theorem :: FINSEQ_6:1

    

     Th1: for X be set, i st X c= ( Seg i) & 1 in X holds (( Sgm X) . 1) = 1

    proof

      let X be set, i such that

       A1: X c= ( Seg i) and

       A2: 1 in X;

      ( Sgm X) <> {} by A1, A2, FINSEQ_1: 51;

      then ( len ( Sgm X)) >= 1 by NAT_1: 14;

      then 1 in ( dom ( Sgm X)) by FINSEQ_3: 25;

      then

       A3: (( Sgm X) . 1) in ( rng ( Sgm X)) by FUNCT_1:def 3;

      reconsider k1 = (( Sgm X) . 1) as Nat;

      assume

       A4: (( Sgm X) . 1) <> 1;

      

       A5: ( rng ( Sgm X)) = X by A1, FINSEQ_1:def 13;

      then

      consider x be object such that

       A6: x in ( dom ( Sgm X)) and

       A7: (( Sgm X) . x) = 1 by A2, FUNCT_1:def 3;

      

       A8: k1 >= 1 by A1, A5, A3, FINSEQ_1: 1;

      reconsider j = x as Nat by A6;

      j >= 1 by A6, FINSEQ_3: 25;

      then

       A9: 1 < j by A7, A4, XXREAL_0: 1;

      j <= ( len ( Sgm X)) by A6, FINSEQ_3: 25;

      hence contradiction by A1, A7, A8, A9, FINSEQ_1:def 13;

    end;

    theorem :: FINSEQ_6:2

    

     Th2: for f be FinSequence holds k in ( dom f) & (for i st 1 <= i & i < k holds (f . i) <> (f . k)) implies ((f . k) .. f) = k

    proof

      let f be FinSequence;

      assume that

       A1: k in ( dom f) and

       A2: for i st 1 <= i & i < k holds (f . i) <> (f . k);

      assume

       A3: ((f . k) .. f) <> k;

      ((f . k) .. f) <= k by A1, FINSEQ_4: 24;

      then

       A4: ((f . k) .. f) < k by A3, XXREAL_0: 1;

      

       A5: (f . k) in ( rng f) by A1, FUNCT_1:def 3;

      then (f . ((f . k) .. f)) = (f . k) by FINSEQ_4: 19;

      hence contradiction by A2, A5, A4, FINSEQ_4: 21;

    end;

    theorem :: FINSEQ_6:3

    

     Th3: ( <*p1, p2*> | ( Seg 1)) = <*p1*>

    proof

      set f = ( <*p1, p2*> | ( Seg 1));

      ( len <*p1, p2*>) = 2 by FINSEQ_1: 44;

      then 1 in ( dom <*p1, p2*>) by FINSEQ_3: 25;

      then

       A1: ( Seg 1) c= ( dom <*p1, p2*>) by FINSEQ_1: 2, ZFMISC_1: 31;

      

       A2: ( dom f) = (( dom <*p1, p2*>) /\ ( Seg 1)) by RELAT_1: 61

      .= ( Seg 1) by A1, XBOOLE_1: 28;

      then

      reconsider f as FinSequence by FINSEQ_1:def 2;

      1 in ( dom f) by A2;

      

      then

       A3: (f . 1) = ( <*p1, p2*> . 1) by FUNCT_1: 47

      .= p1 by FINSEQ_1: 44;

      ( len f) = 1 by A2, FINSEQ_1:def 3;

      hence thesis by A3, FINSEQ_1: 40;

    end;

    theorem :: FINSEQ_6:4

    

     Th4: ( <*p1, p2, p3*> | ( Seg 1)) = <*p1*>

    proof

      set f = ( <*p1, p2, p3*> | ( Seg 1));

      ( len <*p1, p2, p3*>) = 3 by FINSEQ_1: 45;

      then 1 in ( dom <*p1, p2, p3*>) by FINSEQ_3: 25;

      then

       A1: ( Seg 1) c= ( dom <*p1, p2, p3*>) by FINSEQ_1: 2, ZFMISC_1: 31;

      

       A2: ( dom f) = (( dom <*p1, p2, p3*>) /\ ( Seg 1)) by RELAT_1: 61

      .= ( Seg 1) by A1, XBOOLE_1: 28;

      then

      reconsider f as FinSequence by FINSEQ_1:def 2;

      1 in ( dom f) by A2;

      

      then

       A3: (f . 1) = ( <*p1, p2, p3*> . 1) by FUNCT_1: 47

      .= p1 by FINSEQ_1: 45;

      ( len f) = 1 by A2, FINSEQ_1:def 3;

      hence thesis by A3, FINSEQ_1: 40;

    end;

    theorem :: FINSEQ_6:5

    

     Th5: ( <*p1, p2, p3*> | ( Seg 2)) = <*p1, p2*>

    proof

      set f = ( <*p1, p2, p3*> | ( Seg 2));

      

       A1: ( len <*p1, p2, p3*>) = 3 by FINSEQ_1: 45;

      then

       A2: 2 in ( dom <*p1, p2, p3*>) by FINSEQ_3: 25;

      1 in ( dom <*p1, p2, p3*>) by A1, FINSEQ_3: 25;

      then

       A3: ( Seg 2) c= ( dom <*p1, p2, p3*>) by A2, FINSEQ_1: 2, ZFMISC_1: 32;

      

       A4: ( dom f) = (( dom <*p1, p2, p3*>) /\ ( Seg 2)) by RELAT_1: 61

      .= ( Seg 2) by A3, XBOOLE_1: 28;

      then

      reconsider f as FinSequence by FINSEQ_1:def 2;

      

       A5: ( len f) = 2 by A4, FINSEQ_1:def 3;

      then 2 in ( dom f) by FINSEQ_3: 25;

      

      then

       A6: (f . 2) = ( <*p1, p2, p3*> . 2) by FUNCT_1: 47

      .= p2 by FINSEQ_1: 45;

      1 in ( dom f) by A5, FINSEQ_3: 25;

      

      then (f . 1) = ( <*p1, p2, p3*> . 1) by FUNCT_1: 47

      .= p1 by FINSEQ_1: 45;

      hence thesis by A5, A6, FINSEQ_1: 44;

    end;

    theorem :: FINSEQ_6:6

    

     Th6: p in ( rng f1) implies (p .. (f1 ^ f2)) = (p .. f1)

    proof

      

       A1: ( dom f1) c= ( dom (f1 ^ f2)) by FINSEQ_1: 26;

      assume

       A2: p in ( rng f1);

      then

       A3: (p .. f1) in ( dom f1) by FINSEQ_4: 20;

       A4:

      now

        

         A5: ((f1 ^ f2) . (p .. f1)) = (f1 . (p .. f1)) by A3, FINSEQ_1:def 7;

        let i such that

         A6: 1 <= i and

         A7: i < (p .. f1);

        (p .. f1) <= ( len f1) by A2, FINSEQ_4: 21;

        then i <= ( len f1) by A7, XXREAL_0: 2;

        then

         A8: i in ( dom f1) by A6, FINSEQ_3: 25;

        then ((f1 ^ f2) . i) = (f1 . i) by FINSEQ_1:def 7;

        hence ((f1 ^ f2) . i) <> ((f1 ^ f2) . (p .. f1)) by A2, A7, A8, A5, FINSEQ_4: 19, FINSEQ_4: 24;

      end;

      (f1 . (p .. f1)) = p by A2, FINSEQ_4: 19;

      then ((f1 ^ f2) . (p .. f1)) = p by A3, FINSEQ_1:def 7;

      hence thesis by A3, A1, A4, Th2;

    end;

    theorem :: FINSEQ_6:7

    

     Th7: p in (( rng f2) \ ( rng f1)) implies (p .. (f1 ^ f2)) = (( len f1) + (p .. f2))

    proof

      assume

       A1: p in (( rng f2) \ ( rng f1));

      then

       A2: (p .. f2) in ( dom f2) by FINSEQ_4: 20;

      (f2 . (p .. f2)) = p by A1, FINSEQ_4: 19;

      then

       A3: ((f1 ^ f2) . (( len f1) + (p .. f2))) = p by A2, FINSEQ_1:def 7;

       A4:

      now

        let i such that

         A5: 1 <= i and

         A6: i < (( len f1) + (p .. f2));

        per cases ;

          suppose i <= ( len f1);

          then

           A7: i in ( dom f1) by A5, FINSEQ_3: 25;

          assume ((f1 ^ f2) . i) = ((f1 ^ f2) . (( len f1) + (p .. f2)));

          then (f1 . i) = p by A3, A7, FINSEQ_1:def 7;

          then p in ( rng f1) by A7, FUNCT_1:def 3;

          hence contradiction by A1, XBOOLE_0:def 5;

        end;

          suppose

           A8: i > ( len f1);

          then

          reconsider j = (i - ( len f1)) as Element of NAT by INT_1: 5;

          j > 0 by A8, XREAL_1: 50;

          then

           A9: 1 <= j by NAT_1: 14;

          

           A10: i = (j + ( len f1));

          then

           A11: j < (p .. f2) by A6, XREAL_1: 6;

          

           A12: ((f1 ^ f2) . (( len f1) + (p .. f2))) = (f2 . (p .. f2)) by A2, FINSEQ_1:def 7;

          

           A13: (p .. f2) <= ( len f2) by A1, FINSEQ_4: 21;

          j <= (p .. f2) by A6, A10, XREAL_1: 6;

          then j <= ( len f2) by A13, XXREAL_0: 2;

          then

           A14: j in ( dom f2) by A9, FINSEQ_3: 25;

          then ((f1 ^ f2) . i) = (f2 . j) by A10, FINSEQ_1:def 7;

          hence ((f1 ^ f2) . i) <> ((f1 ^ f2) . (( len f1) + (p .. f2))) by A1, A11, A14, A12, FINSEQ_4: 19, FINSEQ_4: 24;

        end;

      end;

      (( len f1) + (p .. f2)) in ( dom (f1 ^ f2)) by A2, FINSEQ_1: 28;

      hence thesis by A3, A4, Th2;

    end;

    theorem :: FINSEQ_6:8

    

     Th8: p in ( rng f1) implies ((f1 ^ f2) |-- p) = ((f1 |-- p) ^ f2)

    proof

      assume

       A1: p in ( rng f1);

      then

       A2: (p .. f1) = (p .. (f1 ^ f2)) by Th6;

      

       A3: ( len (f1 |-- p)) = (( len f1) - (p .. f1)) by A1, FINSEQ_4:def 6;

       A4:

      now

        let k;

        assume

         A5: k in ( dom ((f1 |-- p) ^ f2));

        per cases by A5, FINSEQ_1: 25;

          suppose

           A6: k in ( dom (f1 |-- p));

          ( len (f1 |-- p)) = (( len f1) - (p .. f1)) by A1, FINSEQ_4:def 6;

          then

           A7: (( len (f1 |-- p)) + (p .. f1)) = ( len f1);

          k <= ( len (f1 |-- p)) by A6, FINSEQ_3: 25;

          then

           A8: (k + (p .. f1)) <= ( len f1) by A7, XREAL_1: 6;

          

           A9: k <= (k + (p .. f1)) by NAT_1: 11;

          1 <= k by A6, FINSEQ_3: 25;

          then 1 <= (k + (p .. f1)) by A9, XXREAL_0: 2;

          then

           A10: (k + (p .. f1)) in ( dom f1) by A8, FINSEQ_3: 25;

          

          thus (((f1 |-- p) ^ f2) . k) = ((f1 |-- p) . k) by A6, FINSEQ_1:def 7

          .= (f1 . (k + (p .. f1))) by A1, A6, FINSEQ_4:def 6

          .= ((f1 ^ f2) . (k + (p .. (f1 ^ f2)))) by A2, A10, FINSEQ_1:def 7;

        end;

          suppose ex n be Nat st n in ( dom f2) & k = (( len (f1 |-- p)) + n);

          then

          consider n be Nat such that

           A11: n in ( dom f2) and

           A12: k = (( len (f1 |-- p)) + n);

          

          thus (((f1 |-- p) ^ f2) . k) = (f2 . n) by A11, A12, FINSEQ_1:def 7

          .= ((f1 ^ f2) . (( len f1) + n)) by A11, FINSEQ_1:def 7

          .= ((f1 ^ f2) . (k + (p .. (f1 ^ f2)))) by A2, A3, A12;

        end;

      end;

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then

       A13: p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      ( len ((f1 |-- p) ^ f2)) = ((( len f1) - (p .. f1)) + ( len f2)) by A3, FINSEQ_1: 22

      .= ((( len f1) + ( len f2)) - (p .. f1))

      .= (( len (f1 ^ f2)) - (p .. (f1 ^ f2))) by A2, FINSEQ_1: 22;

      hence thesis by A13, A4, FINSEQ_4:def 6;

    end;

    theorem :: FINSEQ_6:9

    

     Th9: p in (( rng f2) \ ( rng f1)) implies ((f1 ^ f2) |-- p) = (f2 |-- p)

    proof

      assume

       A1: p in (( rng f2) \ ( rng f1));

      then

       A2: (( len f1) + (p .. f2)) = (p .. (f1 ^ f2)) by Th7;

       A3:

      now

        let k;

        

         A4: k <= (k + (p .. f2)) by NAT_1: 11;

        ( len (f2 |-- p)) = (( len f2) - (p .. f2)) by A1, FINSEQ_4:def 6;

        then

         A5: (( len (f2 |-- p)) + (p .. f2)) = ( len f2);

        assume

         A6: k in ( dom (f2 |-- p));

        then k <= ( len (f2 |-- p)) by FINSEQ_3: 25;

        then

         A7: (k + (p .. f2)) <= ( len f2) by A5, XREAL_1: 6;

        1 <= k by A6, FINSEQ_3: 25;

        then 1 <= (k + (p .. f2)) by A4, XXREAL_0: 2;

        then

         A8: (k + (p .. f2)) in ( dom f2) by A7, FINSEQ_3: 25;

        

        thus ((f2 |-- p) . k) = (f2 . (k + (p .. f2))) by A1, A6, FINSEQ_4:def 6

        .= ((f1 ^ f2) . (( len f1) + (k + (p .. f2)))) by A8, FINSEQ_1:def 7

        .= ((f1 ^ f2) . (k + (p .. (f1 ^ f2)))) by A2;

      end;

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then

       A9: p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      ( len (f2 |-- p)) = (( len f2) - (p .. f2)) by A1, FINSEQ_4:def 6

      .= ((( len f1) + ( len f2)) - (( len f1) + (p .. f2)))

      .= (( len (f1 ^ f2)) - (p .. (f1 ^ f2))) by A2, FINSEQ_1: 22;

      hence thesis by A9, A3, FINSEQ_4:def 6;

    end;

    theorem :: FINSEQ_6:10

    

     Th10: f1 c= (f1 ^ f2)

    proof

      

       A1: for x be object st x in ( dom f1) holds (f1 . x) = ((f1 ^ f2) . x) by FINSEQ_1:def 7;

      ( dom f1) c= ( dom (f1 ^ f2)) by FINSEQ_1: 26;

      hence thesis by A1, GRFUNC_1: 2;

    end;

    theorem :: FINSEQ_6:11

    for A be set st A c= ( dom f1) holds ((f1 ^ f2) | A) = (f1 | A) by Th10, GRFUNC_1: 27;

    theorem :: FINSEQ_6:12

    

     Th12: p in ( rng f1) implies ((f1 ^ f2) -| p) = (f1 -| p)

    proof

      assume

       A1: p in ( rng f1);

      then

      consider n be Nat such that

       A2: n = ((p .. f1) - 1) and

       A3: (f1 | ( Seg n)) = (f1 -| p) by FINSEQ_4:def 5;

      

       A4: (p .. f1) <= ( len f1) by A1, FINSEQ_4: 21;

      (n + 1) = (p .. f1) by A2;

      then n <= (p .. f1) by NAT_1: 11;

      then n <= ( len f1) by A4, XXREAL_0: 2;

      then ( Seg n) c= ( Seg ( len f1)) by FINSEQ_1: 5;

      then ( Seg n) c= ( dom f1) by FINSEQ_1:def 3;

      then

       A5: ((f1 ^ f2) | ( Seg n)) = (f1 | ( Seg n)) by Th10, GRFUNC_1: 27;

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then

       A6: p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      n = ((p .. (f1 ^ f2)) - 1) by A1, A2, Th6;

      hence thesis by A3, A6, A5, FINSEQ_4:def 5;

    end;

    registration

      let f1;

      let i be Nat;

      cluster (f1 | ( Seg i)) -> FinSequence-like;

      coherence by FINSEQ_1: 15;

    end

    theorem :: FINSEQ_6:13

    

     Th13: f1 c= f2 implies (f3 ^ f1) c= (f3 ^ f2)

    proof

      assume

       A1: f1 c= f2;

      

       A2: ( dom (f3 ^ f1)) c= ( dom (f3 ^ f2))

      proof

        let x be object;

        assume

         A3: x in ( dom (f3 ^ f1));

        then

        reconsider i = x as Nat;

        per cases by A3, FINSEQ_1: 25;

          suppose

           A4: i in ( dom f3);

          ( dom f3) c= ( dom (f3 ^ f2)) by FINSEQ_1: 26;

          hence thesis by A4;

        end;

          suppose

           A5: ex n be Nat st n in ( dom f1) & i = (( len f3) + n);

          ( dom f1) c= ( dom f2) by A1, RELAT_1: 11;

          hence thesis by A5, FINSEQ_1: 28;

        end;

      end;

      for x be object st x in ( dom (f3 ^ f1)) holds ((f3 ^ f1) . x) = ((f3 ^ f2) . x)

      proof

        let x be object;

        assume

         A6: x in ( dom (f3 ^ f1));

        then

        reconsider i = x as Nat;

        per cases by A6, FINSEQ_1: 25;

          suppose

           A7: i in ( dom f3);

          

          hence ((f3 ^ f1) . x) = (f3 . i) by FINSEQ_1:def 7

          .= ((f3 ^ f2) . x) by A7, FINSEQ_1:def 7;

        end;

          suppose

           A8: ex n be Nat st n in ( dom f1) & i = (( len f3) + n);

          

           A9: ( dom f1) c= ( dom f2) by A1, RELAT_1: 11;

          consider k be Nat such that

           A10: k in ( dom f1) and

           A11: i = (( len f3) + k) by A8;

          

          thus ((f3 ^ f1) . x) = (f1 . k) by A10, A11, FINSEQ_1:def 7

          .= (f2 . k) by A1, A10, GRFUNC_1: 2

          .= ((f3 ^ f2) . x) by A10, A11, A9, FINSEQ_1:def 7;

        end;

      end;

      hence thesis by A2, GRFUNC_1: 2;

    end;

    theorem :: FINSEQ_6:14

    

     Th14: ((f1 ^ f2) | ( Seg (( len f1) + i))) = (f1 ^ (f2 | ( Seg i)))

    proof

      

       A1: ( dom (f1 ^ (f2 | ( Seg i)))) c= ( Seg (( len f1) + i))

      proof

        let x be object;

        assume

         A2: x in ( dom (f1 ^ (f2 | ( Seg i))));

        then

        reconsider j = x as Nat;

        per cases by A2, FINSEQ_1: 25;

          suppose

           A3: j in ( dom f1);

          ( len f1) <= (( len f1) + i) by NAT_1: 11;

          then

           A4: ( Seg ( len f1)) c= ( Seg (( len f1) + i)) by FINSEQ_1: 5;

          j in ( Seg ( len f1)) by A3, FINSEQ_1:def 3;

          hence thesis by A4;

        end;

          suppose ex n be Nat st n in ( dom (f2 | ( Seg i))) & j = (( len f1) + n);

          then

          consider k be Nat such that

           A5: k in ( dom (f2 | ( Seg i))) and

           A6: j = (( len f1) + k);

          

           A7: k <= j by A6, NAT_1: 11;

          ( dom (f2 | ( Seg i))) = (( dom f2) /\ ( Seg i)) by RELAT_1: 61;

          then k in ( Seg i) by A5, XBOOLE_0:def 4;

          then k <= i by FINSEQ_1: 1;

          then

           A8: j <= (( len f1) + i) by A6, XREAL_1: 6;

          1 <= k by A5, FINSEQ_3: 25;

          then 1 <= j by A7, XXREAL_0: 2;

          hence thesis by A8;

        end;

      end;

      

       A9: (( dom (f1 ^ f2)) /\ ( Seg (( len f1) + i))) c= ( dom (f1 ^ (f2 | ( Seg i))))

      proof

        let x be object;

        assume

         A10: x in (( dom (f1 ^ f2)) /\ ( Seg (( len f1) + i)));

        then

         A11: x in ( dom (f1 ^ f2)) by XBOOLE_0:def 4;

        reconsider j = x as Nat by A10;

        per cases by A11, FINSEQ_1: 25;

          suppose

           A12: j in ( dom f1);

          ( dom f1) c= ( dom (f1 ^ (f2 | ( Seg i)))) by FINSEQ_1: 26;

          hence thesis by A12;

        end;

          suppose ex n be Nat st n in ( dom f2) & j = (( len f1) + n);

          then

          consider k be Nat such that

           A13: k in ( dom f2) and

           A14: j = (( len f1) + k);

          

           A15: 1 <= k by A13, FINSEQ_3: 25;

          

           A16: ( dom (f2 | ( Seg i))) = (( dom f2) /\ ( Seg i)) by RELAT_1: 61;

          j in ( Seg (( len f1) + i)) by A10, XBOOLE_0:def 4;

          then j <= (( len f1) + i) by FINSEQ_1: 1;

          then k <= i by A14, XREAL_1: 6;

          then k in ( Seg i) by A15;

          then k in ( dom (f2 | ( Seg i))) by A13, A16, XBOOLE_0:def 4;

          hence thesis by A14, FINSEQ_1: 28;

        end;

      end;

      

       A17: ( dom ((f1 ^ f2) | ( Seg (( len f1) + i)))) = (( dom (f1 ^ f2)) /\ ( Seg (( len f1) + i))) by RELAT_1: 61;

       A18:

      now

        let k be Nat;

        assume

         A19: k in ( dom ((f1 ^ f2) | ( Seg (( len f1) + i))));

        then

         A20: 1 <= k by FINSEQ_3: 25;

        per cases ;

          suppose k <= ( len f1);

          then

           A21: k in ( dom f1) by A20, FINSEQ_3: 25;

          

          thus (((f1 ^ f2) | ( Seg (( len f1) + i))) . k) = ((f1 ^ f2) . k) by A19, FUNCT_1: 47

          .= (f1 . k) by A21, FINSEQ_1:def 7

          .= ((f1 ^ (f2 | ( Seg i))) . k) by A21, FINSEQ_1:def 7;

        end;

          suppose

           A22: k > ( len f1);

          then

          reconsider j = (k - ( len f1)) as Element of NAT by INT_1: 5;

          j > 0 by A22, XREAL_1: 50;

          then

           A23: 1 <= j by NAT_1: 14;

          

           A24: k = (( len f1) + j);

          

           A25: not k in ( dom f1) by A22, FINSEQ_3: 25;

          k in ( dom (f1 ^ f2)) by A17, A19, XBOOLE_0:def 4;

          then

           A26: ex n be Nat st n in ( dom f2) & k = (( len f1) + n) by A25, FINSEQ_1: 25;

          k in ( Seg (( len f1) + i)) by A17, A19, XBOOLE_0:def 4;

          then k <= (( len f1) + i) by FINSEQ_1: 1;

          then j <= i by A24, XREAL_1: 6;

          then

           A27: j in ( Seg i) by A23;

          ( dom (f2 | ( Seg i))) = (( dom f2) /\ ( Seg i)) by RELAT_1: 61;

          then

           A28: j in ( dom (f2 | ( Seg i))) by A27, A26, XBOOLE_0:def 4;

          

          thus (((f1 ^ f2) | ( Seg (( len f1) + i))) . k) = ((f1 ^ f2) . k) by A19, FUNCT_1: 47

          .= (f2 . j) by A26, FINSEQ_1:def 7

          .= ((f2 | ( Seg i)) . j) by A28, FUNCT_1: 47

          .= ((f1 ^ (f2 | ( Seg i))) . k) by A24, A28, FINSEQ_1:def 7;

        end;

      end;

      (f1 ^ (f2 | ( Seg i))) c= (f1 ^ f2) by Th13, RELAT_1: 59;

      then ( dom (f1 ^ (f2 | ( Seg i)))) c= ( dom (f1 ^ f2)) by RELAT_1: 11;

      then ( dom (f1 ^ (f2 | ( Seg i)))) c= (( dom (f1 ^ f2)) /\ ( Seg (( len f1) + i))) by A1, XBOOLE_1: 19;

      then ( dom ((f1 ^ f2) | ( Seg (( len f1) + i)))) = ( dom (f1 ^ (f2 | ( Seg i)))) by A17, A9;

      hence thesis by A18, FINSEQ_1: 13;

    end;

    theorem :: FINSEQ_6:15

    

     Th15: p in (( rng f2) \ ( rng f1)) implies ((f1 ^ f2) -| p) = (f1 ^ (f2 -| p))

    proof

      assume

       A1: p in (( rng f2) \ ( rng f1));

      then

      consider n be Nat such that

       A2: n = ((p .. f2) - 1) and

       A3: (f2 | ( Seg n)) = (f2 -| p) by FINSEQ_4:def 5;

      (p .. (f1 ^ f2)) = (( len f1) + (p .. f2)) by A1, Th7;

      then

       A4: (( len f1) + n) = ((p .. (f1 ^ f2)) - 1) by A2;

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then

       A5: p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      ((f1 ^ f2) | ( Seg (( len f1) + n))) = (f1 ^ (f2 -| p)) by A3, Th14;

      hence thesis by A5, A4, FINSEQ_4:def 5;

    end;

    theorem :: FINSEQ_6:16

    

     Th16: (f1 ^ f2) just_once_values p implies p in (( rng f1) \+\ ( rng f2))

    proof

      

       A1: ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      assume

       A2: (f1 ^ f2) just_once_values p;

       A3:

      now

        assume

         A4: p in (( rng f1) /\ ( rng f2));

        then p in ( rng f1) by XBOOLE_0:def 4;

        then ((f1 ^ f2) |-- p) = ((f1 |-- p) ^ f2) by Th8;

        then

         A5: not p in ( rng ((f1 |-- p) ^ f2)) by A2, FINSEQ_4: 45;

        ( rng ((f1 |-- p) ^ f2)) = (( rng (f1 |-- p)) \/ ( rng f2)) by FINSEQ_1: 31;

        then not p in ( rng f2) by A5, XBOOLE_0:def 3;

        hence contradiction by A4, XBOOLE_0:def 4;

      end;

      p in ( rng (f1 ^ f2)) by A2, FINSEQ_4: 5;

      then p in ((( rng f1) \/ ( rng f2)) \ (( rng f1) /\ ( rng f2))) by A1, A3, XBOOLE_0:def 5;

      hence thesis by XBOOLE_1: 101;

    end;

    theorem :: FINSEQ_6:17

    (f1 ^ f2) just_once_values p & p in ( rng f1) implies f1 just_once_values p

    proof

      assume that

       A1: (f1 ^ f2) just_once_values p and

       A2: p in ( rng f1);

      ((f1 ^ f2) |-- p) = ((f1 |-- p) ^ f2) by A2, Th8;

      then

       A3: ( rng ((f1 ^ f2) |-- p)) = (( rng (f1 |-- p)) \/ ( rng f2)) by FINSEQ_1: 31;

       not p in ( rng ((f1 ^ f2) |-- p)) by A1, FINSEQ_4: 45;

      then not p in ( rng (f1 |-- p)) by A3, XBOOLE_0:def 3;

      hence thesis by A2, FINSEQ_4: 45;

    end;

    theorem :: FINSEQ_6:18

    

     Th18: (p .. <*p*>) = 1

    proof

      

       A1: for i st 1 <= i & i < 1 holds ( <*p*> . i) <> ( <*p*> . 1);

      ( dom <*p*>) = ( Seg 1) by FINSEQ_1: 38;

      then

       A2: 1 in ( dom <*p*>);

      ( <*p*> . 1) = p by FINSEQ_1: 40;

      hence thesis by A2, A1, Th2;

    end;

    theorem :: FINSEQ_6:19

    

     Th19: (p1 .. <*p1, p2*>) = 1

    proof

      

       A1: for i st 1 <= i & i < 1 holds ( <*p1, p2*> . i) <> ( <*p1, p2*> . 1);

      ( len <*p1, p2*>) = 2 by FINSEQ_1: 44;

      then

       A2: 1 in ( dom <*p1, p2*>) by FINSEQ_3: 25;

      ( <*p1, p2*> . 1) = p1 by FINSEQ_1: 44;

      hence thesis by A2, A1, Th2;

    end;

    theorem :: FINSEQ_6:20

    

     Th20: p1 <> p2 implies (p2 .. <*p1, p2*>) = 2

    proof

      

       A1: ( <*p1, p2*> . 2) = p2 by FINSEQ_1: 44;

      

       A2: ( <*p1, p2*> . 1) = p1 by FINSEQ_1: 44;

      assume

       A3: p1 <> p2;

       A4:

      now

        let i;

        assume

         A5: 1 <= i;

        assume i < (1 + 1);

        then i <= 1 by NAT_1: 13;

        hence ( <*p1, p2*> . i) <> ( <*p1, p2*> . 2) by A3, A1, A2, A5, XXREAL_0: 1;

      end;

      2 <= ( len <*p1, p2*>) by FINSEQ_1: 44;

      then 2 in ( dom <*p1, p2*>) by FINSEQ_3: 25;

      hence thesis by A1, A4, Th2;

    end;

    theorem :: FINSEQ_6:21

    

     Th21: (p1 .. <*p1, p2, p3*>) = 1

    proof

      

       A1: for i st 1 <= i & i < 1 holds ( <*p1, p2, p3*> . i) <> ( <*p1, p2, p3*> . 1);

      ( len <*p1, p2, p3*>) = 3 by FINSEQ_1: 45;

      then

       A2: 1 in ( dom <*p1, p2, p3*>) by FINSEQ_3: 25;

      ( <*p1, p2, p3*> . 1) = p1 by FINSEQ_1: 45;

      hence thesis by A2, A1, Th2;

    end;

    theorem :: FINSEQ_6:22

    

     Th22: p1 <> p2 implies (p2 .. <*p1, p2, p3*>) = 2

    proof

      

       A1: ( <*p1, p2, p3*> . 2) = p2 by FINSEQ_1: 45;

      

       A2: ( <*p1, p2, p3*> . 1) = p1 by FINSEQ_1: 45;

      assume

       A3: p1 <> p2;

       A4:

      now

        let i;

        assume

         A5: 1 <= i;

        assume i < (1 + 1);

        then i <= 1 by NAT_1: 13;

        hence ( <*p1, p2, p3*> . i) <> ( <*p1, p2, p3*> . 2) by A3, A1, A2, A5, XXREAL_0: 1;

      end;

      ( len <*p1, p2, p3*>) = 3 by FINSEQ_1: 45;

      then 2 in ( dom <*p1, p2, p3*>) by FINSEQ_3: 25;

      hence thesis by A1, A4, Th2;

    end;

    theorem :: FINSEQ_6:23

    

     Th23: p1 <> p3 & p2 <> p3 implies (p3 .. <*p1, p2, p3*>) = 3

    proof

      assume that

       A1: p1 <> p3 and

       A2: p2 <> p3;

      

       A3: ( <*p1, p2, p3*> . 3) = p3 by FINSEQ_1: 45;

      

       A4: ( <*p1, p2, p3*> . 1) = p1 by FINSEQ_1: 45;

      

       A5: ( <*p1, p2, p3*> . 2) = p2 by FINSEQ_1: 45;

       A6:

      now

        let i;

        assume 1 <= i;

        then

         A7: i <> 0 ;

        assume i < (2 + 1);

        then i <= 2 by NAT_1: 13;

        then i = 0 or ... or i = 2;

        hence ( <*p1, p2, p3*> . i) <> ( <*p1, p2, p3*> . 3) by A1, A2, A3, A5, A4, A7;

      end;

      3 <= ( len <*p1, p2, p3*>) by FINSEQ_1: 45;

      then 3 in ( dom <*p1, p2, p3*>) by FINSEQ_3: 25;

      hence thesis by A3, A6, Th2;

    end;

    theorem :: FINSEQ_6:24

    

     Th24: for f be FinSequence holds ( Rev ( <*p*> ^ f)) = (( Rev f) ^ <*p*>)

    proof

      let f be FinSequence;

      

      thus ( Rev ( <*p*> ^ f)) = (( Rev f) ^ ( Rev <*p*>)) by FINSEQ_5: 64

      .= (( Rev f) ^ <*p*>) by FINSEQ_5: 60;

    end;

    theorem :: FINSEQ_6:25

    for f be FinSequence holds ( Rev ( Rev f)) = f;

    theorem :: FINSEQ_6:26

    

     Th26: x <> y implies ( <*x, y*> -| y) = <*x*>

    proof

      assume x <> y;

      then (y .. <*x, y*>) = (1 + 1) by Th20;

      then

       A1: 1 = ((y .. <*x, y*>) - 1);

      ( rng <*x, y*>) = {x, y} by Lm1;

      then y in ( rng <*x, y*>) by TARSKI:def 2;

      

      hence ( <*x, y*> -| y) = ( <*x, y*> | ( Seg 1)) by A1, FINSEQ_4: 33

      .= <*x*> by Th3;

    end;

    theorem :: FINSEQ_6:27

    

     Th27: x <> y implies ( <*x, y, z*> -| y) = <*x*>

    proof

      assume x <> y;

      then (y .. <*x, y, z*>) = (1 + 1) by Th22;

      then

       A1: 1 = ((y .. <*x, y, z*>) - 1);

      ( rng <*x, y, z*>) = {x, y, z} by Lm2;

      then y in ( rng <*x, y, z*>) by ENUMSET1:def 1;

      

      hence ( <*x, y, z*> -| y) = ( <*x, y, z*> | ( Seg 1)) by A1, FINSEQ_4: 33

      .= <*x*> by Th4;

    end;

    theorem :: FINSEQ_6:28

    

     Th28: x <> z & y <> z implies ( <*x, y, z*> -| z) = <*x, y*>

    proof

      assume that

       A1: x <> z and

       A2: y <> z;

      ( rng <*x, y, z*>) = {x, y, z} by Lm2;

      then

       A3: z in ( rng <*x, y, z*>) by ENUMSET1:def 1;

      (z .. <*x, y, z*>) = (2 + 1) by A1, A2, Th23;

      then 2 = ((z .. <*x, y, z*>) - 1);

      

      hence ( <*x, y, z*> -| z) = ( <*x, y, z*> | ( Seg 2)) by A3, FINSEQ_4: 33

      .= <*x, y*> by Th5;

    end;

    theorem :: FINSEQ_6:29

    ( <*x, y*> |-- x) = <*y*>

    proof

      

       A1: (x .. <*x, y*>) = 1 by Th19;

      

      then (( len <*y*>) + (x .. <*x, y*>)) = (1 + 1) by FINSEQ_1: 40

      .= ( len <*x, y*>) by FINSEQ_1: 44;

      then

       A2: ( len <*y*>) = (( len <*x, y*>) - (x .. <*x, y*>));

       A3:

      now

        let k;

        assume k in ( dom <*y*>);

        then k in ( Seg 1) by FINSEQ_1: 38;

        then

         A4: k = 1 by FINSEQ_1: 2, TARSKI:def 1;

        

        hence ( <*y*> . k) = y by FINSEQ_1: 40

        .= ( <*x, y*> . (k + (x .. <*x, y*>))) by A1, A4, FINSEQ_1: 44;

      end;

      x in {x, y} by TARSKI:def 2;

      then x in ( rng <*x, y*>) by Lm1;

      hence thesis by A2, A3, FINSEQ_4:def 6;

    end;

    theorem :: FINSEQ_6:30

    

     Th30: x <> y implies ( <*x, y, z*> |-- y) = <*z*>

    proof

      assume x <> y;

      then

       A1: (y .. <*x, y, z*>) = 2 by Th22;

      

      then (( len <*z*>) + (y .. <*x, y, z*>)) = (1 + 2) by FINSEQ_1: 40

      .= ( len <*x, y, z*>) by FINSEQ_1: 45;

      then

       A2: ( len <*z*>) = (( len <*x, y, z*>) - (y .. <*x, y, z*>));

       A3:

      now

        let k;

        assume k in ( dom <*z*>);

        then k in ( Seg 1) by FINSEQ_1: 38;

        then

         A4: k = 1 by FINSEQ_1: 2, TARSKI:def 1;

        

        hence ( <*z*> . k) = z by FINSEQ_1: 40

        .= ( <*x, y, z*> . (k + (y .. <*x, y, z*>))) by A1, A4, FINSEQ_1: 45;

      end;

      y in {x, y, z} by ENUMSET1:def 1;

      then y in ( rng <*x, y, z*>) by Lm2;

      hence thesis by A2, A3, FINSEQ_4:def 6;

    end;

    theorem :: FINSEQ_6:31

    ( <*x, y, z*> |-- x) = <*y, z*>

    proof

      

       A1: (x .. <*x, y, z*>) = 1 by Th21;

      

      then (( len <*y, z*>) + (x .. <*x, y, z*>)) = (2 + 1) by FINSEQ_1: 44

      .= ( len <*x, y, z*>) by FINSEQ_1: 45;

      then

       A2: ( len <*y, z*>) = (( len <*x, y, z*>) - (x .. <*x, y, z*>));

      

       A3: ( len <*y, z*>) = 2 by FINSEQ_1: 44;

       A4:

      now

        let k;

        assume k in ( dom <*y, z*>);

        then

         A5: k in ( Seg 2) by A3, FINSEQ_1:def 3;

        per cases by A5, FINSEQ_1: 2, TARSKI:def 2;

          suppose

           A6: k = 1;

          

          hence ( <*y, z*> . k) = y by FINSEQ_1: 44

          .= ( <*x, y, z*> . (k + (x .. <*x, y, z*>))) by A1, A6, FINSEQ_1: 45;

        end;

          suppose

           A7: k = 2;

          

          hence ( <*y, z*> . k) = z by FINSEQ_1: 44

          .= ( <*x, y, z*> . (k + (x .. <*x, y, z*>))) by A1, A7, FINSEQ_1: 45;

        end;

      end;

      x in {x, y, z} by ENUMSET1:def 1;

      then x in ( rng <*x, y, z*>) by Lm2;

      hence thesis by A2, A4, FINSEQ_4:def 6;

    end;

    theorem :: FINSEQ_6:32

    

     Th32: ( <*z*> |-- z) = {} & ( <*z*> -| z) = {}

    proof

      z in {z} by TARSKI:def 1;

      then

       A1: z in ( rng <*z*>) by FINSEQ_1: 39;

      

       A2: (z .. <*z*>) = 1 by Th18;

      ( len <*z*>) = 1 by FINSEQ_1: 39;

      hence ( <*z*> |-- z) = {} by A1, A2, FINSEQ_4: 49;

      thus thesis by A1, A2, FINSEQ_4: 40;

    end;

    theorem :: FINSEQ_6:33

    

     Th33: x <> y implies ( <*x, y*> |-- y) = {}

    proof

      y in {x, y} by TARSKI:def 2;

      then

       A1: y in ( rng <*x, y*>) by Lm1;

      assume x <> y;

      then

       A2: (y .. <*x, y*>) = 2 by Th20;

      ( len <*x, y*>) = 2 by FINSEQ_1: 44;

      hence thesis by A1, A2, FINSEQ_4: 49;

    end;

    theorem :: FINSEQ_6:34

    

     Th34: x <> z & y <> z implies ( <*x, y, z*> |-- z) = {}

    proof

      assume that

       A1: x <> z and

       A2: y <> z;

      

       A3: ( len <*x, y, z*>) = 3 by FINSEQ_1: 45;

      z in {x, y, z} by ENUMSET1:def 1;

      then

       A4: z in ( rng <*x, y, z*>) by Lm2;

      (z .. <*x, y, z*>) = 3 by A1, A2, Th23;

      hence thesis by A4, A3, FINSEQ_4: 49;

    end;

    theorem :: FINSEQ_6:35

    

     Th35: x in ( rng f) & y in ( rng (f -| x)) implies ((f -| x) -| y) = (f -| y)

    proof

      assume that

       A1: x in ( rng f) and

       A2: y in ( rng (f -| x));

      

      thus (f -| y) = ((((f -| x) ^ <*x*>) ^ (f |-- x)) -| y) by A1, FINSEQ_4: 51

      .= (((f -| x) ^ ( <*x*> ^ (f |-- x))) -| y) by FINSEQ_1: 32

      .= ((f -| x) -| y) by A2, Th12;

    end;

    theorem :: FINSEQ_6:36

    

     Th36: not x in ( rng f1) implies (x .. ((f1 ^ <*x*>) ^ f2)) = (( len f1) + 1)

    proof

      x in {x} by TARSKI:def 1;

      then

       A1: x in ( rng <*x*>) by FINSEQ_1: 38;

      assume not x in ( rng f1);

      then x in (( rng <*x*>) \ ( rng f1)) by A1, XBOOLE_0:def 5;

      

      then

       A2: ((f1 ^ <*x*>) |-- x) = ( <*x*> |-- x) by Th9

      .= {} by Th32;

      ( rng (f1 ^ <*x*>)) = (( rng f1) \/ ( rng <*x*>)) by FINSEQ_1: 31;

      then

       A3: x in ( rng (f1 ^ <*x*>)) by A1, XBOOLE_0:def 3;

      

      then (( len (f1 ^ <*x*>)) - (x .. (f1 ^ <*x*>))) = ( len ((f1 ^ <*x*>) |-- x)) by FINSEQ_4:def 6

      .= 0 by A2;

      

      hence (x .. ((f1 ^ <*x*>) ^ f2)) = ( len (f1 ^ <*x*>)) by A3, Th6

      .= (( len f1) + ( len <*x*>)) by FINSEQ_1: 22

      .= (( len f1) + 1) by FINSEQ_1: 39;

    end;

    theorem :: FINSEQ_6:37

    

     Th37: f just_once_values x implies ((x .. f) + (x .. ( Rev f))) = (( len f) + 1)

    proof

      assume

       A1: f just_once_values x;

      then

       A2: x in ( rng f) by FINSEQ_4: 5;

      then

       A3: f = (((f -| x) ^ <*x*>) ^ (f |-- x)) by FINSEQ_4: 51;

      

      then

       A4: ( len f) = (( len ((f -| x) ^ <*x*>)) + ( len (f |-- x))) by FINSEQ_1: 22

      .= ((( len (f -| x)) + ( len <*x*>)) + ( len (f |-- x))) by FINSEQ_1: 22

      .= ((( len (f -| x)) + 1) + ( len (f |-- x))) by FINSEQ_1: 39;

       not x in ( rng (f |-- x)) by A1, FINSEQ_4: 45;

      then

       A5: not x in ( rng ( Rev (f |-- x))) by FINSEQ_5: 57;

      ( Rev f) = (( Rev (f |-- x)) ^ ( Rev ((f -| x) ^ <*x*>))) by A3, FINSEQ_5: 64

      .= (( Rev (f |-- x)) ^ ( <*x*> ^ ( Rev (f -| x)))) by FINSEQ_5: 63

      .= ((( Rev (f |-- x)) ^ <*x*>) ^ ( Rev (f -| x))) by FINSEQ_1: 32;

      then

       A6: (x .. ( Rev f)) = (( len ( Rev (f |-- x))) + 1) by A5, Th36;

      (( len (f -| x)) + 1) = (((x .. f) - 1) + 1) by A2, FINSEQ_4: 34

      .= (x .. f);

      

      hence ((x .. f) + (x .. ( Rev f))) = (((( len (f -| x)) + 1) + ( len ( Rev (f |-- x)))) + 1) by A6

      .= (( len f) + 1) by A4, FINSEQ_5:def 3;

    end;

    theorem :: FINSEQ_6:38

    

     Th38: f just_once_values x implies ( Rev (f -| x)) = (( Rev f) |-- x)

    proof

      

       A1: ( len ( Rev (f -| x))) = ( len (f -| x)) by FINSEQ_5:def 3;

      assume

       A2: f just_once_values x;

      then

       A3: x in ( rng f) by FINSEQ_4: 5;

      then

       A4: x in ( rng ( Rev f)) by FINSEQ_5: 57;

      

       A5: ((x .. f) + (x .. ( Rev f))) = (( len f) + 1) by A2, Th37;

       A6:

      now

        let k;

        consider m be Nat such that m = ((x .. f) - 1) and

         A7: (f -| x) = (f | ( Seg m)) by A3, FINSEQ_4:def 5;

        assume

         A8: k in ( dom ( Rev (f -| x)));

        then

         A9: 1 <= k by FINSEQ_3: 25;

        then

         A10: ((x .. f) - k) <= ((x .. f) - 1) by XREAL_1: 13;

        

         A11: ( len (f -| x)) = ((x .. f) - 1) by A3, FINSEQ_4: 34;

        k in ( dom (f -| x)) by A8, FINSEQ_5: 57;

        then k <= ((x .. f) - 1) by A11, FINSEQ_3: 25;

        then

         A12: (k + 1) <= (x .. f) by XREAL_1: 19;

        then k < (x .. f) by NAT_1: 13;

        then (k + (x .. ( Rev f))) < (( len f) + 1) by A5, XREAL_1: 6;

        then (k + (x .. ( Rev f))) <= ( len f) by NAT_1: 13;

        then

         A13: (k + (x .. ( Rev f))) <= ( len ( Rev f)) by FINSEQ_5:def 3;

        

         A14: 1 <= ((x .. f) - k) by A12, XREAL_1: 19;

        then ((x .. f) - k) in NAT by INT_1: 5, XREAL_1: 49;

        then

         A15: ((((x .. f) - 1) - k) + 1) in ( dom (f | ( Seg m))) by A7, A11, A14, A10, FINSEQ_3: 25;

        k <= (k + (x .. ( Rev f))) by NAT_1: 11;

        then 1 <= (k + (x .. ( Rev f))) by A9, XXREAL_0: 2;

        then

         A16: (k + (x .. ( Rev f))) in ( dom ( Rev f)) by A13, FINSEQ_3: 25;

        

        thus (( Rev (f -| x)) . k) = ((f -| x) . ((((x .. f) - 1) - k) + 1)) by A8, A11, FINSEQ_5:def 3

        .= (f . ((( len f) - (k + (x .. ( Rev f)))) + 1)) by A5, A7, A15, FUNCT_1: 47

        .= (( Rev f) . (k + (x .. ( Rev f)))) by A16, FINSEQ_5:def 3;

      end;

      ( len (f -| x)) = ((x .. f) - 1) by A3, FINSEQ_4: 34

      .= (( len f) - (x .. ( Rev f))) by A5

      .= (( len ( Rev f)) - (x .. ( Rev f))) by FINSEQ_5:def 3;

      hence thesis by A4, A1, A6, FINSEQ_4:def 6;

    end;

    theorem :: FINSEQ_6:39

    f just_once_values x implies ( Rev f) just_once_values x

    proof

      assume

       A1: f just_once_values x;

      then

       A2: x in ( rng f) by FINSEQ_4: 5;

      then not x in ( rng (f -| x)) by FINSEQ_4: 37;

      then not x in ( rng ( Rev (f -| x))) by FINSEQ_5: 57;

      then

       A3: not x in ( rng (( Rev f) |-- x)) by A1, Th38;

      x in ( rng ( Rev f)) by A2, FINSEQ_5: 57;

      hence thesis by A3, FINSEQ_4: 45;

    end;

    begin

    reserve D for non empty set,

p,p1,p2,p3 for Element of D,

f,f1,f2 for FinSequence of D;

    theorem :: FINSEQ_6:40

    

     Th40: p in ( rng f) implies (f -: p) = ((f -| p) ^ <*p*>)

    proof

      assume p in ( rng f);

      

      hence ((f -| p) ^ <*p*>) = (f | (p .. f)) by FINSEQ_5: 24

      .= (f -: p) by FINSEQ_5:def 1;

    end;

    theorem :: FINSEQ_6:41

    

     Th41: p in ( rng f) implies (f :- p) = ( <*p*> ^ (f |-- p))

    proof

      assume p in ( rng f);

      

      hence ( <*p*> ^ (f |-- p)) = ( <*p*> ^ (f /^ (p .. f))) by FINSEQ_5: 35

      .= (f :- p) by FINSEQ_5:def 2;

    end;

    theorem :: FINSEQ_6:42

    

     Th42: f <> {} implies (f /. 1) in ( rng f)

    proof

      assume f <> {} ;

      then 1 in ( dom f) by FINSEQ_5: 6;

      hence thesis by PARTFUN2: 2;

    end;

    theorem :: FINSEQ_6:43

    

     Th43: f <> {} implies ((f /. 1) .. f) = 1

    proof

      assume f <> {} ;

      then

       A1: 1 in ( dom f) by FINSEQ_5: 6;

      (f /. 1) in {(f /. 1)} by TARSKI:def 1;

      then

       A2: 1 in (f qua Relation of NAT , D " {(f /. 1)}) by A1, PARTFUN2: 26;

      (f " {(f /. 1)}) c= ( dom f) by RELAT_1: 132;

      then

       A3: (f " {(f /. 1)}) c= ( Seg ( len f)) by FINSEQ_1:def 3;

      

      thus ((f /. 1) .. f) = (( Sgm (f " {(f /. 1)})) . 1) by FINSEQ_4:def 4

      .= 1 by A3, A2, Th1;

    end;

    theorem :: FINSEQ_6:44

    

     Th44: f <> {} & (f /. 1) = p implies (f -: p) = <*p*> & (f :- p) = f

    proof

      assume that

       A1: f <> {} and

       A2: (f /. 1) = p;

      

       A3: p in ( rng f) by A1, A2, Th42;

      (p .. f) = 1 by A1, A2, Th43;

      then

       A4: (f -| p) = {} by A3, FINSEQ_4: 40;

      

      hence (f -: p) = ( {} ^ <*p*>) by A3, Th40

      .= <*p*> by FINSEQ_1: 34;

      

      thus f = (( {} ^ <*p*>) ^ (f |-- p)) by A3, A4, FINSEQ_4: 51

      .= ( <*p*> ^ (f |-- p)) by FINSEQ_1: 34

      .= (f :- p) by A3, Th41;

    end;

    theorem :: FINSEQ_6:45

    

     Th45: (( <*p1*> ^ f) /^ 1) = f

    proof

      

       A1: (( <*p1*> ^ f) /. 1) = p1 by FINSEQ_5: 15;

      1 in ( Seg 1);

      then

       A2: 1 in ( dom <*p1*>) by FINSEQ_1: 38;

      ( dom <*p1*>) c= ( dom ( <*p1*> ^ f)) by FINSEQ_1: 26;

      

      then ( <*(( <*p1*> ^ f) /. ( 0 + 1))*> ^ (( <*p1*> ^ f) /^ 1)) = (( <*p1*> ^ f) /^ 0 ) by A2, FINSEQ_5: 31

      .= ( <*p1*> ^ f);

      hence thesis by A1, FINSEQ_1: 33;

    end;

    theorem :: FINSEQ_6:46

    

     Th46: ( <*p1, p2*> /^ 1) = <*p2*> by Th45;

    theorem :: FINSEQ_6:47

    

     Th47: ( <*p1, p2, p3*> /^ 1) = <*p2, p3*>

    proof

       <*p1, p2, p3*> = ( <*p1*> ^ <*p2, p3*>) by FINSEQ_1: 43;

      hence thesis by Th45;

    end;

    theorem :: FINSEQ_6:48

    

     Th48: k in ( dom f) & (for i st 1 <= i & i < k holds (f /. i) <> (f /. k)) implies ((f /. k) .. f) = k

    proof

      assume that

       A1: k in ( dom f) and

       A2: for i st 1 <= i & i < k holds (f /. i) <> (f /. k);

      

       A3: (f /. k) in ( rng f) by A1, PARTFUN2: 2;

      assume

       A4: ((f /. k) .. f) <> k;

      ((f /. k) .. f) <= k by A1, FINSEQ_5: 39;

      then ((f /. k) .. f) < k by A4, XXREAL_0: 1;

      then (f /. ((f /. k) .. f)) <> (f /. k) by A2, A3, FINSEQ_4: 21;

      hence contradiction by A3, FINSEQ_5: 38;

    end;

    theorem :: FINSEQ_6:49

    

     Th49: p1 <> p2 implies ( <*p1, p2*> -: p2) = <*p1, p2*>

    proof

      assume

       A1: p1 <> p2;

      ( rng <*p1, p2*>) = {p1, p2} by Lm1;

      then p2 in ( rng <*p1, p2*>) by TARSKI:def 2;

      

      hence ( <*p1, p2*> -: p2) = (( <*p1, p2*> -| p2) ^ <*p2*>) by Th40

      .= <*p1, p2*> by A1, Th26;

    end;

    theorem :: FINSEQ_6:50

    

     Th50: p1 <> p2 implies ( <*p1, p2, p3*> -: p2) = <*p1, p2*>

    proof

      assume

       A1: p1 <> p2;

      ( rng <*p1, p2, p3*>) = {p1, p2, p3} by Lm2;

      then p2 in ( rng <*p1, p2, p3*>) by ENUMSET1:def 1;

      

      hence ( <*p1, p2, p3*> -: p2) = (( <*p1, p2, p3*> -| p2) ^ <*p2*>) by Th40

      .= <*p1, p2*> by A1, Th27;

    end;

    theorem :: FINSEQ_6:51

    

     Th51: p1 <> p3 & p2 <> p3 implies ( <*p1, p2, p3*> -: p3) = <*p1, p2, p3*>

    proof

      assume that

       A1: p1 <> p3 and

       A2: p2 <> p3;

      ( rng <*p1, p2, p3*>) = {p1, p2, p3} by Lm2;

      then p3 in ( rng <*p1, p2, p3*>) by ENUMSET1:def 1;

      

      hence ( <*p1, p2, p3*> -: p3) = (( <*p1, p2, p3*> -| p3) ^ <*p3*>) by Th40

      .= ( <*p1, p2*> ^ <*p3*>) by A1, A2, Th28

      .= <*p1, p2, p3*>;

    end;

    theorem :: FINSEQ_6:52

    ( <*p*> :- p) = <*p*> & ( <*p*> -: p) = <*p*>

    proof

      p in {p} by TARSKI:def 1;

      then

       A1: p in ( rng <*p*>) by FINSEQ_1: 39;

      

      hence ( <*p*> :- p) = ( <*p*> ^ ( <*p*> |-- p)) by Th41

      .= ( <*p*> ^ {} ) by Th32

      .= <*p*> by FINSEQ_1: 34;

      

      thus ( <*p*> -: p) = (( <*p*> -| p) ^ <*p*>) by A1, Th40

      .= ( {} ^ <*p*>) by Th32

      .= <*p*> by FINSEQ_1: 34;

    end;

    theorem :: FINSEQ_6:53

    

     Th53: p1 <> p2 implies ( <*p1, p2*> :- p2) = <*p2*>

    proof

      assume

       A1: p1 <> p2;

      p2 in {p1, p2} by TARSKI:def 2;

      then p2 in ( rng <*p1, p2*>) by Lm1;

      

      hence ( <*p1, p2*> :- p2) = ( <*p2*> ^ ( <*p1, p2*> |-- p2)) by Th41

      .= ( <*p2*> ^ {} ) by A1, Th33

      .= <*p2*> by FINSEQ_1: 34;

    end;

    theorem :: FINSEQ_6:54

    

     Th54: p1 <> p2 implies ( <*p1, p2, p3*> :- p2) = <*p2, p3*>

    proof

      assume

       A1: p1 <> p2;

      p2 in {p1, p2, p3} by ENUMSET1:def 1;

      then p2 in ( rng <*p1, p2, p3*>) by Lm2;

      

      hence ( <*p1, p2, p3*> :- p2) = ( <*p2*> ^ ( <*p1, p2, p3*> |-- p2)) by Th41

      .= <*p2, p3*> by A1, Th30;

    end;

    theorem :: FINSEQ_6:55

    

     Th55: p1 <> p3 & p2 <> p3 implies ( <*p1, p2, p3*> :- p3) = <*p3*>

    proof

      assume that

       A1: p1 <> p3 and

       A2: p2 <> p3;

      p3 in {p1, p2, p3} by ENUMSET1:def 1;

      then p3 in ( rng <*p1, p2, p3*>) by Lm2;

      

      hence ( <*p1, p2, p3*> :- p3) = ( <*p3*> ^ ( <*p1, p2, p3*> |-- p3)) by Th41

      .= ( <*p3*> ^ {} ) by A1, A2, Th34

      .= <*p3*> by FINSEQ_1: 34;

    end;

    theorem :: FINSEQ_6:56

    

     Th56: p in ( rng f) & (p .. f) > k implies (p .. f) = (k + (p .. (f /^ k)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) > k;

      reconsider i = ((p .. f) - k) as Element of NAT by A2, INT_1: 5;

      

       A3: (i + k) <= ( len f) by A1, FINSEQ_4: 21;

      then

       A4: i <= (( len f) - k) by XREAL_1: 19;

      k <= (k + i) by NAT_1: 11;

      then k <= ( len f) by A3, XXREAL_0: 2;

      then

       A5: i <= ( len (f /^ k)) by A4, RFINSEQ:def 1;

      i <> 0 by A2;

      then 1 <= i by NAT_1: 14;

      then

       A6: i in ( dom (f /^ k)) by A5, FINSEQ_3: 25;

      

       A7: (k + i) = (p .. f);

       A8:

      now

        let j be Nat such that

         A9: 1 <= j and

         A10: j < i;

        reconsider J = j as Nat;

        (k + j) >= j by NAT_1: 11;

        then

         A11: 1 <= (k + j) by A9, XXREAL_0: 2;

        j <= ( len (f /^ k)) by A5, A10, XXREAL_0: 2;

        then j in ( dom (f /^ k)) by A9, FINSEQ_3: 25;

        then

         A12: (f /. (k + j)) = ((f /^ k) /. j) by FINSEQ_5: 27;

        

         A13: (k + i) <= ( len f) by A1, FINSEQ_4: 21;

        (k + j) < (k + i) by A10, XREAL_1: 6;

        then (k + j) <= ( len f) by A13, XXREAL_0: 2;

        then

         A14: (k + J) in ( dom f) by A11, FINSEQ_3: 25;

        (k + j) < (p .. f) by A7, A10, XREAL_1: 6;

        then

         A15: (f /. (k + j)) <> p by A14, FINSEQ_5: 39;

        (f /. (k + i)) = ((f /^ k) /. i) by A6, FINSEQ_5: 27;

        hence ((f /^ k) /. j) <> ((f /^ k) /. i) by A1, A12, A15, FINSEQ_5: 38;

      end;

      ((f /^ k) /. i) = (f /. (k + i)) by A6, FINSEQ_5: 27

      .= p by A1, FINSEQ_5: 38;

      then ((p .. f) - k) = (p .. (f /^ k)) by A6, A8, Th48;

      hence thesis;

    end;

    theorem :: FINSEQ_6:57

    

     Th57: p in ( rng f) & (p .. f) > k implies p in ( rng (f /^ k))

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) > k;

      

       A3: (k + (p .. (f /^ k))) = (p .. f) by A1, A2, Th56;

      then (p .. (f /^ k)) <> 0 by A2;

      then

       A4: 1 <= (p .. (f /^ k)) by NAT_1: 14;

      (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

      then k <= ( len f) by A2, XXREAL_0: 2;

      then ( len (f /^ k)) = (( len f) - k) by RFINSEQ:def 1;

      then

       A5: (( len (f /^ k)) + k) = ( len f);

      (k + (p .. (f /^ k))) <= ( len f) by A1, A3, FINSEQ_4: 21;

      then (p .. (f /^ k)) <= ( len (f /^ k)) by A5, XREAL_1: 6;

      then

       A6: (p .. (f /^ k)) in ( dom (f /^ k)) by A4, FINSEQ_3: 25;

      then ((f /^ k) /. (p .. (f /^ k))) in ( rng (f /^ k)) by PARTFUN2: 2;

      then (f /. (k + (p .. (f /^ k)))) in ( rng (f /^ k)) by A6, FINSEQ_5: 27;

      hence thesis by A1, A3, FINSEQ_5: 38;

    end;

    theorem :: FINSEQ_6:58

    

     Th58: k < i & i in ( dom f) implies (f /. i) in ( rng (f /^ k))

    proof

      assume that

       A1: k < i and

       A2: i in ( dom f);

      reconsider j = (i - k) as Element of NAT by A1, INT_1: 5;

      j > 0 by A1, XREAL_1: 50;

      then

       A3: 1 <= j by NAT_1: 14;

      

       A4: i = (j + k);

      

       A5: i <= ( len f) by A2, FINSEQ_3: 25;

      then k <= ( len f) by A1, XXREAL_0: 2;

      then ( len (f /^ k)) = (( len f) - k) by RFINSEQ:def 1;

      then (( len (f /^ k)) + k) = ( len f);

      then j <= ( len (f /^ k)) by A4, A5, XREAL_1: 6;

      then

       A6: j in ( dom (f /^ k)) by A3, FINSEQ_3: 25;

      then (f /. i) = ((f /^ k) /. j) by A4, FINSEQ_5: 27;

      hence thesis by A6, PARTFUN2: 2;

    end;

    theorem :: FINSEQ_6:59

    

     Th59: p in ( rng f) & (p .. f) > k implies ((f /^ k) -: p) = ((f -: p) /^ k)

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) > k;

      

       A3: p in ( rng (f /^ k)) by A1, A2, Th57;

      (p .. f) = (k + (p .. (f /^ k))) by A1, A2, Th56;

      

      then

       A4: ( len ((f /^ k) -: p)) = ((p .. f) - k) by A3, FINSEQ_5: 42

      .= (( len (f -: p)) - k) by A1, FINSEQ_5: 42;

       A5:

      now

        let m be Nat;

        

         A6: (m + k) >= m by NAT_1: 11;

        reconsider M = m as Nat;

        assume

         A7: m in ( dom ((f /^ k) -: p));

        then m <= (( len (f -: p)) - k) by A4, FINSEQ_3: 25;

        then

         A8: (m + k) <= ( len (f -: p)) by XREAL_1: 19;

        1 <= m by A7, FINSEQ_3: 25;

        then 1 <= (m + k) by A6, XXREAL_0: 2;

        then

         A9: (M + k) in ( dom (f -: p)) by A8, FINSEQ_3: 25;

        ( len ((f /^ k) -: p)) = (p .. (f /^ k)) by A3, FINSEQ_5: 42;

        then

         A10: m in ( Seg (p .. (f /^ k))) by A7, FINSEQ_1:def 3;

        ((f /^ k) -: p) = ((f /^ k) | (p .. (f /^ k))) by FINSEQ_5:def 1;

        then

         A11: ( dom ((f /^ k) -: p)) c= ( dom (f /^ k)) by FINSEQ_5: 18;

        ( len (f -: p)) = (p .. f) by A1, FINSEQ_5: 42;

        then

         A12: (m + k) in ( Seg (p .. f)) by A9, FINSEQ_1:def 3;

        

        thus (((f /^ k) -: p) . m) = (((f /^ k) -: p) /. m) by A7, PARTFUN1:def 6

        .= ((f /^ k) /. m) by A3, A10, FINSEQ_5: 43

        .= (f /. (m + k)) by A7, A11, FINSEQ_5: 27

        .= ((f -: p) /. (M + k)) by A1, A12, FINSEQ_5: 43

        .= ((f -: p) . (m + k)) by A9, PARTFUN1:def 6;

      end;

      k <= ( len (f -: p)) by A1, A2, FINSEQ_5: 42;

      hence thesis by A4, A5, RFINSEQ:def 1;

    end;

    theorem :: FINSEQ_6:60

    

     Th60: p in ( rng f) & (p .. f) <> 1 implies ((f /^ 1) -: p) = ((f -: p) /^ 1)

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) <> 1;

      (p .. f) >= 1 by A1, FINSEQ_4: 21;

      then (p .. f) > 1 by A2, XXREAL_0: 1;

      hence thesis by A1, Th59;

    end;

    theorem :: FINSEQ_6:61

    

     Th61: p in ( rng (f :- p))

    proof

      ( rng <*p*>) = {p} by FINSEQ_1: 39;

      then

       A1: p in ( rng <*p*>) by TARSKI:def 1;

      (f :- p) = ( <*p*> ^ (f /^ (p .. f))) by FINSEQ_5:def 2;

      then ( rng (f :- p)) = (( rng <*p*>) \/ ( rng (f /^ (p .. f)))) by FINSEQ_1: 31;

      hence thesis by A1, XBOOLE_0:def 3;

    end;

    theorem :: FINSEQ_6:62

    

     Th62: x in ( rng f) & p in ( rng f) & (x .. f) >= (p .. f) implies x in ( rng (f :- p))

    proof

      assume that

       A1: x in ( rng f) and

       A2: p in ( rng f) and

       A3: (x .. f) >= (p .. f);

      per cases by A3, XXREAL_0: 1;

        suppose

         A4: (x .. f) > (p .. f);

        ( rng f) c= D by FINSEQ_1:def 4;

        then

        reconsider q = x as Element of D by A1;

        (f :- p) = ( <*p*> ^ (f /^ (p .. f))) by FINSEQ_5:def 2;

        then

         A5: ( rng (f :- p)) = (( rng <*p*>) \/ ( rng (f /^ (p .. f)))) by FINSEQ_1: 31;

        q in ( rng (f /^ (p .. f))) by A1, A4, Th57;

        hence thesis by A5, XBOOLE_0:def 3;

      end;

        suppose (x .. f) = (p .. f);

        

        then x = (f . (p .. f)) by A1, FINSEQ_4: 19

        .= p by A2, FINSEQ_4: 19;

        hence thesis by Th61;

      end;

    end;

    theorem :: FINSEQ_6:63

    

     Th63: p in ( rng f) & k <= ( len f) & k >= (p .. f) implies (f /. k) in ( rng (f :- p))

    proof

      assume that

       A1: p in ( rng f) and

       A2: k <= ( len f) and

       A3: k >= (p .. f);

      set x = (f /. k);

      per cases by A3, XXREAL_0: 1;

        suppose

         A4: k > (p .. f);

        reconsider q = x as Element of D;

        1 <= (p .. f) by A1, FINSEQ_4: 21;

        then 1 <= k by A3, XXREAL_0: 2;

        then k in ( dom f) by A2, FINSEQ_3: 25;

        then

         A5: q in ( rng (f /^ (p .. f))) by A4, Th58;

        (f :- p) = ( <*p*> ^ (f /^ (p .. f))) by FINSEQ_5:def 2;

        then ( rng (f :- p)) = (( rng <*p*>) \/ ( rng (f /^ (p .. f)))) by FINSEQ_1: 31;

        hence thesis by A5, XBOOLE_0:def 3;

      end;

        suppose k = (p .. f);

        then x = p by A1, FINSEQ_5: 38;

        hence thesis by Th61;

      end;

    end;

    theorem :: FINSEQ_6:64

    

     Th64: p in ( rng f1) implies ((f1 ^ f2) :- p) = ((f1 :- p) ^ f2)

    proof

      assume

       A1: p in ( rng f1);

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      

      hence ((f1 ^ f2) :- p) = ( <*p*> ^ ((f1 ^ f2) |-- p)) by Th41

      .= ( <*p*> ^ ((f1 |-- p) ^ f2)) by A1, Th8

      .= (( <*p*> ^ (f1 |-- p)) ^ f2) by FINSEQ_1: 32

      .= ((f1 :- p) ^ f2) by A1, Th41;

    end;

    theorem :: FINSEQ_6:65

    

     Th65: p in (( rng f2) \ ( rng f1)) implies ((f1 ^ f2) :- p) = (f2 :- p)

    proof

      assume

       A1: p in (( rng f2) \ ( rng f1));

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      

      hence ((f1 ^ f2) :- p) = ( <*p*> ^ ((f1 ^ f2) |-- p)) by Th41

      .= ( <*p*> ^ (f2 |-- p)) by A1, Th9

      .= (f2 :- p) by A1, Th41;

    end;

    theorem :: FINSEQ_6:66

    

     Th66: p in ( rng f1) implies ((f1 ^ f2) -: p) = (f1 -: p)

    proof

      assume

       A1: p in ( rng f1);

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      

      hence ((f1 ^ f2) -: p) = (((f1 ^ f2) -| p) ^ <*p*>) by Th40

      .= ((f1 -| p) ^ <*p*>) by A1, Th12

      .= (f1 -: p) by A1, Th40;

    end;

    theorem :: FINSEQ_6:67

    

     Th67: p in (( rng f2) \ ( rng f1)) implies ((f1 ^ f2) -: p) = (f1 ^ (f2 -: p))

    proof

      assume

       A1: p in (( rng f2) \ ( rng f1));

      ( rng (f1 ^ f2)) = (( rng f1) \/ ( rng f2)) by FINSEQ_1: 31;

      then p in ( rng (f1 ^ f2)) by A1, XBOOLE_0:def 3;

      

      hence ((f1 ^ f2) -: p) = (((f1 ^ f2) -| p) ^ <*p*>) by Th40

      .= ((f1 ^ (f2 -| p)) ^ <*p*>) by A1, Th15

      .= (f1 ^ ((f2 -| p) ^ <*p*>)) by FINSEQ_1: 32

      .= (f1 ^ (f2 -: p)) by A1, Th40;

    end;

    theorem :: FINSEQ_6:68

    ((f :- p) :- p) = (f :- p)

    proof

      

       A1: (( <*p*> ^ (f /^ (p .. f))) /. 1) = p by FINSEQ_5: 15;

      

      thus ((f :- p) :- p) = (( <*p*> ^ (f /^ (p .. f))) :- p) by FINSEQ_5:def 2

      .= ( <*p*> ^ (f /^ (p .. f))) by A1, Th44

      .= (f :- p) by FINSEQ_5:def 2;

    end;

    theorem :: FINSEQ_6:69

    

     Th69: p1 in ( rng f) & p2 in (( rng f) \ ( rng (f -: p1))) implies (f |-- p2) = ((f |-- p1) |-- p2)

    proof

      assume that

       A1: p1 in ( rng f) and

       A2: p2 in (( rng f) \ ( rng (f -: p1)));

       not p2 in ( rng (f -: p1)) by A2, XBOOLE_0:def 5;

      then

       A3: not p2 in ( rng ((f -| p1) ^ <*p1*>)) by A1, Th40;

      f = (((f -| p1) ^ <*p1*>) ^ (f |-- p1)) by A1, FINSEQ_4: 51;

      then ( rng f) = (( rng ((f -| p1) ^ <*p1*>)) \/ ( rng (f |-- p1))) by FINSEQ_1: 31;

      then p2 in ( rng (f |-- p1)) by A2, A3, XBOOLE_0:def 3;

      then

       A4: p2 in (( rng (f |-- p1)) \ ( rng ((f -| p1) ^ <*p1*>))) by A3, XBOOLE_0:def 5;

      

      thus (f |-- p2) = ((((f -| p1) ^ <*p1*>) ^ (f |-- p1)) |-- p2) by A1, FINSEQ_4: 51

      .= ((f |-- p1) |-- p2) by A4, Th9;

    end;

    theorem :: FINSEQ_6:70

    

     Th70: p in ( rng f) implies ( rng f) = (( rng (f -: p)) \/ ( rng (f :- p)))

    proof

      assume

       A1: p in ( rng f);

      then (f -: p) = ((f -| p) ^ <*p*>) by Th40;

      then

       A2: ( rng (f -: p)) = (( rng (f -| p)) \/ ( rng <*p*>)) by FINSEQ_1: 31;

      (f :- p) = ( <*p*> ^ (f |-- p)) by A1, Th41;

      then

       A3: ( rng (f :- p)) = (( rng <*p*>) \/ ( rng (f |-- p))) by FINSEQ_1: 31;

      f = (((f -| p) ^ <*p*>) ^ (f |-- p)) by A1, FINSEQ_4: 51;

      

      hence ( rng f) = (( rng ((f -| p) ^ <*p*>)) \/ ( rng (f |-- p))) by FINSEQ_1: 31

      .= ((( rng (f -| p)) \/ (( rng <*p*>) \/ ( rng <*p*>))) \/ ( rng (f |-- p))) by FINSEQ_1: 31

      .= (((( rng (f -| p)) \/ ( rng <*p*>)) \/ ( rng <*p*>)) \/ ( rng (f |-- p))) by XBOOLE_1: 4

      .= (( rng (f -: p)) \/ ( rng (f :- p))) by A2, A3, XBOOLE_1: 4;

    end;

    theorem :: FINSEQ_6:71

    

     Th71: p1 in ( rng f) & p2 in (( rng f) \ ( rng (f -: p1))) implies ((f :- p1) :- p2) = (f :- p2)

    proof

      assume that

       A1: p1 in ( rng f) and

       A2: p2 in (( rng f) \ ( rng (f -: p1)));

      

       A3: not p2 in ( rng (f -: p1)) by A2, XBOOLE_0:def 5;

      (f -: p1) = ((f -| p1) ^ <*p1*>) by A1, Th40;

      then ( rng (f -: p1)) = (( rng (f -| p1)) \/ ( rng <*p1*>)) by FINSEQ_1: 31;

      then

       A4: not p2 in ( rng <*p1*>) by A3, XBOOLE_0:def 3;

      ( rng f) = (( rng (f -: p1)) \/ ( rng (f :- p1))) by A1, Th70;

      then

       A5: p2 in ( rng (f :- p1)) by A2, A3, XBOOLE_0:def 3;

      (f :- p1) = ( <*p1*> ^ (f |-- p1)) by A1, Th41;

      then ( rng (f :- p1)) = (( rng <*p1*>) \/ ( rng (f |-- p1))) by FINSEQ_1: 31;

      then p2 in ( rng (f |-- p1)) by A5, A4, XBOOLE_0:def 3;

      then

       A6: p2 in (( rng (f |-- p1)) \ ( rng <*p1*>)) by A4, XBOOLE_0:def 5;

      

      thus ((f :- p1) :- p2) = ( <*p2*> ^ ((f :- p1) |-- p2)) by A5, Th41

      .= ( <*p2*> ^ (( <*p1*> ^ (f |-- p1)) |-- p2)) by A1, Th41

      .= ( <*p2*> ^ ((f |-- p1) |-- p2)) by A6, Th9

      .= ( <*p2*> ^ (f |-- p2)) by A1, A2, Th69

      .= (f :- p2) by A2, Th41;

    end;

    theorem :: FINSEQ_6:72

    

     Th72: p in ( rng f) implies (p .. (f -: p)) = (p .. f)

    proof

      assume

       A1: p in ( rng f);

      then

       A2: (p .. f) <= ( len (f -: p)) by FINSEQ_5: 42;

       A3:

      now

        (p .. f) <> 0 by A1, FINSEQ_4: 21;

        then (p .. f) in ( Seg (p .. f)) by FINSEQ_1: 3;

        then

         A4: ((f -: p) /. (p .. f)) = (f /. (p .. f)) by A1, FINSEQ_5: 43;

        let i such that

         A5: 1 <= i and

         A6: i < (p .. f);

        i in ( Seg (p .. f)) by A5, A6;

        then

         A7: ((f -: p) /. i) = (f /. i) by A1, FINSEQ_5: 43;

        (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

        then i <= ( len f) by A6, XXREAL_0: 2;

        then

         A8: i in ( dom f) by A5, FINSEQ_3: 25;

        (f /. (p .. f)) = p by A1, FINSEQ_5: 38;

        hence ((f -: p) /. i) <> ((f -: p) /. (p .. f)) by A6, A7, A4, A8, FINSEQ_5: 39;

      end;

      1 <= (p .. f) by A1, FINSEQ_4: 21;

      then

       A9: (p .. f) in ( dom (f -: p)) by A2, FINSEQ_3: 25;

      ((f -: p) /. (p .. f)) = p by A1, FINSEQ_5: 45;

      hence thesis by A9, A3, Th48;

    end;

    theorem :: FINSEQ_6:73

    ((f | i) | i) = (f | i);

    theorem :: FINSEQ_6:74

    

     Th74: p in ( rng f) implies ((f -: p) -: p) = (f -: p)

    proof

      assume p in ( rng f);

      then

       A1: (p .. (f -: p)) = (p .. f) by Th72;

      

      thus ((f -: p) -: p) = ((f -: p) | (p .. (f -: p))) by FINSEQ_5:def 1

      .= ((f | (p .. f)) | (p .. f)) by A1, FINSEQ_5:def 1

      .= (f -: p) by FINSEQ_5:def 1;

    end;

    theorem :: FINSEQ_6:75

    

     Th75: p1 in ( rng f) & p2 in ( rng (f -: p1)) implies ((f -: p1) -: p2) = (f -: p2)

    proof

      assume that

       A1: p1 in ( rng f) and

       A2: p2 in ( rng (f -: p1));

      per cases ;

        suppose p1 = p2;

        hence thesis by A1, Th74;

      end;

        suppose p1 <> p2;

        then not p2 in {p1} by TARSKI:def 1;

        then

         A3: not p2 in ( rng <*p1*>) by FINSEQ_1: 39;

        (f -: p1) = ((f -| p1) ^ <*p1*>) by A1, Th40;

        then ( rng (f -: p1)) = (( rng (f -| p1)) \/ ( rng <*p1*>)) by FINSEQ_1: 31;

        then

         A4: p2 in ( rng (f -| p1)) by A2, A3, XBOOLE_0:def 3;

        

         A5: ( rng (f -| p1)) c= ( rng f) by A1, FINSEQ_4: 39;

        

        thus ((f -: p1) -: p2) = (((f -: p1) -| p2) ^ <*p2*>) by A2, Th40

        .= ((((f -| p1) ^ <*p1*>) -| p2) ^ <*p2*>) by A1, Th40

        .= (((f -| p1) -| p2) ^ <*p2*>) by A4, Th12

        .= ((f -| p2) ^ <*p2*>) by A1, A4, Th35

        .= (f -: p2) by A4, A5, Th40;

      end;

    end;

    theorem :: FINSEQ_6:76

    

     Th76: p in ( rng f) implies ((f -: p) ^ ((f :- p) /^ 1)) = f

    proof

      

       A1: ( rng f) c= D by FINSEQ_1:def 4;

      assume

       A2: p in ( rng f);

      then ( rng (f |-- p)) c= ( rng f) by FINSEQ_4: 44;

      then ( rng (f |-- p)) c= D by A1;

      then

      reconsider f1 = (f |-- p) as FinSequence of D by FINSEQ_1:def 4;

      

      thus ((f -: p) ^ ((f :- p) /^ 1)) = (((f -| p) ^ <*p*>) ^ ((f :- p) /^ 1)) by A2, Th40

      .= (((f -| p) ^ <*p*>) ^ (( <*p*> ^ f1) /^ 1)) by A2, Th41

      .= (((f -| p) ^ <*p*>) ^ (f |-- p)) by Th45

      .= f by A2, FINSEQ_4: 51;

    end;

    theorem :: FINSEQ_6:77

    

     Th77: f1 <> {} implies ((f1 ^ f2) /^ 1) = ((f1 /^ 1) ^ f2)

    proof

      assume f1 <> {} ;

      then

      consider p be Element of D, df1 be FinSequence of D such that p = (f1 . 1) and

       A1: f1 = ( <*p*> ^ df1) by FINSEQ_3: 102;

      

      thus ((f1 ^ f2) /^ 1) = (( <*p*> ^ (df1 ^ f2)) /^ 1) by A1, FINSEQ_1: 32

      .= (df1 ^ f2) by Th45

      .= ((f1 /^ 1) ^ f2) by A1, Th45;

    end;

    theorem :: FINSEQ_6:78

    

     Th78: p2 in ( rng f) & (p2 .. f) <> 1 implies p2 in ( rng (f /^ 1))

    proof

      assume that

       A1: p2 in ( rng f) and

       A2: (p2 .. f) <> 1;

      f = ( <*(f /. 1)*> ^ (f /^ 1)) by A1, FINSEQ_5: 29, RELAT_1: 38;

      then

       A3: ( rng f) = (( rng <*(f /. 1)*>) \/ ( rng (f /^ 1))) by FINSEQ_1: 31;

      assume not p2 in ( rng (f /^ 1));

      then p2 in ( rng <*(f /. 1)*>) by A1, A3, XBOOLE_0:def 3;

      then p2 in {(f /. 1)} by FINSEQ_1: 39;

      then p2 = (f /. 1) by TARSKI:def 1;

      hence contradiction by A1, A2, Th43, RELAT_1: 38;

    end;

    theorem :: FINSEQ_6:79

    

     Th79: (p .. (f :- p)) = 1

    proof

      ((f :- p) /. 1) = p by FINSEQ_5: 53;

      hence thesis by Th43;

    end;

    

     Lm3: p in ( rng f) & (p .. f) > i implies (i + (p .. (f /^ i))) = (p .. f)

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) > i;

      reconsider k = ((p .. f) - i) as Element of NAT by A2, INT_1: 5;

      

       A3: (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

      then

       A4: i <= ( len f) by A2, XXREAL_0: 2;

      ((p .. f) - i) <= (( len f) - i) by A3, XREAL_1: 9;

      then

       A5: k <= ( len (f /^ i)) by A4, RFINSEQ:def 1;

      k <> 0 by A2;

      then 1 <= k by NAT_1: 14;

      then

       A6: k in ( dom (f /^ i)) by A5, FINSEQ_3: 25;

       A7:

      now

        let j be Nat such that

         A8: 1 <= j and

         A9: j < k;

        j <= (i + j) by NAT_1: 11;

        then

         A10: 1 <= (i + j) by A8, XXREAL_0: 2;

        (i + k) = (p .. f);

        then

         A11: (i + j) < (p .. f) by A9, XREAL_1: 6;

        then (i + j) <= ( len f) by A3, XXREAL_0: 2;

        then

         A12: (i + j) in ( dom f) by A10, FINSEQ_3: 25;

        j <= ( len (f /^ i)) by A5, A9, XXREAL_0: 2;

        then j in ( dom (f /^ i)) by A8, FINSEQ_3: 25;

        then

         A13: (f . (i + j)) = ((f /^ i) . j) by A4, RFINSEQ:def 1;

        (f . (i + k)) = ((f /^ i) . k) by A4, A6, RFINSEQ:def 1;

        hence ((f /^ i) . j) <> ((f /^ i) . k) by A1, A13, A11, A12, FINSEQ_4: 19, FINSEQ_4: 24;

      end;

      ((f /^ i) . k) = (f . (k + i)) by A4, A6, RFINSEQ:def 1

      .= p by A1, FINSEQ_4: 19;

      then (p .. (f /^ i)) = k by A6, A7, Th2;

      hence thesis;

    end;

    theorem :: FINSEQ_6:80

    

     Th80: (( <*> D) /^ k) = ( <*> D)

    proof

      per cases ;

        suppose k = 0 ;

        hence thesis;

      end;

        suppose k > 0 ;

        then k > ( len ( <*> D));

        hence thesis by RFINSEQ:def 1;

      end;

    end;

    theorem :: FINSEQ_6:81

    

     Th81: (f /^ (i + k)) = ((f /^ i) /^ k)

    proof

      per cases ;

        suppose

         A1: (i + k) <= ( len f);

        i <= (i + k) by NAT_1: 11;

        then

         A2: i <= ( len f) by A1, XXREAL_0: 2;

        then

         A3: ( len (f /^ i)) = (( len f) - i) by RFINSEQ:def 1;

        then

         A4: k <= ( len (f /^ i)) by A1, XREAL_1: 19;

         A5:

        now

          let m be Nat;

          assume

           A6: m in ( dom ((f /^ i) /^ k));

          then

           A7: (m + k) in ( dom (f /^ i)) by FINSEQ_5: 26;

          

          thus (((f /^ i) /^ k) . m) = ((f /^ i) . (m + k)) by A4, A6, RFINSEQ:def 1

          .= (f . ((m + k) + i)) by A2, A7, RFINSEQ:def 1

          .= (f . (m + (i + k)));

        end;

        ( len ((f /^ i) /^ k)) = (( len (f /^ i)) - k) by A4, RFINSEQ:def 1

        .= (( len f) - (i + k)) by A3;

        hence thesis by A1, A5, RFINSEQ:def 1;

      end;

        suppose that

         A8: (i + k) > ( len f) and

         A9: i <= ( len f);

        ( len (f /^ i)) = (( len f) - i) by A9, RFINSEQ:def 1;

        then (( len (f /^ i)) + i) = ( len f);

        then

         A10: k > ( len (f /^ i)) by A8, XREAL_1: 6;

        

        thus (f /^ (i + k)) = ( <*> D) by A8, RFINSEQ:def 1

        .= ((f /^ i) /^ k) by A10, RFINSEQ:def 1;

      end;

        suppose that

         A11: (i + k) > ( len f) and

         A12: i > ( len f);

        

        thus (f /^ (i + k)) = ( <*> D) by A11, RFINSEQ:def 1

        .= (( <*> D) /^ k) by Th80

        .= ((f /^ i) /^ k) by A12, RFINSEQ:def 1;

      end;

    end;

    theorem :: FINSEQ_6:82

    

     Th82: p in ( rng f) & (p .. f) > k implies ((f /^ k) :- p) = (f :- p)

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) > k;

      

      thus ((f /^ k) :- p) = ( <*p*> ^ ((f /^ k) /^ (p .. (f /^ k)))) by FINSEQ_5:def 2

      .= ( <*p*> ^ (f /^ (k + (p .. (f /^ k))))) by Th81

      .= ( <*p*> ^ (f /^ (p .. f))) by A1, A2, Lm3

      .= (f :- p) by FINSEQ_5:def 2;

    end;

    theorem :: FINSEQ_6:83

    

     Th83: p in ( rng f) & (p .. f) <> 1 implies ((f /^ 1) :- p) = (f :- p)

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) <> 1;

      (p .. f) >= 1 by A1, FINSEQ_4: 21;

      then (p .. f) > 1 by A2, XXREAL_0: 1;

      hence thesis by A1, Th82;

    end;

    theorem :: FINSEQ_6:84

    

     Th84: (i + k) = ( len f) implies ( Rev (f /^ k)) = (( Rev f) | i)

    proof

      assume

       A1: (i + k) = ( len f);

      then

       A2: k <= ( len f) by NAT_1: 11;

      i <= ( len f) by A1, NAT_1: 11;

      then i <= ( len ( Rev f)) by FINSEQ_5:def 3;

      

      then

       A3: ( len (( Rev f) | i)) = (( len f) - k) by A1, FINSEQ_1: 59

      .= ( len (f /^ k)) by A2, RFINSEQ:def 1;

      now

        

         A4: ( len (f /^ k)) = (( len f) - k) by A2, RFINSEQ:def 1;

        let j be Nat;

        

         A5: ( dom (( Rev f) | i)) c= ( dom ( Rev f)) by FINSEQ_5: 18;

        assume

         A6: j in ( dom (( Rev f) | i));

        then j <= ( len (f /^ k)) by A3, FINSEQ_3: 25;

        then

        reconsider m = (( len (f /^ k)) - j) as Element of NAT by INT_1: 5;

        j >= 1 by A6, FINSEQ_3: 25;

        then (( len (f /^ k)) - j) <= (( len (f /^ k)) - 1) by XREAL_1: 10;

        then

         A7: ((( len (f /^ k)) - j) + 1) <= ( len (f /^ k)) by XREAL_1: 19;

        1 <= (m + 1) by NAT_1: 11;

        then

         A8: (m + 1) in ( dom (f /^ k)) by A7, FINSEQ_3: 25;

        

        thus ((( Rev f) | i) . j) = ((( Rev f) | i) /. j) by A6, PARTFUN1:def 6

        .= (( Rev f) /. j) by A6, FINSEQ_4: 70

        .= (( Rev f) . j) by A6, A5, PARTFUN1:def 6

        .= (f . (((( len (f /^ k)) + k) - j) + 1)) by A6, A5, A4, FINSEQ_5:def 3

        .= (f . ((m + 1) + k))

        .= ((f /^ k) . ((( len (f /^ k)) - j) + 1)) by A2, A8, RFINSEQ:def 1;

      end;

      hence thesis by A3, FINSEQ_5:def 3;

    end;

    theorem :: FINSEQ_6:85

    

     Th85: (i + k) = ( len f) implies ( Rev (f | k)) = (( Rev f) /^ i)

    proof

      assume (i + k) = ( len f);

      then

       A1: (i + k) = ( len ( Rev f)) by FINSEQ_5:def 3;

      

      thus ( Rev (f | k)) = ( Rev (( Rev ( Rev f)) | k))

      .= ( Rev ( Rev (( Rev f) /^ i))) by A1, Th84

      .= (( Rev f) /^ i);

    end;

    theorem :: FINSEQ_6:86

    

     Th86: f just_once_values p implies ( Rev (f |-- p)) = (( Rev f) -| p)

    proof

      assume

       A1: f just_once_values p;

      then

       A2: p in ( rng f) by FINSEQ_4: 5;

      then

       A3: p in ( rng ( Rev f)) by FINSEQ_5: 57;

      then

      reconsider n = ((p .. ( Rev f)) - 1) as Element of NAT by FINSEQ_4: 21, INT_1: 5;

      ((p .. f) + (p .. ( Rev f))) = (( len f) + 1) by A1, Th37;

      then

       A4: (n + (p .. f)) = ( len f);

      ( Rev (f |-- p)) = ( Rev (f /^ (p .. f))) by A2, FINSEQ_5: 35

      .= (( Rev f) | n) by A4, Th84

      .= (( Rev f) | ( Seg n));

      hence thesis by A3, FINSEQ_4:def 5;

    end;

    theorem :: FINSEQ_6:87

    

     Th87: f just_once_values p implies ( Rev (f :- p)) = (( Rev f) -: p)

    proof

      assume

       A1: f just_once_values p;

      then

       A2: p in ( rng f) by FINSEQ_4: 5;

      then

       A3: p in ( rng ( Rev f)) by FINSEQ_5: 57;

      

      thus ( Rev (f :- p)) = ( Rev ( <*p*> ^ (f |-- p))) by A2, Th41

      .= (( Rev (f |-- p)) ^ <*p*>) by Th24

      .= ((( Rev f) -| p) ^ <*p*>) by A1, Th86

      .= (( Rev f) -: p) by A3, Th40;

    end;

    theorem :: FINSEQ_6:88

    

     Th88: f just_once_values p implies ( Rev (f -: p)) = (( Rev f) :- p)

    proof

      assume

       A1: f just_once_values p;

      then

       A2: p in ( rng f) by FINSEQ_4: 5;

      then

       A3: p in ( rng ( Rev f)) by FINSEQ_5: 57;

      

      thus ( Rev (f -: p)) = ( Rev ((f -| p) ^ <*p*>)) by A2, Th40

      .= ( <*p*> ^ ( Rev (f -| p))) by FINSEQ_5: 63

      .= ( <*p*> ^ (( Rev f) |-- p)) by A1, Th38

      .= (( Rev f) :- p) by A3, Th41;

    end;

    begin

    definition

      let D be non empty set;

      let IT be FinSequence of D;

      :: FINSEQ_6:def1

      attr IT is circular means

      : Def1A: (IT /. 1) = (IT /. ( len IT));

    end

    definition

      let D, f, p;

      :: FINSEQ_6:def2

      func Rotate (f,p) -> FinSequence of D equals

      : Def2: ((f :- p) ^ ((f -: p) /^ 1)) if p in ( rng f)

      otherwise f;

      correctness ;

    end

    registration

      let D;

      let f be non empty FinSequence of D, p be Element of D;

      cluster ( Rotate (f,p)) -> non empty;

      coherence

      proof

        per cases ;

          suppose

           A1: p in ( rng f);

          ((f :- p) ^ ((f -: p) /^ 1)) is non empty;

          hence thesis by A1, Def2;

        end;

          suppose not p in ( rng f);

          hence thesis by Def2;

        end;

      end;

    end

    registration

      let D;

      cluster circular1 -element for FinSequence of D;

      existence

      proof

        set d = the Element of D;

        take <*d*>;

        thus <*d*> is circular by FINSEQ_1: 39;

        thus thesis;

      end;

      cluster circular non trivial for FinSequence of D;

      existence

      proof

        set d = the Element of D;

        take <*d, d*>;

        ( len <*d, d*>) = 2 by FINSEQ_1: 44;

        

        then ( <*d, d*> /. ( len <*d, d*>)) = d by FINSEQ_4: 17

        .= ( <*d, d*> /. 1) by FINSEQ_4: 17;

        hence <*d, d*> is circular;

        thus thesis;

      end;

    end

    theorem :: FINSEQ_6:89

    

     Th89: ( Rotate (f,(f /. 1))) = f

    proof

      

       A1: ( len <*(f /. 1)*>) = 1 by FINSEQ_1: 39;

      per cases ;

        suppose

         A2: f is non empty;

        then (f /. 1) in ( rng f) by Th42;

        

        hence ( Rotate (f,(f /. 1))) = ((f :- (f /. 1)) ^ ((f -: (f /. 1)) /^ 1)) by Def2

        .= (f ^ ((f -: (f /. 1)) /^ 1)) by A2, Th44

        .= (f ^ ( <*(f /. 1)*> /^ 1)) by A2, Th44

        .= (f ^ {} ) by A1, FINSEQ_5: 32

        .= f by FINSEQ_1: 34;

      end;

        suppose f is empty;

        hence thesis by Def2, RELAT_1: 38;

      end;

    end;

    registration

      let D, p;

      let f be circular non empty FinSequence of D;

      cluster ( Rotate (f,p)) -> circular;

      coherence

      proof

        per cases ;

          suppose not p in ( rng f);

          hence thesis by Def2;

        end;

          suppose that

           A1: p in ( rng f) and

           A2: p <> (f /. 1);

          

           A3: (p .. f) >= 1 by A1, FINSEQ_4: 21;

          

           A4: ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by A1, Def2;

          (p .. f) <> 1 by A1, A2, FINSEQ_5: 38;

          then (p .. f) > 1 by A3, XXREAL_0: 1;

          then (p .. f) >= (1 + 1) by NAT_1: 13;

          then

           A5: ( len (f -: p)) >= (1 + 1) by A1, FINSEQ_5: 42;

          then 1 <= ( len (f -: p)) by XXREAL_0: 2;

          then

           A6: ( len ((f -: p) /^ 1)) = (( len (f -: p)) - 1) by RFINSEQ:def 1;

          then (( len ((f -: p) /^ 1)) + 1) = ( len (f -: p));

          then ( len ((f -: p) /^ 1)) >= 1 by A5, XREAL_1: 6;

          then

           A7: ( len ((f -: p) /^ 1)) in ( dom ((f -: p) /^ 1)) by FINSEQ_3: 25;

          1 in ( dom (f :- p)) by FINSEQ_5: 6;

          

          hence (( Rotate (f,p)) /. 1) = ((f :- p) /. 1) by A4, FINSEQ_4: 68

          .= p by FINSEQ_5: 53

          .= ((f -: p) /. (p .. f)) by A1, FINSEQ_5: 45

          .= ((f -: p) /. (( len ((f -: p) /^ 1)) + 1)) by A1, A6, FINSEQ_5: 42

          .= (((f -: p) /^ 1) /. ( len ((f -: p) /^ 1))) by A7, FINSEQ_5: 27

          .= (((f :- p) ^ ((f -: p) /^ 1)) /. (( len (f :- p)) + ( len ((f -: p) /^ 1)))) by A7, FINSEQ_4: 69

          .= (( Rotate (f,p)) /. ( len ( Rotate (f,p)))) by A4, FINSEQ_1: 22;

        end;

          suppose p in ( rng f) & p = (f /. 1);

          hence thesis by Th89;

        end;

      end;

    end

    theorem :: FINSEQ_6:90

    

     Th90: f is circular & p in ( rng f) implies ( rng ( Rotate (f,p))) = ( rng f)

    proof

      assume that

       A1: f is circular and

       A2: p in ( rng f);

      

       A3: ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by A2, Def2;

      

       A4: ( rng ((f -: p) /^ 1)) c= ( rng (f -: p)) by FINSEQ_5: 33;

      ( rng (f -: p)) c= ( rng f) by FINSEQ_5: 48;

      then

       A5: ( rng ((f -: p) /^ 1)) c= ( rng f) by A4;

      

       A6: ( rng ((f :- p) ^ ((f -: p) /^ 1))) = (( rng (f :- p)) \/ ( rng ((f -: p) /^ 1))) by FINSEQ_1: 31;

      ( rng (f :- p)) c= ( rng f) by A2, FINSEQ_5: 55;

      hence ( rng ( Rotate (f,p))) c= ( rng f) by A3, A6, A5, XBOOLE_1: 8;

      let x be object;

      assume x in ( rng f);

      then

      consider i be Nat such that

       A7: i in ( dom f) and

       A8: (f . i) = x by FINSEQ_2: 10;

      

       A9: x = (f /. i) by A7, A8, PARTFUN1:def 6;

      per cases ;

        suppose

         A10: i = 1;

        ( len (f :- p)) = ( len ( <*p*> ^ (f /^ (p .. f)))) by FINSEQ_5:def 2

        .= (( len <*p*>) + ( len (f /^ (p .. f)))) by FINSEQ_1: 22

        .= (1 + ( len (f /^ (p .. f)))) by FINSEQ_1: 39;

        then 1 <= ( len (f :- p)) by NAT_1: 11;

        then

         A11: ( len (f :- p)) in ( dom (f :- p)) by FINSEQ_3: 25;

        x = ((f :- p) /. ( len (f :- p))) by A2, FINSEQ_5: 54, A1, A9, A10;

        then x in ( rng (f :- p)) by A11, PARTFUN2: 2;

        hence thesis by A3, A6, XBOOLE_0:def 3;

      end;

        suppose that

         A12: i <= (p .. f) and

         A13: i <> 1;

        

         A14: i <> 0 by A7, FINSEQ_3: 25;

        then

         A15: i > ( 0 + 1) by A13, NAT_1: 25;

        then

         A16: i in ( Seg (p .. f)) by A12;

        consider j be Nat such that

         A17: i = (j + 1) by A14, NAT_1: 6;

        

         A18: j >= 1 by A15, A17, NAT_1: 14;

        

         A19: i <= ( len (f -: p)) by A2, A12, FINSEQ_5: 42;

        then 1 <= ( len (f -: p)) by A14, NAT_1: 25, XXREAL_0: 2;

        then ( len ((f -: p) /^ 1)) = (( len (f -: p)) - 1) by RFINSEQ:def 1;

        then (( len ((f -: p) /^ 1)) + 1) = ( len (f -: p));

        then j <= ( len ((f -: p) /^ 1)) by A17, A19, XREAL_1: 6;

        then

         A20: j in ( dom ((f -: p) /^ 1)) by A18, FINSEQ_3: 25;

        

         A21: ( len <*((f -: p) /. 1)*>) = 1 by FINSEQ_1: 39;

        (f -: p) = ( <*((f -: p) /. 1)*> ^ ((f -: p) /^ 1)) by A2, FINSEQ_5: 29, FINSEQ_5: 47;

        

        then (((f -: p) /^ 1) /. j) = ((f -: p) /. i) by A17, A20, A21, FINSEQ_4: 69

        .= (f /. i) by A2, A16, FINSEQ_5: 43;

        then x in ( rng ((f -: p) /^ 1)) by A9, A20, PARTFUN2: 2;

        hence thesis by A3, A6, XBOOLE_0:def 3;

      end;

        suppose i > (p .. f);

        then

        reconsider j = (i - (p .. f)) as Element of NAT by INT_1: 5;

        

         A22: (j + 1) >= 1 by NAT_1: 11;

        i <= ( len f) by A7, FINSEQ_3: 25;

        then

         A23: j <= (( len f) - (p .. f)) by XREAL_1: 9;

        ( len (f :- p)) = ((( len f) - (p .. f)) + 1) by A2, FINSEQ_5: 50;

        then (j + 1) <= ( len (f :- p)) by A23, XREAL_1: 6;

        then

         A24: (j + 1) in ( dom (f :- p)) by A22, FINSEQ_3: 25;

        (j + (p .. f)) = i;

        then (f /. i) = ((f :- p) /. (j + 1)) by A2, A24, FINSEQ_5: 52;

        then x in ( rng (f :- p)) by A9, A24, PARTFUN2: 2;

        hence thesis by A3, A6, XBOOLE_0:def 3;

      end;

    end;

    theorem :: FINSEQ_6:91

    

     Th91: p in ( rng f) implies p in ( rng ( Rotate (f,p)))

    proof

      p in {p} by TARSKI:def 1;

      then p in ( rng <*p*>) by FINSEQ_1: 39;

      then p in (( rng <*p*>) \/ ( rng (f /^ (p .. f)))) by XBOOLE_0:def 3;

      then p in ( rng ( <*p*> ^ (f /^ (p .. f)))) by FINSEQ_1: 31;

      then

       A1: p in ( rng (f :- p)) by FINSEQ_5:def 2;

      assume p in ( rng f);

      then ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by Def2;

      then ( rng ( Rotate (f,p))) = (( rng (f :- p)) \/ ( rng ((f -: p) /^ 1))) by FINSEQ_1: 31;

      hence thesis by A1, XBOOLE_0:def 3;

    end;

    theorem :: FINSEQ_6:92

    

     Th92: p in ( rng f) implies (( Rotate (f,p)) /. 1) = p

    proof

      assume p in ( rng f);

      

      then ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by Def2

      .= (( <*p*> ^ (f /^ (p .. f))) ^ ((f -: p) /^ 1)) by FINSEQ_5:def 2

      .= ( <*p*> ^ ((f /^ (p .. f)) ^ ((f -: p) /^ 1))) by FINSEQ_1: 32;

      hence thesis by FINSEQ_5: 15;

    end;

    theorem :: FINSEQ_6:93

    

     Th93: ( Rotate (( Rotate (f,p)),p)) = ( Rotate (f,p))

    proof

      per cases ;

        suppose

         A1: p in ( rng f);

        then

        reconsider f9 = f as non empty FinSequence of D;

        

         A2: (( Rotate (f,p)) /. 1) = p by A1, Th92;

        then

         A3: (( Rotate (f9,p)) :- p) = ( Rotate (f,p)) by Th44;

        

         A4: p in ( rng ( Rotate (f,p))) by A1, Th91;

        

         A5: ( len <*p*>) = 1 by FINSEQ_1: 39;

        (( Rotate (f9,p)) -: p) = <*p*> by A2, Th44;

        

        hence ( Rotate (( Rotate (f,p)),p)) = (( Rotate (f,p)) ^ ( <*p*> /^ 1)) by A3, A4, Def2

        .= (( Rotate (f,p)) ^ {} ) by A5, FINSEQ_5: 32

        .= ( Rotate (f,p)) by FINSEQ_1: 34;

      end;

        suppose not p in ( rng f);

        hence thesis by Def2;

      end;

    end;

    theorem :: FINSEQ_6:94

    ( Rotate ( <*p*>,p)) = <*p*>

    proof

      ( <*p*> /. 1) = p by FINSEQ_4: 16;

      hence thesis by Th89;

    end;

    theorem :: FINSEQ_6:95

    

     Th95: ( Rotate ( <*p1, p2*>,p1)) = <*p1, p2*>

    proof

      ( <*p1, p2*> /. 1) = p1 by FINSEQ_4: 17;

      hence thesis by Th89;

    end;

    theorem :: FINSEQ_6:96

    ( Rotate ( <*p1, p2*>,p2)) = <*p2, p2*>

    proof

      per cases ;

        suppose p1 = p2;

        hence thesis by Th95;

      end;

        suppose

         A1: p1 <> p2;

        ( rng <*p1, p2*>) = {p1, p2} by Lm1;

        then p2 in ( rng <*p1, p2*>) by TARSKI:def 2;

        

        hence ( Rotate ( <*p1, p2*>,p2)) = (( <*p1, p2*> :- p2) ^ (( <*p1, p2*> -: p2) /^ 1)) by Def2

        .= ( <*p2*> ^ (( <*p1, p2*> -: p2) /^ 1)) by A1, Th53

        .= ( <*p2*> ^ ( <*p1, p2*> /^ 1)) by A1, Th49

        .= <*p2, p2*> by Th46;

      end;

    end;

    theorem :: FINSEQ_6:97

    

     Th97: ( Rotate ( <*p1, p2, p3*>,p1)) = <*p1, p2, p3*>

    proof

      ( <*p1, p2, p3*> /. 1) = p1 by FINSEQ_4: 18;

      hence thesis by Th89;

    end;

    theorem :: FINSEQ_6:98

    p1 <> p2 implies ( Rotate ( <*p1, p2, p3*>,p2)) = <*p2, p3, p2*>

    proof

      assume

       A1: p1 <> p2;

      ( rng <*p1, p2, p3*>) = {p1, p2, p3} by Lm2;

      then p2 in ( rng <*p1, p2, p3*>) by ENUMSET1:def 1;

      

      hence ( Rotate ( <*p1, p2, p3*>,p2)) = (( <*p1, p2, p3*> :- p2) ^ (( <*p1, p2, p3*> -: p2) /^ 1)) by Def2

      .= ( <*p2, p3*> ^ (( <*p1, p2, p3*> -: p2) /^ 1)) by A1, Th54

      .= ( <*p2, p3*> ^ ( <*p1, p2*> /^ 1)) by A1, Th50

      .= <*p2, p3, p2*> by Th46;

    end;

    theorem :: FINSEQ_6:99

    p2 <> p3 implies ( Rotate ( <*p1, p2, p3*>,p3)) = <*p3, p2, p3*>

    proof

      assume

       A1: p2 <> p3;

      per cases ;

        suppose p1 = p3;

        hence thesis by Th97;

      end;

        suppose

         A2: p1 <> p3;

        ( rng <*p1, p2, p3*>) = {p1, p2, p3} by Lm2;

        then p3 in ( rng <*p1, p2, p3*>) by ENUMSET1:def 1;

        

        hence ( Rotate ( <*p1, p2, p3*>,p3)) = (( <*p1, p2, p3*> :- p3) ^ (( <*p1, p2, p3*> -: p3) /^ 1)) by Def2

        .= ( <*p3*> ^ (( <*p1, p2, p3*> -: p3) /^ 1)) by A1, A2, Th55

        .= ( <*p3*> ^ ( <*p1, p2, p3*> /^ 1)) by A1, A2, Th51

        .= ( <*p3*> ^ <*p2, p3*>) by Th47

        .= <*p3, p2, p3*> by FINSEQ_1: 43;

      end;

    end;

    theorem :: FINSEQ_6:100

    for f be circular non trivial FinSequence of D holds ( rng (f /^ 1)) = ( rng f)

    proof

      let f be circular non trivial FinSequence of D;

      thus ( rng (f /^ 1)) c= ( rng f) by FINSEQ_5: 33;

      let x be object;

      f = ( <*(f /. 1)*> ^ (f /^ 1)) by FINSEQ_5: 29;

      then

       A1: ( rng f) = (( rng <*(f /. 1)*>) \/ ( rng (f /^ 1))) by FINSEQ_1: 31;

      assume

       A2: x in ( rng f);

      per cases by A1, A2, XBOOLE_0:def 3;

        suppose x in ( rng <*(f /. 1)*>);

        then x in {(f /. 1)} by FINSEQ_1: 39;

        then x = (f /. 1) by TARSKI:def 1;

        then

         A3: x = (f /. ( len f)) by Def1A;

        

         A4: ( len f) >= (1 + 1) by NAT_D: 60;

        then ( len f) >= 1 by XXREAL_0: 2;

        then

         A5: ( len (f /^ 1)) = (( len f) - 1) by RFINSEQ:def 1;

        then 1 <= ( len (f /^ 1)) by A4, XREAL_1: 19;

        then

         A6: ( len (f /^ 1)) in ( dom (f /^ 1)) by FINSEQ_3: 25;

        (( len (f /^ 1)) + 1) = ( len f) by A5;

        then x = ((f /^ 1) /. ( len (f /^ 1))) by A3, A6, FINSEQ_5: 27;

        hence thesis by A6, PARTFUN2: 2;

      end;

        suppose x in ( rng (f /^ 1));

        hence thesis;

      end;

    end;

    theorem :: FINSEQ_6:101

    

     Th101: ( rng (f /^ 1)) c= ( rng ( Rotate (f,p)))

    proof

      per cases ;

        suppose

         A1: p in ( rng f);

        then ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by Def2;

        then

         A2: ( rng ( Rotate (f,p))) = (( rng (f :- p)) \/ ( rng ((f -: p) /^ 1))) by FINSEQ_1: 31;

        thus thesis

        proof

          let x be object;

          assume

           A3: x in ( rng (f /^ 1));

          

           A4: ( rng (f /^ 1)) c= ( rng f) by FINSEQ_5: 33;

          then

           A5: x in ( rng f) by A3;

          per cases ;

            suppose that

             A6: (x .. f) < (p .. f) and

             A7: (x .. (f /^ 1)) >= (p .. (f /^ 1));

            

             A8: (p .. f) >= 1 by A1, FINSEQ_4: 21;

            (p .. f) <> 1 by A3, A4, A6, FINSEQ_4: 21;

            then (p .. f) > 1 by A8, XXREAL_0: 1;

            then (p .. f) = ((p .. (f /^ 1)) + 1) by A1, Th56;

            then

             A9: ((x .. (f /^ 1)) + 1) >= (p .. f) by A7, XREAL_1: 6;

            ( rng f) c= D by FINSEQ_1:def 4;

            then

            reconsider q = x as Element of D by A5;

            

             A10: (x .. (f /^ 1)) in ( dom (f /^ 1)) by A3, FINSEQ_4: 20;

            f <> {} by A1;

            then ( len f) >= 1 by NAT_1: 14;

            then (( len f) - 1) = ( len (f /^ 1)) by RFINSEQ:def 1;

            then

             A11: ( len f) = (( len (f /^ 1)) + 1);

            (x .. (f /^ 1)) <= ( len (f /^ 1)) by A3, FINSEQ_4: 21;

            then

             A12: ((x .. (f /^ 1)) + 1) <= ( len f) by A11, XREAL_1: 6;

            q = ((f /^ 1) /. (q .. (f /^ 1))) by A3, FINSEQ_5: 38

            .= (f /. ((q .. (f /^ 1)) + 1)) by A10, FINSEQ_5: 27;

            then x in ( rng (f :- p)) by A1, A12, A9, Th63;

            hence thesis by A2, XBOOLE_0:def 3;

          end;

            suppose that

             A13: (x .. f) < (p .. f) and

             A14: (x .. (f /^ 1)) <= (p .. (f /^ 1));

            

             A15: (p .. f) <> 1 by A3, A4, A13, FINSEQ_4: 21;

            (p .. f) >= 1 by A1, FINSEQ_4: 21;

            then (p .. f) > 1 by A15, XXREAL_0: 1;

            then p in ( rng (f /^ 1)) by A1, Th57;

            then x in ( rng ((f /^ 1) -: p)) by A3, A14, FINSEQ_5: 46;

            then x in ( rng ((f -: p) /^ 1)) by A1, A15, Th60;

            hence thesis by A2, XBOOLE_0:def 3;

          end;

            suppose (x .. f) >= (p .. f);

            then x in ( rng (f :- p)) by A1, A3, A4, Th62;

            hence thesis by A2, XBOOLE_0:def 3;

          end;

        end;

      end;

        suppose not p in ( rng f);

        then ( Rotate (f,p)) = f by Def2;

        hence thesis by FINSEQ_5: 33;

      end;

    end;

    theorem :: FINSEQ_6:102

    

     Th102: p2 in (( rng f) \ ( rng (f -: p1))) implies ( Rotate (( Rotate (f,p1)),p2)) = ( Rotate (f,p2))

    proof

      assume

       A1: p2 in (( rng f) \ ( rng (f -: p1)));

      per cases ;

        suppose

         A2: p1 in ( rng f);

        then

         A3: ( Rotate (f,p1)) = ((f :- p1) ^ ((f -: p1) /^ 1)) by Def2;

        

         A4: (p1 .. (f :- p1)) = 1 by Th79;

        ( rng ((f -: p1) /^ 1)) c= ( rng (f -: p1)) by FINSEQ_5: 33;

        then

         A5: not p2 in ( rng ((f -: p1) /^ 1)) by A1, XBOOLE_0:def 5;

        

         A6: ( rng (f /^ 1)) c= ( rng ( Rotate (f,p1))) by Th101;

        

         A7: (f -: p1) <> {} by A2, FINSEQ_5: 47;

        

         A8: not p2 in ( rng (f -: p1)) by A1, XBOOLE_0:def 5;

        (p1 .. f) <= (p1 .. f);

        then

         A9: p1 <> p2 by A2, A8, FINSEQ_5: 46;

        ( rng f) = (( rng (f -: p1)) \/ ( rng (f :- p1))) by A2, Th70;

        then

         A10: p2 in ( rng (f :- p1)) by A1, A8, XBOOLE_0:def 3;

        p1 in ( rng (f :- p1)) by Th61;

        then

         A11: (p2 .. (f :- p1)) <> 1 by A10, A9, A4, FINSEQ_5: 9;

        then p2 in ( rng ((f :- p1) /^ 1)) by A10, Th78;

        then

         A12: p2 in (( rng ((f :- p1) /^ 1)) \ ( rng ((f -: p1) /^ 1))) by A5, XBOOLE_0:def 5;

         A13:

        now

          assume (p2 .. f) = 1;

          then (p2 .. f) <= (p1 .. f) by A2, FINSEQ_4: 21;

          hence contradiction by A1, A2, A8, FINSEQ_5: 46;

        end;

        then p2 in ( rng (f /^ 1)) by A1, Th78;

        

        hence ( Rotate (( Rotate (f,p1)),p2)) = ((((f :- p1) ^ ((f -: p1) /^ 1)) :- p2) ^ ((((f :- p1) ^ ((f -: p1) /^ 1)) -: p2) /^ 1)) by A3, A6, Def2

        .= ((((f :- p1) :- p2) ^ ((f -: p1) /^ 1)) ^ ((((f :- p1) ^ ((f -: p1) /^ 1)) -: p2) /^ 1)) by A10, Th64

        .= (((f :- p2) ^ ((f -: p1) /^ 1)) ^ ((((f :- p1) ^ ((f -: p1) /^ 1)) -: p2) /^ 1)) by A1, A2, Th71

        .= (((f :- p2) ^ ((f -: p1) /^ 1)) ^ (((f :- p1) -: p2) /^ 1)) by A10, Th66

        .= (((f :- p2) ^ ((f -: p1) /^ 1)) ^ (((f :- p1) /^ 1) -: p2)) by A10, A11, Th60

        .= ((f :- p2) ^ (((f -: p1) /^ 1) ^ (((f :- p1) /^ 1) -: p2))) by FINSEQ_1: 32

        .= ((f :- p2) ^ ((((f -: p1) /^ 1) ^ ((f :- p1) /^ 1)) -: p2)) by A12, Th67

        .= ((f :- p2) ^ ((((f -: p1) ^ ((f :- p1) /^ 1)) /^ 1) -: p2)) by A7, Th77

        .= ((f :- p2) ^ ((f /^ 1) -: p2)) by A2, Th76

        .= ((f :- p2) ^ ((f -: p2) /^ 1)) by A1, A13, Th60

        .= ( Rotate (f,p2)) by A1, Def2;

      end;

        suppose not p1 in ( rng f);

        hence thesis by Def2;

      end;

    end;

    theorem :: FINSEQ_6:103

    

     Th103: (p2 .. f) <> 1 & p2 in (( rng f) \ ( rng (f :- p1))) implies ( Rotate (( Rotate (f,p1)),p2)) = ( Rotate (f,p2))

    proof

      assume that

       A1: (p2 .. f) <> 1 and

       A2: p2 in (( rng f) \ ( rng (f :- p1)));

      per cases ;

        suppose

         A3: p1 in ( rng f);

        then

         A4: (f -: p1) <> {} by FINSEQ_5: 47;

        

         A5: not p2 in ( rng (f :- p1)) by A2, XBOOLE_0:def 5;

        ( rng f) = (( rng (f -: p1)) \/ ( rng (f :- p1))) by A3, Th70;

        then

         A6: p2 in ( rng (f -: p1)) by A2, A5, XBOOLE_0:def 3;

        ((f -: p1) ^ ((f :- p1) /^ 1)) = f by A3, Th76;

        then

         A7: (p2 .. (f -: p1)) <> 1 by A1, A6, Th6;

        then

         A8: p2 in ( rng ((f -: p1) /^ 1)) by A6, Th78;

        then

         A9: p2 in (( rng ((f -: p1) /^ 1)) \ ( rng (f :- p1))) by A5, XBOOLE_0:def 5;

        

         A10: ( Rotate (f,p1)) = ((f :- p1) ^ ((f -: p1) /^ 1)) by A3, Def2;

        then ( rng ( Rotate (f,p1))) = (( rng (f :- p1)) \/ ( rng ((f -: p1) /^ 1))) by FINSEQ_1: 31;

        then p2 in ( rng ( Rotate (f,p1))) by A8, XBOOLE_0:def 3;

        

        hence ( Rotate (( Rotate (f,p1)),p2)) = ((((f :- p1) ^ ((f -: p1) /^ 1)) :- p2) ^ ((((f :- p1) ^ ((f -: p1) /^ 1)) -: p2) /^ 1)) by A10, Def2

        .= ((((f -: p1) /^ 1) :- p2) ^ ((((f :- p1) ^ ((f -: p1) /^ 1)) -: p2) /^ 1)) by A9, Th65

        .= ((((f -: p1) /^ 1) :- p2) ^ (((f :- p1) ^ (((f -: p1) /^ 1) -: p2)) /^ 1)) by A9, Th67

        .= ((((f -: p1) /^ 1) :- p2) ^ (((f :- p1) /^ 1) ^ (((f -: p1) /^ 1) -: p2))) by Th77

        .= (((((f -: p1) /^ 1) :- p2) ^ ((f :- p1) /^ 1)) ^ (((f -: p1) /^ 1) -: p2)) by FINSEQ_1: 32

        .= (((((f -: p1) /^ 1) ^ ((f :- p1) /^ 1)) :- p2) ^ (((f -: p1) /^ 1) -: p2)) by A8, Th64

        .= (((((f -: p1) ^ ((f :- p1) /^ 1)) /^ 1) :- p2) ^ (((f -: p1) /^ 1) -: p2)) by A4, Th77

        .= (((f /^ 1) :- p2) ^ (((f -: p1) /^ 1) -: p2)) by A3, Th76

        .= ((f :- p2) ^ (((f -: p1) /^ 1) -: p2)) by A1, A2, Th83

        .= ((f :- p2) ^ (((f -: p1) -: p2) /^ 1)) by A6, A7, Th60

        .= ((f :- p2) ^ ((f -: p2) /^ 1)) by A3, A6, Th75

        .= ( Rotate (f,p2)) by A2, Def2;

      end;

        suppose not p1 in ( rng f);

        hence thesis by Def2;

      end;

    end;

    theorem :: FINSEQ_6:104

    

     Th104: p2 in ( rng (f /^ 1)) & f just_once_values p2 implies ( Rotate (( Rotate (f,p1)),p2)) = ( Rotate (f,p2))

    proof

      per cases ;

        suppose

         A1: p1 in ( rng f);

        assume that

         A2: p2 in ( rng (f /^ 1)) and

         A3: f just_once_values p2;

        f = (((f -| p1) ^ <*p1*>) ^ (f |-- p1)) by A1, FINSEQ_4: 51;

        then

         A4: p2 in (( rng ((f -| p1) ^ <*p1*>)) \+\ ( rng (f |-- p1))) by A3, Th16;

         A5:

        now

          per cases by A4, XBOOLE_0: 1;

            case that p2 in ( rng ((f -| p1) ^ <*p1*>)) and

             A6: not p2 in ( rng (f |-- p1));

            now

              per cases ;

                case not p2 in ( rng <*p1*>);

                then not p2 in (( rng (f |-- p1)) \/ ( rng <*p1*>)) by A6, XBOOLE_0:def 3;

                then not p2 in ( rng ( <*p1*> ^ (f |-- p1))) by FINSEQ_1: 31;

                hence not p2 in ( rng (f :- p1)) by A1, Th41;

              end;

                case p2 in ( rng <*p1*>);

                then p2 in {p1} by FINSEQ_1: 39;

                hence p2 = p1 by TARSKI:def 1;

              end;

            end;

            hence p2 in ( rng (f :- p1)) implies p1 = p2;

          end;

            case not p2 in ( rng ((f -| p1) ^ <*p1*>));

            hence not p2 in ( rng (f -: p1)) by A1, Th40;

          end;

        end;

        

         A7: p2 in ( rng f) by A3, FINSEQ_4: 5;

        then f = ( <*(f /. 1)*> ^ (f /^ 1)) by FINSEQ_5: 29, RELAT_1: 38;

        then p2 in (( rng <*(f /. 1)*>) \+\ ( rng (f /^ 1))) by A3, Th16;

        then not p2 in ( rng <*(f /. 1)*>) by A2, XBOOLE_0: 1;

        then not p2 in {(f /. 1)} by FINSEQ_1: 39;

        then p2 <> (f /. 1) by TARSKI:def 1;

        then

         A8: (p2 .. f) <> 1 by A7, FINSEQ_5: 38;

        now

          per cases by A7, A5, XBOOLE_0:def 5;

            suppose p1 = p2;

            hence thesis by Th93;

          end;

            suppose p2 in (( rng f) \ ( rng (f -: p1)));

            hence thesis by Th102;

          end;

            suppose p2 in (( rng f) \ ( rng (f :- p1)));

            hence thesis by A8, Th103;

          end;

        end;

        hence thesis;

      end;

        suppose not p1 in ( rng f);

        hence thesis by Def2;

      end;

    end;

    theorem :: FINSEQ_6:105

    f is circular & f just_once_values p2 implies ( Rotate (( Rotate (f,p1)),p2)) = ( Rotate (f,p2))

    proof

      per cases ;

        suppose

         A1: p1 in ( rng f);

        assume that

         A2: f is circular and

         A3: f just_once_values p2;

        

         A4: p2 in ( rng f) by A3, FINSEQ_4: 45;

        now

          per cases ;

            suppose ( rng f) is trivial;

            then p1 = p2 by A1, A4, ZFMISC_1:def 10;

            hence thesis by Th93;

          end;

            suppose

             A5: not ( rng f) is trivial;

            then f = ( <*(f /. 1)*> ^ (f /^ 1)) by FINSEQ_5: 29, RELAT_1: 38;

            then

             A6: ( rng f) = (( rng <*(f /. 1)*>) \/ ( rng (f /^ 1))) by FINSEQ_1: 31;

            now

              f qua set is non trivial by A5;

              then ( len f) >= (1 + 1) by NAT_D: 60;

              then

               A7: 1 < ( len f) by NAT_1: 13;

              assume

               A8: not p2 in ( rng (f /^ 1));

              then p2 in ( rng <*(f /. 1)*>) by A4, A6, XBOOLE_0:def 3;

              then p2 in {(f /. 1)} by FINSEQ_1: 39;

              then p2 = (f /. 1) by TARSKI:def 1;

              then

               A9: p2 = (f /. ( len f)) by A2;

              ( len f) in ( dom f) by A5, FINSEQ_5: 6, RELAT_1: 38;

              hence contradiction by A8, A9, A7, Th58;

            end;

            hence thesis by A3, Th104;

          end;

        end;

        hence thesis;

      end;

        suppose not p1 in ( rng f);

        hence thesis by Def2;

      end;

    end;

    theorem :: FINSEQ_6:106

    f is circular & f just_once_values p implies ( Rev ( Rotate (f,p))) = ( Rotate (( Rev f),p))

    proof

      assume that

       A1: f is circular and

       A2: f just_once_values p;

      reconsider j = (( len (f :- p)) - 1) as Element of NAT by INT_1: 5, NAT_1: 14;

      

       A3: (f /. 1) = (f /. ( len f)) by A1;

      

       A4: p in ( rng f) by A2, FINSEQ_4: 45;

      

      then

       A5: (f -: p) = ( <*((f -: p) /. 1)*> ^ ((f -: p) /^ 1)) by FINSEQ_5: 29, FINSEQ_5: 47

      .= ( <*(f /. 1)*> ^ ((f -: p) /^ 1)) by A4, FINSEQ_5: 44;

      

       A6: (j + 1) = ( len (f :- p));

      

      then

       A7: (f :- p) = (((f :- p) | j) ^ <*((f :- p) /. ( len (f :- p)))*>) by FINSEQ_5: 21

      .= (((f :- p) | j) ^ <*(f /. ( len f))*>) by A4, FINSEQ_5: 54;

      

       A8: p in ( rng ( Rev f)) by A4, FINSEQ_5: 57;

      

      thus ( Rev ( Rotate (f,p))) = ( Rev ((f :- p) ^ ((f -: p) /^ 1))) by A4, Def2

      .= (( Rev ((f -: p) /^ 1)) ^ ( Rev (f :- p))) by FINSEQ_5: 64

      .= (( Rev ((f -: p) /^ 1)) ^ ( <*(f /. ( len f))*> ^ ( Rev ((f :- p) | j)))) by A7, FINSEQ_5: 63

      .= ((( Rev ((f -: p) /^ 1)) ^ <*(f /. 1)*>) ^ ( Rev ((f :- p) | j))) by A3, FINSEQ_1: 32

      .= (( Rev (f -: p)) ^ ( Rev ((f :- p) | j))) by A5, Th24

      .= (( Rev (f -: p)) ^ (( Rev (f :- p)) /^ 1)) by A6, Th85

      .= (( Rev (f -: p)) ^ ((( Rev f) -: p) /^ 1)) by A2, Th87

      .= ((( Rev f) :- p) ^ ((( Rev f) -: p) /^ 1)) by A2, Th88

      .= ( Rotate (( Rev f),p)) by A8, Def2;

    end;

    begin

    theorem :: FINSEQ_6:107

    for f be trivial FinSequence of D holds f is empty or ex x be Element of D st f = <*x*>

    proof

      let f be trivial FinSequence of D;

      

       A1: ( rng f) c= D by FINSEQ_1:def 4;

      assume f is non empty;

      then

      consider x be object such that

       A2: f = {x} by ZFMISC_1: 131;

      

       A3: 1 in ( dom f) by A2, FINSEQ_5: 6;

      

       A4: x in {x} by TARSKI:def 1;

      then

      consider y,z be object such that

       A5: x = [y, z] by A2, RELAT_1:def 1;

      reconsider z as set by TARSKI: 1;

      take z;

      z in ( rng f) by A2, A4, A5, XTUPLE_0:def 13;

      hence z is Element of D by A1;

      ( dom f) = {y} by A2, A5, RELAT_1: 9;

      then 1 = y by A3, TARSKI:def 1;

      hence f = <*z*> by A2, A5;

    end;

    begin

    reserve D for non empty set;

    theorem :: FINSEQ_6:108

    for i be Nat holds for p,q be FinSequence st ( len p) < i & (i <= (( len p) + ( len q)) or i <= ( len (p ^ q))) holds ((p ^ q) . i) = (q . (i - ( len p)))

    proof

      let i be Nat;

      let p,q be FinSequence;

      assume that

       A1: ( len p) < i and

       A2: i <= (( len p) + ( len q)) or i <= ( len (p ^ q));

      i <= (( len p) + ( len q)) by A2, FINSEQ_1: 22;

      then

       A3: (i - ( len p)) <= ((( len p) + ( len q)) - ( len p)) by XREAL_1: 9;

      (( len p) + 1) <= i by A1, NAT_1: 13;

      then

       A4: ((( len p) + 1) - ( len p)) <= (i - ( len p)) by XREAL_1: 9;

      

      then

       A5: (( len p) + (i -' ( len p))) = (( len p) + (i - ( len p))) by XREAL_0:def 2

      .= i;

      (i - ( len p)) = (i -' ( len p)) by A4, XREAL_0:def 2;

      then (i -' ( len p)) in ( dom q) by A4, A3, FINSEQ_3: 25;

      hence thesis by A5, FINSEQ_1:def 7;

    end;

    theorem :: FINSEQ_6:109

    for x be set, f be FinSequence of D st 1 <= ( len f) holds ((f ^ <*x*>) . 1) = (f . 1) & ((f ^ <*x*>) . 1) = (f /. 1) & (( <*x*> ^ f) . (( len f) + 1)) = (f . ( len f)) & (( <*x*> ^ f) . (( len f) + 1)) = (f /. ( len f))

    proof

      let x be set, f be FinSequence of D;

      assume

       A1: 1 <= ( len f);

      then

       A2: ( len f) in ( dom f) by FINSEQ_3: 25;

      1 in ( dom f) by A1, FINSEQ_3: 25;

      then

       A3: ((f ^ <*x*>) . 1) = (f . 1) by FINSEQ_1:def 7;

      (( <*x*> ^ f) . (( len f) + 1)) = (( <*x*> ^ f) . (( len <*x*>) + ( len f))) by FINSEQ_1: 39

      .= (f . ( len f)) by A2, FINSEQ_1:def 7;

      hence thesis by A1, A3, FINSEQ_4: 15;

    end;

    theorem :: FINSEQ_6:110

    

     Th110: for f be FinSequence st ( len f) = 1 holds ( Rev f) = f

    proof

      let f be FinSequence;

      assume ( len f) = 1;

      then f = <*(f . 1)*> by FINSEQ_1: 40;

      hence thesis by FINSEQ_5: 60;

    end;

    theorem :: FINSEQ_6:111

    for f be FinSequence of D, k be Nat holds ( len (f /^ k)) = (( len f) -' k) by RFINSEQ: 29;

    definition

      let f be FinSequence, k1,k2 be Nat;

      :: FINSEQ_6:def3

      func mid (f,k1,k2) -> FinSequence equals

      : Def3: ((f /^ (k1 -' 1)) | ((k2 -' k1) + 1)) if k1 <= k2

      otherwise ( Rev ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1)));

      correctness ;

    end

    definition

      let D;

      let f be FinSequence of D, k1,k2 be Nat;

      :: original: mid

      redefine

      func mid (f,k1,k2) -> FinSequence of D ;

      coherence

      proof

        ( mid (f,k1,k2)) = ((f /^ (k1 -' 1)) | ((k2 -' k1) + 1)) or ( mid (f,k1,k2)) = ( Rev ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1))) by Def3;

        hence thesis;

      end;

    end

    ::$Canceled

    theorem :: FINSEQ_6:113

    for f be FinSequence of D, k1,k2 be Nat st 1 <= k1 & k1 <= ( len f) & 1 <= k2 & k2 <= ( len f) holds ( Rev ( mid (f,k1,k2))) = ( mid (( Rev f),((( len f) -' k2) + 1),((( len f) -' k1) + 1)))

    proof

      let f be FinSequence of D, k1,k2 be Nat;

      assume that

       A1: 1 <= k1 and

       A2: k1 <= ( len f) and

       A3: 1 <= k2 and

       A4: k2 <= ( len f);

      per cases ;

        suppose

         A5: k1 <= k2;

        

         A6: (( len f) -' (k1 -' 1)) = (( len f) - (k1 -' 1)) by A2, NAT_D: 50, XREAL_1: 233

        .= (( len f) - (k1 - 1)) by A1, XREAL_1: 233

        .= ((( len f) - k1) + 1)

        .= ((( len f) -' k1) + 1) by A2, XREAL_1: 233;

        

         A7: (( len f) -' k1) = (( len f) - k1) by A2, XREAL_1: 233;

        

         A8: (( len f) -' k2) = (( len f) - k2) by A4, XREAL_1: 233;

        (k2 - k1) <= (( len f) - k1) by A4, XREAL_1: 9;

        then (k2 -' k1) <= (( len f) - k1) by A5, XREAL_1: 233;

        then (k2 -' k1) <= (( len f) -' k1) by A2, XREAL_1: 233;

        then ((k2 -' k1) + 1) <= ((( len f) -' k1) + 1) by XREAL_1: 6;

        

        then

         A9: ((( len f) -' (k1 -' 1)) -' ((k2 -' k1) + 1)) = (((( len f) -' k1) + 1) - ((k2 -' k1) + 1)) by A6, XREAL_1: 233

        .= (((( len f) - k1) + 1) - ((k2 - k1) + 1)) by A5, A7, XREAL_1: 233

        .= (((( len f) + 1) - 1) - k2)

        .= (( len f) -' k2) by A4, XREAL_1: 233;

        

        then

         A10: ((( len (f /^ (k1 -' 1))) -' ((k2 -' k1) + 1)) + ((k2 -' k1) + 1)) = ((( len f) -' k2) + ((k2 -' k1) + 1)) by RFINSEQ: 29

        .= ((( len f) - k2) + ((k2 - k1) + 1)) by A5, A8, XREAL_1: 233

        .= (( len f) - (k1 - 1))

        .= (( len f) - (k1 -' 1)) by A1, XREAL_1: 233

        .= (( len f) -' (k1 -' 1)) by A2, NAT_D: 50, XREAL_1: 233

        .= ( len (f /^ (k1 -' 1))) by RFINSEQ: 29;

        

         A11: (( len f) -' k1) <= ((( len f) -' k1) + 1) by NAT_1: 11;

        (( len f) -' k1) >= (( len f) -' k2) by A5, NAT_D: 41;

        

        then

         A12: ((( len f) -' (k1 -' 1)) -' (( len f) -' k2)) = (((( len f) -' k1) + 1) - (( len f) -' k2)) by A6, A11, XREAL_1: 233, XXREAL_0: 2

        .= (((( len f) - k1) + 1) - (( len f) - k2)) by A4, A7, XREAL_1: 233

        .= ((k2 - k1) + 1)

        .= ((k2 -' k1) + 1) by A5, XREAL_1: 233;

        

         A13: ((( len f) -' (k1 -' 1)) + (k1 -' 1)) = ((( len f) - (k1 -' 1)) + (k1 -' 1)) by A2, NAT_D: 50, XREAL_1: 233

        .= ( len f);

        (( len f) -' k1) >= (( len f) -' k2) by A5, NAT_D: 41;

        then ((( len f) -' k1) + 1) >= ((( len f) -' k2) + 1) by XREAL_1: 6;

        

        then

         A14: ((((( len f) -' k1) + 1) -' ((( len f) -' k2) + 1)) + 1) = ((((( len f) -' k1) + 1) - ((( len f) -' k2) + 1)) + 1) by XREAL_1: 233

        .= ((((( len f) - k1) + 1) - ((( len f) - k2) + 1)) + 1) by A4, A7, XREAL_1: 233

        .= ((k2 - k1) + 1)

        .= ((k2 -' k1) + 1) by A5, XREAL_1: 233;

        (( len f) -' k1) >= (( len f) -' k2) by A5, NAT_D: 41;

        then ((( len f) -' k1) + 1) >= ((( len f) -' k2) + 1) by XREAL_1: 6;

        

        then ( mid (( Rev f),((( len f) -' k2) + 1),((( len f) -' k1) + 1))) = ((( Rev f) /^ (((( len f) -' k2) + 1) -' 1)) | ((k2 -' k1) + 1)) by A14, Def3

        .= ((( Rev f) /^ (( len f) -' k2)) | ((( len f) -' (k1 -' 1)) -' (( len f) -' k2))) by A12, NAT_D: 34

        .= ((( Rev f) | (( len f) -' (k1 -' 1))) /^ (( len f) -' k2)) by FINSEQ_5: 80

        .= ((( Rev f) | (( len f) -' (k1 -' 1))) /^ (( len (f /^ (k1 -' 1))) -' ((k2 -' k1) + 1))) by A9, RFINSEQ: 29

        .= (( Rev (f /^ (k1 -' 1))) /^ (( len (f /^ (k1 -' 1))) -' ((k2 -' k1) + 1))) by A13, Th84

        .= ( Rev ((f /^ (k1 -' 1)) | ((k2 -' k1) + 1))) by A10, Th85

        .= ( Rev ( mid (f,k1,k2))) by A5, Def3;

        hence thesis;

      end;

        suppose

         A15: k1 > k2;

        

         A16: (( len f) -' (k2 -' 1)) = (( len f) - (k2 -' 1)) by A4, NAT_D: 50, XREAL_1: 233

        .= (( len f) - (k2 - 1)) by A3, XREAL_1: 233

        .= ((( len f) - k2) + 1)

        .= ((( len f) -' k2) + 1) by A4, XREAL_1: 233;

        

         A17: (( len f) -' k2) = (( len f) - k2) by A4, XREAL_1: 233;

        (( len f) -' k2) >= (( len f) -' k1) by A15, NAT_D: 41;

        then ((( len f) -' k2) + 1) >= ((( len f) -' k1) + 1) by XREAL_1: 6;

        

        then

         A18: ((((( len f) -' k2) + 1) -' ((( len f) -' k1) + 1)) + 1) = ((((( len f) -' k2) + 1) - ((( len f) -' k1) + 1)) + 1) by XREAL_1: 233

        .= ((((( len f) - k2) + 1) - ((( len f) - k1) + 1)) + 1) by A2, A17, XREAL_1: 233

        .= ((k1 - k2) + 1)

        .= ((k1 -' k2) + 1) by A15, XREAL_1: 233;

        

         A19: (( len f) -' k1) = (( len f) - k1) by A2, XREAL_1: 233;

        

         A20: (( len f) -' k2) <= ((( len f) -' k2) + 1) by NAT_1: 11;

        (( len f) -' k2) >= (( len f) -' k1) by A15, NAT_D: 41;

        

        then

         A21: ((( len f) -' (k2 -' 1)) -' (( len f) -' k1)) = (((( len f) -' k2) + 1) - (( len f) -' k1)) by A16, A20, XREAL_1: 233, XXREAL_0: 2

        .= (((( len f) - k2) + 1) - (( len f) - k1)) by A2, A17, XREAL_1: 233

        .= ((k1 - k2) + 1)

        .= ((k1 -' k2) + 1) by A15, XREAL_1: 233;

        

         A22: ((( len f) -' (k2 -' 1)) + (k2 -' 1)) = ((( len f) - (k2 -' 1)) + (k2 -' 1)) by A4, NAT_D: 50, XREAL_1: 233

        .= ( len f);

        (k1 - k2) <= (( len f) - k2) by A2, XREAL_1: 9;

        then (k1 -' k2) <= (( len f) - k2) by A15, XREAL_1: 233;

        then (k1 -' k2) <= (( len f) -' k2) by A4, XREAL_1: 233;

        then ((k1 -' k2) + 1) <= ((( len f) -' k2) + 1) by XREAL_1: 6;

        

        then

         A23: ((( len f) -' (k2 -' 1)) -' ((k1 -' k2) + 1)) = (((( len f) -' k2) + 1) - ((k1 -' k2) + 1)) by A16, XREAL_1: 233

        .= (((( len f) - k2) + 1) - ((k1 - k2) + 1)) by A15, A17, XREAL_1: 233

        .= (((( len f) + 1) - 1) - k1)

        .= (( len f) -' k1) by A2, XREAL_1: 233;

        

        then

         A24: ((( len (f /^ (k2 -' 1))) -' ((k1 -' k2) + 1)) + ((k1 -' k2) + 1)) = ((( len f) -' k1) + ((k1 -' k2) + 1)) by RFINSEQ: 29

        .= ((( len f) - k1) + ((k1 - k2) + 1)) by A15, A19, XREAL_1: 233

        .= (( len f) - (k2 - 1))

        .= (( len f) - (k2 -' 1)) by A3, XREAL_1: 233

        .= (( len f) -' (k2 -' 1)) by A4, NAT_D: 50, XREAL_1: 233

        .= ( len (f /^ (k2 -' 1))) by RFINSEQ: 29;

        (( len f) - k2) > (( len f) - k1) by A15, XREAL_1: 10;

        then ((( len f) -' k2) + 1) > ((( len f) -' k1) + 1) by A17, A19, XREAL_1: 6;

        

        then ( mid (( Rev f),((( len f) -' k2) + 1),((( len f) -' k1) + 1))) = ( Rev ((( Rev f) /^ (((( len f) -' k1) + 1) -' 1)) | ((k1 -' k2) + 1))) by A18, Def3

        .= ( Rev ((( Rev f) /^ (( len f) -' k1)) | ((( len f) -' (k2 -' 1)) -' (( len f) -' k1)))) by A21, NAT_D: 34

        .= ( Rev ((( Rev f) | (( len f) -' (k2 -' 1))) /^ (( len f) -' k1))) by FINSEQ_5: 80

        .= ( Rev ((( Rev f) | (( len f) -' (k2 -' 1))) /^ (( len (f /^ (k2 -' 1))) -' ((k1 -' k2) + 1)))) by A23, RFINSEQ: 29

        .= ( Rev (( Rev (f /^ (k2 -' 1))) /^ (( len (f /^ (k2 -' 1))) -' ((k1 -' k2) + 1)))) by A22, Th84

        .= ( Rev ( Rev ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1)))) by A24, Th85

        .= ( Rev ( mid (f,k1,k2))) by A15, Def3;

        hence thesis;

      end;

    end;

    theorem :: FINSEQ_6:114

    

     Th113: for n,m be Nat, f be FinSequence st 1 <= m & (m + n) <= ( len f) holds ((f /^ n) . m) = (f . (m + n))

    proof

      let n,m be Nat, f be FinSequence;

      assume that

       A1: 1 <= m and

       A2: (m + n) <= ( len f);

      

       A3: ((m + n) - n) <= (( len f) - n) by A2, XREAL_1: 9;

      n <= (n + m) by NAT_1: 11;

      then

       A4: n <= ( len f) by A2, XXREAL_0: 2;

      then ( len (f /^ n)) = (( len f) - n) by RFINSEQ:def 1;

      then m in ( dom (f /^ n)) by A1, A3, FINSEQ_3: 25;

      hence thesis by A4, RFINSEQ:def 1;

    end;

    theorem :: FINSEQ_6:115

    

     Th114: for i be Nat, f be FinSequence st 1 <= i & i <= ( len f) holds (( Rev f) . i) = (f . ((( len f) - i) + 1))

    proof

      let i be Nat, f be FinSequence;

      assume that

       A1: 1 <= i and

       A2: i <= ( len f);

      i in ( dom f) by A1, A2, FINSEQ_3: 25;

      hence thesis by FINSEQ_5: 58;

    end;

    theorem :: FINSEQ_6:116

    for f be FinSequence, k be Nat st 1 <= k holds ( mid (f,1,k)) = (f | k)

    proof

      let f be FinSequence, k be Nat;

      (1 -' 1) = 0 by XREAL_1: 232;

      then

       A1: (f /^ (1 -' 1)) = f;

      assume

       A2: 1 <= k;

      then ( mid (f,1,k)) = ((f /^ (1 -' 1)) | ((k -' 1) + 1)) by Def3;

      hence thesis by A2, A1, XREAL_1: 235;

    end;

    theorem :: FINSEQ_6:117

    for f be FinSequence, k be Nat st k <= ( len f) holds ( mid (f,k,( len f))) = (f /^ (k -' 1))

    proof

      let f be FinSequence, k be Nat;

      assume

       A1: k <= ( len f);

      then

       A2: ( mid (f,k,( len f))) = ((f /^ (k -' 1)) | ((( len f) -' k) + 1)) by Def3;

      (k -' 1) <= ( len f) by A1, NAT_D: 44;

      then

       A3: ( len (f /^ (k -' 1))) = (( len f) - (k -' 1)) by RFINSEQ:def 1;

      

       A4: ((( len f) -' k) + 1) = ((( len f) - k) + 1) by A1, XREAL_1: 233

      .= (( len f) - (k - 1));

      now

        per cases ;

          case

           A5: k = 0 ;

          ( 0 - 1) < 0 ;

          then (k -' 1) = 0 by A5, XREAL_0:def 2;

          then

           A6: (f /^ (k -' 1)) = f;

          ((( len f) -' k) + 1) = (( len f) + 1) by A5, NAT_D: 40;

          then ( len f) <= ((( len f) -' k) + 1) by NAT_1: 11;

          then ( Seg ( len f)) c= ( Seg ((( len f) -' k) + 1)) by FINSEQ_1: 5;

          then ( dom (f /^ (k -' 1))) c= ( Seg ((( len f) -' k) + 1)) by A6, FINSEQ_1:def 3;

          then ((f /^ (k -' 1)) | ( Seg ((( len f) -' k) + 1))) = (f /^ (k -' 1)) by RELAT_1: 68;

          hence thesis by A2;

        end;

          case k <> 0 ;

          then ( 0 + 1) <= k by NAT_1: 13;

          then ( len (f /^ (k -' 1))) = ((( len f) -' k) + 1) by A3, A4, XREAL_1: 233;

          

          hence ( mid (f,k,( len f))) = ((f /^ (k -' 1)) | ( Seg ( len (f /^ (k -' 1))))) by A2

          .= ((f /^ (k -' 1)) | ( dom (f /^ (k -' 1)))) by FINSEQ_1:def 3

          .= (f /^ (k -' 1));

        end;

      end;

      hence thesis;

    end;

    theorem :: FINSEQ_6:118

    

     Th117: for f be FinSequence, k1,k2 be 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 be 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 be Nat st 1 <= i & i <= ( len ( mid (f,k1,k2))) holds (( mid (f,k1,k2)) . i) = (f . ((k1 -' i) + 1)))

    proof

      let f be FinSequence, k11,k21 be Nat;

      assume that

       A1: 1 <= k11 and

       A2: k11 <= ( len f) and

       A3: 1 <= k21 and

       A4: k21 <= ( len f);

      reconsider fa = f as FinSequence of ( rng f) by FINSEQ_1:def 4;

      (k21 -' 1) <= ( len f) by A4, NAT_D: 44;

      then

       A5: ( len (f /^ (k21 -' 1))) = (( len f) - (k21 -' 1)) by RFINSEQ:def 1;

      

       A6: (k21 - 1) >= 0 by A3, XREAL_1: 48;

      then

       A7: (k21 -' 1) = (k21 - 1) by XREAL_0:def 2;

       A8:

      now

        let k1,k2 be Nat;

        now

          assume that

           A9: k1 <= k2 and

           A10: 1 <= k1 and

           A11: k1 <= ( len f);

          

           A12: (( mid (f,k1,k2)) . 1) = (((f /^ (k1 -' 1)) | ((k2 -' k1) + 1)) . 1) by A9, Def3

          .= (((f /^ (k1 -' 1)) | ( Seg ((k2 -' k1) + 1))) . 1);

          (k1 - 1) >= 0 by A10, XREAL_1: 48;

          

          then

           A13: (1 + (k1 -' 1)) = (1 + (k1 - 1)) by XREAL_0:def 2

          .= k1;

          then (1 + (k1 -' 1)) <= ((( len f) - (k1 -' 1)) + (k1 -' 1)) by A11;

          then

           A14: 1 <= (( len f) - (k1 -' 1)) by XREAL_1: 6;

          

           A15: (k1 -' 1) <= ( len f) by A11, NAT_D: 44;

          then ( len (f /^ (k1 -' 1))) = (( len f) - (k1 -' 1)) by RFINSEQ:def 1;

          then 1 in ( Seg ( len (f /^ (k1 -' 1)))) by A14;

          then

           A16: 1 in ( dom (f /^ (k1 -' 1))) by FINSEQ_1:def 3;

          ( 0 + 1) <= ((k2 -' k1) + 1) by XREAL_1: 6;

          then 1 in ( Seg ((k2 -' k1) + 1));

          then 1 in (( dom (f /^ (k1 -' 1))) /\ ( Seg ((k2 -' k1) + 1))) by A16, XBOOLE_0:def 4;

          then 1 in ( dom ((f /^ (k1 -' 1)) | ( Seg ((k2 -' k1) + 1)))) by RELAT_1: 61;

          then (( mid (f,k1,k2)) . 1) = ((f /^ (k1 -' 1)) . 1) by A12, FUNCT_1: 47;

          hence (( mid (f,k1,k2)) . 1) = (f . k1) by A13, A15, A16, RFINSEQ:def 1;

        end;

        hence k1 <= k2 & 1 <= k1 & k1 <= ( len f) implies (( mid (f,k1,k2)) . 1) = (f . k1);

      end;

      thus (( mid (f,k11,k21)) . 1) = (f . k11)

      proof

        per cases ;

          suppose k11 <= k21;

          hence thesis by A1, A2, A8;

        end;

          suppose

           A17: k11 > k21;

          

           A18: (k21 - 1) >= 0 by A3, XREAL_1: 48;

          

           A19: (k11 - k21) >= 0 by A17, XREAL_1: 48;

          then (k11 -' k21) = (k11 - k21) by XREAL_0:def 2;

          

          then

           A20: ((k21 -' 1) + ((k11 -' k21) + 1)) = ((k21 - 1) + (k11 - (k21 - 1))) by A18, XREAL_0:def 2

          .= k11;

          (k21 -' 1) <= ( len f) by A4, NAT_D: 44;

          then

           A21: ( len (f /^ (k21 -' 1))) = (( len f) - (k21 -' 1)) by RFINSEQ:def 1;

          

           A22: 1 <= ((k11 -' k21) + 1) by NAT_1: 11;

          ((k11 -' k21) + 1) = ((k11 - k21) + 1) by A19, XREAL_0:def 2

          .= (k11 - (k21 - 1))

          .= (k11 - (k21 -' 1)) by A18, XREAL_0:def 2;

          then

           A23: ((k11 -' k21) + 1) <= ( len (f /^ (k21 -' 1))) by A2, A21, XREAL_1: 9;

          then

           A24: ( len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) = ((k11 -' k21) + 1) by FINSEQ_1: 59;

          then

           A25: ((k11 -' k21) + 1) in ( dom ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) by A22, FINSEQ_3: 25;

          

           a25: ((k11 -' k21) + 1) in ( dom (f /^ (k21 -' 1))) by A23, FINSEQ_3: 25, A22;

          

           A26: ((k11 -' k21) + 1) in ( dom (f /^ (k21 -' 1))) by A22, A23, FINSEQ_3: 25;

          

           A27: (((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . ( len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)))) = (((fa /^ (k21 -' 1)) | ((k11 -' k21) + 1)) /. ((k11 -' k21) + 1)) by A22, A24, FINSEQ_4: 15

          .= ((fa /^ (k21 -' 1)) /. ((k11 -' k21) + 1)) by A25, FINSEQ_4: 70

          .= ((f /^ (k21 -' 1)) . ((k11 -' k21) + 1)) by a25, PARTFUN1:def 6

          .= (f . k11) by A20, A26, FINSEQ_5: 27;

          1 in ( dom ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) by A22, A24, FINSEQ_3: 25;

          

          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: 58

          .= (f . k11) by A27;

          hence thesis by A17, Def3;

        end;

      end;

      thus k11 <= k21 implies ( len ( mid (f,k11,k21))) = ((k21 -' k11) + 1) & for i be Nat st 1 <= i & i <= ( len ( mid (f,k11,k21))) holds (( mid (f,k11,k21)) . i) = (f . ((i + k11) -' 1))

      proof

        

         A28: (k11 - 1) >= 0 by A1, XREAL_1: 48;

        then

         A29: (k11 -' 1) = (k11 - 1) by XREAL_0:def 2;

        (k11 -' 1) <= ( len f) by A2, NAT_D: 44;

        then

         A30: ( len (f /^ (k11 -' 1))) = (( len f) - (k11 -' 1)) by RFINSEQ:def 1;

        assume

         A31: k11 <= k21;

        then

         A32: ( mid (f,k11,k21)) = ((f /^ (k11 -' 1)) | ((k21 -' k11) + 1)) by Def3;

        

         A33: (k21 - k11) >= 0 by A31, XREAL_1: 48;

        then

         A34: (k21 -' k11) = (k21 - k11) by XREAL_0:def 2;

        ((k21 -' k11) + 1) = ((k21 - k11) + 1) by A33, XREAL_0:def 2

        .= (k21 - (k11 - 1))

        .= (k21 - (k11 -' 1)) by A28, XREAL_0:def 2;

        then

         A35: ((k21 -' k11) + 1) <= ( len (f /^ (k11 -' 1))) by A4, A30, XREAL_1: 9;

        then

         A36: ( len ((f /^ (k11 -' 1)) | ((k21 -' k11) + 1))) = ((k21 -' k11) + 1) by FINSEQ_1: 59;

        for i be Nat st 1 <= i & i <= ( len ( mid (f,k11,k21))) holds (( mid (f,k11,k21)) . i) = (f . ((i + k11) -' 1))

        proof

          let i be Nat;

          assume that

           A37: 1 <= i and

           A38: i <= ( len ( mid (f,k11,k21)));

          

           A39: i <= ((k21 -' k11) + 1) by A32, A35, A38, FINSEQ_1: 59;

          (i + (k11 - 1)) <= ((k21 - (k11 - 1)) + (k11 - 1)) by A32, A34, A36, A38, XREAL_1: 6;

          then

           A40: (i + (k11 -' 1)) <= ( len f) by A4, A29, XXREAL_0: 2;

          

           A41: k11 <= (k11 + i) by NAT_1: 11;

          

           A42: (i + (k11 -' 1)) = (i + (k11 - 1)) by A28, XREAL_0:def 2

          .= ((i + k11) - 1)

          .= ((i + k11) -' 1) by A1, A41, XREAL_1: 233, XXREAL_0: 2;

          (( mid (f,k11,k21)) . i) = (((f /^ (k11 -' 1)) | ((k21 -' k11) + 1)) . i) by A31, Def3

          .= ((f /^ (k11 -' 1)) . i) by A39, FINSEQ_3: 112

          .= (f . (i + (k11 -' 1))) by A37, A40, Th113;

          hence thesis by A42;

        end;

        hence thesis by A32, A35, FINSEQ_1: 59;

      end;

      assume

       A43: k11 > k21;

      then

       A44: (k11 - k21) >= 0 by XREAL_1: 48;

      then

       A45: (k11 -' k21) = (k11 - k21) by XREAL_0:def 2;

      

       A46: ( mid (f,k11,k21)) = ( Rev ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) by A43, Def3;

      then

       A47: ( len ( mid (f,k11,k21))) = ( len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) by FINSEQ_5:def 3;

      ((k11 -' k21) + 1) = ((k11 - k21) + 1) by A44, XREAL_0:def 2

      .= (k11 - (k21 - 1))

      .= (k11 - (k21 -' 1)) by A6, XREAL_0:def 2;

      then

       A48: ((k11 -' k21) + 1) <= ( len (f /^ (k21 -' 1))) by A2, A5, XREAL_1: 9;

      hence

       A49: ( len ( mid (f,k11,k21))) = ((k11 -' k21) + 1) by A47, FINSEQ_1: 59;

      

       A50: ( len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) = ((k11 -' k21) + 1) by A48, FINSEQ_1: 59;

      thus for i be Nat st 1 <= i & i <= ( len ( mid (f,k11,k21))) holds (( mid (f,k11,k21)) . i) = (f . ((k11 -' i) + 1))

      proof

        let i be Nat;

        assume that

         A51: 1 <= i and

         A52: i <= ( len ( mid (f,k11,k21)));

        

         A53: (i + (k21 - 1)) <= ((k11 - (k21 - 1)) + (k21 - 1)) by A45, A49, A52, XREAL_1: 6;

        ((k11 -' k21) + 1) <= (((k11 -' k21) + 1) + (i -' 1)) by NAT_1: 11;

        then ((k11 -' k21) + 1) <= (((k11 -' k21) + 1) + (i - 1)) by A51, XREAL_1: 233;

        then (((k11 -' k21) + 1) - (i - 1)) <= ((((k11 -' k21) + 1) + (i - 1)) - (i - 1)) by XREAL_1: 9;

        then

         A54: ((((k11 -' k21) + 1) - i) + 1) <= ((k11 -' k21) + 1);

        i <= ((k11 -' k21) + 1) by A47, A48, A52, FINSEQ_1: 59;

        then

         A55: ((((k11 -' k21) + 1) -' i) + 1) <= ((k11 -' k21) + 1) by A54, XREAL_1: 233;

        

         A56: (i + k11) <= (i + ( len f)) by A2, XREAL_1: 6;

        

         A57: i <= (i + (k21 -' 1)) by NAT_1: 11;

        

         A58: (((((k11 -' k21) + 1) -' i) + 1) + (k21 -' 1)) = (((((k11 -' k21) + 1) - i) + 1) + (k21 -' 1)) by A49, A52, XREAL_1: 233

        .= ((((k11 - (k21 - 1)) - i) + 1) + (k21 - 1)) by A6, A45, XREAL_0:def 2

        .= ((k11 - i) + 1)

        .= ((k11 -' i) + 1) by A7, A53, A57, XREAL_1: 233, XXREAL_0: 2;

        (1 + k11) <= (i + k11) by A51, XREAL_1: 6;

        then (1 + k11) <= (i + ( len f)) by A56, XXREAL_0: 2;

        then ((1 + k11) - i) <= ((i + ( len f)) - i) by XREAL_1: 9;

        then ((k11 - i) + 1) <= ( len f);

        then

         A59: (((((k11 -' k21) + 1) -' i) + 1) + (k21 -' 1)) <= ( len f) by A7, A53, A57, A58, XREAL_1: 233, XXREAL_0: 2;

        (( mid (f,k11,k21)) . i) = (((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . ((( len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) - i) + 1)) by A46, A47, A51, A52, Th114

        .= (((f /^ (k21 -' 1)) | ((k11 -' k21) + 1)) . ((( len ((f /^ (k21 -' 1)) | ((k11 -' k21) + 1))) -' i) + 1)) by A47, A52, XREAL_1: 233

        .= ((f /^ (k21 -' 1)) . ((((k11 -' k21) + 1) -' i) + 1)) by A50, A55, FINSEQ_3: 112

        .= (f . ((k11 -' i) + 1)) by A58, A59, Th113, NAT_1: 11;

        hence thesis;

      end;

    end;

    theorem :: FINSEQ_6:119

    for f be FinSequence, k1,k2 be Nat holds ( rng ( mid (f,k1,k2))) c= ( rng f)

    proof

      let f be FinSequence, k1,k2 be Nat;

      per cases ;

        suppose k1 <= k2;

        then ( mid (f,k1,k2)) = ((f /^ (k1 -' 1)) | ((k2 -' k1) + 1)) by Def3;

        then

         A1: ( rng ( mid (f,k1,k2))) c= ( rng (f /^ (k1 -' 1))) by FINSEQ_5: 19;

        ( rng (f /^ (k1 -' 1))) c= ( rng f) by FINSEQ_5: 33;

        hence thesis by A1;

      end;

        suppose k1 > k2;

        then ( mid (f,k1,k2)) = ( Rev ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1))) by Def3;

        then ( rng ( mid (f,k1,k2))) = ( rng ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1))) by FINSEQ_5: 57;

        then

         A2: ( rng ( mid (f,k1,k2))) c= ( rng (f /^ (k2 -' 1))) by FINSEQ_5: 19;

        ( rng (f /^ (k2 -' 1))) c= ( rng f) by FINSEQ_5: 33;

        hence thesis by A2;

      end;

    end;

    theorem :: FINSEQ_6:120

    for f be FinSequence st 1 <= ( len f) holds ( mid (f,1,( len f))) = f

    proof

      let f be FinSequence;

      assume

       A1: 1 <= ( len f);

      

      then ( mid (f,1,( len f))) = ((f /^ (1 -' 1)) | ((( len f) -' 1) + 1)) by Def3

      .= ((f /^ 0 ) | ((( len f) -' 1) + 1)) by XREAL_1: 232

      .= (f | ((( len f) -' 1) + 1))

      .= (f | ( len f)) by A1, XREAL_1: 235

      .= f by FINSEQ_1: 58;

      hence thesis;

    end;

    theorem :: FINSEQ_6:121

    for f be FinSequence of D st 1 <= ( len f) holds ( mid (f,( len f),1)) = ( Rev f)

    proof

      let f be FinSequence of D;

      assume

       A1: 1 <= ( len f);

      

       A2: (1 -' 1) = 0 by XREAL_1: 232;

      per cases ;

        suppose ( len f) <> 1;

        then 1 < ( len f) by A1, XXREAL_0: 1;

        

        then ( mid (f,( len f),1)) = ( Rev ((f /^ (1 -' 1)) | ((( len f) -' 1) + 1))) by Def3

        .= ( Rev ((f /^ 0 ) | ( len f))) by A1, A2, XREAL_1: 235

        .= ( Rev (f | ( len f)))

        .= ( Rev f) by FINSEQ_1: 58;

        hence thesis;

      end;

        suppose

         A3: ( len f) = 1;

        then

         A4: (f | 1) = f by FINSEQ_1: 58;

        ( mid (f,( len f),1)) = ((f /^ (1 -' 1)) | ((1 -' 1) + 1)) by A3, Def3

        .= (f | 1) by A2;

        hence thesis by A1, A4, Th110, FINSEQ_1: 59;

      end;

    end;

    theorem :: FINSEQ_6:122

    

     Th121: for f be FinSequence, k1,k2,i be Nat st 1 <= k1 & k1 <= k2 & k2 <= ( len f) & 1 <= i & (i <= ((k2 -' k1) + 1) or i <= ((k2 - k1) + 1) or i <= ((k2 + 1) - k1)) holds (( mid (f,k1,k2)) . i) = (f . ((i + k1) -' 1)) & (( mid (f,k1,k2)) . i) = (f . ((i -' 1) + k1)) & (( mid (f,k1,k2)) . i) = (f . ((i + k1) - 1)) & (( mid (f,k1,k2)) . i) = (f . ((i - 1) + k1))

    proof

      let f be FinSequence, k1,k2,i be Nat;

      assume that

       A1: 1 <= k1 and

       A2: k1 <= k2 and

       A3: k2 <= ( len f) and

       A4: 1 <= i and

       A5: i <= ((k2 -' k1) + 1) or i <= ((k2 - k1) + 1) or i <= ((k2 + 1) - k1);

      

       A6: k1 <= ( len f) by A2, A3, XXREAL_0: 2;

      (i + k1) >= (1 + k1) by A4, XREAL_1: 6;

      then

       A7: ((i + k1) - 1) >= ((1 + k1) - 1) by XREAL_1: 9;

      

       A8: i <= ((k2 - k1) + 1) implies i <= ((k2 -' k1) + 1) by A2, XREAL_1: 233;

      (i - 1) >= (1 - 1) by A4, XREAL_1: 9;

      

      then

       A9: ((i -' 1) + k1) = ((i - 1) + k1) by XREAL_0:def 2

      .= ((i + k1) -' 1) by A7, XREAL_0:def 2;

      

       A10: 1 <= k2 by A1, A2, XXREAL_0: 2;

      then ( len ( mid (f,k1,k2))) = ((k2 -' k1) + 1) by A1, A2, A3, A6, Th117;

      hence

       A11: (( mid (f,k1,k2)) . i) = (f . ((i + k1) -' 1)) & (( mid (f,k1,k2)) . i) = (f . ((i -' 1) + k1)) by A1, A2, A3, A4, A5, A10, A6, A8, A9, Th117;

      hence (( mid (f,k1,k2)) . i) = (f . ((i + k1) - 1)) by A7, XREAL_0:def 2;

      thus thesis by A4, A11, XREAL_1: 233;

    end;

    theorem :: FINSEQ_6:123

    for f be FinSequence, k,i be Nat st 1 <= i & i <= k & k <= ( len f) holds (( mid (f,1,k)) . i) = (f . i)

    proof

      let f be FinSequence, k,i be Nat;

      assume that

       A1: 1 <= i and

       A2: i <= k and

       A3: k <= ( len f);

      

       A4: i <= ((k - 1) + 1) by A2;

      1 <= k by A1, A2, XXREAL_0: 2;

      then (( mid (f,1,k)) . i) = (f . ((i + 1) -' 1)) by A1, A3, A4, Th121;

      hence thesis by NAT_D: 34;

    end;

    theorem :: FINSEQ_6:124

    for f be FinSequence, k1,k2 be Nat holds ( len ( mid (f,k1,k2))) <= ( len f)

    proof

      let f be FinSequence;

      let k1,k2 be Nat;

      per cases ;

        suppose k1 <= k2;

        then

         A1: ( mid (f,k1,k2)) = ((f /^ (k1 -' 1)) | ((k2 -' k1) + 1)) by Def3;

        per cases ;

          suppose ( len (f /^ (k1 -' 1))) <= ((k2 -' k1) + 1);

          then

           A2: ( mid (f,k1,k2)) = (f /^ (k1 -' 1)) by A1, FINSEQ_1: 58;

          per cases ;

            suppose

             A3: (k1 -' 1) <= ( len f);

            (( len f) - (k1 -' 1)) <= (( len f) - 0 ) by XREAL_1: 10;

            hence ( len ( mid (f,k1,k2))) <= ( len f) by A2, A3, RFINSEQ:def 1;

          end;

            suppose not ((k1 -' 1) <= ( len f));

            then (f /^ (k1 -' 1)) = {} by RFINSEQ:def 1;

            hence ( len ( mid (f,k1,k2))) <= ( len f) by A2;

          end;

        end;

          suppose ( len (f /^ (k1 -' 1))) > ((k2 -' k1) + 1);

          then

           A5: ( len ( mid (f,k1,k2))) <= ( len (f /^ (k1 -' 1))) by A1, FINSEQ_1: 59;

          per cases ;

            suppose (k1 -' 1) <= ( len f);

            then

             A6: ( len ( mid (f,k1,k2))) <= (( len f) - (k1 -' 1)) by A5, RFINSEQ:def 1;

            (( len f) - (k1 -' 1)) <= (( len f) - 0 ) by XREAL_1: 10;

            hence thesis by A6, XXREAL_0: 2;

          end;

            suppose not ((k1 -' 1) <= ( len f));

            then (f /^ (k1 -' 1)) = {} by RFINSEQ:def 1;

            hence thesis by A5;

          end;

        end;

      end;

        suppose k1 > k2;

        then

         A7: ( mid (f,k1,k2)) = ( Rev ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1))) by Def3;

        set m = ((f /^ (k2 -' 1)) | ((k1 -' k2) + 1));

        ( len m) <= ( len f)

        proof

          per cases ;

            suppose ( len (f /^ (k2 -' 1))) <= ((k1 -' k2) + 1);

            then

             A8: m = (f /^ (k2 -' 1)) by FINSEQ_1: 58;

            per cases ;

              suppose

               A9: (k2 -' 1) <= ( len f);

              (( len f) - (k2 -' 1)) <= (( len f) - 0 ) by XREAL_1: 10;

              hence thesis by A8, A9, RFINSEQ:def 1;

            end;

              suppose not ((k2 -' 1) <= ( len f));

              then (f /^ (k2 -' 1)) = {} by RFINSEQ:def 1;

              hence thesis;

            end;

          end;

            suppose ( len (f /^ (k2 -' 1))) > ((k1 -' k2) + 1);

            then

             A11: ( len m) <= ( len (f /^ (k2 -' 1))) by FINSEQ_1: 59;

            per cases ;

              suppose (k2 -' 1) <= ( len f);

              then

               A12: ( len m) <= (( len f) - (k2 -' 1)) by A11, RFINSEQ:def 1;

              (( len f) - (k2 -' 1)) <= (( len f) - 0 ) by XREAL_1: 10;

              hence thesis by A12, XXREAL_0: 2;

            end;

              suppose not ((k2 -' 1) <= ( len f));

              then (f /^ (k2 -' 1)) = {} by RFINSEQ:def 1;

              hence thesis;

            end;

          end;

        end;

        hence thesis by A7, FINSEQ_5:def 3;

      end;

    end;

    theorem :: FINSEQ_6:125

    

     Th124: for f be FinSequence, k be Nat, p be set holds (( <*p*> ^ f) | (k + 1)) = ( <*p*> ^ (f | k))

    proof

      let f be FinSequence, k be Nat, p be set;

      

      thus (( <*p*> ^ f) | (k + 1)) = (( <*p*> ^ f) | ( Seg (k + ( len <*p*>)))) by FINSEQ_1: 39

      .= ( <*p*> ^ (f | k)) by Th14;

    end;

    

     Th126: for D holds for f be FinSequence of D, k1,k2 be Nat st k1 < k2 & k1 in ( dom f) holds ( mid (f,k1,k2)) = ( <*(f . k1)*> ^ ( mid (f,(k1 + 1),k2)))

    proof

      let D;

      let f be FinSequence of D, k1,k2 be Nat;

      assume

       A1: k1 < k2;

      then

       A2: (k1 + 1) <= k2 by NAT_1: 13;

      

       A3: 1 <= (k2 -' k1)

      proof

        per cases by A2, XXREAL_0: 1;

          suppose (k1 + 1) = k2;

          hence thesis by NAT_D: 34;

        end;

          suppose

           A4: (k1 + 1) < k2;

          (k2 -' k1) <= 1 implies k2 <= (1 + k1)

          proof

            assume (k2 -' k1) <= 1;

            then ((k2 -' k1) + k1) <= (1 + k1) by XREAL_1: 6;

            hence thesis by A1, XREAL_1: 235;

          end;

          hence thesis by A4;

        end;

      end;

      then (k2 -' k1) = (k2 - k1) by NAT_D: 39;

      

      then

       A5: ((k2 -' k1) -' 1) = ((k2 - k1) - 1) by A3, XREAL_1: 233

      .= (k2 - (k1 + 1))

      .= (k2 -' (k1 + 1)) by A2, XREAL_1: 233;

      assume

       A6: k1 in ( dom f);

      then

       A7: (f . k1) = (f /. k1) by PARTFUN1:def 6;

      1 <= k1 by A6, FINSEQ_3: 25;

      then ((k1 -' 1) + 1) = k1 by XREAL_1: 235;

      then (f /^ (k1 -' 1)) = ( <*(f /. k1)*> ^ (f /^ k1)) by A6, FINSEQ_5: 31;

      

      hence ( mid (f,k1,k2)) = (( <*(f /. k1)*> ^ (f /^ k1)) | ((k2 -' k1) + 1)) by A1, Def3

      .= ( <*(f . k1)*> ^ ((f /^ k1) | (k2 -' k1))) by A7, Th124

      .= ( <*(f . k1)*> ^ ((f /^ k1) | ((k2 -' (k1 + 1)) + 1))) by A3, A5, XREAL_1: 235

      .= ( <*(f . k1)*> ^ ((f /^ ((k1 + 1) -' 1)) | ((k2 -' (k1 + 1)) + 1))) by NAT_D: 34

      .= ( <*(f . k1)*> ^ ( mid (f,(k1 + 1),k2))) by A2, Def3;

    end;

    theorem :: FINSEQ_6:126

    for p be FinSequence, k1,k2 be Nat st k1 < k2 & k1 in ( dom p) holds ( mid (p,k1,k2)) = ( <*(p . k1)*> ^ ( mid (p,(k1 + 1),k2)))

    proof

      let p be FinSequence, k1,k2 be Nat;

      assume

       A1: k1 < k2 & k1 in ( dom p);

      then

      reconsider D = ( rng p) as non empty set by FUNCT_1: 3;

      reconsider q = p as FinSequence of D by FINSEQ_1:def 4;

      ( mid (q,k1,k2)) = ( <*(q . k1)*> ^ ( mid (q,(k1 + 1),k2))) by A1, Th126;

      hence thesis;

    end;

    begin

    reserve p,q for FinSequence,

X,Y,x,y for set,

D for non empty set,

i,j,k,l,m,n,r for Nat;

    theorem :: FINSEQ_6:127

    

     Th1: for m,k,n be Nat holds (m + 1) <= k & k <= n iff ex i be Nat st m <= i & i < n & k = (i + 1)

    proof

      let m,k,n be Nat;

      hereby

        reconsider a19 = 1 as Integer;

        reconsider k9 = k as Integer;

        assume that

         A1: (m + 1) <= k and

         A2: k <= n;

        1 <= (m + 1) by NAT_1: 11;

        then (k9 - a19) in NAT by A1, INT_1: 5, XXREAL_0: 2;

        then

        reconsider i = (k9 - a19) as Nat;

        take i;

        ((m + 1) - 1) <= (k - 1) by A1, XREAL_1: 9;

        hence m <= i;

        k < (k + 1) by NAT_1: 13;

        then (k - 1) < ((k + 1) - 1) by XREAL_1: 9;

        hence i < n by A2, XXREAL_0: 2;

        thus k = (i + 1);

      end;

      given i be Nat such that

       A3: m <= i and

       A4: i < n and

       A5: k = (i + 1);

      thus thesis by A3, A4, A5, NAT_1: 13, XREAL_1: 7;

    end;

    theorem :: FINSEQ_6:128

    q = (p | ( Seg n)) implies ( len q) <= ( len p) & for i st 1 <= i & i <= ( len q) holds (p . i) = (q . i)

    proof

      assume

       A1: q = (p | ( Seg n));

      per cases ;

        suppose

         A2: n <= ( len p);

        hence ( len q) <= ( len p) by A1, FINSEQ_1: 17;

        let i be Nat;

        assume that

         A3: 1 <= i and

         A4: i <= ( len q);

        ( len q) = n by A1, A2, FINSEQ_1: 17;

        then i in ( Seg n) by A3, A4;

        hence thesis by A1, FUNCT_1: 49;

      end;

        suppose

         A5: ( len p) <= n;

        hence ( len q) <= ( len p) by A1, FINSEQ_2: 20;

        let i be Nat;

        assume that 1 <= i and i <= ( len q);

        thus thesis by A1, A5, FINSEQ_2: 20;

      end;

    end;

    theorem :: FINSEQ_6:129

    

     Th3: X c= ( Seg k) & Y c= ( dom ( Sgm X)) implies (( Sgm X) * ( Sgm Y)) = ( Sgm ( rng (( Sgm X) | Y)))

    proof

      assume that

       A1: X c= ( Seg k) and

       A2: Y c= ( dom ( Sgm X));

      reconsider Y9 = Y as finite set by A2;

      set M = (( Sgm X) * ( Sgm Y));

      set R = ( rng (( Sgm X) | Y));

      

       A3: Y c= ( Seg ( len ( Sgm X))) by A2, FINSEQ_1:def 3;

      then

       A4: ( rng ( Sgm Y)) = Y by FINSEQ_1:def 13;

      ( dom ( Sgm Y9)) = ( Seg ( card Y9)) by A3, FINSEQ_3: 40;

      then

       A5: ( dom M) = ( Seg ( card Y9)) by A2, A4, RELAT_1: 27;

      

       A6: ( rng ( Sgm X)) c= ( Seg k) by A1, FINSEQ_1:def 13;

      then

       A7: ( rng ( Sgm X)) c= NAT by XBOOLE_1: 1;

      reconsider M as FinSequence by A5, FINSEQ_1:def 2;

      ( rng M) c= ( rng ( Sgm X)) by RELAT_1: 26;

      then ( rng M) c= NAT by A7;

      then

      reconsider L = (( Sgm X) * ( Sgm Y)) as FinSequence of NAT by FINSEQ_1:def 4;

      now

        let y be object;

        hereby

          assume y in ( rng L);

          then

          consider x be object such that

           A8: x in ( dom L) and

           A9: y = (L . x) by FUNCT_1:def 3;

          x in ( dom ( Sgm Y)) by A8, FUNCT_1: 11;

          then

           A10: (( Sgm Y) . x) in Y by A4, FUNCT_1:def 3;

          y = (( Sgm X) . (( Sgm Y) . x)) by A8, A9, FUNCT_1: 12;

          hence y in R by A2, A10, FUNCT_1: 50;

        end;

        assume y in R;

        then

        consider x be object such that

         A11: x in ( dom (( Sgm X) | Y)) and

         A12: y = ((( Sgm X) | Y) . x) by FUNCT_1:def 3;

        

         A13: x in (( dom ( Sgm X)) /\ Y) by A11, RELAT_1: 61;

        then

         A14: x in Y by XBOOLE_0:def 4;

        then

        consider z be object such that

         A15: z in ( dom ( Sgm Y)) and

         A16: x = (( Sgm Y) . z) by A4, FUNCT_1:def 3;

        x in ( dom ( Sgm X)) by A13, XBOOLE_0:def 4;

        then

         A17: z in ( dom (( Sgm X) * ( Sgm Y))) by A15, A16, FUNCT_1: 11;

        y = (( Sgm X) . x) by A12, A14, FUNCT_1: 49;

        then (L . z) = y by A16, A17, FUNCT_1: 12;

        hence y in ( rng L) by A17, FUNCT_1:def 3;

      end;

      then

       A18: ( rng L) = R by TARSKI: 2;

       A19:

      now

        let l,m,k1,k2 be Nat;

        assume that

         A20: 1 <= l and

         A21: l < m and

         A22: m <= ( len L) and

         A23: k1 = (L . l) and

         A24: k2 = (L . m);

        l <= ( len L) by A21, A22, XXREAL_0: 2;

        then

         A25: l in ( dom L) by A20, FINSEQ_3: 25;

        then

         A26: (L . l) = (( Sgm X) . (( Sgm Y) . l)) by FUNCT_1: 12;

        1 <= m by A20, A21, XXREAL_0: 2;

        then

         A27: m in ( dom L) by A22, FINSEQ_3: 25;

        then

         A28: (L . m) = (( Sgm X) . (( Sgm Y) . m)) by FUNCT_1: 12;

        

         A29: (( Sgm Y) . l) in ( dom ( Sgm X)) by A25, FUNCT_1: 11;

        m in ( dom ( Sgm Y)) by A27, FUNCT_1: 11;

        then

         A30: m <= ( len ( Sgm Y)) by FINSEQ_3: 25;

        

         A31: (( Sgm Y) . m) in ( dom ( Sgm X)) by A27, FUNCT_1: 11;

        reconsider l, m as Element of NAT by ORDINAL1:def 12;

        reconsider K1 = (( Sgm Y) . l), K2 = (( Sgm Y) . m) as Element of NAT by ORDINAL1:def 12;

        

         A32: 1 <= K1 by A29, FINSEQ_3: 25;

        

         A33: K2 <= ( len ( Sgm X)) by A31, FINSEQ_3: 25;

        K1 < K2 by A3, A20, A21, A30, FINSEQ_1:def 13;

        hence k1 < k2 by A1, A23, A24, A26, A28, A32, A33, FINSEQ_1:def 13;

      end;

      R c= ( rng ( Sgm X)) by RELAT_1: 70;

      then R c= ( Seg k) by A6;

      hence thesis by A18, A19, FINSEQ_1:def 13;

    end;

    

     Lm1: for m,n be Nat, F be finite set st F = { k where k be Nat : m <= k & k <= (m + n) } holds ( card F) = (n + 1)

    proof

      let m be Nat;

      defpred P[ Nat] means for F be finite set st F = { k where k be Nat : m <= k & k <= (m + $1) } holds ( card F) = ($1 + 1);

       A1:

      now

        let n be Nat;

        assume

         A2: P[n];

        thus P[(n + 1)]

        proof

          

           A3: ( succ ( Segm (m + n))) = { k where k be Nat : k <= (m + n) } by NAT_1: 54;

          set F1 = { k where k be Nat : m <= k & k <= (m + n) };

          F1 c= ( succ ( Segm (m + n)))

          proof

            let x be object;

            assume x in F1;

            then ex k be Nat st x = k & m <= k & k <= (m + n);

            hence thesis by A3;

          end;

          then

          reconsider F1 as finite set;

          let F be finite set;

          

           A4: not (m + (n + 1)) in { k where k be Nat : m <= k & k <= (m + n) }

          proof

            assume not thesis;

            then ex k be Nat st (m + (n + 1)) = k & m <= k & k <= (m + n);

            then ((m + n) + 1) <= ((m + n) + 0 );

            hence contradiction by XREAL_1: 6;

          end;

          assume

           A5: F = { k where k be Nat : m <= k & k <= (m + (n + 1)) };

          now

            let x be object;

            hereby

              assume x in F;

              then

              consider k be Nat such that

               A6: x = k and

               A7: m <= k and

               A8: k <= (m + (n + 1)) by A5;

              k <= ((m + n) + 1) by A8;

              then k <= (m + n) or k = (m + (n + 1)) by NAT_1: 8;

              then k in F1 or k in {(m + (n + 1))} by A7, TARSKI:def 1;

              hence x in (F1 \/ {(m + (n + 1))}) by A6, XBOOLE_0:def 3;

            end;

            assume

             A9: x in (F1 \/ {(m + (n + 1))});

            per cases by A9, XBOOLE_0:def 3;

              suppose x in F1;

              then

              consider k be Nat such that

               A10: x = k and

               A11: m <= k and

               A12: k <= (m + n);

              k <= ((m + n) + 1) by A12, NAT_1: 12;

              hence x in F by A5, A10, A11;

            end;

              suppose

               A13: x in {(m + (n + 1))};

              then

              reconsider k = x as Element of NAT by TARSKI:def 1;

              

               A14: x = (m + (n + 1)) by A13, TARSKI:def 1;

              then m <= k by NAT_1: 11;

              hence x in F by A5, A14;

            end;

          end;

          then

           A15: F = ({ k where k be Nat : m <= k & k <= (m + n) } \/ {(m + (n + 1))}) by TARSKI: 2;

          ( card F1) = (n + 1) by A2;

          hence thesis by A15, A4, CARD_2: 41;

        end;

      end;

      

       A16: P[ 0 ]

      proof

        let F be finite set;

        assume

         A17: F = { k where k be Nat : m <= k & k <= (m + 0 ) };

        now

          let x be object;

          hereby

            assume x in F;

            then ex k be Nat st x = k & m <= k & k <= (m + 0 ) by A17;

            hence x = m by XXREAL_0: 1;

          end;

          assume x = m;

          hence x in F by A17;

        end;

        then F = {m} by TARSKI:def 1;

        hence thesis by CARD_1: 30;

      end;

      for n be Nat holds P[n] from NAT_1:sch 2( A16, A1);

      hence thesis;

    end;

    theorem :: FINSEQ_6:130

    

     Th4: for m,n be Nat holds ( card { k where k be Nat : m <= k & k <= (m + n) }) = (n + 1)

    proof

      deffunc F( Nat) = $1;

      let m,n be Nat;

      defpred P[ Nat] means m <= $1;

      set F = { F(k) where k be Nat : k <= (m + n) & P[k] };

      F is finite from FINSEQ_1:sch 6;

      then

      reconsider F as finite set;

      F = { F(k) where k be Nat : m <= k & k <= (m + n) }

      proof

        thus F c= { F(k) where k be Nat : m <= k & k <= (m + n) }

        proof

          let x be object;

          assume x in F;

          then ex k1 be Nat st x = F(k1) & k1 <= (m + n) & m <= k1;

          then ex k1 be Nat st x = F(k1) & m <= k1 & k1 <= (m + n);

          hence thesis;

        end;

        let x be object;

        assume x in { F(k) where k be Nat : m <= k & k <= (m + n) };

        then ex k1 be Nat st x = F(k1) & m <= k1 & k1 <= (m + n);

        hence thesis;

      end;

      then

      reconsider G = { F(k) where k be Nat : m <= k & k <= (m + n) } as finite set;

      ( card G) = (n + 1) by Lm1;

      hence thesis;

    end;

    theorem :: FINSEQ_6:131

    for l st 1 <= l & l <= n holds (( Sgm { kk where kk be Nat : (m + 1) <= kk & kk <= (m + n) }) . l) = (m + l)

    proof

      set F = ( Sgm { kk where kk be Nat : (m + 1) <= kk & kk <= (m + n) });

      defpred P[ Nat] means 1 <= $1 & $1 <= n & (F . $1) <> (m + $1);

      set rF = { kk where kk be Nat : (m + 1) <= kk & kk <= (m + n) };

      

       A1: rF c= ( Seg (m + n))

      proof

        let x be object;

        assume x in rF;

        then

        consider x9 be Nat such that

         A2: x9 = x and

         A3: (m + 1) <= x9 and

         A4: x9 <= (m + n);

        1 <= (m + 1) by NAT_1: 11;

        then 1 <= x9 by A3, XXREAL_0: 2;

        hence thesis by A2, A4;

      end;

      then

      reconsider rF as finite set;

      assume ex l st P[l];

      then

       A5: ex l be Nat st P[l];

      consider k be Nat such that

       A6: P[k] and

       A7: for nn be Nat st P[nn] holds k <= nn from NAT_1:sch 5( A5);

      reconsider k as Element of NAT by ORDINAL1:def 12;

      

       A8: (m + k) <= (m + n) by A6, XREAL_1: 7;

      reconsider Fk = (F . k) as Element of NAT by ORDINAL1:def 12;

      

       A9: ( card rF) = n

      proof

        per cases ;

          suppose

           A10: n = 0 ;

          rF = {}

          proof

            assume rF <> {} ;

            then

            consider x be object such that

             A11: x in rF by XBOOLE_0:def 1;

            ex x9 be Nat st x9 = x & (m + 1) <= x9 & x9 <= (m + n) by A11;

            then (m + 1) <= (m + 0 ) by A10, XXREAL_0: 2;

            hence contradiction by XREAL_1: 6;

          end;

          hence thesis by A10;

        end;

          suppose 0 < n;

          then ( 0 + 1) <= n by NAT_1: 13;

          then (1 - 1) <= (n - 1) by XREAL_1: 9;

          then (n -' 1) = (n - 1) by XREAL_0:def 2;

          then

          reconsider n1 = (n - 1) as Element of NAT ;

          ((m + 1) + n1) = (m + n);

          then ( card rF) = (n1 + 1) by Th4;

          hence thesis;

        end;

      end;

      then

       A12: ( len ( Sgm rF)) = n by A1, FINSEQ_3: 39;

      

       A13: ( rng F) = rF by A1, FINSEQ_1:def 13;

      now

        defpred P[ Nat] means for Fk be Element of NAT st 1 <= $1 & $1 <= n & Fk = (F . $1) holds (m + $1) <= Fk;

        

         A14: for k be Nat st P[k] holds P[(k + 1)]

        proof

          let k be Nat;

          assume

           A15: P[k];

          

           A16: k < (k + 1) by NAT_1: 13;

          let Fk1 be Element of NAT ;

          assume that

           A17: 1 <= (k + 1) and

           A18: (k + 1) <= n and

           A19: Fk1 = (F . (k + 1));

          per cases by A17, XXREAL_0: 1;

            suppose

             A20: 1 < (k + 1);

            reconsider Fk = (F . k) as Element of NAT by ORDINAL1:def 12;

            

             A21: 1 <= k by A20, NAT_1: 13;

            k <= n by A18, NAT_1: 13;

            then

             A22: (m + k) <= Fk by A15, A21;

            Fk < Fk1 by A1, A12, A18, A19, A16, A21, FINSEQ_1:def 13;

            then (m + k) < Fk1 by A22, XXREAL_0: 2;

            then ((m + k) + 1) <= Fk1 by NAT_1: 13;

            hence thesis;

          end;

            suppose

             A23: 1 = (k + 1);

            then 1 in ( dom F) by A12, A18, FINSEQ_3: 25;

            then (F . 1) in ( rng F) by FUNCT_1:def 3;

            then ex F1 be Nat st F1 = (F . 1) & (m + 1) <= F1 & F1 <= (m + n) by A13;

            hence thesis by A19, A23;

          end;

        end;

        

         A24: P[ 0 ];

        thus for k be Nat holds P[k] from NAT_1:sch 2( A24, A14);

      end;

      then

       A25: (m + k) <= Fk by A6;

      (m + 1) <= (m + k) by A6, XREAL_1: 7;

      then (m + k) in rF by A8;

      then (m + k) in ( rng ( Sgm rF)) by A1, FINSEQ_1:def 13;

      then

      consider x be object such that

       A26: x in ( dom ( Sgm rF)) and

       A27: (m + k) = (( Sgm rF) . x) by FUNCT_1:def 3;

      reconsider x as Element of NAT by A26;

      

       A28: ( dom ( Sgm rF)) = ( Seg n) by A1, A9, FINSEQ_3: 40;

      then

       A29: 1 <= x by A26, FINSEQ_1: 1;

      

       A30: x <= n by A28, A26, FINSEQ_1: 1;

      per cases by A6, A27, XXREAL_0: 1;

        suppose k < x;

        hence contradiction by A6, A1, A12, A27, A25, A30, FINSEQ_1:def 13;

      end;

        suppose

         A31: k > x;

        (F . x) <> (m + x) by A6, A27, XCMPLX_1: 2;

        hence contradiction by A7, A29, A30, A31;

      end;

    end;

    begin

    definition

      let p be FinSequence, m,n be Nat;

      :: FINSEQ_6:def4

      func (m,n) -cut p -> FinSequence means

      : Def1: (( len it ) + m) = (n + 1) & for i be Nat st i < ( len it ) holds (it . (i + 1)) = (p . (m + i)) if 1 <= m & m <= n & n <= ( len p)

      otherwise it = {} ;

      consistency ;

      existence

      proof

        hereby

          deffunc F( Nat) = (p . (m + ($1 - 1)));

          assume that 1 <= m and

           A1: m <= n and n <= ( len p);

          consider s be FinSequence such that

           A2: ( len s) = ((n + 1) -' m) & for k be Nat st k in ( dom s) holds (s . k) = F(k) from FINSEQ_1:sch 2;

          take s;

          n <= (n + 1) by XREAL_1: 29;

          then m <= (n + 1) by A1, XXREAL_0: 2;

          then (m - m) <= ((n + 1) - m) by XREAL_1: 9;

          then (( len s) + m) = (((n + 1) - m) + m) by A2, XREAL_0:def 2;

          hence (( len s) + m) = (n + 1);

          let k be Nat;

          assume k < ( len s);

          then

           A3: (k + 1) <= ( len s) by NAT_1: 13;

          ( 0 + 1) <= (k + 1) by XREAL_1: 7;

          then (k + 1) in ( dom s) by A3, FINSEQ_3: 25;

          

          hence (s . (k + 1)) = (p . (m + ((k + 1) - 1))) by A2

          .= (p . (m + k));

        end;

        thus thesis;

      end;

      uniqueness

      proof

        let s1,s2 be FinSequence;

        hereby

          assume that 1 <= m and m <= n and n <= ( len p);

          assume that

           A4: (( len s1) + m) = (n + 1) and

           A5: for i be Nat st i < ( len s1) holds (s1 . (i + 1)) = (p . (m + i));

          assume that

           A6: (( len s2) + m) = (n + 1) and

           A7: for i be Nat st i < ( len s2) holds (s2 . (i + 1)) = (p . (m + i));

          now

            thus ( len s1) = ( len s1);

            thus ( len s2) = ( len s1) by A4, A6;

            let i be Nat;

            assume

             A8: i in ( dom s1);

            

             A9: ( dom s1) = ( Seg ( len s1)) by FINSEQ_1:def 3;

            

             A10: i <= ( len s1) by A8, FINSEQ_3: 25;

            ( 0 + 1) <= i by A9, A8, FINSEQ_1: 1;

            then

            consider k such that 0 <= k and

             A11: k < ( len s1) and

             A12: i = (k + 1) by A10, Th1;

            

            thus (s1 . i) = (p . (m + k)) by A5, A11, A12

            .= (s2 . i) by A4, A6, A7, A11, A12;

          end;

          hence s1 = s2 by FINSEQ_2: 9;

        end;

        thus thesis;

      end;

    end

    

     Lm2: for p be FinSequence, m,n be Nat st 1 <= m & m <= (n + 1) & n <= ( len p) holds (( len ((m,n) -cut p)) + m) = (n + 1) & for i be Nat st i < ( len ((m,n) -cut p)) holds (((m,n) -cut p) . (i + 1)) = (p . (m + i))

    proof

      let p be FinSequence, m,n be Nat such that

       A1: 1 <= m and

       A2: m <= (n + 1) and

       A3: n <= ( len p);

      

       A4: m = (n + 1) or m < (n + 1) by A2, XXREAL_0: 1;

      per cases by A4, NAT_1: 13;

        suppose

         A5: m = (n + 1);

        then

         A6: n < m by XREAL_1: 29;

        then ((m,n) -cut p) = {} by Def1;

        hence (( len ((m,n) -cut p)) + m) = (n + 1) by A5;

        thus thesis by A6, Def1, CARD_1: 27;

      end;

        suppose m <= n;

        hence thesis by A1, A3, Def1;

      end;

    end;

    theorem :: FINSEQ_6:132

    1 <= m & m <= ( len p) implies ((m,m) -cut p) = <*(p . m)*>

    proof

      assume that

       A1: 1 <= m and

       A2: m <= ( len p);

      set mp = ((m,m) -cut p);

      

       A3: (( len mp) + m) = (m + 1) by A1, A2, Def1;

      

      then (mp . ( 0 + 1)) = (p . (m + 0 )) by A1, A2, Def1

      .= (p . m);

      hence thesis by A3, FINSEQ_1: 40;

    end;

    theorem :: FINSEQ_6:133

    

     Th7: ((1,( len p)) -cut p) = p

    proof

      set cp = ((1,( len p)) -cut p);

      now

        

         A1: 1 <= (( len p) + 1) by NAT_1: 11;

        then

         A2: (( len cp) + 1) = (( len p) + 1) by Lm2;

        hence ( len cp) = ( len p);

        thus ( len p) = ( len p);

        let i be Nat;

        assume

         A3: i in ( dom cp);

        

         A4: ( dom cp) = ( Seg ( len p)) by A2, FINSEQ_1:def 3;

        then

         A5: i <= ( len p) by A3, FINSEQ_1: 1;

        ( 0 + 1) <= i by A4, A3, FINSEQ_1: 1;

        then ex k be Nat st 0 <= k & k < ( len cp) & i = (k + 1) by A2, A5, Th1;

        hence (cp . i) = (p . i) by A1, Lm2;

      end;

      hence thesis by FINSEQ_2: 9;

    end;

    theorem :: FINSEQ_6:134

    

     Th8: m <= n & n <= r & r <= ( len p) implies ((((m + 1),n) -cut p) ^ (((n + 1),r) -cut p)) = (((m + 1),r) -cut p)

    proof

      assume that

       A1: m <= n and

       A2: n <= r and

       A3: r <= ( len p);

      set p3 = (((m + 1),r) -cut p);

      set p2 = (((n + 1),r) -cut p);

      set p1 = (((m + 1),n) -cut p);

      set p12 = (p1 ^ p2);

      now

        reconsider n9 = n as Integer;

        reconsider m9 = m as Integer;

        thus ( len p12) = ( len p12);

        

         A4: ( dom p12) = ( Seg ( len p12)) by FINSEQ_1:def 3;

        reconsider nm = (n9 - m9) as Element of NAT by A1, INT_1: 5;

        

         A5: 1 <= (m + 1) by NAT_1: 11;

        m <= r by A1, A2, XXREAL_0: 2;

        then

         A6: (m + 1) <= (r + 1) by XREAL_1: 6;

        

         A7: (m + 1) <= (n + 1) by A1, XREAL_1: 6;

        

         A8: (n + 1) <= (r + 1) by A2, XREAL_1: 6;

        then (m + 1) <= (r + 1) by A7, XXREAL_0: 2;

        then

         A9: (( len p3) + (m + 1)) = (r + 1) by A3, A5, Lm2;

        

         A10: n <= ( len p) by A2, A3, XXREAL_0: 2;

        then

         A11: (( len p1) + (m + 1)) = (n + 1) by A5, A7, Lm2;

        

         A12: 1 <= (n + 1) by NAT_1: 11;

        then (( len p2) + (n + 1)) = (r + 1) by A3, A8, Lm2;

        

        then

         A13: ( len p12) = ((n - m) + (r + ( - n))) by A11, FINSEQ_1: 22

        .= (r - m);

        hence ( len p3) = ( len p12) by A9;

        let i be Nat;

        assume

         A14: i in ( dom p12);

        then

         A15: 1 <= i by A4, FINSEQ_1: 1;

        

         A16: i <= ( len p12) by A4, A14, FINSEQ_1: 1;

        per cases by NAT_1: 13;

          suppose

           A17: i <= nm;

          ( 0 + 1) = 1;

          then

          consider k be Nat such that 0 <= k and

           A18: k < nm and

           A19: i = (k + 1) by A15, A17, Th1;

          nm <= (r - m) by A2, XREAL_1: 9;

          then

           A20: k < ( len p3) by A9, A18, XXREAL_0: 2;

          i in ( dom p1) by A11, A15, A17, FINSEQ_3: 25;

          

          hence (p12 . i) = (p1 . i) by FINSEQ_1:def 7

          .= (p . ((m + 1) + k)) by A5, A7, A10, A11, A18, A19, Lm2

          .= (p3 . i) by A3, A5, A6, A19, A20, Lm2;

        end;

          suppose (nm + 1) <= i;

          then

          consider k such that

           A21: nm <= k and

           A22: k < ( len p12) and

           A23: i = (k + 1) by A16, Th1;

          reconsider k99 = k as Integer;

          reconsider k9 = (k99 - nm) as Element of NAT by A21, INT_1: 5;

          

           A24: 1 <= (k9 + 1) by NAT_1: 11;

          ( len p12) = (( len p2) + ( len p1)) by FINSEQ_1: 22;

          then ( len p2) = (( len p12) - ( len p1));

          then

           A25: k9 < ( len p2) by A11, A22, XREAL_1: 9;

          then (k9 + 1) <= ( len p2) by NAT_1: 13;

          then

           A26: (k9 + 1) in ( dom p2) by A24, FINSEQ_3: 25;

          

           A27: ((n + 1) + k9) = ((m + 1) + k);

          i = (nm + (k9 + 1)) by A23;

          

          hence (p12 . i) = (p2 . (k9 + 1)) by A11, A26, FINSEQ_1:def 7

          .= (p . ((n + 1) + k9)) by A3, A12, A8, A25, Lm2

          .= (p3 . i) by A3, A5, A6, A13, A9, A22, A23, A27, Lm2;

        end;

      end;

      hence thesis by FINSEQ_2: 9;

    end;

    theorem :: FINSEQ_6:135

    m <= ( len p) implies (((1,m) -cut p) ^ (((m + 1),( len p)) -cut p)) = p

    proof

      set cp1 = ((1,m) -cut p);

      set cpm = (((m + 1),( len p)) -cut p);

      

       A1: ( 0 + 1) = 1;

      assume m <= ( len p);

      

      hence (cp1 ^ cpm) = ((1,( len p)) -cut p) by A1, Th8

      .= p by Th7;

    end;

    theorem :: FINSEQ_6:136

    m <= n & n <= ( len p) implies ((((1,m) -cut p) ^ (((m + 1),n) -cut p)) ^ (((n + 1),( len p)) -cut p)) = p

    proof

      assume that

       A1: m <= n and

       A2: n <= ( len p);

      set cp3 = (((n + 1),( len p)) -cut p);

      set cp2 = (((m + 1),n) -cut p);

      set cp1 = ((1,m) -cut p);

      

       A3: ( 0 + 1) = 1;

      

      hence ((cp1 ^ cp2) ^ cp3) = (((1,n) -cut p) ^ cp3) by A1, A2, Th8

      .= ((1,( len p)) -cut p) by A2, A3, Th8

      .= p by Th7;

    end;

    theorem :: FINSEQ_6:137

    

     Th11: ( rng ((m,n) -cut p)) c= ( rng p)

    proof

      set c = ((m,n) -cut p);

       A1:

      now

        assume that

         A2: 1 <= m and

         A3: m <= n and

         A4: n <= ( len p);

        n <= (n + 1) by NAT_1: 11;

        then

         A5: m <= (n + 1) by A3, XXREAL_0: 2;

        thus thesis

        proof

          let x be object;

          assume x in ( rng c);

          then

          consider z be object such that

           A6: z in ( dom c) and

           A7: x = (c . z) by FUNCT_1:def 3;

          reconsider z as Element of NAT by A6;

          

           A8: z <= ( len c) by A6, FINSEQ_3: 25;

          ( 0 + 1) <= z by A6, FINSEQ_3: 25;

          then

          consider i such that 0 <= i and

           A9: i < ( len c) and

           A10: z = (i + 1) by A8, Th1;

          (m + i) < (( len c) + m) by A9, XREAL_1: 6;

          then (m + i) < (n + 1) by A2, A4, A5, Lm2;

          then (m + i) <= n by NAT_1: 13;

          then

           A11: (m + i) <= ( len p) by A4, XXREAL_0: 2;

          1 <= (m + i) by A2, NAT_1: 12;

          then

           A12: (m + i) in ( dom p) by A11, FINSEQ_3: 25;

          (c . z) = (p . (m + i)) by A2, A4, A5, A9, A10, Lm2;

          hence thesis by A7, A12, FUNCT_1:def 3;

        end;

      end;

      now

        assume not (1 <= m & m <= n & n <= ( len p));

        then c = {} by Def1;

        then ( rng c) = {} ;

        hence thesis;

      end;

      hence thesis by A1;

    end;

    definition

      let D be set, p be FinSequence of D, m,n be Nat;

      :: original: -cut

      redefine

      func (m,n) -cut p -> FinSequence of D ;

      coherence

      proof

        

         A1: ( rng p) c= D by FINSEQ_1:def 4;

        ( rng ((m,n) -cut p)) c= ( rng p) by Th11;

        then ( rng ((m,n) -cut p)) c= D by A1;

        hence thesis by FINSEQ_1:def 4;

      end;

    end

    theorem :: FINSEQ_6:138

    1 <= m & m <= n & n <= ( len p) implies (((m,n) -cut p) . 1) = (p . m) & (((m,n) -cut p) . ( len ((m,n) -cut p))) = (p . n)

    proof

      set c = ((m,n) -cut p);

      assume that

       A1: 1 <= m and

       A2: m <= n and

       A3: n <= ( len p);

      

       A4: m <= (n + 1) by A2, NAT_1: 12;

      then

       A5: (( len c) + m) = (n + 1) by A1, A3, Lm2;

       A6:

      now

        assume ( len c) = 0 ;

        then (n + 1) <= (n + 0 ) by A2, A5;

        hence contradiction by XREAL_1: 6;

      end;

      then ( 0 + 1) <= ( len c) by NAT_1: 13;

      then

      consider i be Nat such that 0 <= i and

       A7: i < ( len c) and

       A8: ( len c) = (i + 1) by Th1;

      ( 0 + 1) = 1;

      

      hence (c . 1) = (p . (m + 0 )) by A1, A3, A4, A6, Lm2

      .= (p . m);

      (m + i) = n by A5, A8;

      hence thesis by A1, A3, A4, A7, A8, Lm2;

    end;

    begin

    definition

      let p,q be FinSequence;

      :: FINSEQ_6:def5

      func p ^' q -> FinSequence equals (p ^ ((2,( len q)) -cut q));

      correctness ;

    end

    theorem :: FINSEQ_6:139

    

     Th13: q <> {} implies (( len (p ^' q)) + 1) = (( len p) + ( len q))

    proof

      set r = (p ^' q);

      set qc = ((2,( len q)) -cut q);

      assume q <> {} ;

      then ( 0 + 1) <= ( len q) by NAT_1: 13;

      then (1 + 1) <= (( len q) + 1) by XREAL_1: 7;

      then

       A1: (( len qc) + (1 + 1)) = (( len q) + 1) by Lm2;

      

      thus (( len r) + 1) = ((( len p) + ( len qc)) + 1) by FINSEQ_1: 22

      .= (( len p) + ( len q)) by A1;

    end;

    theorem :: FINSEQ_6:140

    

     Th14: 1 <= k & k <= ( len p) implies ((p ^' q) . k) = (p . k)

    proof

      assume that

       A1: 1 <= k and

       A2: k <= ( len p);

      k in ( dom p) by A1, A2, FINSEQ_3: 25;

      hence thesis by FINSEQ_1:def 7;

    end;

    theorem :: FINSEQ_6:141

    

     Th15: 1 <= k & k < ( len q) implies ((p ^' q) . (( len p) + k)) = (q . (k + 1))

    proof

      set qc = ((2,( len q)) -cut q);

      assume that

       A1: 1 <= k and

       A2: k < ( len q);

      per cases ;

        suppose q = {} ;

        hence thesis by A2;

      end;

        suppose q <> {} ;

        then ( 0 + 1) <= ( len q) by NAT_1: 13;

        then

         A3: (1 + 1) <= (( len q) + 1) by XREAL_1: 7;

        then (( len qc) + (1 + 1)) = (( len q) + 1) by Lm2;

        then ((( len qc) + 1) + 1) = (( len q) + 1);

        then

         A4: k <= ( len qc) by A2, NAT_1: 13;

        ( 0 + 1) <= k by A1;

        then

        consider i be Nat such that 0 <= i and

         A5: i < ( len qc) and

         A6: k = (i + 1) by A4, Th1;

        k in ( dom qc) by A1, A4, FINSEQ_3: 25;

        

        hence ((p ^' q) . (( len p) + k)) = (qc . k) by FINSEQ_1:def 7

        .= (q . ((1 + 1) + i)) by A3, A5, A6, Lm2

        .= (q . (k + 1)) by A6;

      end;

    end;

    theorem :: FINSEQ_6:142

    

     Th16: 1 < ( len q) implies ((p ^' q) . ( len (p ^' q))) = (q . ( len q))

    proof

      set r = (p ^' q);

      set qc = ((2,( len q)) -cut q);

      assume

       A1: 1 < ( len q);

      then (1 + 1) <= ( len q) by NAT_1: 13;

      then

       A2: ((1 + 1) - 1) <= (( len q) - 1) by XREAL_1: 9;

      q <> {} by A1;

      then ((( len r) + 1) - 1) = ((( len p) + ( len q)) - 1) by Th13;

      then

       A3: ( len r) = (( len p) + (( len q) - 1));

      (1 + 1) <= (( len q) + 1) by A1, XREAL_1: 7;

      then (( len qc) + (1 + 1)) = (( len q) + 1) by Lm2;

      then

       A4: ((( len qc) + 1) + 1) = (( len q) + 1);

      then ( len qc) < ( len q) by NAT_1: 13;

      hence thesis by A3, A4, A2, Th15;

    end;

    theorem :: FINSEQ_6:143

    

     Th17: ( rng (p ^' q)) c= (( rng p) \/ ( rng q))

    proof

      set r = (p ^' q);

      set qc = ((2,( len q)) -cut q);

      let x be object;

      assume x in ( rng r);

      then x in (( rng p) \/ ( rng qc)) by FINSEQ_1: 31;

      then

       A1: x in ( rng p) or x in ( rng qc) by XBOOLE_0:def 3;

      ( rng qc) c= ( rng q) by Th11;

      hence thesis by A1, XBOOLE_0:def 3;

    end;

    definition

      let D be set, p,q be FinSequence of D;

      :: original: ^'

      redefine

      func p ^' q -> FinSequence of D ;

      coherence

      proof

        

         A1: ( rng (p ^' q)) c= (( rng p) \/ ( rng q)) by Th17;

        

         A2: ( rng q) c= D by FINSEQ_1:def 4;

        ( rng p) c= D by FINSEQ_1:def 4;

        then (( rng p) \/ ( rng q)) c= D by A2, XBOOLE_1: 8;

        then ( rng (p ^' q)) c= D by A1;

        hence thesis by FINSEQ_1:def 4;

      end;

    end

    theorem :: FINSEQ_6:144

    p <> {} & q <> {} & (p . ( len p)) = (q . 1) implies ( rng (p ^' q)) = (( rng p) \/ ( rng q))

    proof

      set r = (p ^' q);

      set qc = ((2,( len q)) -cut q);

      assume that

       A1: p <> {} and

       A2: q <> {} and

       A3: (p . ( len p)) = (q . 1);

      ( 0 + 1) <= ( len q) by A2, NAT_1: 13;

      then

       A4: (1 + 1) <= (( len q) + 1) by XREAL_1: 7;

      then (( len qc) + (1 + 1)) = (( len q) + 1) by Lm2;

      then

       A5: ((( len qc) + 1) + 1) = (( len q) + 1);

      now

        let x be object;

        hereby

          assume x in ( rng r);

          then x in (( rng p) \/ ( rng qc)) by FINSEQ_1: 31;

          then

           A6: x in ( rng p) or x in ( rng qc) by XBOOLE_0:def 3;

          ( rng qc) c= ( rng q) by Th11;

          hence x in (( rng p) \/ ( rng q)) by A6, XBOOLE_0:def 3;

        end;

        assume x in (( rng p) \/ ( rng q));

        then

         A7: x in ( rng p) or x in ( rng q) by XBOOLE_0:def 3;

        assume not x in ( rng r);

        then

         A8: not x in (( rng p) \/ ( rng qc)) by FINSEQ_1: 31;

        then

        consider y be object such that

         A9: y in ( dom q) and

         A10: x = (q . y) by A7, FUNCT_1:def 3, XBOOLE_0:def 3;

        

         A11: not x in ( rng p) by A8, XBOOLE_0:def 3;

        reconsider y as Element of NAT by A9;

        

         A12: 1 <= y by A9, FINSEQ_3: 25;

        

         A13: y <= ( len q) by A9, FINSEQ_3: 25;

        

         A14: not x in ( rng qc) by A8, XBOOLE_0:def 3;

        per cases by A12, XXREAL_0: 1;

          suppose

           A15: y = 1;

          ( 0 + 1) <= ( len p) by A1, NAT_1: 13;

          then ( len p) in ( dom p) by FINSEQ_3: 25;

          hence contradiction by A3, A11, A10, A15, FUNCT_1:def 3;

        end;

          suppose 1 < y;

          then (1 + 1) <= y by NAT_1: 13;

          then

          consider i such that

           A16: 1 <= i and

           A17: i < ( len q) and

           A18: y = (i + 1) by A13, Th1;

          

           A19: i <= ( len qc) by A5, A17, NAT_1: 13;

          then

           A20: i in ( dom qc) by A16, FINSEQ_3: 25;

          ( 0 + 1) <= i by A16;

          then

          consider j such that 0 <= j and

           A21: j < ( len qc) and

           A22: i = (j + 1) by A19, Th1;

          (qc . (j + 1)) = (q . ((1 + 1) + j)) by A4, A21, Lm2

          .= (q . y) by A18, A22;

          hence contradiction by A14, A10, A22, A20, FUNCT_1:def 3;

        end;

      end;

      hence thesis by TARSKI: 2;

    end;

    begin

    definition

      let f be FinSequence;

      :: FINSEQ_6:def6

      attr f is TwoValued means ( card ( rng f)) = 2;

    end

     Lm3:

    now

      set p = <*1, 2*>;

      2 > 1;

      hence ( len p) > 1 by FINSEQ_1: 44;

      thus 1 <> 2;

      

      thus ( rng p) = (( rng <*1*>) \/ ( rng <*2*>)) by FINSEQ_1: 31

      .= ( {1} \/ ( rng <*2*>)) by FINSEQ_1: 38

      .= ( {1} \/ {2}) by FINSEQ_1: 38

      .= {1, 2} by ENUMSET1: 1;

    end;

    theorem :: FINSEQ_6:145

    

     Th19: p is TwoValued iff ( len p) > 1 & ex x,y be object st x <> y & ( rng p) = {x, y}

    proof

      hereby

        assume p is TwoValued;

        then ( card ( rng p)) = 2;

        then

        consider x,y be object such that

         A1: x <> y and

         A2: ( rng p) = {x, y} by CARD_2: 60;

        thus ( len p) > 1

        proof

          set l = ( len p);

          assume

           A3: ( len p) <= 1;

          per cases by A3, NAT_1: 25;

            suppose l = 0 ;

            then p = {} ;

            hence contradiction by A2;

          end;

            suppose

             A4: l = 1;

            then 1 in ( dom p) by FINSEQ_3: 25;

            then

            consider z be object such that

             A5: [1, z] in p by XTUPLE_0:def 12;

            z = (p . 1) by A5, FUNCT_1: 1;

            then p = <*z*> by A4, FINSEQ_1: 40;

            then

             A6: ( rng p) = {z} by FINSEQ_1: 39;

            then z = x by A2, ZFMISC_1: 4;

            hence contradiction by A1, A2, A6, ZFMISC_1: 4;

          end;

        end;

        thus ex x,y be object st x <> y & ( rng p) = {x, y} by A1, A2;

      end;

      assume ( len p) > 1;

      given x,y be object such that

       A7: x <> y and

       A8: ( rng p) = {x, y};

      ( card ( rng p)) = 2 by A7, A8, CARD_2: 57;

      hence thesis;

    end;

    then

     Lm4: <*1, 2*> is TwoValued by Lm3;

     Lm5:

    now

      let i be Nat;

      set p = <*1, 2*>;

      assume that

       A1: 1 <= i and

       A2: (i + 1) <= ( len p);

      (i + 1) <= (1 + 1) by A2, FINSEQ_1: 44;

      then i <= 1 by XREAL_1: 6;

      then

       A3: i = 1 by A1, XXREAL_0: 1;

      then (p . i) = 1 by FINSEQ_1: 44;

      hence (p . i) <> (p . (i + 1)) by A3, FINSEQ_1: 44;

    end;

    definition

      let f be FinSequence;

      :: FINSEQ_6:def7

      attr f is Alternating means

      : Def4: for i be Nat st 1 <= i & (i + 1) <= ( len f) holds (f . i) <> (f . (i + 1));

    end

    

     Lm6: <*1, 2*> is Alternating by Lm5;

    registration

      cluster TwoValued Alternating for FinSequence;

      existence by Lm4, Lm6;

    end

    reserve a,a1,a2 for TwoValued Alternating FinSequence;

    theorem :: FINSEQ_6:146

    

     Th20: ( len a1) = ( len a2) & ( rng a1) = ( rng a2) & (a1 . 1) = (a2 . 1) implies a1 = a2

    proof

      assume that

       A1: ( len a1) = ( len a2) and

       A2: ( rng a1) = ( rng a2) and

       A3: (a1 . 1) = (a2 . 1);

      defpred P[ Nat] means 1 <= $1 & $1 <= ( len a1) implies (a1 . $1) = (a2 . $1);

      

       A4: for k be Nat st P[k] holds P[(k + 1)]

      proof

        let k be Nat;

        assume that

         A5: 1 <= k & k <= ( len a1) implies (a1 . k) = (a2 . k);

        

         A6: 0 = k or 0 < k & ( 0 + 1) = 1;

        assume that

         A7: 1 <= (k + 1) and

         A8: (k + 1) <= ( len a1);

        

         A9: (k + 1) in ( dom a1) by A7, A8, FINSEQ_3: 25;

        per cases by A6, NAT_1: 13;

          suppose 0 = k;

          hence thesis by A3;

        end;

          suppose

           A10: 1 <= k;

          

           A11: ( dom a2) = ( Seg ( len a2)) by FINSEQ_1:def 3;

          consider X,Y be object such that X <> Y and

           A12: ( rng a1) = {X, Y} by Th19;

          (a1 . (k + 1)) in ( rng a1) by A9, FUNCT_1:def 3;

          then

           A13: (a1 . (k + 1)) = X or (a1 . (k + 1)) = Y by A12, TARSKI:def 2;

          ( dom a1) = ( Seg ( len a1)) by FINSEQ_1:def 3;

          then (a2 . (k + 1)) in ( rng a2) by A1, A9, A11, FUNCT_1:def 3;

          then

           A14: (a2 . (k + 1)) = X or (a2 . (k + 1)) = Y by A2, A12, TARSKI:def 2;

          k <= ( len a1) by A8, NAT_1: 13;

          then k in ( dom a1) by A10, FINSEQ_3: 25;

          then (a1 . k) in ( rng a1) by FUNCT_1:def 3;

          then (a1 . k) = X or (a1 . k) = Y by A12, TARSKI:def 2;

          hence thesis by A1, A5, A8, A10, A13, A14, Def4, NAT_1: 13;

        end;

      end;

      

       A15: P[ 0 ];

      for i be Nat holds P[i] from NAT_1:sch 2( A15, A4);

      hence thesis by A1;

    end;

    theorem :: FINSEQ_6:147

    

     Th21: a1 <> a2 & ( len a1) = ( len a2) & ( rng a1) = ( rng a2) implies for i st 1 <= i & i <= ( len a1) holds (a1 . i) <> (a2 . i)

    proof

      assume that

       A1: a1 <> a2 and

       A2: ( len a1) = ( len a2) and

       A3: ( rng a1) = ( rng a2);

      defpred P[ Nat] means 1 <= $1 & $1 <= ( len a1) implies (a1 . $1) <> (a2 . $1);

      

       A4: for k be Nat st P[k] holds P[(k + 1)]

      proof

        let k be Nat;

        assume that

         A5: 1 <= k & k <= ( len a1) implies (a1 . k) <> (a2 . k);

        

         A6: 0 = k or 0 < k & ( 0 + 1) = 1;

        assume that

         A7: 1 <= (k + 1) and

         A8: (k + 1) <= ( len a1);

        

         A9: (k + 1) in ( dom a1) by A7, A8, FINSEQ_3: 25;

        per cases by A6, NAT_1: 13;

          suppose 0 = k;

          hence thesis by A1, A2, A3, Th20;

        end;

          suppose

           A10: 1 <= k;

          k <= ( len a1) by A8, NAT_1: 13;

          then

           A11: k in ( dom a1) by A10, FINSEQ_3: 25;

          

           A12: ( dom a2) = ( Seg ( len a2)) by FINSEQ_1:def 3;

          consider X,Y be object such that X <> Y and

           A13: ( rng a1) = {X, Y} by Th19;

          (a1 . (k + 1)) in ( rng a1) by A9, FUNCT_1:def 3;

          then

           A14: (a1 . (k + 1)) = X or (a1 . (k + 1)) = Y by A13, TARSKI:def 2;

          ( dom a1) = ( Seg ( len a1)) by FINSEQ_1:def 3;

          then (a2 . k) in ( rng a2) by A2, A11, A12, FUNCT_1:def 3;

          then

           A15: (a2 . k) = X or (a2 . k) = Y by A3, A13, TARSKI:def 2;

          (a1 . k) in ( rng a1) by A11, FUNCT_1:def 3;

          then (a1 . k) = X or (a1 . k) = Y by A13, TARSKI:def 2;

          hence thesis by A2, A5, A8, A10, A15, A14, Def4, NAT_1: 13;

        end;

      end;

      

       A16: P[ 0 ];

      thus for i holds P[i] from NAT_1:sch 2( A16, A4);

    end;

    theorem :: FINSEQ_6:148

    a1 <> a2 & ( len a1) = ( len a2) & ( rng a1) = ( rng a2) implies for a st ( len a) = ( len a1) & ( rng a) = ( rng a1) holds a = a1 or a = a2

    proof

      assume that

       A1: a1 <> a2 and

       A2: ( len a1) = ( len a2) and

       A3: ( rng a1) = ( rng a2);

      let a;

      assume that

       A4: ( len a) = ( len a1) and

       A5: ( rng a) = ( rng a1);

      assume

       A6: a <> a1;

      now

        let i be Nat;

        assume that

         A7: 1 <= i and

         A8: i <= ( len a);

        consider X,Y be object such that X <> Y and

         A9: ( rng a) = {X, Y} by Th19;

        

         A10: i in ( dom a) by A7, A8, FINSEQ_3: 25;

        then (a . i) in ( rng a) by FUNCT_1:def 3;

        then

         A11: (a . i) = X or (a . i) = Y by A9, TARSKI:def 2;

        

         A12: ( dom a) = ( Seg ( len a)) by FINSEQ_1:def 3;

        ( dom a1) = ( Seg ( len a1)) by FINSEQ_1:def 3;

        then (a1 . i) in ( rng a1) by A4, A10, A12, FUNCT_1:def 3;

        then

         A13: (a1 . i) = X or (a1 . i) = Y by A5, A9, TARSKI:def 2;

        ( dom a2) = ( Seg ( len a2)) by FINSEQ_1:def 3;

        then (a2 . i) in ( rng a2) by A2, A4, A10, A12, FUNCT_1:def 3;

        then (a2 . i) = X or (a2 . i) = Y by A3, A5, A9, TARSKI:def 2;

        hence (a . i) = (a2 . i) by A1, A2, A3, A4, A5, A6, A7, A8, A11, A13, Th21;

      end;

      hence thesis by A2, A4;

    end;

    theorem :: FINSEQ_6:149

    X <> Y & n > 1 implies ex a1 st ( rng a1) = {X, Y} & ( len a1) = n & (a1 . 1) = X

    proof

      deffunc F( Nat, Nat) = (3 -' $2);

      assume that

       A1: X <> Y and

       A2: n > 1;

      set p = <*X, Y*>;

      

       A3: (p . 1) = X by FINSEQ_1: 44;

      

       A4: (3 -' 2) = ((1 + 2) - 2) by XREAL_0:def 2

      .= 1;

      

       A5: (p . 2) = Y by FINSEQ_1: 44;

      consider f1 be sequence of NAT such that

       A6: (f1 . 0 ) = 2 & for n be Nat holds (f1 . (n + 1)) = F(n,.) from NAT_1:sch 12;

      defpred P[ Nat] means ((f1 . $1) = 1 or (f1 . $1) = 2) & (f1 . $1) <> (f1 . ($1 + 1));

      

       A7: (3 -' 1) = ((2 + 1) - 1) by XREAL_0:def 2

      .= 2;

      

       A8: for i be Nat st P[i] holds P[(i + 1)]

      proof

        let i be Nat such that

         A9: (f1 . i) = 1 or (f1 . i) = 2 and (f1 . i) <> (f1 . (i + 1));

        thus (f1 . (i + 1)) = 1 or (f1 . (i + 1)) = 2 by A6, A4, A7, A9;

        hence thesis by A6, A4, A7;

      end;

      

       A10: P[ 0 ] by A6, A4;

      

       A11: for i be Nat holds P[i] from NAT_1:sch 2( A10, A8);

      deffunc F( Nat) = (p . (f1 . $1));

      consider p1 be FinSequence such that

       A12: ( len p1) = n & for k be Nat st k in ( dom p1) holds (p1 . k) = F(k) from FINSEQ_1:sch 2;

      

       A13: (f1 . ( 0 + 1)) = 1 by A6, A4;

      then

       A14: (f1 . (1 + 1)) = 2 by A6, A7;

       A15:

      now

        let y be object;

        hereby

          assume y in {X, Y};

          then

           A16: y = X or y = Y by TARSKI:def 2;

          1 in ( dom p1) by A2, A12, FINSEQ_3: 25;

          then

           A17: (p1 . 1) = X by A3, A13, A12;

          

           A18: 1 in ( dom p1) by A2, A12, FINSEQ_3: 25;

          (1 + 1) <= n by A2, NAT_1: 13;

          then

           A19: 2 in ( dom p1) by A12, FINSEQ_3: 25;

          then (p1 . 2) = Y by A5, A14, A12;

          hence ex x be object st x in ( dom p1) & y = (p1 . x) by A16, A19, A17, A18;

        end;

        given x be object such that

         A20: x in ( dom p1) and

         A21: y = (p1 . x);

        x in ( Seg ( len p1)) by A20, FINSEQ_1:def 3;

        then

        consider x9 be Nat such that

         A22: x9 = x and

         A23: 1 <= x9 and

         A24: x9 <= ( len p1);

        x9 in ( dom p1) by A23, A24, FINSEQ_3: 25;

        then

         A25: (p1 . x9) = (p . (f1 . x9)) by A12;

        (f1 . x9) = 1 or (f1 . x9) = 2 by A11;

        hence y in {X, Y} by A3, A5, A21, A22, A25, TARSKI:def 2;

      end;

      then ( rng p1) = {X, Y} by FUNCT_1:def 3;

      then

      reconsider p1 as TwoValued FinSequence by A1, A2, A12, Th19;

      now

        let i be Nat;

        assume that

         A26: 1 <= i and

         A27: (i + 1) <= ( len p1);

        1 <= (i + 1) by A26, NAT_1: 13;

        then (i + 1) in ( dom p1) by A27, FINSEQ_3: 25;

        then

         A28: (p1 . (i + 1)) = (p . (f1 . (i + 1))) by A12;

        

         A29: (f1 . (i + 1)) = 1 or (f1 . (i + 1)) = 2 by A11;

        i <= n by A12, A27, NAT_1: 13;

        then i in ( dom p1) by A12, A26, FINSEQ_3: 25;

        then (p1 . i) = (p . (f1 . i)) by A12;

        hence (p1 . i) <> (p1 . (i + 1)) by A1, A3, A5, A11, A28, A29;

      end;

      then

      reconsider p1 as TwoValued Alternating FinSequence by Def4;

      take p1;

      thus ( rng p1) = {X, Y} by A15, FUNCT_1:def 3;

      thus ( len p1) = n by A12;

      1 in ( dom p1) by A2, A12, FINSEQ_3: 25;

      hence thesis by A3, A13, A12;

    end;

    begin

    registration

      let X;

      let fs be FinSequence of X;

      cluster -> FinSubsequence-like for Subset of fs;

      coherence

      proof

        let IT be Subset of fs;

        take ( len fs);

        ( dom IT) c= ( dom fs) by RELAT_1: 11;

        hence thesis by FINSEQ_1:def 3;

      end;

    end

    theorem :: FINSEQ_6:150

    for f be FinSubsequence, g,h,fg,fh,fgh be FinSequence st ( rng g) c= ( dom f) & ( rng h) c= ( dom f) & fg = (f * g) & fh = (f * h) & fgh = (f * (g ^ h)) holds fgh = (fg ^ fh)

    proof

      let f be FinSubsequence, g,h,fg,fh,fgh be FinSequence;

      assume that

       A1: ( rng g) c= ( dom f) and

       A2: ( rng h) c= ( dom f) and

       A3: fg = (f * g) and

       A4: fh = (f * h) and

       A5: fgh = (f * (g ^ h));

      now

        ( rng (g ^ h)) = (( rng g) \/ ( rng h)) by FINSEQ_1: 31;

        

        hence ( len fgh) = ( len (g ^ h)) by A1, A2, A5, FINSEQ_2: 29, XBOOLE_1: 8

        .= (( len g) + ( len h)) by FINSEQ_1: 22;

        then

         A6: ( dom fgh) = ( Seg (( len g) + ( len h))) by FINSEQ_1:def 3;

        

         A7: ( dom fh) = ( dom h) by A2, A4, RELAT_1: 27;

        

         A8: ( dom fg) = ( dom g) by A1, A3, RELAT_1: 27;

        

         A9: ( len fg) = ( len g) by A1, A3, FINSEQ_2: 29;

        ( len fh) = ( len h) by A2, A4, FINSEQ_2: 29;

        hence ( len (fg ^ fh)) = (( len g) + ( len h)) by A9, FINSEQ_1: 22;

        let j be Nat;

        assume

         A10: j in ( dom fgh);

        then

         A11: 1 <= j by A6, FINSEQ_1: 1;

        

         A12: j <= (( len g) + ( len h)) by A6, A10, FINSEQ_1: 1;

        per cases ;

          suppose j <= ( len g);

          then

           A13: j in ( dom g) by A11, FINSEQ_3: 25;

          

          thus (fgh . j) = (f . ((g ^ h) . j)) by A5, A10, FUNCT_1: 12

          .= (f . (g . j)) by A13, FINSEQ_1:def 7

          .= (fg . j) by A3, A13, FUNCT_1: 13

          .= ((fg ^ fh) . j) by A8, A13, FINSEQ_1:def 7;

        end;

          suppose ( len g) < j;

          then (( len g) + 1) <= j by NAT_1: 13;

          then

           A14: 1 <= (j - ( len g)) by XREAL_1: 19;

          then (j -' ( len g)) = (j - ( len g)) by XREAL_0:def 2;

          then

          reconsider j9 = (j - ( len g)) as Element of NAT ;

          

           A15: j = (( len g) + j9);

          then j9 <= ( len h) by A12, XREAL_1: 6;

          then

           A16: j9 in ( dom h) by A14, FINSEQ_3: 25;

          

          thus (fgh . j) = (f . ((g ^ h) . j)) by A5, A10, FUNCT_1: 12

          .= (f . (h . j9)) by A15, A16, FINSEQ_1:def 7

          .= (fh . j9) by A4, A16, FUNCT_1: 13

          .= ((fg ^ fh) . j) by A9, A7, A15, A16, FINSEQ_1:def 7;

        end;

      end;

      hence thesis by FINSEQ_2: 9;

    end;

    reserve fs,fs1,fs2 for FinSequence of X,

fss,fss2 for Subset of fs;

    theorem :: FINSEQ_6:151

    ( dom fss) c= ( dom fs) & ( rng fss) c= ( rng fs) by RELAT_1: 11;

    theorem :: FINSEQ_6:152

    fs is Subset of fs

    proof

      fs c= fs;

      hence thesis;

    end;

    theorem :: FINSEQ_6:153

    (fss | Y) is Subset of fs

    proof

      reconsider f = (fss | Y) as FinSubsequence;

      f c= fss by RELAT_1: 59;

      hence thesis by XBOOLE_1: 1;

    end;

    theorem :: FINSEQ_6:154

    for fss1 be Subset of fs1 st ( Seq fss) = fs1 & ( Seq fss1) = fs2 & fss2 = (fss | ( rng (( Sgm ( dom fss)) | ( dom fss1)))) holds ( Seq fss2) = fs2

    proof

      let fss1 be Subset of fs1 such that

       A1: ( Seq fss) = fs1 and

       A2: ( Seq fss1) = fs2 and

       A3: fss2 = (fss | ( rng (( Sgm ( dom fss)) | ( dom fss1))));

      consider k be Nat such that

       A4: ( dom fs) = ( Seg k) by FINSEQ_1:def 2;

      reconsider d2 = ( dom fss2) as finite set;

      reconsider d1 = ( dom fss1) as finite set;

      

       A5: ex l be Nat st ( dom fs1) = ( Seg l) by FINSEQ_1:def 2;

      then

       A6: ( dom ( Sgm d1)) = ( Seg ( card d1)) by FINSEQ_3: 40, RELAT_1: 11;

      reconsider k as Element of NAT by ORDINAL1:def 12;

      

       A7: ( dom fss) c= ( Seg k) by A4, RELAT_1: 11;

      then ( rng ( Sgm ( dom fss))) c= ( dom fss) by FINSEQ_1:def 13;

      then

       A8: ( dom fs1) = ( dom ( Sgm ( dom fss))) by A1, RELAT_1: 27;

      ( dom fss2) c= ( Seg k) by A4, RELAT_1: 11;

      then

       A9: ( rng ( Sgm ( dom fss2))) = ( dom fss2) by FINSEQ_1:def 13;

      

       A10: (( Sgm ( dom fss)) | ( dom fss1)) c= ( Sgm ( dom fss)) by RELAT_1: 59;

      then

       A11: ( dom (( Sgm ( dom fss)) | ( dom fss1))) c= ( dom ( Sgm ( dom fss))) by RELAT_1: 11;

      ( rng (( Sgm ( dom fss)) | ( dom fss1))) c= ( rng ( Sgm ( dom fss))) by A10, RELAT_1: 11;

      then ( rng (( Sgm ( dom fss)) | ( dom fss1))) c= ( dom fss) by A7, FINSEQ_1:def 13;

      then

       A12: ( dom fss2) = ( rng (( Sgm ( dom fss)) | ( dom fss1))) by A3, RELAT_1: 62;

      

       A13: ( dom fss1) c= ( dom fs1) by RELAT_1: 11;

      now

        take Z = (( Sgm ( dom fss)) | ( dom fss1));

        

         A14: ( dom Z) = ( dom fss1) by A8, RELAT_1: 11, RELAT_1: 62;

        hereby

          let x be object;

          assume

           A15: x in d1;

          reconsider y = (Z . x) as object;

          take y;

          thus y in d2 by A12, A14, A15, FUNCT_1:def 3;

          thus [x, y] in Z by A14, A15, FUNCT_1: 1;

        end;

        hereby

          let y be object;

          assume y in d2;

          then

          consider x be object such that

           A16: x in ( dom Z) and

           A17: y = (Z . x) by A12, FUNCT_1:def 3;

          reconsider x as object;

          take x;

          thus x in d1 & [x, y] in Z by A13, A8, A16, A17, FUNCT_1: 1, RELAT_1: 62;

        end;

        let x,y,z,u be object;

        assume that

         A18: [x, y] in Z and

         A19: [z, u] in Z;

        

         A20: z in ( dom Z) by A19, FUNCT_1: 1;

        

         A21: u = (Z . z) by A19, FUNCT_1: 1;

        

         A22: u = (( Sgm ( dom fss)) . z) by A20, A21, FUNCT_1: 47;

        

         A23: y = (Z . x) by A18, FUNCT_1: 1;

        hence x = z implies y = u by A19, FUNCT_1: 1;

        

         A24: x in ( dom Z) by A18, FUNCT_1: 1;

        then

         A25: y = (( Sgm ( dom fss)) . x) by A23, FUNCT_1: 47;

        assume

         A26: y = u;

        assume

         A27: x <> z;

        reconsider x, z as Element of NAT by A24, A20;

        

         A28: x <= ( len ( Sgm ( dom fss))) by A11, A24, FINSEQ_3: 25;

        

         A29: z <= ( len ( Sgm ( dom fss))) by A11, A20, FINSEQ_3: 25;

        

         A30: 1 <= z by A11, A20, FINSEQ_3: 25;

        

         A31: 1 <= x by A11, A24, FINSEQ_3: 25;

        per cases by A27, XXREAL_0: 1;

          suppose x < z;

          hence contradiction by A7, A25, A22, A26, A31, A29, FINSEQ_1:def 13;

        end;

          suppose z < x;

          hence contradiction by A7, A25, A22, A26, A28, A30, FINSEQ_1:def 13;

        end;

      end;

      then (d1,d2) are_equipotent ;

      then ( card d1) = ( card d2) by CARD_1: 5;

      then

       A32: ( dom ( Sgm d2)) = ( Seg ( card d1)) by A4, FINSEQ_3: 40, RELAT_1: 11;

      

       A33: ( rng ( Sgm ( dom fss1))) = ( dom fss1) by A13, A5, FINSEQ_1:def 13;

      now

        now

          let x be object;

          hereby

            assume x in ( dom fs2);

            then

             A34: x in ( dom ( Sgm ( dom fss2))) by A2, A6, A32, FUNCT_1: 11;

            then (( Sgm ( dom fss2)) . x) in ( dom fss2) by A9, FUNCT_1:def 3;

            hence x in ( dom ( Seq fss2)) by A34, FUNCT_1: 11;

          end;

          assume x in ( dom ( Seq fss2));

          then

           A35: x in ( dom ( Sgm ( dom fss1))) by A6, A32, FUNCT_1: 11;

          then (( Sgm ( dom fss1)) . x) in ( dom fss1) by A33, FUNCT_1:def 3;

          hence x in ( dom fs2) by A2, A35, FUNCT_1: 11;

        end;

        hence

         A36: ( dom fs2) = ( dom ( Seq fss2)) by TARSKI: 2;

        thus ( dom fs2) = ( dom fs2);

        let k be Nat;

        assume

         A37: k in ( dom fs2);

        then

         A38: (( Sgm ( dom fss1)) . k) in ( dom fss1) by A2, FUNCT_1: 11;

        

         A39: (( Sgm ( dom fss2)) . k) in ( dom fss2) by A36, A37, FUNCT_1: 11;

        

         A40: (( Sgm ( dom fss1)) . k) in ( dom fss1) by A2, A37, FUNCT_1: 11;

        then

         A41: (fss1 . (( Sgm ( dom fss1)) . k)) = (( Seq fss) . (( Sgm ( dom fss1)) . k)) by A1, GRFUNC_1: 2;

        

         A42: (( Sgm ( dom fss2)) . k) = ((( Sgm ( dom fss)) * ( Sgm ( dom fss1))) . k) by A7, A12, A8, Th3, RELAT_1: 11;

        k in ( dom ( Sgm ( dom fss1))) by A2, A37, FUNCT_1: 11;

        then k in ( dom (( Sgm ( dom fss)) * ( Sgm ( dom fss1)))) by A13, A8, A38, FUNCT_1: 11;

        then

         A43: (( Sgm ( dom fss2)) . k) = (( Sgm ( dom fss)) . (( Sgm ( dom fss1)) . k)) by A42, FUNCT_1: 12;

        

         A44: fss2 c= fss by A3, RELAT_1: 59;

        ( dom fss1) c= ( dom ( Seq fss)) by A1, RELAT_1: 11;

        then

         A45: (( Sgm ( dom fss1)) . k) in ( dom ( Sgm ( dom fss))) by A40, FUNCT_1: 11;

        

        thus (( Seq fss2) . k) = (fss2 . (( Sgm ( dom fss2)) . k)) by A36, A37, FUNCT_1: 12

        .= (fss . (( Sgm ( dom fss)) . (( Sgm ( dom fss1)) . k))) by A43, A44, A39, GRFUNC_1: 2

        .= (fss1 . (( Sgm ( dom fss1)) . k)) by A45, A41, FUNCT_1: 13

        .= (fs2 . k) by A2, A37, FUNCT_1: 12;

      end;

      hence thesis by FINSEQ_1: 13;

    end;

    begin

    theorem :: FINSEQ_6:155

    for f1 be non empty FinSequence of D, f2 be FinSequence of D holds ((f1 ^' f2) /. 1) = (f1 /. 1)

    proof

      let f1 be non empty FinSequence of D, f2 be FinSequence of D;

      

       A1: 1 in ( dom f1) by FINSEQ_5: 6;

      1 in ( dom (f1 ^ ((2,( len f2)) -cut f2))) by FINSEQ_5: 6;

      

      hence ((f1 ^' f2) /. 1) = ((f1 ^ ((2,( len f2)) -cut f2)) . 1) by PARTFUN1:def 6

      .= (f1 . 1) by A1, FINSEQ_1:def 7

      .= (f1 /. 1) by A1, PARTFUN1:def 6;

    end;

    theorem :: FINSEQ_6:156

    for f1 be FinSequence of D, f2 be non trivial FinSequence of D holds ((f1 ^' f2) /. ( len (f1 ^' f2))) = (f2 /. ( len f2))

    proof

      let f1 be FinSequence of D, f2 be non trivial FinSequence of D;

      

       A1: (( len (f1 ^' f2)) + 1) = (( len f1) + ( len f2)) by Th13;

      2 <= ( len f2) by NAT_D: 60;

      then

       A2: 1 < ( len f2) by XXREAL_0: 2;

      then (1 + 0 ) < (( len f1) + ( len f2)) by XREAL_1: 8;

      then 1 <= ( len (f1 ^' f2)) by A1, NAT_1: 13;

      

      hence ((f1 ^' f2) /. ( len (f1 ^' f2))) = ((f1 ^' f2) . ( len (f1 ^' f2))) by FINSEQ_4: 15

      .= (f2 . ( len f2)) by A2, Th16

      .= (f2 /. ( len f2)) by A2, FINSEQ_4: 15;

    end;

    theorem :: FINSEQ_6:157

    

     Th55: for f be FinSequence holds (f ^' {} ) = f

    proof

      let f be FinSequence;

      

      thus (f ^' {} ) = (f ^ {} ) by Def1

      .= f by FINSEQ_1: 34;

    end;

    theorem :: FINSEQ_6:158

    for f be FinSequence holds (f ^' <*x*>) = f

    proof

      let f be FinSequence;

      ( len <*x*>) = 1 by FINSEQ_1: 39;

      then ((2,( len <*x*>)) -cut <*x*>) = {} by Def1;

      hence thesis by FINSEQ_1: 34;

    end;

    theorem :: FINSEQ_6:159

    for f1,f2 be FinSequence of D holds 1 <= n & n <= ( len f1) implies ((f1 ^' f2) /. n) = (f1 /. n)

    proof

      let f1,f2 be FinSequence of D;

      assume that

       A1: 1 <= n and

       A2: n <= ( len f1);

      per cases ;

        suppose f2 = {} ;

        hence thesis by Th55;

      end;

        suppose

         A3: f2 <> {} ;

        then

         A4: (( len f1) + 0 ) < (( len f1) + ( len f2)) by XREAL_1: 6;

        (( len (f1 ^' f2)) + 1) = (( len f1) + ( len f2)) by A3, Th13;

        then n < (( len (f1 ^' f2)) + 1) by A2, A4, XXREAL_0: 2;

        then n <= ( len (f1 ^' f2)) by NAT_1: 13;

        

        hence ((f1 ^' f2) /. n) = ((f1 ^' f2) . n) by A1, FINSEQ_4: 15

        .= (f1 . n) by A1, A2, Th14

        .= (f1 /. n) by A1, A2, FINSEQ_4: 15;

      end;

    end;

    theorem :: FINSEQ_6:160

    for f1,f2 be FinSequence of D holds 1 <= n & n < ( len f2) implies ((f1 ^' f2) /. (( len f1) + n)) = (f2 /. (n + 1))

    proof

      let f1,f2 be FinSequence of D;

      assume that

       A1: 1 <= n and

       A2: n < ( len f2);

      

       A3: (n + 1) <= ( len f2) by A2, NAT_1: 13;

       A4:

      now

        per cases ;

          suppose

           A5: f2 <> {} ;

          

           A6: (( len f1) + n) < (( len f1) + ( len f2)) by A2, XREAL_1: 6;

          (( len (f1 ^' f2)) + 1) = (( len f1) + ( len f2)) by A5, Th13;

          hence (( len f1) + n) <= ( len (f1 ^' f2)) by A6, NAT_1: 13;

        end;

          suppose f2 = {} ;

          hence (( len f1) + n) <= ( len (f1 ^' f2)) by A2;

        end;

      end;

      

       A7: ( 0 + 1) <= (n + 1) by XREAL_1: 6;

      ( 0 + 1) <= (( len f1) + n) by A1, XREAL_1: 7;

      

      hence ((f1 ^' f2) /. (( len f1) + n)) = ((f1 ^' f2) . (( len f1) + n)) by A4, FINSEQ_4: 15

      .= (f2 . (n + 1)) by A1, A2, Th15

      .= (f2 /. (n + 1)) by A7, A3, FINSEQ_4: 15;

    end;

    definition

      let F be FinSequence of INT , m,n be Nat;

      assume that

       A1: 1 <= m and

       A2: m <= n and

       A3: n <= ( len F);

      :: FINSEQ_6:def8

      func min_at (F,m,n) -> Nat means

      : Def11: ex X be finite non empty Subset of INT st X = ( rng ((m,n) -cut F)) & (it + 1) = ((( min X) .. ((m,n) -cut F)) + m);

      existence

      proof

        set Cut = ((m,n) -cut F);

        set X = ( rng Cut);

        m < (n + 1) by A2, NAT_1: 13;

        then

         A4: (m - m) < ((n + 1) - m) by XREAL_1: 9;

        (( len Cut) + m) = (n + 1) by A1, A2, A3, Def1;

        then

         A5: Cut is non empty by A4;

        ( rng Cut qua Relation of NAT , INT ) is Subset of INT ;

        then

        reconsider X as finite non empty Subset of INT by A5;

        set q = (((( min X) .. Cut) + m) - 1);

        (1 - 1) <= (m - 1) by A1, XREAL_1: 9;

        then ( 0 + 0 ) <= ((( min X) .. Cut) + (m - 1));

        then

        reconsider q as Element of NAT by INT_1: 3;

        take q, X;

        thus X = ( rng Cut);

        thus thesis;

      end;

      uniqueness ;

    end

    reserve F,F1 for FinSequence of INT ,

k,m,n,ma for Nat;

    theorem :: FINSEQ_6:161

    

     Th59: 1 <= m & m <= n & n <= ( len F) implies (ma = ( min_at (F,m,n)) iff m <= ma & ma <= n & (for i be Nat st m <= i & i <= n holds (F . ma) <= (F . i)) & for i be Nat st m <= i & i < ma holds (F . ma) < (F . i))

    proof

      assume that

       A1: 1 <= m and

       A2: m <= n and

       A3: n <= ( len F);

      set Cut = ((m,n) -cut F);

      

       A4: (( len Cut) + m) = (n + 1) by A1, A2, A3, Def1;

      hereby

        

         A5: (n - m) < ((n - m) + 1) by XREAL_1: 29;

        assume ma = ( min_at (F,m,n));

        then

        consider X be finite non empty Subset of INT such that

         A6: X = ( rng Cut) and

         A7: (ma + 1) = ((( min X) .. Cut) + m) by A1, A2, A3, Def11;

        

         A8: ma = (((( min X) .. Cut) - 1) + m) by A7;

        

         A9: ma = (((( min X) .. Cut) + m) - 1) by A7;

        

         A10: ( min X) in X by XXREAL_2:def 7;

        then

         A11: 1 <= (( min X) .. Cut) by A6, FINSEQ_4: 21;

        then (1 - 1) <= ((( min X) .. Cut) - 1) by XREAL_1: 9;

        then

        reconsider i1 = ((( min X) .. Cut) - 1) as Element of NAT by INT_1: 3;

        

         A12: (( min X) .. Cut) <= ( len Cut) by A6, A10, FINSEQ_4: 21;

        then i1 < ( len Cut) by XREAL_1: 146, XXREAL_0: 2;

        

        then

         A13: (F . ma) = (Cut . (i1 + 1)) by A1, A2, A3, A8, Def1

        .= (Cut . ((ma + 1) - m)) by A7;

        ((( min X) .. Cut) + m) <= (( len Cut) + m) by A12, XREAL_1: 6;

        then

         A14: ma <= ((( len Cut) + m) - 1) by A9, XREAL_1: 9;

        (m + 1) <= ((( min X) .. Cut) + m) by A11, XREAL_1: 6;

        then ((m + 1) - 1) <= ma by A9, XREAL_1: 9;

        hence m <= ma & ma <= n by A4, A14;

        

         A15: (Cut . (( min X) .. Cut)) = ( min X) by A6, A10, FINSEQ_4: 19;

        thus

         A16: for i be Nat st m <= i & i <= n holds (F . ma) <= (F . i)

        proof

          let i be Nat;

          assume that

           A17: m <= i and

           A18: i <= n;

          (m - m) <= (i - m) by A17, XREAL_1: 9;

          then

          reconsider i1 = (i - m) as Element of NAT by INT_1: 3;

          

           A19: ( 0 + 1) <= (i1 + 1) by XREAL_1: 6;

          

           A20: (n - m) < ((n - m) + 1) by XREAL_1: 29;

          i1 <= (n - m) by A18, XREAL_1: 9;

          then

           A21: i1 < ( len Cut) by A4, A20, XXREAL_0: 2;

          then (i1 + 1) <= ( len Cut) by NAT_1: 13;

          then

           A22: (i1 + 1) in ( dom Cut) by A19, FINSEQ_3: 25;

          (Cut . (i1 + 1)) = (F . (m + i1)) by A1, A2, A3, A21, Def1;

          then (F . i) in ( rng Cut) by A22, FUNCT_1:def 3;

          hence thesis by A6, A7, A13, A15, XXREAL_2:def 7;

        end;

        let i be Nat;

        assume that

         A23: m <= i and

         A24: i < ma;

        

         A25: i <= n by A4, A14, A24, XXREAL_0: 2;

        then

         A26: (F . ma) <= (F . i) by A16, A23;

        (m - m) <= (i - m) by A23, XREAL_1: 9;

        then

        reconsider i1 = (i - m) as Element of NAT by INT_1: 3;

        reconsider k = (i1 + 1) as Element of NAT ;

        i <= ((( len Cut) - 1) + m) by A14, A24, XXREAL_0: 2;

        then (i - m) <= (( len Cut) - 1) by XREAL_1: 20;

        then

         A27: k <= ( len Cut) by XREAL_1: 19;

        i1 <= (n - m) by A25, XREAL_1: 9;

        then

         A28: i1 < ( len Cut) by A4, A5, XXREAL_0: 2;

        ( 0 + 1) <= k by XREAL_1: 6;

        then

         A29: k in ( dom Cut) by A27, FINSEQ_3: 25;

        (i - m) < (ma - m) by A24, XREAL_1: 9;

        then

         A30: k < ((ma - m) + 1) by XREAL_1: 6;

        (F . i) = (F . (i1 + m))

        .= (Cut . k) by A1, A2, A3, A28, Def1;

        then (F . i) <> (F . ma) by A6, A7, A10, A13, A30, A29, FINSEQ_4: 19, FINSEQ_4: 24;

        hence (F . ma) < (F . i) by A26, XXREAL_0: 1;

      end;

      set Cut = ((m,n) -cut F);

      

       A31: (( len Cut) + m) = (n + 1) by A1, A2, A3, Def1;

      then

       A32: ( len Cut) = ((n + 1) - m);

      set X = ( rng Cut);

      

       A33: ( rng Cut qua Relation of NAT , INT ) is Subset of INT ;

      m < (n + 1) by A2, NAT_1: 13;

      then (m - m) < ((n + 1) - m) by XREAL_1: 9;

      then Cut is non empty by A31;

      then

      reconsider X as finite non empty Subset of INT by A33;

      reconsider rX = X as finite non empty Subset of REAL by MEMBERED: 3;

      assume that

       A34: m <= ma and

       A35: ma <= n and

       A36: for i be Nat st m <= i & i <= n holds (F . ma) <= (F . i) and

       A37: for i be Nat st m <= i & i < ma holds (F . ma) < (F . i);

      (m - m) <= (ma - m) by A34, XREAL_1: 9;

      then

      reconsider qm = (ma - m) as Element of NAT by INT_1: 3;

      

       A38: (qm + 1) = ((ma + 1) - m);

      then

      reconsider q1 = ((ma + 1) - m) as Element of NAT ;

      (ma + 1) <= (n + 1) by A35, XREAL_1: 6;

      then

       A39: q1 <= ( len Cut) by A32, XREAL_1: 9;

      ( 0 + 1) <= (qm + 1) by XREAL_1: 6;

      then

       A40: q1 in ( dom Cut) by A39, FINSEQ_3: 25;

      

       A41: ma = (qm + m);

      qm < ( len Cut) by A38, A39, NAT_1: 13;

      then

       A42: (F . ma) = (Cut . ((ma + 1) - m)) by A1, A2, A3, A38, A41, Def1;

      now

        thus (F . ma) in X by A40, A42, FUNCT_1:def 3;

        let k be ExtReal;

        assume k in X;

        then

        consider dk be object such that

         A43: dk in ( dom Cut) and

         A44: (Cut . dk) = k by FUNCT_1:def 3;

        reconsider dk as Element of NAT by A43;

        1 <= dk by A43, FINSEQ_3: 25;

        then (1 - 1) <= (dk - 1) by XREAL_1: 9;

        then

        reconsider dk1 = (dk - 1) as Element of NAT by INT_1: 3;

        

         A45: dk <= ( len Cut) by A43, FINSEQ_3: 25;

        then (dk + m) <= (( len Cut) + m) by XREAL_1: 6;

        then

         A46: ((dk + m) - 1) <= n by A4, XREAL_1: 20;

        dk1 < ( len Cut) by A45, XREAL_1: 146, XXREAL_0: 2;

        

        then (F . (dk1 + m)) = (Cut . (dk1 + 1)) by A1, A2, A3, Def1

        .= (Cut . dk);

        hence (F . ma) <= k by A36, A44, A46, NAT_1: 12;

      end;

      then

       A47: (F . ma) = ( min rX) by XXREAL_2:def 7;

      set mX = ( min X);

      set mXC = (mX .. Cut);

      

       A48: mX in X by XXREAL_2:def 7;

      then 1 <= mXC by FINSEQ_4: 21;

      then (1 - 1) <= (mXC - 1) by XREAL_1: 9;

      then

      reconsider mXC1 = (mXC - 1) as Element of NAT by INT_1: 3;

      set mXCm = (mXC1 + m);

      mXC <= ( len Cut) by A48, FINSEQ_4: 21;

      then

       A49: mXC1 < ( len Cut) by XREAL_1: 146, XXREAL_0: 2;

      mXC = (mXC1 + 1);

      then

       A50: (F . mXCm) = (Cut . mXC) by A1, A2, A3, A49, Def1;

      

       A51: m <= mXCm by NAT_1: 12;

      

       A52: (Cut . (mX .. Cut)) = mX by A48, FINSEQ_4: 19;

      now

        assume

         A53: q1 <> mXC;

        per cases by A53, XXREAL_0: 1;

          suppose q1 < mXC;

          hence contradiction by A40, A42, A47, FINSEQ_4: 24;

        end;

          suppose q1 > mXC;

          then (mXC + m) < (ma + 1) by XREAL_1: 20;

          then ((mXC + m) - 1) < ma by XREAL_1: 19;

          hence contradiction by A37, A52, A47, A51, A50;

        end;

      end;

      then (ma + 1) = ((mX .. Cut) + m);

      hence thesis by A1, A2, A3, Def11;

    end;

    theorem :: FINSEQ_6:162

    1 <= m & m <= ( len F) implies ( min_at (F,m,m)) = m

    proof

      assume that

       A1: 1 <= m and

       A2: m <= ( len F);

      

       A3: for i be Nat st m <= i & i < m holds (F . m) < (F . i);

      for i be Nat st m <= i & i <= m holds (F . m) <= (F . i) by XXREAL_0: 1;

      hence thesis by A1, A2, A3, Th59;

    end;

    definition

      let F be FinSequence of INT , m,n be Nat;

      :: FINSEQ_6:def9

      pred F is_non_decreasing_on m,n means for i,j be Nat st m <= i & i <= j & j <= n holds (F . i) <= (F . j);

    end

    definition

      let F be FinSequence of INT , n be Nat;

      :: FINSEQ_6:def10

      pred F is_split_at n means for i,j be Nat st 1 <= i & i <= n & n < j & j <= ( len F) holds (F . i) <= (F . j);

    end

    theorem :: FINSEQ_6:163

    (k + 1) <= ( len F) & ma = ( min_at (F,(k + 1),( len F))) & F is_split_at k & F is_non_decreasing_on (1,k) & F1 = ((F +* ((k + 1),(F . ma))) +* (ma,(F . (k + 1)))) implies F1 is_non_decreasing_on (1,(k + 1))

    proof

      assume that

       A1: (k + 1) <= ( len F) and

       A2: ma = ( min_at (F,(k + 1),( len F))) and

       A3: F is_split_at k and

       A4: F is_non_decreasing_on (1,k) and

       A5: F1 = ((F +* ((k + 1),(F . ma))) +* (ma,(F . (k + 1))));

      

       A6: 1 <= (k + 1) by NAT_1: 12;

      set Fk = (F +* ((k + 1),(F . ma)));

      

       A7: ( dom F1) = ( dom Fk) by A5, FUNCT_7: 30;

      

       A8: ( dom Fk) = ( dom F) by FUNCT_7: 30;

      then

       A9: (k + 1) in ( dom F1) by A1, A7, A6, FINSEQ_3: 25;

      let i,j be Nat such that

       A10: 1 <= i and

       A11: i <= j and

       A12: j <= (k + 1);

      

       A13: j <= ( len F) by A1, A12, XXREAL_0: 2;

      1 <= j by A10, A11, XXREAL_0: 2;

      then

       A14: j in ( dom F1) by A7, A8, A13, FINSEQ_3: 25;

      per cases by A12, XXREAL_0: 1;

        suppose

         A15: j < (k + 1);

        then i < (k + 1) by A11, XXREAL_0: 2;

        then i <> ma by A1, A2, A6, Th59;

        

        then

         A16: (F1 . i) = (Fk . i) by A5, FUNCT_7: 32

        .= (F . i) by A11, A15, FUNCT_7: 32;

        j <> ma by A1, A2, A6, A15, Th59;

        

        then

         A17: (F1 . j) = (Fk . j) by A5, FUNCT_7: 32

        .= (F . j) by A15, FUNCT_7: 32;

        j <= k by A15, NAT_1: 13;

        hence thesis by A4, A10, A11, A16, A17;

      end;

        suppose

         A18: j = (k + 1);

        thus (F1 . i) <= (F1 . j)

        proof

          per cases by A11, XXREAL_0: 1;

            suppose

             A19: i < j;

            then i <> ma by A1, A2, A6, A18, Th59;

            

            then

             A20: (F1 . i) = (Fk . i) by A5, FUNCT_7: 32

            .= (F . i) by A18, A19, FUNCT_7: 32;

            

             A21: i <= k by A18, A19, NAT_1: 13;

            

             A22: k < j by A18, NAT_1: 13;

            thus (F1 . i) <= (F1 . j)

            proof

              per cases ;

                suppose (k + 1) = ma;

                then (F1 . j) = (F . (k + 1)) by A5, A7, A9, A18, FUNCT_7: 31;

                hence thesis by A1, A3, A10, A18, A20, A21, A22;

              end;

                suppose

                 A23: (k + 1) <> ma;

                

                 A24: ma <= ( len F) by A1, A2, A6, Th59;

                (k + 1) <= ma by A1, A2, A6, Th59;

                then

                 A25: k < ma by NAT_1: 13;

                (F1 . j) = (Fk . j) by A5, A18, A23, FUNCT_7: 32

                .= (F . ma) by A7, A8, A14, A18, FUNCT_7: 31;

                hence thesis by A3, A10, A20, A21, A25, A24;

              end;

            end;

          end;

            suppose i = j;

            hence thesis;

          end;

        end;

      end;

    end;

    theorem :: FINSEQ_6:164

    (k + 1) <= ( len F) & ma = ( min_at (F,(k + 1),( len F))) & F is_split_at k & F1 = ((F +* ((k + 1),(F . ma))) +* (ma,(F . (k + 1)))) implies F1 is_split_at (k + 1)

    proof

      assume that

       A1: (k + 1) <= ( len F) and

       A2: ma = ( min_at (F,(k + 1),( len F))) and

       A3: F is_split_at k and

       A4: F1 = ((F +* ((k + 1),(F . ma))) +* (ma,(F . (k + 1))));

      

       A5: ( dom F1) = ( dom (F +* ((k + 1),(F . ma)))) by A4, FUNCT_7: 30;

      

       A6: k < (k + 1) by NAT_1: 13;

      

       A7: 1 <= (k + 1) by NAT_1: 12;

      let i,j be Nat;

      assume that

       A8: 1 <= i and

       A9: i <= (k + 1) and

       A10: (k + 1) < j and

       A11: j <= ( len F1);

      

       A12: k < j by A10, NAT_1: 13;

      

       A13: ( dom (F +* ((k + 1),(F . ma)))) = ( dom F) by FUNCT_7: 30;

      then

       A14: ( len F1) = ( len F) by A5, FINSEQ_3: 29;

      then

       A15: (k + 1) <= ( len F) by A10, A11, XXREAL_0: 2;

      i <= ( len F1) by A1, A14, A9, XXREAL_0: 2;

      then

       A16: i in ( dom F1) by A8, FINSEQ_3: 25;

      1 <= j by A10, NAT_1: 12;

      then

       A17: j in ( dom F1) by A11, FINSEQ_3: 25;

      per cases by A9, XXREAL_0: 1;

        suppose

         A18: i < (k + 1);

        then i <> ma by A1, A2, A7, Th59;

        

        then

         A19: (F1 . i) = ((F +* ((k + 1),(F . ma))) . i) by A4, FUNCT_7: 32

        .= (F . i) by A18, FUNCT_7: 32;

        

         A20: i <= k by A18, NAT_1: 13;

        thus (F1 . i) <= (F1 . j)

        proof

          per cases ;

            suppose j <> ma;

            

            then (F1 . j) = ((F +* ((k + 1),(F . ma))) . j) by A4, FUNCT_7: 32

            .= (F . j) by A10, FUNCT_7: 32;

            hence thesis by A3, A14, A8, A11, A12, A20, A19;

          end;

            suppose j = ma;

            then (F1 . j) = (F . (k + 1)) by A4, A5, A17, FUNCT_7: 31;

            hence thesis by A3, A6, A8, A15, A20, A19;

          end;

        end;

      end;

        suppose

         A21: i = (k + 1);

        

         A22: (F1 . i) = (F . ma)

        proof

          per cases ;

            suppose (k + 1) = ma;

            hence thesis by A4, A5, A16, A21, FUNCT_7: 31;

          end;

            suppose (k + 1) <> ma;

            

            hence (F1 . i) = ((F +* ((k + 1),(F . ma))) . i) by A4, A21, FUNCT_7: 32

            .= (F . ma) by A5, A13, A16, A21, FUNCT_7: 31;

          end;

        end;

        thus thesis

        proof

          per cases ;

            suppose j = ma;

            then (F1 . j) = (F . (k + 1)) by A4, A5, A17, FUNCT_7: 31;

            hence thesis by A1, A2, A7, A22, Th59;

          end;

            suppose j <> ma;

            

            then (F1 . j) = ((F +* ((k + 1),(F . ma))) . j) by A4, FUNCT_7: 32

            .= (F . j) by A10, FUNCT_7: 32;

            hence thesis by A1, A2, A14, A7, A10, A11, A22, Th59;

          end;

        end;

      end;

    end;

    theorem :: FINSEQ_6:165

    for f be FinSequence of INT , m,n be Nat st m >= n holds f is_non_decreasing_on (m,n)

    proof

      let f be FinSequence of INT , m,n be Nat;

      assume

       A1: m >= n;

      let i,j be Nat such that

       A2: m <= i & i <= j and

       A3: j <= n;

      

       A4: m <= j by A2, XXREAL_0: 2;

      per cases by A1, XXREAL_0: 1;

        suppose m = n;

        then j = m by A3, A4, XXREAL_0: 1;

        hence (f . i) <= (f . j) by A2, XXREAL_0: 1;

      end;

        suppose m > n;

        hence thesis by A3, A4, XXREAL_0: 2;

      end;

    end;

    begin

    reserve i,j,k,m,n for Nat,

D for non empty set,

p for Element of D,

f for FinSequence of D;

    definition

      let D be non empty set;

      let f be FinSequence of D;

      :: original: constant

      redefine

      :: FINSEQ_6:def11

      attr f is constant means

      : Def1: for n, m st n in ( dom f) & m in ( dom f) holds (f /. n) = (f /. m);

      compatibility

      proof

        hereby

          assume

           A1: f is constant;

          let n, m such that

           A2: n in ( dom f) and

           A3: m in ( dom f);

          

          thus (f /. n) = (f . n) by A2, PARTFUN1:def 6

          .= (f . m) by A1, A2, A3

          .= (f /. m) by A3, PARTFUN1:def 6;

        end;

        assume

         A4: for n, m st n in ( dom f) & m in ( dom f) holds (f /. n) = (f /. m);

        let n, m such that

         A5: n in ( dom f) and

         A6: m in ( dom f);

        

        thus (f . n) = (f /. n) by A5, PARTFUN1:def 6

        .= (f /. m) by A4, A5, A6

        .= (f . m) by A6, PARTFUN1:def 6;

      end;

    end

    theorem :: FINSEQ_6:166

    

     Th1: for D be non empty set, f be FinSequence of D st f just_once_values (f /. ( len f)) holds ((f /. ( len f)) .. f) = ( len f)

    proof

      let D be non empty set, f be FinSequence of D;

      assume

       A1: f just_once_values (f /. ( len f));

      then

      reconsider f9 = f as non empty FinSequence of D by FINSEQ_4: 5, RELAT_1: 38;

      (((f /. ( len f)) .. f) + 1) = (((f /. ( len f)) .. f) + ((( Rev f9) /. 1) .. ( Rev f9))) by Th43

      .= (((f /. ( len f)) .. f) + ((f /. ( len f)) .. ( Rev f))) by FINSEQ_5: 65

      .= (( len f) + 1) by A1, Th37;

      hence thesis;

    end;

    theorem :: FINSEQ_6:167

    for D be non empty set, f be FinSequence of D holds (f /^ ( len f)) = {} by RFINSEQ: 27;

    theorem :: FINSEQ_6:168

    

     Th3: for D be non empty set, f be non empty FinSequence of D holds (f /. ( len f)) in ( rng f)

    proof

      let D be non empty set, f be non empty FinSequence of D;

      ( len f) in ( dom f) by FINSEQ_5: 6;

      hence thesis by PARTFUN2: 2;

    end;

    definition

      let D be non empty set, f be FinSequence of D, y be set;

      :: original: just_once_values

      redefine

      :: FINSEQ_6:def12

      pred f just_once_values y means ex x be set st x in ( dom f) & y = (f /. x) & for z be set st z in ( dom f) & z <> x holds (f /. z) <> y;

      compatibility

      proof

        hereby

          assume f just_once_values y;

          then

          consider x be object such that

           A1: x in ( dom f) and

           A2: y = (f . x) and

           A3: for z be object st z in ( dom f) & z <> x holds (f . z) <> y by FINSEQ_4: 7;

          reconsider x as set by TARSKI: 1;

          take x;

          thus x in ( dom f) by A1;

          thus y = (f /. x) by A1, A2, PARTFUN1:def 6;

          let z be set;

          assume that

           A4: z in ( dom f) and

           A5: z <> x;

          (f . z) <> y by A3, A4, A5;

          hence (f /. z) <> y by A4, PARTFUN1:def 6;

        end;

        given x be set such that

         A6: x in ( dom f) and

         A7: y = (f /. x) and

         A8: for z be set st z in ( dom f) & z <> x holds (f /. z) <> y;

        

         A9: for z be object st z in ( dom f) & z <> x holds (f . z) <> y

        proof

          let z be object;

          assume that

           A10: z in ( dom f) and

           A11: z <> x;

          (f /. z) <> y by A8, A10, A11;

          hence thesis by A10, PARTFUN1:def 6;

        end;

        y = (f . x) by A6, A7, PARTFUN1:def 6;

        hence thesis by A6, A9, FINSEQ_4: 7;

      end;

    end

    theorem :: FINSEQ_6:169

    

     Th4: for D be non empty set, f be FinSequence of D st f just_once_values (f /. ( len f)) holds (f -: (f /. ( len f))) = f

    proof

      let D be non empty set, f be FinSequence of D;

      assume

       A1: f just_once_values (f /. ( len f));

      

      thus (f -: (f /. ( len f))) = (f | ((f /. ( len f)) .. f)) by FINSEQ_5:def 1

      .= (f | ( len f)) by A1, Th1

      .= f by FINSEQ_1: 58;

    end;

    theorem :: FINSEQ_6:170

    

     Th5: for D be non empty set, f be FinSequence of D st f just_once_values (f /. ( len f)) holds (f :- (f /. ( len f))) = <*(f /. ( len f))*>

    proof

      let D be non empty set, f be FinSequence of D;

      assume

       A1: f just_once_values (f /. ( len f));

      

      thus (f :- (f /. ( len f))) = ( <*(f /. ( len f))*> ^ (f /^ ((f /. ( len f)) .. f))) by FINSEQ_5:def 2

      .= ( <*(f /. ( len f))*> ^ (f /^ ( len f))) by A1, Th1

      .= ( <*(f /. ( len f))*> ^ {} ) by RFINSEQ: 27

      .= <*(f /. ( len f))*> by FINSEQ_1: 34;

    end;

    theorem :: FINSEQ_6:171

    

     Th6: 1 <= ( len (f :- p))

    proof

      ( len (f :- p)) = ( len ( <*p*> ^ (f /^ (p .. f)))) by FINSEQ_5:def 2

      .= (( len <*p*>) + ( len (f /^ (p .. f)))) by FINSEQ_1: 22

      .= (1 + ( len (f /^ (p .. f)))) by FINSEQ_1: 39;

      hence thesis by NAT_1: 11;

    end;

    theorem :: FINSEQ_6:172

    for D be non empty set, p be Element of D, f be FinSequence of D st p in ( rng f) holds ( len (f :- p)) <= ( len f)

    proof

      let D be non empty set, p be Element of D, f be FinSequence of D;

      assume

       A1: p in ( rng f);

      then 1 <= (p .. f) by FINSEQ_4: 21;

      then

       A2: (( len f) - 1) >= (( len f) - (p .. f)) by XREAL_1: 10;

      ( len (f :- p)) = ((( len f) - (p .. f)) + 1) by A1, FINSEQ_5: 50;

      then (( len (f :- p)) - 1) = (( len f) - (p .. f));

      hence thesis by A2, XREAL_1: 9;

    end;

    theorem :: FINSEQ_6:173

    for D be non empty set, f be circular non empty FinSequence of D holds ( Rev f) is circular

    proof

      let D be non empty set, f be circular non empty FinSequence of D;

      

      thus (( Rev f) /. 1) = (f /. ( len f)) by FINSEQ_5: 65

      .= (f /. 1) by Def1A

      .= (( Rev f) /. ( len f)) by FINSEQ_5: 65

      .= (( Rev f) /. ( len ( Rev f))) by FINSEQ_5:def 3;

    end;

    begin

    reserve D for non empty set,

p for Element of D,

f for FinSequence of D;

    theorem :: FINSEQ_6:174

    

     Th9: p in ( rng f) & 1 <= i & i <= ( len (f :- p)) implies (( Rotate (f,p)) /. i) = (f /. ((i -' 1) + (p .. f)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: 1 <= i and

       A3: i <= ( len (f :- p));

      

       A4: i in ( dom (f :- p)) by A2, A3, FINSEQ_3: 25;

      

       A5: i = ((i -' 1) + 1) by A2, XREAL_1: 235;

      ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by A1, Def2;

      

      hence (( Rotate (f,p)) /. i) = ((f :- p) /. i) by A4, FINSEQ_4: 68

      .= (f /. ((i -' 1) + (p .. f))) by A1, A5, A4, FINSEQ_5: 52;

    end;

    theorem :: FINSEQ_6:175

    

     Th10: p in ( rng f) & (p .. f) <= i & i <= ( len f) implies (f /. i) = (( Rotate (f,p)) /. ((i + 1) -' (p .. f)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: (p .. f) <= i and

       A3: i <= ( len f);

      

       A4: (1 + (p .. f)) <= (i + 1) by A2, XREAL_1: 6;

      (i + 1) <= (( len f) + 1) by A3, XREAL_1: 6;

      then i <= (i + 1) & ((i + 1) - (p .. f)) <= ((( len f) + 1) - (p .. f)) by NAT_1: 11, XREAL_1: 9;

      then ((i + 1) -' (p .. f)) <= ((( len f) - (p .. f)) + 1) by A2, XREAL_1: 233, XXREAL_0: 2;

      then

       A5: ((i + 1) -' (p .. f)) <= ( len (f :- p)) by A1, FINSEQ_5: 50;

      ((((i + 1) -' (p .. f)) -' 1) + (p .. f)) = ((((i -' (p .. f)) + 1) -' 1) + (p .. f)) by A2, NAT_D: 38

      .= ((i -' (p .. f)) + (p .. f)) by NAT_D: 34

      .= i by A2, XREAL_1: 235;

      hence thesis by A1, A4, A5, Th9, NAT_D: 55;

    end;

    theorem :: FINSEQ_6:176

    p in ( rng f) implies (( Rotate (f,p)) /. ( len (f :- p))) = (f /. ( len f))

    proof

      

       A1: 1 <= ( len (f :- p)) by Th6;

      assume

       A2: p in ( rng f);

      then (p .. f) <= ( len f) by FINSEQ_4: 21;

      then

      reconsider x = (( len f) - (p .. f)) as Element of NAT by INT_1: 5;

      ((( len (f :- p)) -' 1) + (p .. f)) = (((x + 1) -' 1) + (p .. f)) by A2, FINSEQ_5: 50

      .= ((( len f) - (p .. f)) + (p .. f)) by NAT_D: 34

      .= ( len f);

      hence thesis by A1, A2, Th9;

    end;

    

     NAT27: j < i implies ((i -' (j + 1)) + 1) = (i -' j)

    proof

      assume

       A1: j < i;

      then (j + 1) <= i by NAT_1: 13;

      

      hence ((i -' (j + 1)) + 1) = ((i - (j + 1)) + 1) by XREAL_1: 233

      .= (i - j)

      .= (i -' j) by A1, XREAL_1: 233;

    end;

    theorem :: FINSEQ_6:177

    

     Th12: p in ( rng f) & ( len (f :- p)) < i & i <= ( len f) implies (( Rotate (f,p)) /. i) = (f /. ((i + (p .. f)) -' ( len f)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: ( len (f :- p)) < i and

       A3: i <= ( len f);

      

       A4: ( len (f -: p)) = (p .. f) by A1, FINSEQ_5: 42;

      

       A5: ((i -' ( len (f :- p))) + ( len (f :- p))) = i & ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by A1, A2, Def2, XREAL_1: 235;

      (f -: p) is non empty by A1, FINSEQ_5: 47;

      then ( len (f -: p)) >= 1 by NAT_1: 14;

      then

       A6: ( len ((f -: p) /^ 1)) = (( len (f -: p)) - 1) by RFINSEQ:def 1;

      (i + (p .. f)) <= ((p .. f) + ( len f)) by A3, XREAL_1: 6;

      then

       A7: ((i + (p .. f)) -' ( len f)) <= (p .. f) by NAT_D: 53;

      

       A8: (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

      then (( len f) - (p .. f)) = (( len f) -' (p .. f)) by XREAL_1: 233;

      then

       A9: ( len (f :- p)) = ((( len f) -' (p .. f)) + 1) by A1, FINSEQ_5: 50;

      then

       A10: (( len f) -' (p .. f)) < i by A2, NAT_1: 13;

      then

       A11: ( len f) < (i + (p .. f)) by NAT_D: 55;

      then (( len f) + 1) <= (i + (p .. f)) by NAT_1: 13;

      then 1 <= ((i + (p .. f)) -' ( len f)) by NAT_D: 55;

      then

       A12: ((i + (p .. f)) -' ( len f)) in ( Seg (p .. f)) by A7;

      i <= ((p .. f) + (( len f) -' (p .. f))) by A3, A8, XREAL_1: 235;

      then (i -' (( len f) -' (p .. f))) <= (p .. f) by NAT_D: 53;

      then ((i -' ((( len f) -' (p .. f)) + 1)) + 1) <= (p .. f) by A10, NAT27;

      then

       A13: (i -' ( len (f :- p))) <= (( len (f -: p)) - 1) by A9, A4, XREAL_1: 19;

      (((( len f) -' (p .. f)) + 1) + 1) <= i by A2, A9, NAT_1: 13;

      then

       A14: 1 <= (i -' ((( len f) -' (p .. f)) + 1)) by NAT_D: 55;

      then

       A15: (i -' ((( len f) -' (p .. f)) + 1)) in ( dom ((f -: p) /^ 1)) by A9, A6, A13, FINSEQ_3: 25;

      (( len f) - (p .. f)) = (( len f) -' (p .. f)) by A8, XREAL_1: 233;

      then 1 <= (i -' ( len (f :- p))) by A1, A14, FINSEQ_5: 50;

      then (i -' ( len (f :- p))) in ( dom ((f -: p) /^ 1)) by A6, A13, FINSEQ_3: 25;

      

      hence (( Rotate (f,p)) /. i) = (((f -: p) /^ 1) /. (i -' ((( len f) -' (p .. f)) + 1))) by A9, A5, FINSEQ_4: 69

      .= ((f -: p) /. ((i -' ((( len f) -' (p .. f)) + 1)) + 1)) by A15, FINSEQ_5: 27

      .= ((f -: p) /. (i -' (( len f) -' (p .. f)))) by A10, NAT27

      .= ((f -: p) /. (i - (( len f) -' (p .. f)))) by A10, XREAL_1: 233

      .= ((f -: p) /. (i - (( len f) - (p .. f)))) by A8, XREAL_1: 233

      .= ((f -: p) /. ((i + (p .. f)) - ( len f)))

      .= ((f -: p) /. ((i + (p .. f)) -' ( len f))) by A11, XREAL_1: 233

      .= (f /. ((i + (p .. f)) -' ( len f))) by A1, A12, FINSEQ_5: 43;

    end;

    theorem :: FINSEQ_6:178

    p in ( rng f) & 1 < i & i <= (p .. f) implies (f /. i) = (( Rotate (f,p)) /. ((i + ( len f)) -' (p .. f)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: 1 < i and

       A3: i <= (p .. f);

      

       A4: (( len f) -' (p .. f)) <= (( len f) -' i) by A3, NAT_D: 41;

      

       A5: (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

      then i <= ( len f) by A3, XXREAL_0: 2;

      then ((( len f) -' (p .. f)) + i) <= ( len f) by A4, NAT_D: 54;

      then

       A6: ((i + ( len f)) -' (p .. f)) <= ( len f) by A5, NAT_D: 38;

      (( len f) + 1) < (i + ( len f)) by A2, XREAL_1: 6;

      then ((( len f) + 1) - (p .. f)) < ((i + ( len f)) - (p .. f)) by XREAL_1: 9;

      then ((( len f) - (p .. f)) + 1) < (i + (( len f) - (p .. f)));

      then ((( len f) - (p .. f)) + 1) < (i + (( len f) -' (p .. f))) by A5, XREAL_1: 233;

      then ((( len f) - (p .. f)) + 1) < ((i + ( len f)) -' (p .. f)) by A5, NAT_D: 38;

      then

       A7: ( len (f :- p)) < ((i + ( len f)) -' (p .. f)) by A1, FINSEQ_5: 50;

      ( len f) <= (i + ( len f)) by NAT_1: 11;

      

      then ((((i + ( len f)) -' (p .. f)) + (p .. f)) -' ( len f)) = ((i + ( len f)) -' ( len f)) by A5, XREAL_1: 235, XXREAL_0: 2

      .= i by NAT_D: 34;

      hence thesis by A1, A7, A6, Th12;

    end;

    theorem :: FINSEQ_6:179

    

     Th14: ( len ( Rotate (f,p))) = ( len f)

    proof

      per cases ;

        suppose not p in ( rng f);

        hence thesis by Def2;

      end;

        suppose

         A1: p in ( rng f);

        then (f -: p) <> {} by FINSEQ_5: 47;

        then

         A2: 1 <= ( len (f -: p)) by NAT_1: 14;

        

        thus ( len ( Rotate (f,p))) = ( len ((f :- p) ^ ((f -: p) /^ 1))) by A1, Def2

        .= (( len (f :- p)) + ( len ((f -: p) /^ 1))) by FINSEQ_1: 22

        .= (( len (f :- p)) + (( len (f -: p)) - 1)) by A2, RFINSEQ:def 1

        .= ((( len (f :- p)) + ( len (f -: p))) - 1)

        .= ((((( len f) - (p .. f)) + 1) + ( len (f -: p))) - 1) by A1, FINSEQ_5: 50

        .= ((( len f) - (p .. f)) + ( len (f -: p)))

        .= ((( len f) - (p .. f)) + (p .. f)) by A1, FINSEQ_5: 42

        .= ( len f);

      end;

    end;

    theorem :: FINSEQ_6:180

    

     Th15: ( dom ( Rotate (f,p))) = ( dom f)

    proof

      ( len ( Rotate (f,p))) = ( len f) by Th14;

      hence thesis by FINSEQ_3: 29;

    end;

    theorem :: FINSEQ_6:181

    for D be non empty set, f be circular FinSequence of D, p be Element of D st for i st 1 < i & i < ( len f) holds (f /. i) <> (f /. 1) holds ( Rotate (( Rotate (f,p)),(f /. 1))) = f

    proof

      let D be non empty set, f be circular FinSequence of D, p be Element of D such that

       A1: for i st 1 < i & i < ( len f) holds (f /. i) <> (f /. 1);

      per cases ;

        suppose not p in ( rng f);

        

        hence ( Rotate (( Rotate (f,p)),(f /. 1))) = ( Rotate (f,(f /. 1))) by Def2

        .= f by Th89;

      end;

        suppose p = (f /. 1);

        

        hence ( Rotate (( Rotate (f,p)),(f /. 1))) = ( Rotate (f,(f /. 1))) by Th93

        .= f by Th89;

      end;

        suppose that

         A2: p in ( rng f) and

         A3: p <> (f /. 1);

        

         A4: (f /. 1) = ((f -: p) /. 1) by A2, FINSEQ_5: 44;

        

         A5: (f /. 1) = (f /. ( len f)) by Def1A;

        then

         A6: (f /. 1) = ((f :- p) /. ( len (f :- p))) by A2, FINSEQ_5: 54;

        then

         A7: (f /. 1) in ( rng (f :- p)) by Th3;

        

         A8: (f :- p) just_once_values (f /. 1)

        proof

          (p .. f) <> 1 & (p .. f) >= 1 by A2, A3, FINSEQ_4: 21, FINSEQ_5: 38;

          then

           A9: (p .. f) > 1 by XXREAL_0: 1;

          take ( len (f :- p));

          thus ( len (f :- p)) in ( dom (f :- p)) by FINSEQ_5: 6;

          thus (f /. 1) = ((f :- p) /. ( len (f :- p))) by A2, A5, FINSEQ_5: 54;

          let z be set;

          assume

           A10: z in ( dom (f :- p));

          then

          reconsider k = z as Element of NAT ;

          k <> 0 by A10, FINSEQ_3: 25;

          then

          consider i be Nat such that

           A11: k = (i + 1) by NAT_1: 6;

          assume

           A12: z <> ( len (f :- p));

          reconsider i as Element of NAT by ORDINAL1:def 12;

          k <= ( len (f :- p)) by A10, FINSEQ_3: 25;

          then k < ( len (f :- p)) by A12, XXREAL_0: 1;

          then (i + 1) < ((( len f) - (p .. f)) + 1) by A2, A11, FINSEQ_5: 50;

          then i < (( len f) - (p .. f)) by XREAL_1: 6;

          then

           A13: (i + (p .. f)) < ( len f) by XREAL_1: 20;

          (p .. f) <= (i + (p .. f)) by NAT_1: 11;

          then

           A14: 1 < (i + (p .. f)) by A9, XXREAL_0: 2;

          ((f :- p) /. (i + 1)) = (f /. (i + (p .. f))) by A2, A10, A11, FINSEQ_5: 52;

          hence thesis by A1, A11, A14, A13;

        end;

        (f /. 1) in ( rng f) by A2, Th42, RELAT_1: 38;

        then

         A15: (f /. 1) in ( rng ( Rotate (f,p))) by A2, Th90;

        ( Rotate (f,p)) = ((f :- p) ^ ((f -: p) /^ 1)) by A2, Def2;

        

        hence ( Rotate (( Rotate (f,p)),(f /. 1))) = ((((f :- p) ^ ((f -: p) /^ 1)) :- (f /. 1)) ^ ((((f :- p) ^ ((f -: p) /^ 1)) -: (f /. 1)) /^ 1)) by A15, Def2

        .= ((((f :- p) :- (f /. 1)) ^ ((f -: p) /^ 1)) ^ ((((f :- p) ^ ((f -: p) /^ 1)) -: (f /. 1)) /^ 1)) by A7, Th64

        .= ((((f :- p) :- (f /. 1)) ^ ((f -: p) /^ 1)) ^ (((f :- p) -: (f /. 1)) /^ 1)) by A7, Th66

        .= (( <*(f /. 1)*> ^ ((f -: p) /^ 1)) ^ (((f :- p) -: (f /. 1)) /^ 1)) by A6, A8, Th5

        .= ((f -: p) ^ (((f :- p) -: (f /. 1)) /^ 1)) by A2, A4, FINSEQ_5: 29, FINSEQ_5: 47

        .= ((f -: p) ^ ((f :- p) /^ 1)) by A6, A8, Th4

        .= f by A2, Th76;

      end;

    end;

    begin

    reserve f for circular FinSequence of D;

    theorem :: FINSEQ_6:182

    

     Th17: p in ( rng f) & ( len (f :- p)) <= i & i <= ( len f) implies (( Rotate (f,p)) /. i) = (f /. ((i + (p .. f)) -' ( len f)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: ( len (f :- p)) <= i and

       A3: i <= ( len f);

      

       A4: (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

      then

       A5: (( len f) - (p .. f)) = (( len f) -' (p .. f)) by XREAL_1: 233;

      per cases by A2, XXREAL_0: 1;

        suppose

         A6: i = ( len (f :- p));

        then

         A7: i = ((( len f) - (p .. f)) + 1) by A1, FINSEQ_5: 50;

        then i >= 1 by A5, NAT_1: 11;

        

        hence (( Rotate (f,p)) /. i) = (f /. ((i -' 1) + (p .. f))) by A1, A6, Th9

        .= (f /. ((( len f) -' (p .. f)) + (p .. f))) by A5, A7, NAT_D: 34

        .= (f /. ( len f)) by A4, XREAL_1: 235

        .= (f /. 1) by Def1A

        .= (f /. ((( len f) + 1) -' ( len f))) by NAT_D: 34

        .= (f /. ((i + (p .. f)) -' ( len f))) by A7;

      end;

        suppose i > ( len (f :- p));

        hence thesis by A1, A3, Th12;

      end;

    end;

    theorem :: FINSEQ_6:183

    

     Th18: p in ( rng f) & 1 <= i & i <= (p .. f) implies (f /. i) = (( Rotate (f,p)) /. ((i + ( len f)) -' (p .. f)))

    proof

      assume that

       A1: p in ( rng f) and

       A2: 1 <= i and

       A3: i <= (p .. f);

      

       A4: (( len f) -' (p .. f)) <= (( len f) -' i) by A3, NAT_D: 41;

      

       A5: (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

      then i <= ( len f) by A3, XXREAL_0: 2;

      then ((( len f) -' (p .. f)) + i) <= ( len f) by A4, NAT_D: 54;

      then

       A6: ((i + ( len f)) -' (p .. f)) <= ( len f) by A5, NAT_D: 38;

      (( len f) + 1) <= (i + ( len f)) by A2, XREAL_1: 6;

      then ((( len f) + 1) - (p .. f)) <= ((i + ( len f)) - (p .. f)) by XREAL_1: 9;

      then ((( len f) - (p .. f)) + 1) <= (i + (( len f) - (p .. f)));

      then ((( len f) - (p .. f)) + 1) <= (i + (( len f) -' (p .. f))) by A5, XREAL_1: 233;

      then ((( len f) - (p .. f)) + 1) <= ((i + ( len f)) -' (p .. f)) by A5, NAT_D: 38;

      then

       A7: ( len (f :- p)) <= ((i + ( len f)) -' (p .. f)) by A1, FINSEQ_5: 50;

      ( len f) <= (i + ( len f)) by NAT_1: 11;

      

      then ((((i + ( len f)) -' (p .. f)) + (p .. f)) -' ( len f)) = ((i + ( len f)) -' ( len f)) by A5, XREAL_1: 235, XXREAL_0: 2

      .= i by NAT_D: 34;

      hence thesis by A1, A7, A6, Th17;

    end;

    registration

      let D be non trivial set;

      cluster non constant circular for FinSequence of D;

      existence

      proof

        consider d1,d2 be Element of D such that

         A1: d1 <> d2 by SUBSET_1:def 7;

        take f = <*d1, d2, d1*>;

        

         A2: (f . 1) = d1 & (f . 2) = d2 by FINSEQ_1: 45;

        1 in ( dom f) & 2 in ( dom f) by FINSEQ_1: 81;

        hence not f is constant by A1, A2;

        

         A3: ( len f) = 3 by FINSEQ_1: 45;

        

        thus (f /. 1) = d1 by FINSEQ_4: 18

        .= (f /. ( len f)) by A3, FINSEQ_4: 18;

      end;

    end

    registration

      let D be non trivial set, p be Element of D;

      let f be non constant circular FinSequence of D;

      cluster ( Rotate (f,p)) -> non constant;

      coherence

      proof

        per cases ;

          suppose not p in ( rng f);

          hence thesis by Def2;

        end;

          suppose

           A1: p in ( rng f);

          

           A2: ( dom ( Rotate (f,p))) = ( dom f) by Th15;

          consider n, m such that

           A3: n in ( dom f) and

           A4: m in ( dom f) and

           A5: (f /. n) <> (f /. m) by Def1;

          

           A6: n <= ( len f) by A3, FINSEQ_3: 25;

          

           A7: m <= ( len f) by A4, FINSEQ_3: 25;

          

           A8: 1 <= m by A4, FINSEQ_3: 25;

          

           A9: 1 <= n by A3, FINSEQ_3: 25;

          thus not ( Rotate (f,p)) is constant

          proof

            

             A10: 1 <= (p .. f) by A1, FINSEQ_4: 21;

            

             A11: (p .. f) <= ( len f) by A1, FINSEQ_4: 21;

            per cases ;

              suppose that

               A12: n <= (p .. f) and

               A13: m <= (p .. f);

              n <= (n + (( len f) -' (p .. f))) by NAT_1: 11;

              then 1 <= (n + (( len f) -' (p .. f))) by A9, XXREAL_0: 2;

              then

               A14: 1 <= ((n + ( len f)) -' (p .. f)) by A11, NAT_D: 38;

              m <= (m + (( len f) -' (p .. f))) by NAT_1: 11;

              then 1 <= (m + (( len f) -' (p .. f))) by A8, XXREAL_0: 2;

              then

               A15: 1 <= ((m + ( len f)) -' (p .. f)) by A11, NAT_D: 38;

              (m + ( len f)) <= (( len f) + (p .. f)) by A13, XREAL_1: 6;

              then ((m + ( len f)) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A16: ((m + ( len f)) -' (p .. f)) in ( dom f) by A15, FINSEQ_3: 25;

              (n + ( len f)) <= (( len f) + (p .. f)) by A12, XREAL_1: 6;

              then ((n + ( len f)) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A17: ((n + ( len f)) -' (p .. f)) in ( dom f) by A14, FINSEQ_3: 25;

              (f /. n) = (( Rotate (f,p)) /. ((n + ( len f)) -' (p .. f))) & (f /. m) = (( Rotate (f,p)) /. ((m + ( len f)) -' (p .. f))) by A1, A9, A8, A12, A13, Th18;

              hence thesis by A5, A2, A17, A16;

            end;

              suppose that

               A18: n <= (p .. f) and

               A19: m >= (p .. f);

              (1 + (p .. f)) <= (m + 1) by A19, XREAL_1: 6;

              then

               A20: 1 <= ((m + 1) -' (p .. f)) by NAT_D: 55;

              n <= (n + (( len f) -' (p .. f))) by NAT_1: 11;

              then 1 <= (n + (( len f) -' (p .. f))) by A9, XXREAL_0: 2;

              then

               A21: 1 <= ((n + ( len f)) -' (p .. f)) by A11, NAT_D: 38;

              (n + ( len f)) <= (( len f) + (p .. f)) by A18, XREAL_1: 6;

              then ((n + ( len f)) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A22: ((n + ( len f)) -' (p .. f)) in ( dom f) by A21, FINSEQ_3: 25;

              (m + 1) <= (( len f) + (p .. f)) by A7, A10, XREAL_1: 7;

              then ((m + 1) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A23: ((m + 1) -' (p .. f)) in ( dom f) by A20, FINSEQ_3: 25;

              (f /. n) = (( Rotate (f,p)) /. ((n + ( len f)) -' (p .. f))) & (f /. m) = (( Rotate (f,p)) /. ((m + 1) -' (p .. f))) by A1, A9, A7, A18, A19, Th10, Th18;

              hence thesis by A5, A2, A22, A23;

            end;

              suppose that

               A24: m <= (p .. f) and

               A25: n >= (p .. f);

              (1 + (p .. f)) <= (n + 1) by A25, XREAL_1: 6;

              then

               A26: 1 <= ((n + 1) -' (p .. f)) by NAT_D: 55;

              m <= (m + (( len f) -' (p .. f))) by NAT_1: 11;

              then 1 <= (m + (( len f) -' (p .. f))) by A8, XXREAL_0: 2;

              then

               A27: 1 <= ((m + ( len f)) -' (p .. f)) by A11, NAT_D: 38;

              (m + ( len f)) <= (( len f) + (p .. f)) by A24, XREAL_1: 6;

              then ((m + ( len f)) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A28: ((m + ( len f)) -' (p .. f)) in ( dom f) by A27, FINSEQ_3: 25;

              (n + 1) <= (( len f) + (p .. f)) by A6, A10, XREAL_1: 7;

              then ((n + 1) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A29: ((n + 1) -' (p .. f)) in ( dom f) by A26, FINSEQ_3: 25;

              (f /. m) = (( Rotate (f,p)) /. ((m + ( len f)) -' (p .. f))) & (f /. n) = (( Rotate (f,p)) /. ((n + 1) -' (p .. f))) by A1, A6, A8, A24, A25, Th10, Th18;

              hence thesis by A5, A2, A28, A29;

            end;

              suppose that

               A30: m >= (p .. f) and

               A31: n >= (p .. f);

              (1 + (p .. f)) <= (m + 1) by A30, XREAL_1: 6;

              then

               A32: 1 <= ((m + 1) -' (p .. f)) by NAT_D: 55;

              (1 + (p .. f)) <= (n + 1) by A31, XREAL_1: 6;

              then

               A33: 1 <= ((n + 1) -' (p .. f)) by NAT_D: 55;

              (n + 1) <= (( len f) + (p .. f)) by A6, A10, XREAL_1: 7;

              then ((n + 1) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A34: ((n + 1) -' (p .. f)) in ( dom f) by A33, FINSEQ_3: 25;

              (m + 1) <= (( len f) + (p .. f)) by A7, A10, XREAL_1: 7;

              then ((m + 1) -' (p .. f)) <= ( len f) by NAT_D: 53;

              then

               A35: ((m + 1) -' (p .. f)) in ( dom f) by A32, FINSEQ_3: 25;

              (f /. m) = (( Rotate (f,p)) /. ((m + 1) -' (p .. f))) & (f /. n) = (( Rotate (f,p)) /. ((n + 1) -' (p .. f))) by A1, A6, A7, A30, A31, Th10;

              hence thesis by A5, A2, A35, A34;

            end;

          end;

        end;

      end;

    end