AOFA_A01

index · ← LPSPACC1 · CKSPACE1 →
:: Analysis of Algorithms: An Example of a Sort Algorithm
::  by Grzegorz Bancerek
::
:: Received November 9, 2012
:: Copyright (c) 2012-2026 Association of Mizar Users
::           (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.

environ

 vocabularies INT_1, AOFA_A00, XBOOLE_0, STRUCT_0, RELAT_1, PBOOLE, MSAFREE4,
      NAT_1, SUBSET_1, ORDINAL1, MSUALG_1, AOFA_000, ZF_MODEL, FUNCT_1,
      INCPROJ, FUNCT_2, CARD_1, GRAPHSP, AOFA_I00, QC_LANG1, MSAFREE, AOFA_A01,
      ARYTM_3, NEWTON, ABCMIZ_1, ZFMISC_1, XREAL_0, MSUALG_3, GROUP_6, REAL_1,
      MSUALG_2, TARSKI, MARGREL1, XBOOLEAN, PARTFUN1, FINSEQ_1, XXREAL_0,
      CARD_3, NUMBERS, FUNCT_7, ARYTM_1, PRELAMB, REALSET1, TREES_4, POWER,
      PROB_2, FUNCT_6, PZFMISC1, ALGSTR_4, ORDINAL4, MEMBERED, FINSET_1,
      XXREAL_2, AFINSQ_1, EXCHSORT, FUNCT_4, FUNCOP_1, FINSEQ_4, MODELC_3,
      UNIALG_1, WELLORD1, ORDERS_2, LFUZZY_0, REARRAN1, SETLIM_2, MCART_1,
      EQUATION, FOMODEL2, TREES_2;
 notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, FINSET_1, WELLORD2, MCART_1,
      RELAT_1, FUNCT_1, PARTFUN1, FUNCT_2, MARGREL1, XTUPLE_0, FUNCT_4,
      FUNCT_6, FUNCT_7, FUNCOP_1, FINSEQ_1, FINSEQ_2, FINSEQ_4, AFINSQ_1,
      CARD_1, CARD_3, POWER, MEMBERED, STRUCT_0, ORDINAL1, NAT_1, BINOP_1,
      PBOOLE, TREES_3, TREES_4, PZFMISC1, TREES_2, NUMBERS, XCMPLX_0, XXREAL_0,
      XREAL_0, XXREAL_2, INT_1, NAT_D, NEWTON, TREES_1, PROB_2, ORDERS_2,
      WAYBEL_0, LFUZZY_0, UNIALG_1, FREEALG, COMPUT_1, PUA2MSS1, MSUALG_1,
      MSUALG_2, MSUALG_3, MSAFREE, MSAFREE1, MSUALG_6, MSAFREE3, MSATERM,
      AOFA_000, EXCHSORT, MSAFREE4, AOFA_A00;
 constructors XBOOLE_0, AOFA_000, AOFA_A00, SUBSET_1, BINOP_1, ORDINAL1, NAT_1,
      INSTALG1, MSAFREE3, ZFMISC_1, NEWTON, XCMPLX_0, MSAFREE4, CATALG_1,
      AUTALG_1, POWER, PUA2MSS1, MSUALG_3, FINSEQ_4, NUMBERS, RELSET_1, REAL_1,
      MSAFREE1, PZFMISC1, PRALG_2, SQUARE_1, NAT_D, XXREAL_0, XXREAL_2,
      EXCHSORT, AFINSQ_1, WELLORD2, FUNCT_4, PARTFUN1, COMPUT_1, LFUZZY_0,
      MEMBERED, WAYBEL_0, MCART_1, MSATERM, TREES_9, TREES_2;
 registrations AOFA_000, AOFA_A00, ORDINAL1, NUMBERS, PBOOLE, MSUALG_1,
      INSTALG1, MSAFREE4, FUNCOP_1, RELSET_1, STRUCT_0, INT_1, XREAL_0,
      MSUALG_2, FUNCT_1, FINSEQ_1, XBOOLEAN, MARGREL1, XBOOLE_0, NAT_1,
      RELAT_1, MSUALG_9, POWER, MEMBERED, XXREAL_2, EXCHSORT, FINSET_1,
      AFINSQ_1, CARD_1, UNIALG_1, LFUZZY_0, TREES_3, TREES_2, VALUED_0,
      XTUPLE_0;
 requirements BOOLE, SUBSET, NUMERALS, ARITHM, REAL;
 definitions TARSKI, MEMBERED, XBOOLE_0, RELAT_1, FUNCT_2, XXREAL_2, PBOOLE,
      AOFA_000, AOFA_A00;
 equalities FINSEQ_1, XBOOLEAN, MARGREL1, PUA2MSS1, MSUALG_1, AOFA_000,
      AOFA_A00, ORDINAL1;
 expansions TARSKI, FUNCT_2, FINSEQ_1, UNIALG_1, PBOOLE, MSUALG_3, AOFA_000,
      AOFA_A00;
 theorems TARSKI, XBOOLE_0, XBOOLE_1, ZFMISC_1, INT_1, RELAT_1, XXREAL_0,
      PARTFUN1, FUNCT_1, FUNCT_2, FINSEQ_1, FINSEQ_2, FINSEQ_3, FINSEQ_4,
      FINSET_1, ORDINAL1, AFINSQ_1, FUNCOP_1, CARD_5, XBOOLEAN, MARGREL1,
      POWER, NEWTON, FIB_NUM2, NAT_1, NAT_D, PRE_FF, FUNCT_4, INT_2, XXREAL_2,
      TREES_4, TREES_1, CARD_3, FUNCT_7, PBOOLE, PRE_CIRC, MSAFREE, MSSUBFAM,
      PRALG_2, EXTENS_1, MSAFREE3, MSAFREE4, EQUATION, MSUALG_2, MSUALG_3,
      AOFA_000, AOFA_A00, EXCHSORT, MEMBERED, CARD_1, XREAL_1, LFUZZY_0,
      MSAFREE1, INSTALG1, TREES_9, SUBSET_1;
 schemes FUNCT_2, NAT_1, FINSEQ_1, RECDEF_1, AOFA_000, CLASSES1;

begin :: Exponentiation by squaring revisited

theorem Th1:
  1 mod 2 = 1 & 2 mod 2 = 0 by NAT_D:24,NAT_D:25;

theorem Th2:
  for S being non empty non void ManySortedSign
  for A being MSAlgebra over S
  for B being MSSubAlgebra of A
  for s being SortSymbol of S
  for a being set st a in (the Sorts of B).s
  holds a in (the Sorts of A).s
  proof
    let S be non empty non void ManySortedSign;
    let A be MSAlgebra over S;
    let B be MSSubAlgebra of A;
    let s be SortSymbol of S;
    the Sorts of B is MSSubset of A by MSUALG_2:def 9;
    then (the Sorts of B).s c= (the Sorts of A).s by PBOOLE:def 18,def 2;
    hence thesis;
  end;

theorem Th3:
  for I being non empty set, a,b,c being set, i being Element of I
  holds c in (i-singleton a).b iff b = i & c = a
  proof
    let I be non empty set;
    let a,b,c be set;
    let i be Element of I;
A1: (i-singleton a).i = {a} & for b being set st b in I & b <> i holds
    (i-singleton a).b = {} by AOFA_A00:6;
    dom (i-singleton a) = I by PARTFUN1:def 2;
    then
A2: for b being set st b nin I holds (i-singleton a).b = {} by FUNCT_1:def 2;
    hereby
      assume A3: c in (i-singleton a).b;
      thus b = i by A3,A1,A2;
      hence c = a by A1,A3,TARSKI:def 1;
    end;
    thus thesis by A1,TARSKI:def 1;
  end;

theorem Th4:
  for I being non empty set, a,b,c,d being set, i,j being Element of I
  holds c in ((i-singleton a)(\/)(j-singleton d)).b iff
  b = i & c = a or b = j & c = d
  proof
    let I be non empty set;
    let a,b,c,d be set;
    let i,j be Element of I;
    hereby
      assume A1: c in ((i-singleton a)(\/)(j-singleton d)).b;
      assume A2: not (b = i & c = a);
      b in dom((i-singleton a)(\/)(j-singleton d)) by A1,FUNCT_1:def 2;
      then b in I by PARTFUN1:def 2;
      then c in ((i-singleton a).b)\/((j-singleton d).b) by A1,PBOOLE:def 4;
      then c in (i-singleton a).b or c in (j-singleton d).b by XBOOLE_0:def 3;
      hence b = j & c = d by A2,Th3;
    end;
    assume A3: b = i & c = a or b = j & c = d;
    then c in (i-singleton a).b or c in (j-singleton d).b by Th3;
    then c in ((i-singleton a).b)\/((j-singleton d).b) by XBOOLE_0:def 3;
    hence c in ((i-singleton a)(\/)(j-singleton d)).b by A3,PBOOLE:def 4;
  end;

definition
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  let A be non-empty MSAlgebra over S;
  attr A is integer means: Def1:
  ex C being image of A st C is (4,1) integer bool-correct MSAlgebra over S;
end;

theorem Th5:
  for S being non empty non void ManySortedSign
  for A being non-empty MSAlgebra over S
  holds Image id the Sorts of A = the MSAlgebra of A
  proof
    let S be non empty non void ManySortedSign;
    let A be non-empty MSAlgebra over S;
    the MSAlgebra of A is strict non-empty MSSubAlgebra of A &
    id the Sorts of A is_homomorphism A,A &
    (id the Sorts of A).:.:the Sorts of A = the Sorts of A
    by EQUATION:15,MSUALG_2:5,MSUALG_3:9;
    hence Image id the Sorts of A = the MSAlgebra of A by MSUALG_3:def 12;
  end;

theorem Th6:
  for S being non empty non void ManySortedSign
  for A being non-empty MSAlgebra over S
  holds A is image of A
  proof
    let S be non empty non void ManySortedSign;
    let A be non-empty MSAlgebra over S;
    A is A-Image
    proof
      now
        take B = A;
        reconsider h = id the Sorts of A as ManySortedFunction of
        the Sorts of A, the Sorts of B;
        take h;
        thus h is_homomorphism A,B by MSUALG_3:9;
        thus the MSAlgebra of A = Image h by Th5;
      end;
      hence thesis by MSAFREE4:def 4;
    end;
    hence thesis;
  end;

registration
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  cluster integer for non-empty MSAlgebra over S;
  existence
  proof
    set C = the (4,1) integer bool-correct non-empty MSAlgebra over S;
    reconsider C1 = C as image of C by Th6;
    take C,C1; thus thesis;
  end;
end;

registration
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  let A be integer non-empty MSAlgebra over S;
  cluster bool-correct for image of A;
  existence
  proof
    consider C being image of A such that
A1: C is (4,1) integer bool-correct MSAlgebra over S by Def1;
    take C; thus thesis by A1;
  end;
end;

registration
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  let A be integer non-empty MSAlgebra over S;
  cluster (4,1) integer for bool-correct image of A;
  existence
  proof
    ex C being image of A st
    C is (4,1) integer bool-correct MSAlgebra over S by Def1;
    hence thesis;
  end;
end;

theorem Th7:
  for S being non empty non void ManySortedSign
  for A being non-empty MSAlgebra over S
  for o being OperSymbol of S, a being set, r being SortSymbol of S
  st o is_of_type a,r
  holds Den(o,A) is Function of (the Sorts of A)#.a, (the Sorts of A).r &
  Args(o,A) = (the Sorts of A)#.a & Result(o,A) = (the Sorts of A).r
  proof
    let S be non empty non void ManySortedSign;
    let A be non-empty MSAlgebra over S;
    let o be OperSymbol of S;
    let a be set;
    let r be SortSymbol of S;
    assume A1: (the Arity of S).o = a & (the ResultSort of S).o = r;
    then
A2: ((the Sorts of A)#*the Arity of S).o = (the Sorts of A)#.a by FUNCT_2:15;
    ((the Sorts of A)*the ResultSort of S).o = (the Sorts of A).r
    by A1,FUNCT_2:15;
    hence Den(o,A) is Function of (the Sorts of A)#.a, (the Sorts of A).r
    by A2;
    thus thesis by A1,FUNCT_2:15;
  end;

registration
  let S be bool-correct non empty non void BoolSignature;
  let A be bool-correct non-empty MSAlgebra over S;
  cluster -> bool-correct for non-empty MSSubAlgebra of A;
  coherence
  proof
A1: (the Sorts of A).the bool-sort of S = BOOLEAN &
    Den(In((the connectives of S).1, the carrier' of S), A).{} = TRUE &
    for x,y be boolean object holds
    Den(In((the connectives of S).2, the carrier' of S), A).<*x*> = 'not' x &
    Den(In((the connectives of S).3, the carrier' of S), A).<*x,y*> = x '&' y
    by AOFA_A00:def 32;
    let B be non-empty MSSubAlgebra of A;
    the Sorts of B is MSSubset of A by MSUALG_2:def 9;
    hence (the Sorts of B).the bool-sort of S c= BOOLEAN
    by A1,PBOOLE:def 18,def 2;
    set o1 = In((the connectives of S).1, the carrier' of S),
    o2 = In((the connectives of S).2, the carrier' of S);
    set b = the bool-sort of S;
    3 <= len the connectives of S by AOFA_A00:def 31;
    then 1 <= len the connectives of S by XXREAL_0:2;
    then 1 in dom the connectives of S by FINSEQ_3:25;
    then o1 = (the connectives of S).1 by FUNCT_1:102,SUBSET_1:def 8;
    then o1 is_of_type {},b by AOFA_A00:def 31;
    then
A2: Den(o1,B) is Function of (the Sorts of B)#.{}, (the Sorts of B).b &
    Args(o1,B) = (the Sorts of B)#.{} by Th7;
    (the Sorts of B)#.<*>the carrier of S = {{}} by PRE_CIRC:2;
    then
A3: {} in (the Sorts of B)#.{} by TARSKI:def 1;
A4: Den(o1,B).{} = Den(o1,A).{} by A2,A3,EQUATION:19
    .= TRUE by AOFA_A00:def 32;
    then
A5: TRUE in (the Sorts of B).the bool-sort of S by A2,A3,FUNCT_2:5;
A6: <*b*> in (the carrier of S)* by FINSEQ_1:def 11;
A7: dom the Sorts of B = the carrier of S by PARTFUN1:def 2;
    3 <= len the connectives of S by AOFA_A00:def 31;
    then 2 <= len the connectives of S by XXREAL_0:2;
    then 2 in dom the connectives of S by FINSEQ_3:25;
    then o2 = (the connectives of S).2 by FUNCT_1:102,SUBSET_1:def 8;
    then o2 is_of_type <*b*>,b by AOFA_A00:def 31;
    then
A8: Den(o2,B) is Function of (the Sorts of B)#.<*b*>, (the Sorts of B).b &
    Args(o2,B) = (the Sorts of B)#.<*b*> by Th7;
    then
A9: Args(o2,B) = product ((the Sorts of B)*<*b*>) by A6,FINSEQ_2:def 5
    .= product <*(the Sorts of B).b*> by A7,FINSEQ_2:34;
    then
A10: <*TRUE*> in Args(o2,B) by A5,FINSEQ_3:123;
    Den(o2,B).<*TRUE*>
    = Den(o2,A).<*TRUE*> by A9,A5,FINSEQ_3:123,EQUATION:19
    .= 'not' TRUE by AOFA_A00:def 32 .= FALSE;
    then FALSE in (the Sorts of B).b by A8,A10,FUNCT_2:5;
    hence
A11: BOOLEAN c= (the Sorts of B).b by A5,ZFMISC_1:32;
    thus Den(In((the connectives of S).1, the carrier' of S), B).{}
    = TRUE by A4;
    let x,y be boolean object;
A12: <*b,b*> in (the carrier of S)* by FINSEQ_1:def 11;
A13: x in BOOLEAN & y in BOOLEAN by MARGREL1:def 12;
    thus Den(o2, B).<*x*> = Den(o2,A).<*x*>
    by A13,A11,A9,FINSEQ_3:123,EQUATION:19
    .= 'not' x by AOFA_A00:def 32;
    set o3 = In((the connectives of S).3, the carrier' of S);
    3 <= len the connectives of S by AOFA_A00:def 31;
    then 3 in dom the connectives of S by FINSEQ_3:25;
    then o3 = (the connectives of S).3 by FUNCT_1:102,SUBSET_1:def 8;
    then o3 is_of_type <*b,b*>,b by AOFA_A00:def 31;
    then
    Den(o3,B) is Function of (the Sorts of B)#.<*b,b*>, (the Sorts of B).b &
    Args(o3,B) = (the Sorts of B)#.<*b,b*> by Th7;
    then
    Args(o3,B) = product ((the Sorts of B)*<*b,b*>) by A12,FINSEQ_2:def 5
    .= product <*(the Sorts of B).b,(the Sorts of B).b*> by A7,FINSEQ_2:125;
    hence Den(o3, B).<*x,y*> = Den(o3,A).<*x,y*>
    by A11,A13,FINSEQ_3:124,EQUATION:19
    .= x '&' y by AOFA_A00:def 32;
  end;
end;

registration
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  let A be (4,1) integer bool-correct non-empty MSAlgebra over S;
  cluster -> (4,1) integer for non-empty MSSubAlgebra of A;
  coherence
  proof
    let B be non-empty MSSubAlgebra of A;
    set n = 4;
    consider I being SortSymbol of S such that
A1: I = 1 & (the connectives of S).n is_of_type {},I &
    (the Sorts of A).I = INT &
    Den(In((the connectives of S).n, the carrier' of S), A).{} = 0 &
    Den(In((the connectives of S).(n+1), the carrier' of S), A).{} = 1 &
    for i,j being Integer holds
    Den(In((the connectives of S).(n+2), the carrier' of S), A).<*i*> = -i &
    Den(In((the connectives of S).(n+3), the carrier' of S), A).<*i,j*> = i+j &
    Den(In((the connectives of S).(n+4), the carrier' of S), A).<*i,j*> = i*j &
    (j <> 0 implies
    Den(In((the connectives of S).(n+5), the carrier' of S), A).<*i,j*>
    = i div j) &
    Den(In((the connectives of S).(n+6), the carrier' of S), A).<*i,j*>
    = IFGT(i,j,FALSE,TRUE) by AOFA_A00:def 50;
    reconsider I as integer SortSymbol of S by A1,AOFA_A00:def 40;
    take I;
    thus I = 1 & (the connectives of S).n is_of_type {},I by A1;
    the Sorts of B is MSSubset of A by MSUALG_2:def 9;
    hence (the Sorts of B).I c= INT by A1,PBOOLE:def 18,def 2;
    n+6 <= len the connectives of S & 4 <= 10 by AOFA_A00:def 39;
    then n <= len the connectives of S & n+1 <= len the connectives of S &
    1 <= 5 by XXREAL_0:2;
    then n in dom the connectives of S & n+1 in dom the connectives of S
    by FINSEQ_3:25;
    then reconsider o1 = (the connectives of S).n,
    o2 = (the connectives of S).(n+1) as OperSymbol of S by FUNCT_1:102;
    o1 is_of_type {},I & o2 is_of_type {},I by AOFA_A00:53;
    then
A2: Den(o1,B) is Function of (the Sorts of B)#.{}, (the Sorts of B).I &
    Den(o2,B) is Function of (the Sorts of B)#.{}, (the Sorts of B).I &
    Args(o1,B) = (the Sorts of B)#.{} & Args(o2,B) = (the Sorts of B)#.{}
    by Th7;
    (the Sorts of B)#.<*>the carrier of S = {{}} by PRE_CIRC:2;
    then
A3: {} in (the Sorts of B)#.{} by TARSKI:def 1;
    then
A4: Den(o1,B).{} in (the Sorts of B).I & Den(o2,B).{} in (the Sorts of B).I
    by A2,FUNCT_2:5;
A5: Den(o1,B).{} = Den(o1,A).{} by A2,A3,EQUATION:19
    .= 0 by A1,SUBSET_1:def 8;
A6: Den(o2,B).{} = Den(o2,A).{} by A2,A3,EQUATION:19
    .= 1 by A1,SUBSET_1:def 8;
    defpred P[Nat] means $1 in (the Sorts of B).I & -$1 in (the Sorts of B).I;
A7: P[0] by A2,A3,A5,FUNCT_2:5;
    n+6 <= len the connectives of S & 4 <= 10 by AOFA_A00:def 39;
    then n+2 <= len the connectives of S & n+3 <= len the connectives of S &
    1 <= 6 & 1 <= 7 by XXREAL_0:2;
    then n+2 in dom the connectives of S & n+3 in dom the connectives of S
    by FINSEQ_3:25;
    then reconsider o3 = (the connectives of S).(n+2),
    o4 = (the connectives of S).(n+3) as OperSymbol of S by FUNCT_1:102;
    o3 is_of_type <*I*>,I & o4 is_of_type <*I,I*>,I by AOFA_A00:53;
    then
A8: Den(o3,B) is Function of (the Sorts of B)#.<*I*>, (the Sorts of B).I &
    Den(o4,B) is Function of (the Sorts of B)#.<*I,I*>, (the Sorts of B).I &
    Args(o3,B) = (the Sorts of B)#.<*I*> &
    Args(o4,B) = (the Sorts of B)#.<*I,I*> by Th7;
A9: dom the Sorts of B = the carrier of S by PARTFUN1:def 2;
    <*I*> is Element of (the carrier of S)* by FINSEQ_1:def 11;
    then
A10: Args(o3,B) = product ((the Sorts of B)*<*I*>) by A8,FINSEQ_2:def 5
    .= product <*(the Sorts of B).I*> by A9,FINSEQ_2:34;
    <*I,I*> is Element of (the carrier of S)* by FINSEQ_1:def 11;
    then
A11: Args(o4,B) = product ((the Sorts of B)*<*I,I*>) by A8,FINSEQ_2:def 5
    .= product <*(the Sorts of B).I,(the Sorts of B).I*> by A9,FINSEQ_2:125;
A12: for i being Nat st P[i] holds P[i+1]
    proof let i be Nat;
      assume
A13:   P[i];
      then
A14:   <*i,1*> in Args(o4,B) by A6,A4,A11,FINSEQ_3:124;
      Den(o4,B).<*i,1*> = Den(o4,A).<*i,1*>
      by A13,A6,A4,A11,FINSEQ_3:124,EQUATION:19
      .= Den(In(o4,the carrier' of S),A).<*i,1*> by SUBSET_1:def 8
      .= i+1 by A1;
      hence
A15:   i+1 in (the Sorts of B).I by A14,A8,FUNCT_2:5;
      then
A16:   <*i+1*> in Args(o3,B) by A10,FINSEQ_3:123;
      Den(o3,B).<*i+1*> = Den(o3,A).<*i+1*> by A15,A10,FINSEQ_3:123,EQUATION:19
      .= Den(In(o3,the carrier' of S),A).<*i+1*> by SUBSET_1:def 8
      .= -(i+1) by A1;
      hence -(i+1) in (the Sorts of B).I by A16,A8,FUNCT_2:5;
    end;
A17: for i being Nat holds P[i] from NAT_1:sch 2(A7,A12);
    thus
A18: INT c= (the Sorts of B).I
    proof let x be Integer;
      x in INT by INT_1:def 2;
      then consider n being Nat such that
A19:   x = n or x = -n by INT_1:def 1;
      thus thesis by A17,A19;
    end;
    thus Den(In((the connectives of S).n, the carrier' of S), B).{} = 0 &
    Den(In((the connectives of S).(n+1), the carrier' of S), B).{} = 1
    by A5,A6,SUBSET_1:def 8;
    let i,j be Integer;
A20: i in INT & j in INT by INT_1:def 2;
    <*i*> in Args(o3,B) by A20,A18,A10,FINSEQ_3:123;
    then <*i*> in Args(In(o3,the carrier' of S),B) by SUBSET_1:def 8;
    hence
    Den(In((the connectives of S).(n+2), the carrier' of S), B).<*i*>
    = Den(In((the connectives of S).(n+2), the carrier' of S), A).<*i*>
    by EQUATION:19 .= -i by A1;
    <*i,j*> in Args(o4,B) by A11,A20,A18,FINSEQ_3:124;
    then <*i,j*> in Args(In(o4,the carrier' of S),B) by SUBSET_1:def 8;
    hence
    Den(In((the connectives of S).(n+3), the carrier' of S), B).<*i,j*>
    = Den(In((the connectives of S).(n+3), the carrier' of S), A).<*i,j*>
    by EQUATION:19 .= i+j by A1;
    n+6 <= len the connectives of S & 4 <= 10 by AOFA_A00:def 39;
    then n+4 <= len the connectives of S & n+5 <= len the connectives of S &
    1 <= 8 & 1 <= 9 by XXREAL_0:2;
    then n+4 in dom the connectives of S & n+5 in dom the connectives of S
    by FINSEQ_3:25;
    then reconsider o5 = (the connectives of S).(n+4),
    o6 = (the connectives of S).(n+5) as OperSymbol of S by FUNCT_1:102;
    o5 is_of_type <*I,I*>,I & o6 is_of_type <*I,I*>,I by AOFA_A00:53;
    then
A21: Args(o5,B) = (the Sorts of B)#.<*I,I*> &
    Args(o6,B) = (the Sorts of B)#.<*I,I*> by Th7;
    then <*i,j*> in Args(o5,B) by A8,A11,A20,A18,FINSEQ_3:124;
    then <*i,j*> in Args(In(o5,the carrier' of S),B) by SUBSET_1:def 8;
    hence
    Den(In((the connectives of S).(n+4), the carrier' of S), B).<*i,j*>
    = Den(In((the connectives of S).(n+4), the carrier' of S), A).<*i,j*>
    by EQUATION:19 .= i*j by A1;
    hereby assume
A22:   j <> 0;
      <*i,j*> in Args(o6,B) by A8,A11,A20,A18,A21,FINSEQ_3:124;
      then <*i,j*> in Args(In(o6,the carrier' of S),B) by SUBSET_1:def 8;
      hence
      Den(In((the connectives of S).(n+5), the carrier' of S), B).<*i,j*>
      = Den(In((the connectives of S).(n+5), the carrier' of S), A).<*i,j*>
      by EQUATION:19 .= i div j by A22,A1;
    end;
    n+6 <= len the connectives of S & 4 <= 10 by AOFA_A00:def 39;
    then n+6 in dom the connectives of S by FINSEQ_3:25;
    then reconsider o7 = (the connectives of S).(n+6) as OperSymbol of S
    by FUNCT_1:102;
    o7 is_of_type <*I,I*>,the bool-sort of S by AOFA_A00:53;
    then
    Args(o7,B) = (the Sorts of B)#.<*I,I*> by Th7;
    then <*i,j*> in Args(o7,B) by A8,A11,A20,A18,FINSEQ_3:124;
    then <*i,j*> in Args(In(o7,the carrier' of S),B) by SUBSET_1:def 8;
    hence
    Den(In((the connectives of S).(n+6), the carrier' of S), B).<*i,j*>
    = Den(In((the connectives of S).(n+6), the carrier' of S), A).<*i,j*>
    by EQUATION:19 .= IFGT(i,j,FALSE,TRUE) by A1;
  end;
end;

registration
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  let X be non-empty ManySortedSet of the carrier of S;
  cluster Free(S,X) -> integer for non-empty MSAlgebra over S;
  coherence
  proof let F be non-empty MSAlgebra over S;
    assume
A1: F = Free(S,X);
    set A = the (4,1) integer bool-correct non-empty MSAlgebra over S;
    reconsider G = FreeGen X as GeneratorSet of F by A1,MSAFREE3:31;
    set f = the ManySortedFunction of G, the Sorts of A;
    FreeGen X is free & F = FreeMSA X by A1,MSAFREE3:31;
    then consider h being ManySortedFunction of F,A such that
A2: h is_homomorphism F,A & h||G = f by MSAFREE:def 5;
    reconsider C = Image h as image of F by A2,MSAFREE4:def 4;
    take C; thus C is (4,1) integer bool-correct MSAlgebra over S;
  end;
end;

theorem Th8:
  for S being non empty non void ManySortedSign
  for A1,A2,B1 being MSAlgebra over S, B2 being non-empty MSAlgebra over S
  st the MSAlgebra of A1 = the MSAlgebra of A2 &
  the MSAlgebra of B1 = the MSAlgebra of B2
  for h1 being ManySortedFunction of A1,B1
  for h2 being ManySortedFunction of A2,B2 st h1 = h2 &
  h1 is_epimorphism A1,B1 holds h2 is_epimorphism A2,B2
  by MSAFREE4:30;

registration
  let S be (4,1) integer bool-correct non empty non void BoolSignature;
  let X be non-empty ManySortedSet of the carrier of S;
  cluster vf-free integer for all_vars_including inheriting_operations
  free_in_itself (X,S)-terms non-empty VarMSAlgebra over S;
  existence
  proof
    set A = Free(S,X);
    consider V being ManySortedMSSet of the Sorts of A,the Sorts of A,
    B being all_vars_including inheriting_operations free_in_itself
    (X,S)-terms VarMSAlgebra over S such that
A1: B = VarMSAlgebra(#the Sorts of A, the Charact of A, V#) &
    B is vf-free by AOFA_A00:39;
    take B; thus B is vf-free by A1;
    consider C being image of A such that
A2: C is (4,1) integer bool-correct MSAlgebra over S by Def1;
    consider h being ManySortedFunction of A,C such that
A3: h is_epimorphism A,C by MSAFREE4:def 5;
    reconsider g = h as ManySortedFunction of B,C by A1;
    the MSAlgebra of C = the MSAlgebra of C;
    then reconsider D = C as image of B by A1,A3,Th8,MSAFREE4:def 5;
    take D; thus thesis by A2;
  end;
end;

definition
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations (X,S)-terms
  MSAlgebra over S;
  func FreeGen T -> non-empty GeneratorSet of T equals FreeGen X;
  coherence by MSAFREE4:45;
end;

registration
  let S be non empty non void ManySortedSign;
  let X0 be countable non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations free_in_itself
  (X0,S)-terms MSAlgebra over S;
  cluster FreeGen T -> (Equations(S, T))-free non-empty;
  coherence by MSAFREE4:75;
end;

definition
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations (X,S)-terms
  MSAlgebra over S;
  let G be GeneratorSet of T;
  attr G is basic means: Def3: FreeGen T c= G;
  let s be SortSymbol of S;
  let x be Element of G.s;
  attr x is pure means: Def4: x in (FreeGen T).s;
end;

registration
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations (X,S)-terms
  MSAlgebra over S;
  cluster FreeGen T -> basic;
  coherence;
end;

registration
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations (X,S)-terms
  MSAlgebra over S;
  cluster basic for non-empty GeneratorSet of T;
  existence
  proof
    reconsider G = FreeGen X as non-empty GeneratorSet of T by MSAFREE4:45;
    take G; thus FreeGen T c= G;
  end;
end;

registration
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations (X,S)-terms
  MSAlgebra over S;
  let G be basic GeneratorSet of T;
  let s be SortSymbol of S;
  cluster pure for Element of G.s;
  existence
  proof
    set x = the Element of (FreeGen T).s;
    x in (FreeGen T).s & (FreeGen T).s c= G.s by Def3,PBOOLE:def 2;
    then reconsider x as Element of G.s;
    take x; thus x in (FreeGen T).s;
  end;
end;

theorem
  for S being non empty non void ManySortedSign
  for X being non-empty ManySortedSet of the carrier of S
  for T being all_vars_including inheriting_operations (X,S)-terms
  MSAlgebra over S
  for G being basic GeneratorSet of T
  for s being SortSymbol of S
  for a being set holds a is pure Element of G.s iff a in (FreeGen T).s
  proof
    let S be non empty non void ManySortedSign;
    let X be non-empty ManySortedSet of the carrier of S;
    let T be all_vars_including inheriting_operations (X,S)-terms
    MSAlgebra over S;
    let G be basic GeneratorSet of T;
    let s be SortSymbol of S;
    let a be set;
    (FreeGen T).s c= G.s by Def3,PBOOLE:def 2;
    hence thesis by Def4;
  end;

definition
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations free_in_itself (X,S)-terms
  MSAlgebra over S;
  let G be GeneratorSystem over S,X,T;
  attr G is basic means: Def5: the generators of G is basic;
end;

registration
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations free_in_itself (X,S)-terms
  MSAlgebra over S;
  cluster basic for GeneratorSystem over S,X,T;
  existence
  proof
    set Y = the basic non-empty GeneratorSet of T;
    set SV = the ManySortedFunction of Y, FreeGen X;
    set ST = the ManySortedMSSet of Y, the carrier of S;
    take G = GeneratorSystem(#Y,SV,ST#);
    thus the generators of G is basic;
  end;
end;

registration
  let S be non empty non void ManySortedSign;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations free_in_itself (X,S)-terms
  MSAlgebra over S;
  let G be basic GeneratorSystem over S,X,T;
  cluster the generators of G -> basic;
  coherence by Def5;
end;

reserve
  S for (4,1) integer bool-correct non empty non void BoolSignature,
  X for non-empty ManySortedSet of the carrier of S,
  T for vf-free integer all_vars_including inheriting_operations free_in_itself
  (X,S)-terms VarMSAlgebra over S,
  C for (4,1) integer bool-correct non-empty image of T,
  G for basic GeneratorSystem over S,X,T,
  A for IfWhileAlgebra of the generators of G,
  I for integer SortSymbol of S,
  x,y,z,m for pure (Element of (the generators of G).I),
  b for pure (Element of (the generators of G).the bool-sort of S),
  t,t1,t2 for Element of T,I,
  P for Algorithm of A,
  s,s1,s2 for Element of C-States(the generators of G);

definition
  let S be bool-correct non empty non void BoolSignature;
  let A be non-empty MSAlgebra over S;
  func \falseA -> Element of A, the bool-sort of S equals \not\trueA;
  coherence;
end;

reserve
  f for ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G, b);

theorem Th10:
  \falseC = FALSE
  proof
    \trueC = TRUE by AOFA_A00:def 32;
    hence \falseC = 'not' TRUE by AOFA_A00:def 32 .= FALSE;
  end;

definition
  let S be bool-correct non empty non void BoolSignature;
  let X be non-empty ManySortedSet of the carrier of S;
  let T be all_vars_including inheriting_operations free_in_itself (X,S)-terms
  MSAlgebra over S;
  let G be GeneratorSystem over S,X,T;
  let b be Element of (the generators of G).the bool-sort of S;
  let C be image of T;
  let A be preIfWhileAlgebra;
  let f be ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G, b);
  let s be Element of C-States(the generators of G);
  let P be Algorithm of A;
  redefine func f.(s,P) -> Element of C-States(the generators of G);  :: redefines . (BINOP_1, definition)
  coherence
  proof
    thus f.(s,P) is Element of C-States(the generators of G);
  end;
end;

definition
  let S be non empty non void ManySortedSign;
  let T be non-empty MSAlgebra over S;
  let G be non-empty GeneratorSet of T;
  let s be SortSymbol of S;
  let x be Element of G.s;
  func @x -> Element of T,s equals x;
  coherence
  proof
    G.s c= (the Sorts of T).s & x in G.s by PBOOLE:def 18,def 2;
    hence x is Element of (the Sorts of T).s;
  end;
end;

definition
  let S,X,T,G,A,b,I,t1,t2;
  func b leq(t1, t2, A) -> Algorithm of A equals b:=(leq(t1,t2),A);
  coherence;
  func b gt(t1, t2, A) -> Algorithm of A equals b:=(\not(leq(t1,t2)),A);
  coherence;
end;

definition
  let S,X,T,I;
  func \2(T,I) -> Element of T,I equals \1(T,I)+\1(T,I);
  coherence;
end;

definition
  let S,X,T,G,A,b,I,t;
  func t is_odd(b,A) -> Algorithm of A equals b gt(t mod \2(T,I),\0(T,I),A);
  coherence;
  func t is_even(b,A) -> Algorithm of A equals b leq(t mod \2(T,I),\0(T,I),A);
  coherence;
end;

registration
  let S,X,T,G,C,I,s;
  let x be Element of (the generators of G).I;
  cluster s.I.x -> integer;
  coherence
  proof
    (the Sorts of C).I = INT & s is ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48,55;
    then s.I is Function of (the generators of G).I, INT by PBOOLE:def 15;
    then s.I.x in INT by FUNCT_2:5;
    hence thesis;
  end;
end;

registration
  let S,X,T,G,C,I,s,t;
  cluster t value_at(C,s) -> integer;
  coherence
  proof
    (the Sorts of C).I = INT by AOFA_A00:55;
    hence thesis;
  end;
end;

reserve u for ManySortedFunction of FreeGen T, the Sorts of C;

registration
  let S,X,T,C,I,u,t;
  cluster t value_at(C,u) -> integer;
  coherence
  proof
    (the Sorts of C).I = INT by AOFA_A00:55;
    hence thesis;
  end;
end;

registration
  let S,X,T,G,C,s;
  let t be Element of T, the bool-sort of S;
  cluster t value_at(C,s) -> boolean;
  coherence
  proof
    (the Sorts of C).the bool-sort of S = BOOLEAN by AOFA_A00:def 32;
    hence thesis;
  end;
end;

registration
  let S,X,T,C,u;
  let t be Element of T, the bool-sort of S;
  cluster t value_at(C,u) -> boolean;
  coherence
  proof
    (the Sorts of C).the bool-sort of S = BOOLEAN by AOFA_A00:def 32;
    hence thesis;
  end;
end;

theorem Th11:
  for o being OperSymbol of S st
  o = In((the connectives of S).1, the carrier' of S)
  holds o = (the connectives of S).1 &
  the_arity_of o = {} & the_result_sort_of o = the bool-sort of S
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).1, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 1 <= len the connectives of S by XXREAL_0:2;
    then 1 in dom the connectives of S by FINSEQ_3:25;
    hence o = (the connectives of S).1 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type {}, the bool-sort of S by AOFA_A00:def 31;
    hence the_arity_of o = {} & the_result_sort_of o = the bool-sort of S;
  end;

theorem Th12:
  for o being OperSymbol of S st
  o = In((the connectives of S).2, the carrier' of S)
  holds o = (the connectives of S).2 &
  the_arity_of o = <*the bool-sort of S*> &
  the_result_sort_of o = the bool-sort of S
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).2, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 2 <= len the connectives of S by XXREAL_0:2;
    then 2 in dom the connectives of S by FINSEQ_3:25;
    hence o = (the connectives of S).2 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*the bool-sort of S*>, the bool-sort of S
    by AOFA_A00:def 31;
    hence the_arity_of o = <*the bool-sort of S*> &
    the_result_sort_of o = the bool-sort of S;
  end;

theorem Th13:
  for o being OperSymbol of S st
  o = In((the connectives of S).3, the carrier' of S)
  holds o = (the connectives of S).3 &
  the_arity_of o = <*the bool-sort of S, the bool-sort of S*> &
  the_result_sort_of o = the bool-sort of S
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).3, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 3 <= len the connectives of S by XXREAL_0:2;
    then 3 in dom the connectives of S by FINSEQ_3:25;
    hence o = (the connectives of S).3 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*the bool-sort of S, the bool-sort of S*>,
    the bool-sort of S by AOFA_A00:def 31;
    hence the_arity_of o = <*the bool-sort of S, the bool-sort of S*> &
    the_result_sort_of o = the bool-sort of S;
  end;

theorem Th14:
  for o being OperSymbol of S st
  o = In((the connectives of S).4, the carrier' of S)
  holds the_arity_of o = {} & the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).4, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 4 <= len the connectives of S by XXREAL_0:2;
    then 4 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).4 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type {}, I by AOFA_A00:53;
    hence the_arity_of o = {} & the_result_sort_of o = I;
  end;

theorem Th15:
  for o being OperSymbol of S st
  o = In((the connectives of S).5, the carrier' of S)
  holds the_arity_of o = {} & the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).5, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 5 <= len the connectives of S by XXREAL_0:2;
    then 5 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).5 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type {}, I by AOFA_A00:53;
    hence the_arity_of o = {} & the_result_sort_of o = I;
  end;

theorem Th16:
  for o being OperSymbol of S st
  o = In((the connectives of S).6, the carrier' of S)
  holds the_arity_of o = <*I*> & the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).6, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 6 <= len the connectives of S by XXREAL_0:2;
    then 6 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).6 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*I*>, I by AOFA_A00:53;
    hence the_arity_of o = <*I*> & the_result_sort_of o = I;
  end;

theorem Th17:
  for o being OperSymbol of S st
  o = In((the connectives of S).7, the carrier' of S)
  holds the_arity_of o = <*I,I*> & the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).7, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 7 <= len the connectives of S by XXREAL_0:2;
    then 7 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).7 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*I,I*>, I by AOFA_A00:53;
    hence the_arity_of o = <*I,I*> & the_result_sort_of o = I;
  end;

theorem Th18:
  for o being OperSymbol of S st
  o = In((the connectives of S).8, the carrier' of S)
  holds the_arity_of o = <*I,I*> & the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).8, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 8 <= len the connectives of S by XXREAL_0:2;
    then 8 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).8 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*I,I*>, I by AOFA_A00:53;
    hence the_arity_of o = <*I,I*> & the_result_sort_of o = I;
  end;

theorem Th19:
  for o being OperSymbol of S st
  o = In((the connectives of S).9, the carrier' of S)
  holds the_arity_of o = <*I,I*> & the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).9, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 9 <= len the connectives of S by XXREAL_0:2;
    then 9 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).9 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*I,I*>, I by AOFA_A00:53;
    hence the_arity_of o = <*I,I*> & the_result_sort_of o = I;
  end;

theorem Th20:
  for o being OperSymbol of S st
  o = In((the connectives of S).10, the carrier' of S)
  holds the_arity_of o = <*I,I*> & the_result_sort_of o = the bool-sort of S
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).10, the carrier' of S);
    4+6 <= len the connectives of S by AOFA_A00:def 39;
    then 10 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).10 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*I,I*>, the bool-sort of S by AOFA_A00:53;
    hence the_arity_of o = <*I,I*> & the_result_sort_of o = the bool-sort of S;
  end;

theorem Th21:
  for S being non empty non void ManySortedSign
  for o being OperSymbol of S st the_arity_of o = {}
  for A being MSAlgebra over S holds Args(o,A) = {{}}
  proof
    let S be non empty non void ManySortedSign;
    let o be OperSymbol of S;
    assume A1: the_arity_of o = {};
    let A be MSAlgebra over S;
    thus Args(o,A) = product ((the Sorts of A)*the_arity_of o) by PRALG_2:3
    .= {{}} by A1,CARD_3:10;
  end;

theorem Th22:
  for S being non empty non void ManySortedSign
  for a being SortSymbol of S
  for o being OperSymbol of S st the_arity_of o = <*a*>
  for A being MSAlgebra over S holds
  Args(o,A) = product <*(the Sorts of A).a*>
  proof
    let S be non empty non void ManySortedSign;
    let a be SortSymbol of S;
    let o be OperSymbol of S;
    assume A1: the_arity_of o = <*a*>;
    let A be MSAlgebra over S;
A2: dom the Sorts of A = the carrier of S by PARTFUN1:def 2;
    thus Args(o,A) = product ((the Sorts of A)*the_arity_of o) by PRALG_2:3
    .= product <*(the Sorts of A).a*> by A1,A2,FINSEQ_2:34;
  end;

theorem Th23:
  for S being non empty non void ManySortedSign
  for a,b being SortSymbol of S
  for o being OperSymbol of S st the_arity_of o = <*a,b*>
  for A being MSAlgebra over S holds
  Args(o,A) = product <*(the Sorts of A).a, (the Sorts of A).b*>
  proof
    let S be non empty non void ManySortedSign;
    let a,b be SortSymbol of S;
    let o be OperSymbol of S;
    assume A1: the_arity_of o = <*a,b*>;
    let A be MSAlgebra over S;
A2: dom the Sorts of A = the carrier of S by PARTFUN1:def 2;
    thus Args(o,A) = product ((the Sorts of A)*the_arity_of o) by PRALG_2:3
    .= product <*(the Sorts of A).a, (the Sorts of A).b*>
    by A1,A2,FINSEQ_2:125;
  end;

theorem Th24:
  for S being non empty non void ManySortedSign
  for a,b,c being SortSymbol of S
  for o being OperSymbol of S st the_arity_of o = <*a,b,c*>
  for A being MSAlgebra over S holds
  Args(o,A) = product <*(the Sorts of A).a, (the Sorts of A).b,
  (the Sorts of A).c*>
  proof
    let S be non empty non void ManySortedSign;
    let a,b,c be SortSymbol of S;
    let o be OperSymbol of S;
    assume A1: the_arity_of o = <*a,b,c*>;
    let A be MSAlgebra over S;
A2: dom the Sorts of A = the carrier of S by PARTFUN1:def 2;
    thus Args(o,A) = product ((the Sorts of A)*the_arity_of o) by PRALG_2:3
    .= product <*(the Sorts of A).a, (the Sorts of A).b, (the Sorts of A).c*>
    by A1,A2,FINSEQ_2:126;
  end;

theorem Th25:
  for S being non empty non void ManySortedSign
  for A,B being non-empty MSAlgebra over S
  for s being SortSymbol of S
  for a being Element of A,s
  for h being ManySortedFunction of A,B
  for o being OperSymbol of S st the_arity_of o = <*s*>
  for p being Element of Args(o,A)
  st p = <*a*> holds h#p = <*h.s.a*>
  proof
    let S be non empty non void ManySortedSign;
    let A,B be non-empty MSAlgebra over S;
    let s be SortSymbol of S;
    let a be Element of A,s;
    let h be ManySortedFunction of A,B;
    let o be OperSymbol of S such that
A1: the_arity_of o = <*s*>;
    let p be Element of Args(o,A);
    assume A2: p = <*a*>;
A3: dom p = dom the_arity_of o & dom(h#p) = dom the_arity_of o by MSUALG_3:6;
    then
A4: dom(h#p) = Seg 1 by A2,FINSEQ_1:38;
    then
A5: len p = 1 & len (h#p) = 1 by A3,FINSEQ_1:def 3;
    1 in Seg 1;
    then (h#p).1 = h.((the_arity_of o)/.1).(p.1) by A3,A4,MSUALG_3:def 6
    .= h.s.(p.1) by A1,FINSEQ_4:16 .= h.s.a by A2;
    hence h#p = <*h.s.a*> by A5,FINSEQ_1:40;
  end;

theorem Th26:
  for S being non empty non void ManySortedSign
  for A,B being non-empty MSAlgebra over S
  for s1,s2 being SortSymbol of S
  for a being Element of A,s1, b being Element of A,s2
  for h being ManySortedFunction of A,B
  for o being OperSymbol of S st the_arity_of o = <*s1,s2*>
  for p being Element of Args(o,A)
  st p = <*a,b*> holds h#p = <*h.s1.a, h.s2.b*>
  proof
    let S be non empty non void ManySortedSign;
    let A,B be non-empty MSAlgebra over S;
    let s1,s2 be SortSymbol of S;
    let a be Element of A,s1, b be Element of A,s2;
    let h be ManySortedFunction of A,B;
    let o be OperSymbol of S such that
A1: the_arity_of o = <*s1,s2*>;
    let p be Element of Args(o,A);
    assume A2: p = <*a,b*>;
A3: dom p = dom the_arity_of o & dom(h#p) = dom the_arity_of o by MSUALG_3:6;
    then
A4: dom(h#p) = Seg 2 by A2,FINSEQ_1:89;
    then
A5: len <*a,b*> = 2 & len (h#p) = 2 by A2,A3,FINSEQ_1:def 3;
    1 in Seg 2;
    then
A6: (h#p).1 = h.((the_arity_of o)/.1).(p.1) by A3,A4,MSUALG_3:def 6
    .= h.s1.(p.1) by A1,FINSEQ_4:17 .= h.s1.a by A2;
    2 in Seg 2;
    then (h#p).2 = h.((the_arity_of o)/.2).(p.2) by A3,A4,MSUALG_3:def 6
    .= h.s2.(p.2) by A1,FINSEQ_4:17 .= h.s2.b by A2;
    hence h#p = <*h.s1.a, h.s2.b*> by A5,A6,FINSEQ_1:44;
  end;

theorem Th27:
  for S being non empty non void ManySortedSign
  for A,B being non-empty MSAlgebra over S
  for s1,s2,s3 being SortSymbol of S
  for a being Element of A,s1, b being Element of A,s2, c being Element of A,s3
  for h being ManySortedFunction of A,B
  for o being OperSymbol of S st the_arity_of o = <*s1,s2,s3*>
  for p being Element of Args(o,A)
  st p = <*a,b,c*> holds h#p = <*h.s1.a,h.s2.b,h.s3.c*>
  proof
    let S be non empty non void ManySortedSign;
    let A,B be non-empty MSAlgebra over S;
    let s1,s2,s3 be SortSymbol of S;
    let a be Element of A,s1;
    let b be Element of A,s2;
    let c be Element of A,s3;
    let h be ManySortedFunction of A,B;
    let o be OperSymbol of S such that
A1: the_arity_of o = <*s1,s2,s3*>;
    let p be Element of Args(o,A);
    assume A2: p = <*a,b,c*>;
A3: dom p = dom the_arity_of o & dom(h#p) = dom the_arity_of o by MSUALG_3:6;
    then
A4: dom(h#p) = Seg 3 by A2,FINSEQ_1:89;
    then
A5: len p = 3 & len (h#p) = 3 by A3,FINSEQ_1:def 3;
    1 in Seg 3;
    then
A6: (h#p).1 = h.((the_arity_of o)/.1).(p.1) by A3,A4,MSUALG_3:def 6
    .= h.s1.(p.1) by A1,FINSEQ_4:18 .= h.s1.a by A2;
    2 in Seg 3;
    then
A7: (h#p).2 = h.((the_arity_of o)/.2).(p.2) by A3,A4,MSUALG_3:def 6
    .= h.s2.(p.2) by A1,FINSEQ_4:18 .= h.s2.b by A2;
    3 in Seg 3;
    then (h#p).3 = h.((the_arity_of o)/.3).(p.3) by A3,A4,MSUALG_3:def 6
    .= h.s3.(p.3) by A1,FINSEQ_4:18 .= h.s3.c by A2;
    hence h#p = <*h.s1.a,h.s2.b,h.s3.c*> by A5,A6,A7,FINSEQ_1:45;
  end;

theorem Th28:
  for h being ManySortedFunction of T,C st h is_homomorphism T,C
  for a being SortSymbol of S
  for t being Element of T,a
  holds t value_at(C,h||FreeGen T) = h.a.t
  proof
    let h be ManySortedFunction of T,C;
    assume A1: h is_homomorphism T,C;
    set s = h||FreeGen T;
    let a be SortSymbol of S;
    let t be Element of T,a;
    FreeGen T is_transformable_to the Sorts of C by MSAFREE4:21;
    then
A2: doms s = FreeGen T by MSSUBFAM:17;
    thus t value_at(C,s) = h.a.t by A2,A1,AOFA_A00:def 21;
  end;

theorem Th29:
  for h being ManySortedFunction of T,C
  st h is_homomorphism T,C & s = h||the generators of G
  for a being SortSymbol of S
  for t being Element of T,a
  holds t value_at(C,s) = h.a.t
  proof
    let h be ManySortedFunction of T,C;
    assume A1: h is_homomorphism T,C;
    assume A2: s = h||the generators of G;
    let a be SortSymbol of S;
    let t be Element of T,a;
A3: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    the generators of G is_transformable_to the Sorts of C by MSAFREE4:21;
    then
A4: doms s = the generators of G by A3,MSSUBFAM:17;
    thus t value_at(C,s) = h.a.t by A4,A1,A2,AOFA_A00:def 21;
  end;

theorem Th30:
  \trueT value_at(C,s) = TRUE
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
    doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A3: f is_homomorphism T,C & Q = doms s & s = f||Q &
    \trueT value_at(C,s) = f.(the bool-sort of S).\trueT by A2,AOFA_A00:def 21;
    set o = In((the connectives of S).1, the carrier' of S);
A4: o = (the connectives of S).1 &
    the_arity_of o = {} & the_result_sort_of o = the bool-sort of S by Th11;
    then
    Args(o,T) = {{}} by Th21;
    then reconsider p = {} as Element of Args(o,T) by TARSKI:def 1;
    dom(f#p) = {} & dom p = {} by A4,MSUALG_3:6;
    then
A5: p = f#p;
    f.(the bool-sort of S).\trueT
    = \trueC by A5,A3,A4
    .= TRUE by AOFA_A00:def 32;
    hence thesis by A3;
  end;

theorem Th31:
  for t being Element of T, the bool-sort of S holds
  \nott value_at(C,s) = \not(t value_at(C,s))
  proof
    let t be Element of T, the bool-sort of S;
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: (\nott) value_at(C,s) = f.(the bool-sort of S).(\nott) by A1,Th29;
    set o = In((the connectives of S).2, the carrier' of S);
A3: the_arity_of o = <*the bool-sort of S*> &
    the_result_sort_of o = the bool-sort of S by Th12;
    then Args(o,T) = product <*(the Sorts of T).the bool-sort of S*> by Th22;
    then reconsider p = <*t*> as Element of Args(o,T) by FINSEQ_3:123;
    thus (\nott) value_at(C,s) = Den(o,C).(f#p) by A1,A2,A3
    .= Den(o,C).<*f.(the bool-sort of S).t*> by A3,Th25
    .= \not(t value_at(C,s)) by A1,Th29;
  end;

theorem
  for a being boolean object
  for t being Element of T, the bool-sort of S holds
  \nott value_at(C,s) = 'not' a iff t value_at(C,s) = a
  proof
    let a be boolean object;
    let t be Element of T, the bool-sort of S;
    hereby
      assume \nott value_at(C,s) = 'not' a;
      then \not(t value_at(C,s)) = 'not' a by Th31;
      then 'not' (t value_at(C,s)) = 'not' a by AOFA_A00:def 32;
      hence t value_at(C,s) = a;
    end;
    assume A1: t value_at(C,s) = a;
    \not(t value_at(C,s)) = \nott value_at(C,s) by Th31;
    hence \nott value_at(C,s) = 'not' a by A1,AOFA_A00:def 32;
  end;

theorem Th33:
  for a being Element of C, the bool-sort of S
  for x being boolean object holds
  \nota = 'not' x iff a = x
  proof
    let a be Element of C, the bool-sort of S;
    a in (the Sorts of C).the bool-sort of S;
    then a in BOOLEAN by AOFA_A00:def 32;
    then reconsider b = a as boolean object;
    let x be boolean object;
    hereby
      assume \nota = 'not' x;
      then 'not' b = 'not' x by AOFA_A00:def 32;
      hence a = x;
    end;
    assume a = x;
    hence \nota = 'not' x by AOFA_A00:def 32;
  end;

theorem
  (\falseT) value_at(C,s) = FALSE
  proof
    thus (\falseT) value_at(C,s) = \not((\trueT) value_at(C,s)) by Th31
    .= 'not' ((\trueT) value_at(C,s)) by AOFA_A00:def 32 .= 'not' TRUE by Th30
    .= FALSE;
end;

theorem
  for t1,t2 being Element of T, the bool-sort of S holds
  t1\andt2 value_at(C,s) = (t1 value_at(C,s))\and(t2 value_at(C,s))
  proof
    let t1,t2 be Element of T, the bool-sort of S;
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: t1 value_at(C,s) = f.(the bool-sort of S).t1 by A1,Th29;
A3: t1\andt2 value_at(C,s) = f.(the bool-sort of S).(t1\andt2) by A1,Th29;
    set o = In((the connectives of S).3, the carrier' of S);
A4: the_arity_of o = <*the bool-sort of S,the bool-sort of S*> &
    the_result_sort_of o = the bool-sort of S by Th13;
    then Args(o,T) = product <*(the Sorts of T).the bool-sort of S,
    (the Sorts of T).the bool-sort of S*> by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1\andt2) value_at(C,s) = Den(o,C).(f#p)
    by A1,A3,A4
    .= Den(o,C).<*f.(the bool-sort of S).t1,f.(the bool-sort of S).t2*>
    by A4,Th26
    .= (t1 value_at(C,s))\and(t2 value_at(C,s)) by A2,A1,Th29;
  end;

theorem Th36:
  \0(T,I) value_at(C,s) = 0
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
    doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A3: f is_homomorphism T,C & Q = doms s & s = f||Q &
    \0(T,I) value_at(C,s) = f.I.\0(T,I) by A2,AOFA_A00:def 21;
    set o = In((the connectives of S).4, the carrier' of S);
A4: the_arity_of o = {} & the_result_sort_of o = I by Th14;
    then
    Args(o,T) = {{}} by Th21;
    then reconsider p = {} as Element of Args(o,T) by TARSKI:def 1;
    dom(f#p) = {} & dom p = {} by A4,MSUALG_3:6;
    then
A5: p = f#p;
    f.I.\0(T,I)
    = \0(C,I) by A5,A3,A4 .= 0 by AOFA_A00:55;
    hence thesis by A3;
  end;

theorem Th37:
  \1(T,I) value_at(C,s) = 1
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
    doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A3: f is_homomorphism T,C & Q = doms s & s = f||Q &
    \1(T,I) value_at(C,s) = f.I.\1(T,I) by A2,AOFA_A00:def 21;
    set o = In((the connectives of S).5, the carrier' of S);
A4: the_arity_of o = {} & the_result_sort_of o = I by Th15;
    then
    Args(o,T) = {{}} by Th21;
    then reconsider p = {} as Element of Args(o,T) by TARSKI:def 1;
    dom(f#p) = {} & dom p = {} by A4,MSUALG_3:6;
    then
A5: p = f#p;
    f.I.\1(T,I)
    = \1(C,I) by A5,A3,A4 .= 1 by AOFA_A00:55;
    hence thesis by A3;
  end;

theorem Th38:
  (-t) value_at(C,s) = -(t value_at(C,s))
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A3: doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A4: f1 is_homomorphism T,C & Q1 = doms s & s = f1||Q1 &
    t value_at(C,s) = f1.I.t by A2,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A5: f2 is_homomorphism T,C & Q2 = doms s & s = f2||Q2 &
    (-t) value_at(C,s) = f2.I.(-t) by A2,A3,AOFA_A00:def 21;
    set o = In((the connectives of S).6, the carrier' of S);
A6: the_arity_of o = <*I*> & the_result_sort_of o = I by Th16;
    then Args(o,T) = product <*(the Sorts of T).I*> by Th22;
    then reconsider p = <*t*> as Element of Args(o,T) by FINSEQ_3:123;
    thus (-t) value_at(C,s) = Den(o,C).(f2#p) by A5,A6
    .= Den(o,C).<*f2.I.t*> by A6,Th25
    .= -(t value_at(C,s)) by A4,A5,EXTENS_1:19;
  end;

theorem Th39:
  (t1+t2) value_at(C,s) = (t1 value_at(C,s))+(t2 value_at(C,s))
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A3: doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A4: f1 is_homomorphism T,C & Q1 = doms s & s = f1||Q1 &
    t1 value_at(C,s) = f1.I.t1 by A2,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A5: f2 is_homomorphism T,C & Q2 = doms s & s = f2||Q2 &
    t2 value_at(C,s) = f2.I.t2 by A2,A3,AOFA_A00:def 21;
    consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A6: f is_homomorphism T,C & Q = doms s & s = f||Q &
    (t1+t2) value_at(C,s) = f.I.(t1+t2) by A2,A3,AOFA_A00:def 21;
A7: f = f1 & f = f2 by A4,A5,A6,EXTENS_1:19;
    set o = In((the connectives of S).7, the carrier' of S);
A8: the_arity_of o = <*I,I*> & the_result_sort_of o = I by Th17;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1+t2) value_at(C,s) = Den(o,C).(f#p) by A6,A8
    .= (t1 value_at(C,s))+(t2 value_at(C,s)) by A4,A5,A7,A8,Th26;
  end;

theorem Th40:
  \2(T,I) value_at (C,s) = 2
  proof
A1: \1(T,I) value_at(C,s) = 1 by Th37;
    thus \2(T,I) value_at(C,s)
    = (\1(T,I) value_at(C,s))+(\1(T,I) value_at(C,s)) by Th39
    .= 2 by A1,AOFA_A00:55;
  end;

theorem Th41:
  (t1-t2) value_at(C,s) = (t1 value_at(C,s))-(t2 value_at(C,s))
  proof
    thus (t1-t2) value_at(C,s) = (t1 value_at(C,s))+((-t2) value_at(C,s))
    by Th39
    .= (t1 value_at(C,s))-(t2 value_at(C,s)) by Th38;
  end;

theorem Th42:
  (t1*t2) value_at(C,s) = (t1 value_at(C,s))*(t2 value_at(C,s))
  proof
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: t2 value_at(C,s) = f.I.t2 by A1,Th29;
A3: (t1*t2) value_at(C,s) = f.I.(t1*t2) by A1,Th29;
    set o = In((the connectives of S).8, the carrier' of S);
A4: the_arity_of o = <*I,I*> & the_result_sort_of o = I by Th18;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1*t2) value_at(C,s) = Den(o,C).(f#p) by A1,A3,A4
    .= Den(o,C).<*f.I.t1,f.I.t2*> by A4,Th26
    .= (t1 value_at(C,s))*(t2 value_at(C,s)) by A1,A2,Th29;
  end;

theorem Th43:
  (t1 div t2) value_at(C,s) = (t1 value_at(C,s))div(t2 value_at(C,s))
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A3: doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A4: f1 is_homomorphism T,C & Q1 = doms s & s = f1||Q1 &
    t1 value_at(C,s) = f1.I.t1 by A2,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A5: f2 is_homomorphism T,C & Q2 = doms s & s = f2||Q2 &
    t2 value_at(C,s) = f2.I.t2 by A2,A3,AOFA_A00:def 21;
    consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A6: f is_homomorphism T,C & Q = doms s & s = f||Q &
    (t1 div t2) value_at(C,s) = f.I.(t1 div t2) by A2,A3,AOFA_A00:def 21;
A7: f = f1 & f = f2 by A4,A5,A6,EXTENS_1:19;
    set o = In((the connectives of S).9, the carrier' of S);
A8: the_arity_of o = <*I,I*> & the_result_sort_of o = I by Th19;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1 div t2) value_at(C,s) = Den(o,C).(f#p) by A6,A8
    .= (t1 value_at(C,s))div(t2 value_at(C,s)) by A4,A5,A7,A8,Th26;
  end;

theorem Th44:
  (t1 mod t2) value_at(C,s) = (t1 value_at(C,s)) mod (t2 value_at(C,s))
  proof
    thus (t1 mod t2) value_at(C,s) = (t1-(t1 div t2)*t2) value_at(C,s)
    .= (t1 value_at(C,s))-(((t1 div t2)*t2) value_at(C,s)) by Th41
    .= (t1 value_at(C,s))-(((t1 div t2) value_at(C,s))*(t2 value_at(C,s)))
    by Th42
    .= (t1 value_at(C,s)) mod (t2 value_at(C,s)) by Th43;
  end;

theorem Th45:
  leq(t1,t2) value_at(C,s) = leq(t1 value_at(C,s), t2 value_at(C,s))
  proof
A1: s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A2: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
    the generators of G is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A3: doms s = the generators of G by A1,MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A4: f1 is_homomorphism T,C & Q1 = doms s & s = f1||Q1 &
    t1 value_at(C,s) = f1.I.t1 by A2,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A5: f2 is_homomorphism T,C & Q2 = doms s & s = f2||Q2 &
    t2 value_at(C,s) = f2.I.t2 by A2,A3,AOFA_A00:def 21;
    consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A6: f is_homomorphism T,C & Q = doms s & s = f||Q &
    leq(t1,t2) value_at(C,s) = f.(the bool-sort of S).leq(t1,t2)
    by A2,A3,AOFA_A00:def 21;
A7: f = f1 & f = f2 by A4,A5,A6,EXTENS_1:19;
    set o = In((the connectives of S).10, the carrier' of S);
A8: the_arity_of o = <*I,I*> & the_result_sort_of o = the bool-sort of S
    by Th20;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus leq(t1,t2) value_at(C,s) = Den(o,C).(f#p) by A6,A8
    .= leq(t1 value_at(C,s), t2 value_at(C,s)) by A4,A5,A7,A8,Th26;
  end;

theorem Th46:
  \trueT value_at(C,u) = TRUE
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
    doms u = FreeGen T by MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A2: f is_homomorphism T,C & Q = doms u & u = f||Q &
    \trueT value_at(C,u) = f.(the bool-sort of S).\trueT by A1,AOFA_A00:def 21;
    set o = In((the connectives of S).1, the carrier' of S);
A3: o = (the connectives of S).1 &
    the_arity_of o = {} & the_result_sort_of o = the bool-sort of S by Th11;
    then
    Args(o,T) = {{}} by Th21;
    then reconsider p = {} as Element of Args(o,T) by TARSKI:def 1;
    dom(f#p) = {} & dom p = {} by A3,MSUALG_3:6;
    then
A4: p = f#p;
    f.(the bool-sort of S).\trueT = \trueC by A4,A2,A3
    .= TRUE by AOFA_A00:def 32;
    hence thesis by A2;
  end;

theorem Th47:
  for t being Element of T, the bool-sort of S holds
  \nott value_at(C,u) = \not(t value_at(C,u))
  proof
    let t be Element of T, the bool-sort of S;
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: (\nott) value_at(C,u) = f.(the bool-sort of S).(\nott) by A1,Th28;
    set o = In((the connectives of S).2, the carrier' of S);
A3: the_arity_of o = <*the bool-sort of S*> &
    the_result_sort_of o = the bool-sort of S by Th12;
    then Args(o,T) = product <*(the Sorts of T).the bool-sort of S*> by Th22;
    then reconsider p = <*t*> as Element of Args(o,T) by FINSEQ_3:123;
    thus (\nott) value_at(C,u) = Den(o,C).(f#p) by A1,A2,A3
    .= Den(o,C).<*f.(the bool-sort of S).t*> by A3,Th25
    .= \not(t value_at(C,u)) by A1,Th28;
  end;

theorem
  for a being boolean object
  for t being Element of T, the bool-sort of S holds
  \nott value_at(C,u) = 'not' a iff t value_at(C,u) = a
  proof
    let a be boolean object;
    let t be Element of T, the bool-sort of S;
    hereby
      assume \nott value_at(C,u) = 'not' a;
      then \not(t value_at(C,u)) = 'not' a by Th47;
      then 'not' (t value_at(C,u)) = 'not' a by AOFA_A00:def 32;
      hence t value_at(C,u) = a;
    end;
    assume A1: t value_at(C,u) = a;
    \not(t value_at(C,u)) = \nott value_at(C,u) by Th47;
    hence \nott value_at(C,u) = 'not' a by A1,AOFA_A00:def 32;
  end;

theorem
  (\falseT) value_at(C,u) = FALSE
  proof
    thus (\falseT) value_at(C,u) = \not((\trueT) value_at(C,u)) by Th47
    .= 'not' ((\trueT) value_at(C,u)) by AOFA_A00:def 32 .= 'not' TRUE by Th46
    .= FALSE;
  end;

theorem
  for t1,t2 being Element of T, the bool-sort of S holds
  t1\andt2 value_at(C,u) = (t1 value_at(C,u))\and(t2 value_at(C,u))
  proof
    let t1,t2 be Element of T, the bool-sort of S;
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: t1 value_at(C,u) = f.(the bool-sort of S).t1 by A1,Th28;
A3: t1\andt2 value_at(C,u) = f.(the bool-sort of S).(t1\andt2) by A1,Th28;
    set o = In((the connectives of S).3, the carrier' of S);
A4: the_arity_of o = <*the bool-sort of S,the bool-sort of S*> &
    the_result_sort_of o = the bool-sort of S by Th13;
    then Args(o,T) = product <*(the Sorts of T).the bool-sort of S,
    (the Sorts of T).the bool-sort of S*> by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1\andt2) value_at(C,u) = Den(o,C).(f#p)
    by A1,A3,A4
    .= Den(o,C).<*f.(the bool-sort of S).t1,f.(the bool-sort of S).t2*>
    by A4,Th26
    .= (t1 value_at(C,u))\and(t2 value_at(C,u)) by A2,A1,Th28;
  end;

theorem
  \0(T,I) value_at(C,u) = 0
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
    doms u = FreeGen T by MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A2: f is_homomorphism T,C & Q = doms u & u = f||Q &
    \0(T,I) value_at(C,u) = f.I.\0(T,I) by A1,AOFA_A00:def 21;
    set o = In((the connectives of S).4, the carrier' of S);
A3: the_arity_of o = {} & the_result_sort_of o = I by Th14;
    then
    Args(o,T) = {{}} by Th21;
    then reconsider p = {} as Element of Args(o,T) by TARSKI:def 1;
    dom(f#p) = {} & dom p = {} by A3,MSUALG_3:6;
    then
A4: p = f#p;
    f.I.\0(T,I) = \0(C,I) by A4,A2,A3 .= 0 by AOFA_A00:55;
    hence thesis by A2;
  end;

theorem Th52:
  \1(T,I) value_at(C,u) = 1
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
    doms u = FreeGen T by MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A2: f is_homomorphism T,C & Q = doms u & u = f||Q &
    \1(T,I) value_at(C,u) = f.I.\1(T,I) by A1,AOFA_A00:def 21;
    set o = In((the connectives of S).5, the carrier' of S);
A3: the_arity_of o = {} & the_result_sort_of o = I by Th15;
    then
    Args(o,T) = {{}} by Th21;
    then reconsider p = {} as Element of Args(o,T) by TARSKI:def 1;
    dom(f#p) = {} & dom p = {} by A3,MSUALG_3:6;
    then
A4: p = f#p;
    f.I.\1(T,I) = \1(C,I) by A4,A2,A3 .= 1 by AOFA_A00:55;
    hence thesis by A2;
  end;

theorem Th53:
  (-t) value_at(C,u) = -(t value_at(C,u))
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A2: doms u = FreeGen T by MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A3: f1 is_homomorphism T,C & Q1 = doms u & u = f1||Q1 &
    t value_at(C,u) = f1.I.t by A1,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A4: f2 is_homomorphism T,C & Q2 = doms u & u = f2||Q2 &
    (-t) value_at(C,u) = f2.I.(-t) by A1,A2,AOFA_A00:def 21;
    set o = In((the connectives of S).6, the carrier' of S);
A5: the_arity_of o = <*I*> & the_result_sort_of o = I by Th16;
    then Args(o,T) = product <*(the Sorts of T).I*> by Th22;
    then reconsider p = <*t*> as Element of Args(o,T) by FINSEQ_3:123;
    thus (-t) value_at(C,u) = Den(o,C).(f2#p) by A4,A5
    .= Den(o,C).<*f2.I.t*> by A5,Th25
    .= -(t value_at(C,u)) by A3,A4,EXTENS_1:19;
  end;

theorem Th54:
  (t1+t2) value_at(C,u) = (t1 value_at(C,u))+(t2 value_at(C,u))
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A2: doms u = FreeGen T by MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A3: f1 is_homomorphism T,C & Q1 = doms u & u = f1||Q1 &
    t1 value_at(C,u) = f1.I.t1 by A1,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A4: f2 is_homomorphism T,C & Q2 = doms u & u = f2||Q2 &
    t2 value_at(C,u) = f2.I.t2 by A1,A2,AOFA_A00:def 21;
    consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A5: f is_homomorphism T,C & Q = doms u & u = f||Q &
    (t1+t2) value_at(C,u) = f.I.(t1+t2) by A1,A2,AOFA_A00:def 21;
A6: f = f1 & f = f2 by A3,A4,A5,EXTENS_1:19;
    set o = In((the connectives of S).7, the carrier' of S);
A7: the_arity_of o = <*I,I*> & the_result_sort_of o = I by Th17;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1+t2) value_at(C,u) = Den(o,C).(f#p) by A5,A7
    .= Den(o,C).<*f.I.t1,f.I.t2*> by A7,Th26
    .= (t1 value_at(C,u))+(t2 value_at(C,u)) by A3,A4,A6;
  end;

theorem
  \2(T,I) value_at (C,u) = 2
  proof
A1: \1(T,I) value_at(C,u) = 1 by Th52;
    thus \2(T,I) value_at(C,u)
    = (\1(T,I) value_at(C,u))+(\1(T,I) value_at(C,u)) by Th54
    .= 2 by A1,AOFA_A00:55;
  end;

theorem Th56:
  (t1-t2) value_at(C,u) = (t1 value_at(C,u))-(t2 value_at(C,u))
  proof
    thus (t1-t2) value_at(C,u) = (t1 value_at(C,u))+((-t2) value_at(C,u))
    by Th54
    .= (t1 value_at(C,u))-(t2 value_at(C,u)) by Th53;
  end;

theorem Th57:
  (t1*t2) value_at(C,u) = (t1 value_at(C,u))*(t2 value_at(C,u))
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: t2 value_at(C,u) = f.I.t2 by A1,Th28;
A3: (t1*t2) value_at(C,u) = f.I.(t1*t2) by A1,Th28;
    set o = In((the connectives of S).8, the carrier' of S);
A4: the_arity_of o = <*I,I*> & the_result_sort_of o = I by Th18;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1*t2) value_at(C,u) = Den(o,C).(f#p) by A1,A3,A4
    .= Den(o,C).<*f.I.t1,f.I.t2*> by A4,Th26
    .= (t1 value_at(C,u))*(t2 value_at(C,u)) by A1,A2,Th28;
  end;

theorem Th58:
  (t1 div t2) value_at(C,u) = (t1 value_at(C,u))div(t2 value_at(C,u))
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A2: doms u = FreeGen T by MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A3: f1 is_homomorphism T,C & Q1 = doms u & u = f1||Q1 &
    t1 value_at(C,u) = f1.I.t1 by A1,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A4: f2 is_homomorphism T,C & Q2 = doms u & u = f2||Q2 &
    t2 value_at(C,u) = f2.I.t2 by A1,A2,AOFA_A00:def 21;
    consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A5: f is_homomorphism T,C & Q = doms u & u = f||Q &
    (t1 div t2) value_at(C,u) = f.I.(t1 div t2) by A1,A2,AOFA_A00:def 21;
A6: f = f1 & f = f2 by A3,A4,A5,EXTENS_1:19;
    set o = In((the connectives of S).9, the carrier' of S);
A7: the_arity_of o = <*I,I*> & the_result_sort_of o = I by Th19;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t1 div t2) value_at(C,u) = Den(o,C).(f#p) by A5,A7
    .= (t1 value_at(C,u))div(t2 value_at(C,u)) by A3,A4,A6,A7,Th26;
  end;

theorem
  (t1 mod t2) value_at(C,u) = (t1 value_at(C,u)) mod (t2 value_at(C,u))
  proof
    thus (t1 mod t2) value_at(C,u) = (t1-(t1 div t2)*t2) value_at(C,u)
    .= (t1 value_at(C,u))-(((t1 div t2)*t2) value_at(C,u)) by Th56
    .= (t1 value_at(C,u))-(((t1 div t2) value_at(C,u))*(t2 value_at(C,u)))
    by Th57
    .= (t1 value_at(C,u)) mod (t2 value_at(C,u)) by Th58;
  end;

theorem
  leq(t1,t2) value_at(C,u) = leq(t1 value_at(C,u), t2 value_at(C,u))
  proof
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C
    by MSAFREE4:21;
    then
A2: doms u = FreeGen T by MSSUBFAM:17;
    then consider f1 being ManySortedFunction of T,C,
    Q1 being GeneratorSet of T such that
A3: f1 is_homomorphism T,C & Q1 = doms u & u = f1||Q1 &
    t1 value_at(C,u) = f1.I.t1 by A1,AOFA_A00:def 21;
    consider f2 being ManySortedFunction of T,C,
    Q2 being GeneratorSet of T such that
A4: f2 is_homomorphism T,C & Q2 = doms u & u = f2||Q2 &
    t2 value_at(C,u) = f2.I.t2 by A1,A2,AOFA_A00:def 21;
    consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A5: f is_homomorphism T,C & Q = doms u & u = f||Q &
    leq(t1,t2) value_at(C,u) = f.(the bool-sort of S).leq(t1,t2)
    by A1,A2,AOFA_A00:def 21;
A6: f = f1 & f = f2 by A3,A4,A5,EXTENS_1:19;
    set o = In((the connectives of S).10, the carrier' of S);
A7: the_arity_of o = <*I,I*> & the_result_sort_of o = the bool-sort of S
    by Th20;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus leq(t1,t2) value_at(C,u) = Den(o,C).(f#p) by A5,A7
    .= leq(t1 value_at(C,u), t2 value_at(C,u)) by A3,A4,A6,A7,Th26;
  end;

theorem Th61:
  for a being SortSymbol of S
  for x being Element of (the generators of G).a holds
  @x value_at(C,s) = s.a.x
  proof
    let a be SortSymbol of S;
    let x be Element of (the generators of G).a;
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider h being ManySortedFunction of T,C such that
A1: h is_homomorphism T,C & s = h||the generators of G by AOFA_A00:def 19;
    @x value_at(C,s) = h.a.x by A1,Th29 .= ((h.a)|((the generators of G).a)).x
    by FUNCT_1:49;
    hence @x value_at(C,s) = s.a.x by A1,MSAFREE:def 1;
  end;

theorem Th62:
  for a being SortSymbol of S
  for x being pure Element of (the generators of G).a
  for u being ManySortedFunction of FreeGen T, the Sorts of C holds
  @x value_at(C,u) = u.a.x
  proof
    let a be SortSymbol of S;
    let x be pure Element of (the generators of G).a;
    let u be ManySortedFunction of FreeGen T, the Sorts of C;
    consider h being ManySortedFunction of T,C such that
A1: h is_homomorphism T,C & u = h||FreeGen T by MSAFREE4:46;
    FreeGen T is_transformable_to the Sorts of C by MSAFREE4:21;
    then
A2: doms u = FreeGen T by MSSUBFAM:17;
    then consider f being ManySortedFunction of T,C,
    Q being GeneratorSet of T such that
A3: f is_homomorphism T,C & Q = doms u & u = f||Q & @x value_at(C,u) = f.a.@x
    by A1,AOFA_A00:def 21;
    @x value_at(C,u) = h.a.x by A1,A2,A3,EXTENS_1:19
    .= ((h.a)|((FreeGen T).a)).x by Def4,FUNCT_1:49;
    hence @x value_at(C,u) = u.a.x by A1,MSAFREE:def 1;
  end;

theorem Th63:
  for i,j being Integer, a,b being Element of C,I st a = i & b = j
  holds a-b = i-j
  proof
    let i,j be Integer;
    let a,b be Element of C,I;
    assume A1: a = i;
    assume b = j;
    then -b = -j by AOFA_A00:55;
    then a+-b = i+-j by A1,AOFA_A00:55;
    hence a-b = i-j;
  end;

theorem Th64:
  for i,j being Integer, a,b being Element of C,I st a = i & b = j & j <> 0
  holds a mod b = i mod j
  proof
    let i,j be Integer;
    let a,b be Element of C,I;
    assume A1: a = i;
    assume A2: b = j;
    assume A3: j <> 0;
    then a div b = i div j by A1,A2,AOFA_A00:55;
    then (a div b)*b = (i div j)*j by A2,AOFA_A00:55;
    then a-(a div b)*b = i-(i div j)*j by A1,Th63;
    hence a mod b = i mod j by A3,INT_1:def 10;
  end;

theorem Th65:
  G is C-supported & f in C-Execution(A,b,\falseC) implies
  for a being SortSymbol of S, x being pure Element of (the generators of G).a
  for t being Element of T,a
  holds
  f.(s,x:=(t,A)).a.x = t value_at(C,s) &
  (for z being pure Element of (the generators of G).a st z <> x
  holds f.(s, x:=(t,A)).a.z = s.a.z) &
  for b being SortSymbol of S st a <> b holds
  (for z being pure Element of (the generators of G).b holds
  f.(s, x:=(t,A)).b.z = s.b.z)
  proof
    assume
A1: G is C-supported;
    assume
A2: f in C-Execution(A,b,\falseC);
    let a be SortSymbol of S;
    let x be pure Element of (the generators of G).a;
    let t be Element of T,a;
    reconsider x0 = @x as Element of G,a by AOFA_A00:def 22;
    thus
    f.(s, x:=(t,A)).a.x = succ(s,x0,t value_at(C,s)).a.x by A2,AOFA_A00:def 28
    .= t value_at(C,s) by A1,AOFA_A00:def 27;
    hereby
      let z be pure Element of (the generators of G).a; assume
A3:   z <> x;
A4:   x in (FreeGen T).a & z in (FreeGen T).a &
      FreeGen X is ManySortedSubset of the generators of G
      by A1,Def4;
      then vf @x = a-singleton(x) & FreeGen X c= the generators of G
      by AOFA_A00:41,PBOOLE:def 18;
      then (vf @x).a = {x} & (FreeGen X).a c= (the generators of G).a
      by AOFA_A00:6;
      then
A5:   z nin (vf @x).a & @x is Element of G,a
      by A3,TARSKI:def 1,AOFA_A00:def 22;
      thus f.(s, x:=(t,A)).a.z = succ(s,x0,t value_at(C,s)).a.z
      by A2,AOFA_A00:def 28
      .= s.a.z by A1,A3,A5,A4,AOFA_A00:def 27;
    end;
    let b be SortSymbol of S; assume
A6: a <> b;
    hereby
      let z be pure Element of (the generators of G).b;
A7:   x in (FreeGen T).a & z in (FreeGen T).b &
      FreeGen X is ManySortedSubset of the generators of G
      by A1,Def4;
      then vf @x = a-singleton(x) & FreeGen X c= the generators of G
      by AOFA_A00:41,PBOOLE:def 18;
      then
A8:   z nin (vf @x).b & @x is Element of G,a
      by A6,AOFA_A00:6,AOFA_A00:def 22;
      thus f.(s, x:=(t,A)).b.z = succ(s,x0,t value_at(C,s)).b.z
      by A2,AOFA_A00:def 28
      .= s.b.z by A1,A6,A8,A7,AOFA_A00:def 27;
    end;
  end;

theorem Th66:
  G is C-supported & f in C-Execution(A,b,\falseC) implies
  (t1 value_at(C,s) < t2 value_at(C,s) iff
  f.(s, b gt(t2,t1,A)) in (\falseC)-States(the generators of G,b)) &
  (t1 value_at(C,s) <= t2 value_at(C,s) iff
  f.(s, b leq(t1,t2,A)) in (\falseC)-States(the generators of G,b)) &
  (for x holds f.(s, b gt(t1,t2,A)).I.x = s.I.x &
  f.(s, b leq(t1,t2,A)).I.x = s.I.x) &
  for c being pure Element of (the generators of G).the bool-sort of S
  st c <> b holds
  f.(s, b gt(t1,t2,A)).(the bool-sort of S).c = s.(the bool-sort of S).c &
  f.(s, b leq(t1,t2,A)).(the bool-sort of S).c = s.(the bool-sort of S).c
  proof assume
A1: G is C-supported & f in C-Execution(A,b,\falseC);
A2: f.(s, b gt(t2,t1,A)) is ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48;
    reconsider b0 = @b as Element of G, the bool-sort of S
    by AOFA_A00:def 22;
A3: \not(leq(t2,t1)) value_at (C,s)
    = \not(leq(t2,t1) value_at(C,s)) by Th31
    .= \not(leq(t2 value_at(C,s), t1 value_at(C,s))) by Th45;
    then
A4: f.(s, b gt(t2,t1,A)).(the bool-sort of S).b
    = succ(s, b0, \not(leq(t2 value_at(C,s), t1 value_at(C,s)))).
    (the bool-sort of S).b by A1,AOFA_A00:def 28
    .= \not(leq(t2 value_at(C,s), t1 value_at(C,s))) by A1,AOFA_A00:def 27;
A5: 'not' FALSE = TRUE & TRUE <> FALSE &
    for x being boolean object holds x <> FALSE iff x = TRUE
    by XBOOLEAN:def 3;
    \trueC = TRUE by AOFA_A00:def 32;
    then
A6: \falseC = 'not' TRUE by AOFA_A00:def 32 .= FALSE;
    t1 value_at(C,s) < t2 value_at(C,s) iff
    leq(t2 value_at(C,s), t1 value_at(C,s)) = FALSE by AOFA_A00:55;
    then t1 value_at(C,s) < t2 value_at(C,s) iff
    \notleq(t2 value_at(C,s), t1 value_at(C,s)) <> \falseC by A6,A3,A5,Th33;
    hence (t1 value_at(C,s) < t2 value_at(C,s) iff
    f.(s, b gt(t2,t1,A)) in (\falseC)-States(the generators of G,b))
    by A2,A4,AOFA_A00:def 20;
A7: f.(s, b leq(t1,t2,A)) is ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48;
    leq(t1,t2) value_at (C,s)
    = leq(t1 value_at(C,s), t2 value_at(C,s)) by Th45;
    then
A8: f.(s, b leq(t1,t2,A)).(the bool-sort of S).b
    = succ(s, b0, leq(t1 value_at(C,s), t2 value_at(C,s))).
    (the bool-sort of S).b by A1,AOFA_A00:def 28
    .= leq(t1 value_at(C,s), t2 value_at(C,s)) by A1,AOFA_A00:def 27;
    \trueC = TRUE by AOFA_A00:def 32;
    then
A9: \falseC = 'not' TRUE by AOFA_A00:def 32 .= FALSE;
    t1 value_at(C,s) <= t2 value_at(C,s) iff
    leq(t1 value_at(C,s), t2 value_at(C,s)) <> \falseC
    by A9,AOFA_A00:55;
    hence t1 value_at(C,s) <= t2 value_at(C,s) iff
    f.(s, b leq(t1,t2,A)) in (\falseC)-States(the generators of G,b)
    by A7,A8,AOFA_A00:def 20;
    b in (FreeGen T).the bool-sort of S by Def4;
    then
A10: vf b0 = (the bool-sort of S)-singleton(b) by AOFA_A00:41;
    hereby let x;
A11:   I <> the bool-sort of S by AOFA_A00:53;
A12:   x in (FreeGen T).I by Def4;
A13:   x nin (vf b0).I by A10,A11,AOFA_A00:6;
      thus f.(s, b gt(t1,t2,A)).I.x
      = succ(s,b0,\notleq(t1,t2)value_at(C,s)).I.x by A1,AOFA_A00:def 28
      .= s.I.x by A11,A12,A13,A1,AOFA_A00:def 27;
      thus f.(s, b leq(t1,t2,A)).I.x
      = succ(s,b0,leq(t1,t2)value_at(C,s)).I.x by A1,AOFA_A00:def 28
      .= s.I.x by A11,A12,A13,A1,AOFA_A00:def 27;
    end;
    let c be pure Element of (the generators of G).the bool-sort of S;
    assume A14: c <> b;
    (vf b0).the bool-sort of S = {b} by A10,AOFA_A00:6;
    then
A15: c nin (vf b0).the bool-sort of S by A14,TARSKI:def 1;
A16: c in (FreeGen T).the bool-sort of S by Def4;
    thus f.(s, b gt(t1,t2,A)).(the bool-sort of S).c
    = succ(s,b0,\notleq(t1,t2)value_at(C,s)).(the bool-sort of S).c
    by A1,AOFA_A00:def 28
    .= s.(the bool-sort of S).c by A14,A15,A16,A1,AOFA_A00:def 27;
    thus f.(s, b leq(t1,t2,A)).(the bool-sort of S).c
    = succ(s,b0,leq(t1,t2)value_at(C,s)).(the bool-sort of S).c
    by A1,AOFA_A00:def 28
    .= s.(the bool-sort of S).c by A14,A15,A16,A1,AOFA_A00:def 27;
  end;

registration
  let i,j be Real;
  let a,b be boolean object;
  cluster IFGT(i,j,a,b) -> boolean;
  coherence by XXREAL_0:def 11;
end;

theorem Th67:
  G is C-supported & f in C-Execution(A,b,\falseC) implies
  f.(s, t is_odd(b,A)).(the bool-sort of S).b = (t value_at(C,s)) mod 2 &
  f.(s, t is_even(b,A)).(the bool-sort of S).b = ((t value_at(C,s))+1) mod 2 &
  for z holds f.(s, t is_odd(b,A)).I.z = s.I.z &
  f.(s, t is_even(b,A)).I.z = s.I.z
  proof assume
A1: G is C-supported & f in C-Execution(A,b,\falseC);
    reconsider b0 = @b as Element of G,the bool-sort of S by AOFA_A00:def 22;
A2: \2(T,I) value_at(C,s) = 2 & \0(T,I) value_at(C,s) = 0 by Th36,Th40;
    then
A3: (t value_at(C,s)) mod (\2(T,I) value_at(C,s))
    = (t value_at(C,s)) mod 2 by Th64;
    then
A4: leq((t value_at(C,s)) mod (\2(T,I) value_at(C,s)),
    \0(T,I) value_at(C,s))
    = IFGT((t value_at(C,s)) mod 2, 0, FALSE, TRUE) by A2,AOFA_A00:55;
    reconsider Z = IFGT((t value_at(C,s)) mod 2, 0, FALSE, TRUE) as boolean
    object;
A5: f.(s, t is_odd(b,A)).(the bool-sort of S).b
    = succ(s,b0,\notleq(t mod \2(T,I),\0(T,I)) value_at(C,s))
    .(the bool-sort of S).b by A1,AOFA_A00:def 28
    .= \notleq(t mod \2(T,I),\0(T,I)) value_at(C,s) by A1,AOFA_A00:def 27
    .= \not(leq(t mod \2(T,I),\0(T,I)) value_at(C,s)) by Th31
    .= \notleq((t mod \2(T,I)) value_at(C,s),\0(T,I) value_at(C,s)) by Th45
    .= \notleq((t value_at(C,s)) mod (\2(T,I) value_at(C,s)),
    \0(T,I) value_at(C,s)) by Th44
    .= 'not' Z by A4,AOFA_A00:def 32;
    hereby
      per cases by PRE_FF:6;
      suppose
A6:     (t value_at(C,s)) mod 2 = 0;
        hence f.(s, t is_odd(b,A)).(the bool-sort of S).b
        = 'not' TRUE by A5,XXREAL_0:def 11
        .= (t value_at(C,s)) mod 2 by A6;
      end;
      suppose
A7:     (t value_at(C,s)) mod 2 = 1;
        hence f.(s, t is_odd(b,A)).(the bool-sort of S).b
        = 'not' FALSE by A5,XXREAL_0:def 11
        .= (t value_at(C,s)) mod 2 by A7;
      end;
    end;
A8: f.(s, t is_even(b,A)).(the bool-sort of S).b
    = succ(s,b0,leq(t mod \2(T,I),\0(T,I)) value_at(C,s))
    .(the bool-sort of S).b by A1,AOFA_A00:def 28
    .= leq(t mod \2(T,I),\0(T,I)) value_at(C,s) by A1,AOFA_A00:def 27
    .= leq((t mod \2(T,I)) value_at(C,s),\0(T,I) value_at(C,s)) by Th45
    .= leq((t value_at(C,s)) mod (\2(T,I) value_at(C,s)),
    \0(T,I) value_at(C,s)) by Th44
    .= IFGT((t value_at(C,s)) mod 2, 0, FALSE, TRUE) by A3,A2,AOFA_A00:55;
    hereby
      per cases by PRE_FF:6;
      suppose
A9:     (t value_at(C,s)) mod 2 = 0;
        hence f.(s, t is_even(b,A)).(the bool-sort of S).b
        = (0+1) mod 2 by Th1,A8,XXREAL_0:def 11
        .= ((t value_at(C,s))+1) mod 2 by A9,Th1,NAT_D:66;
      end;
      suppose
A10:     (t value_at(C,s)) mod 2 = 1;
        hence f.(s, t is_even(b,A)).(the bool-sort of S).b
        = 1+1 mod 2 by Th1,A8,XXREAL_0:def 11
        .= ((t value_at(C,s))+1) mod 2 by A10,Th1,NAT_D:66;
      end;
    end;
    let z;
A11: I <> the bool-sort of S by AOFA_A00:53;
    b in (FreeGen T).the bool-sort of S by Def4;
    then (vf @b) = (the bool-sort of S)-singleton(b) by AOFA_A00:41;
    then
A12: z nin (vf @b).I by A11,AOFA_A00:6;
A13: z in (FreeGen T).I by Def4;
    thus f.(s, t is_odd(b,A)).I.z
    = succ(s,b0,\notleq(t mod \2(T,I),\0(T,I)) value_at(C,s)).I.z
    by A1,AOFA_A00:def 28
    .= s.I.z by A1,A11,A12,A13,AOFA_A00:def 27;
    thus f.(s, t is_even(b,A)).I.z
    = succ(s,b0,leq(t mod \2(T,I),\0(T,I)) value_at(C,s)).I.z
    by A1,AOFA_A00:def 28
    .= s.I.z by A1,A11,A12,A13,AOFA_A00:def 27;
  end;

definition
  let S,X,T,G,A;
  attr A is elementary means
  rng the assignments of A c= ElementaryInstructions A;
end;

theorem Th68:
  A is elementary implies
  for a being SortSymbol of S
  for x being Element of (the generators of G).a
  for t being Element of T,a holds
  x:=(t,A) in ElementaryInstructions A
  proof assume
A1: rng the assignments of A c= ElementaryInstructions A;
    let a be SortSymbol of S;
    let x be Element of (the generators of G).a;
    let t be Element of T,a;
    [x,t] in [:(the generators of G).a,(the Sorts of T).a:] by ZFMISC_1:87;
    then [x,t] in [|the generators of G, the Sorts of T|].a &
    dom [|the generators of G, the Sorts of T|] = the carrier of S
    by PARTFUN1:def 2,PBOOLE:def 16;
    then x:=(t,A) in rng the assignments of A by FUNCT_2:4,CARD_5:2;
    hence thesis by A1;
   end;

registration
  let S,X,T,G;
  cluster elementary for strict IfWhileAlgebra of the generators of G;
  existence
  proof
    set W = the infinite IfWhileAlgebra of the generators of G;
    set f = the Function of Union [|the generators of G, the Sorts of T|],
    ElementaryInstructions W;
    reconsider f as Function of Union [|the generators of G, the Sorts of T|],
    the carrier of W by FUNCT_2:7;
    set A = ProgramAlgStr(#the carrier of W, the charact of W, f#);
    set X = the generators of G;
    set J = S;
    A is partial quasi_total non-empty non empty; then
    reconsider A as partial quasi_total non-empty non empty strict
    ProgramAlgStr over J,T,X;
    A is with_empty-instruction with_catenation with_if-instruction
    with_while-instruction
    by AOFA_000:def 10,AOFA_000:def 11,AOFA_000:def 12,AOFA_000:def 13; then
    reconsider A as with_empty-instruction with_catenation with_if-instruction
    with_while-instruction
    partial quasi_total non-empty non empty strict ProgramAlgStr over J,T,X;
    A is non degenerated well_founded ECIW-strict infinite
    proof
      hereby let I1,I2 be Element of A;
        reconsider J1 = I1, J2 = I2 as Element of W;
        EmptyIns A = EmptyIns W & I1\;I2 = J1\;J2;
        hence (I1 <> EmptyIns A implies I1\;I2 <> I2) &
        (I2 <> EmptyIns A implies I1\;I2 <> I1) &
        (I1 <> EmptyIns A or I2 <> EmptyIns A implies I1\;I2 <> EmptyIns A)
        by AOFA_000:def 24;
      end;
      hereby let C,I1,I2 be Element of A;
        reconsider C1 = C, J1 = I1, J2 = I2 as Element of W;
        if-then-else(C,I1,I2) = if-then-else(C1,J1,J2) &
        EmptyIns W = EmptyIns A;
        hence if-then-else(C,I1,I2) <> EmptyIns A by AOFA_000:def 24;
      end;
      hereby let C,I be Element of A;
        reconsider C1 = C, J = I as Element of W;
        EmptyIns A = EmptyIns W & while(C,I) = while(C1,J);
        hence while(C,I) <> EmptyIns A by AOFA_000:def 24;
      end;
      hereby let I1,I2,C,J1,J2 be Element of A;
        reconsider C1 = C, K1 = I1, K2 = I2, L1 = J1, L2 = J2 as Element of W;
        if-then-else(C,J1,J2) = if-then-else(C1,L1,L2) & I1\;I2 = K1\;K2 &
        EmptyIns W = EmptyIns A;
        hence I1 = EmptyIns A or I2 = EmptyIns A or
        I1\;I2 <> if-then-else(C,J1,J2) by AOFA_000:def 24;
      end;
      hereby let I1,I2,C,J be Element of A;
        reconsider C1 = C, K1 = I1, K2 = I2, L = J as Element of W;
        EmptyIns W = EmptyIns A & I1\;I2 = K1\;K2 & while(C,J) = while(C1,L);
        hence I1 <> EmptyIns A & I2 <> EmptyIns A implies I1\;I2 <> while(C,J)
        by AOFA_000:def 24;
      end;
      hereby let C1,I1,I2,C2,J be Element of A;
        reconsider C3 = C1, K1 = I1, K2 = I2, C4 = C2, L = J as Element of W;
        while(C2,J) = while(C4,L) &
        if-then-else(C1,I1,I2) = if-then-else(C3,K1,K2);
        hence if-then-else(C1,I1,I2) <> while(C2,J) by AOFA_000:def 24;
      end;
      thus A is well_founded
      proof
A1:     the UAStr of W = the UAStr of A; then
        ElementaryInstructions W = ElementaryInstructions A &
        ElementaryInstructions W is GeneratorSet of W
        by AOFA_A00:43,AOFA_000:def 25;
        hence ElementaryInstructions A is GeneratorSet of A
        by A1,AOFA_A00:46;
      end;
      the UAStr of A = the UAStr of W; then
      signature A = signature W by AOFA_A00:47;
      hence signature A = ECIW-signature by AOFA_000:def 27;
      the UAStr of A = the UAStr of W;
      hence ElementaryInstructions A is infinite by AOFA_A00:43;
    end;
    then reconsider A as infinite strict IfWhileAlgebra of X;
    take A;
    the UAStr of A = the UAStr of W; then
    ElementaryInstructions A = ElementaryInstructions W by AOFA_A00:43;
    hence rng the assignments of A c= ElementaryInstructions A
    by RELAT_1:def 19;
  end;
end;

registration
  let S,X,T,G;
  let A be elementary IfWhileAlgebra of the generators of G;
  let a be SortSymbol of S;
  let x be Element of (the generators of G).a;
  let t be Element of T,a;
  cluster x:=(t,A) -> absolutely-terminating;
  coherence
  proof
    x:=(t,A) in ElementaryInstructions A by Th68;
    hence thesis by AOFA_000:95;
  end;
end;

theorem
  for A being elementary IfWhileAlgebra of the generators of G
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G,b) holds
  G is C-supported & f in C-Execution(A,b,\falseC) &
  (ex d being Function st d.x = 1 & d.y = 2 & d.m = 3) implies
         y:=(\1(T,I),A)\;
         while(b gt(@m, \0(T,I), A),
           if-then(@m is_odd(b,A), y:=(@y*@x,A))\;
           m:=(@m div \2(T,I),A)\; x:=(@x*@x,A))
  is_terminating_wrt f, {s: s.I.m >= 0}
proof
  let A be elementary IfWhileAlgebra of the generators of G;
  let f be ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G,b);
  assume
A1: G is C-supported & f in C-Execution(A,b,\falseC);
  set ST = C-States(the generators of G);
  set TV = (\falseC)-States(the generators of G,b);
  set P = {s: s.I.m >= 0};
  given d being Function such that
A2: d.x = 1 and
A3: d.y = 2 and
A4: d.m = 3;
A5: I <> the bool-sort of S by AOFA_A00:53;
  set W = b gt(@m, \0(T,I),A);
A6: y:=(\1(T,I),A) is_terminating_wrt f, P by AOFA_000:107;
  deffunc F(Element of ST) = In($1.I.m, NAT);
  defpred R[Element of ST] means $1.I.m > 0;
  set K = if-then(@m is_odd(b,A), y:=(@y*@x,A));
  set J = K\; m:=(@m div \2(T,I),A)\; x:=(@x*@x,A);
A7: f complies_with_if_wrt TV by AOFA_000:def 32;
A8: P is_invariant_wrt W,f
  proof
    let s be Element of ST;
    assume s in P;
    then
A9: ex s1 being Element of ST st s = s1 & s1.I.m >= 0;
    f.(s, W).I.m = s.I.m by A1,Th66;
    hence f.(s, W) in P by A9;
  end;
A10: for s being Element of ST st s in P & f.(f.(s,J),W) in TV
    holds f.(s,J) in P
  proof
    let s be Element of ST such that
    s in P;
A11: \0(T,I) value_at(C,f.(s,J)) = 0 by Th36;
    assume f.(f.(s,J),W) in TV;
    then @m value_at(C,f.(s,J)) > \0(T,I) value_at(C,f.(s,J)) by A1,Th66;
    then f.(s,J).I.m > 0 by A11,Th61;
    hence thesis;
  end;
A12: m <> y by A4,A3;
A13: P is_invariant_wrt y:=(\1(T,I),A), f
  proof
    let s;
    assume s in P;
    then
A14: ex s9 being Element of ST st s = s9 & s9.I.m >= 0;
    f.(s, y:=(\1(T,I),A)).I.m = s.I.m by A12,A1,Th65;
    hence f.(s, y:=(\1(T,I),A)) in P by A14;
  end;
A15: m <> x by A4,A2;
A16: for s st f.(s,W) in P holds f iteration_terminates_for J\;W, f.(s,W)
  proof
A17: for s being Element of ST st R[s] holds (R[f.(s,J\;W)] iff f.(s,J\;W)
    in TV) & F(f.(s,J\;W)) < F(s)
    proof
      let s be Element of ST such that
A18:  s.I.m > 0;
A19:  F(s) = s.I.m by A18,SUBSET_1:def 8,INT_1:3;
      set q1 = f.(s,K);
      set q0 = f.(s, @m is_odd(b,A));
      set sJ = f.(s,J);
      set sC = f.(sJ,W);
A20:  f.(s,J\;W) = sC by AOFA_000:def 29;
A21:   sC.I.m = sJ.I.m & \0(T,I) value_at(C,sC) = 0 by Th36,A5,A1,Th65;
A22:   @m value_at(C,sJ) = sJ.I.m & \0(T,I) value_at(C,sJ) = 0 by Th36,Th61;
      thus R[f.(s,J\;W)] iff f.(s,J\;W) in TV by A21,A20,A22,A1,Th66;
      set q2 = f.(q1,m:=(@m div \2(T,I),A));
      set q3 = f.(q2,x:=(@x*@x,A));
A23:  q1 = f.(q0, y:=(@y*@x,A)) or q1 = f.(q0, EmptyIns A)
      by A7;
A24:   @m value_at(C,q1) = q1.I.m by Th61;
A25:   \2(T,I) value_at(C,q1) = 2 by Th40;
      q2 = f.(s,K\;m:=(@m div \2(T,I),A)) by AOFA_000:def 29;
      then q3 = f.(s,J) by AOFA_000:def 29;
      then
A26:  sJ.I.m = q2.I.m by A15,A1,Th65
        .= (@m div \2(T,I)) value_at(C,q1) by A1,Th65
        .= (@m value_at(C,q1)) div (\2(T,I) value_at(C,q1)) by Th43
        .= (q1.I.m) div 2 by A24,A25,AOFA_A00:55
        .= (q0.I.m) div 2 by A12,A23,A1,Th65,AOFA_000:def 28
        .= (s.I.m) div 2 by A5,Th65,A1;
A27:  sC.I.m = sJ.I.m by A1,Th66;
      then sC.I.m in NAT by A18,A26,INT_1:3,61;
      then F(sC) = sC.I.m by SUBSET_1:def 8;
      hence thesis by A18,A27,A20,A26,A19,INT_1:56;
    end;
    let s0 be Element of ST such that
    f.(s0,W) in P;
    set s1 = f.(s0,W);
A28: s0.I.m = @m value_at(C,s0) & \0(T,I) value_at(C,s0) = 0 by Th36,Th61;
    then
A29: s0.I.m <= 0 implies s1 nin TV by A1,Th66;
    s0.I.m > 0 implies s1 in TV by A28,A1,Th66;
    then
A30: f.(s0,W) in TV iff R[f.(s0,W)] by A29,A1,Th66;
    thus f iteration_terminates_for J\;W, f.(s0,W) from AOFA_000:sch 3(A30,A17
    );
  end;
  J is_terminating_wrt f,P by AOFA_000:107;
  then while(b gt(@m, \0(T,I), A), if-then(@m is_odd(b,A), y:=(@y*@x,A))\;
  m:=(@m div \2(T,I),A)\; x:=(@x*@x,A) )
  is_terminating_wrt f, P by A8,A10,A16,AOFA_000:104,118;
  hence thesis by A6,A13,AOFA_000:111;
end;

theorem
  G is C-supported &
  (ex d being Function st d.b = 0 & d.x = 1 & d.y = 2 & d.m = 3) implies
  for s being Element of C-States(the generators of G)
  for n being Nat st n = s.I.m holds
   f in C-Execution(A,b,\falseC) implies
   f.(s, y:=(\1(T,I),A)\;
         while(b gt(@m, \0(T,I), A),
           if-then(@m is_odd(b,A), y:=(@y*@x,A))\;
           m:=(@m div \2(T,I),A)\; x:=(@x*@x,A)) ).I.y
   = (s.I.x)|^n
   proof
     assume
A1:  G is C-supported;
     given d being Function such that
A2:  d.b = 0 & d.x = 1 & d.y = 2 & d.m = 3;
     let s;
     let n be Nat;
     assume that
A3:  n = s.I.m and
A4:  f in C-Execution(A,b,\falseC);
     set Q = S;
     set S = C-States(the generators of G);
     set W = T; set g = f;
     set T = (\falseC)-States(the generators of G, b);
     set s0 = f.(s, y:=(\1(W,I),A));
A5:  f complies_with_if_wrt T by AOFA_000:def 32;
     defpred R[Element of S] means $1.I.m > 0;
     set Z = C;
     set C = b gt(@m, \0(W,I), A);
     defpred P[Element of S] means
     (s.I.x)|^n = ($1.I.y)*(($1.I.x)to_power($1.I.m)) &
     $1.I.m >= 0;
     deffunc F(Element of S) = In($1.I.m, NAT);
     set Y = I;
     set I = if-then(@m is_odd(b,A), y:=(@y*@x,A));
     set J = I\; m:=(@m div \2(W,Y),A)\; x:=(@x*@x,A);
A6:  m <> y by A2;
     then
A7:  s0.Y.m = s.Y.m by A1,A4,Th65;
A8:  for s being Element of S st P[s] holds P[g.(s,C) qua Element of S] &
     (g.(s,C) in T iff R[g.(s,C) qua Element of S])
     proof
       let s be Element of S such that
A9:    P[s];
       set s1 = g.(s, C);
A10:   s1.Y.x = s.Y.x by A1,A4,Th66;
       s1.Y.m = s.Y.m by A1,A4,Th66;
       hence P[g.(s,C) qua Element of S] by A1,A4,A9,A10,Th66;
A11:    \0(W,Y) value_at(Z,s) = 0 & @m value_at(Z,s) = s.Y.m by Th36,Th61;
       then
A12:   s.Y.m <= 0 implies s1 nin T by A1,A4,Th66;
       s.Y.m > 0 implies s1 in T by A11,A1,A4,Th66;
       hence thesis by A1,A4,A12,Th66;
     end;
A13: s0.Y.y = \1(W,Y) value_at(Z,s) by A1,A4,Th65 .= 1 by Th37;
     set fs = g.(s0, while(C,J));
     set s1 = g.(s0,C);
A14: (fs.Y.x) to_power 0 = 1 by POWER:24;
A15: m <> x by A2;
A16: for s being Element of S st R[s] holds (R[g.(s,J\;C) qua Element of S] iff
     g.(s,J\;C) in T) & F(g.(s,J\;C) qua Element of S) < F(s)
     proof
       let s be Element of S such that
A17:   s.Y.m > 0;
A18:   F(s) = s.Y.m by A17,SUBSET_1:def 8,INT_1:3;
       set q1 = g.(s,I);
       set q0 = g.(s, @m is_odd(b,A));
       set sJ = g.(s,J);
       set sC = g.(sJ,C);
A19:   g.(s,J\;C) = sC by AOFA_000:def 29;
A20:    \0(W,Y) value_at(Z,sJ) = 0 & @m value_at(Z,sJ) = sJ.Y.m by Th36,Th61;
       then
A21:   sJ.Y.m <= 0 implies sC nin T by A1,A4,Th66;
       sJ.Y.m > 0 implies sC in T by A20,A1,A4,Th66;
       hence R[g.(s,J\;C) qua Element of S] iff g.(s,J\;C) in T
       by A21,A19,A1,A4,Th66;
       set q2 = g.(q1,m:=(@m div \2(W,Y), A));
       set q3 = g.(q2,x:=(@x*@x,A));
A22:   q1 = g.(q0, y:=(@y*@x,A)) or q1 = g.(q0, EmptyIns A)
       by A5;
A23:    @m value_at(Z,q1) = q1.Y.m & \2(W,Y)value_at(Z,q1) = 2 by Th61,Th40;
       q2 = g.(s,I\;m:=(@m div \2(W,Y), A)) by AOFA_000:def 29;
       then q3 = g.(s,J) by AOFA_000:def 29;
       then
A24:   sJ.Y.m = q2.Y.m by A1,A4,A15,Th65
       .= (@m div \2(W,Y))value_at(Z,q1) by A1,A4,Th65
       .= (@m value_at(Z,q1)) div (\2(W,Y)value_at(Z,q1)) by Th43
       .= (q1.Y.m) div 2 by A23,AOFA_A00:55
       .= (q0.Y.m) div 2 by A1,A4,A6,A22,Th65,AOFA_000:def 28
       .= (s.Y.m) div 2 by A1,A4,Th67;
A25:   sC.Y.m = sJ.Y.m by A1,A4,Th66;
       then sC.Y.m in NAT by A17,A24,INT_1:3,61;
       then F(sC qua Element of S) = sC.Y.m by SUBSET_1:def 8;
       hence thesis by A17,A25,A19,A24,A18,INT_1:56;
     end;
     set q = s;
A26: x <> y by A2;
A27: for s being Element of S st P[s] & s in T & R[s]
     holds P[g.(s,J) qua Element of S]
     proof
       let s be Element of S such that
A28:   P[s] and
       s in T and
       R[s];
       reconsider sm = s.Y.m as Element of NAT by A28,INT_1:3;
       s.Y.m = ((sm) div 2)*2+((sm) mod 2) by NEWTON:66;
       then
A29:   (q.Y.x)|^n = (s.Y.y)*(((s.Y.x)to_power((sm div 2)*2))*
       ((s.Y.x)to_power(sm mod 2))) by A28,FIB_NUM2:5
       .= (s.Y.y)*((s.Y.x)to_power(sm mod 2))*((s.Y.x)to_power((sm div 2)*2))
       .= (s.Y.y)*((s.Y.x)to_power(sm mod 2))*
       (((s.Y.x)to_power 2) to_power (sm div 2)) by NEWTON:9
       .= (s.Y.y)*((s.Y.x)to_power(sm mod 2))*
       (((s.Y.x)*(s.Y.x)) to_power (sm div 2)) by NEWTON:81;
       set q1 = g.(s,I);
       set q0 = g.(s, @m is_odd(b,A));
       set sJ = g.(s,J);
       set q2 = g.(q1,m:=(@m div \2(W,Y), A));
       set q3 = g.(q2,x:=(@x*@x,A));
A30:   q1 = g.(q0, y:=(@y*@x,A)) or q1 = g.(q0, EmptyIns A)
       by A5;
A31:   q2.Y.x = q1.Y.x by A1,A4,A15,Th65
       .= q0.Y.x by A1,A4,A26,A30,Th65,AOFA_000:def 28;
A32:   q2.Y.y = q1.Y.y by A1,A4,A6,Th65;
A33:   q0.Y.y = s.Y.y by A1,A4,Th67;
A34:   q0.Y.x = s.Y.x by A1,A4,Th67;
       q2 = g.(s,I\;m:=(@m div \2(W,Y), A)) by AOFA_000:def 29;
       then
A35:   q3 = g.(s,J) by AOFA_000:def 29;
       then
A36:   sJ.Y.y = q2.Y.y by A1,A4,A26,Th65;
A37:   sm div 2 = s.Y.m div 2;
A38:   now
A39:      @m value_at(Z,s) = s.Y.m by Th61;
         then
A40:     q0.(the bool-sort of Q).b = (s.Y.m) mod 2 by A1,A4,Th67;
         per cases by A37,A40,NAT_D:12;
         suppose
A41:       q0.(the bool-sort of Q).b = FALSE;
           q0 is ManySortedFunction of the generators of G, the Sorts of Z &
           \falseZ = FALSE by Th10,AOFA_A00:48;
           then q0 nin T by A41,AOFA_A00:def 20;
           then q1 = g.(q0, EmptyIns A) by A5;
           then
A42:       q1.Y.y = q0.Y.y by AOFA_000:def 28;
A43:       (s.Y.y)*1 = s.Y.y;
           (s.Y.x)to_power 0 = 1 by POWER:24;
           hence (s.Y.y)*((s.Y.x)to_power(sm mod 2)) = sJ.Y.y
           by A1,A4,A39,A36,A32,A33,A41,A42,A43,Th67;
         end;
         suppose
A44:       q0.(the bool-sort of Q).b = TRUE;
A45:        @y value_at(Z,q0) = q0.Y.y & @x value_at(Z,q0) = q0.Y.x by Th61;
           q0 is ManySortedFunction of the generators of G, the Sorts of Z &
           \falseZ = FALSE by Th10,AOFA_A00:48;
           then q0 in T by A44,AOFA_A00:def 20;
           then q1 = g.(q0, y:=(@y*@x,A)) by A5;
           then
A46:       q1.Y.y = (@y*@x) value_at(Z,q0) by A1,A4,Th65
           .= (@y value_at(Z,q0))*(@x value_at(Z,q0)) by Th42
           .= (q0.Y.y)*(q0.Y.x) by A45,AOFA_A00:55;
           (s.Y.x)to_power 1 = s.Y.x & @m value_at(Z,s) = s.Y.m
           by Th61,POWER:25;
           hence (s.Y.y)*((s.Y.x)to_power(sm mod 2)) = sJ.Y.y
           by A1,A4,A34,A36,A32,A33,A44,A46,Th67;
         end;
       end;
A47:    @m value_at(Z,q1) = q1.Y.m & \2(W,Y) value_at(Z,q1) = 2 by Th61,Th40;
A48:    sJ.Y.m = q2.Y.m by A1,A4,A15,A35,Th65
       .= (@m div \2(W,Y)) value_at(Z,q1) by A1,A4,Th65
       .= (@m value_at(Z,q1))div(\2(W,Y) value_at(Z,q1)) by Th43
       .= (q1.Y.m) div 2 by A47,AOFA_A00:55
       .= (q0.Y.m) div 2 by A1,A4,A6,A30,Th65,AOFA_000:def 28
       .= (s.Y.m) div 2 by A1,A4,Th67;
A49:    @x value_at(Z,q2) = q2.Y.x by Th61;
       sJ.Y.x = (@x*@x) value_at(Z,q2) by A1,A4,A35,Th65
       .= (@x value_at(Z,q2))*(@x value_at(Z,q2)) by Th42
       .= (q2.Y.x)*(q2.Y.x) by A49,AOFA_A00:55;
       hence thesis by A48,A29,A31,A34,A38;
     end;
     @m value_at(Z,s0) = s0.Y.m & \0(W,Y) value_at(Z,s0) = 0 &
     s1.Y.m = s0.Y.m by A1,A4,Th36,Th61,Th66;
     then
A50: g.(s0,C) in T iff R[g.(s0,C) qua Element of S] by A1,A4,Th66;
A51: g iteration_terminates_for J\;C, g.(s0,C) from AOFA_000:sch 3(A50, A16);
     s0.Y.x = s.Y.x by A1,A4,A26,Th65;
     then
A52: P[s0 qua Element of S] by A3,A7,A13,POWER:41;
A53: P[g.(s0,while(C,J)) qua Element of S] &
     not R[g.(s0,while(C,J)) qua Element of S]
     from AOFA_000:sch 5(A52,A51,A27,A8);
     then fs.Y.m = 0;
     hence thesis by A53,A14,AOFA_000:def 29;
   end;

begin :: Calculation of maximum

registration
  let X be non empty set;
  let f be FinSequence of X^omega;
  let x be Nat;
  cluster f.x -> Sequence-like finite Function-like Relation-like;
  coherence
  proof
    x in dom f or x nin dom f;
    then f.x in X^omega or f.x = <%>X by FUNCT_1:def 2,102;
    hence thesis;
  end;
end;

registration
  let X be non empty set;
  cluster -> Function-yielding for FinSequence of X^omega;
  coherence;
end;

registration
  let i be Nat;
  let f be i-based finite array;
  let a,x be set;
  cluster f+*(a,x) -> i-based finite segmental;
  coherence
  proof
A1: dom(f+*(a,x)) = dom f by FUNCT_7:30;
    then
    (for b being Ordinal st b in dom (f+*(a,x)) holds i in dom f & i c= b) &
    ex c,b being Ordinal st dom (f+*(a,x)) = c\b by EXCHSORT:def 1,def 2;
    hence thesis by A1,FINSET_1:10,EXCHSORT:def 1,def 2;
  end;
end;

registration
  let X be non empty set;
  let f be X-valued Function;
  let a be set;
  let x be Element of X;
  cluster f+*(a,x) -> X-valued;
  coherence
  proof
    let y be object; assume y in rng (f+*(a,x));
    then consider z being object such that
A1: z in dom (f+*(a,x)) & y = (f+*(a,x)).z by FUNCT_1:def 3;
A2: dom (f+*(a,x)) = dom f & (z = a or z <> a) by FUNCT_7:30;
    then y = x or y = f.z by A1,FUNCT_7:31,32;
    hence thesis by A1,A2,FUNCT_1:102;
  end;
end;

scheme Sch1{X()->non empty set,
            j()->Nat,
            B()->set,
            F(set,set,set)->set,
            A(set)->set}:
  ex f being FinSequence of X()^omega st
  len f = j() & (f.1 = B() or j() = 0) &
  for i being Nat st 1 <= i & i < j() holds f.(i+1) = F(f.i,i,A(i))
  provided
A1: for a being 0-based finite array of X()
  for i being Nat st 1 <= i & i < j()
  for x being Element of X() holds
  F(a,i,x) is 0-based finite array of X()
  and
A2: B() is 0-based finite array of X()
  and
A3: for i being Nat st i < j() holds A(i) in X()
  proof
    defpred P[set,set,set] means $3 = F($2,$1,A($1));
A4: for n being Nat st 1 <= n & n < j()
    for x being set ex y being set st P[n,x,y];
    consider f being FinSequence such that
A5: len f = j() & (f.1 = B() or j() = 0) &
    for i being Nat st 1 <= i & i < j() holds P[i,f.i,f.(i+1)]
    from RECDEF_1:sch 3(A4);
    defpred Q[Nat] means 1 <= $1 & $1 <= j() implies f.$1 in X()^omega;
A6: Q[0];
A7: now let i be Nat;
      assume
A8:   Q[i];
      thus Q[i+1]
      proof
        assume
A9:     1 <= i+1 & i+1 <= j();
        reconsider x = A(i) as Element of X() by A3,A9,NAT_1:13;
        per cases;
        suppose i = 0;
          hence f.(i+1) in X()^omega by A2,A5,A9,AFINSQ_1:def 7;
        end;
        suppose i > 0;
          then
A10:       i >= 1+0 & i in NAT by NAT_1:13,ORDINAL1:def 12;
          f.(i+1) = F(f.i,i,x) & f.i is 0-based finite array of X()
          by A8,A10,A5,A9,NAT_1:13;
          then f.(i+1) is 0-based finite array of X() by A1,A9,A10,NAT_1:13;
          hence f.(i+1) in X()^omega by AFINSQ_1:def 7;
        end;
      end;
    end;
A11: for i being Nat holds Q[i] from NAT_1:sch 2(A6,A7);
    rng f c= X()^omega
    proof
      let x be object;
      assume x in rng f;
      then consider y being object such that
A12:   y in dom f & x = f.y by FUNCT_1:def 3;
      reconsider y as Nat by A12;
      1 <= y & y <= j() by A12,A5,FINSEQ_3:25;
      hence x in X()^omega by A11,A12;
    end;
    then reconsider f as FinSequence of X()^omega by FINSEQ_1:def 4;
    take f;
    thus len f = j() & (f.1 = B() or j() = 0) by A5;
    let i be Nat;
    assume 1 <= i & i < j();
    hence thesis by A5;
  end;

theorem Th71:
  for S being (11,1,1)-array non empty non void BoolSignature
  for J,L being set, K being SortSymbol of S
  st (the connectives of S).11 is_of_type <*J,L*>, K
  holds J = the_array_sort_of S &
  for I being integer SortSymbol of S holds the_array_sort_of S <> I
  proof
    let S be (11,1,1)-array non empty non void BoolSignature;
    let J0,L0 be set, K0 be SortSymbol of S;
    assume A1: (the connectives of S).11 is_of_type <*J0,L0*>, K0;
    consider J,K,L being Element of S such that
A2: L = 1 & K = 1 & J <> L & J <> K &
    (the connectives of S).11 is_of_type <*J,K*>, L &
    (the connectives of S).(11+1) is_of_type <*J,K,L*>, J &
    (the connectives of S).(11+2) is_of_type <*J*>, K &
    (the connectives of S).(11+3) is_of_type <*K,L*>, J by AOFA_A00:def 51;
A3: the_array_sort_of S = J by A2;
    thus J0 = <*J0,L0*>.1
    .= (the Arity of S).((the connectives of S).11).1 by A1
    .= <*J,K*>.1 by A2
    .= the_array_sort_of S by A3;
    thus thesis by A2,AOFA_A00:def 40;
  end;

theorem Th72:
  for S being 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature
  for I being integer SortSymbol of S
  for A being (4,1) integer (11,1,1)-array bool-correct non-empty
  MSAlgebra over S
  for a,b being Element of A,I st a = 0
  holds init.array(a,b) = {}
  proof
    let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
    bool-correct non empty non void BoolSignature;
    let I be integer SortSymbol of S;
    let A be (4,1) integer (11,1,1)-array bool-correct non-empty
    MSAlgebra over S;
    let a,b be Element of A,I;
    assume A1: a = 0;
    set o = (the connectives of S).14;
    consider J,K being Element of S such that
A2: K = 1 & (the connectives of S).11 is_of_type <*J,1*>, K &
    (the Sorts of A).J = ((the Sorts of A).K)^omega &
    (the Sorts of A).1 = INT &
    (for a being 0-based finite array of (the Sorts of A).K holds
    (for i being Integer st i in dom a holds
    Den((the connectives of S)/.11,A).<*a,i*> = a.i &
    for x being Element of A,K holds
    Den((the connectives of S)/.(11+1),A).<*a,i,x*> = a+*(i,x)) &
    Den((the connectives of S)/.(11+2),A).<*a*> = card a) &
    for i being Integer, x being Element of A,K st i >= 0 holds
    Den((the connectives of S)/.(11+3),A).<*i,x*> = Segm(i)-->x
      by AOFA_A00:def 52;
A3: I = 1 by AOFA_A00:def 40;
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 14 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S)/.14 & o in the carrier' of S
    by FUNCT_1:102,PARTFUN1:def 6;
    hence init.array(a,b) = Den((the connectives of S)/.14, A).<*a,b*>
    by SUBSET_1:def 8
    .= Segm(0 qua set)-->b by A1,A2,A3
    .= {};
  end;

theorem Th73:
  for S being (11,1,1)-array 11 array-correct bool-correct non empty non void
  BoolSignature
  for I being integer SortSymbol of S holds
  the_array_sort_of S <> I &
  (the connectives of S).11 is_of_type <*the_array_sort_of S,I*>, I &
  (the connectives of S).(11+1) is_of_type <*the_array_sort_of S,I,I*>,
  the_array_sort_of S &
  (the connectives of S).(11+2) is_of_type <*the_array_sort_of S*>, I &
  (the connectives of S).(11+3) is_of_type <*I,I*>, the_array_sort_of S
  proof
    let S be (11,1,1)-array 11 array-correct bool-correct non empty
    non void BoolSignature;
    let I be integer SortSymbol of S;
    consider J,K,L being Element of S such that
A1: L = 1 & K = 1 & J <> L & J <> K &
    (the connectives of S).11 is_of_type <*J,K*>, L &
    (the connectives of S).(11+1) is_of_type <*J,K,L*>, J &
    (the connectives of S).(11+2) is_of_type <*J*>, K &
    (the connectives of S).(11+3) is_of_type <*K,L*>, J by AOFA_A00:def 51;
    the_array_sort_of S = J & I = 1 by A1,AOFA_A00:def 40;
    hence thesis by A1;
  end;

theorem Th74:
  for S being 1-1-connectives (11,1,1)-array 11 array-correct (4,1) integer
  bool-correct non empty non void BoolSignature
  for I being integer SortSymbol of S
  for A being (11,1,1)-array (4,1) integer bool-correct non-empty
  MSAlgebra over S
  holds (the Sorts of A).the_array_sort_of S = INT^omega &
  (for i,j being Element of A,I st i is non negative Integer
  holds init.array(i,j) = Segm(i)-->j) &
  for a being Element of (the Sorts of A).the_array_sort_of S
  holds length(a,I) = card a &
  for i being Element of A,I
  for f being Function st f = a & i in dom f
  holds a.(i) = f.i &
  for x being Element of A,I holds (a,i)<-x = f+*(i,x)
  proof
    let S be 1-1-connectives (11,1,1)-array 11 array-correct (4,1) integer
    bool-correct non empty non void BoolSignature;
    let I be integer SortSymbol of S;
    let A be (11,1,1)-array (4,1) integer bool-correct non-empty
    MSAlgebra over S;
    consider J,K being Element of S such that
A1: K = 1 & (the connectives of S).11 is_of_type <*J,1*>, K &
    (the Sorts of A).J = ((the Sorts of A).K)^omega &
    (the Sorts of A).1 = INT &
    (for a being 0-based finite array of (the Sorts of A).K holds
    (for i being Integer st i in dom a holds
    Den((the connectives of S)/.11,A).<*a,i*> = a.i &
    for x being Element of A,K holds
    Den((the connectives of S)/.(11+1),A).<*a,i,x*> = a+*(i,x)) &
    Den((the connectives of S)/.(11+2),A).<*a*> = card a) &
    for i being Integer, x being Element of A,K st i >= 0 holds
    Den((the connectives of S)/.(11+3),A).<*i,x*> = Segm(i)-->x
      by AOFA_A00:def 52;
    thus (the Sorts of A).the_array_sort_of S = INT^omega by A1,Th71;
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 11 <= len the connectives of S &
    12 <= len the connectives of S &
    13 <= len the connectives of S &
    14 <= len the connectives of S by XXREAL_0:2;
    then 11 in dom the connectives of S &
    12 in dom the connectives of S &
    13 in dom the connectives of S &
    14 in dom the connectives of S by FINSEQ_3:25;
    then
A2: (the connectives of S).11 in the carrier' of S &
    (the connectives of S).12 in the carrier' of S &
    (the connectives of S).13 in the carrier' of S &
    (the connectives of S).14 in the carrier' of S &
    (the connectives of S).11 = (the connectives of S)/.11 &
    (the connectives of S).12 = (the connectives of S)/.12 &
    (the connectives of S).13 = (the connectives of S)/.13 &
    (the connectives of S).14 = (the connectives of S)/.14
    by FUNCT_1:102,PARTFUN1:def 6;
A3: I = 1 by AOFA_A00:def 40;
    hereby
      let i,j be Element of A,I;
      reconsider ii = i as Integer by A3;
      assume
      i is non negative Integer;
      then
A4:   ii >= 0 & I = K by A1,AOFA_A00:def 40;
      thus init.array(i,j) = Den((the connectives of S)/.14,A).<*ii,j*>
      by A2,SUBSET_1:def 8
      .= Segm(i)-->j by A1,A4;
    end;
    let a be Element of (the Sorts of A).the_array_sort_of S;
    J = the_array_sort_of S by A1,Th71;
    then reconsider b = a as XFinSequence of INT by A1;
    thus length(a,I)
    = Den((the connectives of S)/.13,A).<*b*> by A2,SUBSET_1:def 8
    .= card a by A1;
    let i be Element of A,I;
    let f be Function;
    assume A5: f = a & i in dom f;
    thus a.(i) = Den((the connectives of S)/.11,A).<*a,i*> by A2,SUBSET_1:def 8
    .= b.i by A1,A5,A3
    .= f.i by A5;
    let x be Element of A,I;
    thus (a,i)<-x = Den((the connectives of S)/.12,A).<*b,i,x*>
    by A2,SUBSET_1:def 8
    .= f+*(i,x) by A1,A3,A5;
  end;

registration
  let a be 0-based finite array;
  cluster len-a -> finite;
  coherence
  proof
    len a = len-a by EXCHSORT:24;
    hence thesis;
  end;
end;

registration
  let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature;
  let A be (11,1,1)-array (4,1) integer bool-correct non-empty
  MSAlgebra over S;
  cluster -> (11,1,1)-array for non-empty MSSubAlgebra of A;
  coherence
  proof
    let Q be non-empty MSSubAlgebra of A;
    set I = the integer SortSymbol of S;
A1: (the Sorts of Q).I = INT by AOFA_A00:55;
    then reconsider 00 = 0 as Element of Q,I by INT_1:def 2;
    reconsider 0a = 00 as Element of A,I by Th2;
    consider J,K being Element of S such that
A2: K = 1 & (the connectives of S).11 is_of_type <*J,1*>, K &
    (the Sorts of A).J = ((the Sorts of A).K)^omega &
    (the Sorts of A).1 = INT &
    (for a being 0-based finite array of (the Sorts of A).K holds
    (for i being Integer st i in dom a holds
    Den((the connectives of S)/.11,A).<*a,i*> = a.i &
    for x being Element of A,K holds
    Den((the connectives of S)/.(11+1),A).<*a,i,x*> = a+*(i,x)) &
    Den((the connectives of S)/.(11+2),A).<*a*> = card a) &
    for i being Integer, x being Element of A,K st i >= 0 holds
    Den((the connectives of S)/.(11+3),A).<*i,x*> = Segm(i)-->x
      by AOFA_A00:def 52;
    consider J1,K1,L1 being Element of S such that
A3: L1 = 1 & K1 = 1 & J1 <> L1 & J1 <> K1 &
    (the connectives of S).11 is_of_type <*J1,K1*>, L1 &
    (the connectives of S).(11+1) is_of_type <*J1,K1,L1*>, J1 &
    (the connectives of S).(11+2) is_of_type <*J1*>, K1 &
    (the connectives of S).(11+3) is_of_type <*K1,L1*>, J1 by AOFA_A00:def 51;
A4: I = 1 by AOFA_A00:def 40;
A5: the_array_sort_of S = J & the_array_sort_of S = J1 by A3,A2,Th71;
A6: for a being 0-based finite array of INT holds
    a in (the Sorts of Q).the_array_sort_of S
    proof
      let a be 0-based finite array of INT;
      set o = In((the connectives of S).14, the carrier' of S);
      11+3 <= len the connectives of S by AOFA_A00:def 51;
      then 14 in dom the connectives of S by FINSEQ_3:25;
      then o = (the connectives of S).14 by FUNCT_1:102,SUBSET_1:def 8;
      then the_arity_of o = <*K,K*> by A3,A2;
      then
A7:   Args(o,Q) = product <*INT,INT*> & 0 in INT
      by A2,A4,A1,Th23,INT_1:def 2;
      per cases;
      suppose len a = 0;
        then a = <%>INT;
        then a = init.array(0a,0a) by Th72
        .= init.array(00,00) by A7,FINSEQ_3:124,EQUATION:19;
        hence a in (the Sorts of Q).the_array_sort_of S;
      end;
      suppose
A8:     len a <> 0;
        deffunc F(array, Integer, set) = $1+*($2,$3);
        deffunc G(Integer) = a.($1);
        set j = len a;
A9:     for a being 0-based finite array of INT
        for i being Nat st 1 <= i & i < j
        for x being Element of INT holds
        F(a,i,x) is 0-based finite array of INT;
        set B = Segm((len a qua set))-->a.0;
A10:     B is 0-based finite array of INT;
A11:     for i being Nat st i<j holds G(i) in INT
           by AFINSQ_1:86,FUNCT_1:102;
        consider f being FinSequence of INT^omega such that
A12:     len f = j & (f.1 = B or j = 0) &
        for i being Nat st 1 <= i & i < j holds f.(i+1) = F(f.i,i,G(i))
        from Sch1(A9,A10,A11);
        reconsider f as Function-yielding FinSequence of INT^omega;
        defpred Q[Nat] means $1 <= len a implies
        ($1 <> 0 implies len (f.$1) = j) &
        for i being Nat st i < $1 holds a.i = f.$1.i;
A13:     Q[0];
A14:     now let i be Nat; assume
A15:       Q[i];
          thus Q[i+1]
          proof assume
A16:         i+1 <= len a;
            per cases;
            suppose
A17:           i = 0;
              thus i+1 <> 0 implies len(f.(i+1)) = j
              by A12,A16,A17;
              let k be Nat;
              assume k < i+1;
              then k <= 0 & k >= 0 by A17,NAT_1:13;
              then
A18:           k = 0;
              then k < len a by A16;
              hence a.k = f.(i+1).k
                  by A17,A12,A18,FUNCOP_1:7,AFINSQ_1:86;
            end;
            suppose
A19:           i > 0;
              then
A20:           i >= 0+1 & i < j by A16,NAT_1:13;
              then
A21:           f.(i+1) = F(f.i,i,G(i)) by A12;
              thus i+1 <> 0 implies len(f.(i+1)) = j
              by A15,A19,A21,A16,NAT_1:13,FUNCT_7:30;
              let k be Nat;
              assume k < i+1;
              then
A22:           k <= i & k < j by A16,XXREAL_0:2,NAT_1:13;
              per cases by A22,XXREAL_0:1;
              suppose k = i;
                then f.(i+1) = f.i+*(k,a.k) & k in dom (f.i)
                by A15,A12,A20,AFINSQ_1:86;
                hence a.k = f.(i+1).k by FUNCT_7:31;
              end;
              suppose
A23:             k < i;
A24:             f.(i+1) = f.i+*(i,a.i) & k in dom (f.i)
                by A20,A12,A15,A22,AFINSQ_1:86;
                thus a.k = (f.i).k by A15,A23,A16,NAT_1:13 .= f.(i+1).k
                by A23,A24,FUNCT_7:32;
              end;
            end;
          end;
        end;
A25:     for i being Nat holds Q[i] from NAT_1:sch 2(A13,A14);
        then
        (len a <> 0 implies len (f.len a) = j)
        & for i being Nat st i < len a holds a.i = (f.len a).i;
        then
A26:     f.len a = a by A8,AFINSQ_1:9;
        defpred R[Nat] means 1 <= $1 & $1 <= len a implies
        f.$1 in (the Sorts of Q).the_array_sort_of S;
A27:     R[0];
A28:     now let i be Nat;
          assume
A29:       R[i];
          thus R[i+1]
          proof
            assume
A30:         1 <= i+1 & i+1 <= len a;
            then
A31:         i < len a by NAT_1:13;
            per cases by NAT_1:14;
            suppose
A32:           i >= 1;
              then reconsider fi = f.i as Element of Q, the_array_sort_of S
              by A29,A30,NAT_1:13;
              fi in (the Sorts of A).J by A5,Th2;
              then reconsider ff = fi as finite Sequence of INT by A2;
              reconsider ii = i as Element of (the Sorts of Q).I
              by A1,INT_1:def 2;
              reconsider a = G(i) as Element of (the Sorts of Q).I
              by A1,A11,A30,NAT_1:13;
              reconsider b = a, ia = ii as Element of (the Sorts of A).I
              by Th2;
              reconsider fj = fi as Element of A, the_array_sort_of S by Th2;
              f.(i+1) = F(f.i,i,G(i)) & (1=0+1 implies i > 0) &
              f.i in (the Sorts of Q).the_array_sort_of S
              by A29,A32,A12,A30,NAT_1:13;
              then
              len (f.i) = j by A31,A25;
              then
A33:           i in dom ff by A31,AFINSQ_1:86;
              11+3 <= len the connectives of S by AOFA_A00:def 51;
              then 12 <= len the connectives of S by XXREAL_0:2;
              then 12 in dom the connectives of S by FINSEQ_3:25;
              then
A34:           (the connectives of S).12 = (the connectives of S)/.12 &
              (the connectives of S).12 in the carrier' of S
              by PARTFUN1:def 6,FUNCT_1:102;
              then the_arity_of ((the connectives of S)/.12)
              = <*the_array_sort_of S, I, I*> by A3,A4;
              then
A35:           Args((the connectives of S)/.12, Q) = product <*(the Sorts of Q)
              .the_array_sort_of S, (the Sorts of Q).I, (the Sorts of Q).I*>
              by Th24;
              f.(i+1) = ff+*(i,a) by A32,A12,A30,NAT_1:13
              .= Den((the connectives of S)/.12, A).<*fj,ia,b*>
              by A4,A2,A33
              .= Den((the connectives of S)/.12, Q).<*fi,ii,a*>
              by A35,FINSEQ_3:125,EQUATION:19
              .= (fi,ii)<-a by A34,SUBSET_1:def 8;
              hence f.(i+1) in (the Sorts of Q).the_array_sort_of S;
            end;
            suppose
A36:           i = 0;
              reconsider a0 = a.0, ii = j as Element of Q, I
              by A1,INT_1:def 2;
              reconsider b0 = a0, ia = ii as Element of A, I by Th2;
              11+3 <= len the connectives of S by AOFA_A00:def 51;
              then 14 in dom the connectives of S by FINSEQ_3:25;
              then
A37:           (the connectives of S).14 = (the connectives of S)/.14 &
              (the connectives of S).14 in the carrier' of S
              by PARTFUN1:def 6,FUNCT_1:102;
              then the_arity_of ((the connectives of S)/.14) = <*I, I*>
              by A3,A4;
              then
A38:           Args((the connectives of S)/.14, Q)
              = product <*(the Sorts of Q).I, (the Sorts of Q).I*>
              by Th23;
              f.(i+1) = Den((the connectives of S)/.14, A).<*ia,b0*>
              by A36,A12,A8,A4,A2
              .= Den((the connectives of S)/.14, Q).<*ii,a0*>
              by A38,FINSEQ_3:124,EQUATION:19
              .= init.array(ii,a0) by A37,SUBSET_1:def 8;
              hence thesis;
            end;
          end;
        end;
A39:     for i being Nat holds R[i] from NAT_1:sch 2(A27,A28);
        0 < len a by A8;
        then 0+1 <= len a by NAT_1:13;
        hence a in (the Sorts of Q).the_array_sort_of S by A26,A39;
      end;
    end;
    take J,K;
    thus K = 1 by A2;
    thus (the connectives of S).11 is_of_type <*J,1*>, K by A2;
    the Sorts of Q is MSSubset of A by MSUALG_2:def 9;
    hence (the Sorts of Q).J c= ((the Sorts of Q).K)^omega
    by A1,A4,A2,PBOOLE:def 2,def 18;
    thus
A40: ((the Sorts of Q).K)^omega c= (the Sorts of Q).J
    by A5,A6,A1,A4,A2;
    thus (the Sorts of Q).1 = INT by AOFA_A00:55,A4;
    hereby
      let a be 0-based finite array of (the Sorts of Q).K;
A41:   a in ((the Sorts of Q).K)^omega by AFINSQ_1:def 7;
      hereby let i be Integer; assume
A42:     i in dom a;
A43:     i in INT by INT_1:def 2;
        11+3 <= len the connectives of S by AOFA_A00:def 51;
        then 11 <= len the connectives of S by XXREAL_0:2;
        then 11 in dom the connectives of S by FINSEQ_3:25;
        then
        (the connectives of S).11 = (the connectives of S)/.11 &
        (the connectives of S).11 in the carrier' of S
        by PARTFUN1:def 6,FUNCT_1:102;
        then the_arity_of ((the connectives of S)/.11)
        = <*the_array_sort_of S, I*> by A3,A4;
        then
A44:     Args((the connectives of S)/.11, Q) = product <*(the Sorts of Q)
        .the_array_sort_of S, (the Sorts of Q).I*> by Th23;
        thus Den((the connectives of S)/.11,Q).<*a,i*>
        = Den((the connectives of S)/.11,A).<*a,i*>
        by A44,A41,A40,A43,A5,A1,FINSEQ_3:124,EQUATION:19
        .= a.i by A42,A1,A4,A2;
        let x be Element of Q,K;
        11+3 <= len the connectives of S by AOFA_A00:def 51;
        then 12 <= len the connectives of S by XXREAL_0:2;
        then 12 in dom the connectives of S by FINSEQ_3:25;
        then
        (the connectives of S).12 = (the connectives of S)/.12 &
        (the connectives of S).12 in the carrier' of S
        by PARTFUN1:def 6,FUNCT_1:102;
        then the_arity_of ((the connectives of S)/.12)
        = <*the_array_sort_of S, I, I*> by A3,A4;
        then
A45:     Args((the connectives of S)/.12, Q) = product <*(the Sorts of Q)
        .the_array_sort_of S, (the Sorts of Q).I, (the Sorts of Q).I*>
        by Th24;
        thus Den((the connectives of S)/.(11+1),Q).<*a,i,x*>
        = Den((the connectives of S)/.(11+1),A).<*a,i,x*>
        by A45,A1,A41,A40,A2,A5,A4,A43,FINSEQ_3:125,EQUATION:19
        .= a+*(i,x) by A1,A4,A2,A42;
      end;
      11+3 <= len the connectives of S by AOFA_A00:def 51;
      then 13 <= len the connectives of S by XXREAL_0:2;
      then 13 in dom the connectives of S by FINSEQ_3:25;
      then
      (the connectives of S).13 = (the connectives of S)/.13 &
      (the connectives of S).13 in the carrier' of S
      by PARTFUN1:def 6,FUNCT_1:102;
      then the_arity_of ((the connectives of S)/.13)
      = <*the_array_sort_of S*> by A3;
      then
A46:   Args((the connectives of S)/.13, Q) = product <*(the Sorts of Q)
      .the_array_sort_of S*> by Th22;
      thus Den((the connectives of S)/.(11+2),Q).<*a*>
      = Den((the connectives of S)/.(11+2),A).<*a*>
      by A46,A41,A40,A5,FINSEQ_3:123,EQUATION:19
      .= card a by A1,A4,A2;
    end;
    let i be Integer, x be Element of Q,K; assume
A47: i >= 0;
A48: i in INT by INT_1:def 2;
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 14 in dom the connectives of S by FINSEQ_3:25;
    then
    (the connectives of S).14 = (the connectives of S)/.14 &
    (the connectives of S).14 in the carrier' of S
    by PARTFUN1:def 6,FUNCT_1:102;
    then the_arity_of ((the connectives of S)/.14)
    = <*I, K*> by A3,A2,A4;
    then
A49: Args((the connectives of S)/.14, Q) = product <*(the Sorts of Q).I,
    (the Sorts of Q).K*> by Th23;
    thus Den((the connectives of S)/.(11+3),Q).<*i,x*>
    = Den((the connectives of S)/.(11+3),A).<*i,x*>
    by A49,A48,A1,FINSEQ_3:124,EQUATION:19
    .= Segm(i)-->x by A47,A1,A4,A2;
  end;
end;

definition
  let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature;
  let A be non-empty MSAlgebra over S;
  attr A is integer-array means: Def14:
  ex C being image of A st
  C is (4,1) integer (11,1,1)-array bool-correct MSAlgebra over S;
end;

registration
  let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature;
  let X be non-empty ManySortedSet of the carrier of S;
  cluster Free(S,X) -> integer-array for non-empty MSAlgebra over S;
  coherence
  proof let F be non-empty MSAlgebra over S;
    assume
A1: F = Free(S,X);
    set A = the (4,1) integer (11,1,1)-array bool-correct non-empty
    MSAlgebra over S;
    reconsider G = FreeGen X as GeneratorSet of F by A1,MSAFREE3:31;
    set f = the ManySortedFunction of G, the Sorts of A;
    FreeGen X is free & F = FreeMSA X by A1,MSAFREE3:31;
    then consider h being ManySortedFunction of F,A such that
A2: h is_homomorphism F,A & h||G = f by MSAFREE:def 5;
    reconsider C = Image h as image of F by A2,MSAFREE4:def 4;
    take C; thus thesis;
  end;
end;

registration
  let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature;
  cluster integer-array -> integer for non-empty MSAlgebra over S;
  coherence;
  let X be non-empty ManySortedSet of the carrier of S;
  cluster vf-free integer-array for all_vars_including inheriting_operations
  free_in_itself (X,S)-terms non-empty strict
  VarMSAlgebra over S;
  existence
  proof
    set A = Free(S,X);
    consider V being ManySortedMSSet of the Sorts of A,the Sorts of A,
    B being all_vars_including inheriting_operations free_in_itself
    (X,S)-terms VarMSAlgebra over S such that
A1: B = VarMSAlgebra(#the Sorts of A, the Charact of A, V#) &
    B is vf-free by AOFA_A00:39;
    reconsider B as all_vars_including inheriting_operations free_in_itself
    (X,S)-terms strict VarMSAlgebra over S by A1;
    take B; thus B is vf-free by A1;
    consider C being image of A such that
A2: C is (4,1) integer (11,1,1)-array bool-correct MSAlgebra over S by Def14;
    consider h being ManySortedFunction of A,C such that
A3: h is_epimorphism A,C by MSAFREE4:def 5;
    reconsider g = h as ManySortedFunction of B,C by A1;
    the MSAlgebra of C = the MSAlgebra of C;
    then reconsider D = C as image of B by A1,A3,Th8,MSAFREE4:def 5;
    take D; thus thesis by A2;
  end;
end;

registration
  let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature;
  cluster integer-array for non-empty MSAlgebra over S;
  existence
  proof
    set A = the integer-array non-empty VarMSAlgebra over S;
    take A;
    thus thesis;
  end;
end;

registration
  let S be 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature;
  let A be integer-array non-empty MSAlgebra over S;
  cluster (4,1) integer (11,1,1)-array for bool-correct image of A;
  existence
  proof
    consider C being image of A such that
A1: C is (4,1) integer (11,1,1)-array bool-correct MSAlgebra over S by Def14;
    thus thesis by A1;
  end;
end;

reserve
  S for 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature,
  X for non-empty ManySortedSet of the carrier of S,
  T for vf-free all_vars_including inheriting_operations free_in_itself
  (X,S)-terms integer-array non-empty VarMSAlgebra over S,
  C for (11,1,1)-array (4,1) integer bool-correct non-empty image of T,
  G for basic GeneratorSystem over S,X,T,
  A for IfWhileAlgebra of the generators of G,
  I for integer SortSymbol of S,
  x,y,m,i for pure (Element of (the generators of G).I),
  M,N for pure (Element of (the generators of G).the_array_sort_of S),
  b for pure (Element of (the generators of G).the bool-sort of S),
  s,s1 for (Element of C-States(the generators of G));

registration
  let S;
  let A be (11,1,1)-array bool-correct non-empty MSAlgebra over S;
  cluster -> Relation-like Function-like
  for Element of (the Sorts of A).the_array_sort_of S;
  coherence
  proof
    let M be Element of (the Sorts of A).the_array_sort_of S;
    set I = the integer SortSymbol of S;
    consider J,K being Element of S such that
A1: K = 1 & (the connectives of S).11 is_of_type <*J,1*>, K &
    (the Sorts of A).J = ((the Sorts of A).K)^omega &
    (the Sorts of A).1 = INT &
    (for a being 0-based finite array of (the Sorts of A).K holds
    (for i being Integer st i in dom a holds
    Den((the connectives of S)/.11,A).<*a,i*> = a.i &
    for x being Element of A,K holds
    Den((the connectives of S)/.(11+1),A).<*a,i,x*> = a+*(i,x)) &
    Den((the connectives of S)/.(11+2),A).<*a*> = card a) &
    for i being Integer, x being Element of A,K st i >= 0 holds
    Den((the connectives of S)/.(11+3),A).<*i,x*> = Segm(i)-->x
      by AOFA_A00:def 52;
    J = the_array_sort_of S by A1,Th71;
    hence thesis by A1;
  end;
end;

registration
  let S;
  let A be (11,1,1)-array bool-correct non-empty MSAlgebra over S;
  cluster -> finite Sequence-like
  for Element of (the Sorts of A).the_array_sort_of S;
  coherence
  proof
    let M be Element of (the Sorts of A).the_array_sort_of S;
    set I = the integer SortSymbol of S;
    consider J,K being Element of S such that
A1: K = 1 & (the connectives of S).11 is_of_type <*J,1*>, K &
    (the Sorts of A).J = ((the Sorts of A).K)^omega &
    (the Sorts of A).1 = INT &
    (for a being 0-based finite array of (the Sorts of A).K holds
    (for i being Integer st i in dom a holds
    Den((the connectives of S)/.11,A).<*a,i*> = a.i &
    for x being Element of A,K holds
    Den((the connectives of S)/.(11+1),A).<*a,i,x*> = a+*(i,x)) &
    Den((the connectives of S)/.(11+2),A).<*a*> = card a) &
    for i being Integer, x being Element of A,K st i >= 0 holds
    Den((the connectives of S)/.(11+3),A).<*i,x*> = Segm(i)-->x
      by AOFA_A00:def 52;
    J = the_array_sort_of S by A1,Th71;
    hence thesis by A1;
  end;
end;

theorem Th75:
  for o being OperSymbol of S st
  o = In((the connectives of S).11, the carrier' of S)
  holds the_arity_of o = <*the_array_sort_of S,I*> &
  the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).11, the carrier' of S);
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 11 <= len the connectives of S by XXREAL_0:2;
    then 11 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).11 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*the_array_sort_of S,I*>, I by Th73;
    hence the_arity_of o = <*the_array_sort_of S,I*> &
    the_result_sort_of o = I;
  end;

theorem Th76:
  for o being OperSymbol of S st
  o = In((the connectives of S).12, the carrier' of S)
  holds the_arity_of o = <*the_array_sort_of S,I,I*> &
  the_result_sort_of o = the_array_sort_of S
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).12, the carrier' of S);
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 12 <= len the connectives of S by XXREAL_0:2;
    then 12 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).12 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*the_array_sort_of S,I,I*>, the_array_sort_of S
    by Th73;
    hence the_arity_of o = <*the_array_sort_of S,I,I*> &
    the_result_sort_of o = the_array_sort_of S;
  end;

theorem Th77:
  for o being OperSymbol of S st
  o = In((the connectives of S).13, the carrier' of S)
  holds the_arity_of o = <*the_array_sort_of S*> &
  the_result_sort_of o = I
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).13, the carrier' of S);
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 13 <= len the connectives of S by XXREAL_0:2;
    then 13 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).13 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*the_array_sort_of S*>, I by Th73;
    hence the_arity_of o = <*the_array_sort_of S*> &
    the_result_sort_of o = I;
  end;

theorem Th78:
  for o being OperSymbol of S st
  o = In((the connectives of S).14, the carrier' of S)
  holds the_arity_of o = <*I,I*> &
  the_result_sort_of o = the_array_sort_of S
  proof
    let o be OperSymbol of S;
    assume A1: o = In((the connectives of S).14, the carrier' of S);
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 14 in dom the connectives of S by FINSEQ_3:25;
    then o = (the connectives of S).14 by A1,FUNCT_1:102,SUBSET_1:def 8;
    then o is_of_type <*I,I*>, the_array_sort_of S by Th73;
    hence the_arity_of o = <*I,I*> &
    the_result_sort_of o = the_array_sort_of S;
  end;

theorem Th79:
  for t being Element of T, the_array_sort_of S holds
  for t1 being Element of T, I holds
  t.(t1) value_at(C,s) = (t value_at(C,s)).(t1 value_at(C,s))
  proof
    let t be Element of T, the_array_sort_of S;
    let t1 be Element of T, I;
    set o = In((the connectives of S).11, the carrier' of S);
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: t value_at(C,s) = f.(the_array_sort_of S).t by A1,Th29;
A3: (t.t1) value_at(C,s) = f.I.(t.t1) by A1,Th29;
A4: the_arity_of o = <*the_array_sort_of S,I*> &
    the_result_sort_of o = I by Th75;
    then Args(o,T) = product <*(the Sorts of T).the_array_sort_of S,
    (the Sorts of T).I*> by Th23;
    then reconsider p = <*t,t1*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t.t1) value_at(C,s) = Den(o,C).(f#p) by A1,A3,A4
    .= Den(o,C).<*f.(the_array_sort_of S).t,f.I.t1*> by A4,Th26
    .= (t value_at(C,s)).(t1 value_at(C,s)) by A1,A2,Th29;
  end;

theorem Th80:
  for t being Element of T, the_array_sort_of S holds
  for t1,t2 being Element of T, I holds
  (t,t1)<-t2 value_at(C,s) =
  (t value_at(C,s), t1 value_at(C,s))<-(t2 value_at(C,s))
  proof
    let t be Element of T, the_array_sort_of S;
    let t1,t2 be Element of T, I;
    set o = In((the connectives of S).12, the carrier' of S);
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: t2 value_at(C,s) = f.I.t2 by A1,Th29;
A3: t value_at(C,s) = f.(the_array_sort_of S).t by A1,Th29;
A4: (t,t1)<-t2 value_at(C,s) = f.(the_array_sort_of S).((t,t1)<-t2) by A1,Th29;
A5: the_arity_of o = <*the_array_sort_of S,I,I*> &
    the_result_sort_of o = the_array_sort_of S by Th76;
    then Args(o,T) = product <*(the Sorts of T).the_array_sort_of S,
    (the Sorts of T).I, (the Sorts of T).I*> by Th24;
    then reconsider p = <*t,t1,t2*> as Element of Args(o,T) by FINSEQ_3:125;
    thus (t,t1)<-t2 value_at(C,s) = Den(o,C).(f#p) by A1,A4,A5
    .= Den(o,C).<*f.(the_array_sort_of S).t,f.I.t1,f.I.t2*> by A5,Th27
    .= (t value_at(C,s), t1 value_at(C,s))<-(t2 value_at(C,s)) by A1,A2,A3,Th29
;
  end;

theorem Th81:
  for t being Element of T, the_array_sort_of S holds
  length(t,I) value_at(C,s) = length(t value_at(C,s), I)
  proof
    let t be Element of T, the_array_sort_of S;
    set o = In((the connectives of S).13, the carrier' of S);
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: length(t,I) value_at(C,s) = f.I.(length(t,I)) by A1,Th29;
A3: the_arity_of o = <*the_array_sort_of S*> &
    the_result_sort_of o = I by Th77;
    then Args(o,T) = product <*(the Sorts of T).the_array_sort_of S*> by Th22;
    then reconsider p = <*t*> as Element of Args(o,T) by FINSEQ_3:123;
    thus (length(t,I)) value_at(C,s) = Den(o,C).(f#p)
    by A1,A2,A3
    .= Den(o,C).<*f.(the_array_sort_of S).t*> by A3,Th25
    .= length(t value_at(C,s),I) by A1,Th29;
  end;

theorem
  for t1,t2 being Element of T, I holds
  init.array(t1,t2) value_at(C,s) =
  init.array(t1 value_at(C,s), t2 value_at(C,s))
  proof
    let t1,t2 be Element of T, I;
    set o = In((the connectives of S).14, the carrier' of S);
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & s = f||(the generators of G) by AOFA_A00:def 19;
A2: t2 value_at(C,s) = f.I.t2 by A1,Th29;
A3: init.array(t1,t2) value_at(C,s) = f.(the_array_sort_of S)
    .(init.array(t1,t2)) by A1,Th29;
A4: the_arity_of o = <*I,I*> &
    the_result_sort_of o = the_array_sort_of S by Th78;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (init.array(t1,t2)) value_at(C,s) = Den(o,C).(f#p)
    by A1,A3,A4
    .= Den(o,C).<*f.I.t1,f.I.t2*> by A4,Th26
    .= init.array(t1 value_at(C,s),t2 value_at(C,s)) by A1,A2,Th29;
  end;

reserve u for ManySortedFunction of FreeGen T, the Sorts of C;

theorem
  for t being Element of T, the_array_sort_of S holds
  for t1 being Element of T, I holds
  t.(t1) value_at(C,u) = (t value_at(C,u)).(t1 value_at(C,u))
  proof
    let t be Element of T, the_array_sort_of S;
    let t1 be Element of T, I;
    set o = In((the connectives of S).11, the carrier' of S);
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: t value_at(C,u) = f.(the_array_sort_of S).t by A1,Th28;
A3: (t.t1) value_at(C,u) = f.I.(t.t1) by A1,Th28;
A4: the_arity_of o = <*the_array_sort_of S,I*> &
    the_result_sort_of o = I by Th75;
    then Args(o,T) = product <*(the Sorts of T).the_array_sort_of S,
    (the Sorts of T).I*> by Th23;
    then reconsider p = <*t,t1*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (t.t1) value_at(C,u) = Den(o,C).(f#p) by A1,A3,A4
    .= Den(o,C).<*f.(the_array_sort_of S).t,f.I.t1*> by A4,Th26
    .= (t value_at(C,u)).(t1 value_at(C,u)) by A1,A2,Th28;
  end;

theorem Th84:
  for t being Element of T, the_array_sort_of S holds
  for t1,t2 being Element of T, I holds
  (t,t1)<-t2 value_at(C,u) =
  (t value_at(C,u), t1 value_at(C,u))<-(t2 value_at(C,u))
  proof
    let t be Element of T, the_array_sort_of S;
    let t1,t2 be Element of T, I;
    set o = In((the connectives of S).12, the carrier' of S);
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: t2 value_at(C,u) = f.I.t2 by A1,Th28;
A3: t value_at(C,u) = f.(the_array_sort_of S).t by A1,Th28;
A4: (t,t1)<-t2 value_at(C,u) = f.(the_array_sort_of S).((t,t1)<-t2) by A1,Th28;
A5: the_arity_of o = <*the_array_sort_of S,I,I*> &
    the_result_sort_of o = the_array_sort_of S by Th76;
    then Args(o,T) = product <*(the Sorts of T).the_array_sort_of S,
    (the Sorts of T).I, (the Sorts of T).I*> by Th24;
    then reconsider p = <*t,t1,t2*> as Element of Args(o,T) by FINSEQ_3:125;
    thus (t,t1)<-t2 value_at(C,u) = Den(o,C).(f#p) by A1,A4,A5
    .= Den(o,C).<*f.(the_array_sort_of S).t,f.I.t1,f.I.t2*> by A5,Th27
    .= (t value_at(C,u), t1 value_at(C,u))<-(t2 value_at(C,u))
    by A1,A2,A3,Th28;
  end;

theorem
  for t being Element of T, the_array_sort_of S holds
  length(t,I) value_at(C,u) = length(t value_at(C,u), I)
  proof
    let t be Element of T, the_array_sort_of S;
    set o = In((the connectives of S).13, the carrier' of S);
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: length(t,I) value_at(C,u) = f.I.(length(t,I)) by A1,Th28;
A3: the_arity_of o = <*the_array_sort_of S*> &
    the_result_sort_of o = I by Th77;
    then Args(o,T) = product <*(the Sorts of T).the_array_sort_of S*> by Th22;
    then reconsider p = <*t*> as Element of Args(o,T) by FINSEQ_3:123;
    thus (length(t,I)) value_at(C,u) = Den(o,C).(f#p)
    by A1,A2,A3
    .= Den(o,C).<*f.(the_array_sort_of S).t*> by A3,Th25
    .= length(t value_at(C,u),I) by A1,Th28;
  end;

theorem
  for t1,t2 being Element of T, I holds
  init.array(t1,t2) value_at(C,u) =
  init.array(t1 value_at(C,u), t2 value_at(C,u))
  proof
    let t1,t2 be Element of T, I;
    set o = In((the connectives of S).14, the carrier' of S);
    consider f being ManySortedFunction of T,C such that
A1: f is_homomorphism T,C & u = f||FreeGen T by MSAFREE4:46;
A2: t2 value_at(C,u) = f.I.t2 by A1,Th28;
A3: init.array(t1,t2) value_at(C,u) = f.(the_array_sort_of S)
    .(init.array(t1,t2)) by A1,Th28;
A4: the_arity_of o = <*I,I*> &
    the_result_sort_of o = the_array_sort_of S by Th78;
    then Args(o,T) = product <*(the Sorts of T).I, (the Sorts of T).I*>
    by Th23;
    then reconsider p = <*t1,t2*> as Element of Args(o,T) by FINSEQ_3:124;
    thus (init.array(t1,t2)) value_at(C,u) = Den(o,C).(f#p)
    by A1,A3,A4
    .= Den(o,C).<*f.I.t1,f.I.t2*> by A4,Th26
    .= init.array(t1 value_at(C,u),t2 value_at(C,u)) by A1,A2,Th28;
  end;

Lm1:
  now
    let S,X,T,I;
    let i be Integer;
    let f1 being Function of INT, (the Sorts of T).I such that
A1: f1.0 = \0(T,I) &
    for j being Nat, t being Element of T,I st f1.j = t
    holds f1.(j+1) = t+\1(T,I) & f1.(-(j+1)) = -(t+\1(T,I));
    let f2 being Function of INT, (the Sorts of T).I such that
A2: f2.0 = \0(T,I) &
    for j being Nat, t being Element of T,I st f2.j = t
    holds f2.(j+1) = t+\1(T,I) & f2.(-(j+1)) = -(t+\1(T,I));
    defpred P[Nat] means f1.$1 = f2.$1;
A3: P[0] by A1,A2;
A4: for i being Nat st P[i] holds P[i+1]
    proof
      let i be Nat;
      assume
A5:   P[i];
      reconsider j = i as Element of INT by INT_1:def 2;
      thus f1.(i+1) = (f1.j)+\1(T,I) by A1 .= f2.(i+1) by A2,A5;
    end;
A6: for i being Nat holds P[i] from NAT_1:sch 2(A3,A4);
    now let i be Element of INT;
      consider n being Nat such that
A7:   i = n or i = -n by INT_1:def 1;
      per cases by A7;
      suppose i = n or i = -n & n = 0;
        hence f1.i = f2.i by A6;
      end;
      suppose
A8:     i = -n & n <> 0;
        then consider m being Nat such that
A9:     n = m+1 by NAT_1:6;
        reconsider m0 = m, m1 = m+1 as Element of INT by INT_1:def 2;
        thus f1.i = -(f1.m0+\1(T,I)) by A1,A9,A8
        .= -(f2.m0+\1(T,I)) by A6 .= f2.i by A2,A9,A8;
      end;
    end;
    hence f1 = f2;
  end;

definition
  let S,X,T,I;
  let i be Integer;
  func ^(i,T,I) -> Element of T,I means: Def15:
  ex f being Function of INT, (the Sorts of T).I st
  it = f.i & f.0 = \0(T,I) &
  for j being Nat, t being Element of T,I st f.j = t
  holds f.(j+1) = t+\1(T,I) & f.(-(j+1)) = -(t+\1(T,I));
  existence
  proof
    deffunc F(Nat,Element of T,I) = $2+\1(T,I);
    consider f being Function of NAT,(the Sorts of T).I such that
A1: f.0 = \0(T,I) & for i being Nat holds f.(i+1) = F(i,f.i) from NAT_1:sch 12;
    set X = {-j where j is Nat: j <> 0};
    -1 in X;
    then reconsider X as non empty set;
    X is integer-membered
    proof
      let x be object;
      assume x in X;
      then ex j being Nat st x = -j & j <> 0;
      hence thesis;
    end;
    then reconsider X as non empty integer-membered set;
    deffunc G(Integer) = -(f.In(-$1,NAT));
    consider g being Function of X,(the Sorts of T).I such that
A2: for i being Element of X holds g.i = G(i) from FUNCT_2:sch 4;
    set h = f+*g;
A3: dom h = (dom f) \/ dom g by FUNCT_4:def 1
    .= NAT \/ dom g by FUNCT_2:def 1 .= NAT \/ X by FUNCT_2:def 1;
A4: NAT \/ X = INT
    proof
      thus NAT \/ X c= INT by MEMBERED:5;
      let x be Integer; assume x in INT;
      then consider n being Nat such that
A5:   x = n or x = -n by INT_1:def 1;
A6:    n in NAT by ORDINAL1:def 12;
      per cases by A5;
      suppose x = n;
        hence thesis by XBOOLE_0:def 3,A6;
      end;
      suppose x = -n & n = 0;
        hence thesis by XBOOLE_0:def 3;
      end;
      suppose x = -n & n <> 0;
        then x in X;
        hence thesis by XBOOLE_0:def 3;
      end;
    end;
    rng f c= (the Sorts of T).I & rng g c= (the Sorts of T).I
    by RELAT_1:def 19;
    then rng h c= (rng f)\/rng g & (rng f)\/rng g c= (the Sorts of T).I
    by XBOOLE_1:8,FUNCT_4:17;
    then reconsider h as Function of INT,(the Sorts of T).I
    by A3,A4,FUNCT_2:2,XBOOLE_1:1;
    reconsider j = i as Element of INT by INT_1:def 2;
    reconsider t = h.j as Element of T,I;
    take t, h; thus t = h.i;
    -0 nin X
    proof
      assume -0 in X;
      then ex n being Nat st -0 = -n & n <> 0;
      hence contradiction;
    end;
    then 0 nin dom g by FUNCT_2:def 1;
    hence h.0 = \0(T,I) by A1,FUNCT_4:11;
    let j be Nat, t be Element of T,I; assume
A7: h.j = t;
    j nin X
    proof
      assume j in X;
      then consider n being Nat such that
A8:   j = -n & n <> 0;
      j in NAT by ORDINAL1:def 12;
      hence contradiction by A8,INT_2:6;
    end;
    then j nin dom g by FUNCT_2:def 1;
    then
A9: h.j = f.j by FUNCT_4:11;
    j+1 nin X
    proof
      assume j+1 in X;
      then consider n being Nat such that
A10:   j+1 = -n & n <> 0;
      thus contradiction by A10;
    end;
    then j+1 nin dom g by FUNCT_2:def 1;
    hence h.(j+1) = f.(j+1) by FUNCT_4:11 .= t+\1(T,I) by A1,A7,A9;
A11: -(j+1) in X;
    then -(j+1) in dom g by FUNCT_2:def 1;
    hence h.(-(j+1)) = g.(-(j+1)) by FUNCT_4:13 .= G(-(j+1)) by A11,A2
    .= -(f.(j+1))
    .= -(t+\1(T,I)) by A1,A7,A9;
  end;
  uniqueness by Lm1;
end;

theorem Th87:
  ^(0,T,I) = \0(T,I)
  proof
    ex f being Function of INT, (the Sorts of T).I st
    ^(0,T,I) = f.0 & f.0 = \0(T,I) &
    for j being Nat, t being Element of T,I st f.j = t
    holds f.(j+1) = t+\1(T,I) & f.(-(j+1)) = -(t+\1(T,I)) by Def15;
    hence thesis;
  end;

theorem Th88:
  for n being Nat holds ^(n+1,T,I) = ^(n,T,I)+\1(T,I) &
  ^(-(n+1),T,I) = - ^(n+1,T,I)
  proof
    let n be Nat;
    consider f being Function of INT, (the Sorts of T).I such that
A1: ^(n+1,T,I) = f.(n+1) & f.0 = \0(T,I) &
    for j being Nat, t being Element of T,I st f.j = t
    holds f.(j+1) = t+\1(T,I) & f.(-(j+1)) = -(t+\1(T,I)) by Def15;
    consider g being Function of INT, (the Sorts of T).I such that
A2: ^(n,T,I) = g.n & g.0 = \0(T,I) &
    for j being Nat, t being Element of T,I st g.j = t
    holds g.(j+1) = t+\1(T,I) & g.(-(j+1)) = -(t+\1(T,I)) by Def15;
    consider h being Function of INT, (the Sorts of T).I such that
A3: ^(-(n+1),T,I) = h.(-(n+1)) & h.0 = \0(T,I) &
    for j being Nat, t being Element of T,I st h.j = t
    holds h.(j+1) = t+\1(T,I) & h.(-(j+1)) = -(t+\1(T,I)) by Def15;
A4: f = g by A1,A2,Lm1;
    ^(n,T,I) = f.n by A1,A2,Lm1;
    hence
A5: ^(n+1,T,I) = ^(n,T,I)+\1(T,I) by A1;
    f = h by A1,A3,Lm1;
    hence ^(-(n+1),T,I) = - ^(n+1,T,I) by A3,A5,A4,A2;
  end;

theorem
  ^(1,T,I) = \0(T,I)+\1(T,I)
  proof 1 = 0+1;
    hence ^(1,T,I) = ^(0,T,I)+\1(T,I) by Th88 .= \0(T,I)+\1(T,I) by Th87;
  end;

theorem Th90:
  for i being Integer holds ^(i,T,I) value_at(C,s) = i
  proof
    let i be Integer;
    defpred P[Nat] means ^($1,T,I) value_at(C,s) = $1;
    ^(0,T,I) = \0(T,I) by Th87;
    then
A1: P[0] by Th36;
A2: now let i be Nat;
      assume
A3:   P[i];
A4:   \1(T,I) value_at(C,s) = 1 by Th37;
      ^(i+1,T,I) = ^(i,T,I)+\1(T,I) by Th88;
      then ^(i+1,T,I) value_at(C,s)
      = (^(i,T,I) value_at(C,s))+(\1(T,I) value_at(C,s)) by Th39
      .= (^(i,T,I) value_at(C,s))+1 by A4,AOFA_A00:55;
      hence P[i+1] by A3;
    end;
A5: for i being Nat holds P[i] from NAT_1:sch 2(A1,A2);
    i in INT by INT_1:def 2;
    then consider n being Nat such that
A6: i = n or i = -n by INT_1:def 1;
    per cases by A6;
    suppose i = n or i = -n & n = 0;
      hence thesis by A5;
    end;
    suppose
A7:   i = -n & n <> 0;
      then consider m being Nat such that
A8:   n = m+1 by NAT_1:6;
      \1(T,I) value_at(C,s) = 1 & ^(m,T,I) value_at(C,s) = m by A5,Th37;
      then
A9:   (^(m,T,I) value_at(C,s))+(\1(T,I) value_at(C,s)) = m+1 by AOFA_A00:55;
      ^(i,T,I) = - ^(m+1,T,I) by A7,A8,Th88;
      hence ^(i,T,I) value_at(C,s)
      = -(^(m+1,T,I) value_at(C,s)) by Th38
      .= -((^(m,T,I)+\1(T,I)) value_at(C,s)) by Th88
      .= -((^(m,T,I) value_at(C,s))+(\1(T,I) value_at(C,s))) by Th39
      .= i by A7,A8,A9,AOFA_A00:55;
    end;
  end;

definition
  let S,X,T,G,I,M;
  let i be Integer;
  func M.(i,I) -> Element of T,I equals @M.(^(i,T,I));
  coherence;
end;

registration
  let S,X,T,G,C,s,M;
  cluster s.(the_array_sort_of S).M -> Function-like Relation-like;
  coherence
  proof
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then s.(the_array_sort_of S) is Function of (the generators of G)
    .the_array_sort_of S, (the Sorts of C).the_array_sort_of S
    by PBOOLE:def 15;
    then
A1: s.(the_array_sort_of S).M in (the Sorts of C).the_array_sort_of S
    by FUNCT_2:5;
    thus thesis by A1;
  end;
end;

registration
  let S,X,T,G,C,s,M;
  cluster s.(the_array_sort_of S).M -> finite Sequence-like INT-valued;
  coherence
  proof
    s is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    then s.(the_array_sort_of S) is Function of (the generators of G)
    .the_array_sort_of S, (the Sorts of C).the_array_sort_of S
    by PBOOLE:def 15;
    then
A1: s.(the_array_sort_of S).M in (the Sorts of C).the_array_sort_of S
    by FUNCT_2:5;
    (the Sorts of C).the_array_sort_of S = INT^omega by Th74;
    hence thesis by A1;
  end;
end;

registration
  let S,X,T,G,C,s,M;
  cluster rng (s.(the_array_sort_of S).M) -> finite integer-membered;
  coherence;
end;

theorem
  for j being Integer st j in dom (s.(the_array_sort_of S).M) &
  M.(j,I) in (the generators of G).I
  holds s.(the_array_sort_of S).M.j = s.I.(M.(j,I))
  proof
    let j be Integer;
    assume
A1: j in dom (s.(the_array_sort_of S).M);
    assume
A2: M.(j,I) in (the generators of G).I;
    reconsider s1 = s as ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48;
    consider h being ManySortedFunction of T,C such that
A3: h is_homomorphism T,C & s1 = h||the generators of G by AOFA_A00:def 19;
A4: ^(j,T,I) value_at(C,s) = j & @M value_at(C,s) = s.(the_array_sort_of S).M
    by Th61,Th90;
    s.I.(M.(j,I)) = (h.I)|((the generators of G).I).(M.(j,I))
    by A3,MSAFREE:def 1
    .= h.I.(@M.(^(j,T,I))) by A2,FUNCT_1:49
    .= @M.(^(j,T,I)) value_at(C,s) by A3,Th29
    .= (@M value_at(C,s)).(^(j,T,I) value_at(C,s)) by Th79
    .= (s1.(the_array_sort_of S).M).j by A1,A4,Th74;
    hence s.(the_array_sort_of S).M.j = s.I.(M.(j,I));
  end;

theorem
  for j being Integer st j in dom (s.(the_array_sort_of S).M) &
  @M.(@i) in (the generators of G).I & j = @i value_at(C,s) holds
  s.(the_array_sort_of S).M.(@i value_at(C,s)) = s.I.(@M.(@i))
  proof
    let j be Integer;
    assume A1: j in dom (s.(the_array_sort_of S).M);
    assume A2: @M.(@i) in (the generators of G).I;
    assume A3: j = @i value_at(C,s);
    reconsider s1 = s as ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48;
    consider h being ManySortedFunction of T,C such that
A4: h is_homomorphism T,C & s1 = h||the generators of G by AOFA_A00:def 19;
    s.(the_array_sort_of S).M = @M value_at(C,s) by Th61;
    hence s.(the_array_sort_of S).M.(@i value_at(C,s))
    = (@M value_at(C,s)).(@i value_at(C,s)) by A1,A3,Th74
    .= @M.@i value_at(C,s) by Th79
    .= h.I.(@M.@i) by A4,Th29
    .= ((h.I)|((the generators of G).I)).(@M.@i) by A2,FUNCT_1:49
    .= s.I.(@M.(@i)) by A4,MSAFREE:def 1;
  end;

registration
  let X be non empty set;
  cluster X^omega -> infinite;
  coherence
  proof
    set x = the Element of X;
    set Y = the set of all n-->x where n is Nat;
A1: Y c= X^omega
    proof
      let a be object;
      assume a in Y;
      then ex n being Nat st a = n qua set-->x;
      hence thesis by AFINSQ_1:def 7;
    end;
    defpred P[object,object] means
    ex z being set st z = $1 & $2 = card z;
A2: for e being object st e in Y ex u being object st P[e,u]
    proof
      let e be object such that e in Y;
      reconsider e as set by TARSKI:1;
      take card e;
      thus thesis;
    end;
    consider f being Function such that
A3: dom f = Y & for a being object st a in Y holds P[a,f.a]
    from CLASSES1:sch 1(A2);
    rng f = NAT
    proof
      thus rng f c= NAT
      proof
        let a be object; assume a in rng f;
        then consider b being object such that
A4:     b in dom f & a = f.b by FUNCT_1:def 3;
        consider n being Nat such that
A5:     b = n-->x by A3,A4;
        ex z being set st z = b & f.b = card z by A3,A4;
        then a = card dom(n-->x) by A4,A5
        .= card n .= n;
        hence a in NAT by ORDINAL1:def 12;
      end;
      let n be Nat;
      assume n in NAT;
A6:   n-->x in Y;
      then ex z being set st z = n-->x & f.(n-->x) = card z by A3;
      then f.(n-->x) = card dom (n-->x)
      .= card n .= n;
      hence n in rng f by A3,A6,FUNCT_1:def 3;
    end;
    hence thesis by A1,A3,FINSET_1:8;
  end;
end;

theorem
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G, b) st
  f in C-Execution(A,b,\falseC) & G is C-supported & i <> m &
  s.(the_array_sort_of S).M <> {} holds
  for n being Nat st
  f.(s, m:=(\0(T,I),A)\;
        for-do(i:=(\1(T,I),A), b gt(length(@M,I),@i,A), i:=(@i+\1(T,I),A),
               if-then(b gt(@M.(@i), @M.(@m), A), m:=(@i,A)))).I.m = n
  for X being non empty finite integer-membered set
  st X = rng (s.(the_array_sort_of S).M)
  holds (M.(n,I)) value_at(C,s) = max X
  proof let f be ExecutionFunction of A, C-States(the generators of G),
    (\falseC)-States(the generators of G, b) such that
A1: f in C-Execution(A,b,\falseC) & G is C-supported & i <> m and
A2: s.(the_array_sort_of S).M <> {};
    let n be Nat;
    assume
A3: f.(s, m:=(\0(T,I),A)\;
          for-do(i:=(\1(T,I),A), b gt(length(@M,I),@i,A), i:=(@i+\1(T,I),A),
            if-then(b gt(@M.(@i), @M.(@m), A), m:=(@i,A)
            )
          )
      ).I.m = n;
    let X be non empty finite integer-membered set;
    assume
A4: X = rng (s.(the_array_sort_of S).M);
    set ST = C-States(the generators of G);
    set TV = (\falseC)-States(the generators of G, b);
    defpred R[Element of ST] means
    s.(the_array_sort_of S).M = $1.(the_array_sort_of S).M;
    reconsider sm = s as ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48;
    reconsider z = sm.(the_array_sort_of S).M as 0-based finite array of INT;
    defpred P[Element of ST] means R[$1] &
    $1.I.i in NAT & $1.I.m in NAT & $1.I.i <= len z & $1.I.m < $1.I.i &
    $1.I.m < len z &
    for mx being Integer st mx = $1.I.m
    for j being Nat st j < $1.I.i
    holds z.j <= z.mx;
    defpred Q[Element of ST] means R[$1] &
    $1.I.i < (length(@M,I)) value_at(C,s);
    set s0 = s;
    set s1 = f.(s,m:=(\0(T,I),A));
    set s2 = f.(s1,i:=(\1(T,I),A));
    set W = b gt(length(@M,I),@i,A);
    set K = i:=(@i+\1(T,I),A);
    set s3 = f.(s2,W);
    set CJ = b gt(@M.(@i), @M.(@m), A);
    set IJ = m:=(@i,A);
    set J = if-then(CJ, IJ);
    set a = the_array_sort_of S;
A5: I <> the bool-sort of S by AOFA_A00:53;
A6: f complies_with_if_wrt TV by AOFA_000:def 32;
A7: s1.I.m = \0(T,I) value_at(C,s) by A1,Th65;
A8:\0(T,I) value_at(C,s) = 0 by Th36;
A9: s2.I.m = s1.I.m by A1,Th65;
A10: s2.I.i = \1(T,I) value_at(C,s1) by A1,Th65 .= 1 by Th37;
A11: s3.I.i = s2.I.i by A1,A5,Th65;
    consider J1,K1,L1 being Element of S such that
A12: L1 = 1 & K1 = 1 & J1 <> L1 & J1 <> K1 &
    (the connectives of S).11 is_of_type <*J1,K1*>, L1 &
    (the connectives of S).(11+1) is_of_type <*J1,K1,L1*>, J1 &
    (the connectives of S).(11+2) is_of_type <*J1*>, K1 &
    (the connectives of S).(11+3) is_of_type <*K1,L1*>, J1 by AOFA_A00:def 51;
A13: (the Sorts of C).the_array_sort_of S = INT^omega &
    (the Sorts of C).the bool-sort of S = BOOLEAN by Th74,AOFA_A00:def 32;
A14: the bool-sort of S <> I by AOFA_A00:53;
A15: the_array_sort_of S <> I by A12,Th71;
    then
A16: s1.(the_array_sort_of S).M = s.(the_array_sort_of S).M by A1,Th65;
A17: s3.(the_array_sort_of S).M = s2.(the_array_sort_of S).M by A13,A1,Th65;
A18: P[s2]
    proof
      thus R[s2] by A15,A1,Th65,A16;
      thus s2.I.i in NAT & s2.I.m in NAT by A7,A8,A9,A10;
      0 < len z & 0+1 = 1 by A2,NAT_1:3;
      hence s2.I.i <= len z & s2.I.m < s2.I.i & s2.I.m < len z
      by A7,A8,A9,A10,NAT_1:13;
      let mx be Integer; assume
A19:   mx = s2.I.m;
      let j be Nat; assume
A20:   j < s2.I.i;
      1=0+1;
      then j <= 0 & j >= 0 by A20,A10,NAT_1:13;
      then
A21:   j = 0;
      thus z.j <= z.mx by A21,A19,A8,A9,A1,Th65;
    end;
    deffunc F(Element of ST)
    = In((len(s0.(the_array_sort_of S).M))-$1.I.i,NAT);
A22: f.(s2,W) in TV iff Q[f.(s2,W)]
    proof
A23:   @i value_at(C,s2) < length(@M,I) value_at(C,s2) iff f.(s2, W) in TV
      by A1,Th66;
      length(@M,I) value_at(C,s2) = length(@M value_at(C,s2),I) by Th81
      .= len (@M value_at(C,s2)) by Th74
      .= len(s2.(the_array_sort_of S).M) by Th61
      .= len(s0.(the_array_sort_of S).M) by A15,A1,Th65,A16
      .= len(@M value_at(C,s0)) by Th61
      .= length(@M value_at(C,s0), I) by Th74
      .= length(@M,I) value_at(C,s0) by Th81;
      hence thesis by A15,A1,Th65,A16,A17,A11,A23,Th61;
    end;
A24: len(@M value_at(C,s0))
     = length(@M value_at(C,s0),I) by Th74
     .= length(@M,I) value_at(C,s0) by Th81;
A25: for s being Element of ST st Q[s]
    holds (Q[f.(s,J\;K\;W)] iff f.(s,J\;K\;W) in TV) & F(f.(s,J\;K\;W)) < F(s)
    proof
      let s be Element of ST;
      assume A26: Q[s];
A27:   f.(s,J\;K\;W) = f.(f.(s, J\;K), W) & f.(s,J\;K) = f.(f.(s,J),K)
      by AOFA_000:def 29;
      hereby
A28:     f.(s,J\;K\;W).I.i = f.(s,J\;K).I.i by A14,A27,A1,Th65;
A29:     s.a.M = f.(s,CJ).a.M by A13,A1,Th65;
A30:     s.I.i = f.(s,CJ).I.i by A14,A1,Th65;
A31:     now
          per cases;
          suppose f.(s,CJ) in TV;
            then f.(s,J) = f.(f.(s,CJ),IJ) by A6;
            hence f.(s,J).a.M = s.a.M & f.(s,J).I.i = s.I.i
            by A15,A1,A29,A30,Th65;
          end;
          suppose f.(s,CJ) nin TV;
            then f.(s,J) = f.(f.(s,CJ),EmptyIns A) by A6;
            hence f.(s,J).a.M = s.a.M & f.(s,J).I.i = s.I.i
            by A29,A30,AOFA_000:def 28;
          end;
        end;
A32:    (f.(s,J\;K).(the_array_sort_of S).M)
        = (s.(the_array_sort_of S).M) by A31,A27,A15,A1,Th65;
        length(@M,I) value_at(C,f.(s,J\;K))
        = length(@M value_at(C,f.(s,J\;K)),I) by Th81
        .= len(@M value_at(C,f.(s,J\;K))) by Th74
        .= len(f.(s,J\;K).(the_array_sort_of S).M) by Th61
        .= len(@M value_at(C,s0)) by A32,A26,Th61;
        then
        Q[f.(s,J\;K\;W)] iff @i value_at(C,f.(s,J\;K)) <
        length(@M,I) value_at(C,f.(s,J\;K))
        by A26,A28,A24,A32,A27,A13,A1,Th65,Th61;
        hence Q[f.(s,J\;K\;W)] iff f.(s,J\;K\;W) in TV
        by A1,A27,Th66;
      end;
      reconsider sJ = f.(s,J) as ManySortedFunction of the generators of G,
      the Sorts of C by AOFA_A00:48;
      reconsider a = sJ.I.i as Element of C,I;
A33:   @i value_at(C,f.(s,J)) = f.(s,J).I.i &
      \1(T,I) value_at(C,f.(s,J)) = 1 by Th37,Th61;
      f.(s,J\;K\;W) = f.(f.(s,J\;K),W) by AOFA_000:def 29
      .= f.(f.(f.(s,J),K),W) by AOFA_000:def 29;
      then
A34:   f.(s,J\;K\;W).I.i
      = f.(f.(s,J),K).I.i by A1,Th65,A14
      .= (@i+\1(T,I)) value_at(C,f.(s,J)) by A1,Th65
      .= (@i value_at(C,f.(s,J)))+(\1(T,I) value_at(C,f.(s,J))) by Th39
      .= f.(s,J).I.i + 1 by A33,AOFA_A00:55;
      @M value_at(C,s0) = s0.(the_array_sort_of S).M &
      s.I.i < (length(@M,I)) value_at(C,s0) &
      (length(@M,I)) value_at(C,s0) = length(@M value_at(C,s0),I)
      by A26,Th61,Th81;
      then
A35:   s.I.i < len(s0.(the_array_sort_of S).M) by Th74;
      then
A36:   (len(s0.(the_array_sort_of S).M))-s.I.i > 0 by XREAL_1:50;
      (len(s0.(the_array_sort_of S).M))-s.I.i >= 0+1 by A35,XREAL_1:50,INT_1:7;
      then
A37:   (len(s0.(the_array_sort_of S).M))-s.I.i-1 >= 1-1 by XREAL_1:9;
      per cases;
      suppose @M.(@i) value_at(C,s) > @M.(@m) value_at(C,s);
        then f.(s,CJ) in TV & f complies_with_if_wrt TV
        by A1,Th66,AOFA_000:def 32;
        then
A38:     f.(s,J).I.i = f.(f.(s,CJ),IJ).I.i
        .= f.(s,CJ).I.i by A1,Th65
        .= s.I.i by A14,A1,Th65;
        F(f.(s,J\;K\;W)) = (len(s0.(the_array_sort_of S).M))-s.I.i-1
        by A34,A38,A37,INT_1:3,SUBSET_1:def 8;
        then F(f.(s,J\;K\;W)) = F(s)-1 by A36,INT_1:3,SUBSET_1:def 8;
        hence F(f.(s,J\;K\;W)) < F(s) by XREAL_1:44;
      end;
      suppose @M.(@i) value_at(C,s) <= @M.(@m) value_at(C,s);
        then f.(s,CJ) nin TV & f complies_with_if_wrt TV
        by A1,Th66,AOFA_000:def 32;
        then f.(s,J) = f.(f.(s,CJ),EmptyIns A)
        .= f.(s,CJ) by AOFA_000:def 28;
        then f.(s,J).I.i = s.I.i by A1,Th65,A14;
        then F(f.(s,J\;K\;W))
        = len(s0.(the_array_sort_of S).M)-s.I.i-1
        by A34,A37,INT_1:3,SUBSET_1:def 8
        .= F(s)-1 by A36,INT_1:3,SUBSET_1:def 8;
        hence F(f.(s,J\;K\;W)) < F(s) by XREAL_1:44;
      end;
    end;
A39: f iteration_terminates_for J\;K\;W, f.(s2,W) from AOFA_000:sch 3(A22,A25);
A40: for s being Element of ST st P[s] & s in TV & Q[s]
    holds P[f.(s,J\;K)]
    proof
      let s be Element of ST;
      assume A41: P[s];
      assume s in TV;
      assume A42: Q[s];
A43:   s.a.M = f.(s,CJ).a.M by A13,A1,Th65;
      thus R[f.(s,J\;K)]
      proof
        per cases;
        suppose f.(s,CJ) in TV;
          then f.(s,J) = f.(f.(s,CJ),IJ) by A6;
          then
A44:       f.(s,J).a.M = s0.a.M by A41,A15,A1,A43,Th65;
          f.(s,J\;K) = f.(f.(s,J),K) by AOFA_000:def 29;
          hence thesis by A44,A15,A1,Th65;
        end;
        suppose f.(s,CJ) nin TV;
          then f.(s,J) = f.(f.(s,CJ),EmptyIns A) by A6;
          then
A45:       f.(s,J).a.M = s0.a.M by A41,A43,AOFA_000:def 28;
          f.(s,J\;K) = f.(f.(s,J),K) by AOFA_000:def 29;
          hence thesis by A45,A15,A1,Th65;
        end;
      end;
A46:   @i value_at(C,f.(s,J)) = f.(s,J).I.i & @i value_at(C,s) = s.I.i &
      @m value_at(C,s) = s.I.m & \1(T,I) value_at(C,f.(s,J)) = 1
      by Th61,Th37;
A47:   f.(s,J\;K) = f.(f.(s,J),K) by AOFA_000:def 29;
      then
A48:   f.(s,J\;K).I.i = (@i+\1(T,I)) value_at(C,f.(s,J)) by A1,Th65
      .= (@i value_at(C,f.(s,J)))+(\1(T,I) value_at(C,f.(s,J))) by Th39
      .= f.(s,J).I.i+1 by A46,AOFA_A00:55;
A49:   f.(s,J\;K).I.m = f.(s,J).I.m by A47,A1,Th65;
A50:   f.(s,CJ).I.i = s.I.i & f.(s,CJ).I.m = s.I.m &
      f.(s,CJ).a.M = s.a.M by A13,A14,A1,Th65;
A51:   s.I.i is Nat & @M value_at(C,s) = s.a.M & @M value_at(C,s0) = s0.a.M
      by A41,Th61;
      then
A52:   @i value_at(C,s) in dom (@M value_at(C,s))
by A46,A24,A42,AFINSQ_1:86;
A53:   @m value_at(C,s) in dom (@M value_at(C,s))
by A51,A46,A41,AFINSQ_1:86;
A54:   z.(s.I.i) = (@M value_at(C,s)).(s.I.i) by A41,Th61
      .= (@M value_at(C,s) qua Function).(@i value_at(C,s))
      by Th61
      .= (@M value_at(C,s)).(@i value_at(C,s)) by A52,Th74
      .= @M.(@i) value_at(C,s) by Th79;
A55:   z.(s.I.m) = (@M value_at(C,s)).(s.I.m) by A41,Th61
      .= (@M value_at(C,s) qua Function).(@m value_at(C,s))
      by Th61
      .= (@M value_at(C,s)).(@m value_at(C,s)) by A53,Th74
      .= @M.(@m) value_at(C,s) by Th79;
A56:   now per cases;
        case
          z.(s.I.i) > z.(s.I.m);
          then f.(s,CJ) in TV by A1,A54,A55,Th66;
          then
A57:       f.(s,J) = f.(f.(s,CJ),IJ) by A6;
          hence f.(s,J).I.i = s.I.i by A50,A1,Th65;
          thus f.(s,J).I.m = @i value_at(C,f.(s,CJ)) by A57,A1,Th65
          .= s.I.i by A50,Th61;
          thus f.(s,J).a.M = s.a.M by A57,A50,A1,A15,Th65;
        end;
        case
          z.(s.I.i) <= z.(s.I.m);
          then f.(s,CJ) nin TV by A1,A54,A55,Th66;
          then
A58:       f.(s,J) = f.(f.(s,CJ),EmptyIns A) by A6;
          hence f.(s,J).I.i = s.I.i by A50,AOFA_000:def 28;
          thus f.(s,J).I.m = s.I.m by A58,A50,AOFA_000:def 28;
          thus f.(s,J).a.M = s.a.M by A58,A50,AOFA_000:def 28;
        end;
      end;
      reconsider sIi = s.I.i as Element of NAT by A41;
A59:   f.(s,J\;K).I.i = sIi+1 & sIi+1 in NAT by A48,A56,ORDINAL1:def 12;
      thus f.(s,J\;K).I.i in NAT & f.(s,J\;K).I.m in NAT
      by A56,A41,A47,A1,Th65,A48,ORDINAL1:def 12;
      len z = length(@M,I) value_at(C,s0) by A24,Th61;
      hence
      f.(s,J\;K).I.i <= len z by A56,A48,A42,INT_1:7;
      thus f.(s,J\;K).I.m < f.(s,J\;K).I.i by A56,A48,A49,A41,NAT_1:13;
      thus f.(s,J\;K).I.m < len z by A24,Th61,A56,A49,A41,A42;
      let mx be Integer;
      assume
A60:   mx = f.(s,J\;K).I.m;
      let j be Nat; assume
A61:   j < f.(s,J\;K).I.i;
      per cases by A61,A59,NAT_1:22;
      suppose
        j < s.I.i & z.(s.I.i) <= z.(s.I.m);
        hence z.j <= z.mx by A60,A41,A56,A49;
      end;
      suppose
        j < s.I.i & z.(s.I.i) > z.(s.I.m);
        then z.j <= z.(s.I.m) by A41;
        hence z.j <= z.mx by A60,A56,A49,XXREAL_0:2;
      end;
      suppose
        j = s.I.i & z.(s.I.i) <= z.(s.I.m);
        hence z.j <= z.mx by A60,A56,A47,A1,Th65;
      end;
      suppose
        j = s.I.i & z.(s.I.i) > z.(s.I.m);
        hence z.j <= z.mx by A60,A56,A47,A1,Th65;
      end;
    end;
A62: for s being Element of ST st P[s] holds
    P[f.(s,W)] &
    (f.(s,W) in TV iff Q[f.(s,W)])
    proof
      let s be Element of ST;
      assume A63: P[s];
      thus R[f.(s,W)] by A63,A1,A13,Th65;
A64:   f.(s,W).I.i = s.I.i & f.(s,W).I.m = s.I.m by A1,A14,Th65;
      thus f.(s,W).I.i in NAT & f.(s,W).I.m in NAT by A63,A1,A14,Th65;
      thus f.(s,W).I.i <= len z & f.(s,W).I.m < f.(s,W).I.i by A64,A63;
      thus f.(s,W).I.m < len z by A1,A14,Th65,A63;
      thus for mx being Integer st mx = f.(s,W).I.m
      for j being Nat st j < f.(s,W).I.i holds z.j <= z.mx by A64,A63;
A65:  length(@M,I) value_at(C,s)
      = length(@M value_at(C,s),I) by Th81
      .= len(@M value_at(C,s)) by Th74
      .= len(s.(the_array_sort_of S).M) by Th61
      .= len(@M value_at(C,s0)) by A63,Th61;
      hereby
        assume f.(s,W) in TV;
        then @i value_at(C,s) < length(@M,I) value_at(C,s) &
        s.I.i = @i value_at(C,s) by A1,Th66,Th61;
        hence Q[f.(s,W)] by A63,A1,A14,Th65,A13,A24,A65;
      end;
      assume Q[f.(s,W)];
      then @i value_at(C,s) < length(@M,I) value_at(C,s)
      by A64,A24,A65,Th61;
      hence f.(s,W) in TV by A1,Th66;
    end;
A66: P[f.(s2, while(W, J\;K))] &
    not Q[f.(s2, while(W, J\;K))]
    from AOFA_000:sch 5(A18,A39,A40,A62);
A67: f.(s, m:=(\0(T,I),A)\;for-do(i:=(\1(T,I),A),W,K,J))
    = f.(s1, for-do(i:=(\1(T,I),A),W,K,J)) by AOFA_000:def 29
    .= f.(f.(s1, i:=(\1(T,I),A)), while(W, J\;K)) by AOFA_000:def 29;
    then
A68: n in dom z by A66,A3,AFINSQ_1:86;
A69: ^(n,T,I) value_at(C,s) = n by Th90;
A70: z = @M value_at(C,s) by Th61;
A71: z.(f.(s, m:=(\0(T,I),A)\;for-do(i:=(\1(T,I),A),W,K,J)).I.m)
    = (@M value_at(C,s)).(^(n,T,I) value_at(C,s)) by A68,A70,A69,Th74,A3
    .= (@M. ^(n,T,I)) value_at(C,s) by Th79;
A72: (M.(n,I)) value_at(C,s) is UpperBound of X
    proof
      let x be ExtReal;
      assume x in X;
      then consider j being object such that
A73:   j in dom z & x = z.j by A4,FUNCT_1:def 3;
      reconsider j as Nat by A73;
      f.(s,m:=(\0(T,I),A)\;for-do(i:=(\1(T,I),A),W,K,J)).I.i <= len z &
      f.(s,m:=(\0(T,I),A)\;for-do(i:=(\1(T,I),A),W,K,J)).I.i >= len z
      by A24,Th61,A66,A67;
      then f.(s,m:=(\0(T,I),A)\;for-do(i:=(\1(T,I),A),W,K,J)).I.i = len z &
      j < len z by A73,AFINSQ_1:86,XXREAL_0:1;
      hence thesis by A71,A73,A66,A67;
    end;
    for x being UpperBound of X holds (M.(n,I)) value_at(C,s) <= x
    proof
      let x be UpperBound of X;
      n in dom z & M.(n,I) value_at(C,s) = z.n
by A66,A67,A71,A3,AFINSQ_1:86;
      then M.(n,I) value_at(C,s) in X by A4,FUNCT_1:def 3;
      hence (M.(n,I)) value_at(C,s) <= x by XXREAL_2:def 1;
    end;
    hence (M.(n,I)) value_at(C,s) = max X by A72,XXREAL_2:def 3;
  end;

theorem Th94:
  for A being elementary IfWhileAlgebra of the generators of G
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G,b) st
  f in C-Execution(A,b,\falseC) & G is C-supported
  for t0,t1 being Element of T,I for J being Algorithm of A
  for P being set st
  P is_invariant_wrt i:=(t0,A),f &
  P is_invariant_wrt b gt(t1,@i,A),f &
  P is_invariant_wrt i:=(@i+\1(T,I),A),f &
  P is_invariant_wrt J,f & J is_terminating_wrt f,P &
  for s holds f.(s,J).I.i = s.I.i & f.(s,b gt(t1,@i,A)).I.i = s.I.i &
  t1 value_at(C,f.(s, b gt(t1,@i,A))) = t1 value_at(C,s) &
  t1 value_at(C,f.(s, J\;i:=(@i+\1(T,I),A))) =
  t1 value_at(C,s)
  holds
  for-do(i:=(t0,A),b gt(t1,@i,A),i:=(@i+\1(T,I),A), J) is_terminating_wrt f, P
  proof
    let A be elementary IfWhileAlgebra of the generators of G;
    let f be ExecutionFunction of A, C-States(the generators of G),
    (\falseC)-States(the generators of G,b);
    assume
A1: f in C-Execution(A,b,\falseC) & G is C-supported;
    let t0,t1 be Element of T,I;
    let J be Algorithm of A;
    let P be set;
    assume A2: P is_invariant_wrt i:=(t0,A),f;
    assume A3: P is_invariant_wrt b gt(t1,@i,A),f;
    assume A4: P is_invariant_wrt i:=(@i+\1(T,I),A),f;
    assume A5: P is_invariant_wrt J,f;
    assume A6: J is_terminating_wrt f,P;
    set W = b gt(t1,@i,A);
    set L = i:=(@i+\1(T,I),A);
    set K = i:=(t0,A);
    set ST = C-States(the generators of G);
    set TV = (\falseC)-States(the generators of G, b);
    assume A7: for s holds f.(s,J).I.i = s.I.i & f.(s,W).I.i = s.I.i &
    t1 value_at(C,f.(s, W)) = t1 value_at(C,s) &
    t1 value_at(C,f.(s, J\;L)) = t1 value_at(C,s);
A8: K is_terminating_wrt f, P by AOFA_000:107;
    L is_terminating_wrt f,P by AOFA_000:107;
    then
A9: W is_terminating_wrt f & J\;L is_terminating_wrt f,P
    by A5,A6,AOFA_000:104,111;
A10: for s st s in P & f.(f.(s,J\;L),W) in TV holds f.(s,J\;L) in P
    by A5,A4,AOFA_000:109,def 39;
    for s st f.(s,W) in P holds f iteration_terminates_for J\;L\;W, f.(s,W)
    proof let s; assume
      f.(s,W) in P;
      defpred P[Element of ST] means $1.I.i < t1 value_at(C,$1);
      deffunc F(Element of ST) = In((t1 value_at(C,$1))-$1.I.i, NAT);
      @i value_at(C,s) = s.I.i &
      f.(s,W).I.i = s.I.i & t1 value_at(C,f.(s,W)) = t1 value_at(C,s)
      by A7,Th61;
      then
A11:   f.(s,W) in TV iff P[f.(s,W)] by A1,Th66;
A12:   for s being Element of ST st P[s]
      holds (P[f.(s,J\;L\;W)] iff f.(s,J\;L\;W) in TV) &
      F(f.(s,J\;L\;W)) < F(s)
      proof
        let s; assume
A13:     P[s];
A14:     f.(s,J\;L\;W) = f.(f.(s, J\;L), W) by AOFA_000:def 29;
        then @i value_at(C,f.(s,J\;L)) = f.(s,J\;L).I.i &
        f.(s,J\;L\;W).I.i = f.(s,J\;L).I.i &
        t1 value_at(C,f.(s,J\;L\;W)) = t1 value_at(C,f.(s,J\;L))
        by A7,Th61;
        hence P[f.(s,J\;L\;W)] iff f.(s,J\;L\;W) in TV by A14,A1,Th66;
A15:     s.I.i+1 <= t1 value_at(C,s) by A13,INT_1:7;
A16:     (@i value_at(C,f.(s,J)))+(\1(T,I)value_at(C,f.(s,J)))
        = (@i value_at(C,f.(s,J)) qua Integer)+(\1(T,I)value_at(C,f.(s,J)))
        by AOFA_A00:55;
        F(f.(s,J\;L\;W))
        = In((t1 value_at(C,f.(f.(s,J\;L),W)))-f.(s,J\;L\;W).I.i, NAT)
        by AOFA_000:def 29
        .= In((t1 value_at(C,f.(s,J\;L)))-f.(s,J\;L\;W).I.i, NAT) by A7
        .= In((t1 value_at(C,s))-f.(s,J\;L\;W).I.i, NAT) by A7
        .= In((t1 value_at(C,s))-f.(f.(s,J\;L),W).I.i, NAT) by AOFA_000:def 29
        .= In((t1 value_at(C,s))-f.(s,J\;L).I.i, NAT) by A7
        .= In((t1 value_at(C,s))-f.(f.(s,J),L).I.i, NAT) by AOFA_000:def 29
        .= In((t1 value_at(C,s) qua Integer)
        -((@i+\1(T,I))value_at(C,f.(s,J))), NAT) by A1,Th65
        .= In((t1 value_at(C,s))-((@i value_at(C,f.(s,J)) qua Integer)+
        (\1(T,I)value_at(C,f.(s,J)))), NAT) by A16,Th39
        .= In((t1 value_at(C,s))-(f.(s,J).I.i+
        (\1(T,I)value_at(C,f.(s,J)))), NAT) by Th61
        .= In((t1 value_at(C,s))-(s.I.i+(\1(T,I)value_at(C,f.(s,J)))), NAT)
        by A7
        .= In((t1 value_at(C,s))-(s.I.i+1), NAT) by Th37
        .= (t1 value_at(C,s))-s.I.i-1 by A15,INT_1:5,SUBSET_1:def 8
        .= F(s)-1 by A13,INT_1:5,SUBSET_1:def 8;
        hence F(f.(s,J\;L\;W)) < F(s) by XREAL_1:44;
      end;
      thus f iteration_terminates_for J\;L\;W, f.(s,W)
      from AOFA_000:sch 3(A11,A12);
    end;
    then while(W,J\;L) is_terminating_wrt f, P by A3,A9,A10,AOFA_000:118;
    hence for-do(K,W,L, J) is_terminating_wrt f, P by A2,A8,AOFA_000:111;
  end;

theorem
  for A being elementary IfWhileAlgebra of the generators of G
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G,b) holds
  f in C-Execution(A,b,\falseC) & G is C-supported & i <> m implies
  m:=(\0(T,I),A)\;
  for-do(i:=(\1(T,I),A), b gt(length(@M,I),@i,A), i:=(@i+\1(T,I),A),
         if-then(b gt(@M.(@i), @M.(@m), A), m:=(@i,A)))
  is_terminating_wrt f, {s: s.(the_array_sort_of S).M <> {}}
  proof
    let A be elementary IfWhileAlgebra of the generators of G;
    let f be ExecutionFunction of A, C-States(the generators of G),
    (\falseC)-States(the generators of G,b);
    assume A1: f in C-Execution(A,b,\falseC);
    assume A2: G is C-supported;
    assume A3: i <> m;
    set J = m:=(\0(T,I),A);
    set K = i:=(\1(T,I),A);
    set W = b gt(length(@M,I),@i,A);
    set L = i:=(@i+\1(T,I),A);
    set N = b gt(@M.(@i), @M.(@m), A);
    set O = m:=(@i,A);
    set a = the_array_sort_of S;
    set P = {s: s.(a).M <> {}};
A4: (the Sorts of C).the bool-sort of S = BOOLEAN &
    (the Sorts of C).a = INT^omega by Th74,AOFA_A00:def 32;
    then
A5: the bool-sort of S <> a & I <> a & the bool-sort of S <> I
    by Th73,AOFA_A00:53;
A6: P is_invariant_wrt J, f
    proof
      let s; assume s in P;
      then consider s1 such that
A7:   s = s1 & s1.a.M <> {};
      f.(s,J).a.M = s.a.M by A1,A2,A5,Th65;
      hence thesis by A7;
    end;
A8: P is_invariant_wrt K,f
    proof
      let s; assume s in P;
      then consider s1 such that
A9:   s = s1 & s1.a.M <> {};
      f.(s,K).a.M = s.a.M by A1,A2,A5,Th65;
      hence thesis by A9;
    end;
A10: P is_invariant_wrt W,f
    proof
      let s; assume s in P;
      then consider s1 such that
A11:   s = s1 & s1.a.M <> {};
      f.(s,W).a.M = s.a.M by A1,A2,A4,Th65;
      hence thesis by A11;
    end;
A12: P is_invariant_wrt L,f
    proof
      let s; assume s in P;
      then consider s1 such that
A13:   s = s1 & s1.a.M <> {};
      f.(s,L).a.M = s.a.M by A1,A2,A5,Th65;
      hence thesis by A13;
    end;
A14: P is_invariant_wrt N,f
    proof
      let s; assume s in P;
      then consider s1 such that
A15:   s = s1 & s1.a.M <> {};
      f.(s,N).a.M = s.a.M by A1,A2,A4,Th65;
      hence thesis by A15;
    end;
A16: P is_invariant_wrt O,f
    proof
      let s; assume s in P;
      then consider s1 such that
A17:   s = s1 & s1.a.M <> {};
      f.(s,O).a.M = s.a.M by A1,A2,A5,Th65;
      hence thesis by A17;
    end;
    set ST = C-States(the generators of G);
    set TV = (\falseC)-States(the generators of G, b);
A18: f complies_with_if_wrt TV by AOFA_000:def 32;
A19: P is_invariant_wrt if-then(N,O), f
    proof
      let s; assume s in P;
      then
A20:   f.(s,N) in P by A14;
      per cases;
      suppose f.(s, N) in TV;
        then f.(s,if-then(N,O)) = f.(f.(s,N),O) by A18;
        hence thesis by A20,A16;
      end;
      suppose f.(s, N) nin TV;
        then f.(s,if-then(N,O)) = f.(f.(s,N),EmptyIns A) by A18;
        hence thesis by A20,AOFA_000:def 28;
      end;
    end;
A21: J is_terminating_wrt f,P by AOFA_000:107;
    for s holds f.(s,if-then(N,O)).I.i = s.I.i & f.(s,W).I.i = s.I.i &
    length(@M,I) value_at(C,f.(s,W)) = length(@M,I) value_at(C,s) &
    length(@M,I) value_at(C,f.(s,if-then(N,O)\;L)) =
    length(@M,I) value_at(C,s)
    proof
      let s;
      hereby
        per cases;
        suppose f.(s,N) in TV;
          then f.(s,if-then(N,O)) = f.(f.(s,N),O) by A18;
          hence f.(s,if-then(N,O)).I.i = f.(s,N).I.i by A1,A2,A3,Th65
          .= s.I.i by A1,A2,A5,Th65;
        end;
        suppose f.(s,N) nin TV;
          then f.(s,if-then(N,O)) = f.(f.(s,N),EmptyIns A)
          by A18;
          hence f.(s,if-then(N,O)).I.i = f.(s,N).I.i by AOFA_000:def 28
          .= s.I.i by A1,A2,A5,Th65;
        end;
      end;
A22:   now
        per cases;
        suppose f.(s,N) in TV;
          then f.(s,if-then(N,O)) = f.(f.(s,N),O) by A18;
          hence f.(s,if-then(N,O)).a.M = f.(s,N).a.M by A1,A2,A5,Th65
          .= s.a.M by A1,A2,A4,Th65;
        end;
        suppose f.(s,N) nin TV;
          then f.(s,if-then(N,O)) = f.(f.(s,N),EmptyIns A)
          by A18;
          hence f.(s,if-then(N,O)).a.M = f.(s,N).a.M by AOFA_000:def 28
          .= s.a.M by A1,A2,A4,Th65;
        end;
      end;
      thus f.(s,W).I.i = s.I.i by A1,A2,A5,Th65;
A23:   @M value_at(C,f.(s,if-then(N,O)\;L))
      = f.(s,if-then(N,O)\;L).a.M &
      @M value_at(C,f.(s,W)) = f.(s,W).a.M & @M value_at(C,s) = s.a.M by Th61;
      thus length(@M,I) value_at(C,f.(s,W))
      = length(@M value_at(C,f.(s,W)),I) by Th81
      .= len(f.(s,W).a.M) by A23,Th74
      .= len(s.a.M) by A1,A2,A4,Th65
      .= length(@M value_at(C,s),I) by A23,Th74
      .= length(@M,I) value_at(C,s) by Th81;
      thus length(@M,I) value_at(C,f.(s,if-then(N,O)\;L))
      = length(@M value_at(C,f.(s,if-then(N,O)\;L)),I) by Th81
      .= len(f.(s,if-then(N,O)\;L).a.M) by A23,Th74
      .= len(f.(f.(s,if-then(N,O)),L).a.M) by AOFA_000:def 29
      .= len(f.(s,if-then(N,O)).a.M) by A1,A2,A5,Th65
      .= length(@M value_at(C,s),I) by A23,A22,Th74
      .= length(@M,I) value_at(C,s) by Th81;
   end;
   then for-do(K,W,L,if-then(N,O)) is_terminating_wrt f, P
   by A1,A2,A8,A10,A12,A19,Th94,AOFA_000:107;
   hence thesis by A6,A21,AOFA_000:111;
 end;

begin :: Sorting by exchanging

reserve i1,i2 for pure Element of (the generators of G).I;

definition
  let S,X,T,G;
  attr G is integer-array means
  for I holds
  the set of all @M.t where t is Element of T,I
  c= (the generators of G).I &
  for M for t being Element of T,I
  for g being Element of G,I st g = @M.t
  ex x st x nin (vf t).I & supp-var g = x &
  (supp-term g).(the_array_sort_of S).M = (@M,t)<-@x &
  for s being SortSymbol of S
  for y st y in (vf g).s & (s = the_array_sort_of S implies y <> M)
  holds (supp-term g).s.y = y;
end;

theorem Th96:
  G is integer-array implies
  for t being Element of T,I holds @M.t in (the generators of G).I
  proof
    assume
A1: G is integer-array;
    let t be Element of T,I;
A2: @M.t in the set of all @N.q where q is Element of T,I;
    the set of all @N.q where q is Element of T,I
    c= (the generators of G).I by A1;
    hence @M.t in (the generators of G).I by A2;
  end;

definition
  func (#INT,<=#) -> strict real non empty Poset equals RealPoset INT;
  coherence;
end;

definition
  let S,X,T,G;
  let A be elementary IfWhileAlgebra of the generators of G;
  let a be SortSymbol of S;
  let t1,t2 be Element of T,a such that
A1: t1 in (the generators of G).a;
  func t1:=(t2,A) -> absolutely-terminating Algorithm of A equals: Def19:
  (the assignments of A).[t1,t2];
  coherence
  proof
    reconsider x = t1 as Element of (the generators of G).a by A1;
    (the assignments of A).[t1,t2] = x:=(t2,A);
    hence thesis;
  end;
end;

theorem Th97:
  for X being countable non-empty ManySortedSet of the carrier of S
  for T being vf-free all_vars_including inheriting_operations free_in_itself
  (X,S)-terms integer-array non-empty VarMSAlgebra over S
  for G being basic GeneratorSystem over S,X,T
  for M being pure Element of (the generators of G).the_array_sort_of S
  for i,x being pure Element of (the generators of G).I holds
  @M.@i <> x
  proof
    let X be countable non-empty ManySortedSet of the carrier of S;
    let T be vf-free all_vars_including inheriting_operations free_in_itself
    (X,S)-terms integer-array non-empty VarMSAlgebra over S;
    let G be basic GeneratorSystem over S,X,T;
    let M be pure Element of (the generators of G).the_array_sort_of S;
    let i,x be pure Element of (the generators of G).I;
    set C = the (11,1,1)-array (4,1) integer bool-correct non-empty image of T;
    set ST = C-States the generators of G;
    assume
A1: @M.@i = x;
    set q = the ManySortedFunction of FreeGen T, the Sorts of C;
    set g = q+*(I,x,0)+*(the_array_sort_of S,M,<%1%>)+*(I,i,0);
    set a = the_array_sort_of S;
    consider h being ManySortedFunction of T,C such that
A2: h is_homomorphism T,C & h||FreeGen T = g by MSAFREE4:def 12;
    reconsider s = h||the generators of G as Element of ST
    by A2,AOFA_A00:def 19;
A3: the_array_sort_of S <> I by Th73;
A4: @M value_at(C,s) = s.(the_array_sort_of S).M &
    @i value_at(C,s) = s.I.i &
    @M.@i value_at(C,s) = (@M value_at(C,s)).(@i value_at(C,s)) by Th79,Th61;
A5: i in (FreeGen T).I & x in (FreeGen T).I & M in (FreeGen T).a by Def4;
A6: dom ((q+*(I,x,0)+*(a,M,<%1%>)).I) = (FreeGen T).I &
    0 in INT & INT = (the Sorts of C).I
    by INT_1:def 2,AOFA_A00:55,FUNCT_2:def 1;
    ((h.I)|((the generators of G).I)).i = h.I.i by FUNCT_1:49;
    then
A7: s.I.i = h.I.i by MSAFREE:def 1
    .= ((h.I)|((FreeGen T).I)).i by Def4,FUNCT_1:49
    .= g.I.i by A2,MSAFREE:def 1
    .= (((q+*(I,x,0)+*(a,M,<%1%>)).I)+*(i,0)).i by A5,A6,AOFA_A00:def 2
    .= 0 by Def4,A6,FUNCT_7:31;
    reconsider 01 = 1 as Element of INT by INT_1:def 2;
A8: <%01%> in INT^omega & (the Sorts of C).a = INT^omega &
    dom ((q+*(I,x,0)).a) = (FreeGen T).a & dom (q.I) = (FreeGen T).I &
    dom ((q+*(I,x,0)+*(a,M,<%1%>)).a) = (FreeGen T).a
    by Th74,AFINSQ_1:def 7,FUNCT_2:def 1;
A9: s.a.M = ((h.a)|((the generators of G).a)).M by MSAFREE:def 1
    .= h.a.M by FUNCT_1:49
    .= ((h.a)|((FreeGen T).a)).M by Def4,FUNCT_1:49
    .= g.a.M by A2,MSAFREE:def 1
    .= (q+*(I,x,0)+*(a,M,<%1%>)).a.M by A5,A6,A3,AOFA_A00:def 2
    .= (q+*(I,x,0)).a+*(M,<%1%>).M by A8,A5,AOFA_A00:def 2
    .= <%1%> by Def4,A8,FUNCT_7:31;
    0 < len(s.a.M) by A9,AFINSQ_1:34;
    then 0 in dom(s.a.M) by AFINSQ_1:86;
    then @x value_at(C,s) = s.a.M.(s.I.i) by A1,A4,Th74,A7;
    then
A10: s.I.x = <%1%>.(s.I.i) by A9,Th61
    .= 1 by A7;
    s.I.x = ((h.I)|((the generators of G).I)).x by MSAFREE:def 1
    .= h.I.x by FUNCT_1:49
    .= ((h.I)|((FreeGen T).I)).x by Def4,FUNCT_1:49
    .= g.I.x by A2,MSAFREE:def 1
    .= ((q+*(I,x,0)+*(a,M,<%1%>)).I+*(i,0)).x by A5,A6,AOFA_A00:def 2
    .= (q+*(I,x,0)+*(a,M,<%1%>)).I.x by A7,A10,FUNCT_7:32
    .= (q+*(I,x,0)).I.x by A3,A5,A8,AOFA_A00:def 2
    .= ((q.I)+*(x,0)).x by A5,A6,AOFA_A00:def 2
    .= 0 by Def4,A8,FUNCT_7:31;
    hence contradiction by A10;
  end;

registration
  let S be non empty non void ManySortedSign;
  let A be disjoint_valued MSAlgebra over S;
  cluster the Sorts of A -> disjoint_valued;
  coherence by MSAFREE1:def 2;
end;

definition
  let S,X;
  let T be all_vars_including inheriting_operations free_in_itself
  (X,S)-terms MSAlgebra over S;
  attr T is array-degenerated means
  ex I st
  ex M being Element of (FreeGen T).the_array_sort_of S st
  ex t being Element of T,I st
  @M.t <> Sym(In((the connectives of S).11, the carrier' of S),X)-tree<*M,t*>;
end;

registration
  let S,X;
  cluster Free(S,X) -> non array-degenerated;
  coherence
  proof set T = Free(S,X);
    let I;
    let M be Element of (FreeGen T).the_array_sort_of S;
    let t be Element of T,I;
    set o = In((the connectives of S).11, the carrier' of S);
A1: Free(S,X) = FreeMSA X by MSAFREE3:31;
    consider J1,K1,L1 being Element of S such that
A2: L1 = 1 & K1 = 1 & J1 <> L1 & J1 <> K1 &
    (the connectives of S).11 is_of_type <*J1,K1*>, L1 &
    (the connectives of S).(11+1) is_of_type <*J1,K1,L1*>, J1 &
    (the connectives of S).(11+2) is_of_type <*J1*>, K1 &
    (the connectives of S).(11+3) is_of_type <*K1,L1*>, J1 by AOFA_A00:def 51;
A3: I = 1 by AOFA_A00:def 40;
    11+3 <= len the connectives of S by AOFA_A00:def 51;
    then 11 <= len the connectives of S by XXREAL_0:2;
    then 11 in dom the connectives of S by FINSEQ_3:25;
    then (the connectives of S).11 = o by FUNCT_1:102,SUBSET_1:def 8;
    then the_arity_of o = <*the_array_sort_of S, I*>
    by A2,A3;
    then
    Args(o, T) = product <*(the Sorts of T).the_array_sort_of S,
    (the Sorts of T).I*> by Th23;
    then
    <*@M,t*> in Args(o,T) by FINSEQ_3:124;
    then
    @M.t = [In((the connectives of S).11, the carrier' of S),the carrier of S]
    -tree<*M,t*> by A1,INSTALG1:3;
    hence thesis by MSAFREE:def 9;
  end;
end;

registration
  let S,X;
  cluster non array-degenerated for all_vars_including inheriting_operations
  free_in_itself (X,S)-terms MSAlgebra over S;
  existence
  proof
    take Free(S,X);
    thus thesis;
  end;
end;

theorem Th98:
  T is non array-degenerated implies
  vf (@M.@i) = (I-singleton i) (\/) ((the_array_sort_of S)-singleton M)
  proof set t = @M.@i;
    assume
A1: T is non array-degenerated;
    reconsider N = M as Element of (FreeGen T).the_array_sort_of S by Def4;
    @N = @M; then
A2: @M.@i = Sym(In((the connectives of S).11, the carrier' of S),X)-tree<*M,i*>
    by A1;
A3: <*M,i*>.(0+1) = M & <*M,i*>.(1+1) = i & len <*M,i*> = 2 by FINSEQ_1:44;
    then
A4: t|<*0*> = M & t|<*1*> = i by A2,TREES_4:def 4;
    M in (FreeGen T).the_array_sort_of S by Def4;
    then M in FreeGen(the_array_sort_of S, X) by MSAFREE:def 16;
    then consider m being set such that
A5: m in X.the_array_sort_of S & M = root-tree[m,the_array_sort_of S]
    by MSAFREE:def 15;
    i in (FreeGen T).I by Def4;
    then i in FreeGen(I, X) by MSAFREE:def 16;
    then consider j being set such that
A6: j in X.I & i = root-tree[j,I] by MSAFREE:def 15;
    (t|<*0*>).{} = [m,the_array_sort_of S] & (t|<*1*>).{} = [j,I]
    by A4,A5,A6,TREES_4:3;
    then
A7: ((t|<*0*>).{})`2 = the_array_sort_of S & ((t|<*1*>).{})`2 = I;
    {} in dom root-tree[m,the_array_sort_of S] & {} in dom root-tree[j,I]
    by TREES_1:22;
    then <*0*>^{} in dom t & <*1*>^{} in dom t by A2,A5,A6,A3,TREES_4:11;
    then
A8: <*0*> in dom t & <*1*> in dom t by FINSEQ_1:34;
A9: the_array_sort_of S <> I by Th73;
A10: {M} = (vf t).the_array_sort_of S
    proof
      set A = {t|p where p is Element of dom t: ((t|p).{})`2
      = the_array_sort_of S};
A11:   M in A & A = (vf t).the_array_sort_of S
      by A4,A7,A8,AOFA_A00:def 12;
      hence {M} c= (vf t).the_array_sort_of S by ZFMISC_1:31;
      let x be object; assume x in (vf t).the_array_sort_of S;
      then consider p being Element of dom t such that
A12:   x = t|p & ((t|p).{})`2 = the_array_sort_of S by A11;
      per cases by A2,TREES_4:11;
      suppose p = {};
        then t|p = t by TREES_9:1;
        then (t|p).{} = Sym(In((the connectives of S).11, the carrier' of S),X)
        by A2,TREES_4:def 4
        .= [In((the connectives of S).11, the carrier' of S), the carrier of S]
        by MSAFREE:def 9;
        then ((t|p).{})`2 = the carrier of S &
        the_array_sort_of S in the carrier of S;
        hence thesis by A12;
      end;
      suppose ex k being Nat, T being DecoratedTree,
        q being Node of T st k < len <*M,i*> & T = <*M,i*>.(k+1) & p = <*k*>^q;
        then consider k being Nat, Q being DecoratedTree,
        q being Element of dom Q such that
A13:     k < len <*M,i*> & Q = <*M,i*>.(k+1) & p = <*k*>^q;
A14:     k = 0 or k = 1 by A3,A13,NAT_1:23;
        then q in dom root-tree [m,the_array_sort_of S] or
        q in dom root-tree [j,I] by A13,A5,A6;
        then q in {{}} by TREES_4:3,TREES_1:29;
        then q = {} by TARSKI:def 1;
        then p = <*0*> by A12,A14,A9,A7,A13,FINSEQ_1:34;
        hence x in {M} by A12,A4,TARSKI:def 1;
      end;
    end;
A15: {i} = (vf t).I
    proof
      set A = {t|p where p is Element of dom t: ((t|p).{})`2 = I};
A16:   i in A & A = (vf t).I by A4,A7,A8,AOFA_A00:def 12;
      hence {i} c= (vf t).I by ZFMISC_1:31;
      let x be object; assume x in (vf t).I;
      then consider p being Element of dom t such that
A17:   x = t|p & ((t|p).{})`2 = I by A16;
      per cases by A2,TREES_4:11;
      suppose p = {};
        then t|p = t by TREES_9:1;
        then (t|p).{} = Sym(In((the connectives of S).11, the carrier' of S),X)
        by A2,TREES_4:def 4
        .= [In((the connectives of S).11, the carrier' of S), the carrier of S]
        by MSAFREE:def 9;
        then ((t|p).{})`2 = the carrier of S & I in the carrier of S;
        hence thesis by A17;
      end;
      suppose ex k being Nat, T being DecoratedTree,
        q being Node of T st k < len <*M,i*> & T = <*M,i*>.(k+1) & p = <*k*>^q;
        then consider k being Nat, Q being DecoratedTree,
        q being Element of dom Q such that
A18:     k < len <*M,i*> & Q = <*M,i*>.(k+1) & p = <*k*>^q;
A19:     k = 0 or k = 1 by A3,A18,NAT_1:23;
        then q in dom root-tree [m,the_array_sort_of S] or
        q in dom root-tree [j,I] by A18,A5,A6;
        then q in {{}} by TREES_4:3,TREES_1:29;
        then q = {} by TARSKI:def 1;
        then p = <*1*> by A17,A19,A9,A7,A18,FINSEQ_1:34;
        hence x in {i} by A17,A4,TARSKI:def 1;
      end;
    end;
A20: for s being SortSymbol of S st s <> the_array_sort_of S & s <> I
    holds {} = (vf t).s
    proof
      let s be SortSymbol of S;
      assume A21: s <> the_array_sort_of S;
      assume A22: s <> I;
      set A = {t|p where p is Element of dom t: ((t|p).{})`2 = s};
A23:   A = (vf t).s by AOFA_A00:def 12;
      thus {} c= (vf t).s;
      let x be object; assume x in (vf t).s;
      then consider p being Element of dom t such that
A24:   x = t|p & ((t|p).{})`2 = s by A23;
      per cases by A2,TREES_4:11;
      suppose p = {};
        then t|p = t by TREES_9:1;
        then (t|p).{} = Sym(In((the connectives of S).11, the carrier' of S),X)
        by A2,TREES_4:def 4
        .= [In((the connectives of S).11, the carrier' of S), the carrier of S]
        by MSAFREE:def 9;
        then ((t|p).{})`2 = the carrier of S & s in the carrier of S;
        hence thesis by A24;
      end;
      suppose ex k being Nat, T being DecoratedTree,
        q being Node of T st k < len <*M,i*> & T = <*M,i*>.(k+1) & p = <*k*>^q;
        then consider k being Nat, Q being DecoratedTree,
        q being Element of dom Q such that
A25:     k < len <*M,i*> & Q = <*M,i*>.(k+1) & p = <*k*>^q;
A26:     k = 0 or k = 1 by A3,A25,NAT_1:23;
        then q in dom root-tree [m,the_array_sort_of S] or
        q in dom root-tree [j,I] by A25,A5,A6;
        then q in {{}} by TREES_4:3,TREES_1:29;
        then q = {} by TARSKI:def 1;
        hence thesis by A24,A26,A7,A21,A22,A25,FINSEQ_1:34;
      end;
    end;
    let a be SortSymbol of S;
    per cases;
    suppose
A27:   a = the_array_sort_of S;
      thus (vf t).a
      = {} \/ ((the_array_sort_of S)-singleton M).a by A10,A27,AOFA_A00:6
      .= ((I-singleton i).a)\/((the_array_sort_of S)-singleton M).a
      by A27,A9,AOFA_A00:6
      .= ((I-singleton i) (\/) ((the_array_sort_of S)-singleton M)).a
      by PBOOLE:def 4;
    end;
    suppose
A28:   a = I;
      hence (vf t).a = (I-singleton i).a \/ {} by A15,AOFA_A00:6
      .= ((I-singleton i).a)\/((the_array_sort_of S)-singleton M).a
      by A28,Th73,AOFA_A00:6
      .= ((I-singleton i) (\/) ((the_array_sort_of S)-singleton M)).a
      by PBOOLE:def 4;
    end;
    suppose
A29:   a <> the_array_sort_of S & a <> I;
      hence (vf t).a = {} by A20
      .= (I-singleton i).a \/ {} by A29,AOFA_A00:6
      .= ((I-singleton i).a)\/((the_array_sort_of S)-singleton M).a
      by A29,AOFA_A00:6
      .= ((I-singleton i) (\/) ((the_array_sort_of S)-singleton M)).a
      by PBOOLE:def 4;
    end;
  end;

theorem Th99:
  for A being elementary IfWhileAlgebra of the generators of G
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G, b) st
  G is integer-array C-supported & f in C-Execution(A,b,\falseC) &
  X is countable & T is non array-degenerated
  for t being Element of T,I holds
  f.(s,@M.@i:=(t,A)) = f.(s,M:=((@M,@i)<-t,A))
  proof
    let A be elementary IfWhileAlgebra of the generators of G;
    let f be ExecutionFunction of A, C-States(the generators of G),
    (\falseC)-States(the generators of G, b);
    assume A1: G is integer-array;
    assume A2: G is C-supported;
    assume A3: f in C-Execution(A,b,\falseC);
    assume A4: X is countable;
    assume A5: T is non array-degenerated;
    let t be Element of T,I;
    reconsider H = FreeGen T as ManySortedSubset of the generators of G
    by Def3,PBOOLE:def 18;
    set v = t value_at(C,s);
    reconsider p = @M.@i as Element of G,I by A1,Th96,AOFA_A00:def 22;
    reconsider g = s as ManySortedFunction of the generators of G,
    the Sorts of C by AOFA_A00:48;
    reconsider g1 = f.(s,@M.@i:=(t,A)), g2 = f.(s,M:=((@M,@i)<-t,A))
    as ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    reconsider Mi = @M.@i as Element of (the generators of G).I by A1,Th96;
    M in (the generators of G).the_array_sort_of S &
    (the generators of G).the_array_sort_of S
    c= (the Sorts of T).the_array_sort_of S by PBOOLE:def 2,def 18;
    then reconsider m = M as Element of G,the_array_sort_of S
    by AOFA_A00:def 22;
    Mi:=(t,A) = @M.@i:=(t,A) by Def19;
    then
A6: g1 = succ(s,p,v) & g2 = succ(s,m,(@M,@i)<-t value_at(C,s))
    by A3,AOFA_A00:def 28;
A7: vf p = ((the_array_sort_of S)-singleton M)(\/)(I-singleton i) by A5,Th98;
    M in (FreeGen T).the_array_sort_of S by Def4;
    then
A8: vf @M = (the_array_sort_of S)-singleton M by AOFA_A00:41;
    i in (FreeGen T).I by Def4;
    then
A9:vf @i = I-singleton i by AOFA_A00:41;
    consider x such that
A10: x nin (vf @i).I & supp-var p = x &
    (supp-term p).(the_array_sort_of S).M = (@M,@i)<-@x &
    for s being SortSymbol of S
    for y st y in (vf p).s & (s = the_array_sort_of S implies y <> M)
    holds (supp-term p).s.y = y by A1;
    g1 = g2
    proof
      let a be SortSymbol of S;
A11:   now
        let a be SortSymbol of S;
A12:     (vf @M).a c= (vf p).a by A7,A8,PBOOLE:14,def 2;
        let b be Element of (the generators of G).a;
        assume
A13:     b in (FreeGen T).a;
        per cases by A13;
        suppose
A14:       b in (FreeGen T).a & b nin (vf p).a;
          then
A15:       b nin (vf @M).a by A12;
A16:       now
            assume a = the_array_sort_of S;
            then (vf @M).a = {M} by A8,AOFA_A00:6;
            hence b <> m by A15,TARSKI:def 1;
          end;
          b is pure by A14;
          then a = I implies b <> p by A4,Th97;
          then g1.a.b = s.a.b & g2.a.b = s.a.b
          by A2,A6,A14,A15,A16,AOFA_A00:def 27;
          hence g1.a.b = g2.a.b;
        end;
        suppose
A17:       b in (FreeGen T).a & b in (vf p).a & b nin (vf @M).a;
A18:       now
            assume a = the_array_sort_of S;
            then (vf @M).a = {M} by A8,AOFA_A00:6;
            hence b <> m by A17,TARSKI:def 1;
          end;
          consider u being ManySortedFunction of FreeGen T, the Sorts of C
          such that
A19:       u = (g||H)+*(I,supp-var p,v);
A20:      a = I & b = i or a = the_array_sort_of S & b = M by A7,A17,Th4;
A21:       (supp-term p).a.b = @i by A20,A17,A18,A10;
A22:      i in (vf @i).a by A20,A8,A17,Th3,A9;
          b is pure by A17;
          then a = I implies b <> p by A4,Th97;
          then g1.a.b = @i value_at(C,u)
          by A2,A6,A17,A19,A20,A21,A8,Th3,AOFA_A00:def 27
          .= u.a.i by A20,A8,A17,Th3,Th62
          .= (((g||H).a)+*(supp-var p,v)).b by A19,A20,A8,A17,Th3
,AOFA_A00:def 2
          .= (g||H).a.b by A20,A22,A10,A8,A17,Th3,FUNCT_7:32
          .= ((g.a)|(H.a)).b by MSAFREE:def 1
          .= g.a.b by A17,FUNCT_1:49;
          hence g1.a.b = g2.a.b by A2,A6,A17,A18,AOFA_A00:def 27;
        end;
        suppose
A23:       b in (FreeGen T).a & b in (vf p).a & b in (vf @M).a;
          then
A24:       b = M & a = the_array_sort_of S by A8,Th3;
A25:       I <> the_array_sort_of S by Th73;
          set u = (g||H)+*(I,supp-var p,v);
          reconsider uIx = u.I.x as Element of C,I by Def4,FUNCT_2:5;
A26:       dom((g||H).I) = (FreeGen T).I by FUNCT_2:def 1;
          (vf @i).I = {i} by A9,AOFA_A00:6;
          then
A27:       i in (vf @i).I by TARSKI:def 1;
A28:       uIx = ((g||H).I+*(x,v)).x by A10,AOFA_A00:def 2
          .= v by Def4,A26,FUNCT_7:31;
A29:       @M value_at(C,u) = u.(the_array_sort_of S).M by Th62
          .= (g||H).a.b by A24,A25,AOFA_A00:def 2
          .= ((g.a)|(H.a)).b by MSAFREE:def 1
          .= g.a.b by A23,FUNCT_1:49
          .= @M value_at(C,s) by A24,Th61;
A30:       @i value_at(C,u) = u.I.i by Th62
          .= ((g||H).I+*(x,v)).i by A10,AOFA_A00:def 2
          .= (g||H).I.i by A27,A10,FUNCT_7:32
          .= ((g.I)|(H.I)).i by MSAFREE:def 1
          .= g.I.i by Def4,FUNCT_1:49
          .= @i value_at(C,s) by Th61;
          b is pure by A23;
          then a = I implies b <> p by A4,Th97;
          then
A31:       g1.a.b = (@M,@i)<-@x value_at(C,u)
          by A2,A6,A23,A24,A10,AOFA_A00:def 27
          .= (@M value_at(C,u),@i value_at(C,u))<-(@x value_at(C,u)) by Th84
          .= (@M value_at(C,u),@i value_at(C,u))<-v by A28,Th62;
          g2.a.b = (@M,@i)<-t value_at(C,s) by A24,A2,A3,Th65
          .= (@M value_at(C,s),@i value_at(C,s))<-(t value_at(C,s)) by Th80;
          hence g1.a.b = g2.a.b by A31,A29,A30;
        end;
      end;
      thus g1.a = g2.a
      proof
        let b be Element of (the generators of G).a;
        per cases;
        suppose b in (FreeGen T).a;
          hence thesis by A11;
        end;
        suppose
          b nin (FreeGen T).a;
          consider h1 being ManySortedFunction of T,C such that
A32:       h1 is_homomorphism T,C & g1 = h1||the generators of G
          by AOFA_A00:def 19;
          consider h2 being ManySortedFunction of T,C such that
A33:       h2 is_homomorphism T,C & g2 = h2||the generators of G
          by AOFA_A00:def 19;
          h1||FreeGen T = h2||FreeGen T
          proof
            let a be SortSymbol of S;
            thus (h1||FreeGen T).a = (h2||FreeGen T).a
            proof
              let b be Element of (FreeGen T).a;
A34:           H.a c= (the generators of G).a & b in (FreeGen T).a
              by PBOOLE:def 2,def 18;
              thus (h1||FreeGen T).a.b
              = ((h1.a)|((FreeGen T).a)).b by MSAFREE:def 1
              .= h1.a.b by FUNCT_1:49
              .= ((h1.a)|((the generators of G).a)).b by A34,FUNCT_1:49
              .= g1.a.b by A32,MSAFREE:def 1
              .= g2.a.b by A34,A11
              .= ((h2.a)|((the generators of G).a)).b by A33,MSAFREE:def 1
              .= h2.a.b by A34,FUNCT_1:49
              .= ((h2.a)|((FreeGen T).a)).b by FUNCT_1:49
              .= (h2||FreeGen T).a.b by MSAFREE:def 1;
            end;
          end;
          hence thesis by A32,A33,EXTENS_1:19;
        end;
      end;
    end;
    hence f.(s,@M.@i:=(t,A)) = f.(s,M:=((@M,@i)<-t,A));
  end;

registration
  let S,X,T,G,C,s,b;
  cluster s.(the bool-sort of S).b -> boolean;
  coherence
  proof
    reconsider s as ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    (the Sorts of C).(the bool-sort of S) = BOOLEAN by AOFA_A00:def 32;
    then s.(the bool-sort of S).b in BOOLEAN;
    hence thesis;
  end;
end;

theorem
  for A being elementary IfWhileAlgebra of the generators of G
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G, b) st
  G is integer-array C-supported & f in C-Execution(A,b,\falseC) &
  T is non array-degenerated & X is countable
  for J being Algorithm of A st
    for s holds f.(s,J).(the_array_sort_of S).M = s.(the_array_sort_of S).M &
    for D being array of (#INT,<=#) st D = s.(the_array_sort_of S).M holds
    (D <> {} implies f.(s,J).I.i1 in dom D & f.(s,J).I.i2 in dom D) &
    (inversions D <> {} implies [f.(s,J).I.i1,f.(s,J).I.i2] in inversions D) &
    (f.(s,J).(the bool-sort of S).b = TRUE iff inversions D <> {})
  for D being 0-based finite array of (#INT,<=#)
  st D = s.(the_array_sort_of S).M & y <> i1 & y <> i2
  holds
    f.(s,while(J, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))).
    (the_array_sort_of S).M is ascending permutation of D &
    (J is absolutely-terminating implies
    while(J, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))
    is_terminating_wrt f, {s1: s1.(the_array_sort_of S).M <> {}})
  proof
    let A be elementary IfWhileAlgebra of the generators of G;
    let f be ExecutionFunction of A, C-States(the generators of G),
    (\falseC)-States(the generators of G, b);
    assume A1: G is integer-array;
    assume A2: G is C-supported;
    assume A3: f in C-Execution(A,b,\falseC);
    assume A4: T is non array-degenerated;
    assume A5: X is countable;
    let J be Algorithm of A;
    assume A6: for s
    holds f.(s,J).(the_array_sort_of S).M = s.(the_array_sort_of S).M &
    for D being array of (#INT,<=#) st D = s.(the_array_sort_of S).M
    holds (D <> {} implies f.(s,J).I.i1 in dom D & f.(s,J).I.i2 in dom D) &
    (inversions D <> {} implies [f.(s,J).I.i1,f.(s,J).I.i2] in inversions D) &
    (f.(s,J).(the bool-sort of S).b = TRUE iff inversions D <> {});
    let D be 0-based finite array of (#INT,<=#);
    assume A7: D = s.(the_array_sort_of S).M;
    assume A8: y <> i1 & y <> i2;
    deffunc F(Nat,Element of C-States(the generators of G))
    = f.($2,J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A));
    set ST = C-States(the generators of G);
A9: the_array_sort_of S <> I by Th73;
    consider g being Function of NAT, ST such that
A10: g.0 = s & for i being Nat holds g.(i+1) = F(i,g.i qua Element of ST)
    from NAT_1:sch 12;
A11: the carrier of (#INT,<=#) = INT by LFUZZY_0:def 3;
    deffunc G(object) = g.In($1,NAT).(the_array_sort_of S).M;
A12: for x being object st x in NAT holds G(x) in INT^omega by AFINSQ_1:def 7;
    consider h being Function of NAT, INT^omega such that
A13: for i being object st i in NAT holds h.i = G(i) from FUNCT_2:sch 2(A12);
A14: dom h = NAT & dom g = NAT by FUNCT_2:def 1;
    then
A15: h is non empty Sequence by ORDINAL1:def 7;
    then
A16: base-h = 0 by EXCHSORT:24;
    then
A17: h.(base-h) = g.In(0,NAT).(the_array_sort_of S).M by A13
    .= D by A7,A10;
A18: for a being Ordinal st a in dom g holds h.a is array of (#INT,<=#)
    proof
      let a be Ordinal;
      assume a in dom g;
      then a in NAT by FUNCT_2:def 1;
      then h.a in INT^omega by FUNCT_2:5;
      hence h.a is array of (#INT,<=#) by A11;
    end;
    set TV = (\falseC)-States(the generators of G, b);
    hereby per cases;
    suppose
A19:   D = {};
      then inversions D = {};
      then f.(s,J).(the bool-sort of S).b <> TRUE by A6,A7;
      then
A20:   f.(s,J).(the bool-sort of S).b = FALSE by XBOOLEAN:def 3
      .= \falseC by Th10;
      f.(s,J) is ManySortedFunction of the generators of G, the Sorts of C
      by AOFA_A00:48;
      then f.(s,J) nin TV & f complies_with_while_wrt TV
      by A20,AOFA_000:def 32,AOFA_A00:def 20;
      then
A21:   f.(s, while(J, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))) =
      f.(s,J);
      f.(s,J).(the_array_sort_of S).M = D by A6,A7;
      hence f.(s,while(J, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))).
      (the_array_sort_of S).M is ascending permutation of D
      by A19,A21,EXCHSORT:38;
    end;
    suppose
A22:   D <> {};
      defpred T[Nat] means h.$1 <> {};
A23:   T[0] by A22,A17,A15,EXCHSORT:24;
A24:   for i being Nat holds T[i] implies T[i+1]
      proof
        let i be Nat;
        assume A25: T[i];
A26:     I <> the_array_sort_of S by Th73;
A27:     h.i = g.(In(i,NAT)).(the_array_sort_of S).M by A13
        .= g.i.(the_array_sort_of S).M;
        reconsider R = h.i as array of (#INT,<=#) by A18,A14,ORDINAL1:def 12;
A28:     h.(i+1) = g.(In(i+1,NAT)).(the_array_sort_of S).M by A13
        .= f.(g.i, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))
        .(the_array_sort_of S).M by A10
        .= f.(f.(g.i, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
        .(the_array_sort_of S).M by AOFA_000:def 29
        .= f.(f.(f.(g.i, J\;y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
        .(the_array_sort_of S).M by AOFA_000:def 29
        .= f.(f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
        @M.@i2:=(@y,A)).(the_array_sort_of S).M by AOFA_000:def 29;
        @i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))
        = f.(f.(g.i, J),y:=(@M.@i1,A)).I.i1 by Th61
        .= f.(g.i, J).I.i1 by A2,A3,A8,Th65;
        then
A29:     @i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))) in dom R by A6,A25,A27;
A30:     @M value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))
        = f.(f.(g.i, J),y:=(@M.@i1,A)).(the_array_sort_of S).M by Th61;
        f.(g.i, J).(the_array_sort_of S).M = g.i.(the_array_sort_of S).M by A6;
        then
A31:    (f.(f.(g.i, J),y:=(@M.@i1,A))).(the_array_sort_of S).M
        = g.i.(the_array_sort_of S).M by A2,A3,A26,Th65;
        f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))
        .(the_array_sort_of S).M
        = f.(f.(f.(g.i, J),y:=(@M.@i1,A)),M:=((@M,@i1)<-(@M.@i2),A))
        .(the_array_sort_of S).M by A1,A2,A3,A4,A5,Th99
        .= (@M,@i1)<-(@M.@i2) value_at(C, f.(f.(g.i, J),y:=(@M.@i1,A)))
        by A2,A3,Th65
        .= (@M value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))),
        @i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))))
        <-(@M.@i2 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))) by Th80
        .= (f.(f.(g.i, J),y:=(@M.@i1,A)).(the_array_sort_of S).M)+*
        (@i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))),
        (@M.@i2 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))))
                 by A29,A31,A27,A30,Th74;
        then
A32:     dom (f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))
        .(the_array_sort_of S).M)
        = dom (g.i.(the_array_sort_of S).M) by A31,FUNCT_7:30;
A33:     @M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))
        = f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)).
        (the_array_sort_of S).M by Th61;
        @i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))
        = f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)).I.i2 by Th61
        .= f.(f.(f.(g.i,J),y:=(@M.@i1,A)),M:=((@M,@i1)<-(@M.@i2),A)).I.i2
        by A1,A2,A3,A4,A5,Th99
        .= f.(f.(g.i,J),y:=(@M.@i1,A)).I.i2 by A2,A3,Th73,Th65
        .= (f.(g.i,J)).I.i2 by A2,A3,A8,Th65;
        then
A34:     @i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))
        in dom R by A6,A25,A27;
A35:     f.(f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
        @M.@i2:=(@y,A)).(the_array_sort_of S).M
        = f.(f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
        M:=((@M,@i2)<-@y,A)).(the_array_sort_of S).M by A1,A2,A3,A4,A5,Th99
        .= (@M,@i2)<-@y value_at(C,f.(f.(f.(g.i, J),y:=(@M.@i1,A)),
        @M.@i1:=(@M.@i2,A))) by A2,A3,Th65
        .= (@M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))),
        @i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
        <-(@y value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
        by Th80
        .= (@M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
        +*(@i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))),
        @y value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
        by A32,A33,A34,A27,Th74;
        dom((@M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),
        @M.@i1:=(@M.@i2,A))))
        +*(@i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))),
        @y value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))))
        = dom (f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))
        .(the_array_sort_of S).M) by A33,FUNCT_7:30;
        hence h.(i+1) <> {} by A35,A28,A27,A25,A32;
      end;
A36:   for i being Nat holds T[i] from NAT_1:sch 2(A23,A24);
A37:   for a being Nat
      for R being (array of (#INT,<=#)) st R = h.a
      for s st g.a = s
      ex x,y being set st x = f.(s,J).I.i1 & y = f.(s,J).I.i2 &
      x in dom R & y in dom R & h.(a+1) = Swap(R,x,y)
      proof
        let a be Nat;
        let R be array of (#INT,<=#) such that
A38:     R = h.a;
        let s1 such that
A39:     g.a = s1;
        reconsider i = a as Element of NAT by ORDINAL1:def 12;
        reconsider s = g.i as Element of ST;
        set y1 = f.(s,J).I.i1, y2 = f.(s,J).I.i2;
        take y1,y2; thus y1 = f.(s1,J).I.i1 & y2 = f.(s1,J).I.i2 by A39;
        In(i,NAT) = i;
        then
A40:     h.i = g.i.(the_array_sort_of S).M by A13;
        R <> {} by A36,A38;
        hence
A41:     y1 in dom R & y2 in dom R by A40,A6,A38;
A42:     succ Segm a = Segm(i+1) & In(i+1,NAT) = i+1 by NAT_1:38;
        then
A43:     h.succ a = g.(i+1).(the_array_sort_of S).M by A13;
A44:     g.(i+1) = f.(s, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))
        by A10
        .= f.(f.(s, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
        by AOFA_000:def 29
        .= f.(f.(f.(s, J\;y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
        by AOFA_000:def 29
        .= f.(f.(f.(f.(s, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
        by AOFA_000:def 29
        .= f.(f.(f.(f.(s, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
        M:=((@M,@i2)<-@y,A)) by A1,A2,A3,A4,A5,Th99
        .= f.(f.(f.(f.(s, J),y:=(@M.@i1,A)),M:=((@M,@i1)<-(@M.@i2),A)),
        M:=((@M,@i2)<-@y,A)) by A1,A2,A3,A4,A5,Th99;
        set s1 = f.(s,J);
        set s2 = f.(s1,y:=(@M.@i1,A));
        set s3 = f.(s2,M:=((@M,@i1)<-(@M.@i2),A));
        set s4 = f.(s3,M:=((@M,@i2)<-@y,A));
A45:     @i1 value_at(C,f.(s,J)) = f.(s,J).I.i1 by Th61;
A46:   s1.(the_array_sort_of S).M = s.(the_array_sort_of S).M by A6;
A47:     @M value_at(C,s1) = s1.(the_array_sort_of S).M by Th61
        .= s.(the_array_sort_of S).M by A6;
A48:     s2.I.y = @M.@i1 value_at(C,s1) by A2,A3,Th65
        .= (@M value_at(C,s1)).(@i1 value_at(C,s1)) by Th79
        .= R.y1 by A38,A41,A45,A40,A47,Th74;
A49:  s2.I.i1 = y1 by A2,A3,A8,Th65;
A50:  s2.I.i2 = y2 by A2,A3,A8,Th65;
A51:   s2.(the_array_sort_of S).M = s1.(the_array_sort_of S).M
        by A2,A3,A9,Th65;
A52:   s3.I.y = s2.I.y by A2,A3,Th73,Th65;
A53:  s3.I.i2 = s2.I.i2 by A2,A3,Th73,Th65;
A54:     @M value_at(C,s2) = s2.(the_array_sort_of S).M by Th61;
A55:     @i1 value_at(C,s2) = s2.I.i1 by Th61;
A56:     @i2 value_at(C,s2) = s2.I.i2 by Th61;
A57:   s3.(the_array_sort_of S).M = (@M,@i1)<-(@M.@i2) value_at(C,s2)
        by A2,A3,Th65
        .= (@M value_at(C,s2),@i1 value_at(C,s2))<-(@M.@i2 value_at(C,s2))
        by Th80
        .= R+*(@i1 value_at(C,s2),@M.@i2 value_at(C,s2))
        by A38,A54,A55,A46,A51,A49,A41,A40,Th74;
A58:     @M value_at(C,s3) = s3.(the_array_sort_of S).M by Th61;
A59:     @i2 value_at(C,s3) = s3.I.i2 by Th61;
A60:     @y value_at(C,s3) = s3.I.y by Th61;
A61:     dom R = dom(R+*(y1,@M.@i2 value_at(C,s2))) by FUNCT_7:30;
A62:   s4.(the_array_sort_of S).M = (@M,@i2)<-@y value_at(C,s3) by A2,A3,Th65
        .= (@M value_at(C,s3),@i2 value_at(C,s3))<-(@y value_at(C,s3))
        by Th80
        .= R+*(y1,@M.@i2 value_at(C,s2))+*(y2, @y value_at(C,s3))
        by A58,A59,A61,A55,A41,A57,A49,A53,A50,Th74;
        @M.@i2 value_at(C,s2) = (@M value_at(C,s2)).(@i2 value_at(C,s2))
        by Th79 .= R.y2 by A38,A41,A54,A56,A50,A51,A46,A40,Th74;
        hence h.(a+1) = Swap(R,y1,y2)
        by A42,A43,A44,A41,A60,A62,A52,A48,FUNCT_7:def 12;
      end;
      defpred Q[Nat] means h.$1 is permutation of D;
A63:   Q[0] by A17,A16,EXCHSORT:38;
A64:   now
        let i be Nat; assume
A65:     Q[i];
        thus Q[i+1]
        proof
          reconsider R = h.i as array of (#INT,<=#) by A18,A14,ORDINAL1:def 12;
          reconsider s = g.i as Element of ST;
          consider x,y being set such that
          x = f.(s,J).I.i1 & y = f.(s,J).I.i2 and
A66:       x in dom R & y in dom R & h.(i+1) = Swap(R,x,y) by A37;
          thus h.(i+1) is permutation of D by A65,A66,EXCHSORT:44;
        end;
      end;
A67:   for i being Nat holds Q[i] from NAT_1:sch 2(A63,A64);
      defpred P[Nat] means
      g.$1.(the_array_sort_of S).M is ascending permutation of D;
A68:   ex i being Nat st P[i]
      proof
        assume
A69:     not thesis;
        for a being Ordinal st a in dom h & succ a in dom h
        ex R being (array of (#INT,<=#)), x,y being set
        st [x,y] in inversions R & h.a = R & h.succ a = Swap(R,x,y)
        proof
          let a be Ordinal;
          assume A70: a in dom h;
          assume succ a in dom h;
          reconsider i = a as Element of NAT by A70,FUNCT_2:def 1;
          reconsider R = h.i as array of (#INT,<=#) by A11;
          reconsider s = g.i as Element of ST;
          set y1 = f.(s,J).I.i1, y2 = f.(s,J).I.i2;
          take R, y1,y2;
          In(i,NAT) = i;
          then
A71:       Q[i] & not P[i] & h.i = g.i.(the_array_sort_of S).M by A67,A69,A13;
          then inversions R <> {} by EXCHSORT:48;
          hence [y1,y2] in inversions R by A71,A6;
          thus h.a = R;
A72:        succ Segm i = Segm(i+1) by NAT_1:38;
          consider x,y being set such that
A73:       x = f.(s,J).I.i1 & y = f.(s,J).I.i2 &
          x in dom R & y in dom R & h.(i+1) = Swap(R,x,y) by A37;
          thus h.succ a = Swap(R,y1,y2) by A73,A72;
        end;
        then h is 0-based arr_computation of D by A15,A14,A17,A18
,EXCHSORT:def 14;
        then h is finite by EXCHSORT:76;
        hence contradiction by A14;
      end;
      consider B being Nat such that
A74:   P[B] & for i being Nat st P[i] holds B <= i from NAT_1:sch 5(A68);
      reconsider h as Sequence of INT^omega by A14,ORDINAL1:def 7;
      reconsider c = h|succ B as array of INT^omega;
      deffunc H(Nat) = f.(g.($1-1),J);
      consider r being FinSequence such that
A75:   len r = B+1 &
      for i being Nat st i in dom r holds r.i = H(i) from FINSEQ_1:sch 2;
      rng r c= ST
      proof
        let x be object; assume x in rng r;
        then consider y being object such that
A76:     y in dom r & x = r.y by FUNCT_1:def 3;
        reconsider y as Nat by A76;
        consider i being Nat such that
A77:     y = 1+i by A76,FINSEQ_3:25,NAT_1:10;
        x = H(y) by A75,A76 .= f.(g.i,J) by A77;
        hence thesis;
      end;
      then reconsider r as non empty FinSequence of ST by A75,FINSEQ_1:def 4;
A78:  1 <= B+1 by NAT_1:11;
A79:   r.1 = f.(g.(1-1),J) by A75,A78,FINSEQ_3:25 .= f.(s,J) by A10;
A80:   r.len r = f.(g.(B+1-1),J) by A75,A78,FINSEQ_3:25 .= f.(g.B,J);
      reconsider R = g.B.(the_array_sort_of S).M as ascending permutation of D
      by A74;
A81:   f.(g.B,J).(the_array_sort_of S).M = R by A6;
A82:   f.(g.B,J) is ManySortedFunction of the generators of G, the Sorts of C
      by AOFA_A00:48;
      inversions R = {} by EXCHSORT:48;
      then f.(g.B,J).(the bool-sort of S).b <> TRUE by A6;
      then f.(g.B,J).(the bool-sort of S).b = FALSE by XBOOLEAN:def 3
      .= \falseC by Th10;
      then
A83:   r.len r nin TV by A80,A82,AOFA_A00:def 20;
      for i being Nat st 1 <= i & i < len r
      holds r.i in TV &
      r.(i+1) = f.(r.i, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)\;J)
      proof
        let i be Nat;
        assume A84: 1 <= i;
        assume A85: i < len r;
        consider j being Nat such that
A86:     i = 1+j by A84,NAT_1:10;
A87:     r.i = H(i) by A75,A84,A85,FINSEQ_3:25 .= f.(g.j,J) by A86;
        In(j,NAT) = j;
        then h.j = g.j.(the_array_sort_of S).M by A13;
        then reconsider R = g.j.(the_array_sort_of S).M as permutation of D
        by A67;
A88:     f.(g.j,J) is ManySortedFunction of the generators of G, the Sorts of C
        by AOFA_A00:48;
        i <= B by A75,A85,NAT_1:13;
        then R is not ascending by A74,A86,NAT_1:13;
        then inversions R <> {} by EXCHSORT:48;
        then f.(g.j,J).(the bool-sort of S).b <> FALSE & FALSE = \falseC
        by A6,Th10;
        hence r.i in TV by A87,A88,AOFA_A00:def 20;
        1 <= i+1 & i+1 <= len r by A85,NAT_1:11,13;
        hence r.(i+1) = H(i+1) by A75,FINSEQ_3:25
        .= f.(f.(g.j,J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)),J)
        by A10,A86
        .= f.(f.(f.(g.j,J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A)),
        J) by AOFA_000:def 29
        .= f.(f.(f.(f.(g.j,J\;y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
        @M.@i2:=(@y,A)),J) by AOFA_000:def 29
        .= f.(f.(f.(f.(f.(g.j,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
        @M.@i2:=(@y,A)),J) by AOFA_000:def 29
        .= f.(f.(f.(f.(g.j,J),y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),
        @M.@i2:=(@y,A)),J) by AOFA_000:def 29
        .= f.(f.(f.(g.j,J),y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)),
        J) by AOFA_000:def 29
        .= f.(r.i,y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)\;J)
        by A87,AOFA_000:def 29;
      end;
      hence f.(s,while(J, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))).
      (the_array_sort_of S).M is ascending permutation of D
      by A80,A81,A79,A83,AOFA_000:86;
    end;
    end;
    assume
A89:J is absolutely-terminating;
    let s; assume s in {s1: s1.(the_array_sort_of S).M <> {}};
    then consider s1 such that
A90: s = s1 & s1.(the_array_sort_of S).M <> {};
A91: the carrier of (#INT,<=#) = INT by LFUZZY_0:def 3;
    reconsider D = s.(the_array_sort_of S).M as 0-based finite non empty
    array of (#INT,<=#) by A91,A90;
    consider g being Function of NAT, ST such that
A92: g.0 = s & for i being Nat holds g.(i+1) = F(i,g.i qua Element of ST)
    from NAT_1:sch 12;
    deffunc G(object) = g.In($1,NAT).(the_array_sort_of S).M;
A93: for x being object st x in NAT holds G(x) in INT^omega by AFINSQ_1:def 7;
    consider h being Function of NAT, INT^omega such that
A94: for i being object st i in NAT holds h.i = G(i) from FUNCT_2:sch 2(A93);
A95: dom h = NAT & dom g = NAT by FUNCT_2:def 1;
    then
A96: h is non empty Sequence by ORDINAL1:def 7;
    then
A97: base-h = 0 by EXCHSORT:24;
    then
A98: h.(base-h) = g.In(0,NAT).(the_array_sort_of S).M by A94
    .= D by A92;
A99: for a being Ordinal st a in dom g holds h.a is array of (#INT,<=#)
    proof
      let a be Ordinal;
      assume a in dom g;
      then a in NAT by FUNCT_2:def 1;
      then h.a in INT^omega by FUNCT_2:5;
      hence h.a is array of (#INT,<=#) by A91;
    end;
    defpred T[Nat] means h.$1 <> {};
A100: T[0] by A98,A96,EXCHSORT:24;
A101: for i being Nat holds T[i] implies T[i+1]
    proof
      let i be Nat;
      assume A102: T[i];
A103:   I <> the_array_sort_of S by Th73;
A104:   h.i = g.(In(i,NAT)).(the_array_sort_of S).M by A94
      .= g.i.(the_array_sort_of S).M;
      reconsider R = h.i as array of (#INT,<=#) by A99,A95,ORDINAL1:def 12;
A105:   h.(i+1) = g.(In(i+1,NAT)).(the_array_sort_of S).M by A94
      .= f.(g.i, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))
      .(the_array_sort_of S).M by A92
      .= f.(f.(g.i, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
      .(the_array_sort_of S).M by AOFA_000:def 29
      .= f.(f.(f.(g.i, J\;y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
      .(the_array_sort_of S).M by AOFA_000:def 29
      .= f.(f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
      @M.@i2:=(@y,A)).(the_array_sort_of S).M by AOFA_000:def 29;
      @i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))
      = f.(f.(g.i, J),y:=(@M.@i1,A)).I.i1 by Th61
      .= f.(g.i, J).I.i1 by A2,A3,A8,Th65;
      then
A106:   @i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))) in dom R by A6,A102,A104;
A107:   @M value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))
      = f.(f.(g.i, J),y:=(@M.@i1,A)).(the_array_sort_of S).M by Th61;
      f.(g.i, J).(the_array_sort_of S).M = g.i.(the_array_sort_of S).M by A6;
      then
A108:  (f.(f.(g.i, J),y:=(@M.@i1,A))).(the_array_sort_of S).M
      = g.i.(the_array_sort_of S).M by A2,A3,A103,Th65;
      f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))
      .(the_array_sort_of S).M
      = f.(f.(f.(g.i, J),y:=(@M.@i1,A)),M:=((@M,@i1)<-(@M.@i2),A))
      .(the_array_sort_of S).M by A1,A2,A3,A4,A5,Th99
      .= (@M,@i1)<-(@M.@i2) value_at(C, f.(f.(g.i, J),y:=(@M.@i1,A)))
      by A2,A3,Th65
      .= (@M value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))),
      @i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))))
      <-(@M.@i2 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))) by Th80
      .= (f.(f.(g.i, J),y:=(@M.@i1,A)).(the_array_sort_of S).M)+*
      (@i1 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A))),
      (@M.@i2 value_at(C,f.(f.(g.i, J),y:=(@M.@i1,A)))))
              by A106,A108,A104,A107,Th74;
      then
A109:   dom (f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))
      .(the_array_sort_of S).M)
      = dom (g.i.(the_array_sort_of S).M) by A108,FUNCT_7:30;
A110:   @M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))
      = f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)).
      (the_array_sort_of S).M by Th61;
      @i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))
      = f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)).I.i2 by Th61
      .= f.(f.(f.(g.i,J),y:=(@M.@i1,A)),M:=((@M,@i1)<-(@M.@i2),A)).I.i2
      by A1,A2,A3,A4,A5,Th99
      .= f.(f.(g.i,J),y:=(@M.@i1,A)).I.i2 by A2,A3,Th73,Th65
      .= (f.(g.i,J)).I.i2 by A2,A3,A8,Th65;
      then
A111:   @i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))
      in dom R by A6,A102,A104;
A112:   f.(f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
      @M.@i2:=(@y,A)).(the_array_sort_of S).M
      = f.(f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
      M:=((@M,@i2)<-@y,A)).(the_array_sort_of S).M by A1,A2,A3,A4,A5,Th99
      .= (@M,@i2)<-@y value_at(C,f.(f.(f.(g.i, J),y:=(@M.@i1,A)),
      @M.@i1:=(@M.@i2,A))) by A2,A3,Th65
      .= (@M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))),
      @i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
      <-(@y value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
      by Th80
      .= (@M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
      +*(@i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))),
      @y value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))))
      by A109,A110,A111,A104,Th74;
      dom((@M value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),
      @M.@i1:=(@M.@i2,A))))
      +*(@i2 value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))),
      @y value_at(C,f.(f.(f.(g.i,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)))))
      = dom (f.(f.(f.(g.i, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A))
      .(the_array_sort_of S).M) by A110,FUNCT_7:30;
      hence h.(i+1) <> {} by A112,A105,A109,A104,A102;
    end;
A113: for i being Nat holds T[i] from NAT_1:sch 2(A100,A101);
A114: for a being Nat
    for R being (array of (#INT,<=#)) st R = h.a
    for s st g.a = s
    ex x,y being set st x = f.(s,J).I.i1 & y = f.(s,J).I.i2 &
    x in dom R & y in dom R & h.(a+1) = Swap(R,x,y)
    proof
      let a be Nat;
      let R be array of (#INT,<=#) such that
A115:   R = h.a;
      let s1 such that
A116:   g.a = s1;
      reconsider i = a as Element of NAT by ORDINAL1:def 12;
      reconsider s = g.i as Element of ST;
      set y1 = f.(s,J).I.i1, y2 = f.(s,J).I.i2;
      take y1,y2; thus y1 = f.(s1,J).I.i1 & y2 = f.(s1,J).I.i2 by A116;
      In(i,NAT) = i;
      then
A117:   h.i = g.i.(the_array_sort_of S).M by A94;
      R <> {} by A115,A113;
      hence
A118:   y1 in dom R & y2 in dom R by A117,A6,A115;
A119:   succ Segm i = Segm(i+1) & In(i+1,NAT) = i+1 by NAT_1:38;
      then
A120:   h.succ a = g.(i+1).(the_array_sort_of S).M by A94;
A121:   g.(i+1) = f.(s, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))
      by A92
      .= f.(f.(s, J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
      by AOFA_000:def 29
      .= f.(f.(f.(s, J\;y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
      by AOFA_000:def 29
      .= f.(f.(f.(f.(s, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A))
      by AOFA_000:def 29
      .= f.(f.(f.(f.(s, J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
      M:=((@M,@i2)<-@y,A)) by A1,A2,A3,A4,A5,Th99
      .= f.(f.(f.(f.(s, J),y:=(@M.@i1,A)),M:=((@M,@i1)<-(@M.@i2),A)),
      M:=((@M,@i2)<-@y,A)) by A1,A2,A3,A4,A5,Th99;
      set s1 = f.(s,J);
      set s2 = f.(s1,y:=(@M.@i1,A));
      set s3 = f.(s2,M:=((@M,@i1)<-(@M.@i2),A));
      set s4 = f.(s3,M:=((@M,@i2)<-@y,A));
A122:   @i1 value_at(C,f.(s,J)) = f.(s,J).I.i1 by Th61;
A123: s1.(the_array_sort_of S).M = s.(the_array_sort_of S).M by A6;
A124:   @M value_at(C,s1) = s1.(the_array_sort_of S).M by Th61
      .= s.(the_array_sort_of S).M by A6;
A125:   s2.I.y = @M.@i1 value_at(C,s1) by A2,A3,Th65
      .= (@M value_at(C,s1)).(@i1 value_at(C,s1)) by Th79
      .= R.y1 by A115,A118,A122,A117,A124,Th74;
A126: s2.I.i1 = y1 by A2,A3,A8,Th65;
A127: s2.I.i2 = y2 by A2,A3,A8,Th65;
A128: s2.(the_array_sort_of S).M = s1.(the_array_sort_of S).M
      by A2,A3,A9,Th65;
A129: s3.I.y = s2.I.y by A2,A3,Th73,Th65;
A130:s3.I.i2 = s2.I.i2 by A2,A3,Th73,Th65;
A131:   @M value_at(C,s2) = s2.(the_array_sort_of S).M by Th61;
A132:   @i1 value_at(C,s2) = s2.I.i1 by Th61;
A133:   @i2 value_at(C,s2) = s2.I.i2 by Th61;
A134: s3.(the_array_sort_of S).M = (@M,@i1)<-(@M.@i2) value_at(C,s2)
      by A2,A3,Th65
      .= (@M value_at(C,s2),@i1 value_at(C,s2))<-(@M.@i2 value_at(C,s2))
      by Th80
      .= R+*(@i1 value_at(C,s2),@M.@i2 value_at(C,s2))
      by A115,A131,A132,A123,A128,A126,A118,A117,Th74;
A135:   @M value_at(C,s3) = s3.(the_array_sort_of S).M by Th61;
A136:   @i2 value_at(C,s3) = s3.I.i2 by Th61;
A137:   @y value_at(C,s3) = s3.I.y by Th61;
A138:   dom R = dom(R+*(y1,@M.@i2 value_at(C,s2))) by FUNCT_7:30;
A139: s4.(the_array_sort_of S).M = (@M,@i2)<-@y value_at(C,s3) by A2,A3,Th65
      .= (@M value_at(C,s3),@i2 value_at(C,s3))<-(@y value_at(C,s3))
      by Th80
      .= R+*(y1,@M.@i2 value_at(C,s2))+*(y2, @y value_at(C,s3))
      by A135,A136,A138,A132,A118,A134,A126,A130,A127,Th74;
      @M.@i2 value_at(C,s2) = (@M value_at(C,s2)).(@i2 value_at(C,s2))
      by Th79 .= R.y2 by A115,A118,A131,A133,A127,A128,A123,A117,Th74;
      hence h.(a+1) = Swap(R,y1,y2)
      by A119,A120,A121,A118,A137,A139,A129,A125,FUNCT_7:def 12;
    end;
    defpred Q[Nat] means h.$1 is permutation of D;
A140: Q[0] by A98,A97,EXCHSORT:38;
A141: now
      let i be Nat; assume
A142:   Q[i];
      thus Q[i+1]
      proof
        reconsider R = h.i as array of (#INT,<=#) by A99,A95,ORDINAL1:def 12;
        reconsider s = g.i as Element of ST;
        consider x,y being set such that
        x = f.(s,J).I.i1 & y = f.(s,J).I.i2 and
A143:     x in dom R & y in dom R & h.(i+1) = Swap(R,x,y) by A114;
        thus h.(i+1) is permutation of D by A142,A143,EXCHSORT:44;
      end;
    end;
A144: for i being Nat holds Q[i] from NAT_1:sch 2(A140,A141);
    defpred P[Nat] means
    g.$1.(the_array_sort_of S).M is ascending permutation of D;
A145: ex i being Nat st P[i]
    proof
      assume
A146:   not thesis;
      for a being Ordinal st a in dom h & succ a in dom h
      ex R being (array of (#INT,<=#)), x,y being set
      st [x,y] in inversions R & h.a = R & h.succ a = Swap(R,x,y)
      proof
        let a be Ordinal;
        assume A147: a in dom h;
        assume succ a in dom h;
        reconsider i = a as Element of NAT by A147,FUNCT_2:def 1;
        reconsider R = h.i as array of (#INT,<=#) by A91;
        reconsider s = g.i as Element of ST;
        set y1 = f.(s,J).I.i1, y2 = f.(s,J).I.i2;
        take R, y1,y2;
        In(i,NAT) = i;
        then
A148:     Q[i] & not P[i] & h.i = g.i.(the_array_sort_of S).M by A144,A146,A94;
        then inversions R <> {} by EXCHSORT:48;
        hence [y1,y2] in inversions R by A148,A6;
        thus h.a = R;
        consider x,y being set such that
A149:     x = f.(s,J).I.i1 & y = f.(s,J).I.i2 &
        x in dom R & y in dom R & h.(i+1) = Swap(R,x,y) by A114;
         succ Segm i = Segm(i+1) by NAT_1:38;
        hence h.succ a = Swap(R,y1,y2) by A149;
      end;
      then h is 0-based arr_computation of D by A96,A95,A98,A99
,EXCHSORT:def 14;
      then h is finite by EXCHSORT:76;
      hence contradiction by A95;
    end;
    consider B being Nat such that
A150: P[B] & for i being Nat st P[i] holds B <= i from NAT_1:sch 5(A145);
    reconsider h as Sequence of INT^omega by A95,ORDINAL1:def 7;
    reconsider c = h|succ B as array of INT^omega;
    set TV = (\falseC)-States(the generators of G, b);
    deffunc H(Nat) = f.(g.($1-1),J);
    consider r being FinSequence such that
A151: len r = B+1 &
    for i being Nat st i in dom r holds r.i = H(i) from FINSEQ_1:sch 2;
    rng r c= ST
    proof
      let x be object; assume x in rng r;
      then consider y being object such that
A152:   y in dom r & x = r.y by FUNCT_1:def 3;
      reconsider y as Nat by A152;
      consider i being Nat such that
A153:   y = 1+i by A152,FINSEQ_3:25,NAT_1:10;
      x = H(y) by A151,A152 .= f.(g.i,J) by A153;
      hence thesis;
    end;
    then reconsider r as non empty FinSequence of ST by A151,FINSEQ_1:def 4;
A154:1 <= B+1 by NAT_1:11;
A155: r.1 = f.(g.(1-1),J) by A151,A154,FINSEQ_3:25 .= f.(s,J) by A92;
A156: r.len r = f.(g.(B+1-1),J) by A151,A154,FINSEQ_3:25 .= f.(g.B,J);
    reconsider R = g.B.(the_array_sort_of S).M as ascending permutation of D
    by A150;
A157: f.(g.B,J) is ManySortedFunction of the generators of G, the Sorts of C
    by AOFA_A00:48;
    inversions R = {} by EXCHSORT:48;
    then f.(g.B,J).(the bool-sort of S).b <> TRUE by A6;
    then f.(g.B,J).(the bool-sort of S).b = FALSE by XBOOLEAN:def 3
    .= \falseC by Th10;
    then
A158: r.len r nin TV by A156,A157,AOFA_A00:def 20;
    for i being Nat st 1 <= i & i < len r
    holds r.i in TV &
    r.(i+1) = f.(r.i, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)\;J)
    proof
      let i be Nat;
      assume A159: 1 <= i;
      assume A160: i < len r;
      consider j being Nat such that
A161:   i = 1+j by A159,NAT_1:10;
A162:   r.i = H(i) by A151,A159,A160,FINSEQ_3:25 .= f.(g.j,J) by A161;
      In(j,NAT) = j;
      then h.j = g.j.(the_array_sort_of S).M by A94;
      then reconsider R = g.j.(the_array_sort_of S).M as permutation of D
      by A144;
A163:   f.(g.j,J) is ManySortedFunction of the generators of G, the Sorts of C
      by AOFA_A00:48;
      i <= B by A151,A160,NAT_1:13;
      then R is not ascending by A150,A161,NAT_1:13;
      then inversions R <> {} by EXCHSORT:48;
      then f.(g.j,J).(the bool-sort of S).b <> FALSE & FALSE = \falseC
      by A6,Th10;
      hence r.i in TV by A162,A163,AOFA_A00:def 20;
      1 <= i+1 & i+1 <= len r by A160,NAT_1:11,13;
      hence r.(i+1) = H(i+1) by A151,FINSEQ_3:25
      .= f.(f.(g.j,J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)),J)
      by A92,A161
      .= f.(f.(f.(g.j,J\;y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),@M.@i2:=(@y,A)),J)
      by AOFA_000:def 29
      .= f.(f.(f.(f.(g.j,J\;y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
      @M.@i2:=(@y,A)),J) by AOFA_000:def 29
      .= f.(f.(f.(f.(f.(g.j,J),y:=(@M.@i1,A)),@M.@i1:=(@M.@i2,A)),
      @M.@i2:=(@y,A)),J) by AOFA_000:def 29
      .= f.(f.(f.(f.(g.j,J),y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)),
      @M.@i2:=(@y,A)),J) by AOFA_000:def 29
      .= f.(f.(f.(g.j,J),y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)),J)
      by AOFA_000:def 29
      .= f.(r.i,y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A)\;J)
      by A162,AOFA_000:def 29;
    end;
    hence [s,while(J, y:=(@M.@i1,A)\;@M.@i1:=(@M.@i2,A)\;@M.@i2:=(@y,A))]
    in TerminatingPrograms(A,ST,TV,f) by A89,A155,A158,AOFA_000:def 33,101;
  end;