aofa_000.miz



    begin

    notation

      let x be object, y be set;

      antonym x nin y for x in y;

    end

    theorem :: AOFA_000:1

    

     Th1: for f,g,h be Function holds for A be set st A c= ( dom f) & A c= ( dom g) & ( rng h) c= A & for x be set st x in A holds (f . x) = (g . x) holds (f * h) = (g * h)

    proof

      let f,g,h be Function;

      let A be set such that

       A1: A c= ( dom f) and

       A2: A c= ( dom g) and

       A3: ( rng h) c= A and

       A4: for x be set st x in A holds (f . x) = (g . x);

      

       A5: ( dom (f * h)) = ( dom h) by A1, A3, RELAT_1: 27, XBOOLE_1: 1;

      

       A6: ( dom (g * h)) = ( dom h) by A2, A3, RELAT_1: 27, XBOOLE_1: 1;

      now

        let x be object;

        assume

         A7: x in ( dom h);

        then

         A8: ((f * h) . x) = (f . (h . x)) by FUNCT_1: 13;

        

         A9: ((g * h) . x) = (g . (h . x)) by A7, FUNCT_1: 13;

        (h . x) in ( rng h) by A7, FUNCT_1: 3;

        hence ((f * h) . x) = ((g * h) . x) by A3, A4, A8, A9;

      end;

      hence thesis by A5, A6;

    end;

    registration

      let x,y be non empty set;

      cluster <*x, y*> -> non-empty;

      coherence

      proof

        assume {} in ( rng <*x, y*>);

        then {} in {x, y} by FINSEQ_2: 127;

        hence thesis by TARSKI:def 2;

      end;

    end

    registration

      let p,q be non-empty FinSequence;

      cluster (p ^ q) -> non-empty;

      coherence

      proof

        assume {} in ( rng (p ^ q));

        then {} in (( rng p) \/ ( rng q)) by FINSEQ_1: 31;

        then {} in ( rng p) or {} in ( rng q) by XBOOLE_0:def 3;

        hence thesis;

      end;

    end

    definition

      let f be homogeneous Function;

      let x be set;

      :: AOFA_000:def1

      pred x is_a_unity_wrt f means for y,z be set st <*y, z*> in ( dom f) or <*z, y*> in ( dom f) holds <*x, y*> in ( dom f) & (f . <*x, y*>) = y & <*y, x*> in ( dom f) & (f . <*y, x*>) = y;

    end

    definition

      let f be homogeneous Function;

      :: AOFA_000:def2

      attr f is associative means

      : Def2: for x,y,z be set st <*x, y*> in ( dom f) & <*y, z*> in ( dom f) & <*(f . <*x, y*>), z*> in ( dom f) & <*x, (f . <*y, z*>)*> in ( dom f) holds (f . <*(f . <*x, y*>), z*>) = (f . <*x, (f . <*y, z*>)*>);

      :: AOFA_000:def3

      attr f is unital means

      : Def3: ex x be set st x is_a_unity_wrt f;

    end

    definition

      let X be set;

      let Y be non empty set;

      let Z be FinSequenceSet of X;

      let y be Element of Y;

      :: original: -->

      redefine

      func Z --> y -> PartFunc of (X * ), Y ;

      coherence

      proof

        

         A1: ( dom (Z --> y)) = Z by FUNCOP_1: 13;

        ( rng (Z --> y)) c= {y} by FUNCOP_1: 13;

        hence thesis by A1, FINSEQ_2: 90, RELSET_1: 4;

      end;

    end

    registration

      let X be non empty set;

      let x be Element of X;

      let n be Nat;

      cluster ((n -tuples_on X) --> x) -> non empty quasi_total homogeneous;

      coherence

      proof

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

        set f = ((n -tuples_on X) --> x);

        

         A1: ( dom f) = (m -tuples_on X) by FUNCOP_1: 13;

        then

        reconsider f as non empty homogeneous PartFunc of (X * ), X by COMPUT_1: 16;

        ( arity f) = m by A1, COMPUT_1: 24;

        hence thesis by A1, COMPUT_1: 22;

      end;

    end

    theorem :: AOFA_000:2

    

     Th2: for X be non empty set, x be Element of X holds for n be Nat holds ( arity ((n -tuples_on X) --> x)) = n

    proof

      let X be non empty set;

      let x be Element of X;

      let n be Nat;

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

      set f = ((n -tuples_on X) --> x);

      ( dom f) = (m -tuples_on X) by FUNCOP_1: 13;

      hence thesis by COMPUT_1: 24;

    end;

    

     Lm1: for X be non empty set, x be Element of X, n be Nat holds ((n -tuples_on X) --> x) is n -ary by Th2;

    registration

      let X be non empty set;

      let x be Element of X;

      let n be Nat;

      cluster ((n -tuples_on X) --> x) -> n -ary;

      coherence by Lm1;

    end

    registration

      let X be non empty set;

      cluster 2 -ary associative unital for non empty quasi_total homogeneous PartFunc of (X * ), X;

      existence

      proof

        set x = the Element of X;

        deffunc F( Element of X, Element of X) = ( IFEQ ($1,x,$2,$1));

        (ex f be Function of (2 -tuples_on X), X st for x,y be Element of X holds (f . <*x, y*>) = F(x,y)) & for f1,f2 be Function of (2 -tuples_on X), X st (for x,y be Element of X holds (f1 . <*x, y*>) = F(x,y)) & (for x,y be Element of X holds (f2 . <*x, y*>) = F(x,y)) holds f1 = f2 from CIRCCMB3:sch 7;

        then

        consider f be Function of (2 -tuples_on X), X such that

         A1: for a,b be Element of X holds (f . <*a, b*>) = ( IFEQ (a,x,b,a));

        

         A2: ( rng f) c= X;

        

         A3: ( dom f) = (2 -tuples_on X) by FUNCT_2:def 1;

        then

        reconsider f as non empty homogeneous PartFunc of (X * ), X by A2, COMPUT_1: 16, FINSEQ_2: 134, RELSET_1: 4;

        ( arity f) = 2 by A3, COMPUT_1: 24;

        then

        reconsider f as non empty quasi_total homogeneous PartFunc of (X * ), X by A3, COMPUT_1: 22;

        take f;

        thus ( arity f) = 2 by A3, COMPUT_1: 24;

        hereby

          let u,y,z be set;

          assume that

           A4: <*u, y*> in ( dom f) and

           A5: <*y, z*> in ( dom f);

          reconsider u9 = u, y9 = y, z9 = z as Element of X by A3, A4, A5, FINSEQ_2: 138;

          assume that <*(f . <*u, y*>), z*> in ( dom f) and <*u, (f . <*y, z*>)*> in ( dom f);

          

           A6: u = x implies ( IFEQ (u,x,y,u)) = y by FUNCOP_1:def 8;

          

           A7: u <> x implies ( IFEQ (u,x,y,u)) = u by FUNCOP_1:def 8;

          

           A8: u = x implies ( IFEQ (u,x,( IFEQ (y,x,z,y)),u)) = ( IFEQ (y,x,z,y)) by FUNCOP_1:def 8;

          

           A9: u <> x implies ( IFEQ (u,x,( IFEQ (y,x,z,y)),u)) = u by FUNCOP_1:def 8;

          

           A10: u <> x implies ( IFEQ (u,x,z,u)) = u by FUNCOP_1:def 8;

          

          thus (f . <*(f . <*u, y*>), z*>) = (f . <*( IFEQ (u9,x,y9,u9)), z9*>) by A1

          .= ( IFEQ (( IFEQ (u,x,y,u)),x,z,( IFEQ (u,x,y,u)))) by A1

          .= (f . <*u9, ( IFEQ (y9,x,z9,y9))*>) by A1, A6, A7, A8, A9, A10

          .= (f . <*u, (f . <*y, z*>)*>) by A1;

        end;

        take x;

        let y,z be set;

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

        then

        reconsider y9 = y as Element of X by A3, FINSEQ_2: 138;

         <*x, y9*> in (2 -tuples_on X) by FINSEQ_2: 137;

        hence <*x, y*> in ( dom f) by FUNCT_2:def 1;

        

        thus (f . <*x, y*>) = ( IFEQ (x,x,y9,x)) by A1

        .= y by FUNCOP_1:def 8;

         <*y9, x*> in (2 -tuples_on X) by FINSEQ_2: 137;

        hence <*y, x*> in ( dom f) by FUNCT_2:def 1;

        

         A11: x = y or x <> y;

        

        thus (f . <*y, x*>) = ( IFEQ (y9,x,x,y9)) by A1

        .= y by A11, FUNCOP_1:def 8;

      end;

      cluster 0 -ary for non empty quasi_total homogeneous PartFunc of (X * ), X;

      existence

      proof

        set x = the Element of X;

        set f = (( 0 -tuples_on X) --> x);

        take f;

        thus ( arity f) = 0 by Th2;

      end;

      cluster 3 -ary for non empty quasi_total homogeneous PartFunc of (X * ), X;

      existence

      proof

        set x = the Element of X;

        set f = ((3 -tuples_on X) --> x);

        take f;

        thus ( arity f) = 3 by Th2;

      end;

    end

    theorem :: AOFA_000:3

    

     Th3: for X be non empty set holds for p be FinSequence of ( FinTrees X) holds for x,t be set st t in ( rng p) holds t <> (x -tree p)

    proof

      let X be non empty set;

      let p be FinSequence of ( FinTrees X);

      let x,t be set;

      assume

       A1: t in ( rng p);

      then

      reconsider T = t as Element of ( FinTrees X);

      reconsider A = ( dom T) as finite Tree;

      defpred P[ set] means not contradiction;

      deffunc F( Element of A) = ( len $1);

      { F(e) where e be Element of A : P[e] } is finite from PRE_CIRC:sch 1;

      then

      reconsider B = { F(e) where e be Element of A : P[e] } as finite set;

      set e = the Element of A;

      

       A2: F(e) in B;

      B is real-membered

      proof

        let a be object;

        assume a in B;

        then ex e be Element of A st a = F(e);

        hence thesis;

      end;

      then

      reconsider B as non empty finite real-membered set by A2;

      ( max B) in B by XXREAL_2:def 8;

      then

      consider e be Element of A such that

       A3: ( max B) = ( len e);

      consider i be object such that

       A4: i in ( dom p) and

       A5: t = (p . i) by A1, FUNCT_1:def 3;

      reconsider i as Nat by A4;

      i >= 1 by A4, FINSEQ_3: 25;

      then

      consider j be Nat such that

       A6: i = (1 + j) by NAT_1: 10;

      i <= ( len p) by A4, FINSEQ_3: 25;

      then

       A7: j < ( len p) by A6, NAT_1: 13;

      

       A8: ( <*j*> ^ e) in ( dom (x -tree p)) by A5, A6, A7, TREES_4: 11;

      ( len ( <*j*> ^ e)) = (1 + ( len e)) by FINSEQ_5: 8;

      then ( len ( <*j*> ^ e)) > ( max B) by A3, NAT_1: 13;

      then ( len ( <*j*> ^ e)) nin B by XXREAL_2:def 8;

      hence thesis by A8;

    end;

    definition

      let f,g be Function;

      let X be set;

      :: AOFA_000:def4

      func (f,X) +* g -> Function equals (g +* (f | X));

      coherence ;

    end

    theorem :: AOFA_000:4

    

     Th4: for f,g be Function, x,X be set holds x in X & X c= ( dom f) implies (((f,X) +* g) . x) = (f . x)

    proof

      let f,g be Function;

      let x,X be set;

      assume

       A1: x in X;

      assume

       A2: X c= ( dom f);

      ( dom (f | X)) = (( dom f) /\ X) by RELAT_1: 61;

      then

       A3: x in ( dom (f | X)) by A1, A2, XBOOLE_0:def 4;

      then ((f | X) . x) = (f . x) by FUNCT_1: 47;

      hence thesis by A3, FUNCT_4: 13;

    end;

    theorem :: AOFA_000:5

    

     Th5: for f,g be Function, x,X be set holds x nin X & x in ( dom g) implies (((f,X) +* g) . x) = (g . x)

    proof

      let f,g be Function;

      let x,X be set;

      assume x nin X;

      then x nin (( dom f) /\ X) by XBOOLE_0:def 4;

      then x nin ( dom (f | X)) by RELAT_1: 61;

      hence thesis by FUNCT_4: 11;

    end;

    definition

      let X,Y be non empty set;

      let f,g be Element of ( Funcs (X,Y));

      let A be set;

      :: original: +*

      redefine

      func (f,A) +* g -> Element of ( Funcs (X,Y)) ;

      coherence

      proof

        ( dom g) = X by FUNCT_2: 92;

        then (( dom g) \/ ( dom (f | A))) = X by XBOOLE_1: 12;

        then

         A1: ( dom ((f,A) +* g)) = X by FUNCT_4:def 1;

        ( rng ((f,A) +* g)) c= (( rng g) \/ ( rng (f | A))) by FUNCT_4: 17;

        then ( rng ((f,A) +* g)) c= Y by XBOOLE_1: 1;

        hence thesis by A1, FUNCT_2:def 2;

      end;

    end

    definition

      let X,Y,Z be non empty set;

      let f be Element of ( Funcs (X,Y));

      let g be Element of ( Funcs (Y,Z));

      :: original: *

      redefine

      func g * f -> Element of ( Funcs (X,Z)) ;

      coherence

      proof

        (g * f) is Function of X, Z;

        hence thesis by FUNCT_2: 8;

      end;

    end

    definition

      let f be Function;

      let x be object;

      :: AOFA_000:def5

      func f orbit x -> set equals { (( iter (f,n)) . x) where n be Element of NAT : x in ( dom ( iter (f,n))) };

      coherence ;

    end

    theorem :: AOFA_000:6

    

     Th6: for f be Function, x be set st x in ( dom f) holds x in (f orbit x)

    proof

      let f be Function;

      let x be set;

      assume x in ( dom f);

      then

       A1: x in (( dom f) \/ ( rng f)) by XBOOLE_0:def 3;

      

       A2: ( iter (f, 0 )) = ( id ( field f)) by FUNCT_7: 68;

      then

       A3: (( iter (f, 0 )) . x) = x by A1, FUNCT_1: 17;

      ( dom ( iter (f, 0 ))) = (( dom f) \/ ( rng f)) by A2;

      hence thesis by A1, A3;

    end;

    theorem :: AOFA_000:7

    for f be Function, x,y be set st ( rng f) c= ( dom f) & y in (f orbit x) holds (f . y) in (f orbit x)

    proof

      let f be Function;

      let x,y be set;

      assume

       A1: ( rng f) c= ( dom f);

      assume y in (f orbit x);

      then

      consider n be Element of NAT such that

       A2: y = (( iter (f,n)) . x) and

       A3: x in ( dom ( iter (f,n)));

      

       A4: ( iter (f,(n + 1))) = (f * ( iter (f,n))) by FUNCT_7: 71;

      then

       A5: (f . y) = (( iter (f,(n + 1))) . x) by A2, A3, FUNCT_1: 13;

      

       A6: y in ( rng ( iter (f,n))) by A2, A3, FUNCT_1:def 3;

      

       A7: ( rng ( iter (f,n))) c= ( field f) by FUNCT_7: 72;

      ( field f) = ( dom f) by A1, XBOOLE_1: 12;

      then x in ( dom ( iter (f,(n + 1)))) by A2, A3, A4, A6, A7, FUNCT_1: 11;

      hence thesis by A5;

    end;

    theorem :: AOFA_000:8

    for f be Function, x be set st x in ( dom f) holds (f . x) in (f orbit x)

    proof

      let f be Function;

      let x be set;

      assume

       A1: x in ( dom f);

      ( iter (f,1)) = f by FUNCT_7: 70;

      hence thesis by A1;

    end;

    theorem :: AOFA_000:9

    

     Th9: for f be Function, x be set st x in ( dom f) holds (f orbit (f . x)) c= (f orbit x)

    proof

      let f be Function;

      let x be set;

      assume that

       A1: x in ( dom f);

      let a be object;

      assume a in (f orbit (f . x));

      then

      consider n be Element of NAT such that

       A2: a = (( iter (f,n)) . (f . x)) and

       A3: (f . x) in ( dom ( iter (f,n)));

      

       A4: ( iter (f,(n + 1))) = (( iter (f,n)) * f) by FUNCT_7: 69;

      then

       A5: a = (( iter (f,(n + 1))) . x) by A1, A2, FUNCT_1: 13;

      x in ( dom ( iter (f,(n + 1)))) by A1, A3, A4, FUNCT_1: 11;

      hence thesis by A5;

    end;

    definition

      let f be Function;

      let A be set;

      let x be set;

      defpred T[ Nat] means for a be set st a in ( dom f) holds a in ( dom ( iter (f,$1)));

      

       A2: ( field f) = ( dom f) by A1, XBOOLE_1: 12;

      then ( iter (f, 0 )) = ( id ( dom f)) by FUNCT_7: 68;

      then

       A3: T[ 0 ];

       A4:

      now

        let i be Nat;

        assume

         A5: T[i];

        thus T[(i + 1)]

        proof

          let a be set;

          assume a in ( dom f);

          then

           A6: a in ( dom ( iter (f,i))) by A5;

          then

           A7: (( iter (f,i)) . a) in ( rng ( iter (f,i))) by FUNCT_1:def 3;

          

           A8: ( rng ( iter (f,i))) c= ( dom f) by A2, FUNCT_7: 72;

          ( iter (f,(i + 1))) = (f * ( iter (f,i))) by FUNCT_7: 71;

          hence thesis by A6, A7, A8, FUNCT_1: 11;

        end;

      end;

      

       A9: for i be Nat holds T[i] from NAT_1:sch 2( A3, A4);

      :: AOFA_000:def6

      func (A,x) iter f -> Function means ( dom it ) = ( dom f) & for a be set st a in ( dom f) holds ((f orbit a) c= A implies (it . a) = x) & for n be Nat st (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A holds (it . a) = (( iter (f,n)) . a);

      existence

      proof

        defpred P[ object] means (f orbit $1) c= A;

        consider Z be set such that

         A10: for a be object holds a in Z iff a in ( dom f) & P[a] from XBOOLE_0:sch 1;

        

         A11: Z c= ( dom f) by A10;

        defpred Q[ object, object] means ex n be Nat st $2 = (( iter (f,n)) . $1) & $2 nin A & for i be Nat st i < n holds (( iter (f,i)) . $1) in A;

        

         A12: for a be object st a in (( dom f) \ Z) holds ex b be object st Q[a, b]

        proof

          let a be object;

          assume

           A13: a in (( dom f) \ Z);

          then a nin Z by XBOOLE_0:def 5;

          then not (f orbit a) c= A by A10, A13;

          then

          consider y be object such that

           A14: y in (f orbit a) and

           A15: y nin A;

          

           A16: ex n1 be Element of NAT st (y = (( iter (f,n1)) . a)) & (a in ( dom ( iter (f,n1)))) by A14;

          defpred R[ Nat] means (( iter (f,$1)) . a) nin A;

          

           A17: ex n be Nat st R[n] by A15, A16;

          consider n be Nat such that

           A18: R[n] and

           A19: for m be Nat st R[m] holds n <= m from NAT_1:sch 5( A17);

          take b = (( iter (f,n)) . a), n;

          thus b = (( iter (f,n)) . a) & b nin A by A18;

          let i be Nat;

          thus thesis by A19;

        end;

        consider h be Function such that

         A20: ( dom h) = (( dom f) \ Z) and

         A21: for a be object st a in (( dom f) \ Z) holds Q[a, (h . a)] from CLASSES1:sch 1( A12);

        take g = ((Z --> x) +* h);

        ( dom (Z --> x)) = Z by FUNCOP_1: 13;

        

        hence ( dom g) = (Z \/ (( dom f) \ Z)) by A20, FUNCT_4:def 1

        .= ( dom f) by A11, XBOOLE_1: 45;

        let a be set;

        assume

         A22: a in ( dom f);

        hereby

          assume (f orbit a) c= A;

          then

           A23: a in Z by A10, A22;

          then

           A24: a nin (( dom f) \ Z) by XBOOLE_0:def 5;

          ((Z --> x) . a) = x by A23, FUNCOP_1: 7;

          hence (g . a) = x by A20, A24, FUNCT_4: 11;

        end;

        let n be Nat;

        assume that

         A25: (( iter (f,n)) . a) nin A and

         A26: for i be Nat st i < n holds (( iter (f,i)) . a) in A;

        

         A27: n in NAT by ORDINAL1:def 12;

        a in ( dom ( iter (f,n))) by A9, A22;

        then (( iter (f,n)) . a) in (f orbit a) by A27;

        then not (f orbit a) c= A by A25;

        then a nin Z by A10;

        then

         A28: a in (( dom f) \ Z) by A22, XBOOLE_0:def 5;

        then

        consider n2 be Nat such that

         A29: (h . a) = (( iter (f,n2)) . a) and

         A30: (h . a) nin A and

         A31: for i be Nat st i < n2 holds (( iter (f,i)) . a) in A by A21;

        

         A32: n <= n2 by A26, A29, A30;

        n2 <= n by A25, A31;

        then n = n2 by A32, XXREAL_0: 1;

        hence thesis by A20, A28, A29, FUNCT_4: 13;

      end;

      uniqueness

      proof

        let f1,f2 be Function such that

         A33: ( dom f1) = ( dom f) and

         A34: for a be set st a in ( dom f) holds ((f orbit a) c= A implies (f1 . a) = x) & for n be Nat st (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A holds (f1 . a) = (( iter (f,n)) . a) and

         A35: ( dom f2) = ( dom f) and

         A36: for a be set st a in ( dom f) holds ((f orbit a) c= A implies (f2 . a) = x) & for n be Nat st (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A holds (f2 . a) = (( iter (f,n)) . a);

        now

          let a be object;

          assume

           A37: a in ( dom f);

          per cases ;

            suppose

             A38: (f orbit a) c= A;

            

            hence (f1 . a) = x by A34, A37

            .= (f2 . a) by A36, A37, A38;

          end;

            suppose not (f orbit a) c= A;

            then

            consider y be object such that

             A39: y in (f orbit a) and

             A40: y nin A;

            

             A41: ex n1 be Element of NAT st (y = (( iter (f,n1)) . a)) & (a in ( dom ( iter (f,n1)))) by A39;

            defpred R[ Nat] means (( iter (f,$1)) . a) nin A;

            

             A42: ex n be Nat st R[n] by A40, A41;

            consider n be Nat such that

             A43: R[n] and

             A44: for m be Nat st R[m] holds n <= m from NAT_1:sch 5( A42);

            

             A45: for i be Nat holds i < n implies (( iter (f,i)) . a) in A by A44;

            

            hence (f1 . a) = (( iter (f,n)) . a) by A34, A37, A43

            .= (f2 . a) by A36, A37, A43, A45;

          end;

        end;

        hence thesis by A33, A35;

      end;

    end

    definition

      let f be Function;

      let A be set;

      let g be Function;

      defpred T[ Nat] means for a be set st a in ( dom f) holds a in ( dom ( iter (f,$1)));

      

       A2: ( field f) = ( dom f) by A1, XBOOLE_1: 12;

      then ( iter (f, 0 )) = ( id ( dom f)) by FUNCT_7: 68;

      then

       A3: T[ 0 ];

       A4:

      now

        let i be Nat;

        assume

         A5: T[i];

        thus T[(i + 1)]

        proof

          let a be set;

          assume a in ( dom f);

          then

           A6: a in ( dom ( iter (f,i))) by A5;

          then

           A7: (( iter (f,i)) . a) in ( rng ( iter (f,i))) by FUNCT_1:def 3;

          

           A8: ( rng ( iter (f,i))) c= ( dom f) by A2, FUNCT_7: 72;

          ( iter (f,(i + 1))) = (f * ( iter (f,i))) by FUNCT_7: 71;

          hence thesis by A6, A7, A8, FUNCT_1: 11;

        end;

      end;

      

       A9: for i be Nat holds T[i] from NAT_1:sch 2( A3, A4);

      :: AOFA_000:def7

      func (A,g) iter f -> Function means

      : Def7: ( dom it ) = ( dom f) & for a be set st a in ( dom f) holds ((f orbit a) c= A implies (it . a) = (g . a)) & for n be Nat st (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A holds (it . a) = (( iter (f,n)) . a);

      existence

      proof

        defpred P[ object] means (f orbit $1) c= A;

        consider Z be set such that

         A10: for a be object holds a in Z iff a in ( dom f) & P[a] from XBOOLE_0:sch 1;

        

         A11: Z c= ( dom f) by A10;

        defpred Q[ object, object] means ex n be Nat st $2 = (( iter (f,n)) . $1) & $2 nin A & for i be Nat st i < n holds (( iter (f,i)) . $1) in A;

        

         A12: for a be object st a in (( dom f) \ Z) holds ex b be object st Q[a, b]

        proof

          let a be object;

          assume

           A13: a in (( dom f) \ Z);

          then a nin Z by XBOOLE_0:def 5;

          then not (f orbit a) c= A by A10, A13;

          then

          consider y be object such that

           A14: y in (f orbit a) and

           A15: y nin A;

          

           A16: ex n1 be Element of NAT st (y = (( iter (f,n1)) . a)) & (a in ( dom ( iter (f,n1)))) by A14;

          defpred R[ Nat] means (( iter (f,$1)) . a) nin A;

          

           A17: ex n be Nat st R[n] by A15, A16;

          consider n be Nat such that

           A18: R[n] and

           A19: for m be Nat st R[m] holds n <= m from NAT_1:sch 5( A17);

          take b = (( iter (f,n)) . a), n;

          thus b = (( iter (f,n)) . a) & b nin A by A18;

          let i be Nat;

          thus thesis by A19;

        end;

        consider h be Function such that

         A20: ( dom h) = (( dom f) \ Z) and

         A21: for a be object st a in (( dom f) \ Z) holds Q[a, (h . a)] from CLASSES1:sch 1( A12);

        take i = (((Z --> 0 ) +* (g | Z)) +* h);

        ( dom (Z --> 0 )) = Z by FUNCOP_1: 13;

        

        then ( dom ((Z --> 0 ) +* (g | Z))) = (Z \/ ( dom (g | Z))) by FUNCT_4:def 1

        .= Z by RELAT_1: 58, XBOOLE_1: 12;

        

        hence ( dom i) = (Z \/ (( dom f) \ Z)) by A20, FUNCT_4:def 1

        .= ( dom f) by A11, XBOOLE_1: 45;

        let a be set;

        assume

         A22: a in ( dom f);

        hereby

          assume (f orbit a) c= A;

          then

           A23: a in Z by A10, A22;

          then a nin (( dom f) \ Z) by XBOOLE_0:def 5;

          then

           A24: (i . a) = (((Z --> 0 ) +* (g | Z)) . a) by A20, FUNCT_4: 11;

          per cases ;

            suppose a in ( dom (g | Z));

            then (i . a) = ((g | Z) . a) by A24, FUNCT_4: 13;

            hence (i . a) = (g . a) by A23, FUNCT_1: 49;

          end;

            suppose

             A25: a nin ( dom (g | Z));

            then

             A26: (i . a) = ((Z --> 0 ) . a) by A24, FUNCT_4: 11;

            

             A27: ((Z --> 0 ) . a) = 0 by A23, FUNCOP_1: 7;

            a nin ( dom g) by A23, A25, RELAT_1: 57;

            hence (i . a) = (g . a) by A26, A27, FUNCT_1:def 2;

          end;

        end;

        let n be Nat;

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

        assume that

         A28: (( iter (f,n)) . a) nin A and

         A29: for i be Nat st i < n holds (( iter (f,i)) . a) in A;

        a in ( dom ( iter (f,n9))) by A9, A22;

        then (( iter (f,n)) . a) in (f orbit a);

        then not (f orbit a) c= A by A28;

        then a nin Z by A10;

        then

         A30: a in (( dom f) \ Z) by A22, XBOOLE_0:def 5;

        then

        consider n2 be Nat such that

         A31: (h . a) = (( iter (f,n2)) . a) and

         A32: (h . a) nin A and

         A33: for i be Nat st i < n2 holds (( iter (f,i)) . a) in A by A21;

        

         A34: n <= n2 by A29, A31, A32;

        n2 <= n by A28, A33;

        then n = n2 by A34, XXREAL_0: 1;

        hence thesis by A20, A30, A31, FUNCT_4: 13;

      end;

      uniqueness

      proof

        let f1,f2 be Function such that

         A35: ( dom f1) = ( dom f) and

         A36: for a be set st a in ( dom f) holds ((f orbit a) c= A implies (f1 . a) = (g . a)) & for n be Nat st (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A holds (f1 . a) = (( iter (f,n)) . a) and

         A37: ( dom f2) = ( dom f) and

         A38: for a be set st a in ( dom f) holds ((f orbit a) c= A implies (f2 . a) = (g . a)) & for n be Nat st (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A holds (f2 . a) = (( iter (f,n)) . a);

        now

          let a be object;

          assume

           A39: a in ( dom f);

          per cases ;

            suppose

             A40: (f orbit a) c= A;

            

            hence (f1 . a) = (g . a) by A36, A39

            .= (f2 . a) by A38, A39, A40;

          end;

            suppose not (f orbit a) c= A;

            then

            consider y be object such that

             A41: y in (f orbit a) and

             A42: y nin A;

            

             A43: ex n1 be Element of NAT st (y = (( iter (f,n1)) . a)) & (a in ( dom ( iter (f,n1)))) by A41;

            defpred R[ Nat] means (( iter (f,$1)) . a) nin A;

            

             A44: ex n be Nat st R[n] by A42, A43;

            consider n be Nat such that

             A45: R[n] and

             A46: for m be Nat st R[m] holds n <= m from NAT_1:sch 5( A44);

            

             A47: for i be Nat holds i < n implies (( iter (f,i)) . a) in A by A46;

            

            hence (f1 . a) = (( iter (f,n)) . a) by A36, A39, A45

            .= (f2 . a) by A38, A39, A45, A47;

          end;

        end;

        hence thesis by A35, A37;

      end;

    end

    theorem :: AOFA_000:10

    

     Th10: for f,g be Function, a,A be set st ( rng f) c= ( dom f) & a in ( dom f) holds not (f orbit a) c= A implies ex n be Nat st (((A,g) iter f) . a) = (( iter (f,n)) . a) & (( iter (f,n)) . a) nin A & for i be Nat st i < n holds (( iter (f,i)) . a) in A

    proof

      let f,g be Function;

      let a,A be set;

      assume

       A1: ( rng f) c= ( dom f);

      assume

       A2: a in ( dom f);

      assume not (f orbit a) c= A;

      then

      consider y be object such that

       A3: y in (f orbit a) and

       A4: y nin A;

      

       A5: ex n1 be Element of NAT st (y = (( iter (f,n1)) . a)) & (a in ( dom ( iter (f,n1)))) by A3;

      defpred R[ Nat] means (( iter (f,$1)) . a) nin A;

      

       A6: ex n be Nat st R[n] by A4, A5;

      consider n be Nat such that

       A7: R[n] and

       A8: for m be Nat st R[m] holds n <= m from NAT_1:sch 5( A6);

      take n;

      for i be Nat holds i < n implies (( iter (f,i)) . a) in A by A8;

      hence (((A,g) iter f) . a) = (( iter (f,n)) . a) by A1, A2, A7, Def7;

      thus thesis by A7, A8;

    end;

    theorem :: AOFA_000:11

    

     Th11: for f,g be Function, a,A be set st ( rng f) c= ( dom f) & a in ( dom f) & (g * f) = g holds a in A implies (((A,g) iter f) . a) = (((A,g) iter f) . (f . a))

    proof

      let f,g be Function;

      let a,A be set;

      assume that

       A1: ( rng f) c= ( dom f) and

       A2: a in ( dom f) and

       A3: (g * f) = g and

       A4: a in A;

      

       A5: (f . a) in ( rng f) by A2, FUNCT_1:def 3;

      

       A6: (f orbit (f . a)) c= (f orbit a) by A2, Th9;

      per cases ;

        suppose

         A7: (f orbit a) c= A;

        then (f orbit (f . a)) c= A by A6;

        

        then (((A,g) iter f) . (f . a)) = (g . (f . a)) by A1, A5, Def7

        .= (g . a) by A2, A3, FUNCT_1: 13;

        hence thesis by A1, A2, A7, Def7;

      end;

        suppose not (f orbit a) c= A;

        then

        consider n be Nat such that

         A8: (((A,g) iter f) . a) = (( iter (f,n)) . a) and

         A9: (( iter (f,n)) . a) nin A and

         A10: for i be Nat st i < n holds (( iter (f,i)) . a) in A by A1, A2, Th10;

        ( field f) = ( dom f) by A1, XBOOLE_1: 12;

        then ( iter (f, 0 )) = ( id ( dom f)) by FUNCT_7: 68;

        then n <> 0 by A2, A4, A9, FUNCT_1: 18;

        then n >= ( 0 + 1) by NAT_1: 13;

        then

        consider i be Nat such that

         A11: n = (1 + i) by NAT_1: 10;

        ( iter (f,n)) = (( iter (f,i)) * f) by A11, FUNCT_7: 69;

        then

         A12: (( iter (f,n)) . a) = (( iter (f,i)) . (f . a)) by A2, FUNCT_1: 13;

        now

          let j be Nat;

          assume j < i;

          then

           A13: (j + 1) < n by A11, XREAL_1: 8;

          

           A14: ( iter (f,(j + 1))) = (( iter (f,j)) * f) by FUNCT_7: 69;

          (( iter (f,(j + 1))) . a) in A by A10, A13;

          hence (( iter (f,j)) . (f . a)) in A by A2, A14, FUNCT_1: 13;

        end;

        hence thesis by A1, A5, A8, A9, A12, Def7;

      end;

    end;

    theorem :: AOFA_000:12

    

     Th12: for f,g be Function, a,A be set st ( rng f) c= ( dom f) & a in ( dom f) holds a nin A implies (((A,g) iter f) . a) = a

    proof

      let f,g be Function;

      let a,A be set;

      assume that

       A1: ( rng f) c= ( dom f) and

       A2: a in ( dom f) and

       A3: a nin A;

      ( field f) = ( dom f) by A1, XBOOLE_1: 12;

      then ( iter (f, 0 )) = ( id ( dom f)) by FUNCT_7: 68;

      then

       A4: a = (( iter (f, 0 )) . a) by A2, FUNCT_1: 18;

      for i be Nat st i < 0 holds (( iter (f,i)) . a) in A;

      hence thesis by A1, A2, A3, A4, Def7;

    end;

    definition

      let X be non empty set;

      let f be Element of ( Funcs (X,X));

      let A be set;

      let g be Element of ( Funcs (X,X));

      :: original: iter

      redefine

      func (A,g) iter f -> Element of ( Funcs (X,X)) ;

      coherence

      proof

        

         A1: ( dom f) = X by FUNCT_2:def 1;

        

         A2: ( rng f) c= X;

        then

         A3: ( dom ((A,g) iter f)) = ( dom f) by A1, Def7;

        ( rng ((A,g) iter f)) c= X

        proof

          let a be object;

          assume a in ( rng ((A,g) iter f));

          then

          consider b be object such that

           A4: b in ( dom ((A,g) iter f)) and

           A5: a = (((A,g) iter f) . b) by FUNCT_1:def 3;

          reconsider b as Element of X by A1, A2, A4, Def7;

          per cases ;

            suppose (f orbit b) c= A;

            then a = (g . b) by A1, A2, A5, Def7;

            hence thesis;

          end;

            suppose not (f orbit b) c= A;

            then

            consider n be Nat such that

             A6: (((A,g) iter f) . b) = (( iter (f,n)) . b) and (( iter (f,n)) . b) nin A and for i be Nat st i < n holds (( iter (f,i)) . b) in A by A1, A2, Th10;

            

             A7: ( dom ( iter (f,n))) = ( dom f) by A1, A2, FUNCT_7: 74;

            a in ( rng ( iter (f,n))) by A1, A5, A6, A7, FUNCT_1: 3;

            hence thesis;

          end;

        end;

        hence thesis by A1, A3, FUNCT_2:def 2;

      end;

    end

    begin

    theorem :: AOFA_000:13

    

     Th13: for X be non empty set, S be non empty FinSequence of NAT holds ex A be Universal_Algebra st the carrier of A = X & ( signature A) = S

    proof

      let X be non empty set;

      let S be non empty FinSequence of NAT ;

      

       A1: ( dom S) = ( Seg ( len S)) by FINSEQ_1:def 3;

      set x = the Element of X;

      defpred P[ object, object] means ex i,j be Nat st $1 = i & j = (S . i) & $2 = ((j -tuples_on X) --> x);

      

       A2: for y be object st y in ( dom S) holds ex z be object st P[y, z]

      proof

        let y be object;

        assume y in ( dom S);

        then

        reconsider i = y as Element of NAT ;

        reconsider j = (S . i) as Element of NAT ;

        take ((j -tuples_on X) --> x), i, j;

        thus thesis;

      end;

      consider ch be Function such that

       A3: ( dom ch) = ( dom S) & for y be object st y in ( dom S) holds P[y, (ch . y)] from CLASSES1:sch 1( A2);

      reconsider ch as FinSequence by A1, A3, FINSEQ_1:def 2;

      ( rng ch) c= ( PFuncs ((X * ),X))

      proof

        let y be object;

        assume y in ( rng ch);

        then

        consider xi be object such that

         A4: xi in ( dom ch) and

         A5: y = (ch . xi) by FUNCT_1:def 3;

        consider i,j be Nat such that xi = i and j = (S . i) and

         A6: y = ((j -tuples_on X) --> x) by A3, A4, A5;

        

         A7: ( dom ((j -tuples_on X) --> x)) = (j -tuples_on X) by FUNCOP_1: 13;

        ( rng ((j -tuples_on X) --> x)) c= {x} by FUNCOP_1: 13;

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

      end;

      then

      reconsider ch as PFuncFinSequence of X by FINSEQ_1:def 4;

      set A = UAStr (# X, ch #);

      

       A8: A is quasi_total

      proof

        let n be Nat, h be PartFunc of (the carrier of A * ), the carrier of A;

        assume that

         A9: n in ( dom the charact of A) and

         A10: h = (the charact of A . n);

        ex i,j be Nat st n = i & j = (S . i) & h = ((j -tuples_on X) --> x) by A3, A9, A10;

        hence thesis;

      end;

      

       A11: A is non-empty

      proof

        thus the charact of A <> {} by A3;

        assume {} in ( rng the charact of A);

        then

        consider a be object such that

         A12: a in ( dom ch) and

         A13: {} = (ch . a) by FUNCT_1:def 3;

        ex i,j be Nat st a = i & j = (S . i) & {} = ((j -tuples_on X) --> x) by A3, A12, A13;

        hence thesis;

      end;

      A is partial

      proof

        let n be Nat, h be PartFunc of (the carrier of A * ), the carrier of A;

        assume that

         A14: n in ( dom the charact of A) and

         A15: h = (the charact of A . n);

        ex i,j be Nat st n = i & j = (S . i) & h = ((j -tuples_on X) --> x) by A3, A14, A15;

        hence thesis;

      end;

      then

      reconsider A as Universal_Algebra by A8, A11;

      take A;

      thus the carrier of A = X;

      

       A16: ( len ch) = ( len S) by A3, FINSEQ_3: 29;

      now

        let n be Nat such that

         A17: n in ( dom S);

        let h be homogeneous non empty PartFunc of (the carrier of A * ), the carrier of A;

        assume h = (the charact of A . n);

        then

        consider i,j be Nat such that

         A18: n = i and

         A19: j = (S . i) and

         A20: h = ((j -tuples_on X) --> x) by A3, A17;

        set z = the Element of (j -tuples_on X);

        

         A21: ( dom h) = (j -tuples_on X) by A20, FUNCOP_1: 13;

        ( len z) = j by CARD_1:def 7;

        hence (S . n) = ( arity h) by A18, A19, A21, MARGREL1:def 25;

      end;

      hence thesis by A16, UNIALG_1:def 4;

    end;

    theorem :: AOFA_000:14

    

     Th14: for S be non empty FinSequence of NAT holds ex A be Universal_Algebra st the carrier of A = NAT & ( signature A) = S & for i,j be Nat st i in ( dom S) & j = (S . i) holds (the charact of A . i) = ((j -tuples_on NAT ) --> i)

    proof

      set X = NAT ;

      let S be non empty FinSequence of NAT ;

      

       A1: ( dom S) = ( Seg ( len S)) by FINSEQ_1:def 3;

      defpred P[ object, object] means ex i,j be Element of NAT st $1 = i & j = (S . i) & $2 = ((j -tuples_on X) --> i);

      

       A2: for y be object st y in ( dom S) holds ex z be object st P[y, z]

      proof

        let y be object;

        assume y in ( dom S);

        then

        reconsider i = y as Element of NAT ;

        reconsider j = (S . i) as Element of NAT ;

        take ((j -tuples_on X) --> i), i, j;

        thus thesis;

      end;

      consider ch be Function such that

       A3: ( dom ch) = ( dom S) & for y be object st y in ( dom S) holds P[y, (ch . y)] from CLASSES1:sch 1( A2);

      reconsider ch as FinSequence by A1, A3, FINSEQ_1:def 2;

      ( rng ch) c= ( PFuncs ((X * ),X))

      proof

        let y be object;

        assume y in ( rng ch);

        then

        consider xi be object such that

         A4: xi in ( dom ch) and

         A5: y = (ch . xi) by FUNCT_1:def 3;

        consider i,j be Element of NAT such that xi = i and j = (S . i) and

         A6: y = ((j -tuples_on X) --> i) by A3, A4, A5;

        

         A7: ( dom ((j -tuples_on X) --> i)) = (j -tuples_on X) by FUNCOP_1: 13;

        ( rng ((j -tuples_on X) --> i)) c= X;

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

      end;

      then

      reconsider ch as PFuncFinSequence of X by FINSEQ_1:def 4;

      set A = UAStr (# X, ch #);

      

       A8: A is quasi_total

      proof

        let n be Nat, h be PartFunc of (the carrier of A * ), the carrier of A;

        assume that

         A9: n in ( dom the charact of A) and

         A10: h = (the charact of A . n);

        ex i,j be Element of NAT st n = i & j = (S . i) & h = ((j -tuples_on X) --> i) by A3, A9, A10;

        hence thesis;

      end;

      

       A11: A is non-empty

      proof

        thus the charact of A <> {} by A3;

        assume {} in ( rng the charact of A);

        then

        consider a be object such that

         A12: a in ( dom ch) and

         A13: {} = (ch . a) by FUNCT_1:def 3;

        ex i,j be Element of NAT st a = i & j = (S . i) & {} = ((j -tuples_on X) --> i) by A3, A12, A13;

        hence thesis;

      end;

      A is partial

      proof

        let n be Nat, h be PartFunc of (the carrier of A * ), the carrier of A;

        assume that

         A14: n in ( dom the charact of A) and

         A15: h = (the charact of A . n);

        ex i,j be Element of NAT st n = i & j = (S . i) & h = ((j -tuples_on X) --> i) by A3, A14, A15;

        hence thesis;

      end;

      then

      reconsider A as Universal_Algebra by A8, A11;

      take A;

      thus the carrier of A = X;

      

       A16: ( len ch) = ( len S) by A3, FINSEQ_3: 29;

      now

        let n be Nat such that

         A17: n in ( dom S);

        let h be homogeneous non empty PartFunc of (the carrier of A * ), the carrier of A;

        assume h = (the charact of A . n);

        then

        consider i,j be Element of NAT such that

         A18: n = i and

         A19: j = (S . i) and

         A20: h = ((j -tuples_on X) --> i) by A3, A17;

        set z = the Element of (j -tuples_on X);

        

         A21: ( dom h) = (j -tuples_on X) by A20, FUNCOP_1: 13;

        ( len z) = j by CARD_1:def 7;

        hence (S . n) = ( arity h) by A18, A19, A21, MARGREL1:def 25;

      end;

      hence ( signature A) = S by A16, UNIALG_1:def 4;

      let i,j be Nat;

      assume i in ( dom S);

      then ex i1,j be Element of NAT st i = i1 & j = (S . i1) & (ch . i) = ((j -tuples_on X) --> i1) by A3;

      hence thesis;

    end;

    theorem :: AOFA_000:15

    for S be non empty FinSequence of NAT holds for i,j be Nat st i in ( dom S) & j = (S . i) holds for X be non empty set, f be Function of (j -tuples_on X), X holds ex A be Universal_Algebra st the carrier of A = X & ( signature A) = S & (the charact of A . i) = f

    proof

      let S be non empty FinSequence of NAT ;

      let i,j be Nat;

      reconsider j9 = j as Element of NAT by ORDINAL1:def 12;

      assume that

       A1: i in ( dom S) and

       A2: j = (S . i);

      let X be non empty set;

      consider A0 be Universal_Algebra such that

       A3: the carrier of A0 = X and

       A4: ( signature A0) = S by Th13;

      let f be Function of (j -tuples_on X), X;

      (j9 -tuples_on X) c= (X * ) by FINSEQ_2: 134;

      then

      reconsider f0 = f as PartFunc of (X * ), X by RELSET_1: 7;

      set z = the Element of (j -tuples_on X);

      

       A5: ( dom f0) = (j -tuples_on X) by FUNCT_2:def 1;

      f0 is homogeneous by A5;

      then

      reconsider f0 as homogeneous non empty PartFunc of (X * ), X;

      

       A6: ( len z) = j by CARD_1:def 7;

      then

       A7: ( arity f0) = j by A5, MARGREL1:def 25;

      set ch = (the charact of A0 +* (i,f0));

      f0 in ( PFuncs ((X * ),X)) by PARTFUN1: 45;

      then

       A8: {f0} c= ( PFuncs ((X * ),X)) by ZFMISC_1: 31;

      

       A9: ( rng ch) c= (( rng the charact of A0) \/ {f0}) by FUNCT_7: 100;

      (( rng the charact of A0) \/ {f0}) c= ( PFuncs ((X * ),X)) by A3, A8, XBOOLE_1: 8;

      then ( rng ch) c= ( PFuncs ((X * ),X)) by A9;

      then

      reconsider ch as FinSequence of ( PFuncs ((X * ),X)) by FINSEQ_1:def 4;

      

       A10: ( dom ch) = ( dom the charact of A0) by FUNCT_7: 30;

      set A = UAStr (# X, ch #);

      

       A11: A is quasi_total

      proof

        let n be Nat, h be PartFunc of (the carrier of A * ), the carrier of A;

        assume that

         A12: n in ( dom the charact of A) and

         A13: h = (the charact of A . n);

        

         A14: n = i implies h = f0 by A10, A12, A13, FUNCT_7: 31;

        n <> i implies h = (the charact of A0 . n) by A13, FUNCT_7: 32;

        hence thesis by A3, A5, A7, A10, A12, A14, COMPUT_1: 22, MARGREL1:def 24;

      end;

      

       A15: A is non-empty

      proof

        thus the charact of A <> {} ;

        assume {} in ( rng the charact of A);

        then

        consider a be object such that

         A16: a in ( dom ch) and

         A17: {} = (ch . a) by FUNCT_1:def 3;

        reconsider a as Element of NAT by A16;

        a <> i implies {} = (the charact of A0 . a) by A17, FUNCT_7: 32;

        hence thesis by A10, A16, A17, FUNCT_7: 31;

      end;

      A is partial

      proof

        let n be Nat, h be PartFunc of (the carrier of A * ), the carrier of A;

        assume that

         A18: n in ( dom the charact of A) and

         A19: h = (the charact of A . n);

        n <> i implies h = (the charact of A0 . n) by A19, FUNCT_7: 32;

        hence thesis by A10, A18, A19, FUNCT_7: 31;

      end;

      then

      reconsider A as Universal_Algebra by A11, A15;

      take A;

      thus the carrier of A = X;

      

       A20: ( len S) = ( len the charact of A0) by A4, UNIALG_1:def 4;

      then

       A21: ( dom S) = ( dom the charact of A0) by FINSEQ_3: 29;

      

       A22: ( len S) = ( len the charact of A) by A10, A20, FINSEQ_3: 29;

      now

        let n be Nat;

        assume

         A23: n in ( dom S);

        let h be homogeneous non empty PartFunc of (the carrier of A * ), the carrier of A;

        assume

         A24: h = (the charact of A . n);

        then

         A25: n = i implies h = f0 by A21, A23, FUNCT_7: 31;

        n <> i implies h = (the charact of A0 . n) by A24, FUNCT_7: 32;

        hence (S . n) = ( arity h) by A2, A3, A4, A5, A6, A23, A25, MARGREL1:def 25, UNIALG_1:def 4;

      end;

      hence ( signature A) = S by A22, UNIALG_1:def 4;

      thus thesis by A1, A21, FUNCT_7: 31;

    end;

    registration

      let f be non empty FinSequence of NAT ;

      let D be non empty disjoint_with_NAT set;

      cluster -> Relation-like Function-like for Element of ( FreeUnivAlgNSG (f,D));

      coherence ;

    end

    registration

      let f be non empty FinSequence of NAT ;

      let D be non empty disjoint_with_NAT set;

      cluster -> DecoratedTree-like for Element of ( FreeUnivAlgNSG (f,D));

      coherence ;

      cluster -> DTree-yielding for FinSequence of ( FreeUnivAlgNSG (f,D));

      coherence ;

    end

    theorem :: AOFA_000:16

    

     Th16: for G be non empty DTConstrStr holds for t be set st t in ( TS G) holds (ex d be Symbol of G st d in ( Terminals G) & t = ( root-tree d)) or ex o be Symbol of G, p be FinSequence of ( TS G) st o ==> ( roots p) & t = (o -tree p)

    proof

      let G be non empty DTConstrStr;

      let t be set;

      assume that

       A1: t in ( TS G) and

       A2: not ex d be Symbol of G st d in ( Terminals G) & t = ( root-tree d) and

       A3: not ex o be Symbol of G, p be FinSequence of ( TS G) st o ==> ( roots p) & t = (o -tree p);

      

       A4: (( TS G) \ {t}) c= ( TS G) by XBOOLE_1: 36;

      reconsider Y = (( TS G) \ {t}) as Subset of ( FinTrees the carrier of G);

       A5:

      now

        let d be Symbol of G;

        assume

         A6: d in ( Terminals G);

        then

         A7: ( root-tree d) in ( TS G) by DTCONSTR:def 1;

        ( root-tree d) <> t by A2, A6;

        hence ( root-tree d) in Y by A7, ZFMISC_1: 56;

      end;

      now

        let o be Symbol of G, p be FinSequence of Y;

        ( rng p) c= Y by FINSEQ_1:def 4;

        then ( rng p) c= ( TS G) by A4;

        then

        reconsider q = p as FinSequence of ( TS G) by FINSEQ_1:def 4;

        assume

         A8: o ==> ( roots p);

        then

         A9: (o -tree q) in ( TS G) by DTCONSTR:def 1;

        t <> (o -tree q) by A3, A8;

        hence (o -tree p) in Y by A9, ZFMISC_1: 56;

      end;

      then ( TS G) c= Y by A5, DTCONSTR:def 1;

      then t nin {t} by A1, XBOOLE_0:def 5;

      hence contradiction by TARSKI:def 1;

    end;

    theorem :: AOFA_000:17

    

     Th17: for X be disjoint_with_NAT non empty set holds for S be non empty FinSequence of NAT holds for i be Nat st i in ( dom S) holds for p be FinSequence of ( FreeUnivAlgNSG (S,X)) st ( len p) = (S . i) holds (( Den (( In (i,( dom the charact of ( FreeUnivAlgNSG (S,X))))),( FreeUnivAlgNSG (S,X)))) . p) = (i -tree p)

    proof

      let X be disjoint_with_NAT non empty set;

      let S be non empty FinSequence of NAT ;

      reconsider S9 = S as non empty FinSequence of omega ;

      set G = ( DTConUA (S,X));

      set A = ( FreeUnivAlgNSG (S,X));

      let i be Nat;

      assume

       A1: i in ( dom S);

      then

       A2: (S9 /. i) = (S . i) by PARTFUN1:def 6;

      let p be FinSequence of A;

      assume ( len p) = (S . i);

      then p is Element of ((S9 /. i) -tuples_on ( TS G)) by A2, FINSEQ_2: 92;

      then p in ((S9 /. i) -tuples_on ( TS G));

      then

       A3: p in ( dom ( FreeOpNSG (i,S,X))) by A1, FREEALG:def 10;

      ( len the charact of A) = ( len S) by FREEALG:def 11;

      then ( dom the charact of A) = ( dom S) by FINSEQ_3: 29;

      then ( In (i,( dom the charact of A))) = i by A1, SUBSET_1:def 8;

      

      hence (( Den (( In (i,( dom the charact of A))),A)) . p) = (( FreeOpNSG (i,S,X)) . p) by FREEALG:def 11

      .= (( Sym (i,S,X)) -tree p) by A1, A3, FREEALG:def 10

      .= (i -tree p) by A1, FREEALG:def 9;

    end;

    definition

      let A be non-empty UAStr;

      let B be Subset of A;

      let n be natural Number;

      :: AOFA_000:def8

      func B |^ n -> Subset of A means

      : Def8: ex F be sequence of ( bool the carrier of A) st it = (F . n) & (F . 0 ) = B & for n be Nat holds (F . (n + 1)) = ((F . n) \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (F . n) });

      existence

      proof

        defpred P[ set, set, set] means $3 = ($2 \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= $2 });

        

         A1: for n be Nat holds for B1 be Subset of A holds ex B2 be Subset of A st P[n, B1, B2]

        proof

          let n be Nat, B1 be Subset of A;

          set B2 = (B1 \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= B1 });

          B2 c= the carrier of A

          proof

            let x be object;

            assume that

             A2: x in B2 and

             A3: not x in the carrier of A;

            x in B1 implies x in the carrier of A;

            then x in { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= B1 } by A2, A3, XBOOLE_0:def 3;

            then

            consider o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

             A4: x = (( Den (o,A)) . p) and

             A5: p in ( dom ( Den (o,A))) and ( rng p) c= B1;

            x in ( rng ( Den (o,A))) by A4, A5, FUNCT_1:def 3;

            hence contradiction by A3;

          end;

          then

          reconsider B2 as Subset of A;

          take B2;

          thus thesis;

        end;

        consider F be sequence of ( bool the carrier of A) such that

         A6: (F . 0 ) = B & for n be Nat holds P[n, (F . n), (F . (n + 1))] from RECDEF_1:sch 2( A1);

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

        take a = (F . n9), F;

        thus a = (F . n) & (F . 0 ) = B by A6;

        let n be Nat;

        thus thesis by A6;

      end;

      uniqueness

      proof

        let C1,C2 be Subset of A;

        deffunc Rec( set, set) = ($2 \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= $2 });

        given F1 be sequence of ( bool the carrier of A) such that

         A7: C1 = (F1 . n) and

         A8: (F1 . 0 ) = B and

         A9: for n be Nat holds (F1 . (n + 1)) = Rec(n,.);

        given F2 be sequence of ( bool the carrier of A) such that

         A10: C2 = (F2 . n) and

         A11: (F2 . 0 ) = B and

         A12: for n be Nat holds (F2 . (n + 1)) = Rec(n,.);

        

         A13: ( dom F1) = NAT by FUNCT_2:def 1;

        

         A14: (F1 . 0 ) = B by A8;

        

         A15: for n be Nat holds (F1 . (n + 1)) = Rec(n,.) by A9;

        

         A16: ( dom F2) = NAT by FUNCT_2:def 1;

        

         A17: (F2 . 0 ) = B by A11;

        

         A18: for n be Nat holds (F2 . (n + 1)) = Rec(n,.) by A12;

        F1 = F2 from NAT_1:sch 15( A13, A14, A15, A16, A17, A18);

        hence thesis by A7, A10;

      end;

    end

    theorem :: AOFA_000:18

    

     Th18: for A be Universal_Algebra, B be Subset of A holds (B |^ 0 ) = B

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      ex F be sequence of ( bool the carrier of A) st (B |^ 0 ) = (F . 0 ) & (F . 0 ) = B & for n be Nat holds (F . (n + 1)) = ((F . n) \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (F . n) }) by Def8;

      hence thesis;

    end;

    theorem :: AOFA_000:19

    

     Th19: for A be Universal_Algebra, B be Subset of A holds for n be Nat holds (B |^ (n + 1)) = ((B |^ n) \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) })

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      let n be Nat;

      deffunc Rec( set, set) = ($2 \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= $2 });

      consider F1 be sequence of ( bool the carrier of A) such that

       A1: (B |^ n) = (F1 . n) and

       A2: (F1 . 0 ) = B and

       A3: for n be Nat holds (F1 . (n + 1)) = Rec(n,.) by Def8;

      consider F2 be sequence of ( bool the carrier of A) such that

       A4: (B |^ (n + 1)) = (F2 . (n + 1)) and

       A5: (F2 . 0 ) = B and

       A6: for n be Nat holds (F2 . (n + 1)) = Rec(n,.) by Def8;

      

       A7: ( dom F1) = NAT by FUNCT_2:def 1;

      

       A8: (F1 . 0 ) = B by A2;

      

       A9: for n be Nat holds (F1 . (n + 1)) = Rec(n,.) by A3;

      

       A10: ( dom F2) = NAT by FUNCT_2:def 1;

      

       A11: (F2 . 0 ) = B by A5;

      

       A12: for n be Nat holds (F2 . (n + 1)) = Rec(n,.) by A6;

      F1 = F2 from NAT_1:sch 15( A7, A8, A9, A10, A11, A12);

      hence thesis by A1, A3, A4;

    end;

    theorem :: AOFA_000:20

    

     Th20: for A be Universal_Algebra, B be Subset of A holds for n be Nat holds for x be set holds x in (B |^ (n + 1)) iff x in (B |^ n) or ex o be Element of ( dom the charact of A) st ex p be Element of (the carrier of A * ) st x = (( Den (o,A)) . p) & p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n)

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      let n be Nat;

      set Z = { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) };

      let x be set;

      (B |^ (n + 1)) = ((B |^ n) \/ Z) by Th19;

      then x in (B |^ (n + 1)) iff x in (B |^ n) or x in Z by XBOOLE_0:def 3;

      hence thesis;

    end;

    theorem :: AOFA_000:21

    

     Th21: for A be Universal_Algebra, B be Subset of A holds for n,m be Nat st n <= m holds (B |^ n) c= (B |^ m)

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      let n,m be Nat;

      assume n <= m;

      then

       A1: ex i be Nat st (m = (n + i)) by NAT_1: 10;

      defpred P[ Nat] means (B |^ n) c= (B |^ (n + $1));

      

       A2: P[ 0 ];

       A3:

      now

        let i be Nat;

        assume

         A4: P[i];

        deffunc Rec( set, set) = ($2 \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= $2 });

        (B |^ ((n + i) + 1)) = Rec(n,|^) by Th19;

        then (B |^ (n + i)) c= (B |^ (n + (i + 1))) by XBOOLE_1: 7;

        hence P[(i + 1)] by A4, XBOOLE_1: 1;

      end;

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

      hence thesis by A1;

    end;

    theorem :: AOFA_000:22

    

     Th22: for A be Universal_Algebra holds for B1,B2 be Subset of A st B1 c= B2 holds for n be Nat holds (B1 |^ n) c= (B2 |^ n)

    proof

      let A be Universal_Algebra;

      let B1,B2 be Subset of A such that

       A1: B1 c= B2;

      defpred P[ Nat] means (B1 |^ $1) c= (B2 |^ $1);

      (B1 |^ 0 ) = B1 by Th18;

      then

       A2: P[ 0 ] by A1, Th18;

       A3:

      now

        let n be Nat;

        assume

         A4: P[n];

        thus P[(n + 1)]

        proof

          let x be object;

          assume that

           A5: x in (B1 |^ (n + 1)) and

           A6: x nin (B2 |^ (n + 1));

          reconsider a = x as Element of A by A5;

          a nin (B1 |^ n) by A4, A6, Th20;

          then

          consider o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

           A7: a = (( Den (o,A)) . p) and

           A8: p in ( dom ( Den (o,A))) and

           A9: ( rng p) c= (B1 |^ n) by A5, Th20;

          ( rng p) c= (B2 |^ n) by A4, A9, XBOOLE_1: 1;

          hence contradiction by A6, A7, A8, Th20;

        end;

      end;

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

      hence thesis;

    end;

    theorem :: AOFA_000:23

    

     Th23: for A be Universal_Algebra, B be Subset of A holds for n be Nat holds for x be set holds x in (B |^ (n + 1)) iff x in B or ex o be Element of ( dom the charact of A) st ex p be Element of (the carrier of A * ) st x = (( Den (o,A)) . p) & p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n)

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      defpred P[ Nat] means for x be set st x in (B |^ ($1 + 1)) holds x in B or ex o be Element of ( dom the charact of A) st ex p be Element of (the carrier of A * ) st x = (( Den (o,A)) . p) & p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ $1);

      

       A1: (B |^ 0 ) = B by Th18;

      then

       A2: P[ 0 ] by Th20;

       A3:

      now

        let n be Nat such that

         A4: P[n];

        thus P[(n + 1)]

        proof

          let x be set;

          assume x in (B |^ ((n + 1) + 1));

          then

           A5: x in (B |^ (n + 1)) or ex o be Element of ( dom the charact of A) st ex p be Element of (the carrier of A * ) st x = (( Den (o,A)) . p) & p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ (n + 1)) by Th20;

          now

            given o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

             A6: x = (( Den (o,A)) . p) and

             A7: p in ( dom ( Den (o,A))) and

             A8: ( rng p) c= (B |^ n);

            take o, p;

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

            then (B |^ n) c= (B |^ (n + 1)) by Th21;

            hence x = (( Den (o,A)) . p) & p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ (n + 1)) by A6, A7, A8;

          end;

          hence thesis by A4, A5;

        end;

      end;

      

       A9: for n be Nat holds P[n] from NAT_1:sch 2( A2, A3);

      let n be Nat;

      let x be set;

      B c= (B |^ n) by A1, Th21;

      hence thesis by A9, Th20;

    end;

    scheme :: AOFA_000:sch1

    MaxVal { A() -> non empty set , B() -> set , P[ object, object] } :

ex n be Nat st for x be Element of A() st x in B() holds P[x, n]

      provided

       A1: B() is finite

       and

       A2: for x be Element of A() st x in B() holds ex n be Nat st P[x, n]

       and

       A3: for x be Element of A() holds for n,m be Nat st P[x, n] & n <= m holds P[x, m];

      

       A4: for x be object st x in (A() /\ B()) holds ex y be object st y in NAT & P[x, y]

      proof

        let x be object;

        assume

         A5: x in (A() /\ B());

        then

        reconsider x as Element of A() by XBOOLE_0:def 4;

        x in B() by A5, XBOOLE_0:def 4;

        then

        consider n be Nat such that

         A6: P[x, n] by A2;

        n is Element of NAT by ORDINAL1:def 12;

        hence thesis by A6;

      end;

      consider f be Function such that

       A7: ( dom f) = (A() /\ B()) & ( rng f) c= NAT and

       A8: for x be object st x in (A() /\ B()) holds P[x, (f . x)] from FUNCT_1:sch 6( A4);

      reconsider Z = ( rng f) as finite Subset of NAT by A1, A7, FINSET_1: 8;

      consider n be Nat such that

       A9: for i be Nat st i in Z holds i <= n by STIRL2_1: 56;

      take n;

      let x be Element of A();

      assume x in B();

      then

       A10: x in (A() /\ B()) by XBOOLE_0:def 4;

      then

       A11: (f . x) in ( rng f) by A7, FUNCT_1:def 3;

      then

      reconsider i = (f . x) as Element of NAT by A7;

      i <= n by A9, A11;

      hence thesis by A3, A8, A10;

    end;

    theorem :: AOFA_000:24

    

     Th24: for A be Universal_Algebra, B be Subset of A holds ex C be Subset of A st C = ( union the set of all (B |^ n) where n be Element of NAT ) & C is opers_closed

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      set X = the set of all (B |^ n) where n be Element of NAT ;

      set C = ( union X);

      

       A1: ( union ( bool the carrier of A)) = the carrier of A by ZFMISC_1: 81;

      X c= ( bool the carrier of A)

      proof

        let x be object;

        assume x in X;

        then ex n be Element of NAT st x = (B |^ n);

        hence thesis;

      end;

      then

      reconsider C as Subset of A by A1, ZFMISC_1: 77;

      take C;

      thus C = ( union the set of all (B |^ n) where n be Element of NAT );

      let o be Element of ( Operations A);

      consider s be object such that

       A2: s in ( dom the charact of A) and

       A3: o = (the charact of A . s) by FUNCT_1:def 3;

      reconsider s as OperSymbol of A by A2;

      

       A4: ( dom o) = (( arity o) -tuples_on the carrier of A) by MARGREL1: 22;

      let p be FinSequence of C;

      assume ( len p) = ( arity o);

      then p is Element of ( dom ( Den (s,A))) by A3, A4, FINSEQ_2: 92;

      then

       A5: p in ( dom ( Den (s,A)));

      defpred P[ set, Nat] means $1 in (B |^ $2);

      

       A6: ( rng p) is finite;

      

       A7: for x be Element of A st x in ( rng p) holds ex n be Nat st P[x, n]

      proof

        let x be Element of A;

        assume

         A8: x in ( rng p);

        ( rng p) c= C by FINSEQ_1:def 4;

        then

        consider Y be set such that

         A9: x in Y and

         A10: Y in X by A8, TARSKI:def 4;

        consider n be Element of NAT such that

         A11: Y = (B |^ n) by A10;

        take n;

        thus thesis by A9, A11;

      end;

      

       A12: for x be Element of A holds for n,m be Nat st P[x, n] & n <= m holds P[x, m]

      proof

        let x be Element of A;

        let n,m be Nat;

        assume

         A13: P[x, n];

        assume n <= m;

        then (B |^ n) c= (B |^ m) by Th21;

        hence thesis by A13;

      end;

      consider n be Nat such that

       A14: for x be Element of A st x in ( rng p) holds P[x, n] from MaxVal( A6, A7, A12);

      ( rng p) c= (B |^ n) by A14;

      then (( Den (s,A)) . p) in { (( Den (a,A)) . r) where a be Element of ( dom the charact of A), r be Element of (the carrier of A * ) : r in ( dom ( Den (a,A))) & ( rng r) c= (B |^ n) } by A5;

      then (o . p) in ((B |^ n) \/ { (( Den (a,A)) . r) where a be Element of ( dom the charact of A), r be Element of (the carrier of A * ) : r in ( dom ( Den (a,A))) & ( rng r) c= (B |^ n) }) & (n + 1) in NAT by A3, XBOOLE_0:def 3;

      then

       A15: (o . p) in (B |^ (n + 1)) by Th19;

      (B |^ (n + 1)) in X;

      hence thesis by A15, TARSKI:def 4;

    end;

    theorem :: AOFA_000:25

    

     Th25: for A be Universal_Algebra, B,C be Subset of A st C is opers_closed & B c= C holds ( union the set of all (B |^ n) where n be Element of NAT ) c= C

    proof

      let A be Universal_Algebra;

      let B,C be Subset of A;

      assume

       A1: C is opers_closed;

      assume

       A2: B c= C;

      let z be object;

      assume z in ( union the set of all (B |^ n) where n be Element of NAT );

      then

      consider Y be set such that

       A3: z in Y and

       A4: Y in the set of all (B |^ n) where n be Element of NAT by TARSKI:def 4;

      consider n be Element of NAT such that

       A5: Y = (B |^ n) by A4;

      defpred P[ Nat] means (B |^ $1) c= C;

      

       A6: P[ 0 ] by A2, Th18;

       A7:

      now

        let n be Nat;

        assume

         A8: P[n];

        thus P[(n + 1)]

        proof

          let x be object;

          assume that

           A9: x in (B |^ (n + 1)) and

           A10: x nin C;

          x in ((B |^ n) \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) }) by A9, Th19;

          then x in (B |^ n) or x in { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) } by XBOOLE_0:def 3;

          then

          consider o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

           A11: x = (( Den (o,A)) . p) and

           A12: p in ( dom ( Den (o,A))) and

           A13: ( rng p) c= (B |^ n) by A8, A10;

          ( rng p) c= C by A8, A13, XBOOLE_1: 1;

          then

          reconsider p as FinSequence of C by FINSEQ_1:def 4;

          reconsider oo = ( Den (o,A)) as Element of ( Operations A);

          

           A14: ( len p) = ( arity oo) by A12, MARGREL1:def 25;

          C is_closed_on oo by A1;

          hence thesis by A10, A11, A14;

        end;

      end;

      for n be Nat holds P[n] from NAT_1:sch 2( A6, A7);

      then P[n];

      hence thesis by A3, A5;

    end;

    definition

      let A be Universal_Algebra;

      :: AOFA_000:def9

      func Generators A -> Subset of A equals (the carrier of A \ ( union the set of all ( rng o) where o be Element of ( Operations A)));

      coherence ;

    end

    theorem :: AOFA_000:26

    

     Th26: for A be Universal_Algebra, a be Element of A holds a in ( Generators A) iff not ex o be Element of ( Operations A) st a in ( rng o)

    proof

      let A be Universal_Algebra;

      set Z = the set of all ( rng o) where o be Element of ( Operations A);

      let a be Element of A;

      hereby

        assume a in ( Generators A);

        then

         A1: a nin ( union Z) by XBOOLE_0:def 5;

        given o be Element of ( Operations A) such that

         A2: a in ( rng o);

        ( rng o) in Z;

        hence contradiction by A1, A2, TARSKI:def 4;

      end;

      assume

       A3: not ex o be Element of ( Operations A) st a in ( rng o);

      assume a nin ( Generators A);

      then a in ( union Z) by XBOOLE_0:def 5;

      then

      consider X be set such that

       A4: a in X and

       A5: X in Z by TARSKI:def 4;

      ex o be Element of ( Operations A) st X = ( rng o) by A5;

      hence contradiction by A3, A4;

    end;

    theorem :: AOFA_000:27

    for A be Universal_Algebra holds for B be Subset of A st B is opers_closed holds ( Constants A) c= B

    proof

      let A be Universal_Algebra;

      let B be Subset of A such that

       A1: B is opers_closed;

      let x be object;

      assume x in ( Constants A);

      then

      consider a be Element of A such that

       A2: x = a and

       A3: ex o be Element of ( Operations A) st ( arity o) = 0 & a in ( rng o);

      consider o be Element of ( Operations A) such that

       A4: ( arity o) = 0 and

       A5: a in ( rng o) by A3;

      consider s be object such that

       A6: s in ( dom o) and

       A7: a = (o . s) by A5, FUNCT_1:def 3;

      

       A8: ( dom o) = ( 0 -tuples_on the carrier of A) by A4, MARGREL1: 22;

      reconsider s as Element of (the carrier of A * ) by A6;

      

       A9: ( len s) = 0 by A6, A8;

      s = {} by A6, A8;

      then ( rng s) c= B;

      then

       A10: s is FinSequence of B by FINSEQ_1:def 4;

      B is_closed_on o by A1;

      hence thesis by A2, A4, A7, A9, A10;

    end;

    theorem :: AOFA_000:28

    

     Th28: for A be Universal_Algebra st ( Constants A) = {} holds ( {} A) is opers_closed

    proof

      let A be Universal_Algebra such that

       A1: ( Constants A) = {} ;

      let o be Element of ( Operations A);

      let s be FinSequence of ( {} A);

      assume

       A2: ( len s) = ( arity o);

      

       A3: s is Element of (( arity o) -tuples_on the carrier of A) by A2, FINSEQ_2: 92;

      ( dom o) = (( arity o) -tuples_on the carrier of A) by MARGREL1: 22;

      then

       A4: (o . s) in ( rng o) by A3, FUNCT_1:def 3;

      then

      reconsider a = (o . s) as Element of A;

      a nin ( Constants A) by A1;

      then s <> {} by A2, A4;

      hence thesis;

    end;

    theorem :: AOFA_000:29

    for A be Universal_Algebra st ( Constants A) = {} holds for G be GeneratorSet of A holds G <> {}

    proof

      let A be Universal_Algebra such that

       A1: ( Constants A) = {} ;

      let G be GeneratorSet of A;

      assume

       A2: G = {} ;

      then G = ( {} A);

      then G is opers_closed by A1, Th28;

      hence thesis by A2, FREEALG:def 4;

    end;

    theorem :: AOFA_000:30

    

     Th30: for A be Universal_Algebra holds for G be Subset of A holds G is GeneratorSet of A iff for I be Element of A holds ex n be Nat st I in (G |^ n)

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      set X = the set of all (B |^ n) where n be Element of NAT ;

      consider C be Subset of A such that

       A1: C = ( union X) and

       A2: C is opers_closed by Th24;

      (B |^ 0 ) = B by Th18;

      then

       A3: B in X;

      thus B is GeneratorSet of A implies for I be Element of A holds ex n be Nat st I in (B |^ n)

      proof

        assume for D be Subset of A st D is opers_closed & B c= D holds D = the carrier of A;

        then

         A4: C = the carrier of A by A1, A2, A3, ZFMISC_1: 74;

        let I be Element of A;

        consider Y be set such that

         A5: I in Y and

         A6: Y in X by A1, A4, TARSKI:def 4;

        ex n be Element of NAT st Y = (B |^ n) by A6;

        hence thesis by A5;

      end;

      assume

       A7: for I be Element of A holds ex n be Nat st I in (B |^ n);

      let D be Subset of A;

      assume that

       A8: D is opers_closed and

       A9: B c= D;

      

       A10: ( union X) c= D by A8, A9, Th25;

      thus D c= the carrier of A;

      let x be object;

      assume x in the carrier of A;

      then

      reconsider I = x as Element of A;

      consider n be Nat such that

       A11: I in (B |^ n) by A7;

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

      (B |^ n) in X;

      then I in ( union X) by A11, TARSKI:def 4;

      hence thesis by A10;

    end;

    theorem :: AOFA_000:31

    

     Th31: for A be Universal_Algebra holds for B be Subset of A holds for G be GeneratorSet of A st G c= B holds B is GeneratorSet of A

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      let G be GeneratorSet of A such that

       A1: G c= B;

      now

        let a be Element of A;

        consider n be Nat such that

         A2: a in (G |^ n) by Th30;

        take n;

        (G |^ n) c= (B |^ n) by A1, Th22;

        hence a in (B |^ n) by A2;

      end;

      hence thesis by Th30;

    end;

    theorem :: AOFA_000:32

    

     Th32: for A be Universal_Algebra holds for G be GeneratorSet of A holds for a be Element of A st not ex o be Element of ( Operations A) st a in ( rng o) holds a in G

    proof

      let A be Universal_Algebra;

      let G be GeneratorSet of A;

      let a be Element of A;

      assume

       A1: for o be Element of ( Operations A) holds a nin ( rng o);

      defpred P[ Nat] means a nin (G |^ $1);

      assume a nin G;

      then

       A2: P[ 0 ] by Th18;

       A3:

      now

        let n be Nat;

        assume

         A4: P[n];

        thus P[(n + 1)]

        proof

          assume a in (G |^ (n + 1));

          then a in ((G |^ n) \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (G |^ n) }) by Th19;

          then a in { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (G |^ n) } by A4, XBOOLE_0:def 3;

          then

          consider o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

           A5: a = (( Den (o,A)) . p) and

           A6: p in ( dom ( Den (o,A))) and ( rng p) c= (G |^ n);

          a in ( rng ( Den (o,A))) by A5, A6, FUNCT_1:def 3;

          hence contradiction by A1;

        end;

      end;

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

      hence contradiction by Th30;

    end;

    theorem :: AOFA_000:33

    for A be Universal_Algebra, G be GeneratorSet of A holds ( Generators A) c= G

    proof

      let A be Universal_Algebra;

      let G be GeneratorSet of A;

      let a be object;

      assume

       A1: a in ( Generators A);

      then

       A2: a nin ( union the set of all ( rng o) where o be Element of ( Operations A)) by XBOOLE_0:def 5;

      reconsider I = a as Element of A by A1;

      assume a nin G;

      then

      consider o0 be Element of ( Operations A) such that

       A3: I in ( rng o0) by Th32;

      ( rng o0) in the set of all ( rng o) where o be Element of ( Operations A);

      hence contradiction by A2, A3, TARSKI:def 4;

    end;

    theorem :: AOFA_000:34

    

     Th34: for A be free Universal_Algebra holds for G be free GeneratorSet of A holds G = ( Generators A)

    proof

      let A be free Universal_Algebra;

      let G be free GeneratorSet of A;

      reconsider S = ( signature A) as non empty FinSequence of NAT by MSUALG_1: 4;

      consider B be Universal_Algebra such that

       A1: the carrier of B = NAT and

       A2: ( signature B) = S and

       A3: for i,j be Nat st i in ( dom S) & j = (S . i) holds (the charact of B . i) = ((j -tuples_on NAT ) --> i) by Th14;

      reconsider f = (G --> 0 ) as Function of G, the carrier of B by A1;

      (A,B) are_similar by A2;

      then

      consider h be Function of A, B such that

       A4: h is_homomorphism and

       A5: (h | G) = f by FREEALG:def 5;

      

       A6: ( len S) = ( len the charact of B) by A2, UNIALG_1:def 4;

      

       A7: ( len S) = ( len the charact of A) by UNIALG_1:def 4;

      

       A8: ( dom S) = ( dom the charact of B) by A6, FINSEQ_3: 29;

      

       A9: ( dom S) = ( dom the charact of A) by A7, FINSEQ_3: 29;

      thus G c= ( Generators A)

      proof

        let a be object;

        assume

         A10: a in G;

        then

        reconsider I = a as Element of A;

        assume not thesis;

        then I in ( union the set of all ( rng o) where o be Element of ( Operations A)) by XBOOLE_0:def 5;

        then

        consider Y be set such that

         A11: I in Y and

         A12: Y in the set of all ( rng o) where o be Element of ( Operations A) by TARSKI:def 4;

        consider o be Element of ( Operations A) such that

         A13: Y = ( rng o) by A12;

        consider i be object such that

         A14: i in ( dom the charact of A) and

         A15: o = (the charact of A . i) by FUNCT_1:def 3;

        reconsider i as Element of NAT by A14;

        reconsider j = (S . i) as Element of NAT ;

        reconsider o2 = (the charact of B . i) as Element of ( Operations B) by A8, A9, A14, FUNCT_1:def 3;

        consider x be object such that

         A16: x in ( dom o) and

         A17: I = (o . x) by A11, A13, FUNCT_1:def 3;

        

         A18: ( dom o) = (( arity o) -tuples_on the carrier of A) by MARGREL1: 22;

        reconsider x as FinSequence of A by A16, FINSEQ_1:def 11;

        reconsider hx = (h * x) as FinSequence of NAT by A1;

        ( len (h * x)) = ( len x) by FINSEQ_2: 33

        .= ( arity o) by A16, A18, CARD_1:def 7

        .= j by A9, A14, A15, UNIALG_1:def 4;

        then

         A19: hx is Element of (j -tuples_on NAT ) by FINSEQ_2: 92;

         0 = (f . I) by A10, FUNCOP_1: 7

        .= (h . (o . x)) by A5, A10, A17, FUNCT_1: 49

        .= (o2 . (h * x)) by A4, A14, A15, A16, ALG_1:def 1

        .= (((j -tuples_on NAT ) --> i) . (h * x)) by A3, A9, A14

        .= i by A19, FUNCOP_1: 7;

        hence contradiction by A14, FINSEQ_3: 25;

      end;

      let a be object;

      assume

       A20: a in ( Generators A);

      then

       A21: a nin ( union the set of all ( rng o) where o be Element of ( Operations A)) by XBOOLE_0:def 5;

      reconsider I = a as Element of A by A20;

      assume a nin G;

      then

      consider o0 be Element of ( Operations A) such that

       A22: I in ( rng o0) by Th32;

      ( rng o0) in the set of all ( rng o) where o be Element of ( Operations A);

      hence contradiction by A21, A22, TARSKI:def 4;

    end;

    registration

      let A be free Universal_Algebra;

      cluster ( Generators A) -> free;

      coherence

      proof

        set G = the free GeneratorSet of A;

        ( Generators A) = G by Th34;

        hence thesis;

      end;

    end

    definition

      let A be free Universal_Algebra;

      :: original: Generators

      redefine

      func Generators A -> GeneratorSet of A ;

      coherence

      proof

        set G = the free GeneratorSet of A;

        ( Generators A) = G by Th34;

        hence thesis;

      end;

    end

    registration

      let A,B be set;

      cluster [:A, B:] -> disjoint_with_NAT;

      coherence

      proof

        now

          let z be object;

          assume that

           A1: z in [:A, B:] and

           A2: z in NAT ;

          ex a,b be object st a in A & b in B & z = [a, b] by A1, ZFMISC_1:def 2;

          hence contradiction by A2;

        end;

        hence [:A, B:] misses NAT by XBOOLE_0: 3;

      end;

    end

    theorem :: AOFA_000:35

    for A be free Universal_Algebra holds for G be GeneratorSet of A holds for B be Universal_Algebra holds for h1,h2 be Function of A, B st h1 is_homomorphism & h2 is_homomorphism & (h1 | G) = (h2 | G) holds h1 = h2

    proof

      let A be free Universal_Algebra;

      let G be GeneratorSet of A;

      let B be Universal_Algebra;

      let h1,h2 be Function of A, B such that

       A1: h1 is_homomorphism and

       A2: h2 is_homomorphism and

       A3: (h1 | G) = (h2 | G);

      defpred P[ Nat] means for a be Element of A st a in (G |^ $1) holds (h1 . a) = (h2 . a);

      

       A4: P[ 0 ]

      proof

        let a be Element of A;

        assume a in (G |^ 0 );

        then

         A5: a in G by Th18;

        then (h1 . a) = ((h1 | G) . a) by FUNCT_1: 49;

        hence thesis by A3, A5, FUNCT_1: 49;

      end;

      

       A6: for n be Nat st P[n] holds P[(n + 1)]

      proof

        let n be Nat such that

         A7: P[n];

        let a be Element of A;

        assume that

         A8: a in (G |^ (n + 1)) and

         A9: (h1 . a) <> (h2 . a);

        a nin (G |^ n) by A7, A9;

        then

        consider o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

         A10: a = (( Den (o,A)) . p) and

         A11: p in ( dom ( Den (o,A))) and

         A12: ( rng p) c= (G |^ n) by A8, Th20;

        (A,B) are_similar by A1, ALG_1:def 1;

        then ( len the charact of A) = ( len the charact of B) by UNIALG_2: 1;

        then

        reconsider o9 = o as Element of ( dom the charact of B) by FINSEQ_3: 29;

        

         A13: ( Operations A) = ( rng the charact of A);

        

         A14: ( Operations B) = ( rng the charact of B);

        then

         A15: (h1 . a) = (( Den (o9,B)) . (h1 * p)) by A1, A10, A11, A13, ALG_1:def 1;

        

         A16: (h2 . a) = (( Den (o9,B)) . (h2 * p)) by A2, A10, A11, A13, A14, ALG_1:def 1;

        now

          

           A17: ( dom h1) = the carrier of A by FUNCT_2:def 1;

          ( dom h2) = the carrier of A by FUNCT_2:def 1;

          hence (G |^ n) c= ( dom h1) & (G |^ n) c= ( dom h2) by A17;

          let x be set;

          assume x in (G |^ n);

          hence (h1 . x) = (h2 . x) by A7;

        end;

        hence thesis by A9, A12, A15, A16, Th1;

      end;

      

       A18: for n be Nat holds P[n] from NAT_1:sch 2( A4, A6);

      now

        let a be Element of A;

        ex n be Nat st a in (G |^ n) by Th30;

        hence (h1 . a) = (h2 . a) by A18;

      end;

      hence thesis by FUNCT_2: 63;

    end;

    

     Lm2: for A be free Universal_Algebra holds for o1,o2 be OperSymbol of A holds for p1,p2 be FinSequence st p1 in ( dom ( Den (o1,A))) & p2 in ( dom ( Den (o2,A))) holds (( Den (o1,A)) . p1) = (( Den (o2,A)) . p2) implies o1 = o2

    proof

      let A be free Universal_Algebra;

      set G = the free GeneratorSet of A;

      let o1,o2 be OperSymbol of A;

      let p1,p2 be FinSequence such that

       A1: p1 in ( dom ( Den (o1,A))) and

       A2: p2 in ( dom ( Den (o2,A))) and

       A3: (( Den (o1,A)) . p1) = (( Den (o2,A)) . p2);

      reconsider S = ( signature A) as non empty FinSequence of NAT by MSUALG_1: 4;

      consider B be Universal_Algebra such that

       A4: the carrier of B = NAT and

       A5: ( signature B) = S and

       A6: for i,j be Nat st i in ( dom S) & j = (S . i) holds (the charact of B . i) = ((j -tuples_on NAT ) --> i) by Th14;

      reconsider f = (G --> 0 ) as Function of G, the carrier of B by A4;

      (A,B) are_similar by A5;

      then

      consider h be Function of A, B such that

       A7: h is_homomorphism and (h | G) = f by FREEALG:def 5;

      

       A8: ( len S) = ( len the charact of B) by A5, UNIALG_1:def 4;

      

       A9: ( len S) = ( len the charact of A) by UNIALG_1:def 4;

      

       A10: ( dom S) = ( dom the charact of B) by A8, FINSEQ_3: 29;

      

       A11: ( dom S) = ( dom the charact of A) by A9, FINSEQ_3: 29;

      reconsider b1 = o1, b2 = o2 as OperSymbol of B by A8, A9, FINSEQ_3: 29;

      reconsider n1 = o1, n2 = o2 as Element of NAT ;

      reconsider j1 = (S . n1), j2 = (S . n2) as Element of NAT ;

      reconsider x1 = p1, x2 = p2 as FinSequence of A by A1, A2, FINSEQ_1:def 11;

      reconsider h1 = (h * x1), h2 = (h * x2) as FinSequence of NAT by A4;

      reconsider oo1 = ( Den (o1,A)), oo2 = ( Den (o2,A)) as Element of ( Operations A);

      

       A12: ( dom oo1) = (( arity oo1) -tuples_on the carrier of A) by MARGREL1: 22;

      

       A13: ( dom oo2) = (( arity oo2) -tuples_on the carrier of A) by MARGREL1: 22;

      ( len x1) = ( arity oo1) by A1, A12, CARD_1:def 7

      .= j1 by A11, UNIALG_1:def 4;

      then ( len h1) = j1 by FINSEQ_2: 33;

      then

       A14: h1 is Element of (j1 -tuples_on NAT ) by FINSEQ_2: 92;

      ( len x2) = ( arity oo2) by A2, A13, CARD_1:def 7

      .= j2 by A11, UNIALG_1:def 4;

      then ( len h2) = j2 by FINSEQ_2: 33;

      then

       A15: h2 is Element of (j2 -tuples_on NAT ) by FINSEQ_2: 92;

      

       A16: ( Den (o1,A)) is Element of ( Operations A);

      

       A17: ( Den (b1,B)) is Element of ( Operations B);

      then

       A18: (h . (( Den (o1,A)) . x1)) = (( Den (b1,B)) . h1) by A1, A7, A16, ALG_1:def 1;

      

       A19: (h . (( Den (o2,A)) . x2)) = (( Den (b2,B)) . h2) by A2, A7, A16, A17, ALG_1:def 1;

      

       A20: ( Den (b1,B)) = ((j1 -tuples_on NAT ) --> n1) by A6, A10;

      

       A21: ( Den (b2,B)) = ((j2 -tuples_on NAT ) --> n2) by A6, A10;

      (( Den (b1,B)) . h1) = n1 by A14, A20, FUNCOP_1: 7;

      hence thesis by A3, A15, A18, A19, A21, FUNCOP_1: 7;

    end;

    theorem :: AOFA_000:36

    

     Th36: for A be free Universal_Algebra holds for o1,o2 be OperSymbol of A holds for p1,p2 be FinSequence st p1 in ( dom ( Den (o1,A))) & p2 in ( dom ( Den (o2,A))) holds (( Den (o1,A)) . p1) = (( Den (o2,A)) . p2) implies o1 = o2 & p1 = p2

    proof

      let A be free Universal_Algebra;

      set G = the free GeneratorSet of A;

      let o1,o2 be OperSymbol of A;

      let p1,p2 be FinSequence such that

       A1: p1 in ( dom ( Den (o1,A))) and

       A2: p2 in ( dom ( Den (o2,A))) and

       A3: (( Den (o1,A)) . p1) = (( Den (o2,A)) . p2);

      thus

       A4: o1 = o2 by A1, A2, A3, Lm2;

      reconsider S = ( signature A) as non empty FinSequence of NAT by MSUALG_1: 4;

      set G9 = (G \/ {the carrier of A});

      reconsider G9 as non empty set;

      deffunc F( object) = ( root-tree [ 0 , $1]);

      consider g be Function such that

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

      set X = [: { 0 }, G9:];

      set B = ( FreeUnivAlgNSG (S,X));

      

       A6: ( signature B) = S by FREEALG: 4;

      

       A7: ( Terminals ( DTConUA (S, [: { 0 }, G9:]))) = [: { 0 }, G9:] by FREEALG: 3;

      ( rng g) c= ( FreeGenSetNSG (S, [: { 0 }, G9:]))

      proof

        let b be object;

        assume b in ( rng g);

        then

        consider a be object such that

         A8: a in ( dom g) and

         A9: b = (g . a) by FUNCT_1:def 3;

        reconsider a as Element of A by A5, A8;

        

         A10: a in G9 by A5, A8, XBOOLE_0:def 3;

         0 in { 0 } by TARSKI:def 1;

        then

         A11: [ 0 , a] in [: { 0 }, G9:] by A10, ZFMISC_1: 87;

        then

        reconsider s = [ 0 , a] as Symbol of ( DTConUA (S, [: { 0 }, G9:])) by A7;

        ( root-tree s) in ( FreeGenSetNSG (S, [: { 0 }, G9:])) by A7, A11;

        hence thesis by A5, A8, A9;

      end;

      then

      reconsider g as Function of G, the carrier of B by A5, FUNCT_2: 2, XBOOLE_1: 1;

      ( signature B) = S by FREEALG: 4;

      then (A,B) are_similar ;

      then

      consider h be Function of A, B such that

       A12: h is_homomorphism and

       A13: (h | G) = g by FREEALG:def 5;

      defpred G[ Nat] means for a1,a2 be set st a1 in (G |^ $1) & a2 in (G |^ $1) & (h . a1) = (h . a2) holds a1 = a2;

      

       A14: (G |^ 0 ) = G by Th18;

      

       A15: ( len S) = ( len the charact of B) by A6, UNIALG_1:def 4;

      

       A16: ( len S) = ( len the charact of A) by UNIALG_1:def 4;

      

       A17: ( dom S) = ( dom the charact of B) by A15, FINSEQ_3: 29;

       A18:

      now

        let o be Element of ( dom the charact of A);

        let p be FinSequence of A such that

         A19: p in ( dom ( Den (o,A)));

        reconsider q = p as FinSequence of A;

        reconsider hq = (h * q) as FinSequence of B;

        reconsider op = ( Den (o,A)) as Element of ( Operations A);

        reconsider on = o as Element of NAT ;

        reconsider o9 = on as OperSymbol of B by A15, A16, FINSEQ_3: 29;

        reconsider op9 = ( Den (o9,B)) as Element of ( Operations B);

        reconsider j = (S . o9) as Element of NAT ;

        ( dom op) = (( arity op) -tuples_on the carrier of A) by MARGREL1: 22;

        

        then

         A20: ( len p) = ( arity op) by A19, CARD_1:def 7

        .= j by A17, UNIALG_1:def 4;

        hence ( len p) = (S . o) & ( len (h * p)) = (S . o) by FINSEQ_2: 33;

        

         A21: (h . (op . q)) = (op9 . hq) by A12, A19, ALG_1:def 1;

        

         A22: ( In (o9,( dom the charact of B))) = o9;

        ( len hq) = (S . o9) by A20, FINSEQ_2: 33;

        hence (h . (( Den (o,A)) . p)) = (o -tree (h * p)) by A17, A21, A22, Th17;

      end;

      

       A23: G[ 0 ]

      proof

        let a1,a2 be set;

        assume that

         A24: a1 in (G |^ 0 ) and

         A25: a2 in (G |^ 0 ) and

         A26: (h . a1) = (h . a2);

        

         A27: (h . a1) = (g . a1) by A13, A14, A24, FUNCT_1: 49;

        

         A28: (h . a2) = (g . a2) by A13, A14, A25, FUNCT_1: 49;

        

         A29: (h . a1) = F(a1) by A5, A14, A24, A27;

        (h . a2) = F(a2) by A5, A14, A25, A28;

        then [ 0 , a1] = [ 0 , a2] by A26, A29, TREES_4: 4;

        hence thesis by XTUPLE_0: 1;

      end;

       A30:

      now

        let o be Element of ( dom the charact of A);

        let p be Element of (the carrier of A * );

        assume p in ( dom ( Den (o,A)));

        then

         A31: (h . (( Den (o,A)) . p)) = (o -tree (h * p)) by A18;

        let x be set;

        assume

         A32: x in G;

        

        then

         A33: (h . x) = (g . x) by A13, FUNCT_1: 49

        .= F(x) by A5, A32;

        assume (h . (( Den (o,A)) . p)) = (h . x);

        hence contradiction by A31, A33, TREES_4: 17;

      end;

      

       A34: for k be Nat st G[k] holds G[(k + 1)]

      proof

        let k be Nat such that

         A35: G[k];

        defpred Gk[ set] means ex o be Element of ( dom the charact of A) st ex p be Element of (the carrier of A * ) st $1 = (( Den (o,A)) . p) & p in ( dom ( Den (o,A))) & ( rng p) c= (G |^ k);

        let a1,a2 be set;

        assume that

         A36: a1 in (G |^ (k + 1)) and

         A37: a2 in (G |^ (k + 1)) and

         A38: (h . a1) = (h . a2);

        per cases by A36, A37, Th23;

          suppose

           A39: a1 in G & a2 in G;

          then

           A40: (h . a1) = (g . a1) by A13, FUNCT_1: 49;

          

           A41: (h . a2) = (g . a2) by A13, A39, FUNCT_1: 49;

          

           A42: (h . a1) = F(a1) by A5, A39, A40;

          (h . a2) = F(a2) by A5, A39, A41;

          then [ 0 , a1] = [ 0 , a2] by A38, A42, TREES_4: 4;

          hence thesis by XTUPLE_0: 1;

        end;

          suppose

           A43: Gk[a1] & Gk[a2];

          then

          consider b1 be Element of ( dom the charact of A), q1 be Element of (the carrier of A * ) such that

           A44: a1 = (( Den (b1,A)) . q1) and

           A45: q1 in ( dom ( Den (b1,A))) and

           A46: ( rng q1) c= (G |^ k);

          consider b2 be Element of ( dom the charact of A), q2 be Element of (the carrier of A * ) such that

           A47: a2 = (( Den (b2,A)) . q2) and

           A48: q2 in ( dom ( Den (b2,A))) and

           A49: ( rng q2) c= (G |^ k) by A43;

          

           A50: (b1 -tree (h * q1)) = (h . a1) by A18, A44, A45

          .= (b2 -tree (h * q2)) by A18, A38, A47, A48;

          then

           A51: b1 = b2 by TREES_4: 15;

          

           A52: (h * q1) = (h * q2) by A50, TREES_4: 15;

          

           A53: ( len q1) = (S . b1) by A18, A45;

          

           A54: ( len q2) = (S . b2) by A18, A48;

          

           A55: ( dom q1) = ( Seg ( len q1)) by FINSEQ_1:def 3;

          

           A56: ( dom q2) = ( Seg ( len q1)) by A51, A53, A54, FINSEQ_1:def 3;

          now

            let j be Nat;

            assume

             A57: j in ( dom q1);

            then

             A58: (q1 . j) in ( rng q1) by FUNCT_1: 3;

            

             A59: (q2 . j) in ( rng q2) by A55, A56, A57, FUNCT_1: 3;

            

             A60: (h . (q1 . j)) = ((h * q1) . j) by A57, FUNCT_1: 13;

            (h . (q2 . j)) = ((h * q2) . j) by A55, A56, A57, FUNCT_1: 13;

            hence (q1 . j) = (q2 . j) by A35, A46, A49, A52, A58, A59, A60;

          end;

          hence thesis by A44, A47, A51, A55, A56, FINSEQ_1: 13;

        end;

          suppose a1 in G & Gk[a2] or Gk[a1] & a2 in G;

          hence thesis by A30, A38;

        end;

      end;

      

       A61: for k be Nat holds G[k] from NAT_1:sch 2( A23, A34);

      reconsider q1 = p1, q2 = p2 as FinSequence of A by A1, A2, FINSEQ_1:def 11;

      (o1 -tree (h * q1)) = (h . (( Den (o1,A)) . p1)) by A1, A18

      .= (o2 -tree (h * q2)) by A2, A3, A18;

      then

       A62: (h * p1) = (h * p2) by TREES_4: 15;

      

       A63: ( len q1) = (S . o1) by A1, A18;

      

       A64: ( len q2) = (S . o2) by A2, A18;

      

       A65: ( dom q1) = ( Seg ( len q1)) by FINSEQ_1:def 3;

      

       A66: ( dom q2) = ( Seg ( len q1)) by A4, A63, A64, FINSEQ_1:def 3;

      now

        let j be Nat;

        assume

         A67: j in ( dom q1);

        then

         A68: (q1 . j) in ( rng q1) by FUNCT_1: 3;

        

         A69: (q2 . j) in ( rng q2) by A65, A66, A67, FUNCT_1: 3;

        consider n1 be Nat such that

         A70: (q1 . j) in (G |^ n1) by A68, Th30;

        consider n2 be Nat such that

         A71: (q2 . j) in (G |^ n2) by A69, Th30;

        reconsider k = ( max (n1,n2)) as Nat by TARSKI: 1;

        

         A72: (G |^ n1) c= (G |^ k) by Th21, XXREAL_0: 25;

        

         A73: (G |^ n2) c= (G |^ k) by Th21, XXREAL_0: 25;

        

         A74: (h . (q1 . j)) = ((h * q1) . j) by A67, FUNCT_1: 13;

        (h . (q2 . j)) = ((h * q2) . j) by A65, A66, A67, FUNCT_1: 13;

        hence (q1 . j) = (q2 . j) by A61, A62, A70, A71, A72, A73, A74;

      end;

      hence thesis by A65, A66;

    end;

    theorem :: AOFA_000:37

    for A be free Universal_Algebra holds for o1,o2 be Element of ( Operations A) holds for p1,p2 be FinSequence st p1 in ( dom o1) & p2 in ( dom o2) holds (o1 . p1) = (o2 . p2) implies o1 = o2 & p1 = p2

    proof

      let A be free Universal_Algebra;

      let o1,o2 be Element of ( Operations A);

      consider a1 be object such that

       A1: a1 in ( dom the charact of A) and

       A2: o1 = (the charact of A . a1) by FUNCT_1:def 3;

      consider a2 be object such that

       A3: a2 in ( dom the charact of A) and

       A4: o2 = (the charact of A . a2) by FUNCT_1:def 3;

      reconsider a1, a2 as OperSymbol of A by A1, A3;

      

       A5: o1 = ( Den (a1,A)) by A2;

      

       A6: o2 = ( Den (a2,A)) by A4;

      let p1,p2 be FinSequence;

      assume that

       A7: p1 in ( dom o1) and

       A8: p2 in ( dom o2) and

       A9: (o1 . p1) = (o2 . p2);

      thus thesis by A5, A6, A7, A8, A9, Th36;

    end;

    theorem :: AOFA_000:38

    

     Th38: for A be free Universal_Algebra holds for o be OperSymbol of A holds for p be FinSequence st p in ( dom ( Den (o,A))) holds for a be set st a in ( rng p) holds a <> (( Den (o,A)) . p)

    proof

      let A be free Universal_Algebra;

      let o be OperSymbol of A;

      let p be FinSequence such that

       A1: p in ( dom ( Den (o,A)));

      let a be set such that

       A2: a in ( rng p) and

       A3: a = (( Den (o,A)) . p);

      reconsider p as FinSequence of A by A1, FINSEQ_1:def 11;

      a in ( rng p) by A2;

      then

      reconsider a as Element of A;

      set G = ( Generators A);

      consider n be Nat such that

       A4: a in (G |^ n) by Th30;

      defpred P[ Nat] means ex a be Element of A, o be OperSymbol of A st ex p be FinSequence of A st p in ( dom ( Den (o,A))) & a in ( rng p) & a = (( Den (o,A)) . p) & a in (G |^ $1);

      a in ( rng p) by A2;

      then

       A5: ex n be Nat st P[n] by A1, A3, A4;

      consider n be Nat such that

       A6: P[n] & for m be Nat st P[m] holds n <= m from NAT_1:sch 5( A5);

      consider a be Element of A, o be OperSymbol of A, p be FinSequence of A such that

       A7: p in ( dom ( Den (o,A))) and

       A8: a in ( rng p) and

       A9: a = (( Den (o,A)) . p) and

       A10: a in (G |^ n) by A6;

      reconsider op = ( Den (o,A)) as Element of ( Operations A);

      a in ( rng op) by A7, A9, FUNCT_1: 3;

      then a nin G by Th26;

      then n <> 0 by A10, Th18;

      then

      consider k be Nat such that

       A11: n = (k + 1) by NAT_1: 6;

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

      

       A12: k < n by A11, NAT_1: 13;

      then a nin (G |^ k) by A6, A7, A8, A9;

      then

      consider o9 be Element of ( dom the charact of A), p9 be Element of (the carrier of A * ) such that

       A13: a = (( Den (o9,A)) . p9) and

       A14: p9 in ( dom ( Den (o9,A))) and

       A15: ( rng p9) c= (G |^ k) by A10, A11, Th20;

      p9 = p by A7, A9, A13, A14, Th36;

      hence contradiction by A6, A7, A8, A9, A12, A15;

    end;

    theorem :: AOFA_000:39

    

     Th39: for A be free Universal_Algebra holds for G be GeneratorSet of A holds for o be OperSymbol of A st for o9 be OperSymbol of A, p be FinSequence st p in ( dom ( Den (o9,A))) & (( Den (o9,A)) . p) in G holds o9 <> o holds for p be FinSequence st p in ( dom ( Den (o,A))) holds for n be Nat st (( Den (o,A)) . p) in (G |^ (n + 1)) holds ( rng p) c= (G |^ n)

    proof

      let A be free Universal_Algebra;

      let G be GeneratorSet of A;

      let o be OperSymbol of A such that

       A1: for o9 be OperSymbol of A, p be FinSequence st p in ( dom ( Den (o9,A))) & (( Den (o9,A)) . p) in G holds o9 <> o;

      let p be FinSequence such that

       A2: p in ( dom ( Den (o,A)));

      let n be Nat such that

       A3: (( Den (o,A)) . p) in (G |^ (n + 1)) and

       A4: not ( rng p) c= (G |^ n);

      reconsider p as FinSequence of A by A2, FINSEQ_1:def 11;

      defpred P[ Nat] means ex p be FinSequence of A st p in ( dom ( Den (o,A))) & (( Den (o,A)) . p) in (G |^ ($1 + 1)) & not ( rng p) c= (G |^ $1);

      p is FinSequence of A;

      then

       A5: ex n be Nat st P[n] by A2, A3, A4;

      consider n be Nat such that

       A6: P[n] & for m be Nat st P[m] holds n <= m from NAT_1:sch 5( A5);

      consider p be FinSequence of A such that

       A7: p in ( dom ( Den (o,A))) and

       A8: (( Den (o,A)) . p) in (G |^ (n + 1)) and

       A9: not ( rng p) c= (G |^ n) by A6;

      set a = (( Den (o,A)) . p);

      now

        assume

         A10: a in (G |^ n);

        a nin G by A1, A7;

        then n <> 0 by A10, Th18;

        then

        consider k be Nat such that

         A11: n = (k + 1) by NAT_1: 6;

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

        

         A12: k < n by A11, NAT_1: 13;

        then (G |^ k) c= (G |^ n) by Th21;

        then not ( rng p) c= (G |^ k) by A9;

        hence contradiction by A6, A7, A10, A11, A12;

      end;

      then ex o9 be Element of ( dom the charact of A), p9 be Element of (the carrier of A * ) st a = (( Den (o9,A)) . p9) & p9 in ( dom ( Den (o9,A))) & ( rng p9) c= (G |^ n) by A8, Th20;

      hence contradiction by A7, A9, Th36;

    end;

    theorem :: AOFA_000:40

    for A be free Universal_Algebra holds for o be OperSymbol of A holds for p be FinSequence st p in ( dom ( Den (o,A))) holds for n be Nat st (( Den (o,A)) . p) in (( Generators A) |^ (n + 1)) holds ( rng p) c= (( Generators A) |^ n)

    proof

      let A be free Universal_Algebra;

      set G = ( Generators A);

      let o be OperSymbol of A;

      now

        let o9 be OperSymbol of A, p be FinSequence;

        reconsider op = ( Den (o9,A)) as Element of ( Operations A);

        assume p in ( dom ( Den (o9,A)));

        then (op . p) in ( rng op) by FUNCT_1: 3;

        hence (( Den (o9,A)) . p) in G implies o9 <> o by Th26;

      end;

      hence thesis by Th39;

    end;

    begin

    definition

      let S be non empty UAStr;

      :: AOFA_000:def10

      attr S is with_empty-instruction means

      : Def10: 1 in ( dom the charact of S) & (the charact of S . 1) is 0 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S;

      :: AOFA_000:def11

      attr S is with_catenation means

      : Def11: 2 in ( dom the charact of S) & (the charact of S . 2) is 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S;

      :: AOFA_000:def12

      attr S is with_if-instruction means

      : Def12: 3 in ( dom the charact of S) & (the charact of S . 3) is 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S;

      :: AOFA_000:def13

      attr S is with_while-instruction means

      : Def13: 4 in ( dom the charact of S) & (the charact of S . 4) is 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S;

      :: AOFA_000:def14

      attr S is associative means

      : Def14: (the charact of S . 2) is 2 -ary associative non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S;

    end

    definition

      let S be non-empty UAStr;

      :: AOFA_000:def15

      attr S is unital means

      : Def15: ex f be 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S st f = (the charact of S . 2) & (( Den (( In (1,( dom the charact of S))),S)) . {} ) is_a_unity_wrt f;

    end

    theorem :: AOFA_000:41

    

     Th41: for X be non empty set, x be Element of X holds for c be 2 -ary associative unital non empty quasi_total homogeneous PartFunc of (X * ), X st x is_a_unity_wrt c holds for i be 3 -ary non empty quasi_total homogeneous PartFunc of (X * ), X holds for w be 2 -ary non empty quasi_total homogeneous PartFunc of (X * ), X holds ex S be non-empty strict UAStr st the carrier of S = X & the charact of S = ( <*(( 0 -tuples_on X) --> x), c*> ^ <*i, w*>) & S is with_empty-instruction with_catenation unital associative with_if-instruction with_while-instruction quasi_total partial

    proof

      let X be non empty set;

      let x be Element of X;

      let c be 2 -ary associative unital non empty quasi_total homogeneous PartFunc of (X * ), X;

      assume

       A1: x is_a_unity_wrt c;

      let i be 3 -ary non empty quasi_total homogeneous PartFunc of (X * ), X;

      let w be 2 -ary non empty quasi_total homogeneous PartFunc of (X * ), X;

      set Y = ( 0 -tuples_on X);

      set e = (Y --> x);

      reconsider e as 0 -ary non empty quasi_total homogeneous PartFunc of (X * ), X;

      set char = ( <*e, c*> ^ <*i, w*>);

      char is PFuncFinSequence of X

      proof

        let a be object;

        assume a in ( rng char);

        then a in (( rng <*e, c*>) \/ ( rng <*i, w*>)) by FINSEQ_1: 31;

        then a in ( rng <*e, c*>) or a in ( rng <*i, w*>) by XBOOLE_0:def 3;

        then a in {e, c} or a in {i, w} by FINSEQ_2: 127;

        then a = e or a = c or a = i or a = w by TARSKI:def 2;

        hence thesis by PARTFUN1: 45;

      end;

      then

      reconsider char as non empty non-empty PFuncFinSequence of X;

      reconsider S = UAStr (# X, char #) as non-empty strict UAStr by UNIALG_1:def 3;

      take S;

      thus the carrier of S = X;

      thus the charact of S = ( <*(( 0 -tuples_on X) --> x), c*> ^ <*i, w*>);

      

       A2: ( len <*e, c*>) = 2 by FINSEQ_1: 44;

      ( len <*i, w*>) = 2 by FINSEQ_1: 44;

      then ( len char) = (2 + 2) by A2, FINSEQ_1: 22;

      then

       A3: ( dom char) = ( Seg 4) by FINSEQ_1:def 3;

      reconsider e as 0 -ary non empty homogeneous PartFunc of (the carrier of S * ), the carrier of S;

      reconsider c as 2 -ary associative non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S;

      

       A4: ( <*e, c*> . 1) = e by FINSEQ_1: 44;

      

       A5: ( <*e, c*> . 2) = c by FINSEQ_1: 44;

      

       A6: ( <*i, w*> . 1) = i by FINSEQ_1: 44;

      

       A7: ( <*i, w*> . 2) = w by FINSEQ_1: 44;

      thus 1 in ( dom the charact of S) by A3;

      

       A8: ( dom <*e, c*>) = ( Seg 2) by FINSEQ_1: 89;

      then

       A9: 1 in ( dom <*e, c*>);

      

       A10: 2 in ( dom <*e, c*>) by A8;

      

       A11: e = (the charact of S . 1) by A4, A9, FINSEQ_1:def 7;

      

       A12: c = (the charact of S . 2) by A5, A10, FINSEQ_1:def 7;

      thus (the charact of S . 1) is 0 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A4, A9, FINSEQ_1:def 7;

      thus 2 in ( dom the charact of S) by A3;

      thus (the charact of S . 2) is 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A5, A10, FINSEQ_1:def 7;

      thus S is unital

      proof

        take c;

        thus c = (the charact of S . 2) by A5, A10, FINSEQ_1:def 7;

        

         A13: 1 in ( dom the charact of S) by A3;

        

         A14: Y = { {} } by COMPUT_1: 5;

        

         A15: ( In (1,( dom the charact of S))) = 1 by A13, SUBSET_1:def 8;

        

         A16: {} in Y by A14, TARSKI:def 1;

        e = ( Den (( In (1,( dom the charact of S))),S)) by A4, A9, A15, FINSEQ_1:def 7;

        hence thesis by A1, A16, FUNCOP_1: 7;

      end;

      thus (the charact of S . 2) is 2 -ary associative non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A5, A10, FINSEQ_1:def 7;

      thus 3 in ( dom the charact of S) by A3;

      

       A17: ( dom <*i, w*>) = ( Seg 2) by FINSEQ_1: 89;

      then

       A18: 1 in ( dom <*i, w*>);

      

       A19: 2 in ( dom <*i, w*>) by A17;

      

       A20: (char . (2 + 1)) = i by A2, A6, A18, FINSEQ_1:def 7;

      

       A21: (char . (2 + 2)) = w by A2, A7, A19, FINSEQ_1:def 7;

      thus (the charact of S . 3) is 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A20;

      thus 4 in ( dom the charact of S) by A3;

      thus (the charact of S . 4) is 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A2, A7, A19, FINSEQ_1:def 7;

      thus S is quasi_total

      proof

        let i be Nat, h be PartFunc of (the carrier of S * ), the carrier of S;

        assume i in ( dom the charact of S);

        hence thesis by A3, A11, A12, A20, A21, ENUMSET1:def 2, FINSEQ_3: 2;

      end;

      let i be Nat, h be PartFunc of (the carrier of S * ), the carrier of S;

      assume that

       A22: i in ( dom the charact of S) and

       A23: h = (the charact of S . i);

      let p1,p2 be FinSequence;

      i = 1 or i = 2 or i = 3 or i = 4 by A3, A22, ENUMSET1:def 2, FINSEQ_3: 2;

      hence thesis by A11, A12, A20, A21, A23, MARGREL1:def 1;

    end;

    registration

      cluster with_empty-instruction with_catenation with_if-instruction with_while-instruction unital associative for quasi_total partial non-empty strict UAStr;

      existence

      proof

        set c = the 2 -ary associative unital non empty quasi_total homogeneous PartFunc of ( { {} } * ), { {} };

        set a = the Element of { {} };

        consider x be set such that

         A1: x is_a_unity_wrt c by Def3;

        ( arity c) = 2 by COMPUT_1:def 21;

        then

         A2: ( dom c) = (2 -tuples_on { {} }) by COMPUT_1: 22;

        then <*a, a*> in ( dom c) by FINSEQ_2: 137;

        then <*a, x*> in ( dom c) by A1;

        then

        reconsider x as Element of { {} } by A2, FINSEQ_2: 138;

        set i = the 3 -ary non empty quasi_total homogeneous PartFunc of ( { {} } * ), { {} };

        set w = the 2 -ary non empty quasi_total homogeneous PartFunc of ( { {} } * ), { {} };

        ex S be non-empty strict UAStr st the carrier of S = { {} } & the charact of S = ( <*(( 0 -tuples_on { {} }) --> x), c*> ^ <*i, w*>) & S is with_empty-instruction with_catenation unital associative with_if-instruction with_while-instruction quasi_total partial by A1, Th41;

        hence thesis;

      end;

    end

    definition

      mode preIfWhileAlgebra is with_empty-instruction with_catenation with_if-instruction with_while-instruction Universal_Algebra;

    end

    reserve A for preIfWhileAlgebra,

C,I,J for Element of A;

    reserve S for non empty set,

T for Subset of S,

s for Element of S;

    definition

      let A be non empty UAStr;

      mode Algorithm of A is Element of A;

    end

    theorem :: AOFA_000:42

    

     Th42: for A be with_empty-instruction non-empty UAStr holds ( dom ( Den (( In (1,( dom the charact of A))),A))) = { {} }

    proof

      let A be with_empty-instruction non-empty UAStr;

      reconsider e = (the charact of A . 1) as 0 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def10;

      1 in ( dom the charact of A) by Def10;

      then

       A1: ( Den (( In (1,( dom the charact of A))),A)) = e by SUBSET_1:def 8;

      ( arity e) = 0 by COMPUT_1:def 21;

      then ( dom e) = ( 0 -tuples_on the carrier of A) by COMPUT_1: 22;

      hence thesis by A1, COMPUT_1: 5;

    end;

    definition

      let A be with_empty-instruction non-empty UAStr;

      :: AOFA_000:def16

      func EmptyIns A -> Algorithm of A equals (( Den (( In (1,( dom the charact of A))),A)) . {} );

      coherence

      proof

        reconsider e = (the charact of A . 1) as 0 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def10;

        1 in ( dom the charact of A) by Def10;

        then

         A1: ( Den (( In (1,( dom the charact of A))),A)) = e by SUBSET_1:def 8;

        then ( dom e) = { {} } by Th42;

        then {} in ( dom e) by TARSKI:def 1;

        hence thesis by A1, PARTFUN1: 4;

      end;

    end

    theorem :: AOFA_000:43

    for A be with_empty-instruction Universal_Algebra holds for o be Element of ( Operations A) st o = ( Den (( In (1,( dom the charact of A))),A)) holds ( arity o) = 0 & ( EmptyIns A) in ( rng o)

    proof

      let A be with_empty-instruction Universal_Algebra;

      let o be Element of ( Operations A) such that

       A1: o = ( Den (( In (1,( dom the charact of A))),A));

      

       A2: ( dom ( Den (( In (1,( dom the charact of A))),A))) = { {} } by Th42;

      

       A3: ( <*> the carrier of A) in { {} } by TARSKI:def 1;

      

      hence ( arity o) = ( len ( <*> the carrier of A)) by A1, A2, MARGREL1:def 25

      .= 0 ;

      thus thesis by A1, A2, A3, FUNCT_1:def 3;

    end;

    theorem :: AOFA_000:44

    

     Th44: for A be with_catenation non-empty UAStr holds ( dom ( Den (( In (2,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A)

    proof

      let A be with_catenation non-empty UAStr;

      reconsider f = (the charact of A . 2) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def11;

      2 in ( dom the charact of A) by Def11;

      then

       A1: ( Den (( In (2,( dom the charact of A))),A)) = f by SUBSET_1:def 8;

      ( arity f) = 2 by COMPUT_1:def 21;

      hence thesis by A1, COMPUT_1: 22;

    end;

    definition

      let A be with_catenation non-empty UAStr;

      let I1,I2 be Algorithm of A;

      :: AOFA_000:def17

      func I1 \; I2 -> Algorithm of A equals (( Den (( In (2,( dom the charact of A))),A)) . <*I1, I2*>);

      coherence

      proof

        reconsider f = (the charact of A . 2) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def11;

        2 in ( dom the charact of A) by Def11;

        then

         A1: ( Den (( In (2,( dom the charact of A))),A)) = f by SUBSET_1:def 8;

        then ( dom f) = (2 -tuples_on the carrier of A) by Th44;

        then <*I1, I2*> in ( dom f) by FINSEQ_2: 137;

        hence thesis by A1, PARTFUN1: 4;

      end;

    end

    theorem :: AOFA_000:45

    for A be with_empty-instruction with_catenation unital non-empty UAStr holds for I be Element of A holds (( EmptyIns A) \; I) = I & (I \; ( EmptyIns A)) = I

    proof

      let A be with_empty-instruction with_catenation unital non-empty UAStr;

      let I be Element of A;

      consider f be 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A such that

       A1: f = (the charact of A . 2) and

       A2: (( Den (( In (1,( dom the charact of A))),A)) . {} ) is_a_unity_wrt f by Def15;

      

       A3: 2 in ( dom the charact of A) by Def11;

      ( arity f) = 2 by COMPUT_1:def 21;

      then

       A4: ( dom f) = (2 -tuples_on the carrier of A) by COMPUT_1: 22;

      

       A5: ( In (2,( dom the charact of A))) = 2 by A3, SUBSET_1:def 8;

       <*I, I*> in ( dom f) by A4, FINSEQ_2: 137;

      hence thesis by A1, A2, A5;

    end;

    theorem :: AOFA_000:46

    for A be associative with_catenation non-empty UAStr holds for I1,I2,I3 be Element of A holds ((I1 \; I2) \; I3) = (I1 \; (I2 \; I3))

    proof

      let A be associative with_catenation non-empty UAStr;

      let I1,I2,I3 be Element of A;

      reconsider f = (the charact of A . 2) as 2 -ary associative non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def14;

      

       A1: 2 in ( dom the charact of A) by Def11;

      ( arity f) = 2 by COMPUT_1:def 21;

      then

       A2: ( dom f) = (2 -tuples_on the carrier of A) by COMPUT_1: 22;

      

       A3: ( In (2,( dom the charact of A))) = 2 by A1, SUBSET_1:def 8;

      

       A4: <*I1, I2*> in ( dom f) by A2, FINSEQ_2: 137;

      

       A5: <*I2, I3*> in ( dom f) by A2, FINSEQ_2: 137;

      

       A6: <*I1, (I2 \; I3)*> in ( dom f) by A2, FINSEQ_2: 137;

       <*(I1 \; I2), I3*> in ( dom f) by A2, FINSEQ_2: 137;

      hence thesis by A3, A4, A5, A6, Def2;

    end;

    theorem :: AOFA_000:47

    

     Th47: for A be with_if-instruction non-empty UAStr holds ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A)

    proof

      let A be with_if-instruction non-empty UAStr;

      reconsider f = (the charact of A . 3) as 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def12;

      3 in ( dom the charact of A) by Def12;

      then

       A1: ( Den (( In (3,( dom the charact of A))),A)) = f by SUBSET_1:def 8;

      ( arity f) = 3 by COMPUT_1:def 21;

      hence thesis by A1, COMPUT_1: 22;

    end;

    definition

      let A be with_if-instruction non-empty UAStr;

      let C,I1,I2 be Algorithm of A;

      :: AOFA_000:def18

      func if-then-else (C,I1,I2) -> Algorithm of A equals (( Den (( In (3,( dom the charact of A))),A)) . <*C, I1, I2*>);

      coherence

      proof

        reconsider f = (the charact of A . 3) as 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def12;

        3 in ( dom the charact of A) by Def12;

        then

         A1: ( Den (( In (3,( dom the charact of A))),A)) = f by SUBSET_1:def 8;

        ( arity f) = 3 by COMPUT_1:def 21;

        then ( dom f) = (3 -tuples_on the carrier of A) by COMPUT_1: 22;

        then <*C, I1, I2*> in ( dom f) by FINSEQ_2: 139;

        hence thesis by A1, PARTFUN1: 4;

      end;

    end

    definition

      let A be with_empty-instruction with_if-instruction non-empty UAStr;

      let C,I be Algorithm of A;

      :: AOFA_000:def19

      func if-then (C,I) -> Algorithm of A equals ( if-then-else (C,I,( EmptyIns A)));

      coherence ;

    end

    theorem :: AOFA_000:48

    

     Th48: for A be with_while-instruction non-empty UAStr holds ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A)

    proof

      let A be with_while-instruction non-empty UAStr;

      reconsider f = (the charact of A . 4) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def13;

      4 in ( dom the charact of A) by Def13;

      then

       A1: ( Den (( In (4,( dom the charact of A))),A)) = f by SUBSET_1:def 8;

      ( arity f) = 2 by COMPUT_1:def 21;

      hence thesis by A1, COMPUT_1: 22;

    end;

    definition

      let A be with_while-instruction non-empty UAStr;

      let C,I be Algorithm of A;

      :: AOFA_000:def20

      func while (C,I) -> Algorithm of A equals (( Den (( In (4,( dom the charact of A))),A)) . <*C, I*>);

      coherence

      proof

        reconsider f = (the charact of A . 4) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def13;

        4 in ( dom the charact of A) by Def13;

        then

         A1: ( Den (( In (4,( dom the charact of A))),A)) = f by SUBSET_1:def 8;

        ( arity f) = 2 by COMPUT_1:def 21;

        then ( dom f) = (2 -tuples_on the carrier of A) by COMPUT_1: 22;

        then <*C, I*> in ( dom f) by FINSEQ_2: 137;

        hence thesis by A1, PARTFUN1: 4;

      end;

    end

    definition

      let A be preIfWhileAlgebra;

      let I0,C,I,J be Element of A;

      :: AOFA_000:def21

      func for-do (I0,C,J,I) -> Element of A equals (I0 \; ( while (C,(I \; J))));

      coherence ;

    end

    definition

      let A be preIfWhileAlgebra;

      :: AOFA_000:def22

      func ElementaryInstructions A -> Subset of A equals ((((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) \ ( rng ( Den (( In (4,( dom the charact of A))),A)))) \ { (I1 \; I2) where I1,I2 be Algorithm of A : I1 <> (I1 \; I2) & I2 <> (I1 \; I2) });

      coherence ;

    end

    theorem :: AOFA_000:49

    

     Th49: for A be preIfWhileAlgebra holds ( EmptyIns A) nin ( ElementaryInstructions A)

    proof

      let A be preIfWhileAlgebra;

      set I = ( EmptyIns A);

      I in {I} by TARSKI:def 1;

      then I nin (the carrier of A \ {I}) by XBOOLE_0:def 5;

      then I nin ((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) by XBOOLE_0:def 5;

      then I nin (((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) \ ( rng ( Den (( In (4,( dom the charact of A))),A)))) by XBOOLE_0:def 5;

      hence thesis by XBOOLE_0:def 5;

    end;

    theorem :: AOFA_000:50

    

     Th50: for A be preIfWhileAlgebra holds for I1,I2 be Element of A st I1 <> (I1 \; I2) & I2 <> (I1 \; I2) holds (I1 \; I2) nin ( ElementaryInstructions A)

    proof

      let A be preIfWhileAlgebra;

      let I1,I2 be Element of A;

      assume that

       A1: I1 <> (I1 \; I2) and

       A2: I2 <> (I1 \; I2);

      (I1 \; I2) in { (J1 \; J2) where J1,J2 be Algorithm of A : J1 <> (J1 \; J2) & J2 <> (J1 \; J2) } by A1, A2;

      hence thesis by XBOOLE_0:def 5;

    end;

    theorem :: AOFA_000:51

    

     Th51: for A be preIfWhileAlgebra holds for C,I1,I2 be Element of A holds ( if-then-else (C,I1,I2)) nin ( ElementaryInstructions A)

    proof

      let A be preIfWhileAlgebra;

      let C,I1,I2 be Element of A;

      set I = ( if-then-else (C,I1,I2));

      reconsider f = (the charact of A . 3) as 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def12;

      3 in ( dom the charact of A) by Def12;

      then ( In (3,( dom the charact of A))) = 3 by SUBSET_1:def 8;

      

      then ( dom ( Den (( In (3,( dom the charact of A))),A))) = (( arity f) -tuples_on the carrier of A) by COMPUT_1: 22

      .= (3 -tuples_on the carrier of A) by COMPUT_1:def 21;

      then <*C, I1, I2*> in ( dom ( Den (( In (3,( dom the charact of A))),A))) by FINSEQ_2: 139;

      then I in ( rng ( Den (( In (3,( dom the charact of A))),A))) by FUNCT_1:def 3;

      then I nin ((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) by XBOOLE_0:def 5;

      then I nin (((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) \ ( rng ( Den (( In (4,( dom the charact of A))),A)))) by XBOOLE_0:def 5;

      hence thesis by XBOOLE_0:def 5;

    end;

    theorem :: AOFA_000:52

    

     Th52: for A be preIfWhileAlgebra holds for C,I be Element of A holds ( while (C,I)) nin ( ElementaryInstructions A)

    proof

      let A be preIfWhileAlgebra;

      let C,I1 be Element of A;

      set I = ( while (C,I1));

      reconsider f = (the charact of A . 4) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def13;

      4 in ( dom the charact of A) by Def13;

      then ( In (4,( dom the charact of A))) = 4 by SUBSET_1:def 8;

      

      then ( dom ( Den (( In (4,( dom the charact of A))),A))) = (( arity f) -tuples_on the carrier of A) by COMPUT_1: 22

      .= (2 -tuples_on the carrier of A) by COMPUT_1:def 21;

      then <*C, I1*> in ( dom ( Den (( In (4,( dom the charact of A))),A))) by FINSEQ_2: 137;

      then I in ( rng ( Den (( In (4,( dom the charact of A))),A))) by FUNCT_1:def 3;

      then I nin (((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) \ ( rng ( Den (( In (4,( dom the charact of A))),A)))) by XBOOLE_0:def 5;

      hence thesis by XBOOLE_0:def 5;

    end;

    theorem :: AOFA_000:53

    

     Th53: for A be preIfWhileAlgebra holds for I be Element of A st I nin ( ElementaryInstructions A) holds I = ( EmptyIns A) or (ex I1,I2 be Element of A st I = (I1 \; I2) & I1 <> (I1 \; I2) & I2 <> (I1 \; I2)) or (ex C,I1,I2 be Element of A st I = ( if-then-else (C,I1,I2))) or ex C,J be Element of A st I = ( while (C,J))

    proof

      let A be preIfWhileAlgebra;

      let I be Element of A such that

       A1: I nin ( ElementaryInstructions A) and

       A2: I <> ( EmptyIns A) and

       A3: for I1,I2 be Element of A st I = (I1 \; I2) & I1 <> (I1 \; I2) holds I2 = (I1 \; I2) and

       A4: for C,I1,I2 be Element of A holds I <> ( if-then-else (C,I1,I2)) and

       A5: for C,J be Element of A holds I <> ( while (C,J));

       A6:

      now

        assume I in ( rng ( Den (( In (3,( dom the charact of A))),A)));

        then

        consider x be object such that

         A7: x in ( dom ( Den (( In (3,( dom the charact of A))),A))) and

         A8: I = (( Den (( In (3,( dom the charact of A))),A)) . x) by FUNCT_1:def 3;

        reconsider f = (the charact of A . 3) as 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def12;

        3 in ( dom the charact of A) by Def12;

        then ( In (3,( dom the charact of A))) = 3 by SUBSET_1:def 8;

        

        then ( dom ( Den (( In (3,( dom the charact of A))),A))) = (( arity f) -tuples_on the carrier of A) by COMPUT_1: 22

        .= (3 -tuples_on the carrier of A) by COMPUT_1:def 21;

        then

        consider C,I1,I2 be object such that

         A9: C in the carrier of A and

         A10: I1 in the carrier of A and

         A11: I2 in the carrier of A and

         A12: x = <*C, I1, I2*> by A7, FINSEQ_2: 139;

        reconsider C, I1, I2 as Element of A by A9, A10, A11;

        I = ( if-then-else (C,I1,I2)) by A8, A12;

        hence contradiction by A4;

      end;

       A13:

      now

        assume I in ( rng ( Den (( In (4,( dom the charact of A))),A)));

        then

        consider x be object such that

         A14: x in ( dom ( Den (( In (4,( dom the charact of A))),A))) and

         A15: I = (( Den (( In (4,( dom the charact of A))),A)) . x) by FUNCT_1:def 3;

        reconsider f = (the charact of A . 4) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def13;

        4 in ( dom the charact of A) by Def13;

        then ( In (4,( dom the charact of A))) = 4 by SUBSET_1:def 8;

        

        then ( dom ( Den (( In (4,( dom the charact of A))),A))) = (( arity f) -tuples_on the carrier of A) by COMPUT_1: 22

        .= (2 -tuples_on the carrier of A) by COMPUT_1:def 21;

        then

        consider C,J be object such that

         A16: C in the carrier of A and

         A17: J in the carrier of A and

         A18: x = <*C, J*> by A14, FINSEQ_2: 137;

        reconsider C, J as Element of A by A16, A17;

        I = ( while (C,J)) by A15, A18;

        hence contradiction by A5;

      end;

      

       A19: I nin { (I1 \; I2) where I1,I2 be Algorithm of A : I1 <> (I1 \; I2) & I2 <> (I1 \; I2) } by A3;

      I in (the carrier of A \ {( EmptyIns A)}) by A2, ZFMISC_1: 56;

      then I in ((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) by A6, XBOOLE_0:def 5;

      then I in (((the carrier of A \ {( EmptyIns A)}) \ ( rng ( Den (( In (3,( dom the charact of A))),A)))) \ ( rng ( Den (( In (4,( dom the charact of A))),A)))) by A13, XBOOLE_0:def 5;

      hence contradiction by A1, A19, XBOOLE_0:def 5;

    end;

    definition

      let A be preIfWhileAlgebra;

      :: AOFA_000:def23

      attr A is infinite means

      : Def23: ( ElementaryInstructions A) is infinite;

      :: AOFA_000:def24

      attr A is degenerated means

      : Def24: (ex I1,I2 be Element of A st I1 <> ( EmptyIns A) & (I1 \; I2) = I2 or I2 <> ( EmptyIns A) & (I1 \; I2) = I1 or (I1 <> ( EmptyIns A) or I2 <> ( EmptyIns A)) & (I1 \; I2) = ( EmptyIns A)) or (ex C,I1,I2 be Element of A st ( if-then-else (C,I1,I2)) = ( EmptyIns A)) or (ex C,I be Element of A st ( while (C,I)) = ( EmptyIns A)) or (ex I1,I2,C,J1,J2 be Element of A st I1 <> ( EmptyIns A) & I2 <> ( EmptyIns A) & (I1 \; I2) = ( if-then-else (C,J1,J2))) or (ex I1,I2,C,J be Element of A st I1 <> ( EmptyIns A) & I2 <> ( EmptyIns A) & (I1 \; I2) = ( while (C,J))) or ex C1,I1,I2,C2,J be Element of A st ( if-then-else (C1,I1,I2)) = ( while (C2,J));

      :: AOFA_000:def25

      attr A is well_founded means

      : Def25: ( ElementaryInstructions A) is GeneratorSet of A;

    end

    definition

      :: AOFA_000:def26

      func ECIW-signature -> non empty FinSequence of NAT equals ( <* 0 , 2*> ^ <*3, 2*>);

      coherence ;

    end

    theorem :: AOFA_000:54

    

     Th54: ( len ECIW-signature ) = 4 & ( dom ECIW-signature ) = ( Seg 4) & ( ECIW-signature . 1) = 0 & ( ECIW-signature . 2) = 2 & ( ECIW-signature . 3) = 3 & ( ECIW-signature . 4) = 2

    proof

      

       A1: ( len <* 0 , 2*>) = 2 by FINSEQ_1: 44;

      

       A2: ( len <*3, 2*>) = 2 by FINSEQ_1: 44;

      

       A3: ( dom <* 0 , 2*>) = ( Seg 2) by A1, FINSEQ_1:def 3;

      

       A4: ( dom <*3, 2*>) = ( Seg 2) by A2, FINSEQ_1:def 3;

      then

       A5: 1 in ( dom <*3, 2*>);

      

       A6: ( <*3, 2*> . 1) = 3 by FINSEQ_1: 44;

      

       A7: 2 in ( dom <*3, 2*>) by A4;

      

       A8: ( <*3, 2*> . 2) = 2 by FINSEQ_1: 44;

      

       A9: (2 + 1) = 3;

      

       A10: 1 in ( dom <* 0 , 2*>) by A3;

      

       A11: ( <* 0 , 2*> . 1) = 0 by FINSEQ_1: 44;

      

       A12: 2 in ( dom <* 0 , 2*>) by A3;

      ( <* 0 , 2*> . 2) = 2 by FINSEQ_1: 44;

      hence thesis by A1, A2, A5, A6, A7, A8, A9, A10, A11, A12, FINSEQ_1: 22, FINSEQ_1:def 7;

    end;

    definition

      let A be partial non-empty non empty UAStr;

      :: AOFA_000:def27

      attr A is ECIW-strict means

      : Def27: ( signature A) = ECIW-signature ;

    end

    theorem :: AOFA_000:55

    

     Th55: for A be partial non-empty non empty UAStr st A is ECIW-strict holds for o be OperSymbol of A holds o = 1 or o = 2 or o = 3 or o = 4

    proof

      let A be partial non-empty non empty UAStr;

      assume ( signature A) = ECIW-signature ;

      then 4 = ( len the charact of A) by Th54, UNIALG_1:def 4;

      then ( dom the charact of A) = ( Seg 4) by FINSEQ_1:def 3;

      hence thesis by ENUMSET1:def 2, FINSEQ_3: 2;

    end;

    registration

      let X be disjoint_with_NAT non empty set;

      cluster ( FreeUnivAlgNSG ( ECIW-signature ,X)) -> with_empty-instruction with_catenation with_if-instruction with_while-instruction;

      coherence

      proof

        set S = ( FreeUnivAlgNSG ( ECIW-signature ,X));

        set char = ECIW-signature ;

        

         A1: ( len <* 0 , 2*>) = 2 by FINSEQ_1: 44;

        

         A2: ( len <*3, 2*>) = 2 by FINSEQ_1: 44;

        then

         A3: ( len char) = (2 + 2) by A1, FINSEQ_1: 22;

        

         A4: ( len the charact of S) = ( len char) by FREEALG:def 11;

        

         A5: ( dom <* 0 , 2*>) = ( Seg 2) by A1, FINSEQ_1:def 3;

        

         A6: ( dom <*3, 2*>) = ( Seg 2) by A2, FINSEQ_1:def 3;

        

         A7: ( dom the charact of S) = ( Seg 4) by A3, A4, FINSEQ_1:def 3;

        

         A8: ( dom char) = ( Seg 4) by A3, FINSEQ_1:def 3;

        thus 1 in ( dom the charact of S) by A7;

        then

         A9: (the charact of S . 1) = ( FreeOpNSG (1,char,X)) by FREEALG:def 11;

        

         A10: 1 in ( dom char) by A8;

        

         A11: 2 in ( dom char) by A8;

        

         A12: 3 in ( dom char) by A8;

        

         A13: 4 in ( dom char) by A8;

        reconsider D = ( TS ( DTConUA (char,X))) as non empty set;

        reconsider char as non empty FinSequence of omega ;

        set o = ( FreeOpNSG (1,char,X));

        

         A14: 1 in ( dom <* 0 , 2*>) by A5;

        

         A15: ( <* 0 , 2*> . 1) = 0 by FINSEQ_1: 44;

        

         A16: 2 in ( dom <* 0 , 2*>) by A5;

        

         A17: ( <* 0 , 2*> . 2) = 2 by FINSEQ_1: 44;

        (char . 1) = 0 by A14, A15, FINSEQ_1:def 7;

        then (char /. 1) = 0 by A10, PARTFUN1:def 6;

        then

         A18: ( dom o) = ( 0 -tuples_on the carrier of S) by A10, FREEALG:def 10;

        reconsider o as homogeneous non empty quasi_total PartFunc of (D * ), D;

        ( arity o) = 0 by A18, COMPUT_1: 25;

        hence (the charact of S . 1) is 0 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A9, COMPUT_1:def 21;

        thus 2 in ( dom the charact of S) by A7;

        then

         A19: (the charact of S . 2) = ( FreeOpNSG (2,char,X)) by FREEALG:def 11;

        set o = ( FreeOpNSG (2,char,X));

        (char . 2) = 2 by A16, A17, FINSEQ_1:def 7;

        then (char qua FinSequence of omega /. 2) = 2 by A11, PARTFUN1:def 6;

        then

         A20: ( dom o) = (2 -tuples_on the carrier of S) by A11, FREEALG:def 10;

        reconsider o as homogeneous non empty quasi_total PartFunc of (D * ), D;

        ( arity o) = 2 by A20, COMPUT_1: 25;

        hence (the charact of S . 2) is 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A19, COMPUT_1:def 21;

        thus 3 in ( dom the charact of S) by A7;

        then

         A21: (the charact of S . 3) = ( FreeOpNSG (3,char,X)) by FREEALG:def 11;

        set o = ( FreeOpNSG (3,char,X));

        

         A22: 1 in ( dom <*3, 2*>) by A6;

        

         A23: ( <*3, 2*> . 1) = 3 by FINSEQ_1: 44;

        

         A24: 2 in ( dom <*3, 2*>) by A6;

        

         A25: ( <*3, 2*> . 2) = 2 by FINSEQ_1: 44;

        (char . (2 + 1)) = 3 by A1, A22, A23, FINSEQ_1:def 7;

        then (char qua FinSequence of omega /. 3) = 3 by A12, PARTFUN1:def 6;

        then

         A26: ( dom o) = (3 -tuples_on the carrier of S) by A12, FREEALG:def 10;

        reconsider o as homogeneous non empty quasi_total PartFunc of (D * ), D;

        ( arity o) = 3 by A26, COMPUT_1: 25;

        hence (the charact of S . 3) is 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of S * ), the carrier of S by A21, COMPUT_1:def 21;

        thus 4 in ( dom the charact of S) by A7;

        then

         A27: (the charact of S . 4) = ( FreeOpNSG (4,char,X)) by FREEALG:def 11;

        set o = ( FreeOpNSG (4,char,X));

        (char . (2 + 2)) = 2 by A1, A24, A25, FINSEQ_1:def 7;

        then (char qua FinSequence of omega /. 4) = 2 by A13, PARTFUN1:def 6;

        then

         A28: ( dom o) = (2 -tuples_on the carrier of S) by A13, FREEALG:def 10;

        reconsider o as homogeneous non empty quasi_total PartFunc of (D * ), D;

        ( arity o) = 2 by A28, COMPUT_1: 25;

        hence thesis by A27, COMPUT_1:def 21;

      end;

    end

    theorem :: AOFA_000:56

    

     Th56: for X be disjoint_with_NAT non empty set holds for I be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds (ex x be Element of X st I = ( root-tree x)) or ex n be Nat, p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st n in ( Seg 4) & I = (n -tree p) & ( len p) = ( ECIW-signature . n)

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      let I be Element of ( FreeUnivAlgNSG (S,X)) such that

       A1: not ex x be Element of X st I = ( root-tree x);

      ( Terminals ( DTConUA (S,X))) = X by FREEALG: 3;

      then not ex d be Symbol of G st d in ( Terminals G) & I = ( root-tree d) by A1;

      then

      consider o be Symbol of G, p be FinSequence of ( TS G) such that

       A2: o ==> ( roots p) and

       A3: I = (o -tree p) by Th16;

      

       A4: ( NonTerminals G) = { s where s be Symbol of G : ex n be FinSequence st s ==> n } by LANG1:def 3;

      then

       A5: o in ( NonTerminals G) by A2;

      

       A6: ( NonTerminals G) = ( Seg 4) by Th54, FREEALG: 2;

      then

      reconsider n = o as Element of NAT by A5;

      reconsider p as FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X));

      take n, p;

      thus n in ( Seg 4) by A2, A4, A6;

      thus I = (n -tree p) by A3;

      

       A7: [n, ( roots p)] in the Rules of G by A2, LANG1:def 1;

      then

       A8: ( roots p) in (the carrier of G * ) by ZFMISC_1: 87;

      ( dom p) = ( dom ( roots p)) by TREES_3:def 18;

      

      hence ( len p) = ( card ( dom ( roots p))) by CARD_1: 62

      .= ( len ( roots p)) by CARD_1: 62

      .= (S . n) by A7, A8, FREEALG:def 7;

    end;

    theorem :: AOFA_000:57

    

     Th57: for X be disjoint_with_NAT non empty set holds ( EmptyIns ( FreeUnivAlgNSG ( ECIW-signature ,X))) = (1 -tree {} )

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      reconsider s = S as non empty FinSequence of omega ;

      set A = ( FreeUnivAlgNSG (S,X));

      

       A1: 1 in ( dom the charact of A) by Def10;

      reconsider f = (the charact of A . 1) as 0 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def10;

      

       A2: f = ( FreeOpNSG (1,S,X)) by A1, FREEALG:def 11;

      

       A3: 1 in ( dom S) by Th54;

      then

       A4: (s /. 1) = (S . 1) by PARTFUN1:def 6;

      

       A5: ( dom ( FreeOpNSG (1,S,X))) = ((s /. 1) -tuples_on ( TS ( DTConUA (S,X)))) by A3, FREEALG:def 10

      .= { {} } by A4, Th54, COMPUT_1: 5;

      

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

      

       A7: {} = ( <*> ( TS ( DTConUA (S,X))));

      

      thus ( EmptyIns A) = (f . {} ) by A1, SUBSET_1:def 8

      .= (( Sym (1,S,X)) -tree {} ) by A2, A3, A5, A6, A7, FREEALG:def 10

      .= (1 -tree {} ) by A3, FREEALG:def 9;

    end;

    theorem :: AOFA_000:58

    

     Th58: for X be disjoint_with_NAT non empty set holds for p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st (1 -tree p) is Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds p = {}

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      set A = ( FreeUnivAlgNSG (S,X));

      let p be FinSequence of A;

      assume (1 -tree p) is Element of A;

      then

      reconsider I = (1 -tree p) as Element of A;

      per cases by Th56;

        suppose ex x be Element of X st I = ( root-tree x);

        then

        consider x be Element of X such that

         A1: (1 -tree p) = ( root-tree x);

        (1 -tree p) = (x -tree ( <*> ( TS G))) by A1, TREES_4: 20;

        hence thesis by TREES_4: 15;

      end;

        suppose ex n be Nat, p be FinSequence of A st n in ( Seg 4) & I = (n -tree p) & ( len p) = (S . n);

        then

        consider n be Nat, q be FinSequence of A such that n in ( Seg 4) and

         A2: I = (n -tree q) and

         A3: ( len q) = (S . n);

        q = p by A2, TREES_4: 15;

        hence thesis by A2, A3, Th54, TREES_4: 15;

      end;

    end;

    theorem :: AOFA_000:59

    

     Th59: for X be disjoint_with_NAT non empty set holds for I1,I2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds (I1 \; I2) = (2 -tree (I1,I2))

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      reconsider s = S as non empty FinSequence of omega ;

      set A = ( FreeUnivAlgNSG (S,X));

      let I1,I2 be Element of A;

      

       A1: 2 in ( dom the charact of A) by Def11;

      reconsider f = (the charact of A . 2) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def11;

      

       A2: f = ( FreeOpNSG (2,S,X)) by A1, FREEALG:def 11;

      

       A3: 2 in ( dom S) by Th54;

      then (s /. 2) = (S . 2) by PARTFUN1:def 6;

      then

       A4: ( dom ( FreeOpNSG (2,S,X))) = (2 -tuples_on ( TS ( DTConUA (S,X)))) by A3, Th54, FREEALG:def 10;

      

       A5: <*I1, I2*> in (2 -tuples_on ( TS ( DTConUA (S,X)))) by FINSEQ_2: 137;

      

      thus (I1 \; I2) = (f . <*I1, I2*>) by A1, SUBSET_1:def 8

      .= (( Sym (2,S,X)) -tree <*I1, I2*>) by A2, A3, A4, A5, FREEALG:def 10

      .= (2 -tree (I1,I2)) by A3, FREEALG:def 9;

    end;

    theorem :: AOFA_000:60

    

     Th60: for X be disjoint_with_NAT non empty set holds for p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st (2 -tree p) is Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds ex I1,I2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st p = <*I1, I2*>

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      set A = ( FreeUnivAlgNSG (S,X));

      let p be FinSequence of A;

      assume (2 -tree p) is Element of A;

      then

      reconsider I = (2 -tree p) as Element of A;

      per cases by Th56;

        suppose ex x be Element of X st I = ( root-tree x);

        then

        consider x be Element of X such that

         A1: (2 -tree p) = ( root-tree x);

        (2 -tree p) = (x -tree ( <*> ( TS G))) by A1, TREES_4: 20;

        then 2 = x by TREES_4: 15;

        then X meets NAT by XBOOLE_0: 3;

        hence thesis by FREEALG:def 1;

      end;

        suppose ex n be Nat, p be FinSequence of A st n in ( Seg 4) & I = (n -tree p) & ( len p) = (S . n);

        then

        consider n be Nat, q be FinSequence of A such that n in ( Seg 4) and

         A2: I = (n -tree q) and

         A3: ( len q) = (S . n);

        

         A4: n = 2 by A2, TREES_4: 15;

        

         A5: q = p by A2, TREES_4: 15;

        then p = <*(p . 1), (p . 2)*> by A3, A4, Th54, FINSEQ_1: 44;

        then ( rng p) = {(p . 1), (p . 2)} by FINSEQ_2: 127;

        then

        reconsider I1 = (p . 1), I2 = (p . 2) as Element of A by ZFMISC_1: 32;

        take I1, I2;

        thus thesis by A3, A4, A5, Th54, FINSEQ_1: 44;

      end;

    end;

    theorem :: AOFA_000:61

    

     Th61: for X be disjoint_with_NAT non empty set holds for I1,I2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds (I1 \; I2) <> I1 & (I1 \; I2) <> I2

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      set A = ( FreeUnivAlgNSG (S,X));

      let I1,I2 be Element of A;

      set p = <*I1, I2*>;

      ( rng p) c= ( FinTrees the carrier of G) by XBOOLE_1: 1;

      then

       A1: p is FinSequence of ( FinTrees the carrier of G) by FINSEQ_1:def 4;

      

       A2: ( rng p) = {I1, I2} by FINSEQ_2: 127;

      then

       A3: I1 in ( rng p) by TARSKI:def 2;

      

       A4: I2 in ( rng p) by A2, TARSKI:def 2;

      (I1 \; I2) = (2 -tree (I1,I2)) by Th59

      .= (2 -tree <*I1, I2*>);

      hence thesis by A1, A3, A4, Th3;

    end;

    theorem :: AOFA_000:62

    for X be disjoint_with_NAT non empty set holds for I1,I2,J1,J2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds (I1 \; I2) = (J1 \; J2) implies I1 = J1 & I2 = J2

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set A = ( FreeUnivAlgNSG (S,X));

      let I1,I2,J1,J2 be Element of A;

      

       A1: (I1 \; I2) = (2 -tree (I1,I2)) by Th59;

      (J1 \; J2) = (2 -tree (J1,J2)) by Th59;

      then (I1 \; I2) = (J1 \; J2) implies <*I1, I2*> = <*J1, J2*> by A1, TREES_4: 15;

      hence thesis by FINSEQ_1: 77;

    end;

    theorem :: AOFA_000:63

    

     Th63: for X be disjoint_with_NAT non empty set holds for C,I1,I2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds ( if-then-else (C,I1,I2)) = (3 -tree <*C, I1, I2*>)

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      reconsider s = S as non empty FinSequence of omega ;

      set A = ( FreeUnivAlgNSG (S,X));

      let C,I1,I2 be Element of A;

      

       A1: 3 in ( dom the charact of A) by Def12;

      reconsider f = (the charact of A . 3) as 3 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def12;

      

       A2: f = ( FreeOpNSG (3,S,X)) by A1, FREEALG:def 11;

      

       A3: 3 in ( dom S) by Th54;

      then (s /. 3) = (S . 3) by PARTFUN1:def 6;

      then

       A4: ( dom ( FreeOpNSG (3,S,X))) = (3 -tuples_on ( TS ( DTConUA (S,X)))) by A3, Th54, FREEALG:def 10;

      

       A5: <*C, I1, I2*> in (3 -tuples_on ( TS ( DTConUA (S,X)))) by FINSEQ_2: 139;

      

      thus ( if-then-else (C,I1,I2)) = (f . <*C, I1, I2*>) by A1, SUBSET_1:def 8

      .= (( Sym (3,S,X)) -tree <*C, I1, I2*>) by A2, A3, A4, A5, FREEALG:def 10

      .= (3 -tree <*C, I1, I2*>) by A3, FREEALG:def 9;

    end;

    theorem :: AOFA_000:64

    

     Th64: for X be disjoint_with_NAT non empty set holds for p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st (3 -tree p) is Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds ex C,I1,I2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st p = <*C, I1, I2*>

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      set A = ( FreeUnivAlgNSG (S,X));

      let p be FinSequence of A;

      assume (3 -tree p) is Element of A;

      then

      reconsider I = (3 -tree p) as Element of A;

      per cases by Th56;

        suppose ex x be Element of X st I = ( root-tree x);

        then

        consider x be Element of X such that

         A1: (3 -tree p) = ( root-tree x);

        (3 -tree p) = (x -tree ( <*> ( TS G))) by A1, TREES_4: 20;

        then 3 = x by TREES_4: 15;

        then X meets NAT by XBOOLE_0: 3;

        hence thesis by FREEALG:def 1;

      end;

        suppose ex n be Nat, p be FinSequence of A st n in ( Seg 4) & I = (n -tree p) & ( len p) = (S . n);

        then

        consider n be Nat, q be FinSequence of A such that n in ( Seg 4) and

         A2: I = (n -tree q) and

         A3: ( len q) = (S . n);

        

         A4: n = 3 by A2, TREES_4: 15;

        

         A5: q = p by A2, TREES_4: 15;

        then p = <*(p . 1), (p . 2), (p . 3)*> by A3, A4, Th54, FINSEQ_1: 45;

        then

         A6: ( rng p) = {(p . 1), (p . 2), (p . 3)} by FINSEQ_2: 128;

        

         A7: (p . 1) in {(p . 1), (p . 2), (p . 3)} by ENUMSET1:def 1;

        

         A8: (p . 2) in {(p . 1), (p . 2), (p . 3)} by ENUMSET1:def 1;

        (p . 3) in {(p . 1), (p . 2), (p . 3)} by ENUMSET1:def 1;

        then

        reconsider C = (p . 1), I1 = (p . 2), I2 = (p . 3) as Element of A by A6, A7, A8;

        take C, I1, I2;

        thus thesis by A3, A4, A5, Th54, FINSEQ_1: 45;

      end;

    end;

    theorem :: AOFA_000:65

    for X be disjoint_with_NAT non empty set holds for C1,C2,I1,I2,J1,J2 be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st ( if-then-else (C1,I1,I2)) = ( if-then-else (C2,J1,J2)) holds C1 = C2 & I1 = J1 & I2 = J2

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set A = ( FreeUnivAlgNSG (S,X));

      let C1,C2,I1,I2,J1,J2 be Element of A;

      

       A1: ( if-then-else (C1,I1,I2)) = (3 -tree <*C1, I1, I2*>) by Th63;

      ( if-then-else (C2,J1,J2)) = (3 -tree <*C2, J1, J2*>) by Th63;

      then ( if-then-else (C1,I1,I2)) = ( if-then-else (C2,J1,J2)) implies <*C1, I1, I2*> = <*C2, J1, J2*> by A1, TREES_4: 15;

      hence thesis by FINSEQ_1: 78;

    end;

    theorem :: AOFA_000:66

    

     Th66: for X be disjoint_with_NAT non empty set holds for C,I be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds ( while (C,I)) = (4 -tree (C,I))

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      reconsider s = S as non empty FinSequence of omega ;

      set A = ( FreeUnivAlgNSG (S,X));

      let C,I be Element of A;

      

       A1: 4 in ( dom the charact of A) by Def13;

      reconsider f = (the charact of A . 4) as 2 -ary non empty homogeneous quasi_total PartFunc of (the carrier of A * ), the carrier of A by Def13;

      

       A2: f = ( FreeOpNSG (4,S,X)) by A1, FREEALG:def 11;

      

       A3: 4 in ( dom S) by Th54;

      then (s /. 4) = (S . 4) by PARTFUN1:def 6;

      then

       A4: ( dom ( FreeOpNSG (4,S,X))) = (2 -tuples_on ( TS ( DTConUA (S,X)))) by A3, Th54, FREEALG:def 10;

      

       A5: <*C, I*> in (2 -tuples_on ( TS ( DTConUA (S,X)))) by FINSEQ_2: 137;

      

      thus ( while (C,I)) = (f . <*C, I*>) by A1, SUBSET_1:def 8

      .= (( Sym (4,S,X)) -tree <*C, I*>) by A2, A3, A4, A5, FREEALG:def 10

      .= (4 -tree (C,I)) by A3, FREEALG:def 9;

    end;

    theorem :: AOFA_000:67

    

     Th67: for X be disjoint_with_NAT non empty set holds for p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st (4 -tree p) is Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds ex C,I be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st p = <*C, I*>

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      set A = ( FreeUnivAlgNSG (S,X));

      let p be FinSequence of A;

      assume (4 -tree p) is Element of A;

      then

      reconsider I = (4 -tree p) as Element of A;

      per cases by Th56;

        suppose ex x be Element of X st I = ( root-tree x);

        then

        consider x be Element of X such that

         A1: (4 -tree p) = ( root-tree x);

        (4 -tree p) = (x -tree ( <*> ( TS G))) by A1, TREES_4: 20;

        then 4 = x by TREES_4: 15;

        then X meets NAT by XBOOLE_0: 3;

        hence thesis by FREEALG:def 1;

      end;

        suppose ex n be Nat, p be FinSequence of A st n in ( Seg 4) & I = (n -tree p) & ( len p) = (S . n);

        then

        consider n be Nat, q be FinSequence of A such that n in ( Seg 4) and

         A2: I = (n -tree q) and

         A3: ( len q) = (S . n);

        

         A4: n = 4 by A2, TREES_4: 15;

        

         A5: q = p by A2, TREES_4: 15;

        then p = <*(p . 1), (p . 2)*> by A3, A4, Th54, FINSEQ_1: 44;

        then ( rng p) = {(p . 1), (p . 2)} by FINSEQ_2: 127;

        then

        reconsider I1 = (p . 1), I2 = (p . 2) as Element of A by ZFMISC_1: 32;

        take I1, I2;

        thus thesis by A3, A4, A5, Th54, FINSEQ_1: 44;

      end;

    end;

    theorem :: AOFA_000:68

    

     Th68: for X be disjoint_with_NAT non empty set holds for I be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st I in ( ElementaryInstructions ( FreeUnivAlgNSG ( ECIW-signature ,X))) holds ex x be Element of X st I = (x -tree {} )

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set A = ( FreeUnivAlgNSG (S,X));

      let I be Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) such that

       A1: I in ( ElementaryInstructions ( FreeUnivAlgNSG ( ECIW-signature ,X)));

      per cases by Th56;

        suppose ex x be Element of X st I = ( root-tree x);

        then

        consider x be Element of X such that

         A2: I = ( root-tree x);

        ( root-tree x) = (x -tree {} ) by TREES_4: 20;

        hence thesis by A2;

      end;

        suppose ex n be Nat, p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) st n in ( Seg 4) & I = (n -tree p) & ( len p) = (S . n);

        then

        consider n be Nat, p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) such that

         A3: n in ( Seg 4) and

         A4: I = (n -tree p) and ( len p) = (S . n);

        per cases by A3, ENUMSET1:def 2, FINSEQ_3: 2;

          suppose

           A5: n = 1;

          then p = {} by A4, Th58;

          then I = ( EmptyIns A) by A4, A5, Th57;

          hence thesis by A1, Th49;

        end;

          suppose

           A6: n = 2;

          then

          consider I1,I2 be Element of A such that

           A7: p = <*I1, I2*> by A4, Th60;

          

           A8: I = (n -tree (I1,I2)) by A4, A7

          .= (I1 \; I2) by A6, Th59;

          then

           A9: I <> I1 by Th61;

          I <> I2 by A8, Th61;

          hence thesis by A1, A8, A9, Th50;

        end;

          suppose

           A10: n = 3;

          then

          consider C,I1,I2 be Element of A such that

           A11: p = <*C, I1, I2*> by A4, Th64;

          I = ( if-then-else (C,I1,I2)) by A4, A10, A11, Th63;

          hence thesis by A1, Th51;

        end;

          suppose

           A12: n = 4;

          then

          consider C,I9 be Element of A such that

           A13: p = <*C, I9*> by A4, Th67;

          I = (n -tree (C,I9)) by A4, A13

          .= ( while (C,I9)) by A12, Th66;

          hence thesis by A1, Th52;

        end;

      end;

    end;

    theorem :: AOFA_000:69

    for X be disjoint_with_NAT non empty set holds for p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds for x be Element of X st (x -tree p) is Element of ( FreeUnivAlgNSG ( ECIW-signature ,X)) holds p = {}

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set A = ( FreeUnivAlgNSG (S,X));

      let p be FinSequence of ( FreeUnivAlgNSG ( ECIW-signature ,X));

      let x be Element of X;

      assume (x -tree p) is Element of ( FreeUnivAlgNSG ( ECIW-signature ,X));

      then

      reconsider I = (x -tree p) as Element of A;

      now

        given n be Nat, p be FinSequence of A such that

         A1: n in ( Seg 4) and

         A2: I = (n -tree p) and ( len p) = ( ECIW-signature . n);

        

         A3: x = n by A2, TREES_4: 15;

        X misses NAT by FREEALG:def 1;

        hence contradiction by A1, A3, XBOOLE_0: 3;

      end;

      then

      consider y be Element of X such that

       A4: I = ( root-tree y) by Th56;

      (x -tree p) = (y -tree {} ) by A4, TREES_4: 20;

      hence thesis by TREES_4: 15;

    end;

    theorem :: AOFA_000:70

    

     Th70: for X be disjoint_with_NAT non empty set holds ( ElementaryInstructions ( FreeUnivAlgNSG ( ECIW-signature ,X))) = ( FreeGenSetNSG ( ECIW-signature ,X)) & ( card X) = ( card ( FreeGenSetNSG ( ECIW-signature ,X)))

    proof

      let X be disjoint_with_NAT non empty set;

      set S = ECIW-signature ;

      set G = ( DTConUA (S,X));

      

       A1: X = ( Terminals G) by FREEALG: 3;

      set A = ( FreeUnivAlgNSG (S,X));

      thus ( ElementaryInstructions A) = ( FreeGenSetNSG (S,X))

      proof

        thus ( ElementaryInstructions A) c= ( FreeGenSetNSG (S,X))

        proof

          let x be object;

          assume x in ( ElementaryInstructions A);

          then

          consider y be Element of X such that

           A2: x = (y -tree {} ) by Th68;

          reconsider y as Symbol of G by XBOOLE_0:def 3;

          x = ( root-tree y) by A2, TREES_4: 20;

          hence thesis by A1;

        end;

        let x be object;

        assume

         A3: x in ( FreeGenSetNSG (S,X));

        then

        reconsider I = x as Element of A;

        consider y be Symbol of G such that

         A4: x = ( root-tree y) and

         A5: y in ( Terminals G) by A3;

        

         A6: x = (y -tree {} ) by A4, TREES_4: 20;

        assume

         A7: x nin ( ElementaryInstructions A);

        per cases by A7, Th53;

          suppose I = ( EmptyIns A);

          then x = (1 -tree {} ) by Th57;

          then

           A8: y = 1 by A6, TREES_4: 15;

          X misses NAT by FREEALG:def 1;

          hence thesis by A1, A5, A8, XBOOLE_0: 3;

        end;

          suppose ex I1,I2 be Element of A st I = (I1 \; I2) & I1 <> (I1 \; I2) & I2 <> (I1 \; I2);

          then

          consider I1,I2 be Element of A such that

           A9: I = (I1 \; I2);

          x = (2 -tree (I1,I2)) by A9, Th59

          .= (2 -tree <*I1, I2*>);

          hence thesis by A6, TREES_4: 15;

        end;

          suppose ex C,I1,I2 be Element of A st I = ( if-then-else (C,I1,I2));

          then

          consider C,I1,I2 be Element of A such that

           A10: I = ( if-then-else (C,I1,I2));

          x = (3 -tree <*C, I1, I2*>) by A10, Th63;

          hence thesis by A6, TREES_4: 15;

        end;

          suppose ex C,J be Element of A st I = ( while (C,J));

          then

          consider C,J be Element of A such that

           A11: I = ( while (C,J));

          x = (4 -tree (C,J)) by A11, Th66

          .= (4 -tree <*C, J*>);

          hence thesis by A6, TREES_4: 15;

        end;

      end;

      deffunc F( object) = ( root-tree $1);

      consider f be Function such that

       A12: ( dom f) = X & for x be Element of X holds (f . x) = F(x) from FUNCT_1:sch 4;

      

       A13: ( rng f) = ( FreeGenSetNSG (S,X))

      proof

        thus ( rng f) c= ( FreeGenSetNSG (S,X))

        proof

          let a be object;

          assume a in ( rng f);

          then

          consider x be object such that

           A14: x in X and

           A15: a = (f . x) by A12, FUNCT_1:def 3;

          a = F(x) by A12, A14, A15;

          hence thesis by A1, A14;

        end;

        let a be object;

        assume a in ( FreeGenSetNSG (S,X));

        then

        consider s be Symbol of G such that

         A16: a = ( root-tree s) and

         A17: s in X by A1;

        reconsider s as Element of X by A17;

        (f . s) = a by A12, A16;

        hence thesis by A12, FUNCT_1:def 3;

      end;

      f is one-to-one

      proof

        let a,b be object;

        assume that

         A18: a in ( dom f) and

         A19: b in ( dom f);

        reconsider x = a, y = b as Element of X by A12, A18, A19;

        assume (f . a) = (f . b);

        

        then F(x) = (f . b) by A12

        .= F(y) by A12;

        hence thesis by TREES_4: 4;

      end;

      then (X,( FreeGenSetNSG (S,X))) are_equipotent by A12, A13, WELLORD2:def 4;

      hence thesis by CARD_1: 5;

    end;

    registration

      cluster infinite disjoint_with_NAT for set;

      existence

      proof

        take X = [: NAT , { 0 }:];

        thus X is infinite;

        now

          let x be object;

          assume x in X;

          then

           A1: ex a,b be object st (a in NAT ) & (b in { 0 }) & (x = [a, b]) by ZFMISC_1:def 2;

          assume x in NAT ;

          hence contradiction by A1;

        end;

        hence X misses NAT by XBOOLE_0: 3;

      end;

    end

    registration

      let X be infinite disjoint_with_NAT set;

      cluster ( FreeUnivAlgNSG ( ECIW-signature ,X)) -> infinite;

      coherence

      proof

        ( card X) = ( card ( FreeGenSetNSG ( ECIW-signature ,X))) by Th70;

        then ( card ( ElementaryInstructions ( FreeUnivAlgNSG ( ECIW-signature ,X)))) is infinite by Th70;

        hence ( ElementaryInstructions ( FreeUnivAlgNSG ( ECIW-signature ,X))) is infinite;

      end;

    end

    registration

      let X be disjoint_with_NAT non empty set;

      cluster ( FreeUnivAlgNSG ( ECIW-signature ,X)) -> ECIW-strict;

      coherence by FREEALG: 4;

    end

    theorem :: AOFA_000:71

    

     Th71: for A be preIfWhileAlgebra holds ( Generators A) c= ( ElementaryInstructions A)

    proof

      let A be preIfWhileAlgebra;

      let x be object;

      assume that

       A1: x in ( Generators A) and

       A2: x nin ( ElementaryInstructions A);

      reconsider x as Element of A by A1;

      ( dom ( Den (( In (1,( dom the charact of A))),A))) = { {} } by Th42;

      then

       A3: {} in ( dom ( Den (( In (1,( dom the charact of A))),A))) by TARSKI:def 1;

      per cases by A2, Th53;

        suppose x = ( EmptyIns A);

        then x in ( rng ( Den (( In (1,( dom the charact of A))),A))) by A3, FUNCT_1: 3;

        hence contradiction by A1, Th26;

      end;

        suppose ex I1,I2 be Element of A st x = (I1 \; I2) & I1 <> (I1 \; I2) & I2 <> (I1 \; I2);

        then

        consider I1,I2 be Element of A such that

         A4: x = (I1 \; I2) and I1 <> (I1 \; I2) and I2 <> (I1 \; I2);

        ( dom ( Den (( In (2,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th44;

        then <*I1, I2*> in ( dom ( Den (( In (2,( dom the charact of A))),A))) by FINSEQ_2: 137;

        then x in ( rng ( Den (( In (2,( dom the charact of A))),A))) by A4, FUNCT_1: 3;

        hence contradiction by A1, Th26;

      end;

        suppose ex C,I1,I2 be Element of A st x = ( if-then-else (C,I1,I2));

        then

        consider C,I1,I2 be Element of A such that

         A5: x = ( if-then-else (C,I1,I2));

        ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A) by Th47;

        then <*C, I1, I2*> in ( dom ( Den (( In (3,( dom the charact of A))),A))) by FINSEQ_2: 139;

        then x in ( rng ( Den (( In (3,( dom the charact of A))),A))) by A5, FUNCT_1: 3;

        hence contradiction by A1, Th26;

      end;

        suppose ex C,J be Element of A st x = ( while (C,J));

        then

        consider C,J be Element of A such that

         A6: x = ( while (C,J));

        ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

        then <*C, J*> in ( dom ( Den (( In (4,( dom the charact of A))),A))) by FINSEQ_2: 137;

        then x in ( rng ( Den (( In (4,( dom the charact of A))),A))) by A6, FUNCT_1: 3;

        hence contradiction by A1, Th26;

      end;

    end;

    theorem :: AOFA_000:72

    

     Th72: for A be preIfWhileAlgebra st A is free holds for C,I1,I2 be Element of A holds ( EmptyIns A) <> (I1 \; I2) & ( EmptyIns A) <> ( if-then-else (C,I1,I2)) & ( EmptyIns A) <> ( while (C,I1))

    proof

      let A be preIfWhileAlgebra such that

       A1: A is free;

      let C,I1,I2 be Element of A;

      

       A2: ( dom ( Den (( In (1,( dom the charact of A))),A))) = { {} } by Th42;

      

       A3: ( dom ( Den (( In (2,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th44;

      

       A4: ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A) by Th47;

      

       A5: ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

      

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

       <*I1, I2*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      hence ( EmptyIns A) <> (I1 \; I2) by A1, A2, A3, A6, Th36;

       <*C, I1, I2*> in (3 -tuples_on the carrier of A) by FINSEQ_2: 139;

      hence ( EmptyIns A) <> ( if-then-else (C,I1,I2)) by A1, A2, A4, A6, Th36;

       <*C, I1*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      hence thesis by A1, A2, A5, A6, Th36;

    end;

    theorem :: AOFA_000:73

    

     Th73: for A be preIfWhileAlgebra st A is free holds for I1,I2,C,J1,J2 be Element of A holds (I1 \; I2) <> I1 & (I1 \; I2) <> I2 & ((I1 \; I2) = (J1 \; J2) implies I1 = J1 & I2 = J2) & (I1 \; I2) <> ( if-then-else (C,J1,J2)) & (I1 \; I2) <> ( while (C,J1))

    proof

      let A be preIfWhileAlgebra such that

       A1: A is free;

      let I1,I2,C,J1,J2 be Element of A;

      

       A2: 2 in ( dom the charact of A) by Def11;

      

       A3: ( dom ( Den (( In (2,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th44;

      

       A4: ( In (2,( dom the charact of A))) = 2 by A2, SUBSET_1:def 8;

      

       A5: 3 in ( dom the charact of A) by Def12;

      

       A6: ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A) by Th47;

      

       A7: ( In (3,( dom the charact of A))) = 3 by A5, SUBSET_1:def 8;

      

       A8: 4 in ( dom the charact of A) by Def13;

      

       A9: ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

      

       A10: ( In (4,( dom the charact of A))) = 4 by A8, SUBSET_1:def 8;

      

       A11: <*I1, I2*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      

       A12: <*J1, J2*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      

       A13: ( rng <*I1, I2*>) = {I1, I2} by FINSEQ_2: 127;

      then

       A14: I1 in ( rng <*I1, I2*>) by TARSKI:def 2;

      I2 in ( rng <*I1, I2*>) by A13, TARSKI:def 2;

      hence (I1 \; I2) <> I1 & (I1 \; I2) <> I2 by A1, A3, A11, A14, Th38;

      hereby

        assume (I1 \; I2) = (J1 \; J2);

        then <*I1, I2*> = <*J1, J2*> by A1, A3, A11, A12, Th36;

        hence I1 = J1 & I2 = J2 by FINSEQ_1: 77;

      end;

       <*C, J1, J2*> in (3 -tuples_on the carrier of A) by FINSEQ_2: 139;

      hence (I1 \; I2) <> ( if-then-else (C,J1,J2)) by A1, A3, A4, A6, A7, A11, Th36;

       <*C, J1*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      hence thesis by A1, A3, A4, A9, A10, A11, Th36;

    end;

    theorem :: AOFA_000:74

    

     Th74: for A be preIfWhileAlgebra st A is free holds for C,I1,I2,D,J1,J2 be Element of A holds ( if-then-else (C,I1,I2)) <> C & ( if-then-else (C,I1,I2)) <> I1 & ( if-then-else (C,I1,I2)) <> I2 & ( if-then-else (C,I1,I2)) <> ( while (D,J1)) & (( if-then-else (C,I1,I2)) = ( if-then-else (D,J1,J2)) implies C = D & I1 = J1 & I2 = J2)

    proof

      let A be preIfWhileAlgebra such that

       A1: A is free;

      let C,I1,I2,D,J1,J2 be Element of A;

      

       A2: 3 in ( dom the charact of A) by Def12;

      

       A3: ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A) by Th47;

      

       A4: ( In (3,( dom the charact of A))) = 3 by A2, SUBSET_1:def 8;

      

       A5: 4 in ( dom the charact of A) by Def13;

      

       A6: ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

      

       A7: ( In (4,( dom the charact of A))) = 4 by A5, SUBSET_1:def 8;

      

       A8: <*C, I1, I2*> in (3 -tuples_on the carrier of A) by FINSEQ_2: 139;

      

       A9: <*D, J1, J2*> in (3 -tuples_on the carrier of A) by FINSEQ_2: 139;

      

       A10: ( rng <*C, I1, I2*>) = {C, I1, I2} by FINSEQ_2: 128;

      then

       A11: C in ( rng <*C, I1, I2*>) by ENUMSET1:def 1;

      

       A12: I1 in ( rng <*C, I1, I2*>) by A10, ENUMSET1:def 1;

      I2 in ( rng <*C, I1, I2*>) by A10, ENUMSET1:def 1;

      hence ( if-then-else (C,I1,I2)) <> C & ( if-then-else (C,I1,I2)) <> I1 & ( if-then-else (C,I1,I2)) <> I2 by A1, A3, A8, A11, A12, Th38;

       <*D, J1*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      hence ( if-then-else (C,I1,I2)) <> ( while (D,J1)) by A1, A3, A4, A6, A7, A8, Th36;

      assume ( if-then-else (C,I1,I2)) = ( if-then-else (D,J1,J2));

      then <*C, I1, I2*> = <*D, J1, J2*> by A1, A3, A8, A9, Th36;

      hence thesis by FINSEQ_1: 78;

    end;

    theorem :: AOFA_000:75

    

     Th75: for A be preIfWhileAlgebra st A is free holds for C,I,D,J be Element of A holds ( while (C,I)) <> C & ( while (C,I)) <> I & (( while (C,I)) = ( while (D,J)) implies C = D & I = J)

    proof

      let A be preIfWhileAlgebra such that

       A1: A is free;

      let C,I,D,J be Element of A;

      

       A2: ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

      

       A3: <*C, I*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      

       A4: <*D, J*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      

       A5: ( rng <*C, I*>) = {C, I} by FINSEQ_2: 127;

      then

       A6: C in ( rng <*C, I*>) by TARSKI:def 2;

      I in ( rng <*C, I*>) by A5, TARSKI:def 2;

      hence ( while (C,I)) <> C & ( while (C,I)) <> I by A1, A2, A3, A6, Th38;

      assume ( while (C,I)) = ( while (D,J));

      then <*C, I*> = <*D, J*> by A1, A2, A3, A4, Th36;

      hence thesis by FINSEQ_1: 77;

    end;

    registration

      cluster free -> well_founded non degenerated for preIfWhileAlgebra;

      coherence

      proof

        let A be preIfWhileAlgebra;

        assume

         A1: A is free;

        then

        reconsider A9 = A as free Universal_Algebra;

        set G = the free GeneratorSet of A9;

        ( Generators A) = G by Th34;

        hence ( ElementaryInstructions A) is GeneratorSet of A by Th31, Th71;

        thus not ex I1,I2 be Element of A st I1 <> ( EmptyIns A) & (I1 \; I2) = I2 or I2 <> ( EmptyIns A) & (I1 \; I2) = I1 or (I1 <> ( EmptyIns A) or I2 <> ( EmptyIns A)) & (I1 \; I2) = ( EmptyIns A) by A1, Th72, Th73;

        thus thesis by A1, Th72, Th73, Th74;

      end;

    end

    registration

      cluster infinite non degenerated well_founded ECIW-strict free strict for preIfWhileAlgebra;

      existence

      proof

        set X = the infinite disjoint_with_NAT set;

        take ( FreeUnivAlgNSG ( ECIW-signature ,X));

        thus thesis;

      end;

    end

    definition

      mode IfWhileAlgebra is non degenerated well_founded ECIW-strict preIfWhileAlgebra;

    end

    registration

      let A be infinite preIfWhileAlgebra;

      cluster ( ElementaryInstructions A) -> infinite;

      coherence by Def23;

    end

    theorem :: AOFA_000:76

    

     Th76: for A be preIfWhileAlgebra holds for B be Subset of A holds for n be Nat holds ( EmptyIns A) in (B |^ (n + 1)) & for C,I1,I2 be Element of A st C in (B |^ n) & I1 in (B |^ n) & I2 in (B |^ n) holds (I1 \; I2) in (B |^ (n + 1)) & ( if-then-else (C,I1,I2)) in (B |^ (n + 1)) & ( while (C,I1)) in (B |^ (n + 1))

    proof

      let A be preIfWhileAlgebra;

      let B be Subset of A;

      let n be Nat;

      set X = { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) };

      

       A1: (B |^ (n + 1)) = ((B |^ n) \/ X) by Th19;

      reconsider pe = ( <*> the carrier of A) as Element of (the carrier of A * ) by FINSEQ_1:def 11;

      

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

      

       A3: ( rng pe) = {} ;

      

       A4: ( dom ( Den (( In (1,( dom the charact of A))),A))) = { {} } by Th42;

       {} c= (B |^ n);

      then ( EmptyIns A) in X by A2, A3, A4;

      hence ( EmptyIns A) in (B |^ (n + 1)) by A1, XBOOLE_0:def 3;

      let C,I1,I2 be Element of A;

      assume

       A5: C in (B |^ n);

      assume

       A6: I1 in (B |^ n);

      assume

       A7: I2 in (B |^ n);

      

       A8: <*I1, I2*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      

       A9: ( rng <*I1, I2*>) = {I1, I2} by FINSEQ_2: 127;

      

       A10: ( dom ( Den (( In (2,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th44;

       {I1, I2} c= (B |^ n) by A6, A7, ZFMISC_1: 32;

      then (I1 \; I2) in X by A8, A9, A10;

      hence (I1 \; I2) in (B |^ (n + 1)) by A1, XBOOLE_0:def 3;

      

       A11: <*C, I1, I2*> in (3 -tuples_on the carrier of A) by FINSEQ_2: 139;

      

       A12: ( rng <*C, I1, I2*>) = {C, I1, I2} by FINSEQ_2: 128;

      

       A13: ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A) by Th47;

       {C, I1, I2} c= (B |^ n) by A5, A6, A7, ZFMISC_1: 133;

      then ( if-then-else (C,I1,I2)) in X by A11, A12, A13;

      hence ( if-then-else (C,I1,I2)) in (B |^ (n + 1)) by A1, XBOOLE_0:def 3;

      

       A14: <*C, I1*> in (2 -tuples_on the carrier of A) by FINSEQ_2: 137;

      

       A15: ( rng <*C, I1*>) = {C, I1} by FINSEQ_2: 127;

      

       A16: ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

       {C, I1} c= (B |^ n) by A5, A6, ZFMISC_1: 32;

      then ( while (C,I1)) in X by A14, A15, A16;

      hence thesis by A1, XBOOLE_0:def 3;

    end;

    theorem :: AOFA_000:77

    

     Th77: for A be ECIW-strict preIfWhileAlgebra holds for x be set, n be Nat st x in (( ElementaryInstructions A) |^ (n + 1)) holds x in (( ElementaryInstructions A) |^ n) or x = ( EmptyIns A) or (ex I1,I2 be Element of A st x = (I1 \; I2) & I1 in (( ElementaryInstructions A) |^ n) & I2 in (( ElementaryInstructions A) |^ n)) or (ex C,I1,I2 be Element of A st x = ( if-then-else (C,I1,I2)) & C in (( ElementaryInstructions A) |^ n) & I1 in (( ElementaryInstructions A) |^ n) & I2 in (( ElementaryInstructions A) |^ n)) or ex C,I be Element of A st x = ( while (C,I)) & C in (( ElementaryInstructions A) |^ n) & I in (( ElementaryInstructions A) |^ n)

    proof

      let A be ECIW-strict preIfWhileAlgebra;

      set B = ( ElementaryInstructions A);

      let x be set;

      let n be Nat;

      assume

       A1: x in (B |^ (n + 1));

      then

      reconsider I = x as Element of A;

      assume

       A2: x nin (B |^ n);

      assume

       A3: x <> ( EmptyIns A);

      assume

       A4: not ex I1,I2 be Element of A st x = (I1 \; I2) & I1 in (B |^ n) & I2 in (B |^ n);

      assume

       A5: not ex C,I1,I2 be Element of A st x = ( if-then-else (C,I1,I2)) & C in (B |^ n) & I1 in (B |^ n) & I2 in (B |^ n);

      (B |^ (n + 1)) = ((B |^ n) \/ { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) }) by Th19;

      then x in { (( Den (o,A)) . p) where o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (o,A))) & ( rng p) c= (B |^ n) } by A1, A2, XBOOLE_0:def 3;

      then

      consider o be Element of ( dom the charact of A), p be Element of (the carrier of A * ) such that

       A6: I = (( Den (o,A)) . p) and

       A7: p in ( dom ( Den (o,A))) and

       A8: ( rng p) c= (B |^ n);

      reconsider no = o as Element of NAT ;

      reconsider oo = ( Den (o,A)) as Element of ( Operations A);

      ( len ( signature A)) = ( len the charact of A) by UNIALG_1:def 4;

      then

       A9: ( dom ( signature A)) = ( dom the charact of A) by FINSEQ_3: 29;

      

       A10: ( len p) = ( arity oo) by A7, MARGREL1:def 25

      .= (( signature A) . no) by A9, UNIALG_1:def 4

      .= ( ECIW-signature . o) by Def27;

      

       A11: 1 in ( Seg 2);

      

       A12: 2 in ( Seg 2);

      

       A13: 1 in ( Seg 3);

      

       A14: 2 in ( Seg 3);

      

       A15: 3 in ( Seg 3);

      per cases by Th55;

        suppose

         A16: o = 1;

        then p = {} by A10, Th54;

        hence thesis by A3, A6, A16;

      end;

        suppose

         A17: o = 2;

        then

         A18: p = <*(p . 1), (p . 2)*> by A10, Th54, FINSEQ_1: 44;

        

         A19: ( dom p) = ( Seg 2) by A10, A17, Th54, FINSEQ_1:def 3;

        then

         A20: (p . 1) in ( rng p) by A11, FUNCT_1:def 3;

        

         A21: (p . 2) in ( rng p) by A12, A19, FUNCT_1:def 3;

        then

        reconsider I1 = (p . 1), I2 = (p . 2) as Element of A by A20;

        I = (I1 \; I2) by A6, A17, A18;

        hence thesis by A4, A8, A20, A21;

      end;

        suppose

         A22: o = 3;

        then

         A23: p = <*(p . 1), (p . 2), (p . 3)*> by A10, Th54, FINSEQ_1: 45;

        

         A24: ( dom p) = ( Seg 3) by A10, A22, Th54, FINSEQ_1:def 3;

        then

         A25: (p . 1) in ( rng p) by A13, FUNCT_1:def 3;

        

         A26: (p . 2) in ( rng p) by A14, A24, FUNCT_1:def 3;

        

         A27: (p . 3) in ( rng p) by A15, A24, FUNCT_1:def 3;

        then

        reconsider C = (p . 1), I1 = (p . 2), I2 = (p . 3) as Element of A by A25, A26;

        I = ( if-then-else (C,I1,I2)) by A6, A22, A23;

        hence thesis by A5, A8, A25, A26, A27;

      end;

        suppose

         A28: o = 4;

        then

         A29: p = <*(p . 1), (p . 2)*> by A10, Th54, FINSEQ_1: 44;

        

         A30: ( dom p) = ( Seg 2) by A10, A28, Th54, FINSEQ_1:def 3;

        then

         A31: (p . 1) in ( rng p) by A11, FUNCT_1:def 3;

        

         A32: (p . 2) in ( rng p) by A12, A30, FUNCT_1:def 3;

        then

        reconsider I1 = (p . 1), I2 = (p . 2) as Element of A by A31;

        I = ( while (I1,I2)) by A6, A28, A29;

        hence thesis by A8, A31, A32;

      end;

    end;

    theorem :: AOFA_000:78

    for A be Universal_Algebra holds for B be Subset of A holds ( Constants A) c= (B |^ 1)

    proof

      let A be Universal_Algebra;

      let B be Subset of A;

      let x be object;

      assume x in ( Constants A);

      then

      consider a be Element of A such that

       A1: x = a and

       A2: ex o be Element of ( Operations A) st ( arity o) = 0 & a in ( rng o);

      consider o be Element of ( Operations A) such that

       A3: ( arity o) = 0 and

       A4: a in ( rng o) by A2;

      consider s be object such that

       A5: s in ( dom o) and

       A6: a = (o . s) by A4, FUNCT_1:def 3;

      consider z be object such that

       A7: z in ( dom the charact of A) and

       A8: o = (the charact of A . z) by FUNCT_1:def 3;

      reconsider z as Element of ( dom the charact of A) by A7;

      

       A9: ( Den (z,A)) = o by A8;

      

       A10: s is Element of ( 0 -tuples_on the carrier of A) by A3, A5, MARGREL1: 22;

      reconsider s as Element of (the carrier of A * ) by A5;

      ( rng s) c= B by A10;

      then

       A11: x in { (( Den (r,A)) . p) where r be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (r,A))) & ( rng p) c= B } by A1, A5, A6, A9;

      (B |^ 0 ) = B by Th18;

      then (B |^ ( 0 + 1)) = (B \/ { (( Den (r,A)) . p) where r be Element of ( dom the charact of A), p be Element of (the carrier of A * ) : p in ( dom ( Den (r,A))) & ( rng p) c= B }) by Th19;

      hence thesis by A11, XBOOLE_0:def 3;

    end;

    theorem :: AOFA_000:79

    

     Th79: for A be preIfWhileAlgebra holds A is well_founded iff for I be Element of A holds ex n be Nat st I in (( ElementaryInstructions A) |^ n) by Th30;

    scheme :: AOFA_000:sch2

    StructInd { A() -> well_founded ECIW-strict preIfWhileAlgebra , I() -> Element of A() , P[ set] } :

P[I()]

      provided

       A1: for I be Element of A() st I in ( ElementaryInstructions A()) holds P[I]

       and

       A2: P[( EmptyIns A())]

       and

       A3: for I1,I2 be Element of A() st P[I1] & P[I2] holds P[(I1 \; I2)]

       and

       A4: for C,I1,I2 be Element of A() st P[C] & P[I1] & P[I2] holds P[( if-then-else (C,I1,I2))]

       and

       A5: for C,I be Element of A() st P[C] & P[I] holds P[( while (C,I))];

      set A = A();

      

       A6: ex n be Nat st (I() in (( ElementaryInstructions A()) |^ n)) by Th79;

      defpred Q[ Nat] means for I be Element of A() st I in (( ElementaryInstructions A()) |^ $1) holds P[I];

      (( ElementaryInstructions A()) |^ 0 ) = ( ElementaryInstructions A()) by Th18;

      then

       A7: Q[ 0 ] by A1;

       A8:

      now

        let n be Nat;

        assume

         A9: Q[n];

        thus Q[(n + 1)]

        proof

          let I be Element of A();

          assume

           A10: I in (( ElementaryInstructions A()) |^ (n + 1));

          per cases by A10, Th77;

            suppose I in (( ElementaryInstructions A) |^ n);

            hence thesis by A9;

          end;

            suppose I = ( EmptyIns A);

            hence thesis by A2;

          end;

            suppose ex I1,I2 be Element of A st I = (I1 \; I2) & I1 in (( ElementaryInstructions A) |^ n) & I2 in (( ElementaryInstructions A) |^ n);

            then

            consider I1,I2 be Element of A such that

             A11: I = (I1 \; I2) and

             A12: I1 in (( ElementaryInstructions A) |^ n) and

             A13: I2 in (( ElementaryInstructions A) |^ n);

            

             A14: P[I1] by A9, A12;

            P[I2] by A9, A13;

            hence thesis by A3, A11, A14;

          end;

            suppose ex C,I1,I2 be Element of A st I = ( if-then-else (C,I1,I2)) & C in (( ElementaryInstructions A) |^ n) & I1 in (( ElementaryInstructions A) |^ n) & I2 in (( ElementaryInstructions A) |^ n);

            then

            consider C,I1,I2 be Element of A such that

             A15: I = ( if-then-else (C,I1,I2)) and

             A16: C in (( ElementaryInstructions A) |^ n) and

             A17: I1 in (( ElementaryInstructions A) |^ n) and

             A18: I2 in (( ElementaryInstructions A) |^ n);

            

             A19: P[C] by A9, A16;

            

             A20: P[I1] by A9, A17;

            P[I2] by A9, A18;

            hence thesis by A4, A15, A19, A20;

          end;

            suppose ex C,J be Element of A st I = ( while (C,J)) & C in (( ElementaryInstructions A) |^ n) & J in (( ElementaryInstructions A) |^ n);

            then

            consider C,J be Element of A such that

             A21: I = ( while (C,J)) and

             A22: C in (( ElementaryInstructions A) |^ n) and

             A23: J in (( ElementaryInstructions A) |^ n);

            

             A24: P[C] by A9, A22;

            P[J] by A9, A23;

            hence thesis by A5, A21, A24;

          end;

        end;

      end;

      for n be Nat holds Q[n] from NAT_1:sch 2( A7, A8);

      hence thesis by A6;

    end;

    begin

    definition

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let f be Function of [:S, the carrier of A:], S;

      :: AOFA_000:def28

      attr f is complying_with_empty-instruction means

      : Def28: for s be Element of S holds (f . (s,( EmptyIns A))) = s;

      :: AOFA_000:def29

      attr f is complying_with_catenation means

      : Def29: for s be Element of S holds for I1,I2 be Element of A holds (f . (s,(I1 \; I2))) = (f . ((f . (s,I1)),I2));

    end

    definition

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let T be Subset of S;

      let f be Function of [:S, the carrier of A:], S;

      :: AOFA_000:def30

      pred f complies_with_if_wrt T means for s be Element of S holds for C,I1,I2 be Element of A holds ((f . (s,C)) in T implies (f . (s,( if-then-else (C,I1,I2)))) = (f . ((f . (s,C)),I1))) & ((f . (s,C)) nin T implies (f . (s,( if-then-else (C,I1,I2)))) = (f . ((f . (s,C)),I2)));

      :: AOFA_000:def31

      pred f complies_with_while_wrt T means for s be Element of S holds for C,I be Element of A holds ((f . (s,C)) in T implies (f . (s,( while (C,I)))) = (f . ((f . ((f . (s,C)),I)),( while (C,I))))) & ((f . (s,C)) nin T implies (f . (s,( while (C,I)))) = (f . (s,C)));

    end

    theorem :: AOFA_000:80

    for f be Function of [:S, the carrier of A:], S st f is complying_with_empty-instruction & f complies_with_if_wrt T holds for s be Element of S holds (f . (s,C)) nin T implies (f . (s,( if-then (C,I)))) = (f . (s,C))

    proof

      let f be Function of [:S, the carrier of A:], S such that

       A1: f is complying_with_empty-instruction and

       A2: f complies_with_if_wrt T;

      let s be Element of S;

      assume (f . (s,C)) nin T;

      

      hence (f . (s,( if-then (C,I)))) = (f . ((f . (s,C)),( EmptyIns A))) by A2

      .= (f . (s,C)) by A1;

    end;

    theorem :: AOFA_000:81

    

     Th81: ( pr1 (S,the carrier of A)) is complying_with_empty-instruction & ( pr1 (S,the carrier of A)) is complying_with_catenation & ( pr1 (S,the carrier of A)) complies_with_if_wrt T & ( pr1 (S,the carrier of A)) complies_with_while_wrt T

    proof

      set f = ( pr1 (S,the carrier of A));

      thus for s be Element of S holds (f . (s,( EmptyIns A))) = s by FUNCT_3:def 4;

      hereby

        let s be Element of S;

        let I1,I2 be Element of A;

        

        thus (f . (s,(I1 \; I2))) = s by FUNCT_3:def 4

        .= (f . (s,I1)) by FUNCT_3:def 4

        .= (f . ((f . (s,I1)),I2)) by FUNCT_3:def 4;

      end;

      hereby

        let s be Element of S;

        let C,I1,I2 be Element of A;

        (f . (s,( if-then-else (C,I1,I2)))) = s by FUNCT_3:def 4

        .= (f . (s,C)) by FUNCT_3:def 4;

        hence ((f . (s,C)) in T implies (f . (s,( if-then-else (C,I1,I2)))) = (f . ((f . (s,C)),I1))) & ((f . (s,C)) nin T implies (f . (s,( if-then-else (C,I1,I2)))) = (f . ((f . (s,C)),I2))) by FUNCT_3:def 4;

      end;

      let s be Element of S;

      let C,I be Element of A;

      (f . (s,C)) = s by FUNCT_3:def 4;

      hence thesis by FUNCT_3:def 4;

    end;

    definition

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let T be Subset of S;

      :: AOFA_000:def32

      mode ExecutionFunction of A,S,T -> Function of [:S, the carrier of A:], S means

      : Def32: it is complying_with_empty-instruction & it is complying_with_catenation & it complies_with_if_wrt T & it complies_with_while_wrt T;

      existence

      proof

        take ( pr1 (S,the carrier of A));

        thus thesis by Th81;

      end;

    end

    registration

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let T be Subset of S;

      cluster -> complying_with_empty-instruction complying_with_catenation for ExecutionFunction of A, S, T;

      coherence by Def32;

    end

    definition

      let A be preIfWhileAlgebra;

      let I be Element of A;

      let S be non empty set;

      let s be Element of S;

      let T be Subset of S;

      let f be ExecutionFunction of A, S, T;

      :: AOFA_000:def33

      pred f iteration_terminates_for I,s means ex r be non empty FinSequence of S st (r . 1) = s & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I));

    end

    definition

      let A be preIfWhileAlgebra;

      let I be Element of A;

      let S be non empty set;

      let s be Element of S;

      let T be Subset of S;

      let f be ExecutionFunction of A, S, T;

      :: AOFA_000:def34

      func iteration-degree (I,s,f) -> R_eal means

      : Def34: ex r be non empty FinSequence of S st it = (( len r) - 1) & (r . 1) = s & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) if f iteration_terminates_for (I,s)

      otherwise it = +infty ;

      correctness

      proof

         A1:

        now

          assume f iteration_terminates_for (I,s);

          then

          consider r be non empty FinSequence of S such that

           A2: (r . 1) = s and

           A3: (r . ( len r)) nin T and

           A4: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I));

          reconsider x = (( len r) - 1) as R_eal by XXREAL_0:def 1;

          take x, r;

          thus x = (( len r) - 1) & (r . 1) = s & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by A2, A3, A4;

        end;

        now

          let d1,d2 be R_eal;

          given r1 be non empty FinSequence of S such that

           A5: d1 = (( len r1) - 1) and

           A6: (r1 . 1) = s and

           A7: (r1 . ( len r1)) nin T and

           A8: for i be Nat st 1 <= i & i < ( len r1) holds (r1 . i) in T & (r1 . (i + 1)) = (f . ((r1 . i),I));

          given r2 be non empty FinSequence of S such that

           A9: d2 = (( len r2) - 1) and

           A10: (r2 . 1) = s and

           A11: (r2 . ( len r2)) nin T and

           A12: for i be Nat st 1 <= i & i < ( len r2) holds (r2 . i) in T & (r2 . (i + 1)) = (f . ((r2 . i),I));

          defpred P[ Nat] means $1 < ( len r1) implies $1 < ( len r2) & (r1 . ($1 + 1)) = (r2 . ($1 + 1));

          

           A13: P[ 0 ] by A6, A10;

           A14:

          now

            let i be Nat;

            assume

             A15: P[i];

            thus P[(i + 1)]

            proof

              assume

               A16: (i + 1) < ( len r1);

              

               A17: 1 <= (i + 1) by NAT_1: 11;

              then

               A18: (r1 . ((i + 1) + 1)) = (f . ((r1 . (i + 1)),I)) by A8, A16;

              

               A19: (r1 . (i + 1)) in T by A8, A16, A17;

              (i + 1) <= ( len r2) by A15, A16, NAT_1: 13;

              hence (i + 1) < ( len r2) by A11, A15, A16, A19, NAT_1: 13, XXREAL_0: 1;

              hence (r1 . ((i + 1) + 1)) = (r2 . ((i + 1) + 1)) by A12, A15, A16, A17, A18, NAT_1: 13;

            end;

          end;

          

           A20: for i be Nat holds P[i] from NAT_1:sch 2( A13, A14);

          consider i be Nat such that

           A21: ( len r1) = (i + 1) by NAT_1: 6;

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

          i < ( len r1) by A21, NAT_1: 13;

          then

           A22: (r1 . ( len r1)) = (r2 . ( len r1)) by A20, A21;

          

           A23: 1 <= ( len r1) by A21, NAT_1: 11;

          

           A24: ( len r1) <= ( len r2) by A20;

          ( len r2) <= ( len r1) by A7, A12, A22, A23;

          hence d1 = d2 by A5, A9, A24, XXREAL_0: 1;

        end;

        hence thesis by A1;

      end;

    end

    reserve f for ExecutionFunction of A, S, T;

    theorem :: AOFA_000:82

    f iteration_terminates_for (I,s) iff ( iteration-degree (I,s,f)) < +infty

    proof

      hereby

        assume f iteration_terminates_for (I,s);

        then

        consider r be non empty FinSequence of S such that

         A1: ( iteration-degree (I,s,f)) = (( len r) - 1) and (r . 1) = s and (r . ( len r)) nin T and for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by Def34;

        (( len r) - 1) in REAL by XREAL_0:def 1;

        hence ( iteration-degree (I,s,f)) < +infty by A1, XXREAL_0: 9;

      end;

      thus thesis by Def34;

    end;

    theorem :: AOFA_000:83

    

     Th83: s nin T implies f iteration_terminates_for (I,s) & ( iteration-degree (I,s,f)) = 0

    proof

      assume

       A1: s nin T;

      set r = <*s*>;

      

       A2: (r . 1) = s by FINSEQ_1: 40;

      

       A3: ( len r) = 1 by FINSEQ_1: 40;

      

       A4: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by FINSEQ_1: 40;

      

       A5: (1 - 1) = 0. ;

      thus f iteration_terminates_for (I,s)

      proof

        take <*s*>;

        thus thesis by A1, A2, FINSEQ_1: 40;

      end;

      hence thesis by A1, A2, A3, A4, A5, Def34;

    end;

    theorem :: AOFA_000:84

    s in T implies (f iteration_terminates_for (I,s) iff f iteration_terminates_for (I,(f . (s,I)))) & ( iteration-degree (I,s,f)) = ( 1. + ( iteration-degree (I,(f . (s,I)),f)))

    proof

      assume

       A1: s in T;

      thus

       A2: f iteration_terminates_for (I,s) iff f iteration_terminates_for (I,(f . (s,I)))

      proof

        thus f iteration_terminates_for (I,s) implies f iteration_terminates_for (I,(f . (s,I)))

        proof

          given r be non empty FinSequence of S such that

           A3: (r . 1) = s and

           A4: (r . ( len r)) nin T and

           A5: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I));

          consider r1 be Element of S, q be FinSequence of S such that r1 = (r . 1) and

           A6: r = ( <*r1*> ^ q) by FINSEQ_3: 102;

          

           A7: ( len r) = (1 + ( len q)) by A6, FINSEQ_5: 8;

          then

          reconsider q as non empty FinSequence of S by A1, A3, A4;

          ( len r) >= 1 by A7, NAT_1: 11;

          then

           A8: 1 < ( len r) by A1, A3, A4, XXREAL_0: 1;

          

           A9: ( len q) >= ( 0 + 1) by NAT_1: 13;

          take q;

          

           A10: ( len <*r1*>) = 1 by FINSEQ_1: 40;

          1 in ( dom q) by A9, FINSEQ_3: 25;

          

          hence (q . 1) = (r . (1 + 1)) by A6, A10, FINSEQ_1:def 7

          .= (f . (s,I)) by A3, A5, A8;

          ( len q) in ( dom q) by A9, FINSEQ_3: 25;

          hence (q . ( len q)) nin T by A4, A6, A7, A10, FINSEQ_1:def 7;

          let i be Nat;

          assume that

           A11: 1 <= i and

           A12: i < ( len q);

          

           A13: i in ( dom q) by A11, A12, MSUALG_8: 1;

          

           A14: 1 <= (i + 1) by NAT_1: 11;

          

           A15: (i + 1) < ( len r) by A7, A12, XREAL_1: 6;

          

           A16: (i + 1) in ( dom q) by A11, A12, MSUALG_8: 1;

          

           A17: (r . (i + 1)) = (q . i) by A6, A10, A13, FINSEQ_1:def 7;

          (r . ((i + 1) + 1)) = (q . (i + 1)) by A6, A10, A16, FINSEQ_1:def 7;

          hence thesis by A5, A14, A15, A17;

        end;

        given q be non empty FinSequence of S such that

         A18: (q . 1) = (f . (s,I)) and

         A19: (q . ( len q)) nin T and

         A20: for i be Nat st 1 <= i & i < ( len q) holds (q . i) in T & (q . (i + 1)) = (f . ((q . i),I));

        take r = ( <*s*> ^ q);

        

         A21: ( len <*s*>) = 1 by FINSEQ_1: 40;

        thus

         A22: (r . 1) = s by FINSEQ_1: 41;

        

         A23: ( len r) = (1 + ( len q)) by FINSEQ_5: 8;

        

         A24: ( 0 + 1) <= ( len q) by NAT_1: 13;

        then ( len q) in ( dom q) by FINSEQ_3: 25;

        hence (r . ( len r)) nin T by A19, A21, A23, FINSEQ_1:def 7;

        let i be Nat;

        assume that

         A25: 1 <= i and

         A26: i < ( len r);

        consider j be Nat such that

         A27: i = (1 + j) by A25, NAT_1: 10;

        per cases ;

          suppose

           A28: j = 0 ;

          1 in ( dom q) by A24, FINSEQ_3: 25;

          hence thesis by A1, A18, A21, A22, A27, A28, FINSEQ_1:def 7;

        end;

          suppose j > 0 ;

          then

           A29: j >= ( 0 + 1) by NAT_1: 13;

          

           A30: j < ( len q) by A23, A26, A27, XREAL_1: 6;

          

           A31: j in ( dom q) by A29, A30, MSUALG_8: 1;

          

           A32: (j + 1) in ( dom q) by A29, A30, MSUALG_8: 1;

          

           A33: (r . (j + 1)) = (q . j) by A21, A31, FINSEQ_1:def 7;

          (r . ((j + 1) + 1)) = (q . (j + 1)) by A21, A32, FINSEQ_1:def 7;

          hence thesis by A20, A27, A29, A30, A33;

        end;

      end;

      per cases by A2;

        suppose

         A34: not f iteration_terminates_for (I,s);

        then

         A35: ( iteration-degree (I,s,f)) = +infty by Def34;

        ( iteration-degree (I,(f . (s,I)),f)) = +infty by A2, A34, Def34;

        hence thesis by A35, XXREAL_3:def 2;

      end;

        suppose f iteration_terminates_for (I,(f . (s,I)));

        then

        consider q be non empty FinSequence of S such that

         A36: ( iteration-degree (I,(f . (s,I)),f)) = (( len q) - 1) and

         A37: (q . 1) = (f . (s,I)) and

         A38: (q . ( len q)) nin T and

         A39: for i be Nat st 1 <= i & i < ( len q) holds (q . i) in T & (q . (i + 1)) = (f . ((q . i),I)) by Def34;

        set r = ( <*s*> ^ q);

        

         A40: ( len <*s*>) = 1 by FINSEQ_1: 40;

        

         A41: (r . 1) = s by FINSEQ_1: 41;

        

         A42: ( len r) = (1 + ( len q)) by FINSEQ_5: 8;

        (1 + (( len q) - 1)) = ( len q);

        then

         A43: (( len r) - 1) = ( 1. + ( iteration-degree (I,(f . (s,I)),f))) by A36, A42, XXREAL_3:def 2;

        

         A44: ( 0 + 1) <= ( len q) by NAT_1: 13;

        then ( len q) in ( dom q) by FINSEQ_3: 25;

        then

         A45: (r . ( len r)) nin T by A38, A40, A42, FINSEQ_1:def 7;

        now

          let i be Nat;

          assume that

           A46: 1 <= i and

           A47: i < ( len r);

          consider j be Nat such that

           A48: i = (1 + j) by A46, NAT_1: 10;

          per cases ;

            suppose

             A49: j = 0 ;

            1 in ( dom q) by A44, FINSEQ_3: 25;

            hence (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by A1, A37, A40, A41, A48, A49, FINSEQ_1:def 7;

          end;

            suppose j > 0 ;

            then

             A50: j >= ( 0 + 1) by NAT_1: 13;

            

             A51: j < ( len q) by A42, A47, A48, XREAL_1: 6;

            

             A52: j in ( dom q) by A50, A51, MSUALG_8: 1;

            

             A53: (j + 1) in ( dom q) by A50, A51, MSUALG_8: 1;

            

             A54: (r . (j + 1)) = (q . j) by A40, A52, FINSEQ_1:def 7;

            (r . ((j + 1) + 1)) = (q . (j + 1)) by A40, A53, FINSEQ_1:def 7;

            hence (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by A39, A48, A50, A51, A54;

          end;

        end;

        hence thesis by A2, A41, A43, A45, Def34;

      end;

    end;

    theorem :: AOFA_000:85

    ( iteration-degree (I,s,f)) >= 0

    proof

      per cases ;

        suppose not f iteration_terminates_for (I,s);

        hence thesis by Def34;

      end;

        suppose f iteration_terminates_for (I,s);

        then

        consider r be non empty FinSequence of S such that

         A1: ( iteration-degree (I,s,f)) = (( len r) - 1) and (r . 1) = s and (r . ( len r)) nin T and for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by Def34;

        ex i be Nat st ( len r) = (i + 1) by NAT_1: 6;

        hence thesis by A1;

      end;

    end;

    scheme :: AOFA_000:sch3

    Termination { A() -> preIfWhileAlgebra , I() -> Element of A() , S() -> non empty set , s() -> Element of S() , T() -> Subset of S() , f() -> ExecutionFunction of A(), S(), T() , F( set) -> Nat , P[ set] } :

f() iteration_terminates_for (I(),s())

      provided

       A1: s() in T() iff P[s()]

       and

       A2: for s be Element of S() st P[s] holds (P[(f() . (s,I()))] iff (f() . (s,I())) in T()) & F(.) < F(s);

      per cases ;

        suppose s() nin T();

        hence thesis by Th83;

      end;

        suppose

         A3: s() in T();

        deffunc F( set, set) = (f() . (( In ($2,S())),I()));

        consider f be sequence of S() such that

         A4: (f . 0 ) = s() and

         A5: for i be Nat holds (f . (i + 1)) = F(i,.) from NAT_1:sch 12;

        defpred Q[ Nat] means ex i be Element of NAT st F(.) = $1;

        F(.) in NAT by ORDINAL1:def 12;

        then

         A6: ex j be Nat st Q[j];

        consider j be Nat such that

         A7: Q[j] & for i be Nat st Q[i] holds j <= i from NAT_1:sch 5( A6);

        consider i0 be Element of NAT such that

         A8: F(.) = j by A7;

        defpred R[ Nat] means not P[(f . $1)];

        ( In ((f . i0),S())) = (f . i0);

        then (f . (i0 + 1)) = (f() . ((f . i0),I())) by A5;

        then P[(f . i0)] implies F(.) < j by A2, A8;

        then

         A9: ex i be Nat st R[i] by A7;

        consider j be Nat such that

         A10: R[j] & for i be Nat st R[i] holds j <= i from NAT_1:sch 5( A9);

        deffunc G( Nat) = (f . ($1 -' 1));

        consider p be FinSequence of S() such that

         A11: ( len p) = (j + 1) & for i be Nat st i in ( dom p) holds (p . i) = G(i) from FINSEQ_2:sch 1;

        

         A12: ( dom p) = ( Seg (j + 1)) by A11, FINSEQ_1:def 3;

        reconsider p as non empty FinSequence of S() by A11;

        take p;

        

         A13: 1 <= (j + 1) by NAT_1: 11;

        then 1 in ( Seg (j + 1));

        

        hence (p . 1) = G() by A11, A12

        .= s() by A4, XREAL_1: 232;

        ( len p) in ( Seg (j + 1)) by A11, A13;

        

        then

         A14: (p . ( len p)) = G(+) by A11, A12

        .= (f . j) by NAT_D: 34;

        j > 0 by A1, A3, A4, A10;

        then j >= ( 0 + 1) by NAT_1: 13;

        then

        consider j9 be Nat such that

         A15: j = (1 + j9) by NAT_1: 10;

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

        

         A16: (f . j) = (f() . (( In ((f . j9),S())),I())) by A5, A15;

        j9 < j by A15, NAT_1: 13;

        then P[(f . j9)] by A10;

        hence (p . ( len p)) nin T() by A2, A10, A14, A16;

        let i be Nat;

        assume that

         A18: 1 <= i and

         A19: i < ( len p);

        

         A20: (i + 1) >= 1 by A18, NAT_1: 13;

        

         A21: (i + 1) <= ( len p) by A19, NAT_1: 13;

        

         A22: i in ( Seg (j + 1)) by A11, A18, A19;

        

         A23: (i + 1) in ( Seg (j + 1)) by A11, A20, A21;

        

         A24: (p . i) = G(i) by A11, A12, A22;

        

         A25: (p . (i + 1)) = G(+) by A11, A12, A23;

        consider i9 be Nat such that

         A26: i = (1 + i9) by A18, NAT_1: 10;

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

        i <= j by A11, A19, NAT_1: 13;

        then

         A27: i9 < j by A26, NAT_1: 13;

        then

         A28: P[(f . i9)] by A10;

        

         A29: (i -' 1) = i9 by A26, NAT_D: 34;

        

         A30: ((i + 1) -' 1) = i by NAT_D: 34;

        

         A31: ( In ((f . i9),S())) = (f . i9);

        now

          assume i9 <> 0 ;

          then i9 >= ( 0 + 1) by NAT_1: 13;

          then

          consider i99 be Nat such that

           A32: i9 = (1 + i99) by NAT_1: 10;

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

          i99 <= i9 by A32, NAT_1: 11;

          then i99 < j by A27, XXREAL_0: 2;

          then

           A33: P[(f . i99)] by A10;

          (f . i9) = F(i99,.) by A5, A32;

          hence (p . i) in T() by A2, A24, A28, A29, A33;

        end;

        hence thesis by A3, A4, A5, A24, A25, A26, A29, A30, A31;

      end;

    end;

    scheme :: AOFA_000:sch4

    Termination2 { A() -> preIfWhileAlgebra , I() -> Element of A() , S() -> non empty set , s() -> Element of S() , T() -> Subset of S() , f() -> ExecutionFunction of A(), S(), T() , F( set) -> Nat , P,R[ set] } :

f() iteration_terminates_for (I(),s())

      provided

       A1: P[s()]

       and

       A2: s() in T() iff R[s()]

       and

       A3: for s be Element of S() st P[s] & s in T() & R[s] holds P[(f() . (s,I()))] & (R[(f() . (s,I()))] iff (f() . (s,I())) in T()) & F(.) < F(s);

      per cases ;

        suppose s() nin T();

        hence thesis by Th83;

      end;

        suppose

         A4: s() in T();

        deffunc F( set, set) = (f() . (( In ($2,S())),I()));

        consider f be sequence of S() such that

         A5: (f . 0 ) = s() and

         A6: for i be Nat holds (f . (i + 1)) = F(i,.) from NAT_1:sch 12;

        defpred Q[ Nat] means ex i be Element of NAT st F(.) = $1;

        F(.) in NAT by ORDINAL1:def 12;

        then

         A7: ex j be Nat st Q[j];

        consider j be Nat such that

         A8: Q[j] & for i be Nat st Q[i] holds j <= i from NAT_1:sch 5( A7);

        consider i0 be Element of NAT such that

         A9: F(.) = j by A8;

        defpred notR[ Nat] means not (P[(f . $1)] & (f . $1) in T() & R[(f . $1)]);

        ( In ((f . i0),S())) = (f . i0);

        then (f . (i0 + 1)) = (f() . ((f . i0),I())) by A6;

        then not notR[i0] implies F(.) < j by A3, A9;

        then

         A10: ex i be Nat st notR[i] by A8;

        consider j be Nat such that

         A11: notR[j] & for i be Nat st notR[i] holds j <= i from NAT_1:sch 5( A10);

        deffunc G( Nat) = (f . ($1 -' 1));

        consider p be FinSequence of S() such that

         A12: ( len p) = (j + 1) & for i be Nat st i in ( dom p) holds (p . i) = G(i) from FINSEQ_2:sch 1;

        

         A13: ( dom p) = ( Seg (j + 1)) by A12, FINSEQ_1:def 3;

        reconsider p as non empty FinSequence of S() by A12;

        take p;

        

         A14: 1 <= (j + 1) by NAT_1: 11;

        then 1 in ( Seg (j + 1));

        

        hence (p . 1) = G() by A12, A13

        .= s() by A5, XREAL_1: 232;

        ( len p) in ( Seg (j + 1)) by A12, A14;

        

        then

         A15: (p . ( len p)) = G(+) by A12, A13

        .= (f . j) by NAT_D: 34;

        j > 0 by A1, A2, A4, A5, A11;

        then j >= ( 0 + 1) by NAT_1: 13;

        then

        consider j9 be Nat such that

         A16: j = (1 + j9) by NAT_1: 10;

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

        

         A17: (f . j) = (f() . (( In ((f . j9),S())),I())) by A6, A16;

        

         A18: j9 < j by A16, NAT_1: 13;

        then

         A19: R[(f . j9)] by A11;

        

         A20: (f . j9) in T() by A11, A18;

        P[(f . j9)] by A11, A18;

        hence (p . ( len p)) nin T() by A3, A11, A15, A17, A19, A20;

        let i be Nat;

        assume that

         A22: 1 <= i and

         A23: i < ( len p);

        

         A24: (i + 1) >= 1 by A22, NAT_1: 13;

        

         A25: (i + 1) <= ( len p) by A23, NAT_1: 13;

        

         A26: i in ( Seg (j + 1)) by A12, A22, A23;

        

         A27: (i + 1) in ( Seg (j + 1)) by A12, A24, A25;

        

         A28: (p . i) = G(i) by A12, A13, A26;

        

         A29: (p . (i + 1)) = G(+) by A12, A13, A27;

        consider i9 be Nat such that

         A30: i = (1 + i9) by A22, NAT_1: 10;

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

        i <= j by A12, A23, NAT_1: 13;

        then

         A31: i9 < j by A30, NAT_1: 13;

        

         A32: (i -' 1) = i9 by A30, NAT_D: 34;

        

         A33: ((i + 1) -' 1) = i by NAT_D: 34;

        ( In ((f . i9),S())) = (f . i9);

        hence thesis by A6, A11, A28, A29, A30, A31, A32, A33;

      end;

    end;

    theorem :: AOFA_000:86

    

     Th86: for r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),(I \; C))) holds (f . (s,( while (C,I)))) = (r . ( len r))

    proof

      

       A1: f complies_with_while_wrt T by Def32;

      let r be non empty FinSequence of S;

      assume

       A2: (r . 1) = (f . (s,C));

      assume

       A3: (r . ( len r)) nin T;

      assume

       A4: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),(I \; C)));

      defpred P[ Nat] means (( len r) - $1) in ( dom r) implies for q be Element of S st (f . (q,C)) = (r . (( len r) - $1)) holds (f . (q,( while (C,I)))) = (r . ( len r));

      

       A5: P[ 0 ] by A1, A3;

      

       A6: for i be Nat st P[i] holds P[(i + 1)]

      proof

        let i be Nat such that

         A7: P[i] and

         A8: (( len r) - (i + 1)) in ( dom r);

        reconsider j = (( len r) - (i + 1)) as Element of NAT by A8;

        

         A9: ((j + 1) + i) = ( len r);

        

         A10: 1 <= (j + 1) by NAT_1: 11;

        

         A11: (j + 1) <= ( len r) by A9, NAT_1: 11;

        

         A12: 1 <= j by A8, FINSEQ_3: 25;

        

         A13: j < ( len r) by A11, NAT_1: 13;

        then

         A14: (r . (j + 1)) = (f . ((r . j),(I \; C))) by A4, A12;

        let q be Element of S;

        assume

         A15: (f . (q,C)) = (r . (( len r) - (i + 1)));

        then

         A16: (f . (q,C)) in T by A4, A12, A13;

        (r . (j + 1)) = (f . ((f . ((f . (q,C)),I)),C)) by A14, A15, Def29;

        then (f . ((f . ((f . (q,C)),I)),( while (C,I)))) = (r . ( len r)) by A7, A10, A11, FINSEQ_3: 25;

        hence thesis by A1, A16;

      end;

      

       A17: for i be Nat holds P[i] from NAT_1:sch 2( A5, A6);

      

       A18: ( len r) >= ( 0 + 1) by NAT_1: 13;

      then

      consider i be Nat such that

       A19: ( len r) = (1 + i) by NAT_1: 10;

       P[i] by A17;

      hence thesis by A2, A18, A19, FINSEQ_3: 25;

    end;

    theorem :: AOFA_000:87

    

     Th87: for I be Element of A holds for s be Element of S holds not f iteration_terminates_for (I,s) iff ((( curry' f) . I) orbit s) c= T

    proof

      let I be Element of A;

      let s be Element of S;

      set g = (( curry' f) . I);

      hereby

        assume

         A1: not f iteration_terminates_for (I,s);

        thus (g orbit s) c= T

        proof

          let x be object;

          assume x in (g orbit s);

          then

           A2: ex n be Element of NAT st (x = (( iter (g,n)) . s)) & (s in ( dom ( iter (g,n))));

          defpred P[ Nat] means (( iter (g,$1)) . s) nin T;

          assume x nin T;

          then

           A3: ex n be Nat st P[n] by A2;

          consider n be Nat such that

           A4: P[n] & for m be Nat st P[m] holds n <= m from NAT_1:sch 5( A3);

          deffunc F( Nat) = (( iter (g,($1 -' 1))) . s);

          consider r be FinSequence such that

           A5: ( len r) = (n + 1) & for k be Nat st k in ( dom r) holds (r . k) = F(k) from FINSEQ_1:sch 2;

          ( rng r) c= S

          proof

            let a be object;

            assume a in ( rng r);

            then

            consider b be object such that

             A6: b in ( dom r) and

             A7: a = (r . b) by FUNCT_1:def 3;

            reconsider b as Element of NAT by A6;

            (r . b) = (( iter (g,(b -' 1))) . s) by A5, A6;

            hence thesis by A7;

          end;

          then

          reconsider r as non empty FinSequence of S by A5, FINSEQ_1:def 4;

          

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

          then

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

          

           A10: (n + 1) in ( dom r) by A5, A8, FINSEQ_3: 25;

          

           A11: (1 -' 1) = 0 by XREAL_1: 232;

          

           A12: ((n + 1) -' 1) = n by NAT_D: 34;

          

           A13: ( iter (g, 0 )) = ( id S) by FUNCT_7: 84;

          (r . 1) = F() by A5, A9;

          then

           A14: (r . 1) = s by A11, A13;

          

           A15: (r . ( len r)) nin T by A4, A5, A10, A12;

          now

            let i be Nat such that

             A16: 1 <= i and

             A17: i < ( len r);

            consider j be Nat such that

             A18: i = (1 + j) by A16, NAT_1: 10;

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

            

             A19: (i -' 1) = j by A18, NAT_D: 34;

            

             A20: ((i + 1) -' 1) = i by NAT_D: 34;

            

             A21: ( dom ( curry' f)) = the carrier of A by FUNCT_2:def 1;

            ( dom g) = S by FUNCT_2:def 1;

            then

             A22: (g . (( iter (g,j)) . s)) = (f . ((( iter (g,j)) . s),I)) by A21, FUNCT_5: 34;

            

             A23: ( iter (g,i)) = (g * ( iter (g,j))) by A18, FUNCT_7: 71;

            

             A24: 1 <= (i + 1) by A16, NAT_1: 13;

            

             A25: (i + 1) <= (n + 1) by A5, A17, NAT_1: 13;

            

             A26: (i -' 1) < n by A5, A17, A18, A19, XREAL_1: 6;

            

             A27: i in ( dom r) by A16, A17, FINSEQ_3: 25;

            

             A28: (i + 1) in ( dom r) by A5, A24, A25, FINSEQ_3: 25;

            

             A29: (r . i) = (( iter (g,(i -' 1))) . s) by A5, A27;

            (r . (i + 1)) = (( iter (g,i)) . s) by A5, A20, A28;

            hence (r . i) in T & (r . (i + 1)) = (f . ((r . i),I)) by A4, A19, A22, A23, A26, A29, FUNCT_2: 15;

          end;

          hence contradiction by A1, A14, A15;

        end;

      end;

      assume

       A30: ((( curry' f) . I) orbit s) c= T;

      given r be non empty FinSequence of S such that

       A31: (r . 1) = s and

       A32: (r . ( len r)) nin T and

       A33: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),I));

      defpred P[ Nat] means ($1 + 1) <= ( len r) implies (r . ($1 + 1)) in ((( curry' f) . I) orbit s);

      ( dom g) = S by FUNCT_2:def 1;

      then

       A34: P[ 0 ] by A31, Th6;

      

       A35: for i be Nat st P[i] holds P[(i + 1)]

      proof

        let i be Nat such that

         A36: P[i] and

         A37: ((i + 1) + 1) <= ( len r);

        

         A38: 1 <= (i + 1) by NAT_1: 11;

        

         A39: (i + 1) < ( len r) by A37, NAT_1: 13;

        then (i + 1) in ( dom r) by A38, FINSEQ_3: 25;

        then

         A40: (r . (i + 1)) in ( rng r) by FUNCT_1: 3;

        ( dom f) = [:S, the carrier of A:] by FUNCT_2:def 1;

        then

         A41: [(r . (i + 1)), I] in ( dom f) by A40, ZFMISC_1: 87;

        consider n be Element of NAT such that

         A42: (r . (i + 1)) = (( iter ((( curry' f) . I),n)) . s) and s in ( dom ( iter ((( curry' f) . I),n))) by A36, A37, NAT_1: 13;

        

         A43: (r . ((i + 1) + 1)) = (f . ((r . (i + 1)),I)) by A33, A38, A39

        .= ((( curry' f) . I) . (r . (i + 1))) by A41, FUNCT_5: 22

        .= ((g * ( iter (g,n))) . s) by A42, FUNCT_2: 15

        .= (( iter ((( curry' f) . I),(n + 1))) . s) by FUNCT_7: 71;

        ( dom ( iter (g,(n + 1)))) = S by FUNCT_2:def 1;

        hence (r . ((i + 1) + 1)) in (g orbit s) by A43;

      end;

      consider i be Nat such that

       A44: ( len r) = (i + 1) by NAT_1: 6;

      for n be Nat holds P[n] from NAT_1:sch 2( A34, A35);

      then (r . (i + 1)) in (g orbit s) by A44;

      hence contradiction by A30, A32, A44;

    end;

    scheme :: AOFA_000:sch5

    InvariantSch { A() -> preIfWhileAlgebra , C,I() -> Element of A() , S() -> non empty set , s() -> Element of S() , T() -> Subset of S() , f() -> ExecutionFunction of A(), S(), T() , P,R[ set] } :

P[(f() . (s(),( while (C(),I()))))] & not R[(f() . (s(),( while (C(),I()))))]

      provided

       A1: P[s()]

       and

       A2: f() iteration_terminates_for ((I() \; C()),(f() . (s(),C())))

       and

       A3: for s be Element of S() st P[s] & s in T() & R[s] holds P[(f() . (s,I()))]

       and

       A4: for s be Element of S() st P[s] holds P[(f() . (s,C()))] & ((f() . (s,C())) in T() iff R[(f() . (s,C()))]);

      consider r be non empty FinSequence of S() such that

       A5: (r . 1) = (f() . (s(),C())) and

       A6: (r . ( len r)) nin T() and

       A7: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T() & (r . (i + 1)) = (f() . ((r . i),(I() \; C()))) by A2;

      

       A8: (f() . (s(),( while (C(),I())))) = (r . ( len r)) by A5, A6, A7, Th86;

      defpred Q[ Nat] means ($1 + 1) in ( dom r) implies P[(r . ($1 + 1))] & (($1 + 1) < ( len r) implies R[(r . ($1 + 1))]) & ex q be Element of S() st P[q] & (r . ($1 + 1)) = (f() . (q,C()));

      ( 0 + 1) < ( len r) implies (r . ( 0 + 1)) in T() by A7;

      then

       A9: Q[ 0 ] by A1, A4, A5;

      

       A10: for n be Nat st Q[n] holds Q[(n + 1)]

      proof

        let n be Nat;

        assume

         A11: Q[n];

        assume

         A12: ((n + 1) + 1) in ( dom r);

        then

         A13: ((n + 1) + 1) <= ( len r) by FINSEQ_3: 25;

        

         A14: ((n + 1) + 1) >= 1 by NAT_1: 11;

        

         A15: (n + 1) >= 1 by NAT_1: 11;

        

         A16: (n + 1) < ( len r) by A13, NAT_1: 13;

        then

         A17: (n + 1) in ( dom r) by A15, FINSEQ_3: 25;

        

         A18: (r . (n + 1)) in T() by A7, A15, A16;

        

         A19: (r . ((n + 1) + 1)) = (f() . ((r . (n + 1)),(I() \; C()))) by A7, A15, A16;

        reconsider q1 = (r . (n + 1)), q2 = (r . ((n + 1) + 1)) as Element of S() by A12, A17, DTCONSTR: 2;

        reconsider q3 = (f() . (q1,I())) as Element of S();

        

         A20: q2 = (f() . (q3,C())) by A19, Def29;

        

         A21: P[q3] by A3, A11, A15, A16, A18, FINSEQ_3: 25;

        hence P[(r . ((n + 1) + 1))] by A4, A20;

        hereby

          assume ((n + 1) + 1) < ( len r);

          then (r . ((n + 1) + 1)) in T() by A7, A14;

          hence R[(r . ((n + 1) + 1))] by A4, A20, A21;

        end;

        take q3;

        thus thesis by A3, A11, A15, A16, A18, A19, Def29, FINSEQ_3: 25;

      end;

      

       A22: for n be Nat holds Q[n] from NAT_1:sch 2( A9, A10);

      

       A23: ( len r) >= ( 0 + 1) by NAT_1: 13;

      then

      consider j be Nat such that

       A24: ( len r) = (1 + j) by NAT_1: 10;

      

       A25: (j + 1) in ( dom r) by A23, A24, FINSEQ_3: 25;

      hence P[(f() . (s(),( while (C(),I()))))] by A8, A22, A24;

      ex q be Element of S() st P[q] & (r . (j + 1)) = (f() . (q,C())) by A22, A25;

      hence thesis by A4, A6, A8, A24;

    end;

    scheme :: AOFA_000:sch6

    coInvariantSch { A() -> preIfWhileAlgebra , C,I() -> Element of A() , S() -> non empty set , s() -> Element of S() , T() -> Subset of S() , f() -> ExecutionFunction of A(), S(), T() , P[ set] } :

P[s()]

      provided

       A1: P[(f() . (s(),( while (C(),I()))))]

       and

       A2: f() iteration_terminates_for ((I() \; C()),(f() . (s(),C())))

       and

       A3: for s be Element of S() st P[(f() . ((f() . (s,C())),I()))] & (f() . (s,C())) in T() holds P[(f() . (s,C()))]

       and

       A4: for s be Element of S() st P[(f() . (s,C()))] holds P[s];

      consider r be non empty FinSequence of S() such that

       A5: (r . 1) = (f() . (s(),C())) and

       A6: (r . ( len r)) nin T() and

       A7: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T() & (r . (i + 1)) = (f() . ((r . i),(I() \; C()))) by A2;

      defpred Q[ Nat] means (( len r) - $1) in ( dom r) implies P[(r . (( len r) - $1))];

      defpred R[ Nat] means ($1 + 1) in ( dom r) implies ex q be Element of S() st (r . ($1 + 1)) = (f() . (q,C()));

      

       A8: R[ 0 ] by A5;

      

       A9: for n be Nat st R[n] holds R[(n + 1)]

      proof

        let n be Nat;

        assume R[n];

        assume ((n + 1) + 1) in ( dom r);

        then

         A10: ((n + 1) + 1) <= ( len r) by FINSEQ_3: 25;

        

         A11: (n + 1) >= 1 by NAT_1: 11;

        

         A12: (n + 1) < ( len r) by A10, NAT_1: 13;

        then

         A13: (r . (n + 1)) in T() by A7, A11;

        

         A14: (r . ((n + 1) + 1)) = (f() . ((r . (n + 1)),(I() \; C()))) by A7, A11, A12;

        reconsider q1 = (r . (n + 1)) as Element of S() by A13;

        reconsider q3 = (f() . (q1,I())) as Element of S();

        take q3;

        thus thesis by A14, Def29;

      end;

      

       A15: Q[ 0 ] by A1, A5, A6, A7, Th86;

      

       A16: for n be Nat st Q[n] holds Q[(n + 1)]

      proof

        let n be Nat;

        assume

         A17: Q[n];

        assume

         A18: (( len r) - (n + 1)) in ( dom r);

        then

        reconsider j = (( len r) - (n + 1)) as Element of NAT ;

        

         A19: j >= 1 by A18, FINSEQ_3: 25;

        (n + 1) >= ( 0 + 1) by NAT_1: 13;

        then j <= (( len r) - 1) by XREAL_1: 10;

        then

         A20: (j + 1) <= ((( len r) - 1) + 1) by XREAL_1: 6;

        

         A21: 1 <= (1 + j) by NAT_1: 11;

        

         A22: j < ( len r) by A20, NAT_1: 13;

        

         A23: (j + 1) in ( dom r) by A20, A21, FINSEQ_3: 25;

        

         A24: (r . j) in T() by A7, A19, A22;

        

         A25: (r . (j + 1)) = (f() . ((r . j),(I() \; C()))) by A7, A19, A22;

        reconsider q1 = (r . j), q2 = (r . (j + 1)) as Element of S() by A23, A24, DTCONSTR: 2;

        reconsider q9 = (f() . (q1,I())) as Element of S();

        consider j9 be Nat such that

         A26: j = (1 + j9) by A19, NAT_1: 10;

        for n be Nat holds R[n] from NAT_1:sch 2( A8, A9);

        then

        consider qq be Element of S() such that

         A27: (r . (j9 + 1)) = (f() . (qq,C())) by A18, A26;

        q2 = (f() . (q9,C())) by A25, Def29;

        then P[(f() . ((f() . (qq,C())),I()))] by A4, A17, A20, A21, A26, A27, FINSEQ_3: 25;

        hence thesis by A3, A7, A19, A22, A26, A27;

      end;

      

       A28: for n be Nat holds Q[n] from NAT_1:sch 2( A15, A16);

      

       A29: ( len r) >= ( 0 + 1) by NAT_1: 13;

      then

      consider j be Nat such that

       A30: ( len r) = (1 + j) by NAT_1: 10;

      (( len r) - j) in ( dom r) by A29, A30, FINSEQ_3: 25;

      hence thesis by A4, A5, A28, A30;

    end;

    theorem :: AOFA_000:88

    

     Th88: for A be free preIfWhileAlgebra holds for I1,I2 be Element of A holds for n be Nat st (I1 \; I2) in (( ElementaryInstructions A) |^ n) holds ex i be Nat st n = (i + 1) & I1 in (( ElementaryInstructions A) |^ i) & I2 in (( ElementaryInstructions A) |^ i)

    proof

      let A be free preIfWhileAlgebra;

      set B = ( ElementaryInstructions A);

      

       A1: B is GeneratorSet of A by Def25;

      let I1,I2 be Element of A;

      

       A2: (I1 \; I2) <> I1 by Th73;

      (I1 \; I2) <> I2 by Th73;

      then (I1 \; I2) nin B by A2, Th50;

      then

       A3: (I1 \; I2) nin (B |^ 0 ) by Th18;

      let n be Nat;

      assume

       A4: (I1 \; I2) in (B |^ n);

      then n > 0 by A3;

      then n >= ( 0 + 1) by NAT_1: 13;

      then

      consider i be Nat such that

       A5: n = (1 + i) by NAT_1: 10;

      take i;

      thus n = (i + 1) by A5;

      

       A6: ( dom ( Den (( In (2,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th44;

      

       A7: for o be OperSymbol of A, p be FinSequence st p in ( dom ( Den (o,A))) holds (( Den (o,A)) . p) in B implies o <> ( In (2,( dom the charact of A)))

      proof

        let o be OperSymbol of A;

        let p be FinSequence;

        assume that

         A8: p in ( dom ( Den (o,A))) and

         A9: (( Den (o,A)) . p) in B and

         A10: o = ( In (2,( dom the charact of A)));

        consider a,b be object such that

         A11: a in the carrier of A and

         A12: b in the carrier of A and

         A13: p = <*a, b*> by A6, A8, A10, FINSEQ_2: 137;

        reconsider a, b as Element of A by A11, A12;

        

         A14: (a \; b) <> a by Th73;

        (a \; b) <> b by Th73;

        hence contradiction by A9, A10, A13, A14, Th50;

      end;

       <*I1, I2*> in ( dom ( Den (( In (2,( dom the charact of A))),A))) by A6, FINSEQ_2: 137;

      then ( rng <*I1, I2*>) c= (B |^ i) by A1, A4, A5, A7, Th39;

      then {I1, I2} c= (B |^ i) by FINSEQ_2: 127;

      hence thesis by ZFMISC_1: 32;

    end;

    theorem :: AOFA_000:89

    

     Th89: for A be free preIfWhileAlgebra holds for C,I1,I2 be Element of A holds for n be Nat st ( if-then-else (C,I1,I2)) in (( ElementaryInstructions A) |^ n) holds ex i be Nat st n = (i + 1) & C in (( ElementaryInstructions A) |^ i) & I1 in (( ElementaryInstructions A) |^ i) & I2 in (( ElementaryInstructions A) |^ i)

    proof

      let A be free preIfWhileAlgebra;

      set B = ( ElementaryInstructions A);

      

       A1: B is GeneratorSet of A by Def25;

      let C,I1,I2 be Element of A;

      ( if-then-else (C,I1,I2)) nin B by Th51;

      then

       A2: ( if-then-else (C,I1,I2)) nin (B |^ 0 ) by Th18;

      let n be Nat;

      assume

       A3: ( if-then-else (C,I1,I2)) in (B |^ n);

      then

      consider i be Nat such that

       A4: n = (i + 1) by A2, NAT_1: 6;

      take i;

      thus n = (i + 1) by A4;

      

       A5: ( dom ( Den (( In (3,( dom the charact of A))),A))) = (3 -tuples_on the carrier of A) by Th47;

      

       A6: for o be OperSymbol of A, p be FinSequence st p in ( dom ( Den (o,A))) holds (( Den (o,A)) . p) in B implies o <> ( In (3,( dom the charact of A)))

      proof

        let o be OperSymbol of A;

        let p be FinSequence;

        assume that

         A7: p in ( dom ( Den (o,A))) and

         A8: (( Den (o,A)) . p) in B and

         A9: o = ( In (3,( dom the charact of A)));

        consider a,b,c be object such that

         A10: a in the carrier of A and

         A11: b in the carrier of A and

         A12: c in the carrier of A and

         A13: p = <*a, b, c*> by A5, A7, A9, FINSEQ_2: 139;

        reconsider a, b, c as Element of A by A10, A11, A12;

        (( Den (o,A)) . p) = ( if-then-else (a,b,c)) by A9, A13;

        hence contradiction by A8, Th51;

      end;

       <*C, I1, I2*> in ( dom ( Den (( In (3,( dom the charact of A))),A))) by A5, FINSEQ_2: 139;

      then ( rng <*C, I1, I2*>) c= (B |^ i) by A1, A3, A4, A6, Th39;

      then

       A14: {C, I1, I2} c= (B |^ i) by FINSEQ_2: 128;

      

       A15: C in {C, I1, I2} by ENUMSET1:def 1;

      

       A16: I1 in {C, I1, I2} by ENUMSET1:def 1;

      I2 in {C, I1, I2} by ENUMSET1:def 1;

      hence thesis by A14, A15, A16;

    end;

    theorem :: AOFA_000:90

    

     Th90: for A be free preIfWhileAlgebra holds for C,I be Element of A holds for n be Nat st ( while (C,I)) in (( ElementaryInstructions A) |^ n) holds ex i be Nat st n = (i + 1) & C in (( ElementaryInstructions A) |^ i) & I in (( ElementaryInstructions A) |^ i)

    proof

      let A be free preIfWhileAlgebra;

      set B = ( ElementaryInstructions A);

      

       A1: B is GeneratorSet of A by Def25;

      let C,I be Element of A;

      ( while (C,I)) nin B by Th52;

      then

       A2: ( while (C,I)) nin (B |^ 0 ) by Th18;

      let n be Nat;

      assume

       A3: ( while (C,I)) in (B |^ n);

      then

      consider i be Nat such that

       A4: n = (i + 1) by A2, NAT_1: 6;

      take i;

      thus n = (i + 1) by A4;

      

       A5: ( dom ( Den (( In (4,( dom the charact of A))),A))) = (2 -tuples_on the carrier of A) by Th48;

      

       A6: for o be OperSymbol of A, p be FinSequence st p in ( dom ( Den (o,A))) holds (( Den (o,A)) . p) in B implies o <> ( In (4,( dom the charact of A)))

      proof

        let o be OperSymbol of A;

        let p be FinSequence;

        assume that

         A7: p in ( dom ( Den (o,A))) and

         A8: (( Den (o,A)) . p) in B and

         A9: o = ( In (4,( dom the charact of A)));

        consider a,b be object such that

         A10: a in the carrier of A and

         A11: b in the carrier of A and

         A12: p = <*a, b*> by A5, A7, A9, FINSEQ_2: 137;

        reconsider a, b as Element of A by A10, A11;

        (( Den (o,A)) . p) = ( while (a,b)) by A9, A12;

        hence contradiction by A8, Th52;

      end;

       <*C, I*> in ( dom ( Den (( In (4,( dom the charact of A))),A))) by A5, FINSEQ_2: 137;

      then ( rng <*C, I*>) c= (B |^ i) by A1, A3, A4, A6, Th39;

      then {C, I} c= (B |^ i) by FINSEQ_2: 127;

      hence thesis by ZFMISC_1: 32;

    end;

    begin

    scheme :: AOFA_000:sch7

    IndDef { A() -> free ECIW-strict preIfWhileAlgebra , S() -> non empty set , Emp() -> Element of S() , ElemF( set) -> set , ConF,WhiF( set, set) -> Element of S() , IfF( set, set, set) -> Element of S() } :

ex f be Function of the carrier of A(), S() st (for I be Element of A() st I in ( ElementaryInstructions A()) holds (f . I) = ElemF(I)) & (f . ( EmptyIns A())) = Emp() & (for I1,I2 be Element of A() holds (f . (I1 \; I2)) = ConF(.,.)) & (for C,I1,I2 be Element of A() holds (f . ( if-then-else (C,I1,I2))) = IfF(.,.,.)) & for C,I be Element of A() holds (f . ( while (C,I))) = WhiF(.,.)

      provided

       A1: for I be Element of A() st I in ( ElementaryInstructions A()) holds ElemF(I) in S();

      set B = ( ElementaryInstructions A());

      

       A2: (B |^ 0 ) = B by Th18;

      set FB = { [I, ElemF(I)] where I be Element of A() : I in B };

      deffunc CF( Nat, set) = { [(I1 \; I2), ConF(fI1,fI2)] where I1,I2 be Element of A(), fI1,fI2 be Element of S() : I1 in (B |^ $1) & I2 in (B |^ $1) & [I1, fI1] in $2 & [I2, fI2] in $2 };

      deffunc IF( Nat, set) = { [( if-then-else (C,I1,I2)), IfF(fC,fI1,fI2)] where C,I1,I2 be Element of A(), fC,fI1,fI2 be Element of S() : C in (B |^ $1) & I1 in (B |^ $1) & I2 in (B |^ $1) & [C, fC] in $2 & [I1, fI1] in $2 & [I2, fI2] in $2 };

      deffunc WF( Nat, set) = { [( while (C,I)), WhiF(gC,gI)] where C,I be Element of A(), gC,gI be Element of S() : C in (B |^ $1) & I in (B |^ $1) & [C, gC] in $2 & [I, gI] in $2 };

      deffunc F( Nat, set) = (((($2 \/ { [( EmptyIns A()), Emp()]}) \/ CF($1,$2)) \/ IF($1,$2)) \/ WF($1,$2));

      consider FF be Function such that

       A3: ( dom FF) = NAT & (FF . 0 ) = FB and

       A4: for n be Nat holds (FF . (n + 1)) = F(n,.) from NAT_1:sch 11;

      set f = ( Union FF);

      

       A5: for n,m be Nat st n <= m holds (FF . n) c= (FF . m)

      proof

        let n,m be Nat;

        assume n <= m;

        then

        consider i be Nat such that

         A6: m = (n + i) by NAT_1: 10;

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

        

         A7: m = (n + i) by A6;

        defpred I[ Nat] means (FF . n) c= (FF . (n + $1));

        

         A8: I[ 0 ];

         A9:

        now

          let i be Nat;

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

          (FF . ((n9 + i) + 1)) = F(+,.) by A4

          .= ((((FF . (n + i)) \/ { [( EmptyIns A()), Emp()]}) \/ CF(+,.)) \/ ( IF(+,.) \/ WF(+,.))) by XBOOLE_1: 4

          .= (((FF . (n + i)) \/ { [( EmptyIns A()), Emp()]}) \/ ( CF(+,.) \/ ( IF(+,.) \/ WF(+,.)))) by XBOOLE_1: 4

          .= ((FF . (n + i)) \/ ( { [( EmptyIns A()), Emp()]} \/ ( CF(+,.) \/ ( IF(+,.) \/ WF(+,.))))) by XBOOLE_1: 4;

          then (FF . (n + i)) c= (FF . ((n + i) + 1)) by XBOOLE_1: 7;

          hence I[i] implies I[(i + 1)] by XBOOLE_1: 1;

        end;

        for i be Nat holds I[i] from NAT_1:sch 2( A8, A9);

        hence thesis by A7;

      end;

      defpred P[ Nat] means ex g be Function of (B |^ $1), S() st g = (FF . $1) & (( EmptyIns A()) in (B |^ $1) implies (g . ( EmptyIns A())) = Emp()) & (for I1,I2 be Element of A() st (I1 \; I2) in (B |^ $1) holds (g . (I1 \; I2)) = ConF(.,.)) & (for C,I1,I2 be Element of A() st ( if-then-else (C,I1,I2)) in (B |^ $1) holds (g . ( if-then-else (C,I1,I2))) = IfF(.,.,.)) & (for C,I be Element of A() st ( while (C,I)) in (B |^ $1) holds (g . ( while (C,I))) = WhiF(.,.));

      defpred p[ set] means $1 in B;

      reconsider f0 = { [I, ElemF(I)] where I be Element of A() : p[I] } as Function from ALTCAT_2:sch 1;

      

       A10: ( dom f0) = B

      proof

        thus ( dom f0) c= B

        proof

          let x be object;

          assume x in ( dom f0);

          then [x, (f0 . x)] in f0 by FUNCT_1:def 2;

          then ex I be Element of A() st [x, (f0 . x)] = [I, ElemF(I)] & p[I];

          hence thesis by XTUPLE_0: 1;

        end;

        let x be object;

        assume

         A11: x in B;

        then

        reconsider I = x as Element of A();

         [I, ElemF(I)] in f0 by A11;

        hence thesis by XTUPLE_0:def 12;

      end;

      ( rng f0) c= S()

      proof

        let y be object;

        assume y in ( rng f0);

        then

        consider x be object such that

         A12: [x, y] in f0 by XTUPLE_0:def 13;

        consider I be Element of A() such that

         A13: [x, y] = [I, ElemF(I)] and

         A14: p[I] by A12;

        y = ElemF(I) by A13, XTUPLE_0: 1;

        hence thesis by A1, A14;

      end;

      then

      reconsider f0 as Function of (B |^ 0 ), S() by A2, A10, FUNCT_2: 2;

      

       A15: P[ 0 ]

      proof

        take f0;

        thus f0 = (FF . 0 ) by A3;

        now

          let I1,I2 be Element of A();

          

           A16: (I1 \; I2) <> I1 by Th73;

          (I1 \; I2) <> I2 by Th73;

          hence (I1 \; I2) nin B by A16, Th50;

        end;

        hence thesis by A2, Th49, Th51, Th52;

      end;

      

       A17: for i be Nat st P[i] holds P[(i + 1)]

      proof

        let i be Nat;

        given g be Function of (B |^ i), S() such that

         A18: g = (FF . i) and

         A19: ( EmptyIns A()) in (B |^ i) implies (g . ( EmptyIns A())) = Emp() and

         A20: for I1,I2 be Element of A() st (I1 \; I2) in (B |^ i) holds (g . (I1 \; I2)) = ConF(.,.) and

         A21: for C,I1,I2 be Element of A() st ( if-then-else (C,I1,I2)) in (B |^ i) holds (g . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and

         A22: for C,I be Element of A() st ( while (C,I)) in (B |^ i) holds (g . ( while (C,I))) = WhiF(.,.);

        set h = (FF . (i + 1));

        

         A23: i < (i + 1) by NAT_1: 13;

        

         A24: h = F(i,g) by A4, A18;

        

         A25: ( dom g) = (B |^ i) by FUNCT_2:def 1;

        

         A26: (B |^ i) c= (B |^ (i + 1)) by A23, Th21;

         A27:

        now

          let x be set;

          assume x in h;

          then x in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) or x in WF(i,g) by A24, XBOOLE_0:def 3;

          then x in ((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) or x in IF(i,g) or x in WF(i,g) by XBOOLE_0:def 3;

          then x in (g \/ { [( EmptyIns A()), Emp()]}) or x in CF(i,g) or x in IF(i,g) or x in WF(i,g) by XBOOLE_0:def 3;

          hence x in g or x in { [( EmptyIns A()), Emp()]} or x in CF(i,g) or x in IF(i,g) or x in WF(i,g) by XBOOLE_0:def 3;

        end;

        h is Relation-like

        proof

          let x be object;

          assume x in h;

          then x in g or x in { [( EmptyIns A()), Emp()]} or x in CF(i,g) or x in IF(i,g) or x in WF(i,g) by A27;

          then (ex a,b be object st x = [a, b]) or x = [( EmptyIns A()), Emp()] or (ex I1,I2 be Element of A(), fI1,fI2 be Element of S() st x = [(I1 \; I2), ConF(fI1,fI2)] & I1 in (B |^ i) & I2 in (B |^ i) & [I1, fI1] in g & [I2, fI2] in g) or (ex C,I1,I2 be Element of A(), a,b,c be Element of S() st x = [( if-then-else (C,I1,I2)), IfF(a,b,c)] & C in (B |^ i) & I1 in (B |^ i) & I2 in (B |^ i) & [C, a] in g & [I1, b] in g & [I2, c] in g) or (ex C,I be Element of A(), a,b be Element of S() st x = [( while (C,I)), WhiF(a,b)] & C in (B |^ i) & I in (B |^ i) & [C, a] in g & [I, b] in g) by RELAT_1:def 1;

          hence thesis;

        end;

        then

        reconsider h as Relation;

        h is Function-like

        proof

          let x,y1,y2 be object;

          set x1 = [x, y1], x2 = [x, y2];

          assume

           A28: [x, y1] in h;

          assume

           A29: [x, y2] in h;

          per cases by A27, A28;

            suppose

             A30: x1 in g;

            then

             A31: x in ( dom g) by FUNCT_1: 1;

            

             A32: y1 = (g . x) by A30, FUNCT_1: 1;

            per cases by A27, A29;

              suppose x2 in g;

              hence thesis by A30, FUNCT_1:def 1;

            end;

              suppose x2 in { [( EmptyIns A()), Emp()]};

              then

               A33: x2 = [( EmptyIns A()), Emp()] by TARSKI:def 1;

              then x = ( EmptyIns A()) by XTUPLE_0: 1;

              hence thesis by A19, A31, A32, A33, XTUPLE_0: 1;

            end;

              suppose x2 in CF(i,g);

              then

              consider J1,J2 be Element of A(), gJ1,gJ2 be Element of S() such that

               A34: x2 = [(J1 \; J2), ConF(gJ1,gJ2)] and J1 in (B |^ i) and J2 in (B |^ i) and

               A35: [J1, gJ1] in g and

               A36: [J2, gJ2] in g;

              

               A37: x = (J1 \; J2) by A34, XTUPLE_0: 1;

              

               A38: y2 = ConF(gJ1,gJ2) by A34, XTUPLE_0: 1;

              

               A39: (g . J1) = gJ1 by A35, FUNCT_1: 1;

              (g . J2) = gJ2 by A36, FUNCT_1: 1;

              hence thesis by A20, A31, A32, A37, A38, A39;

            end;

              suppose x2 in IF(i,g);

              then

              consider D,J1,J2 be Element of A(), a,b,c be Element of S() such that

               A40: x2 = [( if-then-else (D,J1,J2)), IfF(a,b,c)] and D in (B |^ i) and J1 in (B |^ i) and J2 in (B |^ i) and

               A41: [D, a] in g and

               A42: [J1, b] in g and

               A43: [J2, c] in g;

              

               A44: x = ( if-then-else (D,J1,J2)) by A40, XTUPLE_0: 1;

              

               A45: y2 = IfF(a,b,c) by A40, XTUPLE_0: 1;

              

               A46: (g . D) = a by A41, FUNCT_1: 1;

              

               A47: (g . J1) = b by A42, FUNCT_1: 1;

              (g . J2) = c by A43, FUNCT_1: 1;

              hence thesis by A21, A31, A32, A44, A45, A46, A47;

            end;

              suppose x2 in WF(i,g);

              then

              consider D,J be Element of A(), a,b be Element of S() such that

               A48: x2 = [( while (D,J)), WhiF(a,b)] and D in (B |^ i) and J in (B |^ i) and

               A49: [D, a] in g and

               A50: [J, b] in g;

              

               A51: x = ( while (D,J)) by A48, XTUPLE_0: 1;

              

               A52: y2 = WhiF(a,b) by A48, XTUPLE_0: 1;

              

               A53: (g . D) = a by A49, FUNCT_1: 1;

              (g . J) = b by A50, FUNCT_1: 1;

              hence thesis by A22, A31, A32, A51, A52, A53;

            end;

          end;

            suppose x1 in { [( EmptyIns A()), Emp()]};

            then

             A54: x1 = [( EmptyIns A()), Emp()] by TARSKI:def 1;

            then

             A55: x = ( EmptyIns A()) by XTUPLE_0: 1;

            

             A56: y1 = Emp() by A54, XTUPLE_0: 1;

            per cases by A27, A29;

              suppose

               A57: x2 in g;

              then x in ( dom g) by FUNCT_1: 1;

              hence thesis by A19, A55, A56, A57, FUNCT_1: 1;

            end;

              suppose x2 in { [( EmptyIns A()), Emp()]};

              then x2 = [( EmptyIns A()), Emp()] by TARSKI:def 1;

              hence thesis by A54, XTUPLE_0: 1;

            end;

              suppose x2 in CF(i,g);

              then

              consider J1,J2 be Element of A(), a,b be Element of S() such that

               A58: x2 = [(J1 \; J2), ConF(a,b)] and J1 in (B |^ i) and J2 in (B |^ i) and [J1, a] in g and [J2, b] in g;

              x = (J1 \; J2) by A58, XTUPLE_0: 1;

              hence thesis by A55, Th72;

            end;

              suppose x2 in IF(i,g);

              then

              consider D,J1,J2 be Element of A(), a,b,c be Element of S() such that

               A59: x2 = [( if-then-else (D,J1,J2)), IfF(a,b,c)] and D in (B |^ i) and J1 in (B |^ i) and J2 in (B |^ i) and [D, a] in g and [J1, b] in g and [J2, c] in g;

              x = ( if-then-else (D,J1,J2)) by A59, XTUPLE_0: 1;

              hence thesis by A55, Def24;

            end;

              suppose x2 in WF(i,g);

              then

              consider D,J be Element of A(), a,b be Element of S() such that

               A60: x2 = [( while (D,J)), WhiF(a,b)] and D in (B |^ i) and J in (B |^ i) and [D, a] in g and [J, b] in g;

              x = ( while (D,J)) by A60, XTUPLE_0: 1;

              hence thesis by A55, Def24;

            end;

          end;

            suppose x1 in CF(i,g);

            then

            consider I1,I2 be Element of A(), gI1,gI2 be Element of S() such that

             A61: x1 = [(I1 \; I2), ConF(gI1,gI2)] and I1 in (B |^ i) and I2 in (B |^ i) and

             A62: [I1, gI1] in g and

             A63: [I2, gI2] in g;

            

             A64: x = (I1 \; I2) by A61, XTUPLE_0: 1;

            

             A65: y1 = ConF(gI1,gI2) by A61, XTUPLE_0: 1;

            

             A66: (g . I1) = gI1 by A62, FUNCT_1: 1;

            

             A67: (g . I2) = gI2 by A63, FUNCT_1: 1;

            per cases by A27, A29;

              suppose

               A68: x2 in g;

              then

               A69: x in ( dom g) by FUNCT_1: 1;

              y2 = (g . x) by A68, FUNCT_1: 1;

              hence thesis by A20, A64, A65, A66, A67, A69;

            end;

              suppose x2 in { [( EmptyIns A()), Emp()]};

              then x2 = [( EmptyIns A()), Emp()] by TARSKI:def 1;

              then x = ( EmptyIns A()) by XTUPLE_0: 1;

              hence thesis by A64, Th72;

            end;

              suppose x2 in CF(i,g);

              then

              consider J1,J2 be Element of A(), a,b be Element of S() such that

               A70: x2 = [(J1 \; J2), ConF(a,b)] and J1 in (B |^ i) and J2 in (B |^ i) and

               A71: [J1, a] in g and

               A72: [J2, b] in g;

              

               A73: x = (J1 \; J2) by A70, XTUPLE_0: 1;

              

               A74: y2 = ConF(a,b) by A70, XTUPLE_0: 1;

              

               A75: (g . J1) = a by A71, FUNCT_1: 1;

              

               A76: (g . J2) = b by A72, FUNCT_1: 1;

              I1 = J1 by A64, A73, Th73;

              hence thesis by A64, A65, A66, A67, A73, A74, A75, A76, Th73;

            end;

              suppose x2 in IF(i,g);

              then

              consider D,J1,J2 be Element of A(), a,b,c be Element of S() such that

               A77: x2 = [( if-then-else (D,J1,J2)), IfF(a,b,c)] and D in (B |^ i) and J1 in (B |^ i) and J2 in (B |^ i) and [D, a] in g and [J1, b] in g and [J2, c] in g;

              x = ( if-then-else (D,J1,J2)) by A77, XTUPLE_0: 1;

              hence thesis by A64, Th73;

            end;

              suppose x2 in WF(i,g);

              then

              consider D,J be Element of A(), a,b be Element of S() such that

               A78: x2 = [( while (D,J)), WhiF(a,b)] and D in (B |^ i) and J in (B |^ i) and [D, a] in g and [J, b] in g;

              x = ( while (D,J)) by A78, XTUPLE_0: 1;

              hence thesis by A64, Th73;

            end;

          end;

            suppose x1 in IF(i,g);

            then

            consider C,I1,I2 be Element of A(), gC,gI1,gI2 be Element of S() such that

             A79: x1 = [( if-then-else (C,I1,I2)), IfF(gC,gI1,gI2)] and C in (B |^ i) and I1 in (B |^ i) and I2 in (B |^ i) and

             A80: [C, gC] in g and

             A81: [I1, gI1] in g and

             A82: [I2, gI2] in g;

            

             A83: x = ( if-then-else (C,I1,I2)) by A79, XTUPLE_0: 1;

            

             A84: y1 = IfF(gC,gI1,gI2) by A79, XTUPLE_0: 1;

            

             A85: (g . I1) = gI1 by A81, FUNCT_1: 1;

            

             A86: (g . I2) = gI2 by A82, FUNCT_1: 1;

            

             A87: (g . C) = gC by A80, FUNCT_1: 1;

            per cases by A27, A29;

              suppose

               A88: x2 in g;

              then

               A89: x in ( dom g) by FUNCT_1: 1;

              y2 = (g . x) by A88, FUNCT_1: 1;

              hence thesis by A21, A83, A84, A85, A86, A87, A89;

            end;

              suppose x2 in { [( EmptyIns A()), Emp()]};

              then x2 = [( EmptyIns A()), Emp()] by TARSKI:def 1;

              then x = ( EmptyIns A()) by XTUPLE_0: 1;

              hence thesis by A83, Th72;

            end;

              suppose x2 in CF(i,g);

              then

              consider J1,J2 be Element of A(), a,b be Element of S() such that

               A90: x2 = [(J1 \; J2), ConF(a,b)] and J1 in (B |^ i) and J2 in (B |^ i) and [J1, a] in g and [J2, b] in g;

              x = (J1 \; J2) by A90, XTUPLE_0: 1;

              hence thesis by A83, Th73;

            end;

              suppose x2 in IF(i,g);

              then

              consider D,J1,J2 be Element of A(), a,b,c be Element of S() such that

               A91: x2 = [( if-then-else (D,J1,J2)), IfF(a,b,c)] and D in (B |^ i) and J1 in (B |^ i) and J2 in (B |^ i) and

               A92: [D, a] in g and

               A93: [J1, b] in g and

               A94: [J2, c] in g;

              

               A95: x = ( if-then-else (D,J1,J2)) by A91, XTUPLE_0: 1;

              

               A96: y2 = IfF(a,b,c) by A91, XTUPLE_0: 1;

              

               A97: (g . D) = a by A92, FUNCT_1: 1;

              

               A98: (g . J1) = b by A93, FUNCT_1: 1;

              

               A99: (g . J2) = c by A94, FUNCT_1: 1;

              

               A100: C = D by A83, A95, Th74;

              I1 = J1 by A83, A95, Th74;

              hence thesis by A83, A84, A85, A86, A87, A95, A96, A97, A98, A99, A100, Th74;

            end;

              suppose x2 in WF(i,g);

              then

              consider D,J be Element of A(), a,b be Element of S() such that

               A101: x2 = [( while (D,J)), WhiF(a,b)] and D in (B |^ i) and J in (B |^ i) and [D, a] in g and [J, b] in g;

              x = ( while (D,J)) by A101, XTUPLE_0: 1;

              hence thesis by A83, Th74;

            end;

          end;

            suppose x1 in WF(i,g);

            then

            consider C,I be Element of A(), gC,gI be Element of S() such that

             A102: x1 = [( while (C,I)), WhiF(gC,gI)] and C in (B |^ i) and I in (B |^ i) and

             A103: [C, gC] in g and

             A104: [I, gI] in g;

            

             A105: x = ( while (C,I)) by A102, XTUPLE_0: 1;

            

             A106: y1 = WhiF(gC,gI) by A102, XTUPLE_0: 1;

            

             A107: (g . C) = gC by A103, FUNCT_1: 1;

            

             A108: (g . I) = gI by A104, FUNCT_1: 1;

            per cases by A27, A29;

              suppose

               A109: x2 in g;

              then

               A110: x in ( dom g) by FUNCT_1: 1;

              y2 = (g . x) by A109, FUNCT_1: 1;

              hence thesis by A22, A105, A106, A107, A108, A110;

            end;

              suppose x2 in { [( EmptyIns A()), Emp()]};

              then x2 = [( EmptyIns A()), Emp()] by TARSKI:def 1;

              then x = ( EmptyIns A()) by XTUPLE_0: 1;

              hence thesis by A105, Th72;

            end;

              suppose x2 in CF(i,g);

              then

              consider J1,J2 be Element of A(), a,b be Element of S() such that

               A111: x2 = [(J1 \; J2), ConF(a,b)] and J1 in (B |^ i) and J2 in (B |^ i) and [J1, a] in g and [J2, b] in g;

              x = (J1 \; J2) by A111, XTUPLE_0: 1;

              hence thesis by A105, Th73;

            end;

              suppose x2 in IF(i,g);

              then

              consider D,J1,J2 be Element of A(), a,b,c be Element of S() such that

               A112: x2 = [( if-then-else (D,J1,J2)), IfF(a,b,c)] and D in (B |^ i) and J1 in (B |^ i) and J2 in (B |^ i) and [D, a] in g and [J1, b] in g and [J2, c] in g;

              x = ( if-then-else (D,J1,J2)) by A112, XTUPLE_0: 1;

              hence thesis by A105, Th74;

            end;

              suppose x2 in WF(i,g);

              then

              consider D,J be Element of A(), a,b be Element of S() such that

               A113: x2 = [( while (D,J)), WhiF(a,b)] and D in (B |^ i) and J in (B |^ i) and

               A114: [D, a] in g and

               A115: [J, b] in g;

              

               A116: x = ( while (D,J)) by A113, XTUPLE_0: 1;

              

               A117: y2 = WhiF(a,b) by A113, XTUPLE_0: 1;

              

               A118: (g . D) = a by A114, FUNCT_1: 1;

              

               A119: (g . J) = b by A115, FUNCT_1: 1;

              D = C by A105, A116, Th75;

              hence thesis by A105, A106, A107, A108, A116, A117, A118, A119, Th75;

            end;

          end;

        end;

        then

        reconsider h as Function;

        

         A120: ( dom h) = (B |^ (i + 1))

        proof

          thus ( dom h) c= (B |^ (i + 1))

          proof

            let a be object;

            set ah = [a, (h . a)];

            assume a in ( dom h);

            then

             A121: [a, (h . a)] in h by FUNCT_1:def 2;

            per cases by A27, A121;

              suppose ah in g;

              then a in ( dom g) by FUNCT_1: 1;

              hence thesis by A26;

            end;

              suppose ah in { [( EmptyIns A()), Emp()]};

              then ah = [( EmptyIns A()), Emp()] by TARSKI:def 1;

              then a = ( EmptyIns A()) by XTUPLE_0: 1;

              hence thesis by Th76;

            end;

              suppose ah in CF(i,g);

              then

              consider I,J be Element of A(), e,b be Element of S() such that

               A122: ah = [(I \; J), ConF(e,b)] and

               A123: I in (B |^ i) and

               A124: J in (B |^ i) and [I, e] in g and [J, b] in g;

              a = (I \; J) by A122, XTUPLE_0: 1;

              hence thesis by A123, A124, Th76;

            end;

              suppose ah in IF(i,g);

              then

              consider C,I,J be Element of A(), e,b,c be Element of S() such that

               A125: ah = [( if-then-else (C,I,J)), IfF(e,b,c)] and

               A126: C in (B |^ i) and

               A127: I in (B |^ i) and

               A128: J in (B |^ i) and [C, e] in g and [I, b] in g and [J, c] in g;

              a = ( if-then-else (C,I,J)) by A125, XTUPLE_0: 1;

              hence thesis by A126, A127, A128, Th76;

            end;

              suppose ah in WF(i,g);

              then

              consider I,J be Element of A(), e,b be Element of S() such that

               A129: ah = [( while (I,J)), WhiF(e,b)] and

               A130: I in (B |^ i) and

               A131: J in (B |^ i) and [I, e] in g and [J, b] in g;

              a = ( while (I,J)) by A129, XTUPLE_0: 1;

              hence thesis by A130, A131, Th76;

            end;

          end;

          let x be object;

          assume

           A132: x in (B |^ (i + 1));

          per cases by A132, Th77;

            suppose x in (B |^ i);

            then [x, (g . x)] in g by A25, FUNCT_1:def 2;

            then [x, (g . x)] in (g \/ { [( EmptyIns A()), Emp()]}) by XBOOLE_0:def 3;

            then [x, (g . x)] in ((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) by XBOOLE_0:def 3;

            then [x, (g . x)] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

            then [x, (g . x)] in h by A24, XBOOLE_0:def 3;

            hence thesis by XTUPLE_0:def 12;

          end;

            suppose x = ( EmptyIns A());

            then [x, Emp()] in { [( EmptyIns A()), Emp()]} by TARSKI:def 1;

            then [x, Emp()] in (g \/ { [( EmptyIns A()), Emp()]}) by XBOOLE_0:def 3;

            then [x, Emp()] in ((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) by XBOOLE_0:def 3;

            then [x, Emp()] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

            then [x, Emp()] in h by A24, XBOOLE_0:def 3;

            hence thesis by XTUPLE_0:def 12;

          end;

            suppose ex I1,I2 be Element of A() st x = (I1 \; I2) & I1 in (B |^ i) & I2 in (B |^ i);

            then

            consider I1,I2 be Element of A() such that

             A133: x = (I1 \; I2) and

             A134: I1 in (B |^ i) and

             A135: I2 in (B |^ i);

            reconsider a = (g . I1), b = (g . I2) as Element of S() by A134, A135, FUNCT_2: 5;

            

             A136: [I1, a] in g by A25, A134, FUNCT_1:def 2;

             [I2, b] in g by A25, A135, FUNCT_1:def 2;

            then [x, ConF(a,b)] in CF(i,g) by A133, A134, A135, A136;

            then [x, ConF(a,b)] in ((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) by XBOOLE_0:def 3;

            then [x, ConF(a,b)] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

            then [x, ConF(a,b)] in h by A24, XBOOLE_0:def 3;

            hence thesis by XTUPLE_0:def 12;

          end;

            suppose ex C,I1,I2 be Element of A() st x = ( if-then-else (C,I1,I2)) & C in (B |^ i) & I1 in (B |^ i) & I2 in (B |^ i);

            then

            consider C,I1,I2 be Element of A() such that

             A137: x = ( if-then-else (C,I1,I2)) and

             A138: C in (B |^ i) and

             A139: I1 in (B |^ i) and

             A140: I2 in (B |^ i);

            reconsider a = (g . I1), b = (g . I2), c = (g . C) as Element of S() by A138, A139, A140, FUNCT_2: 5;

            

             A141: [I1, a] in g by A25, A139, FUNCT_1:def 2;

            

             A142: [I2, b] in g by A25, A140, FUNCT_1:def 2;

             [C, c] in g by A25, A138, FUNCT_1:def 2;

            then [x, IfF(c,a,b)] in IF(i,g) by A137, A138, A139, A140, A141, A142;

            then [x, IfF(c,a,b)] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

            then [x, IfF(c,a,b)] in h by A24, XBOOLE_0:def 3;

            hence thesis by XTUPLE_0:def 12;

          end;

            suppose ex C,I be Element of A() st x = ( while (C,I)) & C in (B |^ i) & I in (B |^ i);

            then

            consider C,I be Element of A() such that

             A143: x = ( while (C,I)) and

             A144: C in (B |^ i) and

             A145: I in (B |^ i);

            reconsider a = (g . C), b = (g . I) as Element of S() by A144, A145, FUNCT_2: 5;

            

             A146: [C, a] in g by A25, A144, FUNCT_1:def 2;

             [I, b] in g by A25, A145, FUNCT_1:def 2;

            then [x, WhiF(a,b)] in WF(i,g) by A143, A144, A145, A146;

            then [x, WhiF(a,b)] in h by A24, XBOOLE_0:def 3;

            hence thesis by XTUPLE_0:def 12;

          end;

        end;

        ( rng h) c= S()

        proof

          let a be object;

          assume a in ( rng h);

          then

          consider x be object such that

           A147: [x, a] in h by XTUPLE_0:def 13;

          set ah = [x, a];

          per cases by A27, A147;

            suppose ah in g;

            hence thesis by ZFMISC_1: 87;

          end;

            suppose ah in { [( EmptyIns A()), Emp()]};

            then ah = [( EmptyIns A()), Emp()] by TARSKI:def 1;

            then a = Emp() by XTUPLE_0: 1;

            hence thesis;

          end;

            suppose ah in CF(i,g);

            then

            consider I,J be Element of A(), e,b be Element of S() such that

             A148: ah = [(I \; J), ConF(e,b)] and I in (B |^ i) and J in (B |^ i) and [I, e] in g and [J, b] in g;

            a = ConF(e,b) by A148, XTUPLE_0: 1;

            hence thesis;

          end;

            suppose ah in IF(i,g);

            then

            consider C,I,J be Element of A(), e,b,c be Element of S() such that

             A149: ah = [( if-then-else (C,I,J)), IfF(e,b,c)] and C in (B |^ i) and I in (B |^ i) and J in (B |^ i) and [C, e] in g and [I, b] in g and [J, c] in g;

            a = IfF(e,b,c) by A149, XTUPLE_0: 1;

            hence thesis;

          end;

            suppose ah in WF(i,g);

            then

            consider I,J be Element of A(), e,b be Element of S() such that

             A150: ah = [( while (I,J)), WhiF(e,b)] and I in (B |^ i) and J in (B |^ i) and [I, e] in g and [J, b] in g;

            a = WhiF(e,b) by A150, XTUPLE_0: 1;

            hence thesis;

          end;

        end;

        then

        reconsider h as Function of (B |^ (i + 1)), S() by A120, FUNCT_2: 2;

        h = (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ ( IF(i,g) \/ WF(i,g))) by A24, XBOOLE_1: 4

        .= ((g \/ { [( EmptyIns A()), Emp()]}) \/ ( CF(i,g) \/ ( IF(i,g) \/ WF(i,g)))) by XBOOLE_1: 4

        .= (g \/ ( { [( EmptyIns A()), Emp()]} \/ ( CF(i,g) \/ ( IF(i,g) \/ WF(i,g))))) by XBOOLE_1: 4;

        then

         A151: g c= h by XBOOLE_1: 7;

        take h;

        thus h = (FF . (i + 1));

        hereby

          set x = ( EmptyIns A());

          assume x in (B |^ (i + 1));

           [x, Emp()] in { [( EmptyIns A()), Emp()]} by TARSKI:def 1;

          then [x, Emp()] in (g \/ { [( EmptyIns A()), Emp()]}) by XBOOLE_0:def 3;

          then [x, Emp()] in ((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) by XBOOLE_0:def 3;

          then [x, Emp()] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

          then [x, Emp()] in h by A24, XBOOLE_0:def 3;

          hence (h . ( EmptyIns A())) = Emp() by FUNCT_1: 1;

        end;

        hereby

          let I1,I2 be Element of A();

          set x = (I1 \; I2);

          set y = ConF(.,.);

          assume (I1 \; I2) in (B |^ (i + 1));

          then

           A152: ex i0 be Nat st ((i + 1) = (i0 + 1)) & (I1 in (B |^ i0)) & (I2 in (B |^ i0)) by Th88;

          then

          reconsider gI1 = (g . I1), gI2 = (g . I2) as Element of S() by FUNCT_2: 5;

          

           A153: [I1, gI1] in g by A25, A152, FUNCT_1:def 2;

          

           A154: [I2, gI2] in g by A25, A152, FUNCT_1:def 2;

          

           A155: (g . I1) = (h . I1) by A151, A153, FUNCT_1: 1;

          (g . I2) = (h . I2) by A151, A154, FUNCT_1: 1;

          then [x, y] in CF(i,g) by A152, A153, A154, A155;

          then [x, y] in ((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) by XBOOLE_0:def 3;

          then [x, y] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

          then [x, y] in h by A24, XBOOLE_0:def 3;

          hence (h . (I1 \; I2)) = ConF(.,.) by FUNCT_1: 1;

        end;

        hereby

          let C,I1,I2 be Element of A();

          set x = ( if-then-else (C,I1,I2));

          set y = IfF(.,.,.);

          assume ( if-then-else (C,I1,I2)) in (B |^ (i + 1));

          then

           A156: ex i0 be Nat st ((i + 1) = (i0 + 1)) & (C in (B |^ i0)) & (I1 in (B |^ i0)) & (I2 in (B |^ i0)) by Th89;

          then

          reconsider gC = (g . C), gI1 = (g . I1), gI2 = (g . I2) as Element of S() by FUNCT_2: 5;

          

           A157: [C, gC] in g by A25, A156, FUNCT_1:def 2;

          

           A158: [I1, gI1] in g by A25, A156, FUNCT_1:def 2;

          

           A159: [I2, gI2] in g by A25, A156, FUNCT_1:def 2;

          

           A160: (g . C) = (h . C) by A151, A157, FUNCT_1: 1;

          

           A161: (g . I1) = (h . I1) by A151, A158, FUNCT_1: 1;

          (g . I2) = (h . I2) by A151, A159, FUNCT_1: 1;

          then [x, y] in IF(i,g) by A156, A157, A158, A159, A160, A161;

          then [x, y] in (((g \/ { [( EmptyIns A()), Emp()]}) \/ CF(i,g)) \/ IF(i,g)) by XBOOLE_0:def 3;

          then [x, y] in h by A24, XBOOLE_0:def 3;

          hence (h . ( if-then-else (C,I1,I2))) = IfF(.,.,.) by FUNCT_1: 1;

        end;

        let C,I be Element of A();

        set x = ( while (C,I));

        set y = WhiF(.,.);

        assume ( while (C,I)) in (B |^ (i + 1));

        then

         A162: ex i0 be Nat st ((i + 1) = (i0 + 1)) & (C in (B |^ i0)) & (I in (B |^ i0)) by Th90;

        then

        reconsider gC = (g . C), gI = (g . I) as Element of S() by FUNCT_2: 5;

        

         A163: [C, gC] in g by A25, A162, FUNCT_1:def 2;

        

         A164: [I, gI] in g by A25, A162, FUNCT_1:def 2;

        

         A165: (g . C) = (h . C) by A151, A163, FUNCT_1: 1;

        (g . I) = (h . I) by A151, A164, FUNCT_1: 1;

        then [x, y] in WF(i,g) by A162, A163, A164, A165;

        then [x, y] in h by A24, XBOOLE_0:def 3;

        hence thesis by FUNCT_1: 1;

      end;

      

       A166: for i be Nat holds P[i] from NAT_1:sch 2( A15, A17);

      f is Relation-like Function-like

      proof

        hereby

          let x be object;

          assume x in f;

          then

          consider n be object such that

           A167: n in ( dom FF) and

           A168: x in (FF . n) by CARD_5: 2;

          reconsider n as Element of NAT by A3, A167;

           P[n] by A166;

          hence ex a,b be object st x = [a, b] by A168, RELAT_1:def 1;

        end;

        let x,y1,y2 be object;

        assume [x, y1] in f;

        then

        consider n1 be object such that

         A169: n1 in ( dom FF) and

         A170: [x, y1] in (FF . n1) by CARD_5: 2;

        assume [x, y2] in f;

        then

        consider n2 be object such that

         A171: n2 in ( dom FF) and

         A172: [x, y2] in (FF . n2) by CARD_5: 2;

        reconsider n1, n2 as Element of NAT by A3, A169, A171;

        n1 <= n2 or n2 <= n1;

        then (FF . n1) c= (FF . n2) or (FF . n2) c= (FF . n1) by A5;

        then [x, y1] in (FF . n2) & P[n2] or [x, y2] in (FF . n1) & P[n1] by A166, A170, A172;

        hence thesis by A170, A172, FUNCT_1:def 1;

      end;

      then

      reconsider f as Function;

      

       A173: ( dom f) = the carrier of A()

      proof

        thus ( dom f) c= the carrier of A()

        proof

          let x be object;

          assume x in ( dom f);

          then [x, (f . x)] in f by FUNCT_1:def 2;

          then

          consider n be object such that

           A174: n in ( dom FF) and

           A175: [x, (f . x)] in (FF . n) by CARD_5: 2;

          reconsider n as Element of NAT by A3, A174;

           P[n] by A166;

          then x in (B |^ n) by A175, ZFMISC_1: 87;

          hence thesis;

        end;

        let x be object;

        assume x in the carrier of A();

        then

        reconsider I = x as Element of A();

        consider n be Nat such that

         A176: I in (B |^ n) by Th79;

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

         P[n] by A166;

        then

        reconsider g = (FF . n) as Function of (B |^ n), S();

        ( dom g) = (B |^ n) by FUNCT_2:def 1;

        then [I, (g . I)] in g by A176, FUNCT_1:def 2;

        then [I, (g . I)] in f by A3, CARD_5: 2;

        hence thesis by XTUPLE_0:def 12;

      end;

      ( rng f) c= S()

      proof

        let b be object;

        assume b in ( rng f);

        then

        consider a be object such that

         A177: a in ( dom f) and

         A178: b = (f . a) by FUNCT_1:def 3;

        reconsider a as Element of A() by A173, A177;

        consider n be Nat such that

         A179: a in (B |^ n) by Th79;

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

         P[n] by A166;

        then

        reconsider g = (FF . n) as Function of (B |^ n), S();

        

         A180: ( dom g) = (B |^ n) by FUNCT_2:def 1;

        then [a, (g . a)] in g by A179, FUNCT_1:def 2;

        then [a, (g . a)] in f by A3, CARD_5: 2;

        then

         A181: b = (g . a) by A178, FUNCT_1: 1;

        (g . a) in ( rng g) by A179, A180, FUNCT_1: 3;

        hence thesis by A181;

      end;

      then

      reconsider f as Function of the carrier of A(), S() by A173, FUNCT_2: 2;

      take f;

      hereby

        let I be Element of A();

        assume I in ( ElementaryInstructions A());

        then [I, ElemF(I)] in (FF . 0 ) by A3;

        then [I, ElemF(I)] in f by A3, CARD_5: 2;

        hence (f . I) = ElemF(I) by FUNCT_1: 1;

      end;

       A182:

      now

        let n be Nat;

        let I be Element of A();

        let g be Function of (B |^ n), S();

        assume that

         A183: I in (B |^ n) and

         A184: g = (FF . n);

        ( dom g) = (B |^ n) by FUNCT_2:def 1;

        then

         A185: [I, (g . I)] in g by A183, FUNCT_1:def 2;

        n in NAT by ORDINAL1:def 12;

        then [I, (g . I)] in f by A3, A184, A185, CARD_5: 2;

        hence (g . I) = (f . I) by FUNCT_1: 1;

      end;

      consider n0 be Nat such that

       A186: ( EmptyIns A()) in (B |^ n0) by Th79;

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

      consider g0 be Function of (B |^ n0), S() such that

       A187: g0 = (FF . n0) and

       A188: ( EmptyIns A()) in (B |^ n0) implies (g0 . ( EmptyIns A())) = Emp() and for I1,I2 be Element of A() st (I1 \; I2) in (B |^ n0) holds (g0 . (I1 \; I2)) = ConF(.,.) and for C,I1,I2 be Element of A() st ( if-then-else (C,I1,I2)) in (B |^ n0) holds (g0 . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and for C,I be Element of A() st ( while (C,I)) in (B |^ n0) holds (g0 . ( while (C,I))) = WhiF(.,.) by A166;

      ( dom g0) = (B |^ n0) by FUNCT_2:def 1;

      then [( EmptyIns A()), Emp()] in g0 by A186, A188, FUNCT_1:def 2;

      then [( EmptyIns A()), Emp()] in f by A3, A187, CARD_5: 2;

      hence (f . ( EmptyIns A())) = Emp() by FUNCT_1: 1;

      hereby

        let I1,I2 be Element of A();

        consider n0 be Nat such that

         A189: (I1 \; I2) in (B |^ n0) by Th79;

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

        consider g0 be Function of (B |^ n0), S() such that

         A190: g0 = (FF . n0) and ( EmptyIns A()) in (B |^ n0) implies (g0 . ( EmptyIns A())) = Emp() and

         A191: for I1,I2 be Element of A() st (I1 \; I2) in (B |^ n0) holds (g0 . (I1 \; I2)) = ConF(.,.) and for C,I1,I2 be Element of A() st ( if-then-else (C,I1,I2)) in (B |^ n0) holds (g0 . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and for C,I be Element of A() st ( while (C,I)) in (B |^ n0) holds (g0 . ( while (C,I))) = WhiF(.,.) by A166;

        consider i0 be Nat such that

         A192: n0 = (i0 + 1) and

         A193: I1 in (B |^ i0) and

         A194: I2 in (B |^ i0) by A189, Th88;

        n0 > i0 by A192, NAT_1: 13;

        then

         A195: (B |^ i0) c= (B |^ n0) by Th21;

        

         A196: ( dom g0) = (B |^ n0) by FUNCT_2:def 1;

        

         A197: (g0 . I1) = (f . I1) by A182, A190, A193, A195;

        

         A198: (g0 . I2) = (f . I2) by A182, A190, A194, A195;

        

         A199: [(I1 \; I2), (g0 . (I1 \; I2))] in g0 by A189, A196, FUNCT_1: 1;

        (g0 . (I1 \; I2)) = ConF(.,.) by A189, A191, A197, A198;

        then [(I1 \; I2), ConF(.,.)] in f by A3, A190, A199, CARD_5: 2;

        hence (f . (I1 \; I2)) = ConF(.,.) by FUNCT_1: 1;

      end;

      hereby

        let C,I1,I2 be Element of A();

        set IF = ( if-then-else (C,I1,I2));

        consider n0 be Nat such that

         A200: IF in (B |^ n0) by Th79;

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

        consider g0 be Function of (B |^ n0), S() such that

         A201: g0 = (FF . n0) and ( EmptyIns A()) in (B |^ n0) implies (g0 . ( EmptyIns A())) = Emp() and for I1,I2 be Element of A() st (I1 \; I2) in (B |^ n0) holds (g0 . (I1 \; I2)) = ConF(.,.) and

         A202: for C,I1,I2 be Element of A() st ( if-then-else (C,I1,I2)) in (B |^ n0) holds (g0 . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and for C,I be Element of A() st ( while (C,I)) in (B |^ n0) holds (g0 . ( while (C,I))) = WhiF(.,.) by A166;

        consider i0 be Nat such that

         A203: n0 = (i0 + 1) and

         A204: C in (B |^ i0) and

         A205: I1 in (B |^ i0) and

         A206: I2 in (B |^ i0) by A200, Th89;

        n0 > i0 by A203, NAT_1: 13;

        then

         A207: (B |^ i0) c= (B |^ n0) by Th21;

        

         A208: ( dom g0) = (B |^ n0) by FUNCT_2:def 1;

        

         A209: (g0 . C) = (f . C) by A182, A201, A204, A207;

        

         A210: (g0 . I1) = (f . I1) by A182, A201, A205, A207;

        

         A211: (g0 . I2) = (f . I2) by A182, A201, A206, A207;

        

         A212: [IF, (g0 . IF)] in g0 by A200, A208, FUNCT_1: 1;

        (g0 . IF) = IfF(.,.,.) by A200, A202, A209, A210, A211;

        then [IF, IfF(.,.,.)] in f by A3, A201, A212, CARD_5: 2;

        hence (f . ( if-then-else (C,I1,I2))) = IfF(.,.,.) by FUNCT_1: 1;

      end;

      let C,I be Element of A();

      set WH = ( while (C,I));

      consider n0 be Nat such that

       A213: WH in (B |^ n0) by Th79;

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

      consider g0 be Function of (B |^ n0), S() such that

       A214: g0 = (FF . n0) and ( EmptyIns A()) in (B |^ n0) implies (g0 . ( EmptyIns A())) = Emp() and for I1,I2 be Element of A() st (I1 \; I2) in (B |^ n0) holds (g0 . (I1 \; I2)) = ConF(.,.) and for C,I1,I2 be Element of A() st ( if-then-else (C,I1,I2)) in (B |^ n0) holds (g0 . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and

       A215: for C,I be Element of A() st ( while (C,I)) in (B |^ n0) holds (g0 . ( while (C,I))) = WhiF(.,.) by A166;

      consider i0 be Nat such that

       A216: n0 = (i0 + 1) and

       A217: C in (B |^ i0) and

       A218: I in (B |^ i0) by A213, Th90;

      n0 > i0 by A216, NAT_1: 13;

      then

       A219: (B |^ i0) c= (B |^ n0) by Th21;

      

       A220: ( dom g0) = (B |^ n0) by FUNCT_2:def 1;

      

       A221: (g0 . C) = (f . C) by A182, A214, A217, A219;

      

       A222: (g0 . I) = (f . I) by A182, A214, A218, A219;

      

       A223: [WH, (g0 . WH)] in g0 by A213, A220, FUNCT_1: 1;

      (g0 . WH) = WhiF(.,.) by A213, A215, A221, A222;

      then [WH, WhiF(.,.)] in f by A3, A214, A223, CARD_5: 2;

      hence thesis by FUNCT_1: 1;

    end;

    theorem :: AOFA_000:91

    for A be free ECIW-strict preIfWhileAlgebra holds for g be Function of [:S, ( ElementaryInstructions A):], S holds for s0 be Element of S holds ex f be ExecutionFunction of A, S, T st (f | [:S, ( ElementaryInstructions A):]) = g & for s be Element of S holds for C,I be Element of A st not f iteration_terminates_for ((I \; C),(f . (s,C))) holds (f . (s,( while (C,I)))) = s0

    proof

      let A be free ECIW-strict preIfWhileAlgebra;

      let g be Function of [:S, ( ElementaryInstructions A):], S;

      let s0 be Element of S;

      reconsider Ss0 = (S --> s0) as Element of ( Funcs (S,S)) by FUNCT_2: 9;

      set Z = ( Funcs (S,S));

      deffunc ElemF( Element of A) = (( curry' g) . $1);

      

       A1: for I be Element of A st I in ( ElementaryInstructions A) holds ElemF(I) in Z

      proof

        let I be Element of A;

        assume

         A2: I in ( ElementaryInstructions A);

        then

        reconsider B = ( ElementaryInstructions A) as non empty set;

        reconsider I as Element of B by A2;

        reconsider g as Function of [:S, B:], S;

        (( curry' g) . I) is Element of Z;

        hence thesis;

      end;

      reconsider idS = ( id S) as Element of Z by FUNCT_2: 126;

      deffunc ConF( Element of Z, Element of Z) = ($2 * $1) qua Element of Z;

      deffunc IfF( Element of Z, Element of Z, Element of Z) = ((($2,T) +* $3) * $1) qua Element of Z;

      deffunc WhiF( Element of Z, Element of Z) = (((T,Ss0) iter ($1 * $2)) * $1) qua Element of Z;

      consider h be Function of the carrier of A, Z such that

       A3: for I be Element of A st I in ( ElementaryInstructions A) holds (h . I) = ElemF(I) and

       A4: (h . ( EmptyIns A)) = idS and

       A5: for I1,I2 be Element of A holds (h . (I1 \; I2)) = ConF(.,.) and

       A6: for C,I1,I2 be Element of A holds (h . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and

       A7: for C,I be Element of A holds (h . ( while (C,I))) = WhiF(.,.) from IndDef( A1);

      h in ( Funcs (the carrier of A,Z)) by FUNCT_2: 8;

      then ( uncurry' h) in ( Funcs ( [:S, the carrier of A:],S)) by FUNCT_6: 11;

      then

      reconsider f = ( uncurry' h) as Function of [:S, the carrier of A:], S by FUNCT_2: 66;

      

       A8: ( dom h) = the carrier of A by FUNCT_2:def 1;

      

       A9: f is complying_with_empty-instruction

      proof

        let s be Element of S;

        (idS . s) = s;

        hence thesis by A4, A8, FUNCT_5: 39;

      end;

      

       A10: f is complying_with_catenation

      proof

        let s be Element of S;

        let I1,I2 be Element of A;

        

         A11: ( dom (h . (I1 \; I2))) = S by FUNCT_2:def 1;

        

         A12: ( dom (h . I1)) = S by FUNCT_2:def 1;

        

         A13: ( dom (h . I2)) = S by FUNCT_2:def 1;

        

        thus (f . (s,(I1 \; I2))) = ((h . (I1 \; I2)) . s) by A8, A11, FUNCT_5: 39

        .= (((h . I2) * (h . I1)) . s) by A5

        .= ((h . I2) . ((h . I1) . s)) by FUNCT_2: 15

        .= ((h . I2) . (f . (s,I1))) by A8, A12, FUNCT_5: 39

        .= (f . ((f . (s,I1)),I2)) by A8, A13, FUNCT_5: 39;

      end;

      

       A14: f complies_with_if_wrt T

      proof

        let s be Element of S;

        let C,I1,I2 be Element of A;

        

         A15: ( dom (h . ( if-then-else (C,I1,I2)))) = S by FUNCT_2:def 1;

        

         A16: ( dom (h . C)) = S by FUNCT_2:def 1;

        

         A17: ( dom (h . I1)) = S by FUNCT_2:def 1;

        

         A18: ( dom (h . I2)) = S by FUNCT_2:def 1;

        

         A19: (f . (s,( if-then-else (C,I1,I2)))) = ((h . ( if-then-else (C,I1,I2))) . s) by A8, A15, FUNCT_5: 39

        .= ( IfF(.,.,.) . s) by A6

        .= ((((h . I1),T) +* (h . I2)) . ((h . C) . s)) by FUNCT_2: 15;

        

         A20: (f . (s,C)) = ((h . C) . s) by A8, A16, FUNCT_5: 39;

        hereby

          assume (f . (s,C)) in T;

          

          hence (f . (s,( if-then-else (C,I1,I2)))) = ((h . I1) . (f . (s,C))) by A17, A19, A20, Th4

          .= (f . ((f . (s,C)),I1)) by A8, A17, FUNCT_5: 39;

        end;

        assume (f . (s,C)) nin T;

        

        hence (f . (s,( if-then-else (C,I1,I2)))) = ((h . I2) . (f . (s,C))) by A18, A19, A20, Th5

        .= (f . ((f . (s,C)),I2)) by A8, A18, FUNCT_5: 39;

      end;

      f complies_with_while_wrt T

      proof

        let s be Element of S;

        let C,I be Element of A;

        

         A21: ( dom (h . ( while (C,I)))) = S by FUNCT_2:def 1;

        

         A22: ( dom (h . C)) = S by FUNCT_2:def 1;

        

         A23: ( dom (h . I)) = S by FUNCT_2:def 1;

        

         A24: ( dom ((h . C) * (h . I))) = S by FUNCT_2:def 1;

        

         A25: (f . (s,( while (C,I)))) = ((h . ( while (C,I))) . s) by A8, A21, FUNCT_5: 39

        .= ( WhiF(.,.) . s) by A7

        .= (((T,Ss0) iter ((h . C) * (h . I))) . ((h . C) . s)) by FUNCT_2: 15;

        

         A26: (f . (s,C)) = ((h . C) . s) by A8, A22, FUNCT_5: 39;

        

         A27: ( rng ((h . C) * (h . I))) c= S;

         A28:

        now

          let z be Element of S;

          

          thus ((Ss0 * ((h . C) * (h . I))) . z) = (Ss0 . (((h . C) * (h . I)) . z)) by FUNCT_2: 15

          .= s0 by FUNCOP_1: 7

          .= (Ss0 . z) by FUNCOP_1: 7;

        end;

        hereby

          assume (f . (s,C)) in T;

          

          hence (f . (s,( while (C,I)))) = (((T,Ss0) iter ((h . C) * (h . I))) . (((h . C) * (h . I)) . (f . (s,C)))) by A24, A25, A26, A27, A28, Th11, FUNCT_2: 63

          .= (((T,Ss0) iter ((h . C) * (h . I))) . ((h . C) . ((h . I) . (f . (s,C))))) by FUNCT_2: 15

          .= ((((T,Ss0) iter ((h . C) * (h . I))) * (h . C)) . ((h . I) . (f . (s,C)))) by FUNCT_2: 15

          .= ((((T,Ss0) iter ((h . C) * (h . I))) * (h . C)) . (f . ((f . (s,C)),I))) by A8, A23, FUNCT_5: 39

          .= ((h . ( while (C,I))) . (f . ((f . (s,C)),I))) by A7

          .= (f . ((f . ((f . (s,C)),I)),( while (C,I)))) by A8, A21, FUNCT_5: 39;

        end;

        thus thesis by A24, A25, A26, A27, Th12;

      end;

      then

      reconsider f as ExecutionFunction of A, S, T by A9, A10, A14, Def32;

      take f;

      ( dom f) = [:S, the carrier of A:] by FUNCT_2:def 1;

      then

       A29: [:S, ( ElementaryInstructions A):] c= ( dom f) by ZFMISC_1: 95;

      

       A30: ( dom g) = [:S, ( ElementaryInstructions A):] by FUNCT_2:def 1;

      

       A31: (( dom f) /\ [:S, ( ElementaryInstructions A):]) = [:S, ( ElementaryInstructions A):] by A29, XBOOLE_1: 28;

      now

        let a be object;

        assume

         A32: a in ( dom g);

        then

        consider s,I be object such that

         A33: s in S and

         A34: I in ( ElementaryInstructions A) and

         A35: a = [s, I] by ZFMISC_1:def 2;

        reconsider s as Element of S by A33;

        reconsider I as Element of A by A34;

        reconsider EI = (( curry' g) . I) as Element of Z by A1, A34;

        g in ( Funcs ( [:S, ( ElementaryInstructions A):],S)) by FUNCT_2: 8;

        then ( curry' g) in ( Funcs (( ElementaryInstructions A),Z)) by A32, FUNCT_6: 10;

        then

         A36: ( dom ( curry' g)) = ( ElementaryInstructions A) by FUNCT_2: 92;

        

         A37: ( dom EI) = S by FUNCT_2: 92;

        

         A38: ( dom (h . I)) = S by FUNCT_2: 92;

        

        thus (g . a) = (g . (s,I)) by A35

        .= (EI . s) by A34, A36, A37, FUNCT_5: 34

        .= ((h . I) . s) by A3, A34

        .= (f . (s,I)) by A8, A38, FUNCT_5: 39

        .= (f . a) by A35;

      end;

      hence (f | [:S, ( ElementaryInstructions A):]) = g by A30, A31, FUNCT_1: 46;

      let s be Element of S;

      let C,I be Element of A;

      assume

       A39: not f iteration_terminates_for ((I \; C),(f . (s,C)));

      

       A40: ( dom (h . ( while (C,I)))) = S by FUNCT_2:def 1;

      

       A41: ( dom (h . C)) = S by FUNCT_2:def 1;

      

       A42: ( dom ((h . C) * (h . I))) = S by FUNCT_2:def 1;

      

       A43: (f . (s,( while (C,I)))) = ((h . ( while (C,I))) . s) by A8, A40, FUNCT_5: 39

      .= ( WhiF(.,.) . s) by A7

      .= (((T,Ss0) iter ((h . C) * (h . I))) . ((h . C) . s)) by FUNCT_2: 15;

      

       A44: (f . (s,C)) = ((h . C) . s) by A8, A41, FUNCT_5: 39;

      

       A45: ( rng ((h . C) * (h . I))) c= S;

      ( rng h) c= Z;

      then h = ( curry' f) by FUNCT_5: 48;

      then (( curry' f) . (I \; C)) = ((h . C) * (h . I)) by A5;

      then (((h . C) * (h . I)) orbit (f . (s,C))) c= T by A39, Th87;

      

      hence (f . (s,( while (C,I)))) = (Ss0 . (f . (s,C))) by A42, A43, A44, A45, Def7

      .= s0 by FUNCOP_1: 7;

    end;

    theorem :: AOFA_000:92

    for A be free ECIW-strict preIfWhileAlgebra holds for g be Function of [:S, ( ElementaryInstructions A):], S holds for F be Function of ( Funcs (S,S)), ( Funcs (S,S)) st for h be Element of ( Funcs (S,S)) holds ((F . h) * h) = (F . h) holds ex f be ExecutionFunction of A, S, T st (f | [:S, ( ElementaryInstructions A):]) = g & for C,I be Element of A holds for s be Element of S st not f iteration_terminates_for ((I \; C),(f . (s,C))) holds (f . (s,( while (C,I)))) = ((F . (( curry' f) . (I \; C))) . (f . (s,C)))

    proof

      let A be free ECIW-strict preIfWhileAlgebra;

      let g be Function of [:S, ( ElementaryInstructions A):], S;

      let F be Function of ( Funcs (S,S)), ( Funcs (S,S)) such that

       A1: for h be Element of ( Funcs (S,S)) holds ((F . h) * h) = (F . h);

      set Z = ( Funcs (S,S));

      deffunc ElemF( Element of A) = (( curry' g) . $1);

      

       A2: for I be Element of A st I in ( ElementaryInstructions A) holds ElemF(I) in Z

      proof

        let I be Element of A;

        assume

         A3: I in ( ElementaryInstructions A);

        then

        reconsider B = ( ElementaryInstructions A) as non empty set;

        reconsider I as Element of B by A3;

        reconsider g as Function of [:S, B:], S;

        (( curry' g) . I) is Element of Z;

        hence thesis;

      end;

      reconsider idS = ( id S) as Element of Z by FUNCT_2: 126;

      deffunc ConF( Element of Z, Element of Z) = ($2 * $1) qua Element of Z;

      deffunc IfF( Element of Z, Element of Z, Element of Z) = ((($2,T) +* $3) * $1) qua Element of Z;

      deffunc WhiF( Element of Z, Element of Z) = (((T,(F . ($1 * $2))) iter ($1 * $2)) * $1) qua Element of Z;

      consider h be Function of the carrier of A, Z such that

       A4: for I be Element of A st I in ( ElementaryInstructions A) holds (h . I) = ElemF(I) and

       A5: (h . ( EmptyIns A)) = idS and

       A6: for I1,I2 be Element of A holds (h . (I1 \; I2)) = ConF(.,.) and

       A7: for C,I1,I2 be Element of A holds (h . ( if-then-else (C,I1,I2))) = IfF(.,.,.) and

       A8: for C,I be Element of A holds (h . ( while (C,I))) = WhiF(.,.) from IndDef( A2);

      h in ( Funcs (the carrier of A,Z)) by FUNCT_2: 8;

      then ( uncurry' h) in ( Funcs ( [:S, the carrier of A:],S)) by FUNCT_6: 11;

      then

      reconsider f = ( uncurry' h) as Function of [:S, the carrier of A:], S by FUNCT_2: 66;

      

       A9: ( dom h) = the carrier of A by FUNCT_2:def 1;

      

       A10: f is complying_with_empty-instruction

      proof

        let s be Element of S;

        (idS . s) = s;

        hence thesis by A5, A9, FUNCT_5: 39;

      end;

      

       A11: f is complying_with_catenation

      proof

        let s be Element of S;

        let I1,I2 be Element of A;

        

         A12: ( dom (h . (I1 \; I2))) = S by FUNCT_2:def 1;

        

         A13: ( dom (h . I1)) = S by FUNCT_2:def 1;

        

         A14: ( dom (h . I2)) = S by FUNCT_2:def 1;

        

        thus (f . (s,(I1 \; I2))) = ((h . (I1 \; I2)) . s) by A9, A12, FUNCT_5: 39

        .= (((h . I2) * (h . I1)) . s) by A6

        .= ((h . I2) . ((h . I1) . s)) by FUNCT_2: 15

        .= ((h . I2) . (f . (s,I1))) by A9, A13, FUNCT_5: 39

        .= (f . ((f . (s,I1)),I2)) by A9, A14, FUNCT_5: 39;

      end;

      

       A15: f complies_with_if_wrt T

      proof

        let s be Element of S;

        let C,I1,I2 be Element of A;

        

         A16: ( dom (h . ( if-then-else (C,I1,I2)))) = S by FUNCT_2:def 1;

        

         A17: ( dom (h . C)) = S by FUNCT_2:def 1;

        

         A18: ( dom (h . I1)) = S by FUNCT_2:def 1;

        

         A19: ( dom (h . I2)) = S by FUNCT_2:def 1;

        

         A20: (f . (s,( if-then-else (C,I1,I2)))) = ((h . ( if-then-else (C,I1,I2))) . s) by A9, A16, FUNCT_5: 39

        .= ( IfF(.,.,.) . s) by A7

        .= ((((h . I1),T) +* (h . I2)) . ((h . C) . s)) by FUNCT_2: 15;

        

         A21: (f . (s,C)) = ((h . C) . s) by A9, A17, FUNCT_5: 39;

        hereby

          assume (f . (s,C)) in T;

          

          hence (f . (s,( if-then-else (C,I1,I2)))) = ((h . I1) . (f . (s,C))) by A18, A20, A21, Th4

          .= (f . ((f . (s,C)),I1)) by A9, A18, FUNCT_5: 39;

        end;

        assume (f . (s,C)) nin T;

        

        hence (f . (s,( if-then-else (C,I1,I2)))) = ((h . I2) . (f . (s,C))) by A19, A20, A21, Th5

        .= (f . ((f . (s,C)),I2)) by A9, A19, FUNCT_5: 39;

      end;

      f complies_with_while_wrt T

      proof

        let s be Element of S;

        let C,I be Element of A;

        

         A22: ( dom (h . ( while (C,I)))) = S by FUNCT_2:def 1;

        

         A23: ( dom (h . C)) = S by FUNCT_2:def 1;

        

         A24: ( dom (h . I)) = S by FUNCT_2:def 1;

        

         A25: ( dom ((h . C) * (h . I))) = S by FUNCT_2:def 1;

        

         A26: (f . (s,( while (C,I)))) = ((h . ( while (C,I))) . s) by A9, A22, FUNCT_5: 39

        .= ( WhiF(.,.) . s) by A8

        .= (((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . ((h . C) . s)) by FUNCT_2: 15;

        

         A27: (f . (s,C)) = ((h . C) . s) by A9, A23, FUNCT_5: 39;

        

         A28: ( rng ((h . C) * (h . I))) c= S;

        

         A29: ((F . ((h . C) * (h . I))) * ((h . C) * (h . I))) = (F . ((h . C) * (h . I))) by A1;

        hereby

          assume (f . (s,C)) in T;

          

          hence (f . (s,( while (C,I)))) = (((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . (((h . C) * (h . I)) . (f . (s,C)))) by A25, A26, A27, A28, A29, Th11

          .= (((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . ((h . C) . ((h . I) . (f . (s,C))))) by FUNCT_2: 15

          .= ((((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) * (h . C)) . ((h . I) . (f . (s,C)))) by FUNCT_2: 15

          .= ((((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) * (h . C)) . (f . ((f . (s,C)),I))) by A9, A24, FUNCT_5: 39

          .= ((h . ( while (C,I))) . (f . ((f . (s,C)),I))) by A8

          .= (f . ((f . ((f . (s,C)),I)),( while (C,I)))) by A9, A22, FUNCT_5: 39;

        end;

        thus thesis by A25, A26, A27, A28, Th12;

      end;

      then

      reconsider f as ExecutionFunction of A, S, T by A10, A11, A15, Def32;

      take f;

      ( dom f) = [:S, the carrier of A:] by FUNCT_2:def 1;

      then

       A30: [:S, ( ElementaryInstructions A):] c= ( dom f) by ZFMISC_1: 95;

      

       A31: ( dom g) = [:S, ( ElementaryInstructions A):] by FUNCT_2:def 1;

      

       A32: (( dom f) /\ [:S, ( ElementaryInstructions A):]) = [:S, ( ElementaryInstructions A):] by A30, XBOOLE_1: 28;

      now

        let a be object;

        assume

         A33: a in ( dom g);

        then

        consider s,I be object such that

         A34: s in S and

         A35: I in ( ElementaryInstructions A) and

         A36: a = [s, I] by ZFMISC_1:def 2;

        reconsider s as Element of S by A34;

        reconsider I as Element of A by A35;

        reconsider EI = (( curry' g) . I) as Element of Z by A2, A35;

        g in ( Funcs ( [:S, ( ElementaryInstructions A):],S)) by FUNCT_2: 8;

        then ( curry' g) in ( Funcs (( ElementaryInstructions A),Z)) by A33, FUNCT_6: 10;

        then

         A37: ( dom ( curry' g)) = ( ElementaryInstructions A) by FUNCT_2: 92;

        

         A38: ( dom EI) = S by FUNCT_2: 92;

        

         A39: ( dom (h . I)) = S by FUNCT_2: 92;

        

        thus (g . a) = (g . (s,I)) by A36

        .= (EI . s) by A35, A37, A38, FUNCT_5: 34

        .= ((h . I) . s) by A4, A35

        .= (f . (s,I)) by A9, A39, FUNCT_5: 39

        .= (f . a) by A36;

      end;

      hence (f | [:S, ( ElementaryInstructions A):]) = g by A31, A32, FUNCT_1: 46;

      let C,I be Element of A;

      let s be Element of S;

      assume

       A40: not f iteration_terminates_for ((I \; C),(f . (s,C)));

      

       A41: ( dom (h . ( while (C,I)))) = S by FUNCT_2:def 1;

      

       A42: ( dom (h . C)) = S by FUNCT_2:def 1;

      

       A43: ( dom ((h . C) * (h . I))) = S by FUNCT_2:def 1;

      

       A44: (f . (s,( while (C,I)))) = ((h . ( while (C,I))) . s) by A9, A41, FUNCT_5: 39

      .= ( WhiF(.,.) . s) by A8

      .= (((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . ((h . C) . s)) by FUNCT_2: 15;

      

       A45: (f . (s,C)) = ((h . C) . s) by A9, A42, FUNCT_5: 39;

      

       A46: ( rng ((h . C) * (h . I))) c= S;

      ( rng h) c= Z;

      then h = ( curry' f) by FUNCT_5: 48;

      then

       A47: (( curry' f) . (I \; C)) = ((h . C) * (h . I)) by A6;

      then (((h . C) * (h . I)) orbit (f . (s,C))) c= T by A40, Th87;

      hence thesis by A43, A44, A45, A46, A47, Def7;

    end;

    theorem :: AOFA_000:93

    for A be free ECIW-strict preIfWhileAlgebra holds for f1,f2 be ExecutionFunction of A, S, T st (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]) & for s be Element of S holds for C,I be Element of A st not f1 iteration_terminates_for ((I \; C),(f1 . (s,C))) holds (f1 . (s,( while (C,I)))) = (f2 . (s,( while (C,I)))) holds f1 = f2

    proof

      let A be free ECIW-strict preIfWhileAlgebra;

      let f1,f2 be ExecutionFunction of A, S, T;

      assume

       A1: (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]);

      set g = (f1 | [:S, ( ElementaryInstructions A):]);

      assume

       A2: for s be Element of S holds for C,I be Element of A st not f1 iteration_terminates_for ((I \; C),(f1 . (s,C))) holds (f1 . (s,( while (C,I)))) = (f2 . (s,( while (C,I))));

      defpred P[ set] means for s be Element of S holds (f1 . (s,$1)) = (f2 . (s,$1));

      

       A3: for I be Element of A st I in ( ElementaryInstructions A) holds P[I]

      proof

        let I be Element of A such that

         A4: I in ( ElementaryInstructions A);

        let s be Element of S;

        

         A5: [s, I] in [:S, ( ElementaryInstructions A):] by A4, ZFMISC_1: 87;

        

        hence (f1 . (s,I)) = (g . [s, I]) by FUNCT_1: 49

        .= (f2 . (s,I)) by A1, A5, FUNCT_1: 49;

      end;

      

       A6: P[( EmptyIns A)]

      proof

        let s be Element of S;

        

        thus (f1 . (s,( EmptyIns A))) = s by Def28

        .= (f2 . (s,( EmptyIns A))) by Def28;

      end;

      

       A7: for I1,I2 be Element of A st P[I1] & P[I2] holds P[(I1 \; I2)]

      proof

        let I1,I2 be Element of A such that

         A8: P[I1] and

         A9: P[I2];

        let s be Element of S;

        

        thus (f1 . (s,(I1 \; I2))) = (f1 . ((f1 . (s,I1)),I2)) by Def29

        .= (f1 . ((f2 . (s,I1)),I2)) by A8

        .= (f2 . ((f2 . (s,I1)),I2)) by A9

        .= (f2 . (s,(I1 \; I2))) by Def29;

      end;

      

       A10: for C,I1,I2 be Element of A st P[C] & P[I1] & P[I2] holds P[( if-then-else (C,I1,I2))]

      proof

        let C,I1,I2 be Element of A such that

         A11: P[C] and

         A12: P[I1] and

         A13: P[I2];

        let s be Element of S;

        

         A14: f1 complies_with_if_wrt T by Def32;

        

         A15: f2 complies_with_if_wrt T by Def32;

        

         A16: (f1 . (s,C)) = (f2 . (s,C)) by A11;

        per cases ;

          suppose

           A17: (f1 . (s,C)) in T;

          

          hence (f1 . (s,( if-then-else (C,I1,I2)))) = (f1 . ((f1 . (s,C)),I1)) by A14

          .= (f2 . ((f1 . (s,C)),I1)) by A12

          .= (f2 . (s,( if-then-else (C,I1,I2)))) by A15, A16, A17;

        end;

          suppose

           A18: (f1 . (s,C)) nin T;

          

          hence (f1 . (s,( if-then-else (C,I1,I2)))) = (f1 . ((f1 . (s,C)),I2)) by A14

          .= (f2 . ((f1 . (s,C)),I2)) by A13

          .= (f2 . (s,( if-then-else (C,I1,I2)))) by A15, A16, A18;

        end;

      end;

      

       A19: for C,I be Element of A st P[C] & P[I] holds P[( while (C,I))]

      proof

        let C,I be Element of A such that

         A20: P[C] and

         A21: P[I];

        let s be Element of S;

        now

          assume f1 iteration_terminates_for ((I \; C),(f1 . (s,C)));

          then

          consider r be non empty FinSequence of S such that

           A22: (r . 1) = (f1 . (s,C)) and

           A23: (r . ( len r)) nin T and

           A24: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f1 . ((r . i),(I \; C)));

          

           A25: (f1 . (s,C)) = (f2 . (s,C)) by A20;

           A26:

          now

            let i be Nat;

            assume that

             A27: 1 <= i and

             A28: i < ( len r);

            thus (r . i) in T by A24, A27, A28;

            then

            reconsider si = (r . i) as Element of S;

            

            thus (r . (i + 1)) = (f1 . (si,(I \; C))) by A24, A27, A28

            .= (f1 . ((f1 . (si,I)),C)) by Def29

            .= (f1 . ((f2 . (si,I)),C)) by A21

            .= (f2 . ((f2 . (si,I)),C)) by A20

            .= (f2 . ((r . i),(I \; C))) by Def29;

          end;

          

          thus (f1 . (s,( while (C,I)))) = (r . ( len r)) by A22, A23, A24, Th86

          .= (f2 . (s,( while (C,I)))) by A22, A23, A25, A26, Th86;

        end;

        hence thesis by A2;

      end;

      now

        let sI be Element of [:S, the carrier of A:];

        consider s,I be object such that

         A29: s in S and

         A30: I in the carrier of A and

         A31: sI = [s, I] by ZFMISC_1:def 2;

        reconsider I as Element of A by A30;

        reconsider s as Element of S by A29;

         P[I] from StructInd( A3, A6, A7, A10, A19);

        then (f1 . (s,I)) = (f2 . (s,I));

        hence (f1 . sI) = (f2 . sI) by A31;

      end;

      hence thesis by FUNCT_2: 63;

    end;

    definition

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let T be Subset of S;

      let f be ExecutionFunction of A, S, T;

      defpred Q[ set] means [:S, ( ElementaryInstructions A):] c= $1 & [:S, {( EmptyIns A)}:] c= $1 & for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in $1 & [(f . (s,I)), J] in $1 implies [s, (I \; J)] in $1) & ( [s, C] in $1 & [(f . (s,C)), I] in $1 & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in $1) & ( [s, C] in $1 & [(f . (s,C)), J] in $1 & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in $1) & ( [s, C] in $1 & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in $1 & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in $1);

      :: AOFA_000:def35

      func TerminatingPrograms (A,S,T,f) -> Subset of [:S, the carrier of A:] means

      : Def35: ( [:S, ( ElementaryInstructions A):] c= it & [:S, {( EmptyIns A)}:] c= it & for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in it & [(f . (s,I)), J] in it implies [s, (I \; J)] in it ) & ( [s, C] in it & [(f . (s,C)), I] in it & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in it ) & ( [s, C] in it & [(f . (s,C)), J] in it & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in it ) & ( [s, C] in it & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in it & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in it )) & for P be Subset of [:S, the carrier of A:] st [:S, ( ElementaryInstructions A):] c= P & [:S, {( EmptyIns A)}:] c= P & for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in P & [(f . (s,I)), J] in P implies [s, (I \; J)] in P) & ( [s, C] in P & [(f . (s,C)), I] in P & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & [(f . (s,C)), J] in P & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in P) holds it c= P;

      existence

      proof

        set QQ = { Z where Z be Subset of [:S, the carrier of A:] : Q[Z] };

        set IT = ( meet QQ);

         Q[( [#] [:S, the carrier of A:])]

        proof

          set Y = ( [#] [:S, the carrier of A:]);

           {( EmptyIns A)} c= the carrier of A by ZFMISC_1: 31;

          hence [:S, ( ElementaryInstructions A):] c= Y & [:S, {( EmptyIns A)}:] c= Y by ZFMISC_1: 95;

          thus thesis by ZFMISC_1: 87;

        end;

        then

         A1: [:S, the carrier of A:] in QQ;

        then

        reconsider IT as Subset of [:S, the carrier of A:] by SETFAM_1: 3;

        take IT;

        now

          let a be set;

          assume a in QQ;

          then ex Z be Subset of [:S, the carrier of A:] st a = Z & Q[Z];

          hence [:S, ( ElementaryInstructions A):] c= a;

        end;

        hence [:S, ( ElementaryInstructions A):] c= IT by A1, SETFAM_1: 5;

        now

          let a be set;

          assume a in QQ;

          then ex Z be Subset of [:S, the carrier of A:] st a = Z & Q[Z];

          hence [:S, {( EmptyIns A)}:] c= a;

        end;

        hence [:S, {( EmptyIns A)}:] c= IT by A1, SETFAM_1: 5;

        hereby

          let s be Element of S;

          let C,I,J be Element of A;

          hereby

            assume that

             A2: [s, I] in IT and

             A3: [(f . (s,I)), J] in IT;

            now

              let a be set;

              assume

               A4: a in QQ;

              then

               A5: [s, I] in a by A2, SETFAM_1:def 1;

              

               A6: [(f . (s,I)), J] in a by A3, A4, SETFAM_1:def 1;

              ex Z be Subset of [:S, the carrier of A:] st a = Z & Q[Z] by A4;

              hence [s, (I \; J)] in a by A5, A6;

            end;

            hence [s, (I \; J)] in IT by A1, SETFAM_1:def 1;

          end;

          hereby

            assume that

             A7: [s, C] in IT and

             A8: [(f . (s,C)), I] in IT and

             A9: (f . (s,C)) in T;

            now

              let a be set;

              assume

               A10: a in QQ;

              then

               A11: [s, C] in a by A7, SETFAM_1:def 1;

              

               A12: [(f . (s,C)), I] in a by A8, A10, SETFAM_1:def 1;

              ex Z be Subset of [:S, the carrier of A:] st a = Z & Q[Z] by A10;

              hence [s, ( if-then-else (C,I,J))] in a by A9, A11, A12;

            end;

            hence [s, ( if-then-else (C,I,J))] in IT by A1, SETFAM_1:def 1;

          end;

          hereby

            assume that

             A13: [s, C] in IT and

             A14: [(f . (s,C)), J] in IT and

             A15: (f . (s,C)) nin T;

            now

              let a be set;

              assume

               A16: a in QQ;

              then

               A17: [s, C] in a by A13, SETFAM_1:def 1;

              

               A18: [(f . (s,C)), J] in a by A14, A16, SETFAM_1:def 1;

              ex Z be Subset of [:S, the carrier of A:] st a = Z & Q[Z] by A16;

              hence [s, ( if-then-else (C,I,J))] in a by A15, A17, A18;

            end;

            hence [s, ( if-then-else (C,I,J))] in IT by A1, SETFAM_1:def 1;

          end;

          assume

           A19: [s, C] in IT;

          given r be non empty FinSequence of S such that

           A20: (r . 1) = (f . (s,C)) and

           A21: (r . ( len r)) nin T and

           A22: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in IT & (r . (i + 1)) = (f . ((r . i),(I \; C)));

          now

            let a be set;

            assume

             A23: a in QQ;

             A24:

            now

              let i be Nat;

              assume that

               A25: 1 <= i and

               A26: i < ( len r);

               [(r . i), (I \; C)] in IT by A22, A25, A26;

              hence (r . i) in T & [(r . i), (I \; C)] in a & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A22, A23, A25, A26, SETFAM_1:def 1;

            end;

            

             A27: [s, C] in a by A19, A23, SETFAM_1:def 1;

            ex Z be Subset of [:S, the carrier of A:] st a = Z & Q[Z] by A23;

            hence [s, ( while (C,I))] in a by A20, A21, A24, A27;

          end;

          hence [s, ( while (C,I))] in IT by A1, SETFAM_1:def 1;

        end;

        let Y be Subset of [:S, the carrier of A:];

        assume Q[Y];

        then Y in QQ;

        hence thesis by SETFAM_1: 3;

      end;

      uniqueness

      proof

        let Y1,Y2 be Subset of [:S, the carrier of A:] such that

         A28: Q[Y1] and

         A29: for Y be Subset of [:S, the carrier of A:] st Q[Y] holds Y1 c= Y and

         A30: Q[Y2] and

         A31: for Y be Subset of [:S, the carrier of A:] st Q[Y] holds Y2 c= Y;

        thus Y1 c= Y2 by A29, A30;

        thus thesis by A28, A31;

      end;

    end

    definition

      let A be preIfWhileAlgebra;

      let I be Element of A;

      :: AOFA_000:def36

      attr I is absolutely-terminating means

      : Def36: for S be non empty set, s be Element of S holds for T be Subset of S holds for f be ExecutionFunction of A, S, T holds [s, I] in ( TerminatingPrograms (A,S,T,f));

    end

    definition

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let T be Subset of S;

      let I be Element of A;

      let f be ExecutionFunction of A, S, T;

      :: AOFA_000:def37

      pred I is_terminating_wrt f means for s be Element of S holds [s, I] in ( TerminatingPrograms (A,S,T,f));

    end

    definition

      let A be preIfWhileAlgebra;

      let S be non empty set;

      let T be Subset of S;

      let I be Element of A;

      let f be ExecutionFunction of A, S, T;

      let Z be set;

      :: AOFA_000:def38

      pred I is_terminating_wrt f,Z means for s be Element of S st s in Z holds [s, I] in ( TerminatingPrograms (A,S,T,f));

      :: AOFA_000:def39

      pred Z is_invariant_wrt I,f means for s be Element of S st s in Z holds (f . (s,I)) in Z;

    end

    theorem :: AOFA_000:94

    

     Th94: I in ( ElementaryInstructions A) implies [s, I] in ( TerminatingPrograms (A,S,T,f))

    proof

      assume I in ( ElementaryInstructions A);

      then

       A1: [s, I] in [:S, ( ElementaryInstructions A):] by ZFMISC_1: 87;

       [:S, ( ElementaryInstructions A):] c= ( TerminatingPrograms (A,S,T,f)) by Def35;

      hence thesis by A1;

    end;

    theorem :: AOFA_000:95

    I in ( ElementaryInstructions A) implies I is absolutely-terminating by Th94;

    theorem :: AOFA_000:96

    

     Th96: [s, ( EmptyIns A)] in ( TerminatingPrograms (A,S,T,f))

    proof

      set I = ( EmptyIns A);

      I in {I} by TARSKI:def 1;

      then

       A1: [s, I] in [:S, {I}:] by ZFMISC_1: 87;

       [:S, {I}:] c= ( TerminatingPrograms (A,S,T,f)) by Def35;

      hence thesis by A1;

    end;

    registration

      let A;

      cluster ( EmptyIns A) -> absolutely-terminating;

      coherence by Th96;

    end

    registration

      let A;

      cluster absolutely-terminating for Element of A;

      existence

      proof

        take ( EmptyIns A);

        thus thesis;

      end;

    end

    theorem :: AOFA_000:97

    

     Th97: A is free & [s, (I \; J)] in ( TerminatingPrograms (A,S,T,f)) implies [s, I] in ( TerminatingPrograms (A,S,T,f)) & [(f . (s,I)), J] in ( TerminatingPrograms (A,S,T,f))

    proof

      set TP = ( TerminatingPrograms (A,S,T,f));

      assume that

       A1: A is free and

       A2: [s, (I \; J)] in TP;

      reconsider P = (TP \ { [s, (I \; J)]}) as Subset of [:S, the carrier of A:];

      

       A3: [:S, ( ElementaryInstructions A):] c= P

      proof

        let x,y be object;

        assume

         A4: [x, y] in [:S, ( ElementaryInstructions A):];

        

         A5: I <> (I \; J) by A1, Th73;

        

         A6: J <> (I \; J) by A1, Th73;

        y in ( ElementaryInstructions A) by A4, ZFMISC_1: 87;

        then

         A7: y <> (I \; J) by A5, A6, Th50;

        

         A8: [:S, ( ElementaryInstructions A):] c= TP by Def35;

         [x, y] <> [s, (I \; J)] by A7, XTUPLE_0: 1;

        then [x, y] nin { [s, (I \; J)]} by TARSKI:def 1;

        hence thesis by A4, A8, XBOOLE_0:def 5;

      end;

      

       A9: [:S, {( EmptyIns A)}:] c= P

      proof

        let x,y be object;

        assume

         A10: [x, y] in [:S, {( EmptyIns A)}:];

        then y in {( EmptyIns A)} by ZFMISC_1: 87;

        then y = ( EmptyIns A) by TARSKI:def 1;

        then

         A11: y <> (I \; J) by A1, Th72;

        

         A12: [:S, {( EmptyIns A)}:] c= TP by Def35;

         [x, y] <> [s, (I \; J)] by A11, XTUPLE_0: 1;

        then [x, y] nin { [s, (I \; J)]} by TARSKI:def 1;

        hence thesis by A10, A12, XBOOLE_0:def 5;

      end;

      set rr = s, IJ = (I \; J);

       A13:

      now

        let s be Element of S;

        let C,I,J be Element of A;

        hereby

          assume that

           A14: [s, C] in P and

           A15: [(f . (s,C)), I] in P and

           A16: (f . (s,C)) in T;

          

           A17: [s, C] in TP by A14, ZFMISC_1: 56;

          

           A18: [(f . (s,C)), I] in TP by A15, ZFMISC_1: 56;

          

           A19: IJ <> ( if-then-else (C,I,J)) by A1, Th73;

          

           A20: [s, ( if-then-else (C,I,J))] in TP by A16, A17, A18, Def35;

           [rr, IJ] <> [s, ( if-then-else (C,I,J))] by A19, XTUPLE_0: 1;

          hence [s, ( if-then-else (C,I,J))] in P by A20, ZFMISC_1: 56;

        end;

        hereby

          assume that

           A21: [s, C] in P and

           A22: [(f . (s,C)), J] in P and

           A23: (f . (s,C)) nin T;

          

           A24: [s, C] in TP by A21, ZFMISC_1: 56;

          

           A25: [(f . (s,C)), J] in TP by A22, ZFMISC_1: 56;

          

           A26: IJ <> ( if-then-else (C,I,J)) by A1, Th73;

          

           A27: [s, ( if-then-else (C,I,J))] in TP by A23, A24, A25, Def35;

           [rr, IJ] <> [s, ( if-then-else (C,I,J))] by A26, XTUPLE_0: 1;

          hence [s, ( if-then-else (C,I,J))] in P by A27, ZFMISC_1: 56;

        end;

        assume

         A28: [s, C] in P;

        given r be non empty FinSequence of S such that

         A29: (r . 1) = (f . (s,C)) and

         A30: (r . ( len r)) nin T and

         A31: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)));

         A32:

        now

          let i be Nat;

          assume that

           A33: 1 <= i and

           A34: i < ( len r);

           [(r . i), (I \; C)] in P by A31, A33, A34;

          hence (r . i) in T & [(r . i), (I \; C)] in TP & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A31, A33, A34, ZFMISC_1: 56;

        end;

        

         A35: [s, C] in TP by A28, ZFMISC_1: 56;

        

         A36: ( while (C,I)) <> IJ by A1, Th73;

        

         A37: [s, ( while (C,I))] in TP by A29, A30, A32, A35, Def35;

         [s, ( while (C,I))] <> [rr, IJ] by A36, XTUPLE_0: 1;

        hence [s, ( while (C,I))] in P by A37, ZFMISC_1: 56;

      end;

      hereby

        assume

         A38: [rr, I] nin TP;

        now

          let q be Element of S;

          let C,I9,J9 be Element of A;

          assume that

           A39: [q, I9] in P and

           A40: [(f . (q,I9)), J9] in P;

          

           A41: [q, I9] in TP by A39, ZFMISC_1: 56;

          

           A42: [(f . (q,I9)), J9] in TP by A40, ZFMISC_1: 56;

          

           A43: q <> rr or (I9 \; J9) <> (I \; J) by A1, A38, A41, Th73;

          

           A44: [q, (I9 \; J9)] in TP by A41, A42, Def35;

           [q, (I9 \; J9)] <> [rr, (I \; J)] by A43, XTUPLE_0: 1;

          hence [q, (I9 \; J9)] in P by A44, ZFMISC_1: 56;

        end;

        then for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in P & [(f . (s,I)), J] in P implies [s, (I \; J)] in P) & ( [s, C] in P & [(f . (s,C)), I] in P & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & [(f . (s,C)), J] in P & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in P) by A13;

        then TP c= P by A3, A9, Def35;

        hence contradiction by A2, ZFMISC_1: 56;

      end;

      assume

       A45: [(f . (s,I)), J] nin TP;

      now

        let q be Element of S;

        let C,I9,J9 be Element of A;

        assume that

         A46: [q, I9] in P and

         A47: [(f . (q,I9)), J9] in P;

        

         A48: [q, I9] in TP by A46, ZFMISC_1: 56;

        

         A49: [(f . (q,I9)), J9] in TP by A47, ZFMISC_1: 56;

        (f . (q,I9)) <> (f . (s,I)) or J9 <> J by A45, A47, ZFMISC_1: 56;

        then

         A50: q <> s or (I9 \; J9) <> (I \; J) by A1, Th73;

        

         A51: [q, (I9 \; J9)] in TP by A48, A49, Def35;

         [q, (I9 \; J9)] <> [rr, (I \; J)] by A50, XTUPLE_0: 1;

        hence [q, (I9 \; J9)] in P by A51, ZFMISC_1: 56;

      end;

      then for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in P & [(f . (s,I)), J] in P implies [s, (I \; J)] in P) & ( [s, C] in P & [(f . (s,C)), I] in P & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & [(f . (s,C)), J] in P & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in P) by A13;

      then TP c= P by A3, A9, Def35;

      hence contradiction by A2, ZFMISC_1: 56;

    end;

    registration

      let A;

      let I,J be absolutely-terminating Element of A;

      cluster (I \; J) -> absolutely-terminating;

      coherence

      proof

        let S, s, T, f;

        

         A1: [s, I] in ( TerminatingPrograms (A,S,T,f)) by Def36;

         [(f . (s,I)), J] in ( TerminatingPrograms (A,S,T,f)) by Def36;

        hence thesis by A1, Def35;

      end;

    end

    theorem :: AOFA_000:98

    

     Th98: A is free & [s, ( if-then-else (C,I,J))] in ( TerminatingPrograms (A,S,T,f)) implies [s, C] in ( TerminatingPrograms (A,S,T,f)) & ((f . (s,C)) in T implies [(f . (s,C)), I] in ( TerminatingPrograms (A,S,T,f))) & ((f . (s,C)) nin T implies [(f . (s,C)), J] in ( TerminatingPrograms (A,S,T,f)))

    proof

      set TP = ( TerminatingPrograms (A,S,T,f));

      set rr = s, IJ = ( if-then-else (C,I,J));

      assume that

       A1: A is free and

       A2: [s, IJ] in TP;

      reconsider P = (TP \ { [s, IJ]}) as Subset of [:S, the carrier of A:];

      

       A3: [:S, ( ElementaryInstructions A):] c= P

      proof

        let x,y be object;

        assume

         A4: [x, y] in [:S, ( ElementaryInstructions A):];

        then y in ( ElementaryInstructions A) by ZFMISC_1: 87;

        then

         A5: y <> IJ by Th51;

        

         A6: [:S, ( ElementaryInstructions A):] c= TP by Def35;

         [x, y] <> [s, IJ] by A5, XTUPLE_0: 1;

        then [x, y] nin { [s, IJ]} by TARSKI:def 1;

        hence thesis by A4, A6, XBOOLE_0:def 5;

      end;

      

       A7: [:S, {( EmptyIns A)}:] c= P

      proof

        let x,y be object;

        assume

         A8: [x, y] in [:S, {( EmptyIns A)}:];

        then y in {( EmptyIns A)} by ZFMISC_1: 87;

        then y = ( EmptyIns A) by TARSKI:def 1;

        then

         A9: y <> IJ by A1, Th72;

        

         A10: [:S, {( EmptyIns A)}:] c= TP by Def35;

         [x, y] <> [s, IJ] by A9, XTUPLE_0: 1;

        then [x, y] nin { [s, IJ]} by TARSKI:def 1;

        hence thesis by A8, A10, XBOOLE_0:def 5;

      end;

       A11:

      now

        let s be Element of S;

        let C,I,J be Element of A;

        hereby

          assume that

           A12: [s, I] in P and

           A13: [(f . (s,I)), J] in P;

          

           A14: [s, I] in TP by A12, ZFMISC_1: 56;

          

           A15: [(f . (s,I)), J] in TP by A13, ZFMISC_1: 56;

          

           A16: IJ <> (I \; J) by A1, Th73;

          

           A17: [s, (I \; J)] in TP by A14, A15, Def35;

           [rr, IJ] <> [s, (I \; J)] by A16, XTUPLE_0: 1;

          hence [s, (I \; J)] in P by A17, ZFMISC_1: 56;

        end;

        assume

         A18: [s, C] in P;

        given r be non empty FinSequence of S such that

         A19: (r . 1) = (f . (s,C)) and

         A20: (r . ( len r)) nin T and

         A21: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)));

         A22:

        now

          let i be Nat;

          assume that

           A23: 1 <= i and

           A24: i < ( len r);

           [(r . i), (I \; C)] in P by A21, A23, A24;

          hence (r . i) in T & [(r . i), (I \; C)] in TP & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A21, A23, A24, ZFMISC_1: 56;

        end;

        

         A25: [s, C] in TP by A18, ZFMISC_1: 56;

        

         A26: ( while (C,I)) <> IJ by A1, Th74;

        

         A27: [s, ( while (C,I))] in TP by A19, A20, A22, A25, Def35;

         [s, ( while (C,I))] <> [rr, IJ] by A26, XTUPLE_0: 1;

        hence [s, ( while (C,I))] in P by A27, ZFMISC_1: 56;

      end;

      hereby

        assume

         A28: [s, C] nin ( TerminatingPrograms (A,S,T,f));

         A29:

        now

          let s be Element of S;

          let C9,I,J be Element of A;

          assume that

           A30: [s, C9] in P and

           A31: [(f . (s,C9)), I] in P and

           A32: (f . (s,C9)) in T;

          

           A33: [s, C9] in TP by A30, ZFMISC_1: 56;

          

           A34: [(f . (s,C9)), I] in TP by A31, ZFMISC_1: 56;

          

           A35: IJ <> ( if-then-else (C9,I,J)) or rr <> s by A1, A28, A33, Th74;

          

           A36: [s, ( if-then-else (C9,I,J))] in TP by A32, A33, A34, Def35;

           [rr, IJ] <> [s, ( if-then-else (C9,I,J))] by A35, XTUPLE_0: 1;

          hence [s, ( if-then-else (C9,I,J))] in P by A36, ZFMISC_1: 56;

        end;

        now

          let s be Element of S;

          let C9,I,J be Element of A;

          assume that

           A37: [s, C9] in P and

           A38: [(f . (s,C9)), J] in P and

           A39: (f . (s,C9)) nin T;

          

           A40: [s, C9] in TP by A37, ZFMISC_1: 56;

          

           A41: [(f . (s,C9)), J] in TP by A38, ZFMISC_1: 56;

          

           A42: IJ <> ( if-then-else (C9,I,J)) or rr <> s by A1, A28, A40, Th74;

          

           A43: [s, ( if-then-else (C9,I,J))] in TP by A39, A40, A41, Def35;

           [rr, IJ] <> [s, ( if-then-else (C9,I,J))] by A42, XTUPLE_0: 1;

          hence [s, ( if-then-else (C9,I,J))] in P by A43, ZFMISC_1: 56;

        end;

        then TP c= P by A3, A7, A11, A29, Def35;

        hence contradiction by A2, ZFMISC_1: 56;

      end;

      thus (f . (s,C)) in T implies [(f . (s,C)), I] in ( TerminatingPrograms (A,S,T,f))

      proof

        assume that

         A44: (f . (s,C)) in T and

         A45: [(f . (s,C)), I] nin TP;

         A46:

        now

          let s be Element of S;

          let C9,I9,J be Element of A;

          assume that

           A47: [s, C9] in P and

           A48: [(f . (s,C9)), I9] in P and

           A49: (f . (s,C9)) in T;

          

           A50: [s, C9] in TP by A47, ZFMISC_1: 56;

          

           A51: [(f . (s,C9)), I9] in TP by A48, ZFMISC_1: 56;

          (f . (s,C9)) <> (f . (rr,C)) or I <> I9 by A45, A48, ZFMISC_1: 56;

          then

           A52: IJ <> ( if-then-else (C9,I9,J)) or rr <> s by A1, Th74;

          

           A53: [s, ( if-then-else (C9,I9,J))] in TP by A49, A50, A51, Def35;

           [rr, IJ] <> [s, ( if-then-else (C9,I9,J))] by A52, XTUPLE_0: 1;

          hence [s, ( if-then-else (C9,I9,J))] in P by A53, ZFMISC_1: 56;

        end;

        now

          let s be Element of S;

          let C9,I,J9 be Element of A;

          assume that

           A54: [s, C9] in P and

           A55: [(f . (s,C9)), J9] in P and

           A56: (f . (s,C9)) nin T;

          

           A57: [s, C9] in TP by A54, ZFMISC_1: 56;

          

           A58: [(f . (s,C9)), J9] in TP by A55, ZFMISC_1: 56;

          

           A59: IJ <> ( if-then-else (C9,I,J9)) or rr <> s by A1, A44, A56, Th74;

          

           A60: [s, ( if-then-else (C9,I,J9))] in TP by A56, A57, A58, Def35;

           [rr, IJ] <> [s, ( if-then-else (C9,I,J9))] by A59, XTUPLE_0: 1;

          hence [s, ( if-then-else (C9,I,J9))] in P by A60, ZFMISC_1: 56;

        end;

        then TP c= P by A3, A7, A11, A46, Def35;

        hence contradiction by A2, ZFMISC_1: 56;

      end;

      assume that

       A61: (f . (s,C)) nin T and

       A62: [(f . (s,C)), J] nin TP;

       A63:

      now

        let s be Element of S;

        let C9,I9,J be Element of A;

        assume that

         A64: [s, C9] in P and

         A65: [(f . (s,C9)), I9] in P and

         A66: (f . (s,C9)) in T;

        

         A67: [s, C9] in TP by A64, ZFMISC_1: 56;

        

         A68: [(f . (s,C9)), I9] in TP by A65, ZFMISC_1: 56;

        

         A69: IJ <> ( if-then-else (C9,I9,J)) or rr <> s by A1, A61, A66, Th74;

        

         A70: [s, ( if-then-else (C9,I9,J))] in TP by A66, A67, A68, Def35;

         [rr, IJ] <> [s, ( if-then-else (C9,I9,J))] by A69, XTUPLE_0: 1;

        hence [s, ( if-then-else (C9,I9,J))] in P by A70, ZFMISC_1: 56;

      end;

      now

        let s be Element of S;

        let C9,I,J9 be Element of A;

        assume that

         A71: [s, C9] in P and

         A72: [(f . (s,C9)), J9] in P and

         A73: (f . (s,C9)) nin T;

        

         A74: [s, C9] in TP by A71, ZFMISC_1: 56;

        

         A75: [(f . (s,C9)), J9] in TP by A72, ZFMISC_1: 56;

        (f . (s,C9)) <> (f . (rr,C)) or J <> J9 by A62, A72, ZFMISC_1: 56;

        then

         A76: IJ <> ( if-then-else (C9,I,J9)) or rr <> s by A1, Th74;

        

         A77: [s, ( if-then-else (C9,I,J9))] in TP by A73, A74, A75, Def35;

         [rr, IJ] <> [s, ( if-then-else (C9,I,J9))] by A76, XTUPLE_0: 1;

        hence [s, ( if-then-else (C9,I,J9))] in P by A77, ZFMISC_1: 56;

      end;

      then TP c= P by A3, A7, A11, A63, Def35;

      hence contradiction by A2, ZFMISC_1: 56;

    end;

    registration

      let A;

      let C,I,J be absolutely-terminating Element of A;

      cluster ( if-then-else (C,I,J)) -> absolutely-terminating;

      coherence

      proof

        let S, s, T, f;

        

         A1: [s, C] in ( TerminatingPrograms (A,S,T,f)) by Def36;

        

         A2: (f . (s,C)) in T or (f . (s,C)) nin T;

        

         A3: [(f . (s,C)), I] in ( TerminatingPrograms (A,S,T,f)) by Def36;

         [(f . (s,C)), J] in ( TerminatingPrograms (A,S,T,f)) by Def36;

        hence thesis by A1, A2, A3, Def35;

      end;

    end

    registration

      let A;

      let C,I be absolutely-terminating Element of A;

      cluster ( if-then (C,I)) -> absolutely-terminating;

      coherence ;

    end

    theorem :: AOFA_000:99

    

     Th99: A is free & [s, ( while (C,I))] in ( TerminatingPrograms (A,S,T,f)) implies [s, C] in ( TerminatingPrograms (A,S,T,f)) & ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in ( TerminatingPrograms (A,S,T,f)) & (r . (i + 1)) = (f . ((r . i),(I \; C)))

    proof

      set TP = ( TerminatingPrograms (A,S,T,f));

      set rr = s, IJ = ( while (C,I));

      assume that

       A1: A is free and

       A2: [s, IJ] in TP;

      reconsider P = (TP \ { [s, IJ]}) as Subset of [:S, the carrier of A:];

      

       A3: [:S, ( ElementaryInstructions A):] c= P

      proof

        let x,y be object;

        assume

         A4: [x, y] in [:S, ( ElementaryInstructions A):];

        then y in ( ElementaryInstructions A) by ZFMISC_1: 87;

        then

         A5: y <> IJ by Th52;

        

         A6: [:S, ( ElementaryInstructions A):] c= TP by Def35;

         [x, y] <> [s, IJ] by A5, XTUPLE_0: 1;

        then [x, y] nin { [s, IJ]} by TARSKI:def 1;

        hence thesis by A4, A6, XBOOLE_0:def 5;

      end;

      

       A7: [:S, {( EmptyIns A)}:] c= P

      proof

        let x,y be object;

        assume

         A8: [x, y] in [:S, {( EmptyIns A)}:];

        then y in {( EmptyIns A)} by ZFMISC_1: 87;

        then y = ( EmptyIns A) by TARSKI:def 1;

        then

         A9: y <> IJ by A1, Th72;

        

         A10: [:S, {( EmptyIns A)}:] c= TP by Def35;

         [x, y] <> [s, IJ] by A9, XTUPLE_0: 1;

        then [x, y] nin { [s, IJ]} by TARSKI:def 1;

        hence thesis by A8, A10, XBOOLE_0:def 5;

      end;

       A11:

      now

        let s be Element of S;

        let C,I,J be Element of A;

        hereby

          assume that

           A12: [s, I] in P and

           A13: [(f . (s,I)), J] in P;

          

           A14: [s, I] in TP by A12, ZFMISC_1: 56;

          

           A15: [(f . (s,I)), J] in TP by A13, ZFMISC_1: 56;

          

           A16: IJ <> (I \; J) by A1, Th73;

          

           A17: [s, (I \; J)] in TP by A14, A15, Def35;

           [rr, IJ] <> [s, (I \; J)] by A16, XTUPLE_0: 1;

          hence [s, (I \; J)] in P by A17, ZFMISC_1: 56;

        end;

        hereby

          assume that

           A18: [s, C] in P and

           A19: [(f . (s,C)), I] in P and

           A20: (f . (s,C)) in T;

          

           A21: [s, C] in TP by A18, ZFMISC_1: 56;

          

           A22: [(f . (s,C)), I] in TP by A19, ZFMISC_1: 56;

          

           A23: IJ <> ( if-then-else (C,I,J)) by A1, Th74;

          

           A24: [s, ( if-then-else (C,I,J))] in TP by A20, A21, A22, Def35;

           [rr, IJ] <> [s, ( if-then-else (C,I,J))] by A23, XTUPLE_0: 1;

          hence [s, ( if-then-else (C,I,J))] in P by A24, ZFMISC_1: 56;

        end;

        hereby

          assume that

           A25: [s, C] in P and

           A26: [(f . (s,C)), J] in P and

           A27: (f . (s,C)) nin T;

          

           A28: [s, C] in TP by A25, ZFMISC_1: 56;

          

           A29: [(f . (s,C)), J] in TP by A26, ZFMISC_1: 56;

          

           A30: IJ <> ( if-then-else (C,I,J)) by A1, Th74;

          

           A31: [s, ( if-then-else (C,I,J))] in TP by A27, A28, A29, Def35;

           [rr, IJ] <> [s, ( if-then-else (C,I,J))] by A30, XTUPLE_0: 1;

          hence [s, ( if-then-else (C,I,J))] in P by A31, ZFMISC_1: 56;

        end;

      end;

      hereby

        assume

         A32: [s, C] nin ( TerminatingPrograms (A,S,T,f));

        now

          let s be Element of S;

          let C9,I9,J be Element of A;

          assume

           A33: [s, C9] in P;

          given r be non empty FinSequence of S such that

           A34: (r . 1) = (f . (s,C9)) and

           A35: (r . ( len r)) nin T and

           A36: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I9 \; C9)] in P & (r . (i + 1)) = (f . ((r . i),(I9 \; C9)));

           A37:

          now

            let i be Nat;

            assume that

             A38: 1 <= i and

             A39: i < ( len r);

             [(r . i), (I9 \; C9)] in P by A36, A38, A39;

            hence (r . i) in T & [(r . i), (I9 \; C9)] in TP & (r . (i + 1)) = (f . ((r . i),(I9 \; C9))) by A36, A38, A39, ZFMISC_1: 56;

          end;

          

           A40: [s, C9] in TP by A33, ZFMISC_1: 56;

          then

           A41: ( while (C9,I9)) <> IJ or s <> rr by A1, A32, Th75;

          

           A42: [s, ( while (C9,I9))] in TP by A34, A35, A37, A40, Def35;

           [s, ( while (C9,I9))] <> [rr, IJ] by A41, XTUPLE_0: 1;

          hence [s, ( while (C9,I9))] in P by A42, ZFMISC_1: 56;

        end;

        then for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in P & [(f . (s,I)), J] in P implies [s, (I \; J)] in P) & ( [s, C] in P & [(f . (s,C)), I] in P & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & [(f . (s,C)), J] in P & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in P) by A11;

        then TP c= P by A3, A7, Def35;

        hence contradiction by A2, ZFMISC_1: 56;

      end;

      assume

       A43: not ex r be non empty FinSequence of S st (r . 1) = (f . (rr,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in TP & (r . (i + 1)) = (f . ((r . i),(I \; C)));

      now

        let s be Element of S;

        let C9,I9,J be Element of A;

        assume

         A44: [s, C9] in P;

        given r be non empty FinSequence of S such that

         A45: (r . 1) = (f . (s,C9)) and

         A46: (r . ( len r)) nin T and

         A47: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I9 \; C9)] in P & (r . (i + 1)) = (f . ((r . i),(I9 \; C9)));

         A48:

        now

          let i be Nat;

          assume that

           A49: 1 <= i and

           A50: i < ( len r);

           [(r . i), (I9 \; C9)] in P by A47, A49, A50;

          hence (r . i) in T & [(r . i), (I9 \; C9)] in TP & (r . (i + 1)) = (f . ((r . i),(I9 \; C9))) by A47, A49, A50, ZFMISC_1: 56;

        end;

        

         A51: [s, C9] in TP by A44, ZFMISC_1: 56;

        I <> I9 or C <> C9 or s <> rr by A43, A45, A46, A48;

        then

         A52: ( while (C9,I9)) <> IJ or s <> rr by A1, Th75;

        

         A53: [s, ( while (C9,I9))] in TP by A45, A46, A48, A51, Def35;

         [s, ( while (C9,I9))] <> [rr, IJ] by A52, XTUPLE_0: 1;

        hence [s, ( while (C9,I9))] in P by A53, ZFMISC_1: 56;

      end;

      then for s be Element of S holds for C,I,J be Element of A holds ( [s, I] in P & [(f . (s,I)), J] in P implies [s, (I \; J)] in P) & ( [s, C] in P & [(f . (s,C)), I] in P & (f . (s,C)) in T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & [(f . (s,C)), J] in P & (f . (s,C)) nin T implies [s, ( if-then-else (C,I,J))] in P) & ( [s, C] in P & (ex r be non empty FinSequence of S st (r . 1) = (f . (s,C)) & (r . ( len r)) nin T & for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in P & (r . (i + 1)) = (f . ((r . i),(I \; C)))) implies [s, ( while (C,I))] in P) by A11;

      then TP c= P by A3, A7, Def35;

      hence contradiction by A2, ZFMISC_1: 56;

    end;

    theorem :: AOFA_000:100

    A is free & [s, ( while (C,I))] in ( TerminatingPrograms (A,S,T,f)) & (f . (s,C)) in T implies [(f . (s,C)), I] in ( TerminatingPrograms (A,S,T,f))

    proof

      set TP = ( TerminatingPrograms (A,S,T,f));

      set IJ = ( while (C,I));

      assume that

       A1: A is free and

       A2: [s, IJ] in TP and

       A3: (f . (s,C)) in T;

      consider r be non empty FinSequence of S such that

       A4: (r . 1) = (f . (s,C)) and

       A5: (r . ( len r)) nin T and

       A6: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in TP & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A1, A2, Th99;

      ( len r) >= 1 by NAT_1: 14;

      then 1 < ( len r) by A3, A4, A5, XXREAL_0: 1;

      then [(r . 1), (I \; C)] in TP by A6;

      hence thesis by A1, A4, Th97;

    end;

    theorem :: AOFA_000:101

    for C,I be absolutely-terminating Element of A st f iteration_terminates_for ((I \; C),(f . (s,C))) holds [s, ( while (C,I))] in ( TerminatingPrograms (A,S,T,f))

    proof

      let C,I be absolutely-terminating Element of A;

      given r be non empty FinSequence of S such that

       A1: (r . 1) = (f . (s,C)) and

       A2: (r . ( len r)) nin T and

       A3: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),(I \; C)));

       A4:

      now

        let i be Nat;

        assume that

         A5: 1 <= i and

         A6: i < ( len r);

        thus (r . i) in T by A3, A5, A6;

        hence [(r . i), (I \; C)] in ( TerminatingPrograms (A,S,T,f)) & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A3, A5, A6, Def36;

      end;

       [s, C] in ( TerminatingPrograms (A,S,T,f)) by Def36;

      hence thesis by A1, A2, A4, Def35;

    end;

    

     Lm3: for A be free ECIW-strict preIfWhileAlgebra holds for f1,f2 be ExecutionFunction of A, S, T st (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]) holds for I be Element of A holds for s be Element of S st [s, I] in ( TerminatingPrograms (A,S,T,f1)) holds [s, I] in ( TerminatingPrograms (A,S,T,f2)) & (f1 . (s,I)) = (f2 . (s,I))

    proof

      let A be free ECIW-strict preIfWhileAlgebra;

      let f1,f2 be ExecutionFunction of A, S, T such that

       A1: (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]);

      set g = (f1 | [:S, ( ElementaryInstructions A):]);

      set TP1 = ( TerminatingPrograms (A,S,T,f1));

      set TP2 = ( TerminatingPrograms (A,S,T,f2));

      defpred P[ Element of A] means for s st [s, $1] in TP1 holds [s, $1] in TP2 & (f1 . (s,$1)) = (f2 . (s,$1));

      

       A2: for I be Element of A st I in ( ElementaryInstructions A) holds P[I]

      proof

        let I be Element of A;

        assume

         A3: I in ( ElementaryInstructions A);

        let s be Element of S;

        assume [s, I] in TP1;

        thus [s, I] in TP2 by A3, Th94;

        

         A4: [s, I] in [:S, ( ElementaryInstructions A):] by A3, ZFMISC_1: 87;

        

        hence (f1 . (s,I)) = (g . [s, I]) by FUNCT_1: 49

        .= (f2 . (s,I)) by A1, A4, FUNCT_1: 49;

      end;

      

       A5: P[( EmptyIns A)]

      proof

        let s be Element of S;

        (f1 . (s,( EmptyIns A))) = s by Def28;

        hence thesis by Def28, Th96;

      end;

      

       A6: for I1,I2 be Element of A st P[I1] & P[I2] holds P[(I1 \; I2)]

      proof

        let I1,I2 be Element of A such that

         A7: P[I1] and

         A8: P[I2];

        let s be Element of S;

        assume

         A9: [s, (I1 \; I2)] in TP1;

        then

         A10: [s, I1] in TP1 by Th97;

        

         A11: [(f1 . (s,I1)), I2] in TP1 by A9, Th97;

        

         A12: [s, I1] in TP2 by A7, A10;

        

         A13: [(f1 . (s,I1)), I2] in TP2 by A8, A11;

        

         A14: (f1 . (s,I1)) = (f2 . (s,I1)) by A7, A10;

        

         A15: (f1 . ((f1 . (s,I1)),I2)) = (f2 . ((f1 . (s,I1)),I2)) by A8, A11;

        (f1 . ((f1 . (s,I1)),I2)) = (f1 . (s,(I1 \; I2))) by Def29;

        hence thesis by A12, A13, A14, A15, Def29, Def35;

      end;

      

       A16: for C,I1,I2 be Element of A st P[C] & P[I1] & P[I2] holds P[( if-then-else (C,I1,I2))]

      proof

        let C,I1,I2 be Element of A such that

         A17: P[C] and

         A18: P[I1] and

         A19: P[I2];

        

         A20: f1 complies_with_if_wrt T by Def32;

        

         A21: f2 complies_with_if_wrt T by Def32;

        set J = ( if-then-else (C,I1,I2));

        let s be Element of S;

        assume

         A22: [s, J] in TP1;

        then

         A23: [s, C] in TP1 by Th98;

        

         A24: (f1 . (s,C)) in T implies [(f1 . (s,C)), I1] in TP1 by A22, Th98;

        

         A25: (f1 . (s,C)) nin T implies [(f1 . (s,C)), I2] in TP1 by A22, Th98;

        

         A26: [s, C] in TP2 by A17, A23;

        

         A27: (f1 . (s,C)) = (f2 . (s,C)) by A17, A23;

        

         A28: (f1 . (s,C)) in T implies [(f1 . (s,C)), I1] in TP2 & (f1 . ((f1 . (s,C)),I1)) = (f2 . ((f1 . (s,C)),I1)) & (f1 . (s,J)) = (f1 . ((f1 . (s,C)),I1)) by A18, A20, A24;

        

         A29: (f1 . (s,C)) nin T implies [(f1 . (s,C)), I2] in TP2 & (f1 . ((f1 . (s,C)),I2)) = (f2 . ((f1 . (s,C)),I2)) & (f1 . (s,J)) = (f1 . ((f1 . (s,C)),I2)) by A19, A20, A25;

        (f1 . (s,C)) in T or (f1 . (s,C)) nin T;

        hence thesis by A21, A26, A27, A28, A29, Def35;

      end;

      

       A30: for C,I be Element of A st P[C] & P[I] holds P[( while (C,I))]

      proof

        let C,I be Element of A such that

         A31: P[C] and

         A32: P[I];

        set J = ( while (C,I));

        let s be Element of S;

        assume

         A33: [s, J] in TP1;

        then

         A34: [s, C] in TP1 by Th99;

        then

         A35: [s, C] in TP2 by A31;

        

         A36: (f1 . (s,C)) = (f2 . (s,C)) by A31, A34;

        consider r be non empty FinSequence of S such that

         A37: (r . 1) = (f1 . (s,C)) and

         A38: (r . ( len r)) nin T and

         A39: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & [(r . i), (I \; C)] in TP1 & (r . (i + 1)) = (f1 . ((r . i),(I \; C))) by A33, Th99;

        for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f1 . ((r . i),(I \; C))) by A39;

        then

         A40: (f1 . (s,J)) = (r . ( len r)) by A37, A38, Th86;

        defpred Q[ Nat] means 1 <= $1 & $1 < ( len r) implies (r . $1) in T & [(r . $1), (I \; C)] in TP2 & (r . ($1 + 1)) = (f2 . ((r . $1),(I \; C)));

        

         A41: for i be Nat holds Q[i]

        proof

          let i be Nat;

          assume that

           A42: 1 <= i and

           A43: i < ( len r);

          thus

           A44: (r . i) in T by A39, A42, A43;

          then

          reconsider ri = (r . i) as Element of S;

          

           A45: [(r . i), (I \; C)] in TP1 by A39, A42, A43;

          hence [(r . i), (I \; C)] in TP2 by A6, A31, A32, A44;

          

           A46: [ri, I] in TP1 by A45, Th97;

          

           A47: [(f1 . (ri,I)), C] in TP1 by A45, Th97;

          

          thus (r . (i + 1)) = (f1 . ((r . i),(I \; C))) by A39, A42, A43

          .= (f1 . ((f1 . (ri,I)),C)) by Def29

          .= (f2 . ((f1 . (ri,I)),C)) by A31, A47

          .= (f2 . ((f2 . (ri,I)),C)) by A32, A46

          .= (f2 . ((r . i),(I \; C))) by Def29;

        end;

        then for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f2 . ((r . i),(I \; C)));

        hence thesis by A35, A36, A37, A38, A40, A41, Def35, Th86;

      end;

      let I be Element of A;

      thus P[I] from StructInd( A2, A5, A6, A16, A30);

    end;

    theorem :: AOFA_000:102

    for A be free ECIW-strict preIfWhileAlgebra holds for f1,f2 be ExecutionFunction of A, S, T st (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]) holds ( TerminatingPrograms (A,S,T,f1)) = ( TerminatingPrograms (A,S,T,f2))

    proof

      let A be free ECIW-strict preIfWhileAlgebra;

      let f1,f2 be ExecutionFunction of A, S, T;

      assume

       A1: (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]);

      set TP1 = ( TerminatingPrograms (A,S,T,f1));

      set TP2 = ( TerminatingPrograms (A,S,T,f2));

      thus TP1 c= TP2

      proof

        let q,I be object;

        assume

         A2: [q, I] in TP1;

        then

         A3: q is Element of S by ZFMISC_1: 87;

        I is Element of A by A2, ZFMISC_1: 87;

        hence thesis by A1, A2, A3, Lm3;

      end;

      let q,I be object;

      assume

       A4: [q, I] in TP2;

      then

       A5: q is Element of S by ZFMISC_1: 87;

      I is Element of A by A4, ZFMISC_1: 87;

      hence thesis by A1, A4, A5, Lm3;

    end;

    theorem :: AOFA_000:103

    for A be free ECIW-strict preIfWhileAlgebra holds for f1,f2 be ExecutionFunction of A, S, T st (f1 | [:S, ( ElementaryInstructions A):]) = (f2 | [:S, ( ElementaryInstructions A):]) holds for s be Element of S holds for I be Element of A st [s, I] in ( TerminatingPrograms (A,S,T,f1)) holds (f1 . (s,I)) = (f2 . (s,I)) by Lm3;

    theorem :: AOFA_000:104

    

     Th104: for I be absolutely-terminating Element of A holds I is_terminating_wrt f by Def36;

    theorem :: AOFA_000:105

    for I be Element of A holds I is_terminating_wrt f iff I is_terminating_wrt (f,S);

    theorem :: AOFA_000:106

    

     Th106: for I be Element of A st I is_terminating_wrt f holds for P be set holds I is_terminating_wrt (f,P);

    theorem :: AOFA_000:107

    for I be absolutely-terminating Element of A holds for P be set holds I is_terminating_wrt (f,P) by Th104, Th106;

    theorem :: AOFA_000:108

    for I be Element of A holds S is_invariant_wrt (I,f);

    theorem :: AOFA_000:109

    for P be set holds for I,J be Element of A st P is_invariant_wrt (I,f) & P is_invariant_wrt (J,f) holds P is_invariant_wrt ((I \; J),f)

    proof

      let P be set;

      let I,J be Element of A;

      assume that

       A1: for s be Element of S st s in P holds (f . (s,I)) in P and

       A2: for s be Element of S st s in P holds (f . (s,J)) in P;

      let s be Element of S;

      assume s in P;

      then

       A3: (f . (s,I)) in P by A1;

      (f . (s,(I \; J))) = (f . ((f . (s,I)),J)) by Def29;

      hence thesis by A2, A3;

    end;

    theorem :: AOFA_000:110

    for I,J be Element of A st I is_terminating_wrt f & J is_terminating_wrt f holds (I \; J) is_terminating_wrt f

    proof

      let I,J be Element of A such that

       A1: for s be Element of S holds [s, I] in ( TerminatingPrograms (A,S,T,f)) and

       A2: for s be Element of S holds [s, J] in ( TerminatingPrograms (A,S,T,f));

      let s be Element of S;

      

       A3: [s, I] in ( TerminatingPrograms (A,S,T,f)) by A1;

       [(f . (s,I)), J] in ( TerminatingPrograms (A,S,T,f)) by A2;

      hence thesis by A3, Def35;

    end;

    theorem :: AOFA_000:111

    for P be set holds for I,J be Element of A st I is_terminating_wrt (f,P) & J is_terminating_wrt (f,P) & P is_invariant_wrt (I,f) holds (I \; J) is_terminating_wrt (f,P)

    proof

      let P be set;

      let I,J be Element of A such that

       A1: for s be Element of S st s in P holds [s, I] in ( TerminatingPrograms (A,S,T,f)) and

       A2: for s be Element of S st s in P holds [s, J] in ( TerminatingPrograms (A,S,T,f)) and

       A3: for s be Element of S st s in P holds (f . (s,I)) in P;

      let s be Element of S;

      assume

       A4: s in P;

      then

       A5: [s, I] in ( TerminatingPrograms (A,S,T,f)) by A1;

       [(f . (s,I)), J] in ( TerminatingPrograms (A,S,T,f)) by A2, A3, A4;

      hence thesis by A5, Def35;

    end;

    theorem :: AOFA_000:112

    for C,I,J be Element of A st C is_terminating_wrt f & I is_terminating_wrt f & J is_terminating_wrt f holds ( if-then-else (C,I,J)) is_terminating_wrt f

    proof

      let C,I,J be Element of A such that

       A1: for s be Element of S holds [s, C] in ( TerminatingPrograms (A,S,T,f)) and

       A2: for s be Element of S holds [s, I] in ( TerminatingPrograms (A,S,T,f)) and

       A3: for s be Element of S holds [s, J] in ( TerminatingPrograms (A,S,T,f));

      let s be Element of S;

      

       A4: (f . (s,C)) in T or (f . (s,C)) nin T;

      

       A5: [s, C] in ( TerminatingPrograms (A,S,T,f)) by A1;

      

       A6: [(f . (s,C)), I] in ( TerminatingPrograms (A,S,T,f)) by A2;

       [(f . (s,C)), J] in ( TerminatingPrograms (A,S,T,f)) by A3;

      hence thesis by A4, A5, A6, Def35;

    end;

    theorem :: AOFA_000:113

    for P be set holds for C,I,J be Element of A st C is_terminating_wrt (f,P) & I is_terminating_wrt (f,P) & J is_terminating_wrt (f,P) & P is_invariant_wrt (C,f) holds ( if-then-else (C,I,J)) is_terminating_wrt (f,P)

    proof

      let P be set;

      let C,I,J be Element of A such that

       A1: for s be Element of S st s in P holds [s, C] in ( TerminatingPrograms (A,S,T,f)) and

       A2: for s be Element of S st s in P holds [s, I] in ( TerminatingPrograms (A,S,T,f)) and

       A3: for s be Element of S st s in P holds [s, J] in ( TerminatingPrograms (A,S,T,f)) and

       A4: for s be Element of S st s in P holds (f . (s,C)) in P;

      let s be Element of S;

      assume

       A5: s in P;

      

       A6: (f . (s,C)) in T or (f . (s,C)) nin T;

      

       A7: [s, C] in ( TerminatingPrograms (A,S,T,f)) by A1, A5;

      

       A8: [(f . (s,C)), I] in ( TerminatingPrograms (A,S,T,f)) by A2, A4, A5;

       [(f . (s,C)), J] in ( TerminatingPrograms (A,S,T,f)) by A3, A4, A5;

      hence thesis by A6, A7, A8, Def35;

    end;

    theorem :: AOFA_000:114

    

     Th114: for C,I be Element of A st C is_terminating_wrt f & I is_terminating_wrt f & f iteration_terminates_for ((I \; C),(f . (s,C))) holds [s, ( while (C,I))] in ( TerminatingPrograms (A,S,T,f))

    proof

      let C,I be Element of A such that

       A1: C is_terminating_wrt f and

       A2: I is_terminating_wrt f;

      given r be non empty FinSequence of S such that

       A3: (r . 1) = (f . (s,C)) and

       A4: (r . ( len r)) nin T and

       A5: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),(I \; C)));

       A6:

      now

        let i be Nat;

        assume that

         A7: 1 <= i and

         A8: i < ( len r);

        thus (r . i) in T by A5, A7, A8;

        then

        reconsider s = (r . i) as Element of S;

        

         A9: [s, I] in ( TerminatingPrograms (A,S,T,f)) by A2;

         [(f . (s,I)), C] in ( TerminatingPrograms (A,S,T,f)) by A1;

        hence [(r . i), (I \; C)] in ( TerminatingPrograms (A,S,T,f)) & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A5, A7, A8, A9, Def35;

      end;

       [s, C] in ( TerminatingPrograms (A,S,T,f)) by A1;

      hence thesis by A3, A4, A6, Def35;

    end;

    theorem :: AOFA_000:115

    for P be set holds for C,I be Element of A st C is_terminating_wrt (f,P) & I is_terminating_wrt (f,P) & P is_invariant_wrt (C,f) & P is_invariant_wrt (I,f) & f iteration_terminates_for ((I \; C),(f . (s,C))) & s in P holds [s, ( while (C,I))] in ( TerminatingPrograms (A,S,T,f))

    proof

      let P be set;

      let C,I be Element of A such that

       A1: C is_terminating_wrt (f,P) and

       A2: I is_terminating_wrt (f,P) and

       A3: P is_invariant_wrt (C,f) and

       A4: P is_invariant_wrt (I,f);

      given r be non empty FinSequence of S such that

       A5: (r . 1) = (f . (s,C)) and

       A6: (r . ( len r)) nin T and

       A7: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),(I \; C)));

      assume

       A8: s in P;

      defpred P[ Nat] means $1 < ( len r) implies (r . ($1 + 1)) in P;

      

       A9: P[ 0 ] by A3, A5, A8;

      

       A10: for i be Nat st P[i] holds P[(i + 1)]

      proof

        let i be Nat such that

         A11: P[i] and

         A12: (i + 1) < ( len r);

        

         A13: (i + 1) >= 1 by NAT_1: 11;

        then

         A14: (r . (i + 1)) in T by A7, A12;

        

         A15: (r . ((i + 1) + 1)) = (f . ((r . (i + 1)),(I \; C))) by A7, A12, A13;

        reconsider s = (r . (i + 1)) as Element of S by A14;

        (f . (s,I)) in P by A4, A11, A12, NAT_1: 13;

        then (f . ((f . (s,I)),C)) in P by A3;

        hence (r . ((i + 1) + 1)) in P by A15, Def29;

      end;

      

       A16: for i be Nat holds P[i] from NAT_1:sch 2( A9, A10);

       A17:

      now

        let i be Nat;

        assume that

         A18: 1 <= i and

         A19: i < ( len r);

        thus (r . i) in T by A7, A18, A19;

        then

        reconsider s = (r . i) as Element of S;

        

         A20: (i -' 1) <= i by NAT_D: 35;

        

         A21: i = ((i -' 1) + 1) by A18, XREAL_1: 235;

        (i -' 1) < ( len r) by A19, A20, XXREAL_0: 2;

        then

         A22: s in P by A16, A21;

        then

         A23: [s, I] in ( TerminatingPrograms (A,S,T,f)) by A2;

        (f . (s,I)) in P by A4, A22;

        then [(f . (s,I)), C] in ( TerminatingPrograms (A,S,T,f)) by A1;

        hence [(r . i), (I \; C)] in ( TerminatingPrograms (A,S,T,f)) & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A7, A18, A19, A23, Def35;

      end;

       [s, C] in ( TerminatingPrograms (A,S,T,f)) by A1, A8;

      hence thesis by A5, A6, A17, Def35;

    end;

    theorem :: AOFA_000:116

    

     Th116: for P be set holds for C,I be Element of A st C is_terminating_wrt f & I is_terminating_wrt (f,P) & P is_invariant_wrt (C,f) & (for s st s in P & (f . ((f . (s,I)),C)) in T holds (f . (s,I)) in P) & f iteration_terminates_for ((I \; C),(f . (s,C))) & s in P holds [s, ( while (C,I))] in ( TerminatingPrograms (A,S,T,f))

    proof

      let P be set;

      let C,I be Element of A such that

       A1: C is_terminating_wrt f and

       A2: I is_terminating_wrt (f,P) and

       A3: P is_invariant_wrt (C,f) and

       A4: for s st s in P & (f . ((f . (s,I)),C)) in T holds (f . (s,I)) in P;

      given r be non empty FinSequence of S such that

       A5: (r . 1) = (f . (s,C)) and

       A6: (r . ( len r)) nin T and

       A7: for i be Nat st 1 <= i & i < ( len r) holds (r . i) in T & (r . (i + 1)) = (f . ((r . i),(I \; C)));

      assume

       A8: s in P;

      defpred P[ Nat] means ($1 + 1) < ( len r) implies (r . ($1 + 1)) in P;

      

       A9: P[ 0 ] by A3, A5, A8;

      

       A10: for i be Nat st P[i] holds P[(i + 1)]

      proof

        let i be Nat such that

         A11: P[i] and

         A12: ((i + 1) + 1) < ( len r);

        

         A13: (i + 1) >= 1 by NAT_1: 11;

        

         A14: ((i + 1) + 1) >= 1 by NAT_1: 11;

        

         A15: (i + 1) < ( len r) by A12, NAT_1: 13;

        then

         A16: (r . (i + 1)) in T by A7, A13;

        

         A17: (r . ((i + 1) + 1)) in T by A7, A12, A14;

        

         A18: (r . ((i + 1) + 1)) = (f . ((r . (i + 1)),(I \; C))) by A7, A13, A15;

        reconsider s = (r . (i + 1)) as Element of S by A16;

        (f . ((f . (s,I)),C)) in T by A17, A18, Def29;

        then (f . (s,I)) in P by A4, A11, A12, NAT_1: 13;

        then (f . ((f . (s,I)),C)) in P by A3;

        hence (r . ((i + 1) + 1)) in P by A18, Def29;

      end;

      

       A19: for i be Nat holds P[i] from NAT_1:sch 2( A9, A10);

       A20:

      now

        let i be Nat;

        assume that

         A21: 1 <= i and

         A22: i < ( len r);

        thus (r . i) in T by A7, A21, A22;

        then

        reconsider s = (r . i) as Element of S;

        i = ((i -' 1) + 1) by A21, XREAL_1: 235;

        then s in P by A19, A22;

        then

         A23: [s, I] in ( TerminatingPrograms (A,S,T,f)) by A2;

         [(f . (s,I)), C] in ( TerminatingPrograms (A,S,T,f)) by A1;

        hence [(r . i), (I \; C)] in ( TerminatingPrograms (A,S,T,f)) & (r . (i + 1)) = (f . ((r . i),(I \; C))) by A7, A21, A22, A23, Def35;

      end;

       [s, C] in ( TerminatingPrograms (A,S,T,f)) by A1;

      hence thesis by A5, A6, A20, Def35;

    end;

    theorem :: AOFA_000:117

    for C,I be Element of A st C is_terminating_wrt f & I is_terminating_wrt f & for s holds f iteration_terminates_for ((I \; C),s) holds ( while (C,I)) is_terminating_wrt f

    proof

      let C,I be Element of A such that

       A1: C is_terminating_wrt f and

       A2: I is_terminating_wrt f and

       A3: for s holds f iteration_terminates_for ((I \; C),s);

      let s;

      f iteration_terminates_for ((I \; C),(f . (s,C))) by A3;

      hence thesis by A1, A2, Th114;

    end;

    theorem :: AOFA_000:118

    for P be set holds for C,I be Element of A st C is_terminating_wrt f & I is_terminating_wrt (f,P) & P is_invariant_wrt (C,f) & (for s st s in P & (f . ((f . (s,I)),C)) in T holds (f . (s,I)) in P) & for s st (f . (s,C)) in P holds f iteration_terminates_for ((I \; C),(f . (s,C))) holds ( while (C,I)) is_terminating_wrt (f,P)

    proof

      let P be set;

      let C,I be Element of A such that

       A1: C is_terminating_wrt f and

       A2: I is_terminating_wrt (f,P) and

       A3: P is_invariant_wrt (C,f) and

       A4: for s st s in P & (f . ((f . (s,I)),C)) in T holds (f . (s,I)) in P and

       A5: for s st (f . (s,C)) in P holds f iteration_terminates_for ((I \; C),(f . (s,C)));

      let s;

      assume

       A6: s in P;

      then (f . (s,C)) in P by A3;

      hence thesis by A1, A2, A3, A4, A5, A6, Th116;

    end;