The Mizar article:

Recursive Euclide Algorithm

by
Jing-Chao Chen

Received June 15, 1999

Copyright (c) 1999 Association of Mizar Users

MML identifier: SCMP_GCD
[ MML identifier index ]


environ

 vocabulary AMI_3, SCMPDS_2, AMI_1, SCMPDS_4, ARYTM_3, NAT_1, INT_1, INT_2,
      ABSVALUE, SCMPDS_3, AMI_2, ARYTM_1, CARD_1, SCMFSA6A, SCMFSA_7, FUNCT_1,
      RELAT_1, SCMPDS_1, FUNCOP_1, FUNCT_4, BOOLE, SCMP_GCD;
 notation XBOOLE_0, ENUMSET1, XCMPLX_0, XREAL_0, RELAT_1, FUNCT_1, INT_1,
      NAT_1, STRUCT_0, FUNCT_4, AMI_1, AMI_2, AMI_3, SCMPDS_1, SCMPDS_2,
      SCMPDS_3, CARD_1, SCMPDS_4, GROUP_1, INT_2;
 constructors DOMAIN_1, NAT_1, SCMPDS_1, SCMPDS_4, INT_2;
 clusters AMI_1, INT_1, SCMPDS_2, SCMFSA_4, FRAENKEL, ORDINAL2, NUMBERS;
 requirements NUMERALS, REAL, SUBSET, ARITHM;
 definitions AMI_1;
 theorems AMI_1, AMI_3, NAT_1, REAL_1, TARSKI, FUNCT_4, INT_1, AMI_5, SCMPDS_2,
      SCMPDS_3, ABSVALUE, GRFUNC_1, AXIOMS, SCMPDS_4, CQC_THE1, SCMPDS_5,
      SCMPDS_6, ENUMSET1, SCMPDS_1, GR_CY_2, INT_2, NAT_LAT, AMI_4, XBOOLE_0,
      XBOOLE_1, XCMPLX_1;
 schemes NAT_1;

begin :: Preliminaries

reserve m,n for Nat,
        a,b for Int_position,
        i,j for Instruction of SCMPDS,
        s,s1,s2 for State of SCMPDS,
        I,J for Program-block;

theorem Th1:
  m>0 implies n hcf m= m hcf (n mod m)
proof
   set r=n mod m,
       x=n hcf m,
       y=m hcf r;
   assume m>0;
   then consider t be Nat such that
A1: n = m * t + r & r < m by NAT_1:def 2;
A2: x divides n & x divides m by NAT_1:def 5;
    then x divides r by NAT_1:58;
then A3: x divides y by A2,NAT_1:def 5;
A4: y divides m & y divides r by NAT_1:def 5;
then y divides m*t by NAT_1:56;
    then y divides n by A1,A4,NAT_1:55;
    then y divides x by A4,NAT_1:def 5;
   hence thesis by A3,NAT_1:52;
end;

theorem Th2:
  for i,j being Integer st i>=0 & j>0 holds
      i gcd j= j gcd (i mod j)
proof
   let i,j be Integer;
   assume A1: i>=0 & j>0;
then A2: abs(j)> 0 by ABSVALUE:def 1;
A3: abs(i) mod abs(j) >= 0 by NAT_1:18;
    thus i gcd j = abs(i) hcf abs(j) by INT_2:def 3
         .=abs(j) hcf (abs(i) mod abs(j)) by A2,Th1
         .=abs(j) hcf abs(abs(i) mod abs(j)) by A3,ABSVALUE:def 1
         .=j gcd (abs(i) mod abs(j)) by INT_2:def 3
         .=j gcd (i mod j) by A1,AMI_4:2;
end;

theorem Th3:
  for m being Nat,j being Integer st inspos m=j holds
     inspos(m+2) = 2*(abs(j) div 2)+4
proof
      let m be Nat,j be Integer;
      assume inspos m=j;
then A1:   j=il.m by SCMPDS_3:def 2
       .=2*m+2*1 by AMI_3:def 20
       .=2*(m+1) by XCMPLX_1:8;
then j >= 0 by NAT_1:18;
    hence 2*(abs(j) div 2)+4 = 2*((2*(m+1)) div 2)+4 by A1,ABSVALUE:def 1
     .= 2*(m+1)+4 by AMI_5:3
     .= 2*m+2*1+4 by XCMPLX_1:8
     .= 2*m+2*2+2 by XCMPLX_1:1
     .= 2*(m+2)+2 by XCMPLX_1:8
     .= il.(m+2) by AMI_3:def 20
    .= inspos(m+2) by SCMPDS_3:def 2;
end;

definition let k be Nat;
 func intpos k -> Int_position equals
:Def1:  dl.k;
 coherence
  proof
  dl.k in SCM-Data-Loc by AMI_3:def 2;
    hence dl.k is Int_position by SCMPDS_2:def 1,def 2;
  end;
end;

theorem Th4:
 for n1,n2 be Nat st n1 <> n2 holds intpos n1 <> intpos n2
 proof let k1,k2 be Nat;
     intpos k2 = dl.k2 & intpos k1 = dl.k1 by Def1;
  hence thesis by AMI_3:52;
 end;

theorem Th5:
 for n1,n2 be Nat holds DataLoc(n1,n2) = intpos(n1+n2)
proof let n1,n2 be Nat;
A1:   n1+n2 >= 0 by NAT_1:18;
      thus DataLoc(n1,n2)=2*abs(n1+n2)+1 by SCMPDS_2:def 4
      .=2*(n1+n2)+1 by A1,ABSVALUE:def 1
      .=dl.(n1+n2) by AMI_3:def 19
      .=intpos(n1+n2) by Def1;
end;

theorem Th6:
 for s being State of SCMPDS,m1,m2 being Nat st IC s=inspos (m1+m2)
 holds ICplusConst(s,-m2)=inspos m1
proof
    let s be State of SCMPDS,m1,m2 be Nat;
    assume A1: IC s=inspos (m1+m2);
     consider m such that
A2:  m = IC s & ICplusConst(s,-m2) = abs(m-2+2*(-m2))+2 by SCMPDS_2:def 20;
A3:  m=il.(m1+m2) by A1,A2,SCMPDS_3:def 2
     .=2*(m1+m2) +2 by AMI_3:def 20;
A4:  2*m1 >= 0 by NAT_1:18;
     thus ICplusConst(s,-m2) =abs(2*(m1+m2)+2-2+(-2*m2))+2 by A2,A3,XCMPLX_1:
175
     .=abs(2*(m1+m2)+(-2*m2))+2 by XCMPLX_1:26
     .=abs(2*m1+ 2*m2+(-2*m2))+2 by XCMPLX_1:8
     .=abs(2*m1)+2 by XCMPLX_1:137
     .=2*m1+2 by A4,ABSVALUE:def 1
     .=il.m1 by AMI_3:def 20
     .=inspos m1 by SCMPDS_3:def 2;
end;

:: GBP:Global Base Pointer
definition
 func GBP -> Int_position equals
:Def2:  intpos 0;
 coherence;

:: SBP:Stack Base(bottom) Pointer
 func SBP -> Int_position equals
:Def3:  intpos 1;
 coherence;
end;

theorem Th7:
  GBP <> SBP by Def2,Def3,Th4;

theorem Th8:
   card (I ';' i)= card I + 1
proof
   thus card (I ';' i) = card (I ';' Load i) by SCMPDS_4:def 5
        .=card I+ card (Load i) by SCMPDS_4:45
        .=card I+1 by SCMPDS_5:6;
end;

theorem Th9:
   card (i ';' j)= 2
proof
   thus card (i ';' j) = card (Load i ';' Load j) by SCMPDS_4:def 6
    .=card (Load i)+card (Load j) by SCMPDS_4:45
    .=1+card(Load j) by SCMPDS_5:6
    .=1+1 by SCMPDS_5:6
    .=2;
end;

theorem Th10:
   (I ';' i).inspos card I =i & inspos card I in dom (I ';' i)
proof
A1: inspos 0 in dom Load i by SCMPDS_5:2;
    thus (I ';' i).inspos (card I) =(I ';' i).inspos(0+card I)
     .=(I ';' i).(inspos 0 + card I) by SCMPDS_3:def 3
     .=(I ';' Load i).(inspos 0 + card I) by SCMPDS_4:def 5
     .=(Load i).inspos 0 by A1,SCMPDS_4:38
     .=i by SCMPDS_5:4;
      card (I ';' i) = card I+1 by Th8;
    then card I < card (I ';' i) by REAL_1:69;
    hence thesis by SCMPDS_4:1;
end;

theorem Th11:
   (I ';' i ';' J).inspos card I =i
proof
     inspos card I in dom (I ';' i) by Th10;
   hence (I ';' i ';' J ).inspos card I
      =(I ';' i).inspos card I by SCMPDS_4:37
      .=i by Th10;
end;

begin :: The Construction of Recursive Euclide Algorithm
:: Greatest Common Divisor
:: gcd(x,y)     < x=(SBP,2) y=(SBP,3) >
:: BEGIN
:: if y=0 then gcd:=x else
:: gcd:=gcd(y, x mod y)
:: END
definition
 func GCD-Algorithm -> Program-block equals
:Def4:  ::Def04
     (((GBP:=0) ';' (SBP := 7) ';' saveIC(SBP,RetIC) ';'
     goto 2 ';' halt SCMPDS ) ';' (SBP,3)<=0_goto 9 ';'
     ((SBP,6):=(SBP,3)) ';' Divide(SBP,2,SBP,3) ';'
     ((SBP,7):=(SBP,3)) ';' ((SBP,4+RetSP):=(GBP,1))) ';'
     AddTo(GBP,1,4) ';' saveIC(SBP,RetIC) ';'
     (goto -7) ';' ((SBP,2):=(SBP,6)) ';' return SBP;
 coherence;
end;

   set i00= GBP:=0,
       i01=SBP := 7,
       i02=saveIC(SBP,RetIC),
       i03=goto 2,
       i04=halt SCMPDS,

       i05= (SBP,3)<=0_goto 9,
       i06= (SBP,6):=(SBP,3),
       i07= Divide(SBP,2,SBP,3),
       i08= (SBP,7):=(SBP,3),
       i09= (SBP,4+RetSP):=(GBP,1),

       i10=AddTo(GBP,1,4),
       i11=saveIC(SBP,RetIC),
       i12=goto -7,
       i13=(SBP,2):=(SBP,6),
       i14=return SBP;

begin :: The Computation of Recursive Euclide Algorithm

theorem Th12:
  card GCD-Algorithm = 15
proof
    set GCD1=i00 ';' i01 ';' i02 ';' i03 ';' i04,
        GCD2=GCD1 ';' i05 ';' i06 ';' i07 ';' i08 ';' i09;
A1:  card GCD1=card (i00 ';' i01 ';' i02 ';' i03)+ 1 by Th8
     .=card (i00 ';' i01 ';' i02)+1+1 by Th8
     .=card (i00 ';' i01)+1+1+1 by Th8
     .=2+1+1+1 by Th9
     .=5;
A2: card GCD2=card (GCD1 ';' i05 ';' i06 ';' i07 ';' i08 )+ 1 by Th8
    .=card (GCD1 ';' i05 ';' i06 ';' i07)+1+1 by Th8
    .=card (GCD1 ';' i05 ';' i06) +1+1+1 by Th8
    .=card (GCD1 ';' i05 )+1+1+1+1 by Th8
    .=5+1+1+1+1+1 by A1,Th8
    .=10;
  thus card GCD-Algorithm
  =card(GCD2 ';' i10 ';' i11 ';' i12 ';' i13)+1 by Def4,Th8
  .=card(GCD2 ';' i10 ';' i11 ';' i12)+1+1 by Th8
  .=card(GCD2 ';' i10 ';' i11)+1+1+1 by Th8
  .=card(GCD2 ';' i10)+1+1+1+1 by Th8
  .=10+1+1+1+1+1 by A2,Th8
  .=15;
end;

theorem
    n < 15 iff inspos n in dom GCD-Algorithm by Th12,SCMPDS_4:1;

theorem Th14:
    GCD-Algorithm.inspos 0=GBP:=0 &
    GCD-Algorithm.inspos 1=SBP:= 7 &
    GCD-Algorithm.inspos 2=saveIC(SBP,RetIC) &
    GCD-Algorithm.inspos 3=goto 2 &
    GCD-Algorithm.inspos 4=halt SCMPDS &
    GCD-Algorithm.inspos 5=(SBP,3)<=0_goto 9 &
    GCD-Algorithm.inspos 6=(SBP,6):=(SBP,3) &
    GCD-Algorithm.inspos 7=Divide(SBP,2,SBP,3) &
    GCD-Algorithm.inspos 8=(SBP,7):=(SBP,3) &
    GCD-Algorithm.inspos 9=(SBP,4+RetSP):=(GBP,1) &
    GCD-Algorithm.inspos 10=AddTo(GBP,1,4) &
    GCD-Algorithm.inspos 11=saveIC(SBP,RetIC) &
    GCD-Algorithm.inspos 12=goto -7 &
    GCD-Algorithm.inspos 13=(SBP,2):=(SBP,6) &
    GCD-Algorithm.inspos 14=return SBP
proof
    set I2=i00 ';' i01,
        I3=I2 ';' i02,
        I4=I3 ';' i03,
        I5=I4 ';' i04,
        I6=I5 ';' i05,
        I7=I6 ';' i06,
        I8=I7 ';' i07,
        I9=I8 ';' i08,
        I10=I9 ';' i09,
        I11=I10 ';' i10,
        I12=I11 ';' i11,
        I13=I12 ';' i12,
        I14=I13 ';' i13;

A1: card I2=2 by Th9;
then A2: card I3=2+1 by Th8;
then A3: card I4=3+1 by Th8;
then A4: card I5=4+1 by Th8;
then A5: card I6=5+1 by Th8;
then A6: card I7=6+1 by Th8;
then A7: card I8=7+1 by Th8;
then A8: card I9=8+1 by Th8;
then A9: card I10=9+1 by Th8;
then A10:  card I11=10+1 by Th8;
then A11: card I12=11+1 by Th8;
then A12: card I13=12+1 by Th8;
then A13: card I14=13+1 by Th8;

     set J14=i13 ';' i14,
         J13=i12 ';' J14,
         J12=i11 ';' J13,
         J11=i10 ';' J12,
         J10=i09 ';' J11,
         J9=i08 ';' J10,
         J8=i07 ';' J9,
         J7=i06 ';' J8,
         J6=i05 ';' J7,
         J5=i04 ';' J6,
         J4=i03 ';' J5,
         J3=i02 ';' J4,
         J2=i01 ';' J3;
A14: GCD-Algorithm=I13 ';' J14 by Def4,SCMPDS_4:49;
then A15: GCD-Algorithm=I12 ';' J13 by SCMPDS_4:48;
then A16: GCD-Algorithm=I11 ';' J12 by SCMPDS_4:48;
then A17: GCD-Algorithm=I10 ';' J11 by SCMPDS_4:48;
then A18: GCD-Algorithm=I9 ';' J10 by SCMPDS_4:48;
then A19: GCD-Algorithm=I8 ';' J9 by SCMPDS_4:48;
then A20: GCD-Algorithm=I7 ';' J8 by SCMPDS_4:48;
then A21: GCD-Algorithm=I6 ';' J7 by SCMPDS_4:48;
then A22: GCD-Algorithm=I5 ';' J6 by SCMPDS_4:48;
then A23: GCD-Algorithm=I4 ';' J5 by SCMPDS_4:48;
then A24: GCD-Algorithm=I3 ';' J4 by SCMPDS_4:48;
then A25: GCD-Algorithm=I2 ';' J3 by SCMPDS_4:48;
then GCD-Algorithm=i00 ';' J2 by SCMPDS_4:52;

    hence GCD-Algorithm.inspos 0=i00 by SCMPDS_6:16;
A26: card Load i00=1 by SCMPDS_5:6;
      GCD-Algorithm=Load i00 ';' i01 ';' J3 by A25,SCMPDS_4:43;
   hence GCD-Algorithm.inspos 1=i01 by A26,Th11;
    thus GCD-Algorithm.inspos 2=i02 by A1,A24,Th11;
    thus GCD-Algorithm.inspos 3=i03 by A2,A23,Th11;
    thus GCD-Algorithm.inspos 4=i04 by A3,A22,Th11;
    thus GCD-Algorithm.inspos 5=i05 by A4,A21,Th11;
    thus GCD-Algorithm.inspos 6=i06 by A5,A20,Th11;
    thus GCD-Algorithm.inspos 7=i07 by A6,A19,Th11;
    thus GCD-Algorithm.inspos 8=i08 by A7,A18,Th11;
    thus GCD-Algorithm.inspos 9=i09 by A8,A17,Th11;
    thus GCD-Algorithm.inspos 10=i10 by A9,A16,Th11;
    thus GCD-Algorithm.inspos 11=i11 by A10,A15,Th11;
    thus GCD-Algorithm.inspos 12=i12 by A11,A14,Th11;
      GCD-Algorithm=I14 ';' Load i14 by Def4,SCMPDS_4:def 5;
    hence GCD-Algorithm.inspos 13=i13 by A12,Th11;
    thus GCD-Algorithm.inspos 14=i14 by A13,Def4,Th10;
end;

Lm1:
   GCD-Algorithm c= s implies
    s.inspos 0=i00 & s.inspos 1=i01 &
    s.inspos 2=i02 & s.inspos 3=i03 &
    s.inspos 4=i04 & s.inspos 5=i05 &
    s.inspos 6=i06 & s.inspos 7=i07 &
    s.inspos 8=i08 & s.inspos 9=i09 &
    s.inspos 10=i10 & s.inspos 11=i11 &
    s.inspos 12=i12 & s.inspos 13=i13 &
    s.inspos 14=i14
proof
  set GA=GCD-Algorithm;
  assume A1: GA c= s;
      inspos 0 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 0=i00 by A1,Th14,GRFUNC_1:8;
      inspos 1 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 1=i01 by A1,Th14,GRFUNC_1:8;
      inspos 2 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 2=i02 by A1,Th14,GRFUNC_1:8;
      inspos 3 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 3=i03 by A1,Th14,GRFUNC_1:8;
      inspos 4 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 4=i04 by A1,Th14,GRFUNC_1:8;
      inspos 5 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 5=i05 by A1,Th14,GRFUNC_1:8;
      inspos 6 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 6=i06 by A1,Th14,GRFUNC_1:8;
      inspos 7 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 7=i07 by A1,Th14,GRFUNC_1:8;
      inspos 8 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 8=i08 by A1,Th14,GRFUNC_1:8;
      inspos 9 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 9=i09 by A1,Th14,GRFUNC_1:8;
      inspos 10 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 10=i10 by A1,Th14,GRFUNC_1:8;
      inspos 11 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 11=i11 by A1,Th14,GRFUNC_1:8;
      inspos 12 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 12=i12 by A1,Th14,GRFUNC_1:8;
      inspos 13 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 13=i13 by A1,Th14,GRFUNC_1:8;
      inspos 14 in dom GA by Th12,SCMPDS_4:1;
  hence s.inspos 14=i14 by A1,Th14,GRFUNC_1:8;
end;

theorem Th15:
  for s being State of SCMPDS st Initialized GCD-Algorithm c= s
  holds IC (Computation s).4 = inspos 5 &
   (Computation s).4.GBP = 0 &
   (Computation s).4.SBP = 7 &
   (Computation s).4.intpos(7+RetIC) = inspos 2 &
   (Computation s).4.intpos 9 = s.intpos 9 &
   (Computation s).4.intpos 10 = s.intpos 10
proof
  let s be State of SCMPDS;
  set GA=GCD-Algorithm,
      Cs=Computation s;
  assume
A1:  Initialized GA c= s;
then A2:  GA c= s by SCMPDS_4:57;
A3:  IC s=inspos 0 by A1,SCMPDS_5:18;

then A4:  CurInstr s = s.inspos 0 by AMI_1:def 17
     .=i00 by A2,Lm1;
A5:  Cs.(0 + 1) = Following Cs.0 by AMI_1:def 19
     .= Following s by AMI_1:def 19
     .= Exec(i00,s) by A4,AMI_1:def 18;

A6:  IC Cs.1=Cs.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s by A5,SCMPDS_2:57
     .= inspos (0+1) by A3,SCMPDS_4:70;
then A7:  CurInstr Cs.1=Cs.1.inspos 1 by AMI_1:def 17
     .=s.inspos 1 by AMI_1:54
     .=i01 by A2,Lm1;
A8:  Cs.(1 + 1) = Following Cs.1 by AMI_1:def 19
     .= Exec(i01,Cs.1) by A7,AMI_1:def 18;
A9:  Cs.1.GBP=0 by A5,SCMPDS_2:57;
       intpos 9 <> GBP by Def2,Th4;
then A10:  Cs.1.intpos 9=s.intpos 9 by A5,SCMPDS_2:57;
       intpos 10 <> GBP by Def2,Th4;
then A11:  Cs.1.intpos 10 =s.intpos 10 by A5,SCMPDS_2:57;

A12:  IC Cs.2=Cs.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs.1 by A8,SCMPDS_2:57
     .= inspos (1+1) by A6,SCMPDS_4:70;
then A13:  CurInstr Cs.2=Cs.2.inspos 2 by AMI_1:def 17
     .=s.inspos 2 by AMI_1:54
     .=i02 by A2,Lm1;
A14:  Cs.(2 + 1) = Following Cs.2 by AMI_1:def 19
     .= Exec(i02,Cs.2) by A13,AMI_1:def 18;
A15:  Cs.2.GBP=0 by A8,A9,Th7,SCMPDS_2:57;
A16:  Cs.2.SBP=7 by A8,SCMPDS_2:57;
       intpos 9 <> SBP by Def3,Th4;
then A17:  Cs.2.intpos 9=s.intpos 9 by A8,A10,SCMPDS_2:57;
       intpos 10 <> SBP by Def3,Th4;
then A18:  Cs.2.intpos 10 =s.intpos 10 by A8,A11,SCMPDS_2:57;

A19:  IC Cs.3=Cs.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs.2 by A14,SCMPDS_2:71
     .= inspos (2+1) by A12,SCMPDS_4:70;
then A20:  CurInstr Cs.3=Cs.3.inspos 3 by AMI_1:def 17
     .=s.inspos 3 by AMI_1:54
     .=i03 by A2,Lm1;
A21:  Cs.(3 + 1) = Following Cs.3 by AMI_1:def 19
     .= Exec(i03,Cs.3) by A20,AMI_1:def 18;
A22:  DataLoc(Cs.2.SBP,RetIC)=intpos(7+1) by A16,Th5,SCMPDS_1:def 23;
       intpos 0 <> intpos 8 by Th4;
then A23:  Cs.3.GBP=0 by A14,A15,A22,Def2,SCMPDS_2:71;
       intpos 1 <> intpos 8 by Th4;
then A24:  Cs.3.SBP=7 by A14,A16,A22,Def3,SCMPDS_2:71;
A25:  Cs.3.intpos 8=inspos 2 by A12,A14,A22,SCMPDS_2:71;
       intpos 9 <> DataLoc(Cs.2.SBP,RetIC) by A22,Th4;
then A26:  Cs.3.intpos 9=s.intpos 9 by A14,A17,SCMPDS_2:71;
       intpos 10 <> DataLoc(Cs.2.SBP,RetIC) by A22,Th4;
then A27:  Cs.3.intpos 10 =s.intpos 10 by A14,A18,SCMPDS_2:71;

   thus
          IC Cs.4=Cs.4.IC SCMPDS by AMI_1:def 15
        .= ICplusConst(Cs.3,2) by A21,SCMPDS_2:66
        .= inspos (3+2) by A19,SCMPDS_6:23
        .= inspos 5;
   thus Cs.4.GBP=0 by A21,A23,SCMPDS_2:66;
   thus Cs.4.SBP = 7 by A21,A24,SCMPDS_2:66;
  thus Cs.4.intpos(7+RetIC) = inspos 2 by A21,A25,SCMPDS_1:def 23,SCMPDS_2:66;
   thus Cs.4.intpos 9=s.intpos 9 by A21,A26,SCMPDS_2:66;
   thus Cs.4.intpos 10=s.intpos 10 by A21,A27,SCMPDS_2:66;
end;

Lm2:
     n>0 implies GBP <> intpos(m+n)
proof
     assume A1: n>0;
        n<=m+n by NAT_1:29;
    hence GBP <> intpos(m+n) by A1,Def2,Th4;
end;

Lm3:
     n>1 implies SBP <> intpos(m+n)
proof
     assume A1: n>1;
        n<=m+n by NAT_1:29;
    hence SBP <> intpos(m+n) by A1,Def3,Th4;
end;

Lm4:
  GCD-Algorithm c= s & IC s = inspos 5 &
   n=s.SBP & s.GBP=0 & s.DataLoc(s.SBP,3) > 0
  implies
    IC (Computation s).7 = inspos (5+7) &
    (Computation s).8 = Exec(i12,(Computation s).7) &
    (Computation s).7.SBP=n+4 &
    (Computation s).7.GBP=0 &
    (Computation s).7.intpos(n+7)
      = s.DataLoc(s.SBP,2) mod s.DataLoc(s.SBP,3) &
    (Computation s).7.intpos(n+6) = s.DataLoc(s.SBP,3) &
    (Computation s).7.intpos(n+4) = n &
    (Computation s).7.intpos(n+5) = inspos 11
proof
   set x=s.DataLoc(s.SBP,2),
      y=s.DataLoc(s.SBP,3),
      Cs=Computation s;
     assume A1: GCD-Algorithm c= s;
     assume A2: IC s = inspos 5;
     assume A3: n=s.SBP;
     assume A4: s.GBP=0;
     assume A5: y > 0;

A6:  CurInstr s = s.inspos 5 by A2,AMI_1:def 17
     .=i05 by A1,Lm1;
A7:  Cs.(1+0) = Following Cs.0 by AMI_1:def 19
    .= Following s by AMI_1:def 19
    .= Exec(i05,s) by A6,AMI_1:def 18;

A8:  IC Cs.1=Cs.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s by A5,A7,SCMPDS_2:68
     .= inspos (5+1) by A2,SCMPDS_4:70;
then A9:  CurInstr Cs.1 = Cs.1.inspos 6 by AMI_1:def 17
     .=s.inspos 6 by AMI_1:54
     .=i06 by A1,Lm1;
A10:  Cs.(1+1) = Following Cs.1 by AMI_1:def 19
     .= Exec(i06,Cs.1) by A9,AMI_1:def 18;
A11:  Cs.1.SBP=n by A3,A7,SCMPDS_2:68;
A12:  Cs.1.GBP=0 by A4,A7,SCMPDS_2:68;
A13:  Cs.1.intpos(n+3) = Cs.1.DataLoc(n,3) by Th5
     .=y by A3,A7,SCMPDS_2:68;
A14:  Cs.1.intpos(n+2) = Cs.1.DataLoc(n,2) by Th5
     .=x by A3,A7,SCMPDS_2:68;

A15:  IC Cs.2=Cs.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs.1 by A10,SCMPDS_2:59
     .= inspos (6+1) by A8,SCMPDS_4:70;
then A16:  CurInstr Cs.2 = Cs.2.inspos 7 by AMI_1:def 17
     .=s.inspos 7 by AMI_1:54
     .=i07 by A1,Lm1;
A17:  Cs.(2+1) = Following Cs.2 by AMI_1:def 19
     .= Exec(i07,Cs.2) by A16,AMI_1:def 18;
A18:  DataLoc(Cs.1.SBP,6)=intpos(n+6) by A11,Th5;
     then SBP <> DataLoc(Cs.1.SBP,6) by Lm3;
then A19:  Cs.2.SBP=n by A10,A11,SCMPDS_2:59;
       GBP <> DataLoc(Cs.1.SBP,6) by A18,Lm2;
then A20:  Cs.2.GBP=0 by A10,A12,SCMPDS_2:59;
A21:  Cs.2.intpos(n+6)=Cs.1.DataLoc(n,3) by A10,A11,A18,SCMPDS_2:59
     .= y by A13,Th5;
       n+3<>n+6 by XCMPLX_1:2;
     then intpos(n+3) <> DataLoc(Cs.1.SBP,6) by A18,Th4;
then A22:  Cs.2.intpos(n+3)=y by A10,A13,SCMPDS_2:59;
       n+2<>n+6 by XCMPLX_1:2;
     then intpos(n+2) <> DataLoc(Cs.1.SBP,6) by A18,Th4;
then A23:  Cs.2.intpos(n+2)=x by A10,A14,SCMPDS_2:59;

A24:  IC Cs.3=Cs.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs.2 by A17,SCMPDS_2:64
     .= inspos (7+1) by A15,SCMPDS_4:70;
then A25:  CurInstr Cs.3 = Cs.3.inspos 8 by AMI_1:def 17
     .=s.inspos 8 by AMI_1:54
     .=i08 by A1,Lm1;

A26:  Cs.(3+1) = Following Cs.3 by AMI_1:def 19
     .= Exec(i08,Cs.3) by A25,AMI_1:def 18;
A27:  DataLoc(Cs.2.SBP,2)=intpos(n+2) by A19,Th5;
then A28:  SBP <> DataLoc(Cs.2.SBP,2) by Lm3;
A29:  DataLoc(Cs.2.SBP,3)=intpos(n+3) by A19,Th5;
     then SBP <> DataLoc(Cs.2.SBP,3) by Lm3;
then A30:  Cs.3.SBP=n by A17,A19,A28,SCMPDS_2:64;
A31:  GBP <> DataLoc(Cs.2.SBP,2) by A27,Lm2;
       GBP <> DataLoc(Cs.2.SBP,3) by A29,Lm2;
then A32:  Cs.3.GBP=0 by A17,A20,A31,SCMPDS_2:64;
A33:  Cs.3.intpos(n+3) = x mod y by A17,A22,A23,A27,A29,SCMPDS_2:64;
        n+6<>n+2 by XCMPLX_1:2;
then A34:   intpos(n+6) <> DataLoc(Cs.2.SBP,2) by A27,Th4;
        n+6<>n+3 by XCMPLX_1:2;
      then intpos(n+6) <> DataLoc(Cs.2.SBP,3) by A29,Th4;
then A35:   Cs.3.intpos(n+6) =y by A17,A21,A34,SCMPDS_2:64;

A36:   IC Cs.4=Cs.4.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.3 by A26,SCMPDS_2:59
      .= inspos (8+1) by A24,SCMPDS_4:70;
then A37:   CurInstr Cs.4 = Cs.4.inspos 9 by AMI_1:def 17
      .=s.inspos 9 by AMI_1:54
     .=i09 by A1,Lm1;
A38:   Cs.(4+1) = Following Cs.4 by AMI_1:def 19
        .= Exec(i09,Cs.4) by A37,AMI_1:def 18;
A39:   DataLoc(Cs.3.SBP,7)=intpos(n+7) by A30,Th5;
      then A40: SBP <> DataLoc(Cs.3.SBP,7) by Lm3;
then A41:   Cs.4.SBP=n by A26,A30,SCMPDS_2:59;
        GBP <> DataLoc(Cs.3.SBP,7) by A39,Lm2;
then A42:   Cs.4.GBP=0 by A26,A32,SCMPDS_2:59;
A43:   Cs.4.intpos(n+7)=Cs.3.DataLoc(n,3) by A26,A30,A39,SCMPDS_2:59
      .= x mod y by A33,Th5;
        n+6<>n+7 by XCMPLX_1:2;
      then intpos(n+6) <> DataLoc(Cs.3.SBP,7) by A39,Th4;
then A44:   Cs.4.intpos(n+6) =y by A26,A35,SCMPDS_2:59;

A45:   IC Cs.5=Cs.5.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.4 by A38,SCMPDS_2:59
      .= inspos (9+1) by A36,SCMPDS_4:70;
then A46:   CurInstr Cs.5 = Cs.5.inspos 10 by AMI_1:def 17
      .=s.inspos 10 by AMI_1:54
      .=i10 by A1,Lm1;
A47:   Cs.(5+1) = Following Cs.5 by AMI_1:def 19
      .= Exec(i10,Cs.5) by A46,AMI_1:def 18;
A48:   DataLoc(Cs.4.SBP,4+RetSP)=intpos(n+(4+0)) by A41,Th5,SCMPDS_1:def 22;
      then SBP <> DataLoc(Cs.4.SBP,4+RetSP) by Lm3;
then A49:   Cs.5.SBP=n by A38,A41,SCMPDS_2:59;
        GBP <> DataLoc(Cs.4.SBP,4+RetSP) by A48,Lm2;
then A50:   Cs.5.GBP=0 by A38,A42,SCMPDS_2:59;
        n+7<>n+4 by XCMPLX_1:2;
      then intpos(n+7) <> DataLoc(Cs.4.SBP,4+RetSP) by A48,Th4;
then A51:   Cs.5.intpos(n+7) =x mod y by A38,A43,SCMPDS_2:59;
        n+6<>n+4 by XCMPLX_1:2;
      then intpos(n+6) <> DataLoc(Cs.4.SBP,4+RetSP) by A48,Th4;
then A52:   Cs.5.intpos(n+6) =y by A38,A44,SCMPDS_2:59;
A53:   Cs.5.intpos(n+4) =Cs.4.DataLoc(0,1) by A38,A42,A48,SCMPDS_2:59
      .=Cs.4.intpos(0+1) by Th5
      .=n by A26,A30,A40,Def3,SCMPDS_2:59;

A54:   IC Cs.6=Cs.6.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.5 by A47,SCMPDS_2:60
      .= inspos (10+1) by A45,SCMPDS_4:70;
then A55:   CurInstr Cs.6 = Cs.6.inspos 11 by AMI_1:def 17
      .=s.inspos 11 by AMI_1:54
     .=i11 by A1,Lm1;
A56:   Cs.(6+1) = Following Cs.6 by AMI_1:def 19
      .= Exec(i11,Cs.6) by A55,AMI_1:def 18;
A57:   DataLoc(Cs.5.GBP,1)=intpos(0+1) by A50,Th5;
then A58:   Cs.6.SBP=n+4 by A47,A49,Def3,SCMPDS_2:60;
A59:   Cs.6.GBP=0 by A47,A50,A57,Def3,Th7,SCMPDS_2:60;
        n+7 <> 1 by NAT_1:29;
      then intpos(n+7) <> DataLoc(Cs.5.GBP,1) by A57,Th4;
then A60:   Cs.6.intpos(n+7) =x mod y by A47,A51,SCMPDS_2:60;
        n+6 <> 1 by NAT_1:29;
      then intpos(n+6) <> DataLoc(Cs.5.GBP,1) by A57,Th4;
then A61:   Cs.6.intpos(n+6) =y by A47,A52,SCMPDS_2:60;
        n+4 <> 1 by NAT_1:29;
      then intpos(n+4) <> DataLoc(Cs.5.GBP,1) by A57,Th4;
then A62:   Cs.6.intpos(n+4) =n by A47,A53,SCMPDS_2:60;

      thus
     IC Cs.7=Cs.7.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.6 by A56,SCMPDS_2:71
      .= inspos (11+1) by A54,SCMPDS_4:70
      .= inspos (5+7);
then A63:   CurInstr Cs.7 = Cs.7.inspos 12 by AMI_1:def 17
      .=s.inspos 12 by AMI_1:54
      .=i12 by A1,Lm1;
  thus Cs.8=Cs.(7+1)
       .= Following Cs.7 by AMI_1:def 19
      .= Exec(i12,Cs.7) by A63,AMI_1:def 18;
A64:   DataLoc(Cs.6.SBP,RetIC)=intpos(n+4+1) by A58,Th5,SCMPDS_1:def 23
      .=intpos(n+(4+1)) by XCMPLX_1:1;
      then SBP <> DataLoc(Cs.6.SBP,RetIC) by Lm3;
   hence Cs.7.SBP=n+4 by A56,A58,SCMPDS_2:71;
        GBP <> DataLoc(Cs.6.SBP,RetIC) by A64,Lm2;
   hence Cs.7.GBP=0 by A56,A59,SCMPDS_2:71;
        n+7<>n+5 by XCMPLX_1:2;
      then intpos(n+7) <> DataLoc(Cs.6.SBP,RetIC) by A64,Th4;
   hence Cs.7.intpos(n+7) =x mod y by A56,A60,SCMPDS_2:71;
        n+6<>n+5 by XCMPLX_1:2;
      then intpos(n+6) <> DataLoc(Cs.6.SBP,RetIC) by A64,Th4;
   hence Cs.7.intpos(n+6) =y by A56,A61,SCMPDS_2:71;
        n+4<>n+5 by XCMPLX_1:2;
      then intpos(n+4) <> DataLoc(Cs.6.SBP,RetIC) by A64,Th4;
   hence Cs.7.intpos(n+4)=n by A56,A62,SCMPDS_2:71;
   thus Cs.7.intpos(n+5)=inspos 11 by A54,A56,A64,SCMPDS_2:71;
end;

Lm5:
  GCD-Algorithm c= s & IC s = inspos 5 &
   n=s.SBP & s.GBP=0 & s.DataLoc(s.SBP,3) > 0 & 1<m & m <=n+1
  implies
    (Computation s).7.intpos m = s.intpos m
proof
   set Cs=Computation s;
     assume A1: GCD-Algorithm c= s;
     assume A2: IC s = inspos 5;
     assume A3: n=s.SBP;
     assume A4: s.GBP=0;
     assume A5: s.DataLoc(s.SBP,3) > 0;
     assume A6: 1 < m;
     assume A7: m <= n+1;

A8:  CurInstr s = s.inspos 5 by A2,AMI_1:def 17
     .=i05 by A1,Lm1;
A9:  Cs.(1+0) = Following Cs.0 by AMI_1:def 19
    .= Following s by AMI_1:def 19
    .= Exec(i05,s) by A8,AMI_1:def 18;

A10:  IC Cs.1=Cs.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s by A5,A9,SCMPDS_2:68
     .= inspos (5+1) by A2,SCMPDS_4:70;
then A11:  CurInstr Cs.1 = Cs.1.inspos 6 by AMI_1:def 17
     .=s.inspos 6 by AMI_1:54
     .=i06 by A1,Lm1;
A12:  Cs.(1+1) = Following Cs.1 by AMI_1:def 19
     .= Exec(i06,Cs.1) by A11,AMI_1:def 18;
A13:  Cs.1.SBP=n by A3,A9,SCMPDS_2:68;
A14:  Cs.1.GBP=0 by A4,A9,SCMPDS_2:68;
A15:  Cs.1.intpos m = s.intpos m by A9,SCMPDS_2:68;

A16:  IC Cs.2=Cs.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs.1 by A12,SCMPDS_2:59
     .= inspos (6+1) by A10,SCMPDS_4:70;
then A17:  CurInstr Cs.2 = Cs.2.inspos 7 by AMI_1:def 17
     .=s.inspos 7 by AMI_1:54
     .=i07 by A1,Lm1;
A18:  Cs.(2+1) = Following Cs.2 by AMI_1:def 19
     .= Exec(i07,Cs.2) by A17,AMI_1:def 18;
A19:  DataLoc(Cs.1.SBP,6)=intpos(n+6) by A13,Th5;
     then SBP <> DataLoc(Cs.1.SBP,6) by Lm3;
then A20:  Cs.2.SBP=n by A12,A13,SCMPDS_2:59;
       GBP <> DataLoc(Cs.1.SBP,6) by A19,Lm2;
then A21:  Cs.2.GBP=0 by A12,A14,SCMPDS_2:59;
       n+1 < n+6 by REAL_1:53;
     then intpos m <> DataLoc(Cs.1.SBP,6) by A7,A19,Th4;
then A22:  Cs.2.intpos m= s.intpos m by A12,A15,SCMPDS_2:59;

A23:  IC Cs.3=Cs.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs.2 by A18,SCMPDS_2:64
     .= inspos (7+1) by A16,SCMPDS_4:70;
then A24:  CurInstr Cs.3 = Cs.3.inspos 8 by AMI_1:def 17
     .=s.inspos 8 by AMI_1:54
     .=i08 by A1,Lm1;
A25:  Cs.(3+1) = Following Cs.3 by AMI_1:def 19
     .= Exec(i08,Cs.3) by A24,AMI_1:def 18;
A26:  DataLoc(Cs.2.SBP,2)=intpos(n+2) by A20,Th5;
then A27:  SBP <> DataLoc(Cs.2.SBP,2) by Lm3;
A28:  DataLoc(Cs.2.SBP,3)=intpos(n+3) by A20,Th5;
     then SBP <> DataLoc(Cs.2.SBP,3) by Lm3;
then A29:  Cs.3.SBP=n by A18,A20,A27,SCMPDS_2:64;
A30:  GBP <> DataLoc(Cs.2.SBP,2) by A26,Lm2;
       GBP <> DataLoc(Cs.2.SBP,3) by A28,Lm2;
then A31:  Cs.3.GBP=0 by A18,A21,A30,SCMPDS_2:64;
       n+1 < n+2 by REAL_1:53;
then A32:  intpos m <> DataLoc(Cs.2.SBP,2) by A7,A26,Th4;
       n+1 < n+3 by REAL_1:53;
     then intpos m <> DataLoc(Cs.2.SBP,3) by A7,A28,Th4;
then A33:  Cs.3.intpos m =s.intpos m by A18,A22,A32,SCMPDS_2:64;

A34:   IC Cs.4=Cs.4.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.3 by A25,SCMPDS_2:59
      .= inspos (8+1) by A23,SCMPDS_4:70;
then A35:   CurInstr Cs.4 = Cs.4.inspos 9 by AMI_1:def 17
      .=s.inspos 9 by AMI_1:54
      .=i09 by A1,Lm1;
A36:   Cs.(4+1) = Following Cs.4 by AMI_1:def 19
        .= Exec(i09,Cs.4) by A35,AMI_1:def 18;
A37:   DataLoc(Cs.3.SBP,7)=intpos(n+7) by A29,Th5;
      then SBP <> DataLoc(Cs.3.SBP,7) by Lm3;
then A38:   Cs.4.SBP=n by A25,A29,SCMPDS_2:59;
        GBP <> DataLoc(Cs.3.SBP,7) by A37,Lm2;
then A39:   Cs.4.GBP=0 by A25,A31,SCMPDS_2:59;
        n+1 < n+7 by REAL_1:53;
      then intpos m <> DataLoc(Cs.3.SBP,7) by A7,A37,Th4;
then A40:   Cs.4.intpos m =s.intpos m by A25,A33,SCMPDS_2:59;

A41:   IC Cs.5=Cs.5.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.4 by A36,SCMPDS_2:59
      .= inspos (9+1) by A34,SCMPDS_4:70;
then A42:   CurInstr Cs.5 = Cs.5.inspos 10 by AMI_1:def 17
      .=s.inspos 10 by AMI_1:54
      .=i10 by A1,Lm1;
A43:   Cs.(5+1) = Following Cs.5 by AMI_1:def 19
      .= Exec(i10,Cs.5) by A42,AMI_1:def 18;
A44:   DataLoc(Cs.4.SBP,4+RetSP)=intpos(n+(4+0)) by A38,Th5,SCMPDS_1:def 22;
      then SBP <> DataLoc(Cs.4.SBP,4+RetSP) by Lm3;
then A45:   Cs.5.SBP=n by A36,A38,SCMPDS_2:59;
        GBP <> DataLoc(Cs.4.SBP,4+RetSP) by A44,Lm2;
then A46:   Cs.5.GBP=0 by A36,A39,SCMPDS_2:59;
        n+1 < n+4 by REAL_1:53;
      then intpos m <> DataLoc(Cs.4.SBP,4+RetSP) by A7,A44,Th4;
then A47:   Cs.5.intpos m = s.intpos m by A36,A40,SCMPDS_2:59;

     IC Cs.6=Cs.6.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs.5 by A43,SCMPDS_2:60
      .= inspos (10+1) by A41,SCMPDS_4:70;
then A48:   CurInstr Cs.6 = Cs.6.inspos 11 by AMI_1:def 17
      .=s.inspos 11 by AMI_1:54
      .=i11 by A1,Lm1;
A49:   Cs.(6+1) = Following Cs.6 by AMI_1:def 19
      .= Exec(i11,Cs.6) by A48,AMI_1:def 18;
A50:   DataLoc(Cs.5.GBP,1)=intpos(0+1) by A46,Th5;
then A51:   Cs.6.SBP=n+4 by A43,A45,Def3,SCMPDS_2:60;
        intpos m <> DataLoc(Cs.5.GBP,1) by A6,A50,Th4;
then A52:   Cs.6.intpos m =s.intpos m by A43,A47,SCMPDS_2:60;

A53:   DataLoc(Cs.6.SBP,RetIC)=intpos(n+4+1) by A51,Th5,SCMPDS_1:def 23
      .=intpos(n+(4+1)) by XCMPLX_1:1;
        n+1 < n+5 by REAL_1:53;
      then intpos m <> DataLoc(Cs.6.SBP,RetIC) by A7,A53,Th4;
   hence Cs.7.intpos m=s.intpos m by A49,A52,SCMPDS_2:71;
end;

theorem Th16:
  for s being State of SCMPDS st GCD-Algorithm c= s
  & IC s = inspos 5 & s.SBP >0 & s.GBP=0 &
  s.DataLoc(s.SBP,3) >= 0 & s.DataLoc(s.SBP,2) >= s.DataLoc(s.SBP,3)
  holds
  ex n st CurInstr (Computation s).n = return SBP &
   s.SBP=(Computation s).n.SBP & (Computation s).n.DataLoc(s.SBP,2)
   =s.DataLoc(s.SBP,2) gcd s.DataLoc(s.SBP,3) &
   (for j be Nat st 1<j & j <= s.SBP+1 holds
       s.intpos j=(Computation s).n.intpos j)
proof
   set GA=GCD-Algorithm;
   defpred P[Nat] means
      for s being State of SCMPDS st GA c= s
      & IC s = inspos 5 & s.SBP >0 & s.GBP=0 &
      s.DataLoc(s.SBP,3) <= $1 &
      s.DataLoc(s.SBP,3) >= 0 & s.DataLoc(s.SBP,2) >= s.DataLoc(s.SBP,3)
      holds ex n st CurInstr (Computation s).n = return SBP &
      s.SBP=(Computation s).n.SBP &
      (Computation s).n.DataLoc(s.SBP,2)
      =s.DataLoc(s.SBP,2) gcd s.DataLoc(s.SBP,3) &
      (for j be Nat st 1<j & j <= s.SBP+1 holds
         s.intpos j=(Computation s).n.intpos j);

     now
      let s be State of SCMPDS;
      set x=s.DataLoc(s.SBP,2),
         y=s.DataLoc(s.SBP,3),
         Cs=Computation s;
     assume A1: GA c= s;
     assume A2: IC s = inspos 5;
     assume s.SBP >0;
     assume s.GBP=0;
     assume A3: y <= 0;
     assume A4: y >= 0;
     assume A5: x >= y;
A6:  CurInstr s = s.inspos 5 by A2,AMI_1:def 17
     .=i05 by A1,Lm1;
A7:  Cs.(1+0) = Following Cs.0 by AMI_1:def 19
     .= Following s by AMI_1:def 19
     .= Exec(i05,s) by A6,AMI_1:def 18;
A8:  IC Cs.1=Cs.1.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s,9) by A3,A7,SCMPDS_2:68
     .= inspos (5+9) by A2,SCMPDS_6:23;
     take n=1;
     thus CurInstr Cs.n=Cs.n.inspos 14 by A8,AMI_1:def 17
     .=s.inspos 14 by AMI_1:54
     .=i14 by A1,Lm1;
     thus Cs.n.SBP=s.SBP by A7,SCMPDS_2:68;
A9:  y = 0 by A3,A4,AXIOMS:21;
then A10:  abs(y)= 0 by ABSVALUE:def 1;
     thus Cs.n.DataLoc(s.SBP,2)=x by A7,SCMPDS_2:68
     .=abs(x) by A5,A9,ABSVALUE:def 1
     .=abs(x) hcf abs(y) by A10,NAT_LAT:36
     .=x gcd y by INT_2:def 3;
     thus for j be Nat st 1<j & j <= s.SBP+1 holds
        s.intpos j=(Computation s).n.intpos j by A7,SCMPDS_2:68;
   end;
then A11: P[0];
A12: now let k be Nat;
      assume A13:P[k];
        now let s be State of SCMPDS;
       set x=s.DataLoc(s.SBP,2),
           y=s.DataLoc(s.SBP,3),
           yy=y,
          Cs=Computation s;
        assume A14: GA c= s;
        assume A15: IC s = inspos 5;
        assume A16: s.SBP >0;
        assume A17: s.GBP=0;
        assume A18: y <= k+1;
        assume A19: y >= 0;
        assume A20: x >= y;
then A21:     x >= 0 by A19,AXIOMS:22;
        reconsider y as Nat by A19,INT_1:16;
        per cases by A18,NAT_1:26;
        suppose y <= k;
          hence ex n st CurInstr Cs.n = return SBP &
           s.SBP=Cs.n.SBP &
           Cs.n.DataLoc(s.SBP,2)= x gcd yy &
            (for j be Nat st 1<j & j <= s.SBP+1 holds
         s.intpos j=Cs.n.intpos j)
           by A13,A14,A15,A16,A17,A19,A20;
        suppose A22: y = k+1;
           then y<>0 by NAT_1:21;
then A23:        y>0 by NAT_1:19;
           reconsider pn=s.SBP as Nat by A16,INT_1:16;
A24:        pn=s.SBP;
then A25:        IC Cs.7 = inspos (5+7) &
           Cs.8 = Exec(i12,Cs.7) & Cs.7.SBP=pn+4 &
           Cs.7.GBP=0 & Cs.7.intpos(pn+7) = x mod y &
           Cs.7.intpos(pn+6) = y &
           Cs.7.intpos(pn+4) = pn &
           Cs.7.intpos(pn+5) = inspos 11 by A14,A15,A17,A23,Lm4;
          set s8=Cs.8;
A26:       IC s8=s8.IC SCMPDS by AMI_1:def 15
          .= ICplusConst(Cs.7,-7) by A25,SCMPDS_2:66
          .= inspos 5 by A25,Th6;
A27:       GA c= s8 by A14,AMI_3:38;
A28:       s8.SBP=pn+4 by A25,SCMPDS_2:66;
A29:       4<=pn+4 by NAT_1:29;
then A30:       s8.SBP > 0 by A28,AXIOMS:22;
A31:       s8.GBP=0 by A25,SCMPDS_2:66;
          set x1=s8.DataLoc(s8.SBP,2),
              y1=s8.DataLoc(s8.SBP,3);
A32:       x1=s8.intpos(pn+4+2) by A28,Th5
          .=s8.intpos(pn+(4+2)) by XCMPLX_1:1
          .=y by A25,SCMPDS_2:66;
A33:       y1=s8.intpos(pn+4+3) by A28,Th5
          .=s8.intpos(pn+(4+3)) by XCMPLX_1:1
          .=x mod y by A25,SCMPDS_2:66;
then A34:       y1<y by A23,GR_CY_2:3;
then A35:       y1 <= k by A22,INT_1:20;
        y1 >= 0 by A23,A33,GR_CY_2:2;
          then consider m such that
A36:       CurInstr (Computation s8).m = return SBP &
          s8.SBP=(Computation s8).m.SBP &
          (Computation s8).m.DataLoc(s8.SBP,2)= x1 gcd y1 &
         (for j be Nat st 1<j & j <= s8.SBP+1 holds
          s8.intpos j=(Computation s8).m.intpos j)
            by A13,A26,A27,A30,A31,A32,A34,A35;
          set s9=Cs.(m+8);
A37:       CurInstr s9 = return SBP by A36,AMI_1:51;
A38:       s8.SBP=s9.SBP by A36,AMI_1:51;
A39:       Cs.(m+(8+1))=Cs.(m+8+1) by XCMPLX_1:1
          .= Following s9 by AMI_1:def 19
          .= Exec(return SBP,s9) by A37,AMI_1:def 18;
A40:       1 < pn+4 by A29,AXIOMS:22;
            pn+4 < s8.SBP+1 by A28,REAL_1:69;
then A41:       s8.intpos(pn+4)=(Computation s8).m.intpos (pn+4) by A36,A40
          .=s9.intpos(pn+4) by AMI_1:51;
         5<=pn+5 by NAT_1:29;
then A42:       1 <pn+5 by AXIOMS:22;
A43:       s8.SBP+1=pn+(4+1) by A28,XCMPLX_1:1;
A44:       inspos 11=s8.intpos(pn+5) by A25,SCMPDS_2:66
          .=(Computation s8).m.intpos (pn+5) by A36,A42,A43
          .=s9.intpos(pn+(4+1)) by AMI_1:51
          .=s9.intpos(pn+4+1) by XCMPLX_1:1
          .=s9.DataLoc(s9.SBP,RetIC) by A28,A38,Th5,SCMPDS_1:def 23;

A45:       IC Cs.(m+9)=Cs.(m+9).IC SCMPDS by AMI_1:def 15
          .= 2*(abs(s9.DataLoc(s9.SBP,RetIC)) div 2)+4 by A39,SCMPDS_2:70
          .= inspos (11+2) by A44,Th3;
then A46:       CurInstr Cs.(m+9) = Cs.(m+9).inspos 13 by AMI_1:def 17
           .=s.inspos 13 by AMI_1:54
           .=i13 by A14,Lm1;
A47:       Cs.(m+(9+1))=Cs.(m+9+1) by XCMPLX_1:1
          .= Following Cs.(m+9) by AMI_1:def 19
          .= Exec(i13,Cs.(m+9)) by A46,AMI_1:def 18;
A48:      Cs.(m+9).SBP=s9.DataLoc(pn+4,RetSP) by A28,A38,A39,SCMPDS_2:70
         .=s9.intpos(pn+4+0) by Th5,SCMPDS_1:def 22
         .=pn by A25,A41,SCMPDS_2:66;
           SBP <> intpos(pn+6) by Lm3;
then A49:      Cs.(m+9).intpos(pn+6)=s9.intpos(pn+(4+2)) by A39,SCMPDS_2:70
         .=s9.intpos(pn+4+2) by XCMPLX_1:1
         .=s9.DataLoc(s8.SBP,2) by A28,Th5
         .=x1 gcd y1 by A36,AMI_1:51;

         IC Cs.(m+10)=Cs.(m+10).IC SCMPDS by AMI_1:def 15
          .= Next IC Cs.(m+9) by A47,SCMPDS_2:59
          .= inspos (13+1) by A45,SCMPDS_4:70;
then A50:       CurInstr Cs.(m+10)=Cs.(m+10).inspos 14 by AMI_1:def 17
          .=s.inspos 14 by AMI_1:54
         .=i14 by A14,Lm1;

          hereby
             take n=m+10;
             thus CurInstr (Computation s).n = return SBP by A50;
A51:          DataLoc(Cs.(m+9).SBP,2)=intpos(pn+2) by A48,Th5;
             then SBP <> DataLoc(Cs.(m+9).SBP,2) by Lm3;
           hence Cs.n.SBP=s.SBP by A47,A48,SCMPDS_2:59;

           thus Cs.n.DataLoc(s.SBP,2)=Cs.(m+9).DataLoc(pn,6) by A47,A48,
SCMPDS_2:59
             .=yy gcd (x mod yy) by A32,A33,A49,Th5
             .=x gcd yy by A21,A23,Th2;
           hereby let j be Nat;
               assume A52: 1<j & j <= s.SBP+1;
                 s.SBP <= s8.SBP by A28,NAT_1:29;
               then s.SBP +1 <= s8.SBP+1 by AXIOMS:24;
then A53:            j <= s8.SBP+1 by A52,AXIOMS:22;
                 intpos j <> SBP by A52,Def3,Th4;
then A54:            Cs.(m+9).intpos j=s9.intpos j by A39,SCMPDS_2:70
               .=(Computation s8).m.intpos j by AMI_1:51
               .=s8.intpos j by A36,A52,A53;
                 pn+1<pn+2 by REAL_1:53;
then A55:            intpos j <> DataLoc(Cs.(m+9).SBP,2) by A51,A52,Th4;
                 Cs.7.intpos j = s.intpos j by A14,A15,A17,A23,A24,A52,Lm5;
             hence s.intpos j=s8.intpos j by A25,SCMPDS_2:66
                   .=Cs.n.intpos j by A47,A54,A55,SCMPDS_2:59;
           end;
         end;
        end;
        hence P[k+1];
    end;
A56: for n holds P[n] from Ind(A11,A12);
    let s be State of SCMPDS;
    assume A57: GA c= s & IC s = inspos 5 &
    s.SBP >0 & s.GBP=0 & s.DataLoc(s.SBP,3) >= 0 &
    s.DataLoc(s.SBP,2) >= s.DataLoc(s.SBP,3);
    then reconsider m=s.DataLoc(s.SBP,3) as Nat by INT_1:16;
      P[m] by A56;
    hence thesis by A57;
end;

theorem Th17:
  for s being State of SCMPDS st GCD-Algorithm c= s
  & IC s = inspos 5 & s.SBP >0 & s.GBP=0 &
   s.DataLoc(s.SBP,3) >= 0 & s.DataLoc(s.SBP,2) >= 0
 holds
  ex n st CurInstr (Computation s).n = return SBP &
   s.SBP=(Computation s).n.SBP & (Computation s).n.DataLoc(s.SBP,2)
   =s.DataLoc(s.SBP,2) gcd s.DataLoc(s.SBP,3) &
    (for j be Nat st 1<j & j <= s.SBP+1 holds
        s.intpos j=(Computation s).n.intpos j)
proof
    let s be State of SCMPDS;
    set GA=GCD-Algorithm,
        x=s.DataLoc(s.SBP,2),
        y=s.DataLoc(s.SBP,3),
        yy=y,
        Cs=(Computation s);
     assume
A1:  GA c= s & IC s = inspos 5 &
     s.SBP>0 & s.GBP=0 & y >= 0 & x >= 0;
     per cases;
     suppose x >= y;
       hence thesis by A1,Th16;
     suppose x < y;
then A2:    y>0 by A1,AXIOMS:22;
       reconsider y as Nat by A1,INT_1:16;
       reconsider pn=s.SBP as Nat by A1,INT_1:16;
A3:    pn=s.SBP;
then A4:    IC Cs.7 = inspos (5+7) &
       Cs.8 = Exec(i12,Cs.7) & Cs.7.SBP=pn+4 &
       Cs.7.GBP=0 & Cs.7.intpos(pn+7) = x mod y &
       Cs.7.intpos(pn+6) = y &
       Cs.7.intpos(pn+4) = pn &
       Cs.7.intpos(pn+5) = inspos 11 by A1,A2,Lm4;
       set s8=Cs.8;
A5:    IC s8=s8.IC SCMPDS by AMI_1:def 15
       .= ICplusConst(Cs.7,-7) by A4,SCMPDS_2:66
       .= inspos 5 by A4,Th6;
A6:    GA c= s8 by A1,AMI_3:38;
A7:    s8.SBP=pn+4 by A4,SCMPDS_2:66;
A8:    4<=pn+4 by NAT_1:29;
then A9:    s8.SBP > 0 by A7,AXIOMS:22;
A10:    s8.GBP=0 by A4,SCMPDS_2:66;
       set x1=s8.DataLoc(s8.SBP,2),
           y1=s8.DataLoc(s8.SBP,3);
A11:    x1=s8.intpos(pn+4+2) by A7,Th5
       .=s8.intpos(pn+(4+2)) by XCMPLX_1:1
       .=y by A4,SCMPDS_2:66;
A12:    y1=s8.intpos(pn+4+3) by A7,Th5
       .=s8.intpos(pn+(4+3)) by XCMPLX_1:1
       .=x mod y by A4,SCMPDS_2:66;
then A13:    y1<y by A2,GR_CY_2:3;
     y1 >= 0 by A1,A12,GR_CY_2:2;
       then consider m such that
A14:    CurInstr (Computation s8).m = return SBP &
       s8.SBP=(Computation s8).m.SBP &
       (Computation s8).m.DataLoc(s8.SBP,2)= x1 gcd y1 &
       (for j be Nat st 1<j & j <= s8.SBP+1 holds
        s8.intpos j=(Computation s8).m.intpos j)
            by A5,A6,A9,A10,A11,A13,Th16;
       set s9=Cs.(m+8);
A15:    CurInstr s9 = return SBP by A14,AMI_1:51;
A16:    s8.SBP=s9.SBP by A14,AMI_1:51;
A17:    Cs.(m+(8+1))=Cs.(m+8+1) by XCMPLX_1:1
       .= Following s9 by AMI_1:def 19
       .= Exec(return SBP,s9) by A15,AMI_1:def 18;
A18:     1 < pn+4 by A8,AXIOMS:22;
          pn+4 < s8.SBP+1 by A7,REAL_1:69;
then A19:     s8.intpos(pn+4)=(Computation s8).m.intpos (pn+4) by A14,A18
        .=s9.intpos(pn+4) by AMI_1:51;
       5<=pn+5 by NAT_1:29;
then A20:     1 <pn+5 by AXIOMS:22;
A21:     s8.SBP+1=pn+(4+1) by A7,XCMPLX_1:1;
A22:     inspos 11=s8.intpos(pn+5) by A4,SCMPDS_2:66
        .=(Computation s8).m.intpos (pn+5) by A14,A20,A21
        .=s9.intpos(pn+(4+1)) by AMI_1:51
        .=s9.intpos(pn+4+1) by XCMPLX_1:1
        .=s9.DataLoc(s9.SBP,RetIC) by A7,A16,Th5,SCMPDS_1:def 23;

A23:     IC Cs.(m+9)=Cs.(m+9).IC SCMPDS by AMI_1:def 15
        .= 2*(abs(s9.DataLoc(s9.SBP,RetIC)) div 2)+4 by A17,SCMPDS_2:70
        .= inspos (11+2) by A22,Th3;
then A24:     CurInstr Cs.(m+9) = Cs.(m+9).inspos 13 by AMI_1:def 17
        .=s.inspos 13 by AMI_1:54
        .=i13 by A1,Lm1;
A25:     Cs.(m+(9+1))=Cs.(m+9+1) by XCMPLX_1:1
        .= Following Cs.(m+9) by AMI_1:def 19
        .= Exec(i13,Cs.(m+9)) by A24,AMI_1:def 18;
A26:     Cs.(m+9).SBP=s9.DataLoc(pn+4,RetSP) by A7,A16,A17,SCMPDS_2:70
        .=s9.intpos(pn+4+0) by Th5,SCMPDS_1:def 22
        .=pn by A4,A19,SCMPDS_2:66;
          SBP <> intpos(pn+6) by Lm3;
then A27:     Cs.(m+9).intpos(pn+6)=s9.intpos(pn+(4+2)) by A17,SCMPDS_2:70
        .=s9.intpos(pn+4+2) by XCMPLX_1:1
        .=s9.DataLoc(s8.SBP,2) by A7,Th5
        .=x1 gcd y1 by A14,AMI_1:51;

       IC Cs.(m+10)=Cs.(m+10).IC SCMPDS by AMI_1:def 15
        .= Next IC Cs.(m+9) by A25,SCMPDS_2:59
        .= inspos (13+1) by A23,SCMPDS_4:70;
then A28:     CurInstr Cs.(m+10)=Cs.(m+10).inspos 14 by AMI_1:def 17
        .=s.inspos 14 by AMI_1:54
        .=i14 by A1,Lm1;

        hereby
           take n=m+10;
           thus CurInstr (Computation s).n = return SBP by A28;
A29:        DataLoc(Cs.(m+9).SBP,2)=intpos(pn+2) by A26,Th5;
           then SBP <> DataLoc(Cs.(m+9).SBP,2) by Lm3;
           hence Cs.n.SBP=s.SBP by A25,A26,SCMPDS_2:59;
           thus Cs.n.DataLoc(s.SBP,2)=Cs.(m+9).DataLoc(pn,6) by A25,A26,
SCMPDS_2:59
             .=yy gcd (x mod yy) by A11,A12,A27,Th5
             .=x gcd yy by A1,A2,Th2;

           hereby let j be Nat;
               assume A30: 1<j & j <= s.SBP+1;
                 s.SBP <= s8.SBP by A7,NAT_1:29;
               then s.SBP +1 <= s8.SBP+1 by AXIOMS:24;
then A31:            j <= s8.SBP+1 by A30,AXIOMS:22;
                 intpos j <> SBP by A30,Def3,Th4;
then A32:            Cs.(m+9).intpos j=s9.intpos j by A17,SCMPDS_2:70
               .=(Computation s8).m.intpos j by AMI_1:51
               .=s8.intpos j by A14,A30,A31;
                 pn+1<pn+2 by REAL_1:53;
then A33:            intpos j <> DataLoc(Cs.(m+9).SBP,2) by A29,A30,Th4;
                 Cs.7.intpos j = s.intpos j by A1,A2,A3,A30,Lm5;
             hence s.intpos j=s8.intpos j by A4,SCMPDS_2:66
                   .=Cs.n.intpos j by A25,A32,A33,SCMPDS_2:59;
           end;
        end;
end;

begin :: The Correctness of Recursive Euclide Algorithm

theorem
    for s being State of SCMPDS st Initialized GCD-Algorithm c= s
  for x, y being Integer st s.intpos 9 = x & s.intpos 10 = y
  & x >= 0 & y >= 0 holds (Result s).intpos 9 = x gcd y
proof
     let s be State of SCMPDS;
     set GA=GCD-Algorithm;
     assume A1: Initialized GA c= s;
     let x, y be Integer;
     assume A2: s.intpos 9 = x & s.intpos 10 = y
     & x >= 0 & y >= 0;
     set s4=(Computation s).4;
A3:  GA c= s by A1,SCMPDS_4:57;
then A4:  GA c= s4 by AMI_3:38;
A5:  IC s4 = inspos 5 & s4.GBP = 0 &
     s4.SBP = 7 & s4.intpos(7+RetIC) = inspos 2 &
     s4.intpos 9 = s.intpos 9 & s4.intpos 10 = s.intpos 10 by A1,Th15;
then A6:  s4.DataLoc(s4.SBP,3)=s4.intpos (7+3) by Th5
     .=y by A1,A2,Th15;
A7:  DataLoc(s4.SBP,2)=intpos(7+2) by A5,Th5;
then A8:  s4.DataLoc(s4.SBP,2)=x by A1,A2,Th15;
   set Cs4=Computation s4;
     consider n such that
A9:  CurInstr Cs4.n = return SBP &
     s4.SBP=Cs4.n.SBP &
     Cs4.n.DataLoc(s4.SBP,2) =s4.DataLoc(s4.SBP,2) gcd s4.DataLoc(s4.SBP,3) &
     (for j be Nat st 1<j & j <= s4.SBP+1 holds s4.intpos j=Cs4.n.intpos j)
     by A2,A4,A5,A6,A7,Th17;
A10:  Cs4.n.intpos 8=inspos 2 by A5,A9,SCMPDS_1:def 23;
  A11: DataLoc(Cs4.n.SBP,RetIC)=intpos(7+1) by A5,A9,Th5,SCMPDS_1:def 23;

A12:  Cs4.(n+1)= Following Cs4.n by AMI_1:def 19
     .= Exec(i14,Cs4.n) by A9,AMI_1:def 18;
    IC (Computation s).(4+(n+1)) = IC Cs4.(n+1) by AMI_1:51
     .=Cs4.(n+1).IC SCMPDS by AMI_1:def 15
     .= 2*(abs(Cs4.n.DataLoc(Cs4.n.SBP,RetIC)) div 2)+4 by A12,SCMPDS_2:70
     .= inspos (2+2) by A10,A11,Th3;
then A13:  s.IC (Computation s).(4+(n+1)) =i04 by A3,Lm1;
     A14: intpos 9 <> SBP by Def3,Th4;
       Result s=(Computation s).(4+(n+1)) by A13,AMI_1:56
             .=Cs4.(n+1) by AMI_1:51;
     hence (Result s).intpos 9=x gcd y by A6,A7,A8,A9,A12,A14,SCMPDS_2:70;
end;

::--------------------------
Lm6:
   GCD-Algorithm c= s1 & GCD-Algorithm c= s2 &
   IC s1 = inspos 5 &
   n=s1.SBP & s1.GBP=0 &
   s1.DataLoc(s1.SBP,3) > 0 &
   IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0 &
   s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
   s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3)
  implies
    IC (Computation s1).7 = inspos (5+7) &
    (Computation s1).8 = Exec(i12,(Computation s1).7) &
    (Computation s1).7.SBP=n+4 &
    (Computation s1).7.GBP=0 &
    (Computation s1).7.intpos(n+7)
      = s1.intpos(n+2) mod s1.intpos(n+3) &
     (Computation s1).7.intpos(n+6) = s1.intpos(n+3) &

    IC (Computation s2).7 = inspos (5+7) &
    (Computation s2).8 = Exec(i12,(Computation s2).7) &
    (Computation s2).7.SBP=n+4 &
    (Computation s2).7.GBP=0 &
    (Computation s2).7.intpos(n+7)
      = s1.intpos(n+2) mod s1.intpos(n+3) &
     (Computation s2).7.intpos(n+6) = s1.intpos(n+3) &

    (Computation s1).7.intpos(n+4) = n &
    (Computation s1).7.intpos(n+5) = inspos 11 &
    (Computation s2).7.intpos(n+4) = n &
    (Computation s2).7.intpos(n+5) = inspos 11
proof

   set GA=GCD-Algorithm,
      Cs1=Computation s1,
      Cs2=Computation s2;
   assume A1: GA c= s1 & GA c= s2;
   assume A2: IC s1 = inspos 5;
   assume A3: n=s1.SBP;
   assume A4: s1.GBP=0;
   assume A5: s1.DataLoc(s1.SBP,3) > 0;
   assume A6: IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0;
   assume A7: s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
              s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3);

A8:    DataLoc(s1.SBP,2)=intpos(n+2) by A3,Th5;
A9:    DataLoc(s1.SBP,3)=intpos(n+3) by A3,Th5;
  thus IC Cs1.7 = inspos (5+7) & Cs1.8 = Exec(i12,Cs1.7) &
        Cs1.7.SBP=n+4 & Cs1.7.GBP=0 by A1,A2,A3,A4,A5,Lm4;
  thus Cs1.7.intpos(n+7)
       = s1.intpos(n+2) mod s1.intpos(n+3) by A1,A2,A3,A4,A5,A8,A9,Lm4;
  thus Cs1.7.intpos(n+6) =s1.intpos(n+3) by A1,A2,A3,A4,A5,A9,Lm4;
  thus IC Cs2.7 = inspos (5+7) & Cs2.8 = Exec(i12,Cs2.7) &
        Cs2.7.SBP=n+4 & Cs2.7.GBP=0 by A1,A2,A3,A5,A6,A7,Lm4;
  thus Cs2.7.intpos(n+7)
       = s1.intpos(n+2) mod s1.intpos(n+3) by A1,A2,A3,A5,A6,A7,A8,A9,Lm4;
  thus Cs2.7.intpos(n+6) =s1.intpos(n+3) by A1,A2,A3,A5,A6,A7,A9,Lm4;
  thus Cs1.7.intpos(n+4) = n & Cs1.7.intpos(n+5) = inspos 11
       by A1,A2,A3,A4,A5,Lm4;
  thus Cs2.7.intpos(n+4) = n & Cs2.7.intpos(n+5) = inspos 11
       by A1,A2,A3,A5,A6,A7,Lm4;
end;

Lm7:
   GCD-Algorithm c= s1 & GCD-Algorithm c= s2 &
   IC s1 = inspos 5 &
   n=s1.SBP & s1.GBP=0 &
   s1.DataLoc(s1.SBP,3) > 0 &
   IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0 &
   s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
   s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3)
  implies
    (for k be Nat,a be Int_position st k <= 7 & s1.a=s2.a holds
      IC (Computation s1).k = IC (Computation s2).k &
      (Computation s1).k.a = (Computation s2).k.a)
proof

   set GA=GCD-Algorithm,
      Cs1=Computation s1,
      Cs2=Computation s2;
   assume A1: GA c= s1 & GA c= s2;
   assume A2: IC s1 = inspos 5;
   assume A3: n=s1.SBP;
   assume A4: s1.GBP=0;
   assume A5: s1.DataLoc(s1.SBP,3) > 0;
   assume A6: IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0;
   assume A7: s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
              s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3);

A8:  CurInstr s1 = s1.inspos 5 by A2,AMI_1:def 17
     .=i05 by A1,Lm1;
A9:  Cs1.(1+0) = Following Cs1.0 by AMI_1:def 19
     .= Following s1 by AMI_1:def 19
     .= Exec(i05,s1) by A8,AMI_1:def 18;

A10:  CurInstr s2 = s2.inspos 5 by A2,A6,AMI_1:def 17
     .=i05 by A1,Lm1;
A11:  Cs2.(1+0) = Following Cs2.0 by AMI_1:def 19
     .= Following s2 by AMI_1:def 19
     .= Exec(i05,s2) by A10,AMI_1:def 18;

A12:  IC Cs1.1=Cs1.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s1 by A5,A9,SCMPDS_2:68
     .= inspos (5+1) by A2,SCMPDS_4:70;
then A13:  CurInstr Cs1.1 = Cs1.1.inspos 6 by AMI_1:def 17
     .=s1.inspos 6 by AMI_1:54
     .=i06 by A1,Lm1;
A14:  Cs1.(1+1) = Following Cs1.1 by AMI_1:def 19
     .= Exec(i06,Cs1.1) by A13,AMI_1:def 18;
A15:  Cs1.1.SBP=n by A3,A9,SCMPDS_2:68;
A16:  Cs1.1.GBP=0 by A4,A9,SCMPDS_2:68;
A17:  IC Cs2.1=Cs2.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s2 by A5,A6,A7,A11,SCMPDS_2:68
     .= inspos (5+1) by A2,A6,SCMPDS_4:70;
then A18:  CurInstr Cs2.1 = Cs2.1.inspos 6 by AMI_1:def 17
     .=s2.inspos 6 by AMI_1:54
     .=i06 by A1,Lm1;
A19:  Cs2.(1+1) = Following Cs2.1 by AMI_1:def 19
     .= Exec(i06,Cs2.1) by A18,AMI_1:def 18;

A20:  IC Cs1.2=Cs1.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs1.1 by A14,SCMPDS_2:59
     .= inspos (6+1) by A12,SCMPDS_4:70;
then A21:  CurInstr Cs1.2 = Cs1.2.inspos 7 by AMI_1:def 17
     .=s1.inspos 7 by AMI_1:54
     .=i07 by A1,Lm1;
A22:  Cs1.(2+1) = Following Cs1.2 by AMI_1:def 19
     .= Exec(i07,Cs1.2) by A21,AMI_1:def 18;
A23:  DataLoc(Cs1.1.SBP,6)=intpos(n+6) by A15,Th5;
     then SBP <> DataLoc(Cs1.1.SBP,6) by Lm3;
then A24:  Cs1.2.SBP=n by A14,A15,SCMPDS_2:59;
       GBP <> DataLoc(Cs1.1.SBP,6) by A23,Lm2;
then A25:  Cs1.2.GBP=0 by A14,A16,SCMPDS_2:59;

A26:  IC Cs2.2=Cs2.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs2.1 by A19,SCMPDS_2:59
     .= inspos (6+1) by A17,SCMPDS_4:70;
then A27:  CurInstr Cs2.2 = Cs2.2.inspos 7 by AMI_1:def 17
     .=s2.inspos 7 by AMI_1:54
     .=i07 by A1,Lm1;
A28:  Cs2.(2+1) = Following Cs2.2 by AMI_1:def 19
     .= Exec(i07,Cs2.2) by A27,AMI_1:def 18;

A29:  IC Cs1.3=Cs1.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs1.2 by A22,SCMPDS_2:64
     .= inspos (7+1) by A20,SCMPDS_4:70;
then A30:  CurInstr Cs1.3 = Cs1.3.inspos 8 by AMI_1:def 17
     .=s1.inspos 8 by AMI_1:54
     .=i08 by A1,Lm1;
A31:  Cs1.(3+1) = Following Cs1.3 by AMI_1:def 19
     .= Exec(i08,Cs1.3) by A30,AMI_1:def 18;
A32:  DataLoc(Cs1.2.SBP,2)=intpos(n+2) by A24,Th5;
then A33:  SBP <> DataLoc(Cs1.2.SBP,2) by Lm3;
A34:  DataLoc(Cs1.2.SBP,3)=intpos(n+3) by A24,Th5;
     then SBP <> DataLoc(Cs1.2.SBP,3) by Lm3;
then A35:  Cs1.3.SBP=n by A22,A24,A33,SCMPDS_2:64;
A36:  GBP <> DataLoc(Cs1.2.SBP,2) by A32,Lm2;
       GBP <> DataLoc(Cs1.2.SBP,3) by A34,Lm2;
then A37:  Cs1.3.GBP=0 by A22,A25,A36,SCMPDS_2:64;

A38:  IC Cs2.3=Cs2.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs2.2 by A28,SCMPDS_2:64
     .= inspos (7+1) by A26,SCMPDS_4:70;
then A39:  CurInstr Cs2.3 = Cs2.3.inspos 8 by AMI_1:def 17
     .=s2.inspos 8 by AMI_1:54
     .=i08 by A1,Lm1;
A40:  Cs2.(3+1) = Following Cs2.3 by AMI_1:def 19
     .= Exec(i08,Cs2.3) by A39,AMI_1:def 18;

A41:   IC Cs1.4=Cs1.4.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs1.3 by A31,SCMPDS_2:59
      .= inspos (8+1) by A29,SCMPDS_4:70;
then A42:   CurInstr Cs1.4 = Cs1.4.inspos 9 by AMI_1:def 17
      .=s1.inspos 9 by AMI_1:54
     .=i09 by A1,Lm1;
A43:   Cs1.(4+1) = Following Cs1.4 by AMI_1:def 19
        .= Exec(i09,Cs1.4) by A42,AMI_1:def 18;
A44:   DataLoc(Cs1.3.SBP,7)=intpos(n+7) by A35,Th5;
      then SBP <> DataLoc(Cs1.3.SBP,7) by Lm3;
then A45:   Cs1.4.SBP=n by A31,A35,SCMPDS_2:59;
        GBP <> DataLoc(Cs1.3.SBP,7) by A44,Lm2;
then A46:   Cs1.4.GBP=0 by A31,A37,SCMPDS_2:59;

A47:   IC Cs2.4=Cs2.4.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs2.3 by A40,SCMPDS_2:59
      .= inspos (8+1) by A38,SCMPDS_4:70;
then A48:   CurInstr Cs2.4 = Cs2.4.inspos 9 by AMI_1:def 17
      .=s2.inspos 9 by AMI_1:54
     .=i09 by A1,Lm1;
A49:   Cs2.(4+1) = Following Cs2.4 by AMI_1:def 19
        .= Exec(i09,Cs2.4) by A48,AMI_1:def 18;

A50:   IC Cs1.5=Cs1.5.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs1.4 by A43,SCMPDS_2:59
      .= inspos (9+1) by A41,SCMPDS_4:70;
then A51:   CurInstr Cs1.5 = Cs1.5.inspos 10 by AMI_1:def 17
      .=s1.inspos 10 by AMI_1:54
      .=i10 by A1,Lm1;
A52:   Cs1.(5+1) = Following Cs1.5 by AMI_1:def 19
      .= Exec(i10,Cs1.5) by A51,AMI_1:def 18;
        DataLoc(Cs1.4.SBP,4+RetSP)=intpos(n+(4+0)) by A45,Th5,SCMPDS_1:def 22;
      then GBP <> DataLoc(Cs1.4.SBP,4+RetSP) by Lm2;
then A53:   Cs1.5.GBP=0 by A43,A46,SCMPDS_2:59;

A54:   IC Cs2.5=Cs2.5.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs2.4 by A49,SCMPDS_2:59
      .= inspos (9+1) by A47,SCMPDS_4:70;
then A55:   CurInstr Cs2.5 = Cs2.5.inspos 10 by AMI_1:def 17
      .=s2.inspos 10 by AMI_1:54
      .=i10 by A1,Lm1;
A56:   Cs2.(5+1) = Following Cs2.5 by AMI_1:def 19
      .= Exec(i10,Cs2.5) by A55,AMI_1:def 18;

A57:   IC Cs1.6=Cs1.6.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs1.5 by A52,SCMPDS_2:60
      .= inspos (10+1) by A50,SCMPDS_4:70;
then A58:   CurInstr Cs1.6 = Cs1.6.inspos 11 by AMI_1:def 17
      .=s1.inspos 11 by AMI_1:54
     .=i11 by A1,Lm1;
A59:   Cs1.(6+1) = Following Cs1.6 by AMI_1:def 19
      .= Exec(i11,Cs1.6) by A58,AMI_1:def 18;

A60:   IC Cs2.6=Cs2.6.IC SCMPDS by AMI_1:def 15
      .= Next IC Cs2.5 by A56,SCMPDS_2:60
      .= inspos (10+1) by A54,SCMPDS_4:70;
then A61:   CurInstr Cs2.6 = Cs2.6.inspos 11 by AMI_1:def 17
      .=s2.inspos 11 by AMI_1:54
     .=i11 by A1,Lm1;
A62:   Cs2.(6+1) = Following Cs2.6 by AMI_1:def 19
      .= Exec(i11,Cs2.6) by A61,AMI_1:def 18;

A63:    now let b;
          assume s1.b=s2.b;
           hence Cs1.1.b=s2.b by A9,SCMPDS_2:68
           .=Cs2.1.b by A11,SCMPDS_2:68;
       end;
A64:    s1.b=s2.b implies Cs1.2.b=Cs2.2.b
       proof
         assume A65:s1.b=s2.b;
         per cases;
         suppose A66: b=DataLoc(Cs1.1.SBP,6);
then A67:        b=DataLoc(Cs2.1.SBP,6) by A6,A63;
          thus Cs1.2.b=Cs1.1.DataLoc(s1.SBP,3) by A3,A14,A15,A66,SCMPDS_2:59
            .=Cs2.1.DataLoc(Cs1.1.SBP,3) by A3,A7,A15,A63
            .=Cs2.1.DataLoc(Cs2.1.SBP,3) by A6,A63
            .=Cs2.2.b by A19,A67,SCMPDS_2:59;
         suppose A68: b<>DataLoc(Cs1.1.SBP,6);
then A69:        b<>DataLoc(Cs2.1.SBP,6) by A6,A63;
          thus Cs1.2.b=Cs1.1.b by A14,A68,SCMPDS_2:59
           .=Cs2.1.b by A63,A65
           .=Cs2.2.b by A19,A69,SCMPDS_2:59;
      end;
A70:    now let b;
         assume A71:s1.b=s2.b;
         set x1=DataLoc(Cs1.2.SBP,2),
             x2=DataLoc(Cs1.2.SBP,3),
             y1=DataLoc(Cs2.2.SBP,2),
             y2=DataLoc(Cs2.2.SBP,3);
A72:      x1=y1 by A6,A64;
A73:      x2=y2 by A6,A64;
         per cases;
         suppose A74:b<>x1 & b<>x2;
          hence Cs1.3.b=Cs1.2.b by A22,SCMPDS_2:64
           .=Cs2.2.b by A64,A71
           .=Cs2.3.b by A28,A72,A73,A74,SCMPDS_2:64;
         suppose A75: b=x1;
          A76: n+2<>n+3 by XCMPLX_1:2;
then A77:       x1<>x2 by A32,A34,Th4;
A78:       y1<>y2 by A32,A34,A72,A73,A76,Th4;
         thus Cs1.3.b=Cs1.2.x1 div Cs1.2.x2 by A22,A75,A77,SCMPDS_2:64
            .=Cs2.2.x1 div Cs1.2.x2 by A3,A7,A24,A64
            .=Cs2.2.x1 div Cs2.2.x2 by A3,A7,A24,A64
            .=Cs2.3.b by A28,A72,A73,A75,A78,SCMPDS_2:64;
         suppose A79: b=x2;
         hence Cs1.3.b=Cs1.2.x1 mod Cs1.2.x2 by A22,SCMPDS_2:64
            .=Cs2.2.x1 mod Cs1.2.x2 by A3,A7,A24,A64
            .=Cs2.2.x1 mod Cs2.2.x2 by A3,A7,A24,A64
            .=Cs2.3.b by A28,A72,A73,A79,SCMPDS_2:64;
      end;
A80:    now let b;
         assume A81:s1.b=s2.b;
         per cases;
         suppose A82:b=DataLoc(Cs1.3.SBP,7);
then A83:        b=DataLoc(Cs2.3.SBP,7) by A6,A70;
           thus Cs1.4.b=Cs1.3.DataLoc(Cs1.3.SBP,3) by A31,A82,SCMPDS_2:59
           .=Cs2.3.DataLoc(Cs1.3.SBP,3) by A3,A7,A35,A70
           .=Cs2.3.DataLoc(Cs2.3.SBP,3) by A6,A70
           .=Cs2.4.b by A40,A83,SCMPDS_2:59;
         suppose A84:b<>DataLoc(Cs1.3.SBP,7);
then A85:        b<>DataLoc(Cs2.3.SBP,7) by A6,A70;
           thus Cs1.4.b=Cs1.3.b by A31,A84,SCMPDS_2:59
           .=Cs2.3.b by A70,A81
           .=Cs2.4.b by A40,A85,SCMPDS_2:59;
       end;
A86:    now let b;
         assume A87:s1.b=s2.b;
A88:      s1.DataLoc(Cs1.4.GBP,1)=s2.intpos(0+1) by A6,A46,Def3,Th5
         .=s2.DataLoc(Cs1.4.GBP,1) by A46,Th5;
         per cases;
         suppose A89:b=DataLoc(Cs1.4.SBP,4+RetSP);
then A90:        b=DataLoc(Cs2.4.SBP,4+RetSP) by A6,A80;
           thus Cs1.5.b=Cs1.4.DataLoc(Cs1.4.GBP,1) by A43,A89,SCMPDS_2:59
           .=Cs2.4.DataLoc(Cs1.4.GBP,1) by A80,A88
           .=Cs2.4.DataLoc(Cs2.4.GBP,1) by A4,A6,A80
           .=Cs2.5.b by A49,A90,SCMPDS_2:59;
         suppose A91:b<>DataLoc(Cs1.4.SBP,4+RetSP);
then A92:        b<>DataLoc(Cs2.4.SBP,4+RetSP) by A6,A80;
           thus Cs1.5.b=Cs1.4.b by A43,A91,SCMPDS_2:59
           .=Cs2.4.b by A80,A87
           .=Cs2.5.b by A49,A92,SCMPDS_2:59;
       end;
A93:    now let b;
         assume A94:s1.b=s2.b;
A95:      s1.DataLoc(Cs1.5.GBP,1)=s2.intpos(0+1) by A6,A53,Def3,Th5
         .=s2.DataLoc(Cs1.5.GBP,1) by A53,Th5;
         per cases;
         suppose A96:b=DataLoc(Cs1.5.GBP,1);
then A97:        b=DataLoc(Cs2.5.GBP,1) by A4,A6,A86;
           thus Cs1.6.b=Cs1.5.DataLoc(Cs1.5.GBP,1)+4 by A52,A96,SCMPDS_2:60
           .=Cs2.5.DataLoc(Cs1.5.GBP,1)+4 by A86,A95
           .=Cs2.5.DataLoc(Cs2.5.GBP,1)+4 by A4,A6,A86
           .=Cs2.6.b by A56,A97,SCMPDS_2:60;
         suppose A98:b<>DataLoc(Cs1.5.GBP,1);
then A99:        b<>DataLoc(Cs2.5.GBP,1) by A4,A6,A86;
           thus Cs1.6.b=Cs1.5.b by A52,A98,SCMPDS_2:60
           .=Cs2.5.b by A86,A94
           .=Cs2.6.b by A56,A99,SCMPDS_2:60;
       end;
A100:    now let b;
         assume A101:s1.b=s2.b;
         per cases;
         suppose A102:b=DataLoc(Cs1.6.SBP,RetIC);
then A103:        b=DataLoc(Cs2.6.SBP,RetIC) by A6,A93;
           thus Cs1.7.b=IC Cs1.6 by A59,A102,SCMPDS_2:71
           .=Cs2.7.b by A57,A60,A62,A103,SCMPDS_2:71;
         suppose A104:b<>DataLoc(Cs1.6.SBP,RetIC);
then A105:        b<>DataLoc(Cs2.6.SBP,RetIC) by A6,A93;
           thus Cs1.7.b=Cs1.6.b by A59,A104,SCMPDS_2:71
           .=Cs2.6.b by A93,A101
           .=Cs2.7.b by A62,A105,SCMPDS_2:71;
       end;
     hereby let k be Nat,a be Int_position;
       assume A106:k <= 7 & s1.a=s2.a;
       per cases by A106,CQC_THE1:8;
       suppose A107:k=0;
         hence IC Cs1.k = IC s1 by AMI_1:def 19
              .=IC Cs2.k by A6,A107,AMI_1:def 19;
         thus Cs1.k.a = s1.a by A107,AMI_1:def 19
              .=Cs2.k.a by A106,A107,AMI_1:def 19;
       suppose A108:k=1;
         hence IC Cs1.k=IC Cs2.k by A12,A17;
         thus Cs1.k.a = Cs2.k.a by A63,A106,A108;
       suppose A109:k=2;
         hence IC Cs1.k=IC Cs2.k by A20,A26;
         thus Cs1.k.a = Cs2.k.a by A64,A106,A109;
       suppose A110:k=3;
         hence IC Cs1.k=IC Cs2.k by A29,A38;
         thus Cs1.k.a = Cs2.k.a by A70,A106,A110;
       suppose A111:k=4;
         hence IC Cs1.k=IC Cs2.k by A41,A47;
         thus Cs1.k.a = Cs2.k.a by A80,A106,A111;
       suppose A112:k=5;
         hence IC Cs1.k=IC Cs2.k by A50,A54;
         thus Cs1.k.a = Cs2.k.a by A86,A106,A112;
       suppose A113:k=6;
         hence IC Cs1.k=IC Cs2.k by A57,A60;
         thus Cs1.k.a = Cs2.k.a by A93,A106,A113;
       suppose A114:k=7;
         thus IC Cs1.k=Cs1.k.IC SCMPDS by AMI_1:def 15
          .= Next IC Cs2.6 by A57,A59,A60,A114,SCMPDS_2:71
          .= Cs2.k.IC SCMPDS by A62,A114,SCMPDS_2:71
          .= IC Cs2.k by AMI_1:def 15;
        thus Cs1.k.a = Cs2.k.a by A100,A106,A114;
     end;
end;

Lm8:
  for s1,s2 being State of SCMPDS st
  GCD-Algorithm c= s1 & GCD-Algorithm c= s2 &
   IC s1 = inspos 5 &
   s1.SBP >0 & s1.GBP=0 &
   s1.DataLoc(s1.SBP,3) >= 0 &
   s1.DataLoc(s1.SBP,2) >= s1.DataLoc(s1.SBP,3) &
   IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0 &
   s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
   s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3)
 holds
  ex n st CurInstr (Computation s1).n = return SBP &
   s1.SBP=(Computation s1).n.SBP &
   CurInstr (Computation s2).n = return SBP &
   s2.SBP=(Computation s2).n.SBP &
   (for j be Nat st 1<j & j <= s1.SBP+1 holds
      s1.intpos j=(Computation s1).n.intpos j &
      s2.intpos j=(Computation s2).n.intpos j ) &
   (for k be Nat,a be Int_position st k <= n & s1.a=s2.a holds
      IC (Computation s1).k = IC (Computation s2).k &
      (Computation s1).k.a =(Computation s2).k.a)
proof
   set GA=GCD-Algorithm;
   defpred P[Nat] means
    for s1,s2 being State of SCMPDS st
    GA c= s1 & GA c= s2 & IC s1 = inspos 5 &
    s1.SBP >0 & s1.GBP=0 & s1.DataLoc(s1.SBP,3) <= $1 &
    s1.DataLoc(s1.SBP,3) >= 0 &
    s1.DataLoc(s1.SBP,2) >= s1.DataLoc(s1.SBP,3) &
    IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0 &
    s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
    s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3)
holds
  ex n st CurInstr (Computation s1).n = return SBP &
   s1.SBP=(Computation s1).n.SBP &
   CurInstr (Computation s2).n = return SBP &
   s2.SBP=(Computation s2).n.SBP &
   (for j be Nat st 1<j & j <= s1.SBP+1 holds
      s1.intpos j=(Computation s1).n.intpos j &
      s2.intpos j=(Computation s2).n.intpos j) &
   (for k be Nat,a be Int_position st k <= n & s1.a=s2.a holds
      IC (Computation s1).k = IC (Computation s2).k &
      (Computation s1).k.a =(Computation s2).k.a);

A1: P[0]
    proof
      let s1,s2 be State of SCMPDS;
      set x =s1.DataLoc(s1.SBP,2),
          y =s1.DataLoc(s1.SBP,3),
          y2=s2.DataLoc(s1.SBP,3),
          Cs1=Computation s1,
          Cs2=Computation s2;
     assume A2: GA c= s1 & GA c= s2;
     assume A3: IC s1 = inspos 5;
     assume s1.SBP >0 & s1.GBP=0;
     assume A4: y <= 0;
     assume y >= 0;
     assume x >= y;
     assume A5: IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0;
     assume A6: s2.DataLoc(s1.SBP,2) = x & y2 = y;
A7:  CurInstr s1 = s1.inspos 5 by A3,AMI_1:def 17
     .=i05 by A2,Lm1;
A8:  Cs1.(1+0) = Following Cs1.0 by AMI_1:def 19
     .= Following s1 by AMI_1:def 19
     .= Exec(i05,s1) by A7,AMI_1:def 18;
A9:  CurInstr s2 = s2.inspos 5 by A3,A5,AMI_1:def 17
     .=i05 by A2,Lm1;
A10:  Cs2.(1+0) = Following Cs2.0 by AMI_1:def 19
     .= Following s2 by AMI_1:def 19
     .= Exec(i05,s2) by A9,AMI_1:def 18;
A11:  IC Cs1.1=Cs1.1.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s1,9) by A4,A8,SCMPDS_2:68
     .= inspos (5+9) by A3,SCMPDS_6:23;
A12:  IC Cs2.1=Cs2.1.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s2,9) by A4,A5,A6,A10,SCMPDS_2:68
     .= inspos (5+9) by A3,A5,SCMPDS_6:23;

     take n=1;
     thus CurInstr Cs1.n=Cs1.n.inspos 14 by A11,AMI_1:def 17
     .=s1.inspos 14 by AMI_1:54
     .=i14 by A2,Lm1;
     thus Cs1.n.SBP=s1.SBP by A8,SCMPDS_2:68;
     thus CurInstr Cs2.n=Cs2.n.inspos 14 by A12,AMI_1:def 17
     .=s2.inspos 14 by AMI_1:54
     .=i14 by A2,Lm1;
     thus Cs2.n.SBP=s2.SBP by A10,SCMPDS_2:68;
    thus for j be Nat st 1<j & j <= s1.SBP+1 holds
        s1.intpos j=Cs1.n.intpos j &
        s2.intpos j=Cs2.n.intpos j by A8,A10,SCMPDS_2:68;
     hereby let k be Nat,a;
       assume A13: k <= n & s1.a=s2.a;
       per cases by A13,CQC_THE1:2;
       suppose A14:k=0;
         hence IC Cs1.k = IC s2 by A5,AMI_1:def 19
         .=IC Cs2.k by A14,AMI_1:def 19;
        thus Cs1.k.a =s1.a by A14,AMI_1:def 19
         .=Cs2.k.a by A13,A14,AMI_1:def 19;
       suppose A15:k=1;
        hence IC Cs1.k =IC Cs2.k by A11,A12;
        thus Cs1.k.a=s1.a by A8,A15,SCMPDS_2:68
            .=Cs2.k.a by A10,A13,A15,SCMPDS_2:68;
     end;
    end;
A16: now let k be Nat;
      assume A17:P[k];
        now let s1,s2 be State of SCMPDS;
      set x =s1.DataLoc(s1.SBP,2),
          y =s1.DataLoc(s1.SBP,3),
          Cs1=Computation s1,
          Cs2=Computation s2;
        assume A18: GA c= s1 & GA c= s2;
        assume A19: IC s1 = inspos 5;
        assume A20: s1.SBP >0 & s1.GBP=0;
        assume A21: y <= k+1;
        assume A22: y >= 0;
        assume A23: x >= y;
        assume A24: IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0;
        assume A25: s2.DataLoc(s1.SBP,2) = x & s2.DataLoc(s1.SBP,3) = y;
        reconsider y as Nat by A22,INT_1:16;
        per cases by A21,NAT_1:26;
        suppose y <= k;
        hence ex n st CurInstr Cs1.n = return SBP & s1.SBP=Cs1.n.SBP &
          CurInstr Cs2.n = return SBP & s2.SBP=Cs2.n.SBP &
          (for j be Nat st 1<j & j <= s1.SBP+1 holds
            s1.intpos j=Cs1.n.intpos j &
            s2.intpos j=Cs2.n.intpos j) &
          (for k be Nat,a st k <= n & s1.a=s2.a holds
           IC Cs1.k = IC Cs2.k & Cs1.k.a = Cs2.k.a)
           by A17,A18,A19,A20,A22,A23,A24,A25;

        suppose A26: y = k+1;
           then A27: y<>0 by NAT_1:21;
then A28:        y>0 by NAT_1:19;
           reconsider n=s1.SBP as Nat by A20,INT_1:16;
A29:        n=s1.SBP;
           set s8=Cs1.8,
               t8=Cs2.8;
A30:        IC Cs1.7 = inspos (5+7) & s8 = Exec(i12,Cs1.7) &
           Cs1.7.SBP=n+4 & Cs1.7.GBP=0 &
           Cs1.7.intpos(n+7) = s1.intpos(n+2) mod s1.intpos(n+3) &
           Cs1.7.intpos(n+6) = s1.intpos(n+3) &

           IC Cs2.7 = inspos (5+7) & t8 = Exec(i12,Cs2.7) &
           Cs2.7.SBP=n+4 & Cs2.7.GBP=0 &
           Cs2.7.intpos(n+7) = s1.intpos(n+2) mod s1.intpos(n+3) &
           Cs2.7.intpos(n+6) = s1.intpos(n+3) &

           Cs1.7.intpos(n+4) = n & Cs1.7.intpos(n+5) = inspos 11 &
           Cs2.7.intpos(n+4) = n & Cs2.7.intpos(n+5) = inspos 11
            by A18,A19,A20,A24,A25,A28,A29,Lm6;
A31:      DataLoc(n+4,2)=intpos(n+4+2) by Th5
          .=intpos(n+(4+2)) by XCMPLX_1:1;
A32:      DataLoc(n+4,3)=intpos(n+4+3) by Th5
          .=intpos(n+(4+3)) by XCMPLX_1:1;
A33:       GA c= s8 & GA c= t8 by A18,AMI_3:38;
A34:       IC s8=s8.IC SCMPDS by AMI_1:def 15
          .= ICplusConst(Cs1.7,-7) by A30,SCMPDS_2:66
          .= inspos 5 by A30,Th6;
A35:       s8.SBP=n+4 by A30,SCMPDS_2:66;
A36:       4<=n+4 by NAT_1:29;
then A37:       s8.SBP > 0 by A35,AXIOMS:22;
A38:       s8.GBP=0 by A30,SCMPDS_2:66;
          set x1=s8.DataLoc(s8.SBP,2),
              y1=s8.DataLoc(s8.SBP,3);
A39:       x1=s1.intpos(n+3) by A30,A31,A35,SCMPDS_2:66
          .=y by Th5;
A40:       y1= s1.intpos(n+2) mod s1.intpos(n+3) by A30,A32,A35,SCMPDS_2:66
          .= s1.intpos(n+2) mod y by Th5;
then A41:       y1<y by A28,GR_CY_2:3;
then A42:       y1 <= k by A26,INT_1:20;
A43:       y1 >= 0 by A28,A40,GR_CY_2:2;
A44:      IC t8=t8.IC SCMPDS by AMI_1:def 15
          .= ICplusConst(Cs2.7,-7) by A30,SCMPDS_2:66
          .= IC s8 by A30,A34,Th6;
A45:      t8.SBP=s8.SBP by A30,A35,SCMPDS_2:66;
A46:      t8.GBP=0 by A30,SCMPDS_2:66;
          set x3=t8.DataLoc(s8.SBP,2);
A47:       x3=s1.intpos(n+3) by A30,A31,A35,SCMPDS_2:66
          .=x1 by A39,Th5;
         t8.DataLoc(s8.SBP,3)=s1.intpos(n+2) mod s1.intpos(n+3) by A30,A32,A35,
SCMPDS_2:66
          .=y1 by A40,Th5;
         then consider m such that
A48:      CurInstr (Computation s8).m = return SBP &
         s8.SBP=(Computation s8).m.SBP &
         CurInstr (Computation t8).m = return SBP &
         t8.SBP=(Computation t8).m.SBP &
        (for j be Nat st 1<j & j <= s8.SBP+1 holds
          s8.intpos j=(Computation s8).m.intpos j &
          t8.intpos j=(Computation t8).m.intpos j) &
          (for k be Nat,a be Int_position st k <= m & s8.a=t8.a holds
           IC (Computation s8).k = IC (Computation t8).k &
           (Computation s8).k.a =(Computation t8).k.a)
            by A17,A33,A34,A37,A38,A39,A41,A42,A43,A44,A45,A46,A47;

          set s9=Cs1.(m+8),
              t9=Cs2.(m+8);
A49:       CurInstr s9 = return SBP by A48,AMI_1:51;
A50:       s8.SBP=s9.SBP by A48,AMI_1:51;
A51:       Cs1.(m+(8+1))=Cs1.(m+8+1) by XCMPLX_1:1
          .= Following s9 by AMI_1:def 19
          .= Exec(return SBP,s9) by A49,AMI_1:def 18;
A52:       1 < n+4 by A36,AXIOMS:22;
A53:       n+4 < s8.SBP+1 by A35,REAL_1:69;
then A54:       s8.intpos(n+4)=(Computation s8).m.intpos (n+4) by A48,A52
          .=s9.intpos(n+4) by AMI_1:51;
         5<=n+5 by NAT_1:29;
then A55:       1 <n+5 by AXIOMS:22;
A56:      intpos(n+(4+1))=intpos(n+4+1) by XCMPLX_1:1
          .=DataLoc(n+4,1) by Th5;
A57:       s8.SBP+1=n+(4+1) by A35,XCMPLX_1:1;
A58:       inspos 11=s8.intpos(n+5) by A30,SCMPDS_2:66
          .=(Computation s8).m.intpos (n+5) by A48,A55,A57
          .=s9.DataLoc(s9.SBP,RetIC) by A35,A50,A56,AMI_1:51,SCMPDS_1:def 23;

A59:       CurInstr t9 = return SBP by A48,AMI_1:51;
A60:       t9.SBP=n+4 by A35,A45,A48,AMI_1:51;
A61:       Cs2.(m+(8+1))=Cs2.(m+8+1) by XCMPLX_1:1
          .= Following t9 by AMI_1:def 19
          .= Exec(return SBP,t9) by A59,AMI_1:def 18;
A62:       t8.intpos(n+4)=(Computation t8).m.intpos (n+4) by A48,A52,A53
          .=t9.intpos(n+4) by AMI_1:51;
A63:       inspos 11=t8.intpos(n+5) by A30,SCMPDS_2:66
          .=(Computation t8).m.intpos (n+5) by A48,A55,A57
          .=t9.DataLoc(t9.SBP,RetIC) by A56,A60,AMI_1:51,SCMPDS_1:def 23;

A64:       IC Cs1.(m+9)=Cs1.(m+9).IC SCMPDS by AMI_1:def 15
          .= 2*(abs(s9.DataLoc(s9.SBP,RetIC)) div 2)+4 by A51,SCMPDS_2:70
          .= inspos (11+2) by A58,Th3;
then A65:       CurInstr Cs1.(m+9) = Cs1.(m+9).inspos 13 by AMI_1:def 17
           .=s1.inspos 13 by AMI_1:54
           .=i13 by A18,Lm1;
A66:       Cs1.(m+(9+1))=Cs1.(m+9+1) by XCMPLX_1:1
          .= Following Cs1.(m+9) by AMI_1:def 19
          .= Exec(i13,Cs1.(m+9)) by A65,AMI_1:def 18;
A67:       Cs1.(m+9).SBP=s9.DataLoc(n+4,RetSP) by A35,A50,A51,SCMPDS_2:70
         .=s9.intpos(n+4+0) by Th5,SCMPDS_1:def 22
         .=n by A30,A54,SCMPDS_2:66;

A68:      IC Cs2.(m+9)=Cs2.(m+9).IC SCMPDS by AMI_1:def 15
          .= 2*(abs(t9.DataLoc(t9.SBP,RetIC)) div 2)+4 by A61,SCMPDS_2:70
          .= inspos (11+2) by A63,Th3;
then A69:      CurInstr Cs2.(m+9) = Cs2.(m+9).inspos 13 by AMI_1:def 17
           .=s2.inspos 13 by AMI_1:54
           .=i13 by A18,Lm1;
A70:       Cs2.(m+(9+1))=Cs2.(m+9+1) by XCMPLX_1:1
          .= Following Cs2.(m+9) by AMI_1:def 19
          .= Exec(i13,Cs2.(m+9)) by A69,AMI_1:def 18;
A71:       Cs2.(m+9).SBP=t9.DataLoc(n+4,RetSP) by A60,A61,SCMPDS_2:70
         .=t9.intpos(n+4+0) by Th5,SCMPDS_1:def 22
         .=n by A30,A62,SCMPDS_2:66;

A72:       IC Cs1.(m+10)=Cs1.(m+10).IC SCMPDS by AMI_1:def 15
          .= Next IC Cs1.(m+9) by A66,SCMPDS_2:59
          .= inspos (13+1) by A64,SCMPDS_4:70;

A73:       IC Cs2.(m+10)=Cs2.(m+10).IC SCMPDS by AMI_1:def 15
          .= Next IC Cs2.(m+9) by A70,SCMPDS_2:59
          .= inspos (13+1) by A68,SCMPDS_4:70;

          hereby
             take nn=m+10;
             thus CurInstr Cs1.nn = Cs1.(m+10).inspos 14 by A72,AMI_1:def 17
             .=s1.inspos 14 by AMI_1:54
             .=return SBP by A18,Lm1;
A74:          DataLoc(Cs1.(m+9).SBP,2)=intpos(n+2) by A67,Th5;
             then SBP <> DataLoc(Cs1.(m+9).SBP,2) by Lm3;
             hence Cs1.nn.SBP=s1.SBP by A66,A67,SCMPDS_2:59;
             thus CurInstr Cs2.nn = Cs2.(m+10).inspos 14 by A73,AMI_1:def 17
             .=s2.inspos 14 by AMI_1:54
             .=return SBP by A18,Lm1;
A75:          DataLoc(Cs2.(m+9).SBP,2)=intpos(n+2) by A71,Th5;
             then SBP <> DataLoc(Cs2.(m+9).SBP,2) by Lm3;
             hence Cs2.nn.SBP=s2.SBP by A24,A70,A71,SCMPDS_2:59;

           hereby let j be Nat;
               assume
A76:            1<j & j <= s1.SBP+1;
                 s1.SBP <= s8.SBP by A35,NAT_1:29;
               then s1.SBP +1 <= s8.SBP+1 by AXIOMS:24;
then A77:            j <= s8.SBP+1 by A76,AXIOMS:22;
A78:            intpos j <> SBP by A76,Def3,Th4;
then A79:            Cs1.(m+9).intpos j=s9.intpos j by A51,SCMPDS_2:70
               .=(Computation s8).m.intpos j by AMI_1:51
               .=s8.intpos j by A48,A76,A77;
               A80: n+1<n+2 by REAL_1:53;
then A81:            intpos j <> DataLoc(Cs1.(m+9).SBP,2) by A74,A76,Th4;
                 Cs1.7.intpos j = s1.intpos j by A18,A19,A20,A28,A29,A76,Lm5;
               hence s1.intpos j=s8.intpos j by A30,SCMPDS_2:66
                   .=Cs1.nn.intpos j by A66,A79,A81,SCMPDS_2:59;
A82:            Cs2.(m+9).intpos j=t9.intpos j by A61,A78,SCMPDS_2:70
               .=(Computation t8).m.intpos j by AMI_1:51
               .=t8.intpos j by A48,A76,A77;
A83:            intpos j <> DataLoc(Cs2.(m+9).SBP,2) by A75,A76,A80,Th4;
A84:            s2.DataLoc(s2.SBP,3)>0 by A24,A25,A27,NAT_1:19;
                 j <= n+1 by A76;
               then Cs2.7.intpos j = s2.intpos j by A18,A19,A24,A76,A84,Lm5;
               hence s2.intpos j=t8.intpos j by A30,SCMPDS_2:66
                   .=Cs2.nn.intpos j by A70,A82,A83,SCMPDS_2:59;
           end;
           hereby let j be Nat,a;
             assume A85: j <= nn & s1.a=s2.a;
               nn=m+(9+1)
             .=m+9+1 by XCMPLX_1:1;
then A86:          j <= m+9 or j=nn by A85,NAT_1:26;
             A87: m+(8+1)=m+8+1 by XCMPLX_1:1;
             A88: now assume A89:j <= m+8;
               per cases;
               suppose j<7+1;
                hence j <=7 or (j>=8 & j <= m+8) by NAT_1:38;
               suppose j>=8;
                hence j <=7 or (j>=8 & j <= m+8) by A89;
             end;
A90:        s8.a=Cs1.7.a by A30,SCMPDS_2:66
               .=Cs2.7.a by A18,A19,A20,A24,A25,A28,A29,A85,Lm7
               .=t8.a by A30,SCMPDS_2:66;
A91:      now let b;
            assume A92: s8.b=t8.b;
            per cases;
            suppose b=SBP;
              hence Cs1.(m+9).b=Cs2.(m+9).b by A67,A71;
            suppose A93: b<>SBP;
              hence Cs1.(m+9).b=s9.b by A51,SCMPDS_2:70
              .=(Computation s8).m.b by AMI_1:51
              .=(Computation t8).m.b by A48,A92
              .=t9.b by AMI_1:51
              .=Cs2.(m+9).b by A61,A93,SCMPDS_2:70;
          end;
A94:     s8.DataLoc(Cs1.(m+9).SBP,6)=x1 by A31,A35,A67,Th5
         .=t8.DataLoc(Cs1.(m+9).SBP,6) by A31,A35,A47,A67,Th5;
A95:      now
            per cases;
            suppose A96: a<>DataLoc(Cs2.(m+9).SBP,2);
               hence Cs1.nn.a=Cs1.(m+9).a by A66,A67,A71,SCMPDS_2:59
                  .=Cs2.(m+9).a by A90,A91
                  .=Cs2.nn.a by A70,A96,SCMPDS_2:59;
            suppose A97: a=DataLoc(Cs2.(m+9).SBP,2);
               hence Cs1.nn.a=Cs1.(m+9).DataLoc(Cs1.(m+9).SBP,6)
                          by A66,A67,A71,SCMPDS_2:59
                  .=Cs2.(m+9).DataLoc(Cs2.(m+9).SBP,6) by A67,A71,A91,A94
                  .=Cs2.nn.a by A70,A97,SCMPDS_2:59;
          end;
          per cases by A86,A87,A88,NAT_1:26;
             suppose j <=7;
              hence IC Cs1.j = IC Cs2.j &
               Cs1.j.a=Cs2.j.a by A18,A19,A20,A24,A25,A28,A29,A85,Lm7;
           suppose A98: j>=8 & j <= m+8;
              then consider j1 be Nat such that
A99:           j=8+j1 by NAT_1:28;
A100:           j1 <= m by A98,A99,REAL_1:53;
              thus IC Cs1.j = IC (Computation s8).j1 by A99,AMI_1:51
              .=IC (Computation t8).j1 by A48,A90,A100
              .=IC Cs2.j by A99,AMI_1:51;
              thus Cs1.j.a = (Computation s8).j1.a by A99,AMI_1:51
              .=(Computation t8).j1.a by A48,A90,A100
              .=Cs2.j.a by A99,AMI_1:51;
             suppose A101: j = m+9;
               hence IC Cs1.j = IC Cs2.j by A64,A68;
               thus Cs1.j.a=Cs2.j.a by A90,A91,A101;
             suppose A102:j = nn;
               hence IC Cs1.j = IC Cs2.j by A72,A73;
               thus Cs1.j.a=Cs2.j.a by A95,A102;
          end;
        end;
       end;
       hence P[k+1];
    end;
A103: for n holds P[n] from Ind(A1,A16);
     let s1,s2 be State of SCMPDS;
     assume A104: GA c= s1 & GA c= s2 &
     IC s1 = inspos 5 &
     s1.SBP >0 & s1.GBP=0 &
     s1.DataLoc(s1.SBP,3) >= 0 &
     s1.DataLoc(s1.SBP,2) >= s1.DataLoc(s1.SBP,3) &
     IC s2 = IC s1 & s2.SBP = s1.SBP & s2.GBP=0 &
     s2.DataLoc(s1.SBP,2) = s1.DataLoc(s1.SBP,2) &
     s2.DataLoc(s1.SBP,3) = s1.DataLoc(s1.SBP,3);
     then reconsider m=s1.DataLoc(s1.SBP,3) as Nat by INT_1:16;
       P[m] by A103;
     hence thesis by A104;
end;

Lm9:
  for s1,s2 being State of SCMPDS,a be Int_position,k be Nat
  st Initialized GCD-Algorithm c= s1 & Initialized GCD-Algorithm c= s2
  & s1.a=s2.a & k <= 4 holds
  IC (Computation s1).k = IC (Computation s2).k &
  (Computation s1).k.a = (Computation s2).k.a
proof
  let s1,s2 be State of SCMPDS,a be Int_position,k be Nat;
  set GA=GCD-Algorithm,
      Cs1=Computation s1,
      Cs2=Computation s2;
    assume
A1:  Initialized GA c= s1 & Initialized GA c= s2;
    assume
A2:  s1.a=s2.a & k <= 4;
A3:  GA c= s1 & GA c= s2 by A1,SCMPDS_4:57;

A4:  IC s1=inspos 0 by A1,SCMPDS_5:18;
then A5:  CurInstr s1 = s1.inspos 0 by AMI_1:def 17
     .=i00 by A3,Lm1;
A6:  Cs1.(0 + 1) = Following Cs1.0 by AMI_1:def 19
     .= Following s1 by AMI_1:def 19
     .= Exec(i00,s1) by A5,AMI_1:def 18;

A7:  IC s2=inspos 0 by A1,SCMPDS_5:18;
then A8:  CurInstr s2 = s2.inspos 0 by AMI_1:def 17
     .=i00 by A3,Lm1;
A9:  Cs2.(0 + 1) = Following Cs2.0 by AMI_1:def 19
     .= Following s2 by AMI_1:def 19
     .= Exec(i00,s2) by A8,AMI_1:def 18;

A10:  IC Cs1.1=Cs1.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s1 by A6,SCMPDS_2:57
     .= inspos (0+1) by A4,SCMPDS_4:70;
then A11:  CurInstr Cs1.1=Cs1.1.inspos 1 by AMI_1:def 17
     .=s1.inspos 1 by AMI_1:54
     .=i01 by A3,Lm1;
A12:  Cs1.(1 + 1) = Following Cs1.1 by AMI_1:def 19
     .= Exec(i01,Cs1.1) by A11,AMI_1:def 18;

A13:  IC Cs2.1=Cs2.1.IC SCMPDS by AMI_1:def 15
     .= Next IC s2 by A9,SCMPDS_2:57
     .= inspos (0+1) by A7,SCMPDS_4:70;
then A14:  CurInstr Cs2.1=Cs2.1.inspos 1 by AMI_1:def 17
     .=s2.inspos 1 by AMI_1:54
     .=i01 by A3,Lm1;
A15:  Cs2.(1 + 1) = Following Cs2.1 by AMI_1:def 19
     .= Exec(i01,Cs2.1) by A14,AMI_1:def 18;

A16:  IC Cs1.2=Cs1.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs1.1 by A12,SCMPDS_2:57
     .= inspos (1+1) by A10,SCMPDS_4:70;
then A17:  CurInstr Cs1.2=Cs1.2.inspos 2 by AMI_1:def 17
     .=s1.inspos 2 by AMI_1:54
     .=i02 by A3,Lm1;
A18:  Cs1.(2 + 1) = Following Cs1.2 by AMI_1:def 19
     .= Exec(i02,Cs1.2) by A17,AMI_1:def 18;
A19:  Cs1.2.SBP=7 by A12,SCMPDS_2:57;

A20:  IC Cs2.2=Cs2.2.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs2.1 by A15,SCMPDS_2:57
     .= inspos (1+1) by A13,SCMPDS_4:70;
then A21:  CurInstr Cs2.2=Cs2.2.inspos 2 by AMI_1:def 17
     .=s2.inspos 2 by AMI_1:54
     .=i02 by A3,Lm1;
A22:  Cs2.(2 + 1) = Following Cs2.2 by AMI_1:def 19
     .= Exec(i02,Cs2.2) by A21,AMI_1:def 18;
A23:  Cs2.2.SBP=7 by A15,SCMPDS_2:57;

A24:  IC Cs1.3=Cs1.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs1.2 by A18,SCMPDS_2:71
     .= inspos (2+1) by A16,SCMPDS_4:70;
then A25:  CurInstr Cs1.3=Cs1.3.inspos 3 by AMI_1:def 17
     .=s1.inspos 3 by AMI_1:54
     .=i03 by A3,Lm1;
A26:  Cs1.(3 + 1) = Following Cs1.3 by AMI_1:def 19
     .= Exec(i03,Cs1.3) by A25,AMI_1:def 18;

A27:  IC Cs2.3=Cs2.3.IC SCMPDS by AMI_1:def 15
     .= Next IC Cs2.2 by A22,SCMPDS_2:71
     .= inspos (2+1) by A20,SCMPDS_4:70;
then A28:  CurInstr Cs2.3=Cs2.3.inspos 3 by AMI_1:def 17
     .=s2.inspos 3 by AMI_1:54
     .=i03 by A3,Lm1;
A29:  Cs2.(3 + 1) = Following Cs2.3 by AMI_1:def 19
     .= Exec(i03,Cs2.3) by A28,AMI_1:def 18;

A30:    now let b;
          assume A31:s1.b=s2.b;
          per cases;
          suppose A32: b=GBP;
           hence Cs1.1.b=0 by A6,SCMPDS_2:57
             .=Cs2.1.b by A9,A32,SCMPDS_2:57;
          suppose A33: b<>GBP;
           hence Cs1.1.b=s1.b by A6,SCMPDS_2:57
             .=Cs2.1.b by A9,A31,A33,SCMPDS_2:57;
       end;
A34:    now let b;
          assume A35:s1.b=s2.b;
          per cases;
          suppose A36: b=SBP;
           hence Cs1.2.b=7 by A12,SCMPDS_2:57
             .=Cs2.2.b by A15,A36,SCMPDS_2:57;
          suppose A37: b<>SBP;
           hence Cs1.2.b=Cs1.1.b by A12,SCMPDS_2:57
              .=Cs2.1.b by A30,A35
              .=Cs2.2.b by A15,A37,SCMPDS_2:57;
       end;
A38:    now let b;
         assume A39:s1.b=s2.b;
         per cases;
         suppose A40:b=DataLoc(Cs1.2.SBP,RetIC);
           hence Cs1.3.b=IC Cs1.2 by A18,SCMPDS_2:71
           .=Cs2.3.b by A16,A19,A20,A22,A23,A40,SCMPDS_2:71;
         suppose A41:b<>DataLoc(Cs1.2.SBP,RetIC);
           hence Cs1.3.b=Cs1.2.b by A18,SCMPDS_2:71
           .=Cs2.2.b by A34,A39
           .=Cs2.3.b by A19,A22,A23,A41,SCMPDS_2:71;
       end;
       per cases by A2,CQC_THE1:5;
       suppose A42:k=0;
         hence IC Cs1.k = IC s1 by AMI_1:def 19
               .=IC Cs2.k by A4,A7,A42,AMI_1:def 19;
         thus Cs1.k.a = s1.a by A42,AMI_1:def 19
              .=Cs2.k.a by A2,A42,AMI_1:def 19;
       suppose A43:k=1;
         hence IC Cs1.k=IC Cs2.k by A10,A13;
         thus Cs1.k.a = Cs2.k.a by A2,A30,A43;
       suppose A44:k=2;
         hence IC Cs1.k=IC Cs2.k by A16,A20;
         thus Cs1.k.a = Cs2.k.a by A2,A34,A44;
       suppose A45:k=3;
         hence IC Cs1.k=IC Cs2.k by A24,A27;
         thus Cs1.k.a = Cs2.k.a by A2,A38,A45;
       suppose A46:k=4;
         thus IC Cs1.k=Cs1.k.IC SCMPDS by AMI_1:def 15
          .= ICplusConst(Cs1.3,2) by A26,A46,SCMPDS_2:66
          .= inspos (3+2) by A24,SCMPDS_6:23
          .= ICplusConst(Cs2.3,2) by A27,SCMPDS_6:23
          .= Cs2.k.IC SCMPDS by A29,A46,SCMPDS_2:66
          .= IC Cs2.k by AMI_1:def 15;
        thus Cs1.k.a = Cs1.3.a by A26,A46,SCMPDS_2:66
          .=Cs2.3.a by A2,A38
          .=Cs2.k.a by A29,A46,SCMPDS_2:66;
end;

begin :: The Autonomy of Recursive Euclide Algorithm

theorem
    for p being FinPartState of SCMPDS,x,y being Integer st y >= 0 & x >= y
  & p=(intpos 9,intpos 10) --> (x,y)
  holds Initialized GCD-Algorithm +* p is autonomic
proof
  let p be FinPartState of SCMPDS,x,y be Integer;
  set GA=GCD-Algorithm,
      IA=Initialized GA,
      a=intpos 9,
      b=intpos 10;
  assume A1:y >= 0 & x >= y & p=(a,b) --> (x,y);
then A2: dom p = { a,b } by FUNCT_4:65;
A3: dom IA= {IC SCMPDS} \/ dom GA by SCMPDS_4:27;
      now assume
    dom IA meets dom p;
      then consider z being set such that
A4:    z in dom IA & z in dom p by XBOOLE_0:3;
         z = a or z = b by A2,A4,TARSKI:def 2;
      hence contradiction by A4,SCMPDS_4:31;
    end;
then A5: IA c= IA +* p by FUNCT_4:33;
A6: a in dom p & b in dom p by A2,TARSKI:def 2;
A7: for t being State of SCMPDS st IA +* p c= t holds t.a = x & t.b = y
    proof let t be State of SCMPDS such that
A8:  IA +* p c= t;
       p c= IA +* p by FUNCT_4:26;
then A9:  p c= t by A8,XBOOLE_1:1;
A10:  a <> b by Th4;
    thus t.a = p.a by A6,A9,GRFUNC_1:8
      .= x by A1,A10,FUNCT_4:66;
    thus t.b = p.b by A6,A9,GRFUNC_1:8
      .= y by A1,A10,FUNCT_4:66;
   end;
   thus IA +* p is autonomic
   proof let s1,s2 be State of SCMPDS such that
A11:  IA +* p c= s1 and
A12:  IA +* p c= s2;
A13:  IA c= s1 by A5,A11,XBOOLE_1:1;
then A14:  GA c= s1 by SCMPDS_4:57;
A15:  IA c= s2 by A5,A12,XBOOLE_1:1;
then A16:  GA c= s2 by SCMPDS_4:57;
A17:  s1.a=x & s1.b=y by A7,A11;
A18:  s2.a=x & s2.b=y by A7,A12;
     set Cs1 = Computation s1, Cs2 = Computation s2;
     set s4=Cs1.4,
         t4=Cs2.4;

A19:  GA c= s4 by A14,AMI_3:38;
A20:  IC s4 = inspos 5 & s4.GBP = 0 &
     s4.SBP = 7 & s4.intpos(7+RetIC) = inspos 2 &
     s4.intpos 9 = s1.intpos 9 & s4.intpos 10 = s1.intpos 10 by A13,Th15;
then A21:  s4.DataLoc(s4.SBP,3)=s4.intpos (7+3) by Th5
     .=y by A7,A11,A20;
  A22: DataLoc(s4.SBP,2)=intpos(7+2) by A20,Th5;
then A23:  s4.DataLoc(s4.SBP,2)=x by A7,A11,A20;

A24:  GA c= t4 by A16,AMI_3:38;
A25:  IC t4 = inspos 5 & t4.GBP = 0 &
     t4.SBP = 7 & t4.intpos(7+RetIC) = inspos 2 &
     t4.intpos 9 = s2.intpos 9 & t4.intpos 10 = s2.intpos 10 by A15,Th15;
then A26:  t4.DataLoc(t4.SBP,3)=t4.intpos (7+3) by Th5
     .=s4.DataLoc(s4.SBP,3) by A7,A12,A21,A25;
    DataLoc(t4.SBP,2)=intpos(7+2) by A25,Th5;
then A27:  t4.DataLoc(t4.SBP,2)=s4.DataLoc(s4.SBP,2) by A7,A12,A23,A25;
   set Cs4=Computation s4,
       Ct4=Computation t4;
     consider n such that
A28:  CurInstr Cs4.n = return SBP & s4.SBP=Cs4.n.SBP &
     CurInstr Ct4.n = return SBP & t4.SBP=Ct4.n.SBP &
   (for j be Nat st 1<j & j <= s4.SBP+1 holds
      s4.intpos j=Cs4.n.intpos j &
      t4.intpos j=Ct4.n.intpos j) &
   (for k be Nat,c be Int_position st k <= n & s4.c = t4.c holds
      IC (Computation s4).k = IC (Computation t4).k &
      (Computation s4).k.c =(Computation t4).k.c)
      by A1,A17,A19,A20,A21,A22,A24,A25,A26,A27,Lm8;
A29:  Cs4.n.DataLoc(Cs4.n.SBP,RetIC)
      =Cs4.n.intpos(7+1) by A20,A28,Th5,SCMPDS_1:def 23
     .=inspos 2 by A20,A28,SCMPDS_1:def 23;

A30:  Ct4.n.DataLoc(Ct4.n.SBP,RetIC)
      =Ct4.n.intpos(7+1) by A25,A28,Th5,SCMPDS_1:def 23
     .=inspos 2 by A20,A25,A28,SCMPDS_1:def 23;

A31:  Cs4.(n+1)= Following Cs4.n by AMI_1:def 19
     .= Exec(i14,Cs4.n) by A28,AMI_1:def 18;
A32:  IC Cs4.(n+1)=Cs4.(n+1).IC SCMPDS by AMI_1:def 15
     .= 2*(abs(Cs4.n.DataLoc(Cs4.n.SBP,RetIC)) div 2)+4 by A31,SCMPDS_2:70
     .= inspos (2+2) by A29,Th3;
then A33:  CurInstr Cs4.(n+1) =Cs4.(n+1).inspos 4 by AMI_1:def 17
     .=s4.inspos 4 by AMI_1:54
     .=s1.inspos 4 by AMI_1:54
     .=i04 by A14,Lm1;

A34:  Ct4.(n+1)= Following Ct4.n by AMI_1:def 19
     .= Exec(i14,Ct4.n) by A28,AMI_1:def 18;
A35:  IC Ct4.(n+1)=Ct4.(n+1).IC SCMPDS by AMI_1:def 15
     .= 2*(abs(Ct4.n.DataLoc(Ct4.n.SBP,RetIC)) div 2)+4 by A34,SCMPDS_2:70
     .= inspos (2+2) by A30,Th3;
then A36:  CurInstr Ct4.(n+1) =Ct4.(n+1).inspos 4 by AMI_1:def 17
     .=t4.inspos 4 by AMI_1:54
     .=s2.inspos 4 by AMI_1:54
     .=i04 by A16,Lm1;
A37:   s4.a=t4.a by A13,A15,A17,A18,Lm9;
A38:   s4.b=t4.b by A13,A15,A17,A18,Lm9;
A39:   a <> SBP by Def3,Th4;
then A40:  Cs4.(n+1).a=Cs4.n.a by A31,SCMPDS_2:70
      .=Ct4.n.a by A28,A37
      .=Ct4.(n+1).a by A34,A39,SCMPDS_2:70;
A41:   b <> SBP by Def3,Th4;
then A42:  Cs4.(n+1).b=Cs4.n.b by A31,SCMPDS_2:70
      .=Ct4.n.b by A28,A38
      .=Ct4.(n+1).b by A34,A41,SCMPDS_2:70;

A43:  now let j be Nat;
         j<n+(4+1) or j>=n+5;
       then A44: j<n+4+1 or j>=n+5 by XCMPLX_1:1;
       A45: now assume A46:j <= n+4;
          A47: j<3+1 or j>= 4;
          per cases by A47,NAT_1:38;
          case j<=3;
          hence j<=3;
          case j>=4;
          hence j>=4 & j <= n+4 by A46;
       end;
      per cases by A44,A45,NAT_1:38;
      suppose j<=3;
       then A48:  j<=4 by AXIOMS:22;
       hence IC Cs1.j=IC Cs2.j by A13,A15,A17,A18,Lm9;
       thus Cs1.j.a=Cs2.j.a by A13,A15,A17,A18,A48,Lm9;
       thus Cs1.j.b=Cs2.j.b by A13,A15,A17,A18,A48,Lm9;

      suppose A49: j>=4 & j<=n+4;
       then consider j1 be Nat such that
A50:    j=4+j1 by NAT_1:28;
A51:    j1 <= n by A49,A50,REAL_1:53;
       thus IC Cs1.j = IC (Computation s4).j1 by A50,AMI_1:51
           .=IC (Computation t4).j1 by A28,A37,A51
           .=IC Cs2.j by A50,AMI_1:51;
      thus Cs1.j.a = Cs4.j1.a by A50,AMI_1:51
           .=Ct4.j1.a by A28,A37,A51
           .=Cs2.j.a by A50,AMI_1:51;
      thus Cs1.j.b = Cs4.j1.b by A50,AMI_1:51
           .=Ct4.j1.b by A28,A38,A51
           .=Cs2.j.b by A50,AMI_1:51;

      suppose j>=n+5;
       then consider j1 be Nat such that
A52:    j=n+(1+4)+j1 by NAT_1:28;
A53:    j=n+1+4+j1 by A52,XCMPLX_1:1
       .=n+1+j1+4 by XCMPLX_1:1;
A54:    n+1+j1 >= n+1 by NAT_1:29;
       thus IC Cs1.j=IC Cs4.(n+1+j1) by A53,AMI_1:51
        .=IC Ct4.(n+1) by A32,A33,A35,A54,AMI_1:52
        .=IC Ct4.(n+1+j1) by A36,A54,AMI_1:52
        .=IC Cs2.j by A53,AMI_1:51;
       thus Cs1.j.a = Cs4.(n+1+j1).a by A53,AMI_1:51
         .=Ct4.(n+1).a by A33,A40,A54,AMI_1:52
         .=Ct4.(n+1+j1).a by A36,A54,AMI_1:52
         .=Cs2.j.a by A53,AMI_1:51;
      thus Cs1.j.b = Cs4.(n+1+j1).b by A53,AMI_1:51
         .=Ct4.(n+1).b by A33,A42,A54,AMI_1:52
         .=Ct4.(n+1+j1).b by A36,A54,AMI_1:52
         .=Cs2.j.b by A53,AMI_1:51;
    end;

     set A = { IC SCMPDS, a,b };
A55:  dom(IA +* p) = { IC SCMPDS } \/ dom GA \/ { a, b } by A2,A3,FUNCT_4:def 1
      .= { IC SCMPDS } \/ { a,b } \/ dom GA by XBOOLE_1:4
      .= A \/ dom GA by ENUMSET1:42;
    let k be Nat;
A56:  GA c= Cs2.k by A16,AMI_3:43;
       GA c= Cs1.k by A14,AMI_3:43;
then A57:  Cs1.k | dom GA = GA by GRFUNC_1:64
      .= (Cs2.k)| dom GA by A56,GRFUNC_1:64;
A58:  (Cs1.k).IC SCMPDS = IC Cs1.k by AMI_1:def 15
    .=IC Cs2.k by A43
    .=(Cs2.k).IC SCMPDS by AMI_1:def 15;
A59: Cs1.k.a = Cs2.k.a & Cs1.k.b = Cs2.k.b by A43;
      dom(Cs1.k) = the carrier of SCMPDS by AMI_3:36
     .= dom(Cs2.k) by AMI_3:36;
    then (Cs1.k)|A = (Cs2.k)|A by A58,A59,AMI_3:26;
     hence (Computation s1).k|dom(IA +* p) = (Computation s2).k|dom(IA +* p)
     by A55,A57,AMI_3:20;
   end;
end;

Back to top