finseq_1.miz



    begin

    reserve a for natural Number,

k,l,m,n,k1,b,c,i for Nat,

x,y,z,y1,y2 for object,

X,Y for set,

f,g for Function;

    definition

      let n be natural Number;

      :: FINSEQ_1:def1

      func Seg n -> set equals { k where k be Nat : 1 <= k & k <= n };

      correctness ;

    end

    definition

      let n be Nat;

      :: original: Seg

      redefine

      func Seg n -> Subset of NAT ;

      coherence

      proof

        set X = ( Seg n);

        X c= NAT

        proof

          let x be object;

          assume x in X;

          then ex k be Nat st x = k & 1 <= k & k <= n;

          hence thesis by ORDINAL1:def 12;

        end;

        hence thesis;

      end;

    end

    theorem :: FINSEQ_1:1

    

     Th1: for a,b be natural Number holds a in ( Seg b) iff 1 <= a & a <= b

    proof

      let a,b be natural Number;

      

       A1: a is Nat & b is Nat by TARSKI: 1;

      a in { m where m be Nat : 1 <= m & m <= b } iff ex m be Nat st a = m & 1 <= m & m <= b;

      hence thesis by A1;

    end;

    registration

      let n be zero natural Number;

      cluster ( Seg n) -> empty;

      coherence

      proof

        assume not ( Seg n) is empty;

        then

        consider x be object such that

         A1: x in ( Seg n);

        ex k be Nat st k = x & 1 <= k & k <= 0 by A1;

        hence contradiction;

      end;

    end

    theorem :: FINSEQ_1:2

    

     Th2: ( Seg 1) = {1} & ( Seg 2) = {1, 2}

    proof

      now

        let x be object;

        thus x in ( Seg 1) implies x in {1}

        proof

          assume x in ( Seg 1);

          then

          consider k be Nat such that

           A1: x = k and

           A2: 1 <= k & k <= 1;

          k = 1 by A2, XXREAL_0: 1;

          hence thesis by A1, TARSKI:def 1;

        end;

        assume x in {1};

        then x = 1 by TARSKI:def 1;

        hence x in ( Seg 1);

      end;

      hence ( Seg 1) = {1} by TARSKI: 2;

      now

        let x be object;

        thus x in ( Seg 2) implies x in {1, 2}

        proof

          assume x in ( Seg 2);

          then

          consider k be Nat such that

           A3: x = k and

           A4: 1 <= k and

           A5: k <= 2;

          k <= (1 + 1) by A5;

          then k = 1 or k = 2 by A4, NAT_1: 9;

          hence thesis by A3, TARSKI:def 2;

        end;

        assume x in {1, 2};

        then x = 1 or x = 2 by TARSKI:def 2;

        hence x in ( Seg 2);

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FINSEQ_1:3

    

     Th3: for a be natural Number holds a = 0 or a in ( Seg a)

    proof

      let a be natural Number;

      assume a <> 0 ;

      then ex b be Nat st a = (b + 1) by NAT_1: 6;

      then a in NAT & 1 <= a by NAT_1: 11;

      hence thesis;

    end;

    registration

      let n be non zero natural Number;

      cluster ( Seg n) -> non empty;

      coherence by Th3;

    end

    theorem :: FINSEQ_1:4

    for a be natural Number holds (a + 1) in ( Seg (a + 1)) by Th3;

    theorem :: FINSEQ_1:5

    

     Th5: for a,b be natural Number holds a <= b iff ( Seg a) c= ( Seg b)

    proof

      let a,b be natural Number;

      thus a <= b implies ( Seg a) c= ( Seg b)

      proof

        assume

         A1: a <= b;

        let x be object;

        assume x in ( Seg a);

        then

        consider c be Nat such that

         A3: x = c & 1 <= c & c <= a;

        c <= b by A1, A3, XXREAL_0: 2;

        hence thesis by A3;

      end;

      assume

       A4: ( Seg a) c= ( Seg b);

      now

        assume a <> 0 ;

        then a in ( Seg a) by Th3;

        hence thesis by A4, Th1;

      end;

      hence thesis;

    end;

    theorem :: FINSEQ_1:6

    

     Th6: for a,b be natural Number holds ( Seg a) = ( Seg b) implies a = b

    proof

      let a,b be natural Number;

      assume ( Seg a) = ( Seg b);

      then a <= b & b <= a by Th5;

      hence thesis by XXREAL_0: 1;

    end;

    theorem :: FINSEQ_1:7

    

     Th7: for a,c be natural Number holds c <= a implies ( Seg c) = (( Seg a) /\ ( Seg c)) by Th5, XBOOLE_1: 28;

    theorem :: FINSEQ_1:8

    for a,c be natural Number holds ( Seg c) = (( Seg c) /\ ( Seg a)) implies c <= a by Th6, Th7;

    theorem :: FINSEQ_1:9

    

     Th9: for a be natural Number holds (( Seg a) \/ {(a + 1)}) = ( Seg (a + 1))

    proof

      let a be natural Number;

      thus (( Seg a) \/ {(a + 1)}) c= ( Seg (a + 1))

      proof

        (a + 0 ) <= (a + 1) by XREAL_1: 7;

        then

         A1: ( Seg a) c= ( Seg (a + 1)) by Th5;

        let x be object;

        assume x in (( Seg a) \/ {(a + 1)});

        then x in ( Seg a) or x in {(a + 1)} by XBOOLE_0:def 3;

        then x in ( Seg (a + 1)) or x = (a + 1) by A1, TARSKI:def 1;

        hence thesis by Th3;

      end;

      let x be object;

      assume

       A2: x in ( Seg (a + 1));

      then

      reconsider x as Element of NAT ;

      

       A3: x <= (a + 1) by A2, Th1;

      

       A4: 1 <= x by A2, Th1;

      x <= a or x = (a + 1) by A3, NAT_1: 8;

      then x in ( Seg a) or x in {(a + 1)} by A4, TARSKI:def 1;

      hence thesis by XBOOLE_0:def 3;

    end;

    theorem :: FINSEQ_1:10

    for k be natural Number holds ( Seg k) = (( Seg (k + 1)) \ {(k + 1)})

    proof

      let k be natural Number;

      

       A1: ( Seg (k + 1)) = (( Seg k) \/ {(k + 1)}) by Th9;

      ( Seg k) misses {(k + 1)}

      proof

        assume not thesis;

        then

         A2: (( Seg k) /\ {(k + 1)}) <> {} ;

        set x = the Element of (( Seg k) /\ {(k + 1)});

        

         A3: x in ( Seg k) by A2, XBOOLE_0:def 4;

        x in {(k + 1)} by A2, XBOOLE_0:def 4;

        then x = (k + 1) by TARSKI:def 1;

        hence thesis by A3, Th1, XREAL_1: 29;

      end;

      hence thesis by A1, XBOOLE_1: 88;

    end;

    definition

      let IT be Relation;

      :: FINSEQ_1:def2

      attr IT is FinSequence-like means

      : Def2: ex n st ( dom IT) = ( Seg n);

    end

    registration

      cluster empty -> FinSequence-like for Relation;

      coherence

      proof

        let R be Relation;

        assume

         A1: R is empty;

        take 0 ;

        thus thesis by A1;

      end;

    end

    definition

      mode FinSequence is FinSequence-like Function;

    end

    reserve p,q,r,s,t for FinSequence;

    defpred P[ object, object] means ex k st $1 = k & $2 = (k + 1);

    registration

      let n be natural Number;

      cluster ( Seg n) -> finite;

      coherence

      proof

        reconsider n as Nat by TARSKI: 1;

        ( Seg n) is finite

        proof

          

           A1: n = { k where k be Nat : k < n } by AXIOMS: 4;

          

           A2: for x be object st x in n holds ex y be object st P[x, y]

          proof

            let x be object;

            assume x in n;

            then ex k be Nat st x = k & k < n by A1;

            then

            reconsider k = x as Nat;

            take (k + 1);

            thus thesis;

          end;

          consider f such that

           A3: ( dom f) = n and

           A4: for x be object st x in n holds P[x, (f . x)] from CLASSES1:sch 1( A2);

          take f;

          thus ( rng f) = ( Seg n)

          proof

            thus ( rng f) c= ( Seg n)

            proof

              let x be object;

              assume x in ( rng f);

              then

              consider y be object such that

               A5: y in ( dom f) and

               A6: x = (f . y) by FUNCT_1:def 3;

              consider k such that

               A7: y = k and

               A8: x = (k + 1) by A3, A4, A5, A6;

              ex m be Nat st m = y & m < n by A1, A3, A5;

              then 1 <= (k + 1) & (k + 1) <= n by A7, NAT_1: 11, NAT_1: 13;

              hence thesis by A8;

            end;

            let x be object;

            assume x in ( Seg n);

            then

            consider k be Nat such that

             A9: x = k and

             A10: 1 <= k and

             A11: k <= n;

            consider i be Nat such that

             A12: (1 + i) = k by A10, NAT_1: 10;

            i in NAT & i < n by A11, A12, NAT_1: 13, ORDINAL1:def 12;

            then

             A13: i in n by A1;

            then P[i, (f . i)] by A4;

            hence thesis by A3, A9, A12, A13, FUNCT_1:def 3;

          end;

          thus thesis by A3, ORDINAL1:def 12;

        end;

        hence thesis;

      end;

    end

    registration

      cluster FinSequence-like -> finite for Function;

      coherence

      proof

        let f be Function;

        given n such that

         A1: ( dom f) = ( Seg n);

        ( rng f) is finite by A1, FINSET_1: 8;

        then [:( dom f), ( rng f):] is finite by A1;

        hence thesis by FINSET_1: 1, RELAT_1: 7;

      end;

    end

    

     Lm1: (( Seg n),n) are_equipotent

    proof

      defpred P[ Nat] means (( Seg $1),$1) are_equipotent ;

      

       A1: P[ 0 ];

      

       A2: for n st P[n] holds P[(n + 1)]

      proof

        let n such that

         A3: (( Seg n),n) are_equipotent ;

        

         A4: ( Segm (n + 1)) = ( succ ( Segm n)) by NAT_1: 38

        .= (n \/ {n});

        

         A5: ( Seg (n + 1)) = (( Seg n) \/ {(n + 1)}) & ( {(n + 1)}, {n}) are_equipotent by Th9, CARD_1: 28;

         A6:

        now

          assume n meets {n};

          then

          consider x be object such that

           A7: x in n and

           A8: x in {n} by XBOOLE_0: 3;

          

           A: x = n by A8, TARSKI:def 1;

          reconsider xx = x as set by TARSKI: 1;

           not xx in xx;

          hence contradiction by A7, A;

        end;

        now

          assume ( Seg n) meets {(n + 1)};

          then

          consider x be object such that

           A9: x in ( Seg n) and

           A10: x in {(n + 1)} by XBOOLE_0: 3;

          

           A11: x = (n + 1) by A10, TARSKI:def 1;

           not (n + 1) <= n by NAT_1: 13;

          hence contradiction by A9, A11, Th1;

        end;

        hence thesis by A3, A4, A5, A6, CARD_1: 31;

      end;

      for n holds P[n] from NAT_1:sch 2( A1, A2);

      hence thesis;

    end;

    registration

      let n be natural Number;

      cluster ( Seg n) -> n -element;

      coherence

      proof

        n is Nat by TARSKI: 1;

        hence thesis by Lm1, CARD_1:def 2;

      end;

    end

    notation

      let p;

      synonym len p for card p;

    end

    definition

      let p;

      :: original: len

      redefine

      :: FINSEQ_1:def3

      func len p -> Element of NAT means

      : Def3: ( Seg it ) = ( dom p);

      coherence

      proof

        ( card p) = ( card p);

        hence thesis;

      end;

      compatibility

      proof

        let k be Element of NAT ;

        consider n such that

         A1: ( dom p) = ( Seg n) by Def2;

        (( dom p),p) are_equipotent

        proof

          deffunc F( object) = [$1, (p . $1)];

          consider g be Function such that

           A2: ( dom g) = ( dom p) and

           A3: for x be object st x in ( dom p) holds (g . x) = F(x) from FUNCT_1:sch 3;

          take g;

          thus g is one-to-one

          proof

            let x,y be object;

            assume that

             A4: x in ( dom g) and

             A5: y in ( dom g);

            assume (g . x) = (g . y);

            

            then [x, (p . x)] = (g . y) by A2, A3, A4

            .= [y, (p . y)] by A2, A3, A5;

            hence thesis by XTUPLE_0: 1;

          end;

          thus ( dom g) = ( dom p) by A2;

          thus ( rng g) c= p

          proof

            let i be object;

            assume i in ( rng g);

            then

            consider x be object such that

             A6: x in ( dom g) and

             A7: (g . x) = i by FUNCT_1:def 3;

            (g . x) = [x, (p . x)] by A2, A3, A6;

            hence thesis by A2, A6, A7, FUNCT_1: 1;

          end;

          let x,y be object;

          assume

           A8: [x, y] in p;

          then

           A9: x in ( dom p) by FUNCT_1: 1;

          y = (p . x) by A8, FUNCT_1: 1;

          then (g . x) = [x, y] by A3, A8, FUNCT_1: 1;

          hence thesis by A2, A9, FUNCT_1:def 3;

        end;

        then

         A10: ( card p) = ( card ( dom p)) by CARD_1: 5;

        thus k = ( card p) implies ( Seg k) = ( dom p) by A1, A10, Lm1, CARD_1:def 2;

        assume ( Seg k) = ( dom p);

        hence k = ( card p) by A10, Lm1, CARD_1:def 2;

      end;

    end

    definition

      let p;

      :: original: dom

      redefine

      func dom p -> Subset of NAT ;

      coherence

      proof

        ( dom p) = ( Seg ( len p)) by Def3;

        hence thesis;

      end;

    end

    theorem :: FINSEQ_1:11

    (ex k st ( dom f) c= ( Seg k)) implies ex p st f c= p

    proof

      given k such that

       A1: ( dom f) c= ( Seg k);

      deffunc F( object) = (f . $1);

      consider g such that

       A2: ( dom g) = ( Seg k) & for x be object st x in ( Seg k) holds (g . x) = F(x) from FUNCT_1:sch 3;

      reconsider g as FinSequence by A2, Def2;

      take g;

      let y,z be object;

      assume

       A3: [y, z] in f;

      then

       A4: y in ( dom f) by XTUPLE_0:def 12;

      reconsider z as set by TARSKI: 1;

      

       A5: (f . y) = z by A3, FUNCT_1:def 2, A4;

       [y, (g . y)] in g by A1, A2, A4, FUNCT_1: 1;

      hence thesis by A1, A2, A4, A5;

    end;

    scheme :: FINSEQ_1:sch1

    SeqEx { A() -> Nat , P[ object, object] } :

ex p st ( dom p) = ( Seg A()) & for k st k in ( Seg A()) holds P[k, (p . k)]

      provided

       A1: for k st k in ( Seg A()) holds ex x st P[k, x];

      

       A2: for x be object st x in ( Seg A()) holds ex y be object st P[x, y] by A1;

      consider f be Function such that

       A3: ( dom f) = ( Seg A()) & for x be object st x in ( Seg A()) holds P[x, (f . x)] from CLASSES1:sch 1( A2);

      reconsider p = f as FinSequence by A3, Def2;

      take p;

      thus thesis by A3;

    end;

    scheme :: FINSEQ_1:sch2

    SeqLambda { A() -> Nat , F( object) -> object } :

ex p be FinSequence st ( len p) = A() & for k st k in ( dom p) holds (p . k) = F(k);

      consider f be Function such that

       A1: ( dom f) = ( Seg A()) & for x be object st x in ( Seg A()) holds (f . x) = F(x) from FUNCT_1:sch 3;

      

       A2: A() in NAT by ORDINAL1:def 12;

      reconsider p = f as FinSequence by A1, Def2;

      take p;

      thus thesis by A1, A2, Def3;

    end;

    theorem :: FINSEQ_1:12

    z in p implies ex k st k in ( dom p) & z = [k, (p . k)]

    proof

      assume

       A1: z in p;

      then

      consider x,y be object such that

       A2: z = [x, y] by RELAT_1:def 1;

      x in ( dom p) by A1, A2, FUNCT_1: 1;

      then

      reconsider k = x as Nat;

      take k;

      thus thesis by A1, A2, FUNCT_1: 1;

    end;

    theorem :: FINSEQ_1:13

    ( dom p) = ( dom q) & (for k st k in ( dom p) holds (p . k) = (q . k)) implies p = q;

    theorem :: FINSEQ_1:14

    

     Th14: ( len p) = ( len q) & (for k st 1 <= k & k <= ( len p) holds (p . k) = (q . k)) implies p = q

    proof

      assume that

       A1: ( len p) = ( len q) and

       A2: for k st 1 <= k & k <= ( len p) holds (p . k) = (q . k);

      

       A3: ( dom p) = ( Seg ( len p)) by Def3;

      

       A4: ( dom q) = ( Seg ( len q)) by Def3;

      now

        let x be object;

        assume

         A5: x in ( dom p);

        then

        reconsider k = x as Nat;

        1 <= k & k <= ( len p) by A3, A5, Th1;

        hence (p . x) = (q . x) by A2;

      end;

      hence thesis by A1, A3, A4;

    end;

    theorem :: FINSEQ_1:15

    

     Th15: (p | ( Seg a)) is FinSequence

    proof

      

       A0: a is Nat by TARSKI: 1;

      

       A1: ( dom (p | ( Seg a))) = (( dom p) /\ ( Seg a)) by RELAT_1: 61

      .= (( Seg ( len p)) /\ ( Seg a)) by Def3;

      ( len p) <= a or a <= ( len p);

      then ( dom (p | ( Seg a))) = ( Seg ( len p)) or ( dom (p | ( Seg a))) = ( Seg a) by A1, Th5, XBOOLE_1: 28;

      hence thesis by A0, Def2;

    end;

    theorem :: FINSEQ_1:16

    ( rng p) c= ( dom f) implies (f * p) is FinSequence

    proof

      assume ( rng p) c= ( dom f);

      

      then ( dom (f * p)) = ( dom p) by RELAT_1: 27

      .= ( Seg ( len p)) by Def3;

      hence thesis by Def2;

    end;

    theorem :: FINSEQ_1:17

    

     Th17: a <= ( len p) & q = (p | ( Seg a)) implies ( len q) = a & ( dom q) = ( Seg a)

    proof

      assume that

       A1: a <= ( len p) and

       A2: q = (p | ( Seg a));

      ( Seg a) c= ( Seg ( len p)) by A1, Th5;

      then ( Seg a) c= ( dom p) by Def3;

      then a in NAT & ( dom q) = ( Seg a) by A2, ORDINAL1:def 12, RELAT_1: 62;

      hence thesis by Def3;

    end;

    definition

      let D be set;

      :: FINSEQ_1:def4

      mode FinSequence of D -> FinSequence means

      : Def4: ( rng it ) c= D;

      existence

      proof

        ( rng {} ) c= D;

        hence thesis;

      end;

    end

    registration

      let D be set;

      cluster -> D -valued for FinSequence of D;

      coherence

      proof

        let f be FinSequence of D;

        thus ( rng f) c= D by Def4;

      end;

    end

    

     Lm2: for D be set, f be FinSequence of D holds f is PartFunc of NAT , D

    proof

      let D be set, f be FinSequence of D;

      ( dom f) c= NAT & ( rng f) c= D by Def4;

      hence thesis by RELSET_1: 4;

    end;

    registration

      cluster empty -> FinSequence-like for Relation;

      coherence ;

    end

    registration

      let D be set;

      cluster FinSequence-like for PartFunc of NAT , D;

      existence

      proof

         {} is PartFunc of NAT , D by RELSET_1: 12;

        hence thesis;

      end;

    end

    definition

      let D be set;

      :: original: FinSequence

      redefine

      mode FinSequence of D -> FinSequence-like PartFunc of NAT , D ;

      coherence by Lm2;

    end

    reserve D for set;

    theorem :: FINSEQ_1:18

    

     Th18: for p be FinSequence of D holds (p | ( Seg a)) is FinSequence of D

    proof

      let p be FinSequence of D;

      

       A1: (p | ( Seg a)) is FinSequence by Th15;

      ( rng (p | ( Seg a))) c= ( rng p) & ( rng p) c= D by Def4, RELAT_1: 70;

      hence thesis by A1, Def4, XBOOLE_1: 1;

    end;

    theorem :: FINSEQ_1:19

    for D be non empty set holds ex p be FinSequence of D st ( len p) = a

    proof

      let D be non empty set;

      reconsider a as Element of NAT by ORDINAL1:def 12;

      set y = the Element of D;

      set p = (( Seg a) --> y);

      

       A1: ( dom p) = ( Seg a) by FUNCOP_1: 13;

      then

      reconsider p as FinSequence by Def2;

      ( rng p) c= {y} & {y} c= D by FUNCOP_1: 13, ZFMISC_1: 31;

      then

      reconsider q = p as FinSequence of D by Def4, XBOOLE_1: 1;

      take q;

      thus thesis by A1, Def3;

    end;

    

     Lm3: q = {} iff ( len q) = 0 ;

    theorem :: FINSEQ_1:20

    p <> {} iff ( len p) >= 1

    proof

      hereby

        assume p <> {} ;

        then (( len p) + 1) > ( 0 + 1) by XREAL_1: 8;

        hence ( len p) >= 1 by NAT_1: 13;

      end;

      assume ( len p) >= 1;

      hence thesis;

    end;

    definition

      let x be object;

      :: FINSEQ_1:def5

      func <*x*> -> set equals { [1, x]};

      coherence ;

    end

    definition

      let D be set;

      :: FINSEQ_1:def6

      func <*> D -> FinSequence of D equals {} ;

      coherence

      proof

        ( rng {} ) c= D;

        hence thesis by Def4;

      end;

    end

    registration

      let D be set;

      cluster ( <*> D) -> empty;

      coherence ;

    end

    registration

      let D be set;

      cluster empty for FinSequence of D;

      existence

      proof

        take ( <*> D);

        thus thesis;

      end;

    end

    definition

      let p, q;

      :: FINSEQ_1:def7

      func p ^ q -> FinSequence means

      : Def7: ( dom it ) = ( Seg (( len p) + ( len q))) & (for k st k in ( dom p) holds (it . k) = (p . k)) & for k st k in ( dom q) holds (it . (( len p) + k)) = (q . k);

      existence

      proof

        defpred P[ object, object] means (for k st k = $1 & 1 <= k & k <= ( len p) holds $2 = (p . k)) & (for k st k = $1 & (( len p) + 1) <= k & k <= (( len p) + ( len q)) holds $2 = (q . (k - ( len p))));

        

         A1: for x be object st x in ( Seg (( len p) + ( len q))) holds ex y be object st P[x, y]

        proof

          let x be object;

          assume x in ( Seg (( len p) + ( len q)));

          then

          reconsider m = x as Element of NAT ;

           A2:

          now

            assume

             A3: (( len p) + 1) <= m;

            set y = (q . (m - ( len p)));

            

             A4: for k st k = x & 1 <= k & k <= ( len p) holds y = (p . k)

            proof

              let k;

              assume that

               A5: k = x and 1 <= k and

               A6: k <= ( len p);

              (m + (( len p) + 1)) <= (m + ( len p)) by A3, A5, A6, XREAL_1: 7;

              then ((m + ( len p)) + 1) <= ((m + ( len p)) + 0 );

              hence thesis by XREAL_1: 6;

            end;

            for k st k = x & (( len p) + 1) <= k & k <= (( len p) + ( len q)) holds y = (q . (k - ( len p)));

            hence thesis by A4;

          end;

          now

            assume

             A7: not (( len p) + 1) <= m;

            set y = (p . m);

            (for k st k = x & 1 <= k & k <= ( len p) holds y = (p . k)) & for k st k = x & (( len p) + 1) <= k & k <= (( len p) + ( len q)) holds y = (q . (k - ( len p))) by A7;

            hence thesis;

          end;

          hence thesis by A2;

        end;

        consider f such that

         A8: ( dom f) = ( Seg (( len p) + ( len q))) & for x be object st x in ( Seg (( len p) + ( len q))) holds P[x, (f . x)] from CLASSES1:sch 1( A1);

        

         A9: for k st k in ( dom p) holds (f . k) = (p . k)

        proof

          let k;

          assume k in ( dom p);

          then

           A10: k in ( Seg ( len p)) by Def3;

          then

           A11: 1 <= k & k <= ( len p) by Th1;

          ( Seg ( len p)) c= ( Seg (( len p) + ( len q))) by Th5, NAT_1: 11;

          hence thesis by A8, A10, A11;

        end;

        

         A12: for n st n in ( dom q) holds (f . (( len p) + n)) = (q . n)

        proof

          let n;

          assume n in ( dom q);

          then

           A13: n in ( Seg ( len q)) by Def3;

          then

           A14: 1 <= n by Th1;

          

           A15: n <= ( len q) by A13, Th1;

          

           A16: (( len p) + 1) <= (( len p) + n) by A14, XREAL_1: 7;

          

           A17: (( len p) + n) <= (( len p) + ( len q)) by A15, XREAL_1: 7;

          (( len p) + n) <= ((( len p) + n) + ( len p)) by NAT_1: 11;

          then (( len p) + 1) <= ((( len p) + n) + ( len p)) by A16, XXREAL_0: 2;

          then 1 <= (( len p) + n) by XREAL_1: 6;

          then (( len p) + n) in ( Seg (( len p) + ( len q))) by A17;

          then (f . (( len p) + n)) = (q . ((n + ( len p)) - ( len p))) by A8, A16, A17;

          hence thesis;

        end;

        reconsider r = f as FinSequence by A8, Def2;

        take r;

        thus thesis by A8, A9, A12;

      end;

      uniqueness

      proof

        let f,g be FinSequence such that

         A18: ( dom f) = ( Seg (( len p) + ( len q))) and

         A19: for k st k in ( dom p) holds (f . k) = (p . k) and

         A20: for k st k in ( dom q) holds (f . (( len p) + k)) = (q . k) and

         A21: ( dom g) = ( Seg (( len p) + ( len q))) and

         A22: for k st k in ( dom p) holds (g . k) = (p . k) and

         A23: for k st k in ( dom q) holds (g . (( len p) + k)) = (q . k);

        for x be object st x in ( Seg (( len p) + ( len q))) holds (f . x) = (g . x)

        proof

          let x be object;

          assume

           A24: x in ( Seg (( len p) + ( len q)));

          then

          reconsider k = x as Element of NAT ;

          

           A25: 1 <= k by A24, Th1;

           A26:

          now

            assume (( len p) + 1) <= k;

            then

            consider m be Nat such that

             A27: ((( len p) + 1) + m) = k by NAT_1: 10;

            (( len p) + (1 + m)) <= (( len p) + ( len q)) by A24, A27, Th1;

            then (1 + 0 ) <= (1 + m) & (1 + m) <= ( len q) by XREAL_1: 6;

            then (1 + m) in ( Seg ( len q));

            then

             A28: (1 + m) in ( dom q) by Def3;

            then (g . (( len p) + (1 + m))) = (q . (1 + m)) by A23;

            hence thesis by A20, A27, A28;

          end;

          now

            assume not (( len p) + 1) <= k;

            then k <= ( len p) by NAT_1: 8;

            then k in ( Seg ( len p)) by A25;

            then

             A29: k in ( dom p) by Def3;

            then (f . k) = (p . k) by A19;

            hence thesis by A22, A29;

          end;

          hence thesis by A26;

        end;

        hence thesis by A18, A21;

      end;

    end

    theorem :: FINSEQ_1:21

    

     Th21: p = ((p ^ q) | ( dom p))

    proof

      

       A1: ( dom (p ^ q)) = ( Seg (( len p) + ( len q))) by Def7;

      

       A2: ( dom p) = ( Seg ( len p)) by Def3;

      then

       A3: ( dom p) = (( dom (p ^ q)) /\ ( Seg ( len p))) by A1, Th7, NAT_1: 12;

      for x be object st x in ( dom p) holds (p . x) = ((p ^ q) . x) by Def7;

      hence thesis by A2, A3, FUNCT_1: 46;

    end;

    theorem :: FINSEQ_1:22

    

     Th22: ( len (p ^ q)) = (( len p) + ( len q))

    proof

      ( dom (p ^ q)) = ( Seg (( len p) + ( len q))) by Def7;

      hence thesis by Def3;

    end;

    theorem :: FINSEQ_1:23

    

     Th23: for k be Nat st (( len p) + 1) <= k & k <= (( len p) + ( len q)) holds ((p ^ q) . k) = (q . (k - ( len p)))

    proof

      let k be Nat;

      assume that

       A1: (( len p) + 1) <= k and

       A2: k <= (( len p) + ( len q));

      consider m be Nat such that

       A3: ((( len p) + 1) + m) = k by A1, NAT_1: 10;

      

       A4: (( len p) + (1 + m)) = k by A3;

      (1 + m) = (k - ( len p)) by A3;

      then

       A5: 1 <= (1 + m) by A1, XREAL_1: 19;

      (k - ( len p)) <= ( len q) by A2, XREAL_1: 20;

      then (1 + m) in ( Seg ( len q)) by A3, A5;

      then (1 + m) in ( dom q) by Def3;

      hence thesis by A4, Def7;

    end;

    theorem :: FINSEQ_1:24

    

     Th24: for k be Nat st ( len p) < k & k <= ( len (p ^ q)) holds ((p ^ q) . k) = (q . (k - ( len p)))

    proof

      let k be Nat;

      assume ( len p) < k & k <= ( len (p ^ q));

      then (( len p) + 1) <= k & k <= (( len p) + ( len q)) by Th22, NAT_1: 13;

      hence thesis by Th23;

    end;

    theorem :: FINSEQ_1:25

    

     Th25: for k be Nat st k in ( dom (p ^ q)) holds (k in ( dom p) or ex n st n in ( dom q) & k = (( len p) + n))

    proof

      let k be Nat;

      assume k in ( dom (p ^ q));

      then

       A1: k in ( Seg ( len (p ^ q))) by Def3;

      then

       A2: k in ( Seg (( len p) + ( len q))) by Th22;

      

       A3: k in NAT & 1 <= k by A1, Th1;

       A4:

      now

        assume not (( len p) + 1) <= k;

        then k <= ( len p) by NAT_1: 8;

        then k in ( Seg ( len p)) by A3;

        hence thesis by Def3;

      end;

      now

        assume (( len p) + 1) <= k;

        then

        consider n be Nat such that

         A5: k = ((( len p) + 1) + n) by NAT_1: 10;

        (( len p) + (1 + n)) <= (( len p) + ( len q)) by A2, A5, Th1;

        then

         A6: (1 + n) <= ( len q) by XREAL_1: 6;

        1 <= (1 + n) by NAT_1: 11;

        then (1 + n) in ( Seg ( len q)) by A6;

        then

         A7: (1 + n) in ( dom q) by Def3;

        k = (( len p) + (1 + n)) by A5;

        hence thesis by A7;

      end;

      hence thesis by A4;

    end;

    theorem :: FINSEQ_1:26

    

     Th26: ( dom p) c= ( dom (p ^ q))

    proof

      ( Seg ( len p)) c= ( Seg (( len p) + ( len q))) by Th5, NAT_1: 11;

      then ( Seg ( len p)) c= ( dom (p ^ q)) by Def7;

      hence thesis by Def3;

    end;

    theorem :: FINSEQ_1:27

    

     Th27: x in ( dom q) implies ex k st k = x & (( len p) + k) in ( dom (p ^ q))

    proof

      assume

       A1: x in ( dom q);

      then

       A2: x in ( Seg ( len q)) by Def3;

      reconsider k = x as Element of NAT by A1;

      take k;

      

       A3: 1 <= k by A2, Th1;

      

       A4: k <= ( len q) by A2, Th1;

      k <= (( len p) + k) by NAT_1: 11;

      then

       A5: 1 <= (( len p) + k) by A3, XXREAL_0: 2;

      (( len p) + k) <= (( len p) + ( len q)) by A4, XREAL_1: 7;

      then (( len p) + k) in ( Seg (( len p) + ( len q))) by A5;

      hence thesis by Def7;

    end;

    theorem :: FINSEQ_1:28

    

     Th28: k in ( dom q) implies (( len p) + k) in ( dom (p ^ q))

    proof

      assume k in ( dom q);

      then ex n st n = k & (( len p) + n) in ( dom (p ^ q)) by Th27;

      hence thesis;

    end;

    theorem :: FINSEQ_1:29

    

     Th29: ( rng p) c= ( rng (p ^ q))

    proof

      let x be object;

      assume x in ( rng p);

      then

      consider y be object such that

       A1: y in ( dom p) and

       A2: x = (p . y) by FUNCT_1:def 3;

      reconsider k = y as Element of NAT by A1;

      

       A3: ( dom p) c= ( dom (p ^ q)) by Th26;

      ((p ^ q) . k) = (p . k) by A1, Def7;

      hence x in ( rng (p ^ q)) by A1, A2, A3, FUNCT_1:def 3;

    end;

    theorem :: FINSEQ_1:30

    

     Th30: ( rng q) c= ( rng (p ^ q))

    proof

      let x be object;

      assume x in ( rng q);

      then

      consider y be object such that

       A1: y in ( dom q) and

       A2: x = (q . y) by FUNCT_1:def 3;

      reconsider k = y as Element of NAT by A1;

      (( len p) + k) in ( dom (p ^ q)) & ((p ^ q) . (( len p) + k)) = (q . k) by A1, Def7, Th28;

      hence x in ( rng (p ^ q)) by A2, FUNCT_1:def 3;

    end;

    theorem :: FINSEQ_1:31

    

     Th31: ( rng (p ^ q)) = (( rng p) \/ ( rng q))

    proof

      now

        let x be object;

        assume x in ( rng (p ^ q));

        then

        consider y be object such that

         A1: y in ( dom (p ^ q)) and

         A2: x = ((p ^ q) . y) by FUNCT_1:def 3;

        

         A3: y in ( Seg (( len p) + ( len q))) by A1, Def7;

        reconsider k = y as Element of NAT by A1;

        

         A4: 1 <= k by A3, Th1;

        

         A5: k <= (( len p) + ( len q)) by A3, Th1;

         A6:

        now

          assume

           A7: (( len p) + 1) <= k;

          then

           A8: (q . (k - ( len p))) = x by A2, A5, Th23;

          consider m be Nat such that

           A9: ((( len p) + 1) + m) = k by A7, NAT_1: 10;

          (( len p) + (1 + m)) = k by A9;

          then (1 + 0 ) <= (1 + m) & (1 + m) <= ( len q) by A3, Th1, XREAL_1: 6;

          then (1 + m) in ( Seg ( len q));

          then (k - ( len p)) in ( dom q) by A9, Def3;

          hence x in ( rng q) by A8, FUNCT_1:def 3;

        end;

        now

          assume not (( len p) + 1) <= k;

          then k <= ( len p) by NAT_1: 8;

          then k in ( Seg ( len p)) by A4;

          then

           A10: k in ( dom p) by Def3;

          then (p . k) = x by A2, Def7;

          hence x in ( rng p) by A10, FUNCT_1:def 3;

        end;

        hence x in (( rng p) \/ ( rng q)) by A6, XBOOLE_0:def 3;

      end;

      then

       A11: ( rng (p ^ q)) c= (( rng p) \/ ( rng q));

      ( rng p) c= ( rng (p ^ q)) & ( rng q) c= ( rng (p ^ q)) by Th29, Th30;

      then (( rng p) \/ ( rng q)) c= ( rng (p ^ q)) by XBOOLE_1: 8;

      hence thesis by A11;

    end;

    theorem :: FINSEQ_1:32

    

     Th32: ((p ^ q) ^ r) = (p ^ (q ^ r))

    proof

      

       A1: ( dom ((p ^ q) ^ r)) = ( Seg (( len (p ^ q)) + ( len r))) by Def7

      .= ( Seg ((( len p) + ( len q)) + ( len r))) by Th22

      .= ( Seg (( len p) + (( len q) + ( len r))))

      .= ( Seg (( len p) + ( len (q ^ r)))) by Th22;

      

       A2: for k st k in ( dom p) holds (((p ^ q) ^ r) . k) = (p . k)

      proof

        let k;

        assume

         A3: k in ( dom p);

        ( dom p) c= ( dom (p ^ q)) by Th26;

        

        hence (((p ^ q) ^ r) . k) = ((p ^ q) . k) by A3, Def7

        .= (p . k) by A3, Def7;

      end;

      for k st k in ( dom (q ^ r)) holds (((p ^ q) ^ r) . (( len p) + k)) = ((q ^ r) . k)

      proof

        let k;

        assume

         A4: k in ( dom (q ^ r));

         A5:

        now

          assume

           A6: k in ( dom q);

          then (( len p) + k) in ( dom (p ^ q)) by Th28;

          

          hence (((p ^ q) ^ r) . (( len p) + k)) = ((p ^ q) . (( len p) + k)) by Def7

          .= (q . k) by A6, Def7

          .= ((q ^ r) . k) by A6, Def7;

        end;

        now

          assume not k in ( dom q);

          then

          consider n such that

           A7: n in ( dom r) and

           A8: k = (( len q) + n) by A4, Th25;

          

          thus (((p ^ q) ^ r) . (( len p) + k)) = (((p ^ q) ^ r) . ((( len p) + ( len q)) + n)) by A8

          .= (((p ^ q) ^ r) . (( len (p ^ q)) + n)) by Th22

          .= (r . n) by A7, Def7

          .= ((q ^ r) . k) by A7, A8, Def7;

        end;

        hence thesis by A5;

      end;

      hence thesis by A1, A2, Def7;

    end;

    theorem :: FINSEQ_1:33

    (p ^ r) = (q ^ r) or (r ^ p) = (r ^ q) implies p = q

    proof

      assume

       A1: (p ^ r) = (q ^ r) or (r ^ p) = (r ^ q);

       A2:

      now

        assume

         A3: (p ^ r) = (q ^ r);

        then (( len p) + ( len r)) = ( len (q ^ r)) by Th22;

        then (( len p) + ( len r)) = (( len q) + ( len r)) by Th22;

        

        then

         A4: ( dom p) = ( Seg ( len q)) by Def3

        .= ( dom q) by Def3;

        for k st k in ( dom p) holds (p . k) = (q . k)

        proof

          let k;

          assume

           A5: k in ( dom p);

          

          hence (p . k) = ((q ^ r) . k) by A3, Def7

          .= (q . k) by A4, A5, Def7;

        end;

        hence thesis by A4;

      end;

      now

        assume

         A6: (r ^ p) = (r ^ q);

        

        then (( len r) + ( len p)) = ( len (r ^ q)) by Th22

        .= (( len r) + ( len q)) by Th22;

        

        then

         A7: ( dom p) = ( Seg ( len q)) by Def3

        .= ( dom q) by Def3;

        for k st k in ( dom p) holds (p . k) = (q . k)

        proof

          let k;

          assume

           A8: k in ( dom p);

          

          hence (p . k) = ((r ^ q) . (( len r) + k)) by A6, Def7

          .= (q . k) by A7, A8, Def7;

        end;

        hence thesis by A7;

      end;

      hence thesis by A1, A2;

    end;

    theorem :: FINSEQ_1:34

    

     Th34: (p ^ {} ) = p & ( {} ^ p) = p

    proof

      

       A1: ( dom (p ^ {} )) = ( Seg ( len (p ^ {} ))) by Def3

      .= ( Seg (( len p) + ( len {} ))) by Th22

      .= ( dom p) by Def3;

      for k st k in ( dom p) holds (p . k) = ((p ^ {} ) . k) by Def7;

      hence (p ^ {} ) = p by A1;

      

       A2: ( dom ( {} ^ p)) = ( Seg ( len ( {} ^ p))) by Def3

      .= ( Seg (( len {} ) + ( len p))) by Th22

      .= ( dom p) by Def3;

      for k st k in ( dom p) holds (p . k) = (( {} ^ p) . k)

      proof

        let k;

        assume

         A3: k in ( dom p);

        

        thus (( {} ^ p) . k) = (( {} ^ p) . (( len {} ) + k))

        .= (p . k) by A3, Def7;

      end;

      hence ( {} ^ p) = p by A2;

    end;

    theorem :: FINSEQ_1:35

    

     Th35: (p ^ q) = {} implies p = {} & q = {}

    proof

      assume (p ^ q) = {} ;

      

      then 0 = ( len (p ^ q))

      .= (( len p) + ( len q)) by Th22;

      hence thesis;

    end;

    definition

      let D be set;

      let p,q be FinSequence of D;

      :: original: ^

      redefine

      func p ^ q -> FinSequence of D ;

      coherence

      proof

        

         A1: ( rng (p ^ q)) = (( rng p) \/ ( rng q)) & ( rng p) c= D by Def4, Th31;

        ( rng q) c= D by Def4;

        hence ( rng (p ^ q)) c= D by A1, XBOOLE_1: 8;

      end;

    end

    

     Lm4: for x1,y1 be object holds [x, y] in { [x1, y1]} implies x = x1 & y = y1

    proof

      let x1,y1 be object;

      assume [x, y] in { [x1, y1]};

      then [x, y] = [x1, y1] by TARSKI:def 1;

      hence thesis by XTUPLE_0: 1;

    end;

    definition

      let x be object;

      :: original: <*

      redefine

      :: FINSEQ_1:def8

      func <*x*> -> Function means

      : Def8: ( dom it ) = ( Seg 1) & (it . 1) = x;

      coherence ;

      compatibility

      proof

        let f be Function;

        hereby

          assume

           A1: f = <*x*>;

          hence ( dom f) = ( Seg 1) by Th2, RELAT_1: 9;

           [1, x] in f by A1, TARSKI:def 1;

          hence (f . 1) = x by FUNCT_1: 1;

        end;

        assume that

         A2: ( dom f) = ( Seg 1) and

         A3: (f . 1) = x;

        reconsider g = { [1, (f . 1)]} as Function;

        for y,z be object holds [y, z] in f iff [y, z] in g

        proof

          let y,z be object;

          hereby

            assume

             A4: [y, z] in f;

            then

             A5: y in {1} by A2, Th2, XTUPLE_0:def 12;

            

             A6: z in ( rng f) by A4, XTUPLE_0:def 13;

            

             A7: ( rng f) = {(f . 1)} by A2, Th2, FUNCT_1: 4;

            

             A8: y = 1 by A5, TARSKI:def 1;

            z = (f . 1) by A6, A7, TARSKI:def 1;

            hence [y, z] in g by A8, TARSKI:def 1;

          end;

          assume [y, z] in g;

          then

           A9: y = 1 & z = (f . 1) by Lm4;

          1 in ( dom f) by A2;

          hence thesis by A9, FUNCT_1:def 2;

        end;

        hence thesis by A3, RELAT_1:def 2;

      end;

    end

    registration

      let x be object;

      cluster <*x*> -> Function-like Relation-like;

      coherence ;

    end

    registration

      let x be object;

      cluster <*x*> -> FinSequence-like;

      coherence by Def8;

    end

    theorem :: FINSEQ_1:36

    

     Th36: (p ^ q) is FinSequence of D implies p is FinSequence of D & q is FinSequence of D

    proof

      assume (p ^ q) is FinSequence of D;

      then ( rng (p ^ q)) c= D by Def4;

      then

       A1: (( rng p) \/ ( rng q)) c= D by Th31;

      ( rng p) c= (( rng p) \/ ( rng q)) by XBOOLE_1: 7;

      hence p is FinSequence of D by Def4, A1, XBOOLE_1: 1;

      ( rng q) c= (( rng p) \/ ( rng q)) by XBOOLE_1: 7;

      hence thesis by Def4, A1, XBOOLE_1: 1;

    end;

    definition

      let x,y be object;

      :: FINSEQ_1:def9

      func <*x,y*> -> set equals ( <*x*> ^ <*y*>);

      correctness ;

      let z be object;

      :: FINSEQ_1:def10

      func <*x,y,z*> -> set equals (( <*x*> ^ <*y*>) ^ <*z*>);

      correctness ;

    end

    registration

      let x,y be object;

      cluster <*x, y*> -> Function-like Relation-like;

      coherence ;

      let z be object;

      cluster <*x, y, z*> -> Function-like Relation-like;

      coherence ;

    end

    registration

      let x,y be object;

      cluster <*x, y*> -> FinSequence-like;

      coherence ;

      let z be object;

      cluster <*x, y, z*> -> FinSequence-like;

      coherence ;

    end

    theorem :: FINSEQ_1:37

    for x be object holds <*x*> = { [1, x]};

    theorem :: FINSEQ_1:38

    

     Th38: for x be object holds p = <*x*> iff ( dom p) = ( Seg 1) & ( rng p) = {x}

    proof

      let x be object;

      thus p = <*x*> implies ( dom p) = ( Seg 1) & ( rng p) = {x}

      proof

        assume

         A1: p = <*x*>;

        hence ( dom p) = ( Seg 1) by Def8;

        ( dom p) = {1} by A1, Def8, Th2;

        then ( rng p) = {(p . 1)} by FUNCT_1: 4;

        hence thesis by A1, Def8;

      end;

      assume that

       A2: ( dom p) = ( Seg 1) and

       A3: ( rng p) = {x};

      1 in ( dom p) by A2;

      then (p . 1) in {x} by A3, FUNCT_1:def 3;

      then (p . 1) = x by TARSKI:def 1;

      hence thesis by A2, Def8;

    end;

    theorem :: FINSEQ_1:39

    

     Th39: for x be object holds p = <*x*> iff ( len p) = 1 & ( rng p) = {x}

    proof

      let x be object;

      ( len p) = 1 iff ( dom p) = ( Seg 1) by Def3;

      hence thesis by Th38;

    end;

    theorem :: FINSEQ_1:40

    

     Th40: for x be object holds p = <*x*> iff ( len p) = 1 & (p . 1) = x

    proof

      let x be object;

      ( len p) = 1 iff ( dom p) = ( Seg 1) by Def3;

      hence thesis by Def8;

    end;

    theorem :: FINSEQ_1:41

    for x be object holds (( <*x*> ^ p) . 1) = x

    proof

      let x be object;

      1 in ( Seg 1);

      then 1 in ( dom <*x*>) by Def8;

      then (( <*x*> ^ p) . 1) = ( <*x*> . 1) by Def7;

      hence thesis by Def8;

    end;

    theorem :: FINSEQ_1:42

    

     Th42: for x be object holds ((p ^ <*x*>) . (( len p) + 1)) = x

    proof

      let x be object;

      ( dom <*x*>) = ( Seg 1) by Def8;

      then 1 in ( dom <*x*>);

      

      hence ((p ^ <*x*>) . (( len p) + 1)) = ( <*x*> . 1) by Def7

      .= x by Def8;

    end;

    theorem :: FINSEQ_1:43

    for x,y,z be object holds <*x, y, z*> = ( <*x*> ^ <*y, z*>) & <*x, y, z*> = ( <*x, y*> ^ <*z*>) by Th32;

    theorem :: FINSEQ_1:44

    

     Th44: for x,y be object holds p = <*x, y*> iff ( len p) = 2 & (p . 1) = x & (p . 2) = y

    proof

      let x,y be object;

      thus p = <*x, y*> implies ( len p) = 2 & (p . 1) = x & (p . 2) = y

      proof

        assume

         A1: p = <*x, y*>;

        

        hence ( len p) = (( len <*x*>) + ( len <*y*>)) by Th22

        .= (1 + ( len <*y*>)) by Th39

        .= (1 + 1) by Th39

        .= 2;

        

         A2: 1 in {1} by TARSKI:def 1;

        then 1 in ( dom <*x*>) by Def8, Th2;

        

        hence (p . 1) = ( <*x*> . 1) by A1, Def7

        .= x by Def8;

        

         A3: 1 in ( dom <*y*>) by A2, Def8, Th2;

        

        thus (p . 2) = (( <*x*> ^ <*y*>) . (1 + 1)) by A1

        .= (( <*x*> ^ <*y*>) . (( len <*x*>) + 1)) by Th39

        .= ( <*y*> . 1) by A3, Def7

        .= y by Def8;

      end;

      assume that

       A4: ( len p) = 2 and

       A5: (p . 1) = x and

       A6: (p . 2) = y;

      

       A7: ( dom p) = ( Seg (1 + 1)) by A4, Def3

      .= ( Seg (( len <*x*>) + 1)) by Th39

      .= ( Seg (( len <*x*>) + ( len <*y*>))) by Th39;

      

       A8: for k st k in ( dom <*x*>) holds (p . k) = ( <*x*> . k)

      proof

        let k;

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

        then k in {1} by Def8, Th2;

        then k = 1 by TARSKI:def 1;

        hence thesis by A5, Def8;

      end;

      for k st k in ( dom <*y*>) holds (p . (( len <*x*>) + k)) = ( <*y*> . k)

      proof

        let k;

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

        then

         A9: k in {1} by Def8, Th2;

        

        thus (p . (( len <*x*>) + k)) = (p . (1 + k)) by Th39

        .= (p . (1 + 1)) by A9, TARSKI:def 1

        .= ( <*y*> . 1) by A6, Def8

        .= ( <*y*> . k) by A9, TARSKI:def 1;

      end;

      hence thesis by A7, A8, Def7;

    end;

    theorem :: FINSEQ_1:45

    

     Th45: for x,y,z be object holds p = <*x, y, z*> iff ( len p) = 3 & (p . 1) = x & (p . 2) = y & (p . 3) = z

    proof

      let x,y,z be object;

      thus p = <*x, y, z*> implies ( len p) = 3 & (p . 1) = x & (p . 2) = y & (p . 3) = z

      proof

        assume

         A1: p = <*x, y, z*>;

        

        hence ( len p) = (( len <*x, y*>) + ( len <*z*>)) by Th22

        .= (2 + ( len <*z*>)) by Th44

        .= (2 + 1) by Th39

        .= 3;

        

         A2: 1 in {1} by TARSKI:def 1;

        then

         A3: 1 in ( dom <*x*>) by Def8, Th2;

        

        thus (p . 1) = (( <*x*> ^ <*y, z*>) . 1) by A1, Th32

        .= ( <*x*> . 1) by A3, Def7

        .= x by Def8;

        2 in ( Seg 2) & ( len <*x, y*>) = 2 by Th44;

        then 2 in ( dom <*x, y*>) by Def3;

        

        hence (p . 2) = ( <*x, y*> . 2) by A1, Def7

        .= y by Th44;

        

         A4: 1 in ( dom <*z*>) by A2, Def8, Th2;

        

        thus (p . 3) = (( <*x, y*> ^ <*z*>) . (2 + 1)) by A1

        .= (( <*x, y*> ^ <*z*>) . (( len <*x, y*>) + 1)) by Th44

        .= ( <*z*> . 1) by A4, Def7

        .= z by Def8;

      end;

      assume that

       A5: ( len p) = 3 and

       A6: (p . 1) = x and

       A7: (p . 2) = y and

       A8: (p . 3) = z;

      

       A9: ( dom p) = ( Seg (2 + 1)) by A5, Def3

      .= ( Seg (( len <*x, y*>) + 1)) by Th44

      .= ( Seg (( len <*x, y*>) + ( len <*z*>))) by Th39;

      

       A10: for k st k in ( dom <*x, y*>) holds (p . k) = ( <*x, y*> . k)

      proof

        let k such that

         A11: k in ( dom <*x, y*>);

        ( len <*x, y*>) = 2 by Th44;

        then

         A12: k in ( Seg 2) by A11, Def3;

        

         A13: k = 1 implies (p . k) = ( <*x, y*> . k) by A6, Th44;

        k = 2 implies (p . k) = ( <*x, y*> . k) by A7, Th44;

        hence thesis by A12, A13, Th2, TARSKI:def 2;

      end;

      for k st k in ( dom <*z*>) holds (p . (( len <*x, y*>) + k)) = ( <*z*> . k)

      proof

        let k;

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

        then k in {1} by Def8, Th2;

        then

         A14: k = 1 by TARSKI:def 1;

        

        hence (p . (( len <*x, y*>) + k)) = (p . (2 + 1)) by Th44

        .= ( <*z*> . k) by A8, A14, Def8;

      end;

      hence thesis by A9, A10, Def7;

    end;

    theorem :: FINSEQ_1:46

    

     Th46: for x be object holds p <> {} implies ex q, x st p = (q ^ <*x*>)

    proof

      let x be object;

      assume p <> {} ;

      then

      consider n be Nat such that

       A1: ( len p) = (n + 1) by NAT_1: 6;

      reconsider n as Element of NAT by ORDINAL1:def 12;

      reconsider q = (p | ( Seg n)) as FinSequence by Th15;

      take q;

      take (p . ( len p));

      

       A2: ( dom q) = (( dom p) /\ ( Seg n)) by RELAT_1: 61

      .= (( Seg ( len p)) /\ ( Seg n)) by Def3;

      ( Seg n) c= ( Seg ( len p)) by Th5, A1, NAT_1: 11;

      then

       A3: ( dom q) = ( Seg n) by A2, XBOOLE_1: 28;

      

       A4: ( dom (q ^ <*(p . ( len p))*>)) = ( Seg ( len (q ^ <*(p . ( len p))*>))) by Def3

      .= ( Seg (( len q) + ( len <*(p . ( len p))*>))) by Th22

      .= ( Seg (( len q) + 1)) by Th39

      .= ( Seg ( len p)) by A1, A3, Def3

      .= ( dom p) by Def3;

      for x be object st x in ( dom p) holds (p . x) = ((q ^ <*(p . ( len p))*>) . x)

      proof

        let x be object;

        assume

         A5: x in ( dom p);

        then

        reconsider k = x as Element of NAT ;

        k in ( Seg (n + 1)) by A1, A5, Def3;

        then

         A6: k in (( Seg n) \/ {(n + 1)}) by Th9;

         A7:

        now

          assume

           A8: k in ( Seg n);

          

          hence (p . k) = (q . k) by A3, FUNCT_1: 47

          .= ((q ^ <*(p . ( len p))*>) . k) by A3, A8, Def7;

        end;

        now

          assume

           A9: k in {(n + 1)};

          1 in ( Seg 1);

          then

           A10: 1 in ( dom <*(p . ( len p))*>) by Def8;

          

          thus ((q ^ <*(p . ( len p))*>) . k) = ((q ^ <*(p . ( len p))*>) . (n + 1)) by A9, TARSKI:def 1

          .= ((q ^ <*(p . ( len p))*>) . (( len q) + 1)) by A3, Def3

          .= ( <*(p . ( len p))*> . 1) by A10, Def7

          .= (p . (n + 1)) by A1, Def8

          .= (p . k) by A9, TARSKI:def 1;

        end;

        hence thesis by A6, A7, XBOOLE_0:def 3;

      end;

      hence (q ^ <*(p . ( len p))*>) = p by A4;

    end;

    definition

      let D be non empty set;

      let x be Element of D;

      :: original: <*

      redefine

      func <*x*> -> FinSequence of D ;

      coherence

      proof

        let y be object;

        assume y in ( rng <*x*>);

        then y in {x} by Th39;

        then y = x by TARSKI:def 1;

        hence thesis;

      end;

    end

    scheme :: FINSEQ_1:sch3

    IndSeq { P[ FinSequence] } :

for p holds P[p]

      provided

       A1: P[ {} ]

       and

       A2: for p, x st P[p] holds P[(p ^ <*x*>)];

      let p;

      defpred R[ set] means for p st ( len p) = $1 holds P[p];

      consider X be Subset of REAL such that

       A3: for x be Element of REAL holds x in X iff R[x] from SUBSET_1:sch 3;

      for k holds k in X

      proof

        

         A4: 0 in REAL by XREAL_0:def 1;

        defpred S[ Nat] means $1 in X;

        for q st ( len q) = 0 holds P[q] by A1, Lm3;

        then

         A5: S[ 0 ] by A3, A4;

        now

          let n such that

           A6: n in X;

          

           A7: (n + 1) in REAL by NUMBERS: 19;

          now

            let q;

            assume

             A8: ( len q) = (n + 1);

            then q <> {} ;

            then

            consider r, x such that

             A9: q = (r ^ <*x*>) by Th46;

            ( len q) = (( len r) + ( len <*x*>)) by A9, Th22

            .= (( len r) + 1) by Th39;

            hence P[q] by A2, A9, A3, A6, A8;

          end;

          hence (n + 1) in X by A3, A7;

        end;

        then

         A10: for n st S[n] holds S[(n + 1)];

        thus for n holds S[n] from NAT_1:sch 2( A5, A10);

      end;

      then ( len p) in X;

      hence thesis by A3;

    end;

    theorem :: FINSEQ_1:47

    for p,q,r,s be FinSequence st (p ^ q) = (r ^ s) & ( len p) <= ( len r) holds ex t be FinSequence st (p ^ t) = r

    proof

      defpred S[ FinSequence] means for p, q, s st (p ^ q) = ($1 ^ s) & ( len p) <= ( len $1) holds ex t st (p ^ t) = $1;

      

       A1: S[ {} ]

      proof

        let p, q, s;

        assume that (p ^ q) = ( {} ^ s) and

         A2: ( len p) <= ( len {} );

        take {} ;

        

        thus (p ^ {} ) = p by Th34

        .= {} by A2;

      end;

      

       A3: for r, x st S[r] holds S[(r ^ <*x*>)]

      proof

        let r, x;

        assume

         A4: for p, q, s st (p ^ q) = (r ^ s) & ( len p) <= ( len r) holds ex t st (p ^ t) = r;

        let p, q, s;

        assume that

         A5: (p ^ q) = ((r ^ <*x*>) ^ s) and

         A6: ( len p) <= ( len (r ^ <*x*>));

         A7:

        now

          assume ( len p) = ( len (r ^ <*x*>));

          

          then

           A8: ( dom p) = ( Seg ( len (r ^ <*x*>))) by Def3

          .= ( dom (r ^ <*x*>)) by Def3;

          

           A9: for k st k in ( dom p) holds (p . k) = ((r ^ <*x*>) . k)

          proof

            let k;

            assume

             A10: k in ( dom p);

            

            hence (p . k) = (((r ^ <*x*>) ^ s) . k) by A5, Def7

            .= ((r ^ <*x*>) . k) by A8, A10, Def7;

          end;

          (p ^ {} ) = p by Th34

          .= (r ^ <*x*>) by A8, A9;

          hence thesis;

        end;

        now

          assume ( len p) <> ( len (r ^ <*x*>));

          then ( len p) <> (( len r) + ( len <*x*>)) by Th22;

          then

           A11: ( len p) <> (( len r) + 1) by Th39;

          ( len p) <= (( len r) + ( len <*x*>)) by A6, Th22;

          then

           A12: ( len p) <= (( len r) + 1) by Th39;

          (p ^ q) = (r ^ ( <*x*> ^ s)) by A5, Th32;

          then

          consider t be FinSequence such that

           A13: (p ^ t) = r by A4, A11, A12, NAT_1: 8;

          (p ^ (t ^ <*x*>)) = (r ^ <*x*>) by A13, Th32;

          hence thesis;

        end;

        hence thesis by A7;

      end;

      for r holds S[r] from IndSeq( A1, A3);

      hence thesis;

    end;

    registration

      cluster -> NAT -defined for FinSequence;

      coherence

      proof

        let f be FinSequence;

        thus ( dom f) c= NAT ;

      end;

    end

    definition

      let D be set;

      :: FINSEQ_1:def11

      func D * -> set means

      : Def11: x in it iff x is FinSequence of D;

      existence

      proof

        defpred P[ object] means $1 is FinSequence of D;

        consider X such that

         A1: for x be object holds x in X iff x in ( bool [: NAT , D:]) & P[x] from XBOOLE_0:sch 1;

        take X;

        let x;

        thus x in X implies x is FinSequence of D by A1;

        assume x is FinSequence of D;

        then

        reconsider p = x as FinSequence of D;

        p c= [: NAT , D:];

        hence thesis by A1;

      end;

      uniqueness

      proof

        let D1,D2 be set such that

         A2: x in D1 iff x is FinSequence of D and

         A3: x in D2 iff x is FinSequence of D;

        now

          let x be object;

          thus x in D1 implies x in D2

          proof

            assume x in D1;

            then x is FinSequence of D by A2;

            hence thesis by A3;

          end;

          assume x in D2;

          then x is FinSequence of D by A3;

          hence x in D1 by A2;

        end;

        hence thesis by TARSKI: 2;

      end;

    end

    registration

      let D be set;

      cluster (D * ) -> non empty;

      coherence

      proof

        set f = the FinSequence of D;

        f in (D * ) by Def11;

        hence thesis;

      end;

    end

    theorem :: FINSEQ_1:48

    ( rng p) = ( rng q) & p is one-to-one & q is one-to-one implies ( len p) = ( len q)

    proof

      defpred P[ FinSequence] means $1 is one-to-one implies for q st ( rng $1) = ( rng q) & q is one-to-one holds ( len $1) = ( len q);

      

       A1: P[ {} ] by RELAT_1: 41;

      now

        let p, x;

        assume

         A2: p is one-to-one implies for q st ( rng p) = ( rng q) & q is one-to-one holds ( len p) = ( len q);

        assume

         A3: (p ^ <*x*>) is one-to-one;

        let q;

        assume that

         A4: ( rng (p ^ <*x*>)) = ( rng q) and

         A5: q is one-to-one;

        

         A6: ( rng (p ^ <*x*>)) = (( rng p) \/ ( rng <*x*>)) by Th31

        .= (( rng p) \/ {x}) by Th38;

        x in {x} by TARSKI:def 1;

        then x in ( rng q) by A4, A6, XBOOLE_0:def 3;

        then

        consider y be object such that

         A7: y in ( dom q) and

         A8: x = (q . y) by FUNCT_1:def 3;

        

         A9: y in ( Seg ( len q)) by A7, Def3;

        reconsider y as Element of NAT by A7;

        

         A10: 1 <= y by A9, Th1;

        then

        consider k be Nat such that

         A11: (1 + k) = y by NAT_1: 10;

        

         A12: y <= ( len q) by A9, Th1;

        then

        consider n be Nat such that

         A13: (y + n) = ( len q) by NAT_1: 10;

        reconsider k, n as Element of NAT by ORDINAL1:def 12;

        reconsider q1 = (q | ( Seg k)) as FinSequence by Th15;

        defpred P[ Nat, object] means $2 = (q . (y + $1));

        

         A14: for j be Nat st j in ( Seg n) holds ex x st P[j, x];

        consider q2 be FinSequence such that

         A15: ( dom q2) = ( Seg n) and

         A16: for j be Nat st j in ( Seg n) holds P[j, (q2 . j)] from SeqEx( A14);

        

         A17: k <= y by A11, NAT_1: 12;

        then

         A18: k <= ( len q) by A12, XXREAL_0: 2;

        then

         A19: ( len q1) = k by Th17;

        (( len (q1 ^ <*x*>)) + ( len q2)) = ((( len q1) + ( len <*x*>)) + ( len q2)) by Th22

        .= ((k + 1) + ( len q2)) by A19, Th39

        .= ( len q) by A11, A13, A15, Def3;

        then

         A20: ( dom q) = ( Seg (( len (q1 ^ <*x*>)) + ( len q2))) by Def3;

        

         A21: ( rng (q1 ^ q2)) = (( rng q) \ {x})

        proof

          thus ( rng (q1 ^ q2)) c= (( rng q) \ {x})

          proof

            let z be object;

            assume z in ( rng (q1 ^ q2));

            then

             A22: z in (( rng q1) \/ ( rng q2)) by Th31;

             A23:

            now

              assume

               A24: z in ( rng q1);

              

               A25: ( rng q1) = (q .: ( Seg k)) & (q .: ( Seg k)) c= ( rng q) by RELAT_1: 111, RELAT_1: 115;

              consider y1 be object such that

               A26: y1 in ( dom q1) and

               A27: (q1 . y1) = z by A24, FUNCT_1:def 3;

              

               A28: (q1 . y1) = (q . y1) by A26, FUNCT_1: 47;

              

               A29: y1 in ( Seg ( len q1)) by A26, Def3;

              reconsider y1 as Element of NAT by A26;

              

               A30: y1 <= k by A19, A29, Th1;

              

               A31: k < y by A11, XREAL_1: 29;

              ( Seg k) c= ( Seg ( len q)) by A17, Th5, A12, XXREAL_0: 2;

              then ( dom q1) c= ( Seg ( len q)) by A18, Th17;

              then ( dom q1) c= ( dom q) by Def3;

              then x <> z by A5, A7, A8, A26, A27, A28, A30, A31;

              then not z in {x} by TARSKI:def 1;

              hence thesis by A24, A25, XBOOLE_0:def 5;

            end;

            now

              assume z in ( rng q2);

              then

              consider y1 be object such that

               A32: y1 in ( dom q2) and

               A33: (q2 . y1) = z by FUNCT_1:def 3;

              reconsider y1 as Element of NAT by A32;

              

               A34: (q2 . y1) = (q . (y + y1)) by A15, A16, A32;

              

               A35: 1 <= (y + y1) by A10, NAT_1: 12;

              y1 <= n by A15, A32, Th1;

              then (y + y1) <= ( len q) by A13, XREAL_1: 7;

              then (y + y1) in ( Seg ( len q)) by A35;

              then

               A36: (y + y1) in ( dom q) by Def3;

              then

               A37: z in ( rng q) by A33, A34, FUNCT_1:def 3;

              y1 <> 0 by A15, A32, Th1;

              then y <> (y + y1);

              then x <> z by A5, A7, A8, A33, A34, A36;

              then not z in {x} by TARSKI:def 1;

              hence thesis by A37, XBOOLE_0:def 5;

            end;

            hence thesis by A22, A23, XBOOLE_0:def 3;

          end;

          let z be object;

          assume

           A38: z in (( rng q) \ {x});

          then

          consider y1 be object such that

           A39: y1 in ( dom q) and

           A40: z = (q . y1) by FUNCT_1:def 3;

          

           A41: y1 in ( Seg ( len q)) by A39, Def3;

          reconsider y1 as Element of NAT by A39;

           not z in {x} by A38, XBOOLE_0:def 5;

          then

           A42: y <> y1 by A8, A40, TARSKI:def 1;

           A43:

          now

            assume

             A44: y < y1;

            then

            consider j be Nat such that

             A45: y1 = (y + j) by NAT_1: 10;

            

             A46: 1 <= j by A44, A45, NAT_1: 19;

            j <= n by A13, A41, A45, Th1, XREAL_1: 6;

            then

             A47: j in ( Seg n) by A46;

            then z = (q2 . j) by A16, A40, A45;

            hence z in ( rng q2) by A15, A47, FUNCT_1:def 3;

          end;

          now

            assume

             A48: y1 < y;

            

             A49: 1 <= y1 by A41, Th1;

            y1 <= k by A11, A48, NAT_1: 13;

            then y1 in ( Seg k) by A49;

            then

             A50: y1 in ( dom q1) by A18, Th17;

            then (q1 . y1) = z by A40, FUNCT_1: 47;

            hence z in ( rng q1) by A50, FUNCT_1:def 3;

          end;

          then z in (( rng q1) \/ ( rng q2)) by A42, A43, XBOOLE_0:def 3, XXREAL_0: 1;

          hence thesis by Th31;

        end;

        

         A51: p = ((p ^ <*x*>) | ( dom p)) by Th21;

        

         A52: ( rng p) = (( rng (p ^ <*x*>)) \ {x})

        proof

          thus ( rng p) c= (( rng (p ^ <*x*>)) \ {x})

          proof

            let z be object;

            assume

             A53: z in ( rng p);

            

             A54: ( rng p) c= ( rng (p ^ <*x*>)) by A51, RELAT_1: 70;

            consider y1 be object such that

             A55: y1 in ( dom p) and

             A56: (p . y1) = z by A53, FUNCT_1:def 3;

            

             A57: y1 in ( Seg ( len p)) by A55, Def3;

            reconsider y1 as Element of NAT by A55;

            

             A58: ((p ^ <*x*>) . (( len p) + 1)) = x by Th42;

            

             A59: ((p ^ <*x*>) . y1) = (p . y1) by A51, A55, FUNCT_1: 47;

            

             A60: y1 <= ( len p) by A57, Th1;

            

             A61: ( len p) < (( len p) + 1) by XREAL_1: 29;

            

             A62: 1 <= y1 by A57, Th1;

            y1 <= (( len p) + 1) by A60, A61, XXREAL_0: 2;

            then

             A63: y1 in ( Seg (( len p) + 1)) by A62;

            

             A64: (( len p) + 1) in ( Seg (( len p) + 1)) by Th3;

            

             A65: y1 in ( Seg (( len p) + ( len <*x*>))) by A63, Th40;

            

             A66: (( len p) + 1) in ( Seg (( len p) + ( len <*x*>))) by A64, Th40;

            

             A67: y1 in ( dom (p ^ <*x*>)) by A65, Def7;

            (( len p) + 1) in ( dom (p ^ <*x*>)) by A66, Def7;

            then x <> z by A3, A56, A58, A59, A60, A61, A67;

            then not z in {x} by TARSKI:def 1;

            hence thesis by A53, A54, XBOOLE_0:def 5;

          end;

          let z be object;

          assume

           A68: z in (( rng (p ^ <*x*>)) \ {x});

          then

           A69: z in ( rng (p ^ <*x*>));

          

           A70: not z in {x} by A68, XBOOLE_0:def 5;

          z in (( rng p) \/ ( rng <*x*>)) by A69, Th31;

          then z in ( rng p) or z in ( rng <*x*>) by XBOOLE_0:def 3;

          hence thesis by A70, Th38;

        end;

        

         A71: (q1 ^ q2) is one-to-one

        proof

          let y1,y2 be object;

          assume that

           A72: y1 in ( dom (q1 ^ q2)) & y2 in ( dom (q1 ^ q2)) and

           A73: ((q1 ^ q2) . y1) = ((q1 ^ q2) . y2);

          reconsider m1 = y1, m2 = y2 as Element of NAT by A72;

          

           A74: q1 is one-to-one by A5, FUNCT_1: 52;

           A75:

          now

            assume

             A76: m1 in ( dom q1) & m2 in ( dom q1);

            then ((q1 ^ q2) . m1) = (q1 . m1) & ((q1 ^ q2) . m2) = (q1 . m2) by Def7;

            hence thesis by A73, A74, A76;

          end;

           A77:

          now

            assume

             A78: m1 in ( dom q1);

            given j be Nat such that

             A79: j in ( dom q2) and

             A80: m2 = (( len q1) + j);

            

             A81: ((q1 ^ q2) . m2) = (q2 . j) by A79, A80, Def7;

            ((q1 ^ q2) . m1) = (q1 . m1) & (q1 . m1) = (q . m1) by A78, Def7, FUNCT_1: 47;

            then

             A82: (q . m1) = (q . (y + j)) by A15, A16, A73, A79, A81;

            1 <= j by A15, A79, Th1;

            then

             A83: 1 <= (y + j) by NAT_1: 12;

            j <= n by A15, A79, Th1;

            then (y + j) <= ( len q) by A13, XREAL_1: 7;

            then (y + j) in ( Seg ( len q)) by A83;

            then

             A84: (y + j) in ( dom q) by Def3;

            m1 in ( Seg k) by A18, A78, Th17;

            then

             A85: m1 <= k by Th1;

            k < y by A11, XREAL_1: 29;

            then

             A86: m1 < y by A85, XXREAL_0: 2;

            ( dom q1) c= ( dom q) & y <= (y + j) by NAT_1: 12, RELAT_1: 60;

            hence thesis by A5, A78, A82, A84, A86;

          end;

           A87:

          now

            assume

             A88: m2 in ( dom q1);

            given j be Nat such that

             A89: j in ( dom q2) and

             A90: m1 = (( len q1) + j);

            

             A91: ((q1 ^ q2) . m1) = (q2 . j) by A89, A90, Def7;

            ((q1 ^ q2) . m2) = (q1 . m2) & (q1 . m2) = (q . m2) by A88, Def7, FUNCT_1: 47;

            then

             A92: (q . m2) = (q . (y + j)) by A15, A16, A73, A89, A91;

            1 <= j by A15, A89, Th1;

            then

             A93: 1 <= (y + j) by NAT_1: 12;

            j <= n by A15, A89, Th1;

            then (y + j) <= ( len q) by A13, XREAL_1: 7;

            then (y + j) in ( Seg ( len q)) by A93;

            then

             A94: (y + j) in ( dom q) by Def3;

            m2 in ( Seg k) by A18, A88, Th17;

            then

             A95: m2 <= k by Th1;

            k < y by A11, XREAL_1: 29;

            then

             A96: m2 < y by A95, XXREAL_0: 2;

            ( dom q1) c= ( dom q) & y <= (y + j) by NAT_1: 12, RELAT_1: 60;

            hence thesis by A5, A88, A92, A94, A96;

          end;

          now

            given j1 be Nat such that

             A97: j1 in ( dom q2) and

             A98: m1 = (( len q1) + j1);

            given j2 be Nat such that

             A99: j2 in ( dom q2) and

             A100: m2 = (( len q1) + j2);

            

             A101: ((q1 ^ q2) . m1) = (q2 . j1) by A97, A98, Def7;

            

             A102: ((q1 ^ q2) . m2) = (q2 . j2) by A99, A100, Def7;

            

             A103: ((q1 ^ q2) . m1) = (q . (y + j1)) by A15, A16, A97, A101;

            

             A104: ((q1 ^ q2) . m2) = (q . (y + j2)) by A15, A16, A99, A102;

            

             A105: 1 <= j1 by A15, A97, Th1;

            

             A106: 1 <= j2 by A15, A99, Th1;

            

             A107: 1 <= (y + j1) by A105, NAT_1: 12;

            

             A108: 1 <= (y + j2) by A106, NAT_1: 12;

            

             A109: j1 <= n by A15, A97, Th1;

            

             A110: j2 <= n by A15, A99, Th1;

            

             A111: (y + j1) <= ( len q) by A13, A109, XREAL_1: 7;

            

             A112: (y + j2) <= ( len q) by A13, A110, XREAL_1: 7;

            

             A113: (y + j1) in ( Seg ( len q)) by A107, A111;

            

             A114: (y + j2) in ( Seg ( len q)) by A108, A112;

            

             A115: (y + j1) in ( dom q) by A113, Def3;

            (y + j2) in ( dom q) by A114, Def3;

            then (y + j1) = (y + j2) by A5, A73, A103, A104, A115;

            hence thesis by A98, A100;

          end;

          hence thesis by A72, A75, A77, A87, Th25;

        end;

         A116:

        now

          let j be Nat;

          assume

           A117: j in ( dom (q1 ^ <*x*>));

           A118:

          now

            assume

             A119: j in ( dom q1);

            then ((q1 ^ <*x*>) . j) = (q1 . j) by Def7;

            hence (q . j) = ((q1 ^ <*x*>) . j) by A119, FUNCT_1: 47;

          end;

          now

            given i be Nat such that

             A120: i in ( dom <*x*>) and

             A121: j = (( len q1) + i);

            i in {1} by A120, Th2, Th38;

            then i = 1 by TARSKI:def 1;

            hence (q . j) = ((q1 ^ <*x*>) . j) by A8, A11, A19, A121, Th42;

          end;

          hence (q . j) = ((q1 ^ <*x*>) . j) by A117, A118, Th25;

        end;

        now

          let j be Nat;

          assume j in ( dom q2);

          

          hence (q2 . j) = (q . ((( len q1) + 1) + j)) by A11, A15, A16, A19

          .= (q . ((( len q1) + ( len <*x*>)) + j)) by Th39

          .= (q . (( len (q1 ^ <*x*>)) + j)) by Th22;

        end;

        then ((q1 ^ <*x*>) ^ q2) = q by A20, A116, Def7;

        

        then

         A122: ( len q) = (( len (q1 ^ <*x*>)) + ( len q2)) by Th22

        .= ((( len <*x*>) + ( len q1)) + ( len q2)) by Th22

        .= ((1 + ( len q1)) + ( len q2)) by Th40

        .= (1 + (( len q1) + ( len q2)))

        .= (( len (q1 ^ q2)) + 1) by Th22;

        ( len (p ^ <*x*>)) = (( len p) + ( len <*x*>)) by Th22

        .= (( len p) + 1) by Th40;

        hence ( len (p ^ <*x*>)) = ( len q) by A2, A3, A4, A21, A51, A52, A71, A122, FUNCT_1: 52;

      end;

      then

       A123: for p, x st P[p] holds P[(p ^ <*x*>)];

      for p holds P[p] from IndSeq( A1, A123);

      hence thesis;

    end;

    theorem :: FINSEQ_1:49

     {} in (D * )

    proof

       {} = ( <*> D);

      hence thesis by Def11;

    end;

    scheme :: FINSEQ_1:sch4

    SepSeq { D() -> non empty set , P[ FinSequence] } :

ex X st for x holds x in X iff ex p st p in (D() * ) & P[p] & x = p;

      defpred R[ object] means ex p st P[p] & $1 = p;

      consider Y such that

       A1: for x be object holds x in Y iff x in (D() * ) & R[x] from XBOOLE_0:sch 1;

      take Y;

      x in Y iff ex p st p in (D() * ) & P[p] & x = p

      proof

        now

          assume x in Y;

          then x in (D() * ) & ex p st P[p] & x = p by A1;

          hence ex p st p in (D() * ) & P[p] & x = p;

        end;

        hence thesis by A1;

      end;

      hence thesis;

    end;

    definition

      let IT be Function;

      :: FINSEQ_1:def12

      attr IT is FinSubsequence-like means

      : Def12: ex k st ( dom IT) c= ( Seg k);

    end

    registration

      cluster FinSubsequence-like for Function;

      existence

      proof

        take {} , ( len {} );

        thus thesis;

      end;

    end

    definition

      mode FinSubsequence is FinSubsequence-like Function;

    end

    registration

      cluster FinSequence-like -> FinSubsequence-like for Function;

      coherence ;

      let p be FinSubsequence, X be set;

      cluster (p | X) -> FinSubsequence-like;

      coherence

      proof

        consider k such that

         A1: ( dom p) c= ( Seg k) by Def12;

        ( dom (p | X)) c= ( dom p) by RELAT_1: 60;

        hence thesis by A1, XBOOLE_1: 1;

      end;

      cluster (X |` p) -> FinSubsequence-like;

      coherence

      proof

        consider k such that

         A2: ( dom p) c= ( Seg k) by Def12;

        ( dom (X |` p)) c= ( dom p) by FUNCT_1: 56;

        hence thesis by A2, XBOOLE_1: 1;

      end;

    end

    registration

      cluster -> NAT -defined for FinSubsequence;

      coherence

      proof

        let f be FinSubsequence;

        ex n st ( dom f) c= ( Seg n) by Def12;

        hence ( dom f) c= NAT by XBOOLE_1: 1;

      end;

    end

    reserve p9 for FinSubsequence;

    definition

      let X;

      given k be Nat such that

       A1: X c= ( Seg k);

      :: FINSEQ_1:def13

      func Sgm X -> FinSequence of NAT means

      : Def13: ( rng it ) = X & for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len it ) & k1 = (it . l) & k2 = (it . m) holds k1 < k2;

      existence

      proof

        defpred P[ Nat] means for X st X c= ( Seg $1) holds ex p be FinSequence of NAT st ( rng p) = X & for l,m,k1,k2 be Nat st (1 <= l & l < m & m <= ( len p) & k1 = (p . l) & k2 = (p . m)) holds k1 < k2;

        

         A2: P[ 0 ]

        proof

          let X;

          assume

           A3: X c= ( Seg 0 );

          take ( <*> NAT );

          thus ( rng ( <*> NAT )) = X by A3;

          thus thesis;

        end;

        

         A4: for k be Nat st P[k] holds P[(k + 1)]

        proof

          let k be Nat such that

           A5: for X st X c= ( Seg k) holds ex p be FinSequence of NAT st ( rng p) = X & for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len p) & k1 = (p . l) & k2 = (p . m) holds k1 < k2;

          let X;

          assume

           A6: X c= ( Seg (k + 1));

          now

            assume not X c= ( Seg k);

            then

            consider x be object such that

             A7: x in X and

             A8: not x in ( Seg k);

            x in ( Seg (k + 1)) by A6, A7;

            then

            reconsider n = x as Element of NAT ;

            

             A9: n = (k + 1)

            proof

              assume

               A10: n <> (k + 1);

              

               A11: n <= (k + 1) by A6, A7, Th1;

              

               A12: 1 <= n by A6, A7, Th1;

              n <= k by A10, A11, NAT_1: 8;

              hence contradiction by A8, A12;

            end;

            set Y = (X \ {(k + 1)});

            

             A13: Y c= ( Seg k)

            proof

              let x be object;

              assume

               A14: x in Y;

              then

               A15: x in X;

              

               A16: not x in {(k + 1)} by A14, XBOOLE_0:def 5;

              

               A17: x in ( Seg (k + 1)) by A6, A15;

              

               A18: x <> (k + 1) by A16, TARSKI:def 1;

              reconsider m = x as Element of NAT by A17;

              

               A19: m <= (k + 1) by A6, A15, Th1;

              

               A20: 1 <= m by A6, A15, Th1;

              m <= k by A18, A19, NAT_1: 8;

              hence thesis by A20;

            end;

            then

            consider p be FinSequence of NAT such that

             A21: ( rng p) = Y and

             A22: for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len p) & k1 = (p . l) & k2 = (p . m) holds k1 < k2 by A5;

            consider q such that

             A23: q = (p ^ <*(k + 1)*>);

            reconsider q as FinSequence of NAT by A23;

            

             A24: ( rng q) = (( rng p) \/ ( rng <*(k + 1)*>)) by A23, Th31

            .= (Y \/ {(k + 1)}) by A21, Th38

            .= (X \/ {(k + 1)}) by XBOOLE_1: 39

            .= X by A7, A9, XBOOLE_1: 12, ZFMISC_1: 31;

            for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len q) & k1 = (q . l) & k2 = (q . m) holds k1 < k2

            proof

              let l,m,k1,k2 be Nat;

              assume that

               A25: 1 <= l and

               A26: l < m and

               A27: m <= ( len q) and

               A28: k1 = (q . l) and

               A29: k2 = (q . m);

              l < ( len (p ^ <*(k + 1)*>)) by A23, A26, A27, XXREAL_0: 2;

              then l < (( len p) + ( len <*(k + 1)*>)) by Th22;

              then l < (( len p) + 1) by Th39;

              then l <= ( len p) by NAT_1: 13;

              then l in ( Seg ( len p)) by A25;

              then

               A30: l in ( dom p) by Def3;

              

               A31: 1 <= m by A25, A26, XXREAL_0: 2;

               A32:

              now

                assume

                 A33: m = ( len q);

                k1 = (p . l) by A23, A28, A30, Def7;

                then k1 in Y by A21, A30, FUNCT_1:def 3;

                then

                 A34: k1 <= k by A13, Th1;

                (q . m) = ((p ^ <*(k + 1)*>) . (( len p) + ( len <*(k + 1)*>))) by A23, A33, Th22

                .= ((p ^ <*(k + 1)*>) . (( len p) + 1)) by Th39

                .= (k + 1) by Th42;

                hence thesis by A29, A34, NAT_1: 13;

              end;

              now

                assume m <> ( len q);

                then m < ( len (p ^ <*(k + 1)*>)) by A23, A27, XXREAL_0: 1;

                then m < (( len p) + ( len <*(k + 1)*>)) by Th22;

                then m < (( len p) + 1) by Th39;

                then

                 A35: m <= ( len p) by NAT_1: 13;

                then m in ( Seg ( len p)) by A31;

                then m in ( dom p) by Def3;

                then

                 A36: k2 = (p . m) by A23, A29, Def7;

                k1 = (p . l) by A23, A28, A30, Def7;

                hence thesis by A22, A25, A26, A35, A36;

              end;

              hence thesis by A32;

            end;

            hence thesis by A24;

          end;

          hence thesis by A5;

        end;

        for k be Nat holds P[k] from NAT_1:sch 2( A2, A4);

        hence thesis by A1;

      end;

      uniqueness

      proof

        let p,q be FinSequence of NAT such that

         A37: (( rng p) = X & for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len p) & k1 = (p . l) & k2 = (p . m) holds k1 < k2) & (( rng q) = X & for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len q) & k1 = (q . l) & k2 = (q . m) holds k1 < k2);

        defpred S[ FinSequence] means for X st ex k be Nat st X c= ( Seg k) holds ($1 is FinSequence of NAT & ( rng $1) = X & for l,m,k1,k2 be Nat st (1 <= l & l < m & m <= ( len $1) & k1 = ($1 . l) & k2 = ($1 . m)) holds k1 < k2) implies for q be FinSequence of NAT st ( rng q) = X & for l,m,k1,k2 be Nat st (1 <= l & l < m & m <= ( len q) & k1 = (q . l) & k2 = (q . m)) holds k1 < k2 holds q = $1;

        

         A38: S[ {} ];

        

         A39: for p, x st S[p] holds S[(p ^ <*x*>)]

        proof

          let p, x;

          assume

           A40: S[p];

          let X;

          given k be Nat such that

           A41: X c= ( Seg k);

          assume that

           A42: (p ^ <*x*>) is FinSequence of NAT and

           A43: ( rng (p ^ <*x*>)) = X and

           A44: for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len (p ^ <*x*>)) & k1 = ((p ^ <*x*>) . l) & k2 = ((p ^ <*x*>) . m) holds k1 < k2;

          let q be FinSequence of NAT ;

          assume that

           A45: ( rng q) = X and

           A46: for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len q) & k1 = (q . l) & k2 = (q . m) holds k1 < k2;

          1 in ( Seg 1);

          then

           A47: 1 in ( dom <*x*>) by Def8;

          

           A48: ex m st m = x & for l st l in X & l <> x holds l < m

          proof

             <*x*> is FinSequence of NAT by A42, Th36;

            then ( rng <*x*>) c= NAT by Def4;

            then {x} c= NAT by Th38;

            then

            reconsider m = x as Element of NAT by ZFMISC_1: 31;

            take m;

            thus m = x;

            thus for l st l in X & l <> x holds l < m

            proof

              let l;

              assume that

               A49: l in X and

               A50: l <> x;

              consider y be object such that

               A51: y in ( dom (p ^ <*x*>)) and

               A52: l = ((p ^ <*x*>) . y) by A43, A49, FUNCT_1:def 3;

              

               A53: y in ( Seg ( len (p ^ <*x*>))) by A51, Def3;

              reconsider k = y as Element of NAT by A51;

              k <= ( len (p ^ <*x*>)) by A53, Th1;

              then k <= (( len p) + ( len <*x*>)) by Th22;

              then

               A54: k <= (( len p) + 1) by Th39;

              

               A55: k <> (( len p) + 1)

              proof

                assume k = (( len p) + 1);

                

                then ((p ^ <*x*>) . k) = ( <*x*> . 1) by A47, Def7

                .= x by Def8;

                hence contradiction by A50, A52;

              end;

              

               A56: 1 <= k by A53, Th1;

              k < (( len p) + 1) by A54, A55, XXREAL_0: 1;

              then k < (( len p) + ( len <*x*>)) by Th39;

              then

               A57: k < ( len (p ^ <*x*>)) by Th22;

              m = ((p ^ <*x*>) . (( len p) + 1)) by Th42

              .= ((p ^ <*x*>) . (( len p) + ( len <*x*>))) by Th39

              .= ((p ^ <*x*>) . ( len (p ^ <*x*>))) by Th22;

              hence thesis by A44, A52, A56, A57;

            end;

          end;

          then

          reconsider m = x as Nat;

          ( len q) <> 0

          proof

            assume ( len q) = 0 ;

            then (p ^ <*x*>) = {} by A43, A45, Lm3, RELAT_1: 38;

            

            then 0 = ( len (p ^ <*x*>))

            .= (( len p) + ( len <*x*>)) by Th22

            .= (1 + ( len p)) by Th39;

            hence contradiction;

          end;

          then

          consider n be Nat such that

           A58: ( len q) = (n + 1) by NAT_1: 6;

          deffunc F( Nat) = (q . $1);

          ex q9 be FinSequence st ( len q9) = n & for m st m in ( dom q9) holds (q9 . m) = F(m) from SeqLambda;

          then

          consider q9 be FinSequence such that

           A59: ( len q9) = n and

           A60: for m st m in ( dom q9) holds (q9 . m) = (q . m);

          now

            let x be object;

            assume x in ( rng q9);

            then

            consider y be object such that

             A61: y in ( dom q9) and

             A62: x = (q9 . y) by FUNCT_1:def 3;

            

             A63: y in ( Seg ( len q9)) by A61, Def3;

            reconsider y as Element of NAT by A61;

            

             A64: y <= n by A59, A63, Th1;

            

             A65: n <= (n + 1) by NAT_1: 11;

            

             A66: 1 <= y by A63, Th1;

            y <= (n + 1) by A64, A65, XXREAL_0: 2;

            then y in ( Seg (n + 1)) by A66;

            then y in ( dom q) by A58, Def3;

            then

             A67: (q . y) in ( rng q) by FUNCT_1:def 3;

            ( rng q) c= NAT by Def4;

            then (q . y) in NAT by A67;

            hence x in NAT by A60, A61, A62;

          end;

          then

          reconsider f = q9 as FinSequence of NAT by Def4, TARSKI:def 3;

          

           A68: ( dom q) = ( Seg (n + 1)) by A58, Def3

          .= ( Seg (( len q9) + ( len <*x*>))) by A59, Th39;

          

           A69: for m st m in ( dom <*x*>) holds (q . (( len q9) + m)) = ( <*x*> . m)

          proof

            let m;

            assume m in ( dom <*x*>);

            then

             A70: m in {1} by Def8, Th2;

            then

             A71: m = 1 by TARSKI:def 1;

            (q . (( len q9) + m)) = x

            proof

              assume (q . (( len q9) + m)) <> x;

              then

               A72: (q . ( len q)) <> x by A58, A59, A70, TARSKI:def 1;

              consider d be Nat such that

               A73: d = x and

               A74: for l st l in X & l <> x holds l < d by A48;

              x in {x} by TARSKI:def 1;

              then x in ( rng <*x*>) by Th38;

              then x in (( rng p) \/ ( rng <*x*>)) by XBOOLE_0:def 3;

              then x in ( rng q) by A43, A45, Th31;

              then

              consider y be object such that

               A75: y in ( dom q) and

               A76: x = (q . y) by FUNCT_1:def 3;

              

               A77: y in ( Seg ( len q)) by A75, Def3;

              reconsider y as Element of NAT by A75;

              

               A78: 1 <= y by A77, Th1;

              

               A79: y <= ( len q) by A77, Th1;

              then

               A80: y < ( len q) by A72, A76, XXREAL_0: 1;

              1 <= ( len q) by A78, A79, XXREAL_0: 2;

              then ( len q) in ( Seg ( len q));

              then

               A81: ( len q) in ( dom q) by Def3;

              

               A82: (q . ( len q)) in X by A45, A81, FUNCT_1:def 3;

              reconsider k = (q . ( len q)) as Nat;

              k < d by A72, A74, A82;

              hence contradiction by A46, A73, A76, A78, A80;

            end;

            hence thesis by A71, Th40;

          end;

          then

           A83: (q9 ^ <*x*>) = q by A60, A68, Def7;

          

           A84: not x in ( rng p)

          proof

            assume x in ( rng p);

            then

            consider y be object such that

             A85: y in ( dom p) and

             A86: x = (p . y) by FUNCT_1:def 3;

            

             A87: y in ( Seg ( len p)) by A85, Def3;

            reconsider y as Element of NAT by A85;

            

             A88: y <= ( len p) by A87, Th1;

            

             A89: (( len p) + 1) = (( len p) + ( len <*x*>)) by Th39

            .= ( len (p ^ <*x*>)) by Th22;

            

             A90: 1 <= y by A87, Th1;

            

             A91: y < (( len p) + 1) by A88, NAT_1: 13;

            

             A92: m = ((p ^ <*x*>) . y) by A85, A86, Def7;

            m = ((p ^ <*x*>) . (( len p) + 1)) by Th42;

            hence contradiction by A44, A89, A90, A91, A92;

          end;

          

           A93: X = (( rng p) \/ ( rng <*x*>)) by A43, Th31

          .= (( rng p) \/ {x}) by Th39;

          

           A94: for z be object holds z in ((( rng p) \/ {x}) \ {x}) iff z in ( rng p)

          proof

            let z be object;

            thus z in ((( rng p) \/ {x}) \ {x}) implies z in ( rng p)

            proof

              assume

               A95: z in ((( rng p) \/ {x}) \ {x});

              then not z in {x} by XBOOLE_0:def 5;

              hence thesis by A95, XBOOLE_0:def 3;

            end;

            assume z in ( rng p);

            then ( not z in {x}) & z in (( rng p) \/ {x}) by A84, TARSKI:def 1, XBOOLE_0:def 3;

            hence thesis by XBOOLE_0:def 5;

          end;

          

           A96: for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len p) & k1 = (p . l) & k2 = (p . m) holds k1 < k2

          proof

            let l,m,k1,k2 be Nat;

            assume that

             A97: 1 <= l and

             A98: l < m and

             A99: m <= ( len p) and

             A100: k1 = (p . l) and

             A101: k2 = (p . m);

            l <= ( len p) by A98, A99, XXREAL_0: 2;

            then l in ( Seg ( len p)) by A97;

            then l in ( dom p) by Def3;

            then

             A102: k1 = ((p ^ <*x*>) . l) by A100, Def7;

            1 <= m by A97, A98, XXREAL_0: 2;

            then m in ( Seg ( len p)) by A99;

            then m in ( dom p) by Def3;

            then

             A103: k2 = ((p ^ <*x*>) . m) by A101, Def7;

            ( len p) <= (( len p) + 1) by NAT_1: 11;

            then m <= (( len p) + 1) by A99, XXREAL_0: 2;

            then m <= (( len p) + ( len <*x*>)) by Th39;

            then m <= ( len (p ^ <*x*>)) by Th22;

            hence thesis by A44, A97, A98, A102, A103;

          end;

          

           A104: p is FinSequence of NAT by A42, Th36;

          

           A105: ( rng p) = (X \ {x}) by A93, A94, TARSKI: 2;

          

           A106: not x in ( rng f)

          proof

            assume x in ( rng f);

            then

            consider y be object such that

             A107: y in ( dom f) and

             A108: x = (f . y) by FUNCT_1:def 3;

            

             A109: y in ( Seg ( len f)) by A107, Def3;

            reconsider y as Element of NAT by A107;

            

             A110: y <= ( len f) by A109, Th1;

            

             A111: (( len f) + 1) = (( len f) + ( len <*x*>)) by Th39

            .= ( len (f ^ <*x*>)) by Th22;

            

             A112: 1 <= y by A109, Th1;

            

             A113: y < (( len f) + 1) by A110, NAT_1: 13;

            

             A114: m = (q . y) by A60, A107, A108;

            m = (q . (( len f) + 1)) by A83, Th42;

            hence contradiction by A46, A83, A111, A112, A113, A114;

          end;

          

           A115: X = (( rng f) \/ ( rng <*x*>)) by A45, A83, Th31

          .= (( rng f) \/ {x}) by Th39;

          

           A116: for z be object holds z in ((( rng f) \/ {x}) \ {x}) iff z in ( rng f)

          proof

            let z be object;

            thus z in ((( rng f) \/ {x}) \ {x}) implies z in ( rng f)

            proof

              assume

               A117: z in ((( rng f) \/ {x}) \ {x});

              then not z in {x} by XBOOLE_0:def 5;

              hence thesis by A117, XBOOLE_0:def 3;

            end;

            assume z in ( rng f);

            then ( not z in {x}) & z in (( rng f) \/ {x}) by A106, TARSKI:def 1, XBOOLE_0:def 3;

            hence thesis by XBOOLE_0:def 5;

          end;

          

           A118: for l,m,k1,k2 be Nat st 1 <= l & l < m & m <= ( len f) & k1 = (f . l) & k2 = (f . m) holds k1 < k2

          proof

            let l,m,k1,k2 be Nat;

            assume that

             A119: 1 <= l and

             A120: l < m and

             A121: m <= ( len f) and

             A122: k1 = (f . l) and

             A123: k2 = (f . m);

            

             A124: m <= ( len q) by A58, A59, A121, NAT_1: 13;

            l <= n by A59, A120, A121, XXREAL_0: 2;

            then

             A125: l in ( Seg n) by A119;

            1 <= m by A119, A120, XXREAL_0: 2;

            then

             A126: m in ( Seg n) by A59, A121;

            

             A127: l in ( dom q9) by A59, A125, Def3;

            

             A128: m in ( dom q9) by A59, A126, Def3;

            

             A129: k1 = (q . l) by A60, A122, A127;

            k2 = (q . m) by A60, A123, A128;

            hence thesis by A46, A119, A120, A124, A129;

          end;

          ( rng f) = (X \ {x}) by A115, A116, TARSKI: 2;

          then q9 = p by A40, A41, A96, A104, A105, A118, XBOOLE_1: 1;

          hence thesis by A60, A68, A69, Def7;

        end;

        for p holds S[p] from IndSeq( A38, A39);

        hence thesis by A1, A37;

      end;

    end

    theorem :: FINSEQ_1:50

    

     Th50: ( rng ( Sgm ( dom p9))) = ( dom p9)

    proof

      ex k st ( dom p9) c= ( Seg k) by Def12;

      hence thesis by Def13;

    end;

    definition

      let p9;

      :: FINSEQ_1:def14

      func Seq p9 -> Function equals (p9 * ( Sgm ( dom p9)));

      coherence ;

    end

    registration

      let p9;

      cluster ( Seq p9) -> FinSequence-like;

      coherence

      proof

        ( rng ( Sgm ( dom p9))) = ( dom p9) by Th50;

        

        then ( dom (p9 * ( Sgm ( dom p9)))) = ( dom ( Sgm ( dom p9))) by RELAT_1: 27

        .= ( Seg ( len ( Sgm ( dom p9)))) by Def3;

        hence thesis;

      end;

    end

    theorem :: FINSEQ_1:51

    for X st ex k st X c= ( Seg k) holds ( Sgm X) = {} iff X = {}

    proof

      let X;

      given k such that

       A1: X c= ( Seg k);

      thus ( Sgm X) = {} implies X = {}

      proof

        assume ( Sgm X) = {} ;

        

        hence X = ( rng {} ) by A1, Def13

        .= {} ;

      end;

      assume X = {} ;

      then ( rng ( Sgm X)) = {} by A1, Def13;

      hence thesis;

    end;

    begin

    theorem :: FINSEQ_1:52

    D is finite iff ex p st D = ( rng p)

    proof

      thus D is finite implies ex p st D = ( rng p)

      proof

        given g be Function such that

         A1: ( rng g) = D and

         A2: ( dom g) in omega ;

        reconsider n = ( dom g) as Element of NAT by A2;

        defpred R[ object, object] means P[$2, $1];

        

         A3: for x be object st x in ( Seg n) holds ex y be object st R[x, y]

        proof

          let x be object;

          assume

           A4: x in ( Seg n);

          then

          reconsider x as Element of NAT ;

          x >= 1 by A4, Th1;

          then ex k be Nat st x = (1 + k) by NAT_1: 10;

          hence thesis;

        end;

        consider f such that

         A5: ( dom f) = ( Seg n) and

         A6: for x be object st x in ( Seg n) holds R[x, (f . x)] from CLASSES1:sch 1( A3);

        

         A7: ( rng f) = ( dom g)

        proof

          

           A8: n = { k where k be Nat : k < n } by AXIOMS: 4;

          thus ( rng f) c= ( dom g)

          proof

            let x be object;

            assume x in ( rng f);

            then

            consider y be object such that

             A9: y in ( dom f) and

             A10: x = (f . y) by FUNCT_1:def 3;

            consider k such that

             A11: x = k and

             A12: y = (k + 1) by A5, A6, A9, A10;

            (k + 1) <= n by A5, A9, A12, Th1;

            then k < n by NAT_1: 13;

            hence thesis by A8, A11;

          end;

          let x be object;

          assume x in ( dom g);

          then

          consider k be Nat such that

           A13: x = k and

           A14: k < n by A8;

          1 <= (k + 1) & (k + 1) <= n by A14, NAT_1: 11, NAT_1: 13;

          then

           A15: (k + 1) in ( Seg n);

          then ex k1 st (f . (k + 1)) = k1 & (k + 1) = (k1 + 1) by A6;

          hence thesis by A5, A13, A15, FUNCT_1:def 3;

        end;

        then ( dom (g * f)) = ( Seg n) by A5, RELAT_1: 27;

        then

        reconsider p = (g * f) as FinSequence by Def2;

        take p;

        thus thesis by A1, A7, RELAT_1: 28;

      end;

      given p such that

       A16: D = ( rng p);

      consider n such that

       A17: ( dom p) = ( Seg n) by Def2;

      

       A18: n = { k where k be Nat : k < n } by AXIOMS: 4;

      

       A19: for x be object st x in n holds ex y be object st P[x, y]

      proof

        let x be object;

        assume x in n;

        then ex k be Nat st x = k & k < n by A18;

        then

        reconsider k = x as Nat;

        take (k + 1);

        thus thesis;

      end;

      consider f such that

       A20: ( dom f) = n and

       A21: for x be object st x in n holds P[x, (f . x)] from CLASSES1:sch 1( A19);

      take (p * f);

      

       A22: ( rng f) = ( dom p)

      proof

        thus ( rng f) c= ( dom p)

        proof

          let x be object;

          assume x in ( rng f);

          then

          consider y be object such that

           A23: y in ( dom f) and

           A24: x = (f . y) by FUNCT_1:def 3;

          consider k such that

           A25: y = k and

           A26: x = (k + 1) by A20, A21, A23, A24;

          ex m be Nat st k = m & m < n by A18, A20, A23, A25;

          then 1 <= (k + 1) & (k + 1) <= n by NAT_1: 11, NAT_1: 13;

          hence thesis by A17, A26;

        end;

        let x be object;

        assume

         A27: x in ( dom p);

        then

        reconsider x as Element of NAT ;

        1 <= x by A17, A27, Th1;

        then

        consider m be Nat such that

         A28: x = (1 + m) by NAT_1: 10;

        x <= n by A17, A27, Th1;

        then m < n by A28, NAT_1: 13;

        then

         A29: m in n by A18;

        then ex k st m = k & (f . m) = (k + 1) by A21;

        hence thesis by A20, A28, A29, FUNCT_1:def 3;

      end;

      hence ( rng (p * f)) = D by A16, RELAT_1: 28;

      ( dom (p * f)) = ( dom f) by A22, RELAT_1: 27;

      hence thesis by A20, ORDINAL1:def 12;

    end;

    begin

    theorem :: FINSEQ_1:53

    (( Seg n),( Seg m)) are_equipotent implies n = m

    proof

      defpred P[ Nat] means ex n st (( Seg n),( Seg $1)) are_equipotent & n <> $1;

      assume (( Seg n),( Seg m)) are_equipotent & n <> m;

      then

       A1: ex m be Nat st P[m];

      consider m be Nat such that

       A2: P[m] and

       A3: for k be Nat st P[k] holds m <= k from NAT_1:sch 5( A1);

      consider n such that

       A4: (( Seg n),( Seg m)) are_equipotent and

       A5: n <> m by A2;

      

       A6: ex f st f is one-to-one & ( dom f) = ( Seg n) & ( rng f) = ( Seg m) by A4;

       A7:

      now

        assume m = 0 ;

        then ( Seg m) = {} ;

        then ( Seg m) = ( Seg n) by A6, RELAT_1: 42;

        hence contradiction by A5, Th6;

      end;

      then

      consider m1 be Nat such that

       A8: m = (m1 + 1) by NAT_1: 6;

       A9:

      now

        assume n = 0 ;

        then ( Seg n) = {} ;

        then ( Seg m) = ( Seg n) by A6, RELAT_1: 42;

        hence contradiction by A5, Th6;

      end;

      then

      consider n1 be Nat such that

       A10: n = (n1 + 1) by NAT_1: 6;

      

       A11: n in ( Seg n) by A9, Th3;

      

       A12: m in ( Seg m) by A7, Th3;

      

       A13: not (n1 + 1) <= n1 by NAT_1: 13;

      

       A14: not (m1 + 1) <= m1 by NAT_1: 13;

      

       A15: not n in ( Seg n1) by A10, A13, Th1;

      

       A16: not m in ( Seg m1) by A8, A14, Th1;

      

       A17: (( Seg n1) /\ {n}) c= {}

      proof

        let x be object;

        assume x in (( Seg n1) /\ {n});

        then x in ( Seg n1) & x in {n} by XBOOLE_0:def 4;

        hence thesis by A15, TARSKI:def 1;

      end;

      

       A18: (( Seg m1) /\ {m}) c= {}

      proof

        let x be object;

        assume x in (( Seg m1) /\ {m});

        then x in ( Seg m1) & x in {m} by XBOOLE_0:def 4;

        hence thesis by A16, TARSKI:def 1;

      end;

      

       A19: ( Seg n) = (( Seg n1) \/ {n}) by A10, Th9;

      

       A20: ( Seg m) = (( Seg m1) \/ {m}) by A8, Th9;

      

       A21: (( Seg n1) /\ {n}) = {} by A17;

      

       A22: (( Seg m1) /\ {m}) = {} by A18;

      

       A23: (( Seg n1) \ {n}) = ((( Seg n1) \/ {n}) \ {n}) & ( Seg n1) misses {n} by A21, XBOOLE_1: 40;

      

       A24: (( Seg m1) \ {m}) = ((( Seg m1) \/ {m}) \ {m}) & ( Seg m1) misses {m} by A22, XBOOLE_1: 40;

      

       A25: (( Seg n) \ {n}) = ( Seg n1) by A19, A23, XBOOLE_1: 83;

      (( Seg m) \ {m}) = ( Seg m1) by A20, A24, XBOOLE_1: 83;

      hence contradiction by A3, A4, A5, A8, A10, A11, A12, A14, A25, CARD_1: 34;

    end;

    theorem :: FINSEQ_1:54

    (( Seg n),n) are_equipotent by Lm1;

    theorem :: FINSEQ_1:55

    ( card ( Seg n)) = ( card n) by Lm1, CARD_1: 5;

    theorem :: FINSEQ_1:56

    

     Th56: X is finite implies ex n st (X,( Seg n)) are_equipotent

    proof

      assume X is finite;

      then

      reconsider n = ( card X) as Nat;

      

       A1: (X,n) are_equipotent by CARD_1:def 2;

      take n;

      (n,( Seg n)) are_equipotent by Lm1;

      hence thesis by A1, WELLORD2: 15;

    end;

    theorem :: FINSEQ_1:57

    for n be Nat holds ( card ( Seg n)) = n by Lm1, CARD_1:def 2;

    begin

    registration

      let x be object;

      cluster <*x*> -> non empty;

      coherence ;

    end

    registration

      cluster non empty for FinSequence;

      existence

      proof

        take <* 0 *>;

        thus thesis;

      end;

    end

    registration

      let f1 be FinSequence, f2 be non empty FinSequence;

      cluster (f1 ^ f2) -> non empty;

      coherence by Th35;

      cluster (f2 ^ f1) -> non empty;

      coherence by Th35;

    end

    registration

      let x,y be object;

      cluster <*x, y*> -> non empty;

      coherence ;

      let z be object;

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

      coherence ;

    end

    scheme :: FINSEQ_1:sch5

    SeqDEx { D() -> non empty set , A() -> Nat , P[ object, object] } :

ex p be FinSequence of D() st ( dom p) = ( Seg A()) & for k st k in ( Seg A()) holds P[k, (p . k)]

      provided

       A1: for k st k in ( Seg A()) holds ex x be Element of D() st P[k, x];

      

       A2: for y be object st y in ( Seg A()) holds ex x be object st x in D() & P[y, x]

      proof

        let y be object;

        assume

         A3: y in ( Seg A());

        then

        reconsider k = y as Element of NAT ;

        consider x be Element of D() such that

         A4: P[k, x] by A1, A3;

        take x;

        thus thesis by A4;

      end;

      consider f be Function such that

       A5: ( dom f) = ( Seg A()) and

       A6: ( rng f) c= D() and

       A7: for y be object st y in ( Seg A()) holds P[y, (f . y)] from FUNCT_1:sch 6( A2);

      reconsider f as FinSequence by A5, Def2;

      reconsider p = f as FinSequence of D() by A6, Def4;

      take p;

      thus thesis by A5, A7;

    end;

    reserve D for set,

p for FinSequence of D,

m for Nat;

    definition

      let m;

      let p be FinSequence;

      :: FINSEQ_1:def15

      func p | m -> FinSequence equals (p | ( Seg m));

      coherence by Th15;

    end

    definition

      let D, m, p;

      :: original: |

      redefine

      func p | m -> FinSequence of D ;

      coherence by Th18;

    end

    registration

      let f be FinSequence;

      cluster (f | 0 ) -> empty;

      coherence ;

    end

    theorem :: FINSEQ_1:58

    

     Th58: ( len q) <= i implies (q | i) = q

    proof

      assume ( len q) <= i;

      then ( Seg ( len q)) c= ( Seg i) by Th5;

      then ( dom q) c= ( Seg i) by Def3;

      hence thesis by RELAT_1: 68;

    end;

    theorem :: FINSEQ_1:59

    

     Th59: i <= ( len q) implies ( len (q | i)) = i

    proof

      assume i <= ( len q);

      then ( Seg i) c= ( Seg ( len q)) by Th5;

      then ( Seg i) c= ( dom q) by Def3;

      then i in NAT & ( Seg i) = ( dom (q | i)) by ORDINAL1:def 12, RELAT_1: 62;

      hence thesis by Def3;

    end;

    registration

      let f be non empty FinSequence;

      reduce ( len (f | 1)) to 1;

      reducibility

      proof

        1 <= ( len f) by NAT_1: 14;

        hence thesis by Th59;

      end;

      cluster (f | 1) -> 1 -element;

      coherence ;

    end

    registration

      let p be non empty FinSequence, n be non zero Nat;

      cluster (p | n) -> non empty;

      coherence

      proof

        per cases ;

          suppose n <= ( len p);

          then ((n + 1) - 1) <= (( len p) - 0 );

          then ( len (p | n)) = n by Th59;

          hence thesis;

        end;

          suppose ( len p) <= n;

          hence thesis by Th58;

        end;

      end;

    end

    theorem :: FINSEQ_1:60

    i in ( Seg n) implies (i + m) in ( Seg (n + m))

    proof

      assume

       A1: i in ( Seg n);

      then

       A2: 1 <= i by Th1;

      

       A3: i <= n by A1, Th1;

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

      then 1 <= (i + m) by A2, XXREAL_0: 2;

      hence thesis by A3, Th1, XREAL_1: 7;

    end;

    theorem :: FINSEQ_1:61

    i > 0 & (i + m) in ( Seg (n + m)) implies i in ( Seg n) & i in ( Seg (n + m))

    proof

      assume that

       A1: i > 0 and

       A2: (i + m) in ( Seg (n + m));

      1 = ( 0 + 1);

      then

       A3: 1 <= i by A1, NAT_1: 13;

      

       A4: (i + m) <= (n + m) by A2, Th1;

      i <= n by A2, Th1, XREAL_1: 6;

      hence i in ( Seg n) by A3;

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

      then i <= (n + m) by A4, XXREAL_0: 2;

      hence thesis by A3;

    end;

    definition

      let R be Relation;

      :: FINSEQ_1:def16

      func R [*] -> Relation means for x,y be object holds [x, y] in it iff x in ( field R) & y in ( field R) & ex p be FinSequence st ( len p) >= 1 & (p . 1) = x & (p . ( len p)) = y & for i be Nat st i >= 1 & i < ( len p) holds [(p . i), (p . (i + 1))] in R;

      existence

      proof

        defpred X[ object, object] means ex p be FinSequence st ( len p) >= 1 & (p . 1) = $1 & (p . ( len p)) = $2 & for i be Nat st i >= 1 & i < ( len p) holds [(p . i), (p . (i + 1))] in R;

        thus ex S be Relation st for x,y be object holds [x, y] in S iff x in ( field R) & y in ( field R) & X[x, y] from RELAT_1:sch 1;

      end;

      uniqueness

      proof

        let R1,R2 be Relation such that

         A1: for x,y be object holds [x, y] in R1 iff x in ( field R) & y in ( field R) & ex p be FinSequence st ( len p) >= 1 & (p . 1) = x & (p . ( len p)) = y & for i be Nat st i >= 1 & i < ( len p) holds [(p . i), (p . (i + 1))] in R and

         A2: for x,y be object holds [x, y] in R2 iff x in ( field R) & y in ( field R) & ex p be FinSequence st ( len p) >= 1 & (p . 1) = x & (p . ( len p)) = y & for i be Nat st i >= 1 & i < ( len p) holds [(p . i), (p . (i + 1))] in R;

        let x,y be object;

        thus [x, y] in R1 implies [x, y] in R2

        proof

          assume

           A3: [x, y] in R1;

          then

           A4: x in ( field R) & y in ( field R) by A1;

          ex p be FinSequence st ( len p) >= 1 & (p . 1) = x & (p . ( len p)) = y & for i be Nat st i >= 1 & i < ( len p) holds [(p . i), (p . (i + 1))] in R by A1, A3;

          hence thesis by A2, A4;

        end;

        assume

         A5: [x, y] in R2;

        then

         A6: x in ( field R) & y in ( field R) by A2;

        ex p be FinSequence st ( len p) >= 1 & (p . 1) = x & (p . ( len p)) = y & for i be Nat st i >= 1 & i < ( len p) holds [(p . i), (p . (i + 1))] in R by A2, A5;

        hence thesis by A1, A6;

      end;

    end

    theorem :: FINSEQ_1:62

    for D1,D2 be set st D1 c= D2 holds (D1 * ) c= (D2 * )

    proof

      let D1,D2 be set such that

       A1: D1 c= D2;

      let x be object;

      assume x in (D1 * );

      then

      reconsider p = x as FinSequence of D1 by Def11;

      ( rng p) c= D1 by Def4;

      then x is FinSequence of D2 by Def4, A1, XBOOLE_1: 1;

      hence thesis by Def11;

    end;

    registration

      let D be set;

      cluster (D * ) -> functional;

      coherence by Def11;

    end

    theorem :: FINSEQ_1:63

    for p,q be FinSequence st p c= q holds ( len p) <= ( len q)

    proof

      let p,q be FinSequence;

      assume p c= q;

      then ( Segm ( card p)) c= ( Segm ( card q)) by CARD_1: 11;

      hence thesis by NAT_1: 39;

    end;

    theorem :: FINSEQ_1:64

    for p,q be FinSequence, i be Nat st 1 <= i & i <= ( len p) holds ((p ^ q) . i) = (p . i)

    proof

      let p,q be FinSequence, i be Nat;

      assume

       A1: 1 <= i & i <= ( len p);

      i in NAT & ( Seg ( len p)) = ( dom p) by Def3, ORDINAL1:def 12;

      then i in ( dom p) by A1;

      hence thesis by Def7;

    end;

    theorem :: FINSEQ_1:65

    for p,q be FinSequence, i be Nat st 1 <= i & i <= ( len q) holds ((p ^ q) . (( len p) + i)) = (q . i)

    proof

      let p,q be FinSequence, i be Nat;

      assume 1 <= i & i <= ( len q);

      then (( len p) + 1) <= (( len p) + i) & (( len p) + i) <= (( len p) + ( len q)) by XREAL_1: 6;

      

      hence ((p ^ q) . (( len p) + i)) = (q . ((( len p) + i) - ( len p))) by Th23

      .= (q . i);

    end;

    scheme :: FINSEQ_1:sch6

    FinSegRng { n() -> Nat , F( set) -> set , P[ set] } :

{ F(i) where i be Nat : i <= n() & P[i] } is finite;

      set F = { F(i) where i be Nat : i <= n() & P[i] };

      deffunc G( Nat) = F(-);

      consider f be FinSequence such that

       A1: ( len f) = (n() + 1) and

       A2: for k st k in ( dom f) holds (f . k) = G(k) from SeqLambda;

      F c= ( rng f)

      proof

        let x be object;

        assume x in F;

        then

        consider j be Nat such that

         A3: x = F(j) and

         A4: j <= n() and P[j];

        1 <= (j + 1) & (j + 1) <= (n() + 1) by A4, NAT_1: 11, XREAL_1: 6;

        then (j + 1) in ( Seg (n() + 1));

        then

         A5: (j + 1) in ( dom f) by A1, Def3;

        

        then (f . (j + 1)) = F(-) by A2

        .= F(j);

        hence thesis by A3, A5, FUNCT_1:def 3;

      end;

      hence thesis;

    end;

    

     Lm5: x in ( Seg n) implies x = 1 or ... or x = n

    proof

      assume

       A1: x in ( Seg n);

      then

      reconsider k = x as Nat;

      1 <= k & k <= n by A1, Th1;

      hence thesis;

    end;

    theorem :: FINSEQ_1:66

    

     Th66: for x1,x2,x3,x4 be set, p be FinSequence st p = ((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) holds ( len p) = 4 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4

    proof

      let x1,x2,x3,x4 be set, p be FinSequence;

      assume

       A1: p = ((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>);

      set p13 = (( <*x1*> ^ <*x2*>) ^ <*x3*>);

      

       A2: p13 = <*x1, x2, x3*>;

      then

       A3: ( len p13) = 3 by Th45;

      

       A4: (p13 . 1) = x1 & (p13 . 2) = x2 by A2, Th45;

      

       A5: (p13 . 3) = x3 by A2, Th45;

      

      thus ( len p) = (( len p13) + ( len <*x4*>)) by A1, Th22

      .= (3 + 1) by A3, Th40

      .= 4;

      

       A6: ( dom p13) = ( Seg 3) by A3, Def3;

      1 in ( Seg 3) & ... & 3 in ( Seg 3);

      hence (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 by A1, A4, A5, Def7, A6;

      

      thus (p . 4) = (p . (( len p13) + 1)) by A3

      .= x4 by A1, Th42;

    end;

    theorem :: FINSEQ_1:67

    

     Th67: for x1,x2,x3,x4,x5 be set, p be FinSequence st p = (((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) holds ( len p) = 5 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5

    proof

      let x1,x2,x3,x4,x5 be set, p be FinSequence;

      assume

       A1: p = (((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>);

      set p14 = ((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>);

      

       A2: ( len p14) = 4 by Th66;

      

       A3: (p14 . 1) = x1 & (p14 . 2) = x2 by Th66;

      

       A4: (p14 . 3) = x3 & (p14 . 4) = x4 by Th66;

      

      thus ( len p) = (( len p14) + ( len <*x5*>)) by A1, Th22

      .= (4 + 1) by A2, Th40

      .= 5;

      

       A5: ( dom p14) = ( Seg 4) by A2, Def3;

      1 in ( Seg 4) & ... & 4 in ( Seg 4);

      hence (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 by A1, A3, A4, Def7, A5;

      

      thus (p . 5) = (p . (( len p14) + 1)) by A2

      .= x5 by A1, Th42;

    end;

    theorem :: FINSEQ_1:68

    

     Th68: for x1,x2,x3,x4,x5,x6 be set, p be FinSequence st p = ((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) holds ( len p) = 6 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6

    proof

      let x1,x2,x3,x4,x5,x6 be set, p be FinSequence;

      assume

       A1: p = ((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>);

      set p15 = (((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>);

      

       A2: ( len p15) = 5 by Th67;

      

       A3: (p15 . 1) = x1 & (p15 . 2) = x2 by Th67;

      

       A4: (p15 . 3) = x3 & (p15 . 4) = x4 by Th67;

      

       A5: (p15 . 5) = x5 by Th67;

      

      thus ( len p) = (( len p15) + ( len <*x6*>)) by A1, Th22

      .= (5 + 1) by A2, Th40

      .= 6;

      

       A6: ( dom p15) = ( Seg 5) by A2, Def3;

      1 in ( Seg 5) & ... & 5 in ( Seg 5);

      hence (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 by A1, A3, A4, A5, Def7, A6;

      

      thus (p . 6) = (p . (( len p15) + 1)) by A2

      .= x6 by A1, Th42;

    end;

    theorem :: FINSEQ_1:69

    

     Th69: for x1,x2,x3,x4,x5,x6,x7 be set, p be FinSequence st p = (((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) holds ( len p) = 7 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7

    proof

      let x1,x2,x3,x4,x5,x6,x7 be set, p be FinSequence;

      assume

       A1: p = (((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>);

      set p16 = ((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>);

      

       A2: ( len p16) = 6 by Th68;

      

       A3: (p16 . 1) = x1 & (p16 . 2) = x2 by Th68;

      

       A4: (p16 . 3) = x3 & (p16 . 4) = x4 by Th68;

      

       A5: (p16 . 5) = x5 & (p16 . 6) = x6 by Th68;

      

      thus ( len p) = (( len p16) + ( len <*x7*>)) by A1, Th22

      .= (6 + 1) by A2, Th40

      .= 7;

      

       A6: ( dom p16) = ( Seg 6) by A2, Def3;

      1 in ( Seg 6) & ... & 6 in ( Seg 6);

      hence (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 by A1, A3, A4, A5, Def7, A6;

      

      thus (p . 7) = (p . (( len p16) + 1)) by A2

      .= x7 by A1, Th42;

    end;

    theorem :: FINSEQ_1:70

    

     Th70: for x1,x2,x3,x4,x5,x6,x7,x8 be set, p be FinSequence st p = ((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>) holds ( len p) = 8 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7 & (p . 8) = x8

    proof

      let x1,x2,x3,x4,x5,x6,x7,x8 be set, p be FinSequence;

      thus p = ((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>) implies ( len p) = 8 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7 & (p . 8) = x8

      proof

        assume

         A1: p = ((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>);

        set p17 = (((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>);

        

         A2: ( len p17) = 7 by Th69;

        

         A3: (p17 . 1) = x1 & (p17 . 2) = x2 by Th69;

        

         A4: (p17 . 3) = x3 & (p17 . 4) = x4 by Th69;

        

         A5: (p17 . 5) = x5 & (p17 . 6) = x6 by Th69;

        

         A6: (p17 . 7) = x7 by Th69;

        

        thus ( len p) = (( len p17) + ( len <*x8*>)) by A1, Th22

        .= (7 + 1) by A2, Th40

        .= 8;

        

         A7: ( dom p17) = ( Seg 7) by A2, Def3;

        1 in ( Seg 7) & ... & 7 in ( Seg 7);

        hence (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7 by A1, A3, A4, A5, A6, Def7, A7;

        

        thus (p . 8) = (p . (( len p17) + 1)) by A2

        .= x8 by A1, Th42;

      end;

    end;

    theorem :: FINSEQ_1:71

    for x1,x2,x3,x4,x5,x6,x7,x8,x9 be set, p be FinSequence st p = (((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>) ^ <*x9*>) holds ( len p) = 9 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7 & (p . 8) = x8 & (p . 9) = x9

    proof

      let x1,x2,x3,x4,x5,x6,x7,x8,x9 be set, p be FinSequence;

      thus p = (((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>) ^ <*x9*>) implies ( len p) = 9 & (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7 & (p . 8) = x8 & (p . 9) = x9

      proof

        assume

         A1: p = (((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>) ^ <*x9*>);

        set p17 = ((((((( <*x1*> ^ <*x2*>) ^ <*x3*>) ^ <*x4*>) ^ <*x5*>) ^ <*x6*>) ^ <*x7*>) ^ <*x8*>);

        

         A2: ( len p17) = 8 by Th70;

        

         A3: (p17 . 1) = x1 & (p17 . 2) = x2 by Th70;

        

         A4: (p17 . 3) = x3 & (p17 . 4) = x4 by Th70;

        

         A5: (p17 . 5) = x5 & (p17 . 6) = x6 by Th70;

        

         A6: (p17 . 7) = x7 & (p17 . 8) = x8 by Th70;

        

        thus ( len p) = (( len p17) + ( len <*x9*>)) by A1, Th22

        .= (8 + 1) by A2, Th40

        .= 9;

        

         A7: ( dom p17) = ( Seg 8) by A2, Def3;

        1 in ( Seg 8) & ... & 8 in ( Seg 8);

        hence (p . 1) = x1 & (p . 2) = x2 & (p . 3) = x3 & (p . 4) = x4 & (p . 5) = x5 & (p . 6) = x6 & (p . 7) = x7 & (p . 8) = x8 by A1, A3, A4, A5, A6, Def7, A7;

        

        thus (p . 9) = (p . (( len p17) + 1)) by A2

        .= x9 by A1, Th42;

      end;

    end;

    theorem :: FINSEQ_1:72

    for p be FinSequence holds (p | ( Seg 0 )) = {} ;

    theorem :: FINSEQ_1:73

    for f,g be FinSequence holds (f | ( Seg 0 )) = (g | ( Seg 0 ));

    theorem :: FINSEQ_1:74

    for D be non empty set, x be Element of D holds <*x*> is FinSequence of D;

    theorem :: FINSEQ_1:75

    for D be set, p,q be FinSequence of D holds (p ^ q) is FinSequence of D;

    reserve a,b,c,d,e,f for object;

    theorem :: FINSEQ_1:76

     <*a*> = <*b*> implies a = b

    proof

      assume

       A1: <*a*> = <*b*>;

      

      thus a = ( <*a*> . 1) by Def8

      .= b by A1, Def8;

    end;

    theorem :: FINSEQ_1:77

     <*a, b*> = <*c, d*> implies a = c & b = d

    proof

      assume

       A1: <*a, b*> = <*c, d*>;

      

      thus a = ( <*a, b*> . 1) by Th44

      .= c by A1, Th44;

      

      thus b = ( <*a, b*> . 2) by Th44

      .= d by A1, Th44;

    end;

    theorem :: FINSEQ_1:78

     <*a, b, c*> = <*d, e, f*> implies a = d & b = e & c = f

    proof

      assume

       A1: <*a, b, c*> = <*d, e, f*>;

      

      thus a = ( <*a, b, c*> . 1) by Th45

      .= d by A1, Th45;

      

      thus b = ( <*a, b, c*> . 2) by Th45

      .= e by A1, Th45;

      

      thus c = ( <*a, b, c*> . 3) by Th45

      .= f by A1, Th45;

    end;

    registration

      cluster non empty non-empty for FinSequence;

      existence

      proof

        take <* { {} }*>;

        thus <* { {} }*> is non empty;

        assume {} in ( rng <* { {} }*>);

        then {} in { { {} }} by Th38;

        hence contradiction by TARSKI:def 1;

      end;

    end

    theorem :: FINSEQ_1:79

    

     Th79: for p,q be FinSequence st q = (p | ( Seg n)) holds ( len q) <= ( len p)

    proof

      let p,q be FinSequence;

      assume q = (p | ( Seg n));

      then

       A1: ( dom q) = (( dom p) /\ ( Seg n)) by RELAT_1: 61;

      ( Seg ( len q)) = ( dom q) & ( Seg ( len p)) = ( dom p) by Def3;

      hence thesis by Th5, A1, XBOOLE_1: 17;

    end;

    theorem :: FINSEQ_1:80

    for p,r be FinSequence st r = (p | ( Seg n)) holds ex q be FinSequence st p = (r ^ q)

    proof

      let p,r be FinSequence;

      assume

       A1: r = (p | ( Seg n));

      then

      consider m be Nat such that

       A2: ( len p) = (( len r) + m) by Th79, NAT_1: 10;

      deffunc U( Nat) = (p . (( len r) + $1));

      consider q be FinSequence such that

       A3: ( len q) = m & for k st k in ( dom q) holds (q . k) = U(k) from SeqLambda;

      take q;

      

       A4: ( len p) = ( len (r ^ q)) by A2, A3, Th22;

      now

        let k such that

         A5: 1 <= k and

         A6: k <= ( len p);

         A7:

        now

          assume k <= ( len r);

          then

           A8: k in ( Seg ( len r)) by A5;

          

           A9: ( dom r) = ( Seg ( len r)) by Def3;

          then ((r ^ q) . k) = (r . k) by A8, Def7;

          hence (p . k) = ((r ^ q) . k) by A1, A8, A9, FUNCT_1: 47;

        end;

        now

          assume

           A10: not k <= ( len r);

          then

          consider j be Nat such that

           A11: k = (( len r) + j) by NAT_1: 10;

          (k - ( len r)) = j by A11;

          then

           A12: ((r ^ q) . k) = (q . j) by A4, A6, A10, Th24;

          j <> 0 by A10, A11;

          then

           A13: ( 0 + 1) <= j by NAT_1: 13;

          j <= ( len q) by A2, A3, A6, A11, XREAL_1: 6;

          then j in ( Seg m) by A3, A13;

          then j in ( dom q) by A3, Def3;

          hence (p . k) = ((r ^ q) . k) by A3, A11, A12;

        end;

        hence (p . k) = ((r ^ q) . k) by A7;

      end;

      hence thesis by A4, Th14;

    end;

    registration

      let D be non empty set;

      cluster non empty for FinSequence of D;

      existence

      proof

        set x = the Element of D;

        take <*x*>;

        thus thesis;

      end;

    end

    registration

      let D be non empty set;

      cluster non emptyD -valued for FinSequence;

      existence

      proof

        set x = the Element of D;

        take <*x*>;

        thus thesis;

      end;

    end

    definition

      let p,q be FinSequence;

      :: original: =

      redefine

      :: FINSEQ_1:def17

      pred p = q means ( len p) = ( len q) & for k st 1 <= k & k <= ( len p) holds (p . k) = (q . k);

      compatibility by Th14;

    end

    theorem :: FINSEQ_1:81

    for x,y,z be object holds 1 in ( dom <*x, y, z*>) & 2 in ( dom <*x, y, z*>) & 3 in ( dom <*x, y, z*>)

    proof

      let x,y,z be object;

      ( len <*x, y, z*>) = 3 by Th45;

      then ( dom <*x, y, z*>) = ( Seg 3) by Def3;

      hence thesis;

    end;

    theorem :: FINSEQ_1:82

    for p be FinSequence, n,m be Nat st m <= n holds ((p | n) | m) = (p | m) by Th5, RELAT_1: 74;

    reserve m for Nat;

    theorem :: FINSEQ_1:83

    ( Seg n) = ((n + 1) \ { 0 })

    proof

      

       A1: (n + 1) = { m : m < (n + 1) } by AXIOMS: 4;

      thus ( Seg n) c= ((n + 1) \ { 0 })

      proof

        let x be object;

        assume x in ( Seg n);

        then

        consider k be Nat such that

         A2: x = k and

         A3: 1 <= k and

         A4: k <= n;

        k < (n + 1) by A4, NAT_1: 13;

        then

         A5: x in (n + 1) by A1, A2;

         not x in { 0 } by A2, A3, TARSKI:def 1;

        hence thesis by A5, XBOOLE_0:def 5;

      end;

      let x be object;

      assume

       A6: x in ((n + 1) \ { 0 });

      then

       A7: x in (n + 1);

      

       A8: not x in { 0 } by A6, XBOOLE_0:def 5;

      consider m such that

       A9: x = m and

       A10: m < (n + 1) by A1, A7;

      

       A11: x <> 0 by A8, TARSKI:def 1;

      ( 0 + 1) = 1;

      then

       A12: 1 <= m by A9, A11, NAT_1: 13;

      m <= n by A10, NAT_1: 13;

      hence thesis by A9, A12;

    end;

    registration

      let n be natural Number;

      cluster n -element for FinSequence;

      existence

      proof

        

         A1: n is Nat by TARSKI: 1;

        set p = (( Seg n) --> {} );

        ( dom p) = ( Seg n) by FUNCOP_1: 13;

        then

        reconsider p as FinSequence by A1, Def2;

        take p;

        ( Seg ( len p)) = ( dom p) by Def3;

        hence ( len p) = n by Th6, FUNCOP_1: 13;

      end;

    end

    registration

      let x be object;

      cluster <*x*> -> 1 -element;

      coherence ;

      let y be object;

      cluster <*x, y*> -> 2 -element;

      coherence by Th44;

      let z be object;

      cluster <*x, y, z*> -> 3 -element;

      coherence by Th45;

    end

    definition

      let X be set;

      :: FINSEQ_1:def18

      attr X is FinSequence-membered means

      : Def18: x in X implies x is FinSequence;

    end

    registration

      cluster empty -> FinSequence-membered for set;

      coherence ;

    end

    registration

      cluster non empty FinSequence-membered for set;

      existence

      proof

        take X = { the FinSequence};

        thus X is non empty;

        let x;

        thus thesis by TARSKI:def 1;

      end;

    end

    registration

      let X be set;

      cluster (X * ) -> FinSequence-membered;

      coherence by Def11;

    end

    theorem :: FINSEQ_1:84

    for f be Function st f in (D * ) & x in ( dom f) holds (f . x) in D

    proof

      let f be Function such that

       A1: f in (D * ) and

       A2: x in ( dom f);

      f is FinSequence of D by A1, Def11;

      then

       A3: ( rng f) c= D by Def4;

      (f . x) in ( rng f) by A2, FUNCT_1: 3;

      hence (f . x) in D by A3;

    end;

    registration

      cluster FinSequence-membered -> functional for set;

      coherence ;

    end

    theorem :: FINSEQ_1:85

    for X be FinSequence-membered set holds ex Y be non empty set st X c= (Y * )

    proof

      let X be FinSequence-membered set;

      set Z = { ( rng f) where f be Element of X : f in X };

      take Y = ( succ ( union Z));

      let x be object;

      assume

       A1: x in X;

      then

      reconsider x as FinSequence by Def18;

      ( rng x) in { ( rng f) where f be Element of X : f in X } by A1;

      then ( rng x) c= Y by ORDINAL3: 1, SETFAM_1: 41;

      then x is FinSequence of Y by Def4;

      hence thesis by Def11;

    end;

    registration

      let X be FinSequence-membered set;

      cluster -> FinSequence-like for Element of X;

      coherence

      proof

        let e be Element of X;

        X is empty or X is non empty;

        hence thesis by Def18, SUBSET_1:def 1;

      end;

    end

    registration

      let X be FinSequence-membered set;

      cluster -> FinSequence-membered for Subset of X;

      coherence ;

    end

    theorem :: FINSEQ_1:86

    for p,q be FinSequence st q = (p | ( Seg n)) holds ( len q) <= n

    proof

      let p,q be FinSequence;

      assume q = (p | ( Seg n));

      then

       A1: ( dom q) = (( dom p) /\ ( Seg n)) by RELAT_1: 61;

      ( Seg ( len q)) = ( dom q) by Def3;

      hence thesis by Th5, A1, XBOOLE_1: 17;

    end;

    theorem :: FINSEQ_1:87

    for p,q be FinSequence st p = (p ^ q) or p = (q ^ p) holds q = {}

    proof

      let p,q be FinSequence such that

       A1: p = (p ^ q) or p = (q ^ p);

      ( len (p ^ q)) = (( len p) + ( len q)) & ( len (q ^ p)) = (( len q) + ( len p)) by Th22;

      hence thesis by A1;

    end;

    theorem :: FINSEQ_1:88

    for p,q be FinSequence st (p ^ q) = <*x*> holds p = <*x*> & q = {} or p = {} & q = <*x*>

    proof

      let p,q be FinSequence;

      assume

       A1: (p ^ q) = <*x*>;

      

      then

       A2: 1 = ( len (p ^ q)) by Th40

      .= (( len p) + ( len q)) by Th22;

       A3:

      now

        assume ( len p) = 0 ;

        hence p = {} ;

        hence q = <*x*> by A1, Th34;

      end;

      now

        assume ( len p) <> 0 ;

        then

         A4: ( 0 + 1) <= ( len p) by NAT_1: 13;

        ( len p) <= 1 by A2, NAT_1: 11;

        then ( len p) = 1 by A4, XXREAL_0: 1;

        hence q = {} by A2;

        hence p = <*x*> by A1, Th34;

      end;

      hence thesis by A3;

    end;

    theorem :: FINSEQ_1:89

    

     Th88: for f be n -element FinSequence holds ( dom f) = ( Seg n)

    proof

      let f be n -element FinSequence;

      ( len f) = n by CARD_1:def 7;

      hence ( dom f) = ( Seg n) by Def3;

    end;

    registration

      let n,m be natural Number;

      let f be n -element FinSequence, g be m -element FinSequence;

      cluster (f ^ g) -> (n + m) -element;

      coherence

      proof

        ( len f) = n & ( len g) = m by CARD_1:def 7;

        hence ( len (f ^ g)) = (n + m) by Th22;

      end;

    end

    registration

      cluster increasing -> one-to-one for real-valued FinSequence;

      coherence

      proof

        let f be real-valued FinSequence;

        assume

         A1: f is increasing;

        let x,y be object;

        assume that

         A2: x in ( dom f) & y in ( dom f) and

         A3: (f . x) = (f . y);

        reconsider nx = x, ny = y as Element of NAT by A2;

        nx <= ny & nx >= ny by A1, A2, A3, VALUED_0:def 13;

        hence thesis by XXREAL_0: 1;

      end;

    end

    theorem :: FINSEQ_1:90

    for x,y be object st x in ( dom <*y*>) holds x = 1

    proof

      let x,y be object;

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

      then x in ( Seg 1) by Th38;

      hence thesis by Th2, TARSKI:def 1;

    end;

    registration

      let X;

      cluster X -valued for FinSequence;

      existence

      proof

        take ( <*> X);

        thus thesis;

      end;

    end

    registration

      let D be FinSequence-membered set;

      let f be D -valued Function;

      let x be object;

      cluster (f . x) -> FinSequence-like;

      coherence

      proof

        per cases ;

          suppose x in ( dom f);

          then

           A1: (f . x) in ( rng f) by FUNCT_1:def 3;

          ( rng f) c= D by RELAT_1:def 19;

          hence thesis by A1;

        end;

          suppose not x in ( dom f);

          hence thesis by FUNCT_1:def 2;

        end;

      end;

    end

    theorem :: FINSEQ_1:91

    x in ( Seg n) implies x = 1 or ... or x = n by Lm5;

    theorem :: FINSEQ_1:92

    ( dom <*x, y*>) = {1, 2}

    proof

      

      thus ( dom <*x, y*>) = ( Seg ( len <*x, y*>)) by Def3

      .= {1, 2} by Th2, Th44;

    end;

    begin

    registration

      let A be finite set;

      cluster onto one-to-one for FinSequence of A;

      existence

      proof

        consider n such that

         A1: (A,( Seg n)) are_equipotent by Th56;

        consider f be Function such that

         A2: f is one-to-one and

         A3: ( dom f) = ( Seg n) and

         A4: ( rng f) = A by A1, WELLORD2:def 4;

        f is FinSequence by A3, Def2;

        then

        reconsider f as FinSequence of A by A4, Def4;

        take f;

        thus thesis by A2, A4, FUNCT_2:def 3;

      end;

    end

    definition

      let A be finite set;

      :: FINSEQ_1:def19

      func canFS A -> FinSequence equals the one-to-one onto FinSequence of A;

      coherence ;

    end

    definition

      let A be finite set;

      :: original: canFS

      redefine

      func canFS A -> FinSequence of A ;

      coherence ;

    end

    registration

      let A be finite set;

      cluster ( canFS A) -> one-to-one onto;

      coherence ;

    end

    theorem :: FINSEQ_1:93

    

     Th92: for A be finite set holds ( len ( canFS A)) = ( card A)

    proof

      let A be finite set;

      

      thus ( card ( canFS A)) = ( card ( dom ( canFS A))) by CARD_1: 62

      .= ( card ( rng ( canFS A))) by CARD_1: 70

      .= ( card A) by FUNCT_2:def 3;

    end;

    registration

      let A be finite non empty set;

      cluster ( canFS A) -> non empty;

      coherence

      proof

        ( len ( canFS A)) = ( card A) by Th92;

        hence thesis;

      end;

    end

    theorem :: FINSEQ_1:94

    for a be object holds ( canFS {a}) = <*a*>

    proof

      let a be object;

      

       A1: ( rng ( canFS {a})) = {a} by FUNCT_2:def 3;

      ( len ( canFS {a})) = ( card {a}) by Th92

      .= 1 by CARD_1: 30;

      hence thesis by A1, Th39;

    end;

    theorem :: FINSEQ_1:95

    for A be finite set holds (( canFS A) " ) is Function of A, ( Seg ( card A))

    proof

      let A be finite set;

      ( len ( canFS A)) = ( card A) by Th92;

      then ( dom ( canFS A)) = ( Seg ( card A)) by Def3;

      then

       A1: ( rng (( canFS A) " )) = ( Seg ( card A)) by FUNCT_1: 33;

      ( rng ( canFS A)) = A by FUNCT_2:def 3;

      then ( dom (( canFS A) " )) = A by FUNCT_1: 33;

      hence thesis by A1, FUNCT_2: 1;

    end;

    theorem :: FINSEQ_1:96

    i > 0 implies { [i, x]} is FinSubsequence

    proof

      assume

       A1: i > 0 ;

      

       A2: ( dom { [i, x]}) = {i} by RELAT_1: 9;

       {i} c= ( Seg i)

      proof

        let x be object;

        assume x in {i};

        then x = i by TARSKI:def 1;

        hence thesis by A1, Th3;

      end;

      hence thesis by A2, Def12;

    end;

    

     Lm6: for p be FinSubsequence st ( Seq p) = {} holds p = {}

    proof

      let p be FinSubsequence such that

       A1: ( Seq p) = {} ;

      ( rng ( Sgm ( dom p))) = ( dom p) by Th50;

      then ( dom {} ) = ( dom ( Sgm ( dom p))) by A1, RELAT_1: 27;

      then ( Sgm ( dom p)) = {} ;

      then ( dom p) = ( rng {} ) by Th50;

      hence thesis;

    end;

    theorem :: FINSEQ_1:97

    for q be FinSubsequence holds q = {} iff ( Seq q) = {} by Lm6;

    registration

      cluster -> finite for FinSubsequence;

      coherence

      proof

        let q be FinSubsequence;

        ex n be Nat st ( dom q) c= ( Seg n) by Def12;

        hence thesis by FINSET_1: 10;

      end;

    end

    reserve x1,x2,y1,y2 for set;

    theorem :: FINSEQ_1:98

     { [x1, y1], [x2, y2]} is FinSequence implies x1 = 1 & x2 = 1 & y1 = y2 or x1 = 1 & x2 = 2 or x1 = 2 & x2 = 1

    proof

      assume { [x1, y1], [x2, y2]} is FinSequence;

      then

      reconsider p = { [x1, y1], [x2, y2]} as FinSequence;

      

       A1: ( dom p) = {x1, x2} by RELAT_1: 10;

      then

       A2: x1 in ( dom p) by TARSKI:def 2;

      

       A3: x2 in ( dom p) by A1, TARSKI:def 2;

      

       A4: [x1, y1] in p by TARSKI:def 2;

      

       A5: [x2, y2] in p by TARSKI:def 2;

      

       A6: (p . x1) = y1 by A4, FUNCT_1: 1;

      

       A7: (p . x2) = y2 by A5, FUNCT_1: 1;

      

       A8: ( dom p) = ( Seg ( len p)) by Def3;

      

       A9: ( len p) <= (1 + 1) by CARD_2: 50;

      

       A10: ( len p) >= ( 0 qua Nat + 1) by NAT_1: 13;

       A11:

      now

        assume ( len p) = 1;

        hence x1 = 1 & x2 = 1 by A2, A3, A8, Th2, TARSKI:def 1;

        hence y1 = y2 by A5, A6, FUNCT_1: 1;

      end;

      now

        assume

         A12: ( len p) = 2;

        

         A13: x1 = x2 implies p = { [x1, y1]} by A6, A7, ENUMSET1: 29;

        x1 = 1 & x2 = 2 or x1 = 2 & x2 = 1 or x1 = 1 & x2 = 1 or x1 = 2 & x2 = 2 by A2, A3, A8, A12, Th2, TARSKI:def 2;

        hence x1 = 1 & x2 = 2 or x1 = 2 & x2 = 1 by A12, A13, CARD_1: 30;

      end;

      hence thesis by A9, A10, A11, NAT_1: 9;

    end;

    theorem :: FINSEQ_1:99

     <*x1, x2*> = { [1, x1], [2, x2]}

    proof

      reconsider f = { [1, x1], [2, x2]} as Function by GRFUNC_1: 8;

      

       A1: ( dom f) = {1, 2} by RELAT_1: 10;

      then

       A2: ( dom <*x1, x2*>) = ( dom f) by Th2, Th88;

      now

        let x be object;

        assume

         A3: x in {1, 2};

        per cases by A3, TARSKI:def 2;

          suppose

           A4: x = 1;

          then

           A5: ( <*x1, x2*> . x) = x1 by Th44;

           [x, x1] in f by A4, TARSKI:def 2;

          hence (f . x) = ( <*x1, x2*> . x) by A5, FUNCT_1: 1;

        end;

          suppose

           A6: x = 2;

          then

           A7: ( <*x1, x2*> . x) = x2 by Th44;

           [x, x2] in f by A6, TARSKI:def 2;

          hence (f . x) = ( <*x1, x2*> . x) by A7, FUNCT_1: 1;

        end;

      end;

      hence thesis by A1, A2, FUNCT_1: 2;

    end;

    reserve j for Nat;

    theorem :: FINSEQ_1:100

    for q be FinSubsequence holds ( dom ( Seq q)) = ( dom ( Sgm ( dom q)))

    proof

      let q be FinSubsequence;

      ( rng ( Sgm ( dom q))) = ( dom q) by Th50;

      hence thesis by RELAT_1: 27;

    end;

    theorem :: FINSEQ_1:101

    for q be FinSubsequence holds ( rng q) = ( rng ( Seq q))

    proof

      let q be FinSubsequence;

      ( dom q) = ( rng ( Sgm ( dom q))) by Th50;

      hence thesis by RELAT_1: 28;

    end;

    registration

      cluster one-to-one for FinSequence;

      existence

      proof

        take {} ;

        thus thesis;

      end;

    end

    registration

      let D;

      cluster one-to-one for FinSequence of D;

      existence

      proof

        take ( <*> D);

        thus thesis;

      end;

    end

    registration

      cluster non empty natural-valued for FinSequence;

      existence

      proof

         <* 0 *> is natural-valued & <* 0 *> is non empty;

        hence thesis;

      end;

    end