set GA = GCD-Algorithm ;
defpred S1[ Element of NAT ] means for s1, s2 being State of SCMPDS st GCD-Algorithm c= s1 & GCD-Algorithm c= s2 & IC s1 = 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 being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) );
A1:
S1[ 0 ]
proof
let s1,
s2 be
State of
SCMPDS;
( GCD-Algorithm c= s1 & GCD-Algorithm c= s2 & IC s1 = 5 & s1 . SBP > 0 & s1 . GBP = 0 & s1 . (DataLoc ((s1 . SBP),3)) <= 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
set x =
s1 . (DataLoc ((s1 . SBP),2));
set y =
s1 . (DataLoc ((s1 . SBP),3));
set y2 =
s2 . (DataLoc ((s1 . SBP),3));
assume that A2:
GCD-Algorithm c= s1
and A3:
GCD-Algorithm c= s2
;
( not IC s1 = 5 or not s1 . SBP > 0 or not s1 . GBP = 0 or not s1 . (DataLoc ((s1 . SBP),3)) <= 0 or not s1 . (DataLoc ((s1 . SBP),3)) >= 0 or not s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3)) or not IC s2 = IC s1 or not s2 . SBP = s1 . SBP or not s2 . GBP = 0 or not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume A4:
IC s1 = 5
;
( not s1 . SBP > 0 or not s1 . GBP = 0 or not s1 . (DataLoc ((s1 . SBP),3)) <= 0 or not s1 . (DataLoc ((s1 . SBP),3)) >= 0 or not s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3)) or not IC s2 = IC s1 or not s2 . SBP = s1 . SBP or not s2 . GBP = 0 or not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume that
s1 . SBP > 0
and
s1 . GBP = 0
;
( not s1 . (DataLoc ((s1 . SBP),3)) <= 0 or not s1 . (DataLoc ((s1 . SBP),3)) >= 0 or not s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3)) or not IC s2 = IC s1 or not s2 . SBP = s1 . SBP or not s2 . GBP = 0 or not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume A5:
s1 . (DataLoc ((s1 . SBP),3)) <= 0
;
( not s1 . (DataLoc ((s1 . SBP),3)) >= 0 or not s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3)) or not IC s2 = IC s1 or not s2 . SBP = s1 . SBP or not s2 . GBP = 0 or not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume
s1 . (DataLoc ((s1 . SBP),3)) >= 0
;
( not s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3)) or not IC s2 = IC s1 or not s2 . SBP = s1 . SBP or not s2 . GBP = 0 or not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume
s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3))
;
( not IC s2 = IC s1 or not s2 . SBP = s1 . SBP or not s2 . GBP = 0 or not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume that A6:
IC s2 = IC s1
and A7:
s2 . SBP = s1 . SBP
and
s2 . GBP = 0
;
( not s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) or not s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) or ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume that
s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2))
and A8:
s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3))
;
ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
Y:
(ProgramPart s1) /. (IC s1) = s1 . (IC s1)
by COMPOS_1:38;
A9:
Comput (
(ProgramPart s1),
s1,
(1 + 0)) =
Following (
(ProgramPart s1),
(Comput ((ProgramPart s1),s1,0)))
by EXTPRO_1:4
.=
Following (
(ProgramPart s1),
s1)
by EXTPRO_1:3
.=
Exec (
((SBP,3) <=0_goto 9),
s1)
by A2, A4, Y, Lm1
;
Y:
(ProgramPart s2) /. (IC s2) = s2 . (IC s2)
by COMPOS_1:38;
A10:
Comput (
(ProgramPart s2),
s2,
(1 + 0)) =
Following (
(ProgramPart s2),
(Comput ((ProgramPart s2),s2,0)))
by EXTPRO_1:4
.=
Following (
(ProgramPart s2),
s2)
by EXTPRO_1:3
.=
Exec (
((SBP,3) <=0_goto 9),
s2)
by A3, A4, A6, Y, Lm1
;
A11:
IC (Comput ((ProgramPart s1),s1,1)) =
ICplusConst (
s1,9)
by A5, A9, SCMPDS_2:68
.=
5
+ 9
by A4, SCMPDS_6:23
;
A12:
IC (Comput ((ProgramPart s2),s2,1)) =
ICplusConst (
s2,9)
by A5, A7, A8, A10, SCMPDS_2:68
.=
5
+ 9
by A4, A6, SCMPDS_6:23
;
take n = 1;
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
Y:
(ProgramPart (Comput ((ProgramPart s1),s1,n))) /. (IC (Comput ((ProgramPart s1),s1,n))) = (Comput ((ProgramPart s1),s1,n)) . (IC (Comput ((ProgramPart s1),s1,n)))
by COMPOS_1:38;
thus CurInstr (
(ProgramPart (Comput ((ProgramPart s1),s1,n))),
(Comput ((ProgramPart s1),s1,n))) =
s1 . 14
by A11, Y, AMI_1:54
.=
return SBP
by A2, Lm1
;
( s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
thus
(Comput ((ProgramPart s1),s1,n)) . SBP = s1 . SBP
by A9, SCMPDS_2:68;
( CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
Y:
(ProgramPart (Comput ((ProgramPart s2),s2,n))) /. (IC (Comput ((ProgramPart s2),s2,n))) = (Comput ((ProgramPart s2),s2,n)) . (IC (Comput ((ProgramPart s2),s2,n)))
by COMPOS_1:38;
thus CurInstr (
(ProgramPart (Comput ((ProgramPart s2),s2,n))),
(Comput ((ProgramPart s2),s2,n))) =
s2 . 14
by A12, Y, AMI_1:54
.=
return SBP
by A3, Lm1
;
( s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
thus
(Comput ((ProgramPart s2),s2,n)) . SBP = s2 . SBP
by A10, SCMPDS_2:68;
( ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
thus
for
j being
Element of
NAT st 1
< j &
j <= (s1 . SBP) + 1 holds
(
s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) &
s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) )
by A9, A10, SCMPDS_2:68;
for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a )
hereby verum
let k be
Element of
NAT ;
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,b2)) = IC (Comput ((ProgramPart s2),s2,b2)) & (Comput ((ProgramPart s1),s1,b2)) . b3 = (Comput ((ProgramPart s2),s2,b2)) . b3 )let a be
Int_position ;
( k <= n & s1 . a = s2 . a implies ( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 ) )assume that A13:
k <= n
and A14:
s1 . a = s2 . a
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )per cases
( k = 0 or k = 1 )
by A13, NAT_1:26;
suppose A15:
k = 0
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )hence IC (Comput ((ProgramPart s1),s1,k)) =
IC s2
by A6, EXTPRO_1:3
.=
IC (Comput ((ProgramPart s2),s2,k))
by A15, EXTPRO_1:3
;
(Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . athus (Comput ((ProgramPart s1),s1,k)) . a =
s1 . a
by A15, EXTPRO_1:3
.=
(Comput ((ProgramPart s2),s2,k)) . a
by A14, A15, EXTPRO_1:3
;
verum end; suppose A16:
k = 1
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )hence
IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k))
by A11, A12;
(Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . athus (Comput ((ProgramPart s1),s1,k)) . a =
s1 . a
by A9, A16, SCMPDS_2:68
.=
(Comput ((ProgramPart s2),s2,k)) . a
by A10, A14, A16, SCMPDS_2:68
;
verum end; end;
end;
end;
A17:
now let k be
Element of
NAT ;
( S1[k] implies S1[k + 1] )assume A18:
S1[
k]
;
S1[k + 1]now let s1,
s2 be
State of
SCMPDS;
( GCD-Algorithm c= s1 & GCD-Algorithm c= s2 & IC s1 = 5 & s1 . SBP > 0 & s1 . GBP = 0 & s1 . (DataLoc ((s1 . SBP),3)) <= k + 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )set x =
s1 . (DataLoc ((s1 . SBP),2));
set y =
s1 . (DataLoc ((s1 . SBP),3));
assume that A19:
GCD-Algorithm c= s1
and A20:
GCD-Algorithm c= s2
;
( IC s1 = 5 & s1 . SBP > 0 & s1 . GBP = 0 & s1 . (DataLoc ((s1 . SBP),3)) <= k + 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume A21:
IC s1 = 5
;
( s1 . SBP > 0 & s1 . GBP = 0 & s1 . (DataLoc ((s1 . SBP),3)) <= k + 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume that A22:
s1 . SBP > 0
and A23:
s1 . GBP = 0
;
( s1 . (DataLoc ((s1 . SBP),3)) <= k + 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume A24:
s1 . (DataLoc ((s1 . SBP),3)) <= k + 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume A25:
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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume A26:
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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume that A27:
IC s2 = IC s1
and A28:
s2 . SBP = s1 . SBP
and A29:
s2 . GBP = 0
;
( s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2)) & s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) ) )assume that A30:
s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2))
and A31:
s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3))
;
ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) )reconsider y =
s1 . (DataLoc ((s1 . SBP),3)) as
Element of
NAT by A25, INT_1:16;
per cases
( y <= k or y = k + 1 )
by A24, NAT_1:8;
suppose
y <= k
;
ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart n),n,b3))),(Comput ((ProgramPart n),n,b3))) = return SBP & n . SBP = (Comput ((ProgramPart n),n,b3)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & b2 . SBP = (Comput ((ProgramPart b2),b2,b3)) . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (n . SBP) + 1 holds
( n . (intpos b4) = (Comput ((ProgramPart n),n,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for k being Element of NAT
for a being Int_position st b4 <= a & n . b5 = k . b5 holds
( IC (Comput ((ProgramPart n),n,b4)) = IC (Comput ((ProgramPart k),k,b4)) & (Comput ((ProgramPart n),n,b4)) . b5 = (Comput ((ProgramPart k),k,b4)) . b5 ) ) )hence
ex
n being
Element of
NAT st
(
CurInstr (
(ProgramPart (Comput ((ProgramPart s1),s1,n))),
(Comput ((ProgramPart s1),s1,n)))
= return SBP &
s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP &
CurInstr (
(ProgramPart (Comput ((ProgramPart s2),s2,n))),
(Comput ((ProgramPart s2),s2,n)))
= return SBP &
s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for
j being
Element of
NAT st 1
< j &
j <= (s1 . SBP) + 1 holds
(
s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) &
s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for
k being
Element of
NAT for
a being
Int_position st
k <= n &
s1 . a = s2 . a holds
(
IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) &
(Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
by A18, A19, A20, A21, A22, A23, A25, A26, A27, A28, A29, A30, A31;
verum end; suppose A32:
y = k + 1
;
ex nn being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart nn),nn,b3))),(Comput ((ProgramPart nn),nn,b3))) = return SBP & (Comput ((ProgramPart nn),nn,b3)) . SBP = nn . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart b2),b2,b3))),(Comput ((ProgramPart b2),b2,b3))) = return SBP & (Comput ((ProgramPart b2),b2,b3)) . SBP = b2 . SBP & ( for j being Element of NAT st 1 < b4 & b4 <= (nn . SBP) + 1 holds
( nn . (intpos b4) = (Comput ((ProgramPart nn),nn,b3)) . (intpos b4) & j . (intpos b4) = (Comput ((ProgramPart j),j,b3)) . (intpos b4) ) ) & ( for j being Element of NAT
for a being Int_position st b4 <= a & nn . b5 = j . b5 holds
( IC (Comput ((ProgramPart nn),nn,b4)) = IC (Comput ((ProgramPart j),j,b4)) & (Comput ((ProgramPart nn),nn,b4)) . b5 = (Comput ((ProgramPart j),j,b4)) . b5 ) ) )then A33:
y > 0
by NAT_1:5;
reconsider n =
s1 . SBP as
Element of
NAT by A22, INT_1:16;
A34:
n = s1 . SBP
;
set s8 =
Comput (
(ProgramPart s1),
s1,8);
set t8 =
Comput (
(ProgramPart s2),
s2,8);
A35:
IC (Comput ((ProgramPart s1),s1,7)) = 5
+ 7
by A19, A21, A23, A30, A33, A34, Lm6;
A36:
Comput (
(ProgramPart s1),
s1,8)
= Exec (
(goto (- 7)),
(Comput ((ProgramPart s1),s1,7)))
by A19, A21, A23, A30, A33, A34, Lm6;
A37:
(Comput ((ProgramPart s1),s1,7)) . SBP = n + 4
by A19, A21, A23, A30, A33, Lm6;
A38:
(Comput ((ProgramPart s1),s1,7)) . GBP = 0
by A19, A21, A23, A30, A33, A34, Lm6;
A39:
(Comput ((ProgramPart s1),s1,7)) . (intpos (n + 7)) = (s1 . (intpos (n + 2))) mod (s1 . (intpos (n + 3)))
by A19, A21, A23, A30, A33, Lm6;
A40:
(Comput ((ProgramPart s1),s1,7)) . (intpos (n + 6)) = s1 . (intpos (n + 3))
by A19, A21, A23, A30, A33, Lm6;
A41:
IC (Comput ((ProgramPart s2),s2,7)) = 5
+ 7
by A20, A21, A27, A28, A29, A30, A31, A33, A34, Lm6;
A42:
Comput (
(ProgramPart s2),
s2,8)
= Exec (
(goto (- 7)),
(Comput ((ProgramPart s2),s2,7)))
by A20, A21, A27, A28, A29, A30, A31, A33, A34, Lm6;
A43:
(Comput ((ProgramPart s2),s2,7)) . SBP = n + 4
by A20, A21, A27, A28, A29, A30, A31, A33, Lm6;
A44:
(Comput ((ProgramPart s2),s2,7)) . GBP = 0
by A20, A21, A27, A28, A29, A30, A31, A33, A34, Lm6;
A45:
(Comput ((ProgramPart s2),s2,7)) . (intpos (n + 7)) = (s1 . (intpos (n + 2))) mod (s1 . (intpos (n + 3)))
by A19, A20, A21, A23, A27, A28, A29, A30, A31, A33, Lm6;
A46:
(Comput ((ProgramPart s2),s2,7)) . (intpos (n + 6)) = s1 . (intpos (n + 3))
by A19, A20, A21, A23, A27, A28, A29, A30, A31, A33, Lm6;
A47:
(Comput ((ProgramPart s1),s1,7)) . (intpos (n + 4)) = n
by A19, A21, A23, A30, A33, Lm6;
A48:
(Comput ((ProgramPart s1),s1,7)) . (intpos (n + 5)) = 11
by A19, A21, A23, A30, A33, Lm6;
A49:
(Comput ((ProgramPart s2),s2,7)) . (intpos (n + 4)) = n
by A20, A21, A27, A28, A29, A30, A31, A33, Lm6;
A50:
(Comput ((ProgramPart s2),s2,7)) . (intpos (n + 5)) = 11
by A20, A21, A27, A28, A29, A30, A31, A33, Lm6;
A51:
DataLoc (
(n + 4),2) =
intpos ((n + 4) + 2)
by Th5
.=
intpos (n + (4 + 2))
;
A52:
DataLoc (
(n + 4),3) =
intpos ((n + 4) + 3)
by Th5
.=
intpos (n + (4 + 3))
;
A53:
GCD-Algorithm c= Comput (
(ProgramPart s1),
s1,8)
by A19, AMI_1:81;
A54:
GCD-Algorithm c= Comput (
(ProgramPart s2),
s2,8)
by A20, AMI_1:81;
A55:
IC (Comput ((ProgramPart s1),s1,8)) =
ICplusConst (
(Comput ((ProgramPart s1),s1,7)),
(- 7))
by A36, SCMPDS_2:66
.=
5
by A35, Th6
;
A56:
(Comput ((ProgramPart s1),s1,8)) . SBP = n + 4
by A36, A37, SCMPDS_2:66;
A57:
4
<= n + 4
by NAT_1:11;
then A58:
(Comput ((ProgramPart s1),s1,8)) . SBP > 0
by A56, XXREAL_0:2;
A59:
(Comput ((ProgramPart s1),s1,8)) . GBP = 0
by A36, A38, SCMPDS_2:66;
set x1 =
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),2));
set y1 =
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),3));
A60:
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),2)) =
s1 . (intpos (n + 3))
by A36, A40, A51, A56, SCMPDS_2:66
.=
y
by Th5
;
A61:
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),3)) =
(s1 . (intpos (n + 2))) mod (s1 . (intpos (n + 3)))
by A36, A39, A52, A56, SCMPDS_2:66
.=
(s1 . (intpos (n + 2))) mod y
by Th5
;
then A62:
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),3)) < y
by A32, NAT_1:5, NEWTON:79;
then A63:
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),3)) <= k
by A32, INT_1:20;
A64:
IC (Comput ((ProgramPart s2),s2,8)) =
ICplusConst (
(Comput ((ProgramPart s2),s2,7)),
(- 7))
by A42, SCMPDS_2:66
.=
IC (Comput ((ProgramPart s1),s1,8))
by A41, A55, Th6
;
A65:
(Comput ((ProgramPart s2),s2,8)) . SBP = (Comput ((ProgramPart s1),s1,8)) . SBP
by A42, A43, A56, SCMPDS_2:66;
A66:
(Comput ((ProgramPart s2),s2,8)) . GBP = 0
by A42, A44, SCMPDS_2:66;
set x3 =
(Comput ((ProgramPart s2),s2,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),2));
A67:
(Comput ((ProgramPart s2),s2,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),2)) =
s1 . (intpos (n + 3))
by A42, A46, A51, A56, SCMPDS_2:66
.=
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),2))
by A60, Th5
;
(Comput ((ProgramPart s2),s2,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),3)) =
(s1 . (intpos (n + 2))) mod (s1 . (intpos (n + 3)))
by A42, A45, A52, A56, SCMPDS_2:66
.=
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),3))
by A61, Th5
;
then consider m being
Element of
NAT such that A68:
CurInstr (
(ProgramPart (Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m))),
(Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)))
= return SBP
and A69:
(Comput ((ProgramPart s1),s1,8)) . SBP = (Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)) . SBP
and A70:
CurInstr (
(ProgramPart (Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m))),
(Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m)))
= return SBP
and A71:
(Comput ((ProgramPart s2),s2,8)) . SBP = (Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m)) . SBP
and A72:
for
j being
Element of
NAT st 1
< j &
j <= ((Comput ((ProgramPart s1),s1,8)) . SBP) + 1 holds
(
(Comput ((ProgramPart s1),s1,8)) . (intpos j) = (Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)) . (intpos j) &
(Comput ((ProgramPart s2),s2,8)) . (intpos j) = (Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m)) . (intpos j) )
and A73:
for
k being
Element of
NAT for
a being
Int_position st
k <= m &
(Comput ((ProgramPart s1),s1,8)) . a = (Comput ((ProgramPart s2),s2,8)) . a holds
(
IC (Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),k)) = IC (Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),k)) &
(Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),k)) . a = (Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),k)) . a )
by A18, A33, A53, A54, A55, A58, A59, A60, A61, A62, A63, A64, A65, A66, A67, NEWTON:78;
set s9 =
Comput (
(ProgramPart s1),
s1,
(m + 8));
set t9 =
Comput (
(ProgramPart s2),
s2,
(m + 8));
T9:
ProgramPart s1 = ProgramPart (Comput ((ProgramPart s1),s1,8))
by AMI_1:123;
T8:
ProgramPart s2 = ProgramPart (Comput ((ProgramPart s2),s2,8))
by AMI_1:123;
A74:
(Comput ((ProgramPart s1),s1,8)) . SBP = (Comput ((ProgramPart s1),s1,(m + 8))) . SBP
by A69, T9, EXTPRO_1:5;
T:
ProgramPart s1 = ProgramPart (Comput ((ProgramPart s1),s1,8))
by AMI_1:123;
x:
Comput (
(ProgramPart s1),
s1,
(m + 8))
= Comput (
(ProgramPart s1),
(Comput ((ProgramPart s1),s1,8)),
m)
by EXTPRO_1:5;
S:
ProgramPart s1 = ProgramPart (Comput ((ProgramPart s1),s1,(m + 8)))
by AMI_1:123;
A75:
Comput (
(ProgramPart s1),
s1,
(m + (8 + 1))) =
Comput (
(ProgramPart s1),
s1,
((m + 8) + 1))
.=
Following (
(ProgramPart s1),
(Comput ((ProgramPart s1),s1,(m + 8))))
by EXTPRO_1:4
.=
Exec (
(return SBP),
(Comput ((ProgramPart s1),s1,(m + 8))))
by A68, x, T, S
;
A76:
1
< n + 4
by A57, XXREAL_0:2;
A77:
n + 4
< ((Comput ((ProgramPart s1),s1,8)) . SBP) + 1
by A56, XREAL_1:31;
then A78:
(Comput ((ProgramPart s1),s1,8)) . (intpos (n + 4)) =
(Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)) . (intpos (n + 4))
by A72, A76
.=
(Comput ((ProgramPart s1),s1,(m + 8))) . (intpos (n + 4))
by T9, EXTPRO_1:5
;
5
<= n + 5
by NAT_1:11;
then A79:
1
< n + 5
by XXREAL_0:2;
A80:
intpos (n + (4 + 1)) =
intpos ((n + 4) + 1)
.=
DataLoc (
(n + 4),1)
by Th5
;
A81: 11 =
(Comput ((ProgramPart s1),s1,8)) . (intpos (n + 5))
by A36, A48, SCMPDS_2:66
.=
(Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)) . (intpos (n + 5))
by A56, A72, A79
.=
(Comput ((ProgramPart s1),s1,(m + 8))) . (DataLoc (((Comput ((ProgramPart s1),s1,(m + 8))) . SBP),RetIC))
by A56, A74, A80, T9, EXTPRO_1:5, SCMPDS_1:def 23
;
A82:
(Comput ((ProgramPart s2),s2,(m + 8))) . SBP = n + 4
by A56, A65, A71, T8, EXTPRO_1:5;
T:
ProgramPart s2 = ProgramPart (Comput ((ProgramPart s2),s2,8))
by AMI_1:123;
x:
Comput (
(ProgramPart s2),
s2,
(m + 8))
= Comput (
(ProgramPart s2),
(Comput ((ProgramPart s2),s2,8)),
m)
by EXTPRO_1:5;
S:
ProgramPart s2 = ProgramPart (Comput ((ProgramPart s2),s2,(m + 8)))
by AMI_1:123;
A83:
Comput (
(ProgramPart s2),
s2,
(m + (8 + 1))) =
Comput (
(ProgramPart s2),
s2,
((m + 8) + 1))
.=
Following (
(ProgramPart s2),
(Comput ((ProgramPart s2),s2,(m + 8))))
by EXTPRO_1:4
.=
Exec (
(return SBP),
(Comput ((ProgramPart s2),s2,(m + 8))))
by A70, x, T, S
;
A84:
(Comput ((ProgramPart s2),s2,8)) . (intpos (n + 4)) =
(Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m)) . (intpos (n + 4))
by A72, A76, A77
.=
(Comput ((ProgramPart s2),s2,(m + 8))) . (intpos (n + 4))
by T, EXTPRO_1:5
;
A85: 11 =
(Comput ((ProgramPart s2),s2,8)) . (intpos (n + 5))
by A42, A50, SCMPDS_2:66
.=
(Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m)) . (intpos (n + 5))
by A56, A72, A79
.=
(Comput ((ProgramPart s2),s2,(m + 8))) . (DataLoc (((Comput ((ProgramPart s2),s2,(m + 8))) . SBP),RetIC))
by A80, A82, T, EXTPRO_1:5, SCMPDS_1:def 23
;
Y:
(ProgramPart (Comput ((ProgramPart s1),s1,(m + 9)))) /. (IC (Comput ((ProgramPart s1),s1,(m + 9)))) = (Comput ((ProgramPart s1),s1,(m + 9))) . (IC (Comput ((ProgramPart s1),s1,(m + 9))))
by COMPOS_1:38;
A86:
IC (Comput ((ProgramPart s1),s1,(m + 9))) =
(abs ((Comput ((ProgramPart s1),s1,(m + 8))) . (DataLoc (((Comput ((ProgramPart s1),s1,(m + 8))) . SBP),RetIC)))) + 2
by A75, SCMPDS_2:70
.=
11
+ 2
by A81, ABSVALUE:46
;
then A87:
CurInstr (
(ProgramPart (Comput ((ProgramPart s1),s1,(m + 9)))),
(Comput ((ProgramPart s1),s1,(m + 9)))) =
s1 . 13
by Y, AMI_1:54
.=
(
SBP,2)
:= (
SBP,6)
by A19, Lm1
;
T:
ProgramPart s1 = ProgramPart (Comput ((ProgramPart s1),s1,(m + 9)))
by AMI_1:123;
A88:
Comput (
(ProgramPart s1),
s1,
(m + (9 + 1))) =
Comput (
(ProgramPart s1),
s1,
((m + 9) + 1))
.=
Following (
(ProgramPart s1),
(Comput ((ProgramPart s1),s1,(m + 9))))
by EXTPRO_1:4
.=
Exec (
((SBP,2) := (SBP,6)),
(Comput ((ProgramPart s1),s1,(m + 9))))
by A87, T
;
A89:
(Comput ((ProgramPart s1),s1,(m + 9))) . SBP =
(Comput ((ProgramPart s1),s1,(m + 8))) . (DataLoc ((n + 4),RetSP))
by A56, A74, A75, SCMPDS_2:70
.=
(Comput ((ProgramPart s1),s1,(m + 8))) . (intpos ((n + 4) + 0))
by Th5, SCMPDS_1:def 22
.=
n
by A36, A47, A78, SCMPDS_2:66
;
Y:
(ProgramPart (Comput ((ProgramPart s2),s2,(m + 9)))) /. (IC (Comput ((ProgramPart s2),s2,(m + 9)))) = (Comput ((ProgramPart s2),s2,(m + 9))) . (IC (Comput ((ProgramPart s2),s2,(m + 9))))
by COMPOS_1:38;
A90:
IC (Comput ((ProgramPart s2),s2,(m + 9))) =
(abs ((Comput ((ProgramPart s2),s2,(m + 8))) . (DataLoc (((Comput ((ProgramPart s2),s2,(m + 8))) . SBP),RetIC)))) + 2
by A83, SCMPDS_2:70
.=
11
+ 2
by A85, ABSVALUE:46
;
then A91:
CurInstr (
(ProgramPart (Comput ((ProgramPart s2),s2,(m + 9)))),
(Comput ((ProgramPart s2),s2,(m + 9)))) =
s2 . 13
by Y, AMI_1:54
.=
(
SBP,2)
:= (
SBP,6)
by A20, Lm1
;
T:
ProgramPart s2 = ProgramPart (Comput ((ProgramPart s2),s2,(m + 9)))
by AMI_1:123;
A92:
Comput (
(ProgramPart s2),
s2,
(m + (9 + 1))) =
Comput (
(ProgramPart s2),
s2,
((m + 9) + 1))
.=
Following (
(ProgramPart s2),
(Comput ((ProgramPart s2),s2,(m + 9))))
by EXTPRO_1:4
.=
Exec (
((SBP,2) := (SBP,6)),
(Comput ((ProgramPart s2),s2,(m + 9))))
by A91, T
;
A93:
(Comput ((ProgramPart s2),s2,(m + 9))) . SBP =
(Comput ((ProgramPart s2),s2,(m + 8))) . (DataLoc ((n + 4),RetSP))
by A82, A83, SCMPDS_2:70
.=
(Comput ((ProgramPart s2),s2,(m + 8))) . (intpos ((n + 4) + 0))
by Th5, SCMPDS_1:def 22
.=
n
by A42, A49, A84, SCMPDS_2:66
;
A94:
IC (Comput ((ProgramPart s1),s1,(m + 10))) =
succ (IC (Comput ((ProgramPart s1),s1,(m + 9))))
by A88, SCMPDS_2:59
.=
13
+ 1
by A86
;
A95:
IC (Comput ((ProgramPart s2),s2,(m + 10))) =
succ (IC (Comput ((ProgramPart s2),s2,(m + 9))))
by A92, SCMPDS_2:59
.=
13
+ 1
by A90
;
hereby verum
take nn =
m + 10;
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,nn))),(Comput ((ProgramPart s1),s1,nn))) = return SBP & (Comput ((ProgramPart s1),s1,nn)) . SBP = s1 . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,nn))),(Comput ((ProgramPart s2),s2,nn))) = return SBP & (Comput ((ProgramPart s2),s2,nn)) . SBP = s2 . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) ) ) & ( for j being Element of NAT
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) & (Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a ) ) )Y:
(ProgramPart (Comput ((ProgramPart s1),s1,nn))) /. (IC (Comput ((ProgramPart s1),s1,nn))) = (Comput ((ProgramPart s1),s1,nn)) . (IC (Comput ((ProgramPart s1),s1,nn)))
by COMPOS_1:38;
thus CurInstr (
(ProgramPart (Comput ((ProgramPart s1),s1,nn))),
(Comput ((ProgramPart s1),s1,nn))) =
s1 . 14
by A94, Y, AMI_1:54
.=
return SBP
by A19, Lm1
;
( (Comput ((ProgramPart s1),s1,nn)) . SBP = s1 . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,nn))),(Comput ((ProgramPart s2),s2,nn))) = return SBP & (Comput ((ProgramPart s2),s2,nn)) . SBP = s2 . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) ) ) & ( for j being Element of NAT
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) & (Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a ) ) )Y:
(ProgramPart (Comput ((ProgramPart s2),s2,nn))) /. (IC (Comput ((ProgramPart s2),s2,nn))) = (Comput ((ProgramPart s2),s2,nn)) . (IC (Comput ((ProgramPart s2),s2,nn)))
by COMPOS_1:38;
A96:
DataLoc (
((Comput ((ProgramPart s1),s1,(m + 9))) . SBP),2)
= intpos (n + 2)
by A89, Th5;
hence
(Comput ((ProgramPart s1),s1,nn)) . SBP = s1 . SBP
by A88, A89, Lm3, SCMPDS_2:59;
( CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,nn))),(Comput ((ProgramPart s2),s2,nn))) = return SBP & (Comput ((ProgramPart s2),s2,nn)) . SBP = s2 . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) ) ) & ( for j being Element of NAT
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) & (Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a ) ) )thus CurInstr (
(ProgramPart (Comput ((ProgramPart s2),s2,nn))),
(Comput ((ProgramPart s2),s2,nn))) =
s2 . 14
by A95, Y, AMI_1:54
.=
return SBP
by A20, Lm1
;
( (Comput ((ProgramPart s2),s2,nn)) . SBP = s2 . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) ) ) & ( for j being Element of NAT
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) & (Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a ) ) )A97:
DataLoc (
((Comput ((ProgramPart s2),s2,(m + 9))) . SBP),2)
= intpos (n + 2)
by A93, Th5;
hence
(Comput ((ProgramPart s2),s2,nn)) . SBP = s2 . SBP
by A28, A92, A93, Lm3, SCMPDS_2:59;
( ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) ) ) & ( for j being Element of NAT
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) & (Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a ) ) )hereby for j being Element of NAT
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) & (Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a )
let j be
Element of
NAT ;
( 1 < j & j <= (s1 . SBP) + 1 implies ( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) ) )assume that A98:
1
< j
and A99:
j <= (s1 . SBP) + 1
;
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,nn)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j) )
s1 . SBP <= (Comput ((ProgramPart s1),s1,8)) . SBP
by A56, NAT_1:11;
then
(s1 . SBP) + 1
<= ((Comput ((ProgramPart s1),s1,8)) . SBP) + 1
by XREAL_1:8;
then A100:
j <= ((Comput ((ProgramPart s1),s1,8)) . SBP) + 1
by A99, XXREAL_0:2;
A101:
(Comput ((ProgramPart s1),s1,(m + 9))) . (intpos j) =
(Comput ((ProgramPart s1),s1,(m + 8))) . (intpos j)
by A75, A98, AMI_3:52, SCMPDS_2:70
.=
(Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)) . (intpos j)
by T9, EXTPRO_1:5
.=
(Comput ((ProgramPart s1),s1,8)) . (intpos j)
by A72, A98, A100
;
A102:
n + 1
< n + 2
by XREAL_1:8;
T:
ProgramPart s2 = ProgramPart (Comput ((ProgramPart s2),s2,8))
by AMI_1:123;
(Comput ((ProgramPart s1),s1,7)) . (intpos j) = s1 . (intpos j)
by A19, A21, A23, A32, A34, A98, A99, Lm5, NAT_1:5;
hence s1 . (intpos j) =
(Comput ((ProgramPart s1),s1,8)) . (intpos j)
by A36, SCMPDS_2:66
.=
(Comput ((ProgramPart s1),s1,nn)) . (intpos j)
by A88, A96, A99, A101, A102, AMI_3:52, SCMPDS_2:59
;
s2 . (intpos j) = (Comput ((ProgramPart s2),s2,nn)) . (intpos j)A103:
(Comput ((ProgramPart s2),s2,(m + 9))) . (intpos j) =
(Comput ((ProgramPart s2),s2,(m + 8))) . (intpos j)
by A83, A98, AMI_3:52, SCMPDS_2:70
.=
(Comput ((ProgramPart s2),(Comput ((ProgramPart s2),s2,8)),m)) . (intpos j)
by EXTPRO_1:5
.=
(Comput ((ProgramPart s2),s2,8)) . (intpos j)
by A72, A98, A100, T
;
j <= n + 1
by A99;
then
(Comput ((ProgramPart s2),s2,7)) . (intpos j) = s2 . (intpos j)
by A20, A21, A27, A28, A29, A31, A32, A98, Lm5, NAT_1:5;
hence s2 . (intpos j) =
(Comput ((ProgramPart s2),s2,8)) . (intpos j)
by A42, SCMPDS_2:66
.=
(Comput ((ProgramPart s2),s2,nn)) . (intpos j)
by A92, A97, A99, A102, A103, AMI_3:52, SCMPDS_2:59
;
verum
end; hereby verum
let j be
Element of
NAT ;
for a being Int_position st j <= nn & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,b2)) = IC (Comput ((ProgramPart s2),s2,b2)) & (Comput ((ProgramPart s1),s1,b2)) . b3 = (Comput ((ProgramPart s2),s2,b2)) . b3 )let a be
Int_position ;
( j <= nn & s1 . a = s2 . a implies ( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 ) )assume that A104:
j <= nn
and A105:
s1 . a = s2 . a
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )
nn = (m + 9) + 1
;
then A106:
(
j <= m + 9 or
j = nn )
by A104, NAT_1:8;
A107:
m + (8 + 1) = (m + 8) + 1
;
A108:
now assume A109:
j <= m + 8
;
( j <= 7 or ( j >= 8 & j <= m + 8 ) ) end; A110:
(Comput ((ProgramPart s1),s1,8)) . a =
(Comput ((ProgramPart s1),s1,7)) . a
by A36, SCMPDS_2:66
.=
(Comput ((ProgramPart s2),s2,7)) . a
by A19, A20, A21, A23, A27, A28, A29, A30, A31, A33, A34, A105, Lm7
.=
(Comput ((ProgramPart s2),s2,8)) . a
by A42, SCMPDS_2:66
;
A111:
now let b be
Int_position ;
( (Comput ((ProgramPart s1),s1,8)) . b = (Comput ((ProgramPart s2),s2,8)) . b implies (Comput ((ProgramPart s1),s1,(m + 9))) . b1 = (Comput ((ProgramPart s2),s2,(m + 9))) . b1 )assume A112:
(Comput ((ProgramPart s1),s1,8)) . b = (Comput ((ProgramPart s2),s2,8)) . b
;
(Comput ((ProgramPart s1),s1,(m + 9))) . b1 = (Comput ((ProgramPart s2),s2,(m + 9))) . b1per cases
( b = SBP or b <> SBP )
;
suppose A113:
b <> SBP
;
(Comput ((ProgramPart s1),s1,(m + 9))) . b1 = (Comput ((ProgramPart s2),s2,(m + 9))) . b1hence (Comput ((ProgramPart s1),s1,(m + 9))) . b =
(Comput ((ProgramPart s1),s1,(m + 8))) . b
by A75, SCMPDS_2:70
.=
(Comput ((ProgramPart (Comput ((ProgramPart s1),s1,8))),(Comput ((ProgramPart s1),s1,8)),m)) . b
by T9, EXTPRO_1:5
.=
(Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),m)) . b
by A73, A112
.=
(Comput ((ProgramPart s2),s2,(m + 8))) . b
by T8, EXTPRO_1:5
.=
(Comput ((ProgramPart s2),s2,(m + 9))) . b
by A83, A113, SCMPDS_2:70
;
verum end; end; end; A114:
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,(m + 9))) . SBP),6)) =
(Comput ((ProgramPart s1),s1,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,8)) . SBP),2))
by A51, A56, A89, Th5
.=
(Comput ((ProgramPart s2),s2,8)) . (DataLoc (((Comput ((ProgramPart s1),s1,(m + 9))) . SBP),6))
by A51, A56, A67, A89, Th5
;
A115:
now per cases
( a <> DataLoc (((Comput ((ProgramPart s2),s2,(m + 9))) . SBP),2) or a = DataLoc (((Comput ((ProgramPart s2),s2,(m + 9))) . SBP),2) )
;
suppose A116:
a <> DataLoc (
((Comput ((ProgramPart s2),s2,(m + 9))) . SBP),2)
;
(Comput ((ProgramPart s1),s1,nn)) . a = (Comput ((ProgramPart s2),s2,nn)) . ahence (Comput ((ProgramPart s1),s1,nn)) . a =
(Comput ((ProgramPart s1),s1,(m + 9))) . a
by A88, A89, A93, SCMPDS_2:59
.=
(Comput ((ProgramPart s2),s2,(m + 9))) . a
by A110, A111
.=
(Comput ((ProgramPart s2),s2,nn)) . a
by A92, A116, SCMPDS_2:59
;
verum end; suppose A117:
a = DataLoc (
((Comput ((ProgramPart s2),s2,(m + 9))) . SBP),2)
;
(Comput ((ProgramPart s1),s1,nn)) . a = (Comput ((ProgramPart s2),s2,nn)) . ahence (Comput ((ProgramPart s1),s1,nn)) . a =
(Comput ((ProgramPart s1),s1,(m + 9))) . (DataLoc (((Comput ((ProgramPart s1),s1,(m + 9))) . SBP),6))
by A88, A89, A93, SCMPDS_2:59
.=
(Comput ((ProgramPart s2),s2,(m + 9))) . (DataLoc (((Comput ((ProgramPart s2),s2,(m + 9))) . SBP),6))
by A89, A93, A111, A114
.=
(Comput ((ProgramPart s2),s2,nn)) . a
by A92, A117, SCMPDS_2:59
;
verum end; end; end; per cases
( j <= 7 or ( j >= 8 & j <= m + 8 ) or j = m + 9 or j = nn )
by A106, A107, A108, NAT_1:8;
suppose
j <= 7
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )hence
(
IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j)) &
(Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a )
by A19, A20, A21, A23, A27, A28, A29, A30, A31, A33, A34, A105, Lm7;
verum end; suppose A118:
(
j >= 8 &
j <= m + 8 )
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )then consider j1 being
Nat such that A119:
j = 8
+ j1
by NAT_1:10;
reconsider j1 =
j1 as
Element of
NAT by ORDINAL1:def 13;
T:
ProgramPart s1 = ProgramPart (Comput ((ProgramPart s1),s1,8))
by AMI_1:123;
S:
ProgramPart s2 = ProgramPart (Comput ((ProgramPart s2),s2,8))
by AMI_1:123;
A120:
j1 <= m
by A118, A119, XREAL_1:8;
thus IC (Comput ((ProgramPart s1),s1,j)) =
IC (Comput ((ProgramPart s1),(Comput ((ProgramPart s1),s1,8)),j1))
by A119, EXTPRO_1:5
.=
IC (Comput ((ProgramPart s2),(Comput ((ProgramPart s2),s2,8)),j1))
by A73, A110, A120, T, S
.=
IC (Comput ((ProgramPart s2),s2,j))
by A119, EXTPRO_1:5
;
(Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . athus (Comput ((ProgramPart s1),s1,j)) . a =
(Comput ((ProgramPart s1),(Comput ((ProgramPart s1),s1,8)),j1)) . a
by A119, EXTPRO_1:5
.=
(Comput ((ProgramPart (Comput ((ProgramPart s2),s2,8))),(Comput ((ProgramPart s2),s2,8)),j1)) . a
by A73, A110, A120, T
.=
(Comput ((ProgramPart s2),s2,j)) . a
by A119, S, EXTPRO_1:5
;
verum end; suppose A121:
j = m + 9
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )hence
IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j))
by A86, A90;
(Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . athus
(Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a
by A110, A111, A121;
verum end; suppose A122:
j = nn
;
( IC (Comput ((ProgramPart s1),s1,b1)) = IC (Comput ((ProgramPart s2),s2,b1)) & (Comput ((ProgramPart s1),s1,b1)) . b2 = (Comput ((ProgramPart s2),s2,b1)) . b2 )hence
IC (Comput ((ProgramPart s1),s1,j)) = IC (Comput ((ProgramPart s2),s2,j))
by A94, A95;
(Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . athus
(Comput ((ProgramPart s1),s1,j)) . a = (Comput ((ProgramPart s2),s2,j)) . a
by A115, A122;
verum end; end;
end;
end; end; end; end; hence
S1[
k + 1]
;
verum end;
A123:
for n being Element of NAT holds S1[n]
from NAT_1:sch 1(A1, A17);
let s1, s2 be State of SCMPDS; ( GCD-Algorithm c= s1 & GCD-Algorithm c= s2 & IC s1 = 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)) implies ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) ) )
assume that
A124:
GCD-Algorithm c= s1
and
A125:
GCD-Algorithm c= s2
and
A126:
IC s1 = 5
and
A127:
s1 . SBP > 0
and
A128:
s1 . GBP = 0
and
A129:
s1 . (DataLoc ((s1 . SBP),3)) >= 0
and
A130:
s1 . (DataLoc ((s1 . SBP),2)) >= s1 . (DataLoc ((s1 . SBP),3))
and
A131:
IC s2 = IC s1
and
A132:
s2 . SBP = s1 . SBP
and
A133:
s2 . GBP = 0
and
A134:
s2 . (DataLoc ((s1 . SBP),2)) = s1 . (DataLoc ((s1 . SBP),2))
and
A135:
s2 . (DataLoc ((s1 . SBP),3)) = s1 . (DataLoc ((s1 . SBP),3))
; ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
reconsider m = s1 . (DataLoc ((s1 . SBP),3)) as Element of NAT by A129, INT_1:16;
S1[m]
by A123;
hence
ex n being Element of NAT st
( CurInstr ((ProgramPart (Comput ((ProgramPart s1),s1,n))),(Comput ((ProgramPart s1),s1,n))) = return SBP & s1 . SBP = (Comput ((ProgramPart s1),s1,n)) . SBP & CurInstr ((ProgramPart (Comput ((ProgramPart s2),s2,n))),(Comput ((ProgramPart s2),s2,n))) = return SBP & s2 . SBP = (Comput ((ProgramPart s2),s2,n)) . SBP & ( for j being Element of NAT st 1 < j & j <= (s1 . SBP) + 1 holds
( s1 . (intpos j) = (Comput ((ProgramPart s1),s1,n)) . (intpos j) & s2 . (intpos j) = (Comput ((ProgramPart s2),s2,n)) . (intpos j) ) ) & ( for k being Element of NAT
for a being Int_position st k <= n & s1 . a = s2 . a holds
( IC (Comput ((ProgramPart s1),s1,k)) = IC (Comput ((ProgramPart s2),s2,k)) & (Comput ((ProgramPart s1),s1,k)) . a = (Comput ((ProgramPart s2),s2,k)) . a ) ) )
by A124, A125, A126, A127, A128, A129, A130, A131, A132, A133, A134, A135; verum