let k be Element of NAT ; :: thesis: for p being autonomic FinPartState of SCM+FSA
for s1, s2 being State of SCM+FSA st IC SCM+FSA in dom p & p c= s1 & Relocated p,k c= s2 holds
for i being Element of NAT holds
( (IC (Comput (ProgramPart s1),s1,i)) + k = IC (Comput (ProgramPart s2),s2,i) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) & (Comput (ProgramPart s1),s1,i) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,i) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) = DataPart (Comput (ProgramPart s2),s2,i) )

let p be autonomic FinPartState of SCM+FSA ; :: thesis: for s1, s2 being State of SCM+FSA st IC SCM+FSA in dom p & p c= s1 & Relocated p,k c= s2 holds
for i being Element of NAT holds
( (IC (Comput (ProgramPart s1),s1,i)) + k = IC (Comput (ProgramPart s2),s2,i) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) & (Comput (ProgramPart s1),s1,i) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,i) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) = DataPart (Comput (ProgramPart s2),s2,i) )

let s1, s2 be State of SCM+FSA ; :: thesis: ( IC SCM+FSA in dom p & p c= s1 & Relocated p,k c= s2 implies for i being Element of NAT holds
( (IC (Comput (ProgramPart s1),s1,i)) + k = IC (Comput (ProgramPart s2),s2,i) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) & (Comput (ProgramPart s1),s1,i) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,i) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) = DataPart (Comput (ProgramPart s2),s2,i) ) )

assume that
A1: IC SCM+FSA in dom p and
A2: p c= s1 and
A3: Relocated p,k c= s2 ; :: thesis: for i being Element of NAT holds
( (IC (Comput (ProgramPart s1),s1,i)) + k = IC (Comput (ProgramPart s2),s2,i) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) & (Comput (ProgramPart s1),s1,i) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,i) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) = DataPart (Comput (ProgramPart s2),s2,i) )

set s3 = s1 +* (DataPart s2);
defpred S1[ Nat] means ( (IC (Comput (ProgramPart s1),s1,$1)) + k = IC (Comput (ProgramPart s2),s2,$1) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,$1)),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,$1) & (Comput (ProgramPart s1),s1,$1) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,$1) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),$1) = DataPart (Comput (ProgramPart s2),s2,$1) );
A4: not p is NAT -defined by A1, COMPOS_1:19;
A5: p c= s1 +* (DataPart s2) by A2, A3, Th10;
A6: for i being Element of NAT st S1[i] holds
S1[i + 1]
proof
set DPp = DataPart p;
let i be Element of NAT ; :: thesis: ( S1[i] implies S1[i + 1] )
assume that
A7: (IC (Comput (ProgramPart s1),s1,i)) + k = IC (Comput (ProgramPart s2),s2,i) and
A8: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) and
A9: (Comput (ProgramPart s1),s1,i) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,i) | (dom (DataPart (Relocated p,k))) and
A10: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) = DataPart (Comput (ProgramPart s2),s2,i) ; :: thesis: S1[i + 1]
set Cs1i1 = Comput (ProgramPart s1),s1,(i + 1);
set Cs1i = Comput (ProgramPart s1),s1,i;
TY: ProgramPart s2 = ProgramPart (Comput (ProgramPart s2),s2,(i + 1)) by AMI_1:123;
A11: dom (Comput (ProgramPart s1),s1,(i + 1)) = ((Int-Locations \/ FinSeq-Locations ) \/ {(IC SCM+FSA )}) \/ NAT by PARTFUN1:def 4, SCMFSA_2:8;
set Cs3i = Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i;
set Cs2i = Comput (ProgramPart s2),s2,i;
A12: dom (Comput (ProgramPart s1),s1,i) = ((Int-Locations \/ FinSeq-Locations ) \/ {(IC SCM+FSA )}) \/ NAT by PARTFUN1:def 4, SCMFSA_2:8;
set Cs2i1 = Comput (ProgramPart s2),s2,(i + 1);
A13: dom (Comput (ProgramPart s2),s2,(i + 1)) = ((Int-Locations \/ FinSeq-Locations ) \/ {(IC SCM+FSA )}) \/ NAT by PARTFUN1:def 4, SCMFSA_2:8;
A14: dom (Comput (ProgramPart s2),s2,i) = ((Int-Locations \/ FinSeq-Locations ) \/ {(IC SCM+FSA )}) \/ NAT by PARTFUN1:def 4, SCMFSA_2:8;
set I = CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i);
A15: Comput (ProgramPart s2),s2,(i + 1) = Following (ProgramPart s2),(Comput (ProgramPart s2),s2,i) by AMI_1:14
.= Exec (CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i)),(Comput (ProgramPart s2),s2,i) ;
A16: now end;
A17: now
let d be FinSeq-Location ; :: thesis: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d = (Comput (ProgramPart s2),s2,i) . d
A18: d in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i)) by A16;
hence (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d = (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i)) . d by FUNCT_1:70
.= (Comput (ProgramPart s2),s2,i) . d by A10, A18, FUNCT_1:70 ;
:: thesis: verum
end;
set Cs3i1 = Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1);
A19: dom (DataPart (Comput (ProgramPart s2),s2,i)) = Int-Locations \/ FinSeq-Locations by COMPOS_1:50, SCMFSA_2:127;
A20: dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) = Int-Locations \/ FinSeq-Locations by COMPOS_1:50, SCMFSA_2:127;
A21: now
reconsider loc = IC (Comput (ProgramPart s1),s1,(i + 1)) as Element of NAT ;
assume A22: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) ; :: thesis: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1))
reconsider ii = loc as Element of NAT ;
A23: ii in dom (ProgramPart p) by A2, A4, SCMFSA_3:17;
ProgramPart p c= p by RELAT_1:88;
then A24: dom (ProgramPart p) c= dom p by GRFUNC_1:8;
then loc + k in dom (Relocated p,k) by A23, AMISTD_2:71;
then A25: (Relocated p,k) . (loc + k) = s2 . (loc + k) by A3, GRFUNC_1:8
.= (Comput (ProgramPart s2),s2,(i + 1)) . (loc + k) by AMI_1:54 ;
Z: (ProgramPart s2) /. (IC (Comput (ProgramPart s2),s2,(i + 1))) = (Comput (ProgramPart s2),s2,(i + 1)) . (IC (Comput (ProgramPart s2),s2,(i + 1))) by TY, COMPOS_1:38;
CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1)) = s1 . loc by COMPOS_1:38
.= p . ii by A2, A23, A24, GRFUNC_1:8 ;
hence IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A22, A23, A25, Z, AMISTD_2:76; :: thesis: verum
end;
A26: now end;
A27: now
let d be Int-Location ; :: thesis: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d = (Comput (ProgramPart s2),s2,i) . d
A28: d in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i)) by A26;
hence (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d = (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i)) . d by FUNCT_1:70
.= (Comput (ProgramPart s2),s2,i) . d by A10, A28, FUNCT_1:70 ;
:: thesis: verum
end;
dom (DataPart p) = (dom p) /\ (Int-Locations \/ FinSeq-Locations ) by RELAT_1:90, SCMFSA_2:127;
then A29: dom (DataPart p) c= {(IC SCM+FSA )} \/ (Int-Locations \/ FinSeq-Locations ) by XBOOLE_1:10, XBOOLE_1:17;
A30: ( not InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) <= 9 + 1 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) <= 8 + 1 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 10 ) by NAT_1:8;
A31: ( not InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) <= 10 + 1 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) <= 10 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 11 ) by NAT_1:8;
A32: InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) <= 11 + 1 by SCMFSA_2:35;
A33: dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) = (dom (Comput (ProgramPart s1),s1,(i + 1))) /\ (dom (DataPart p)) by RELAT_1:90
.= dom (DataPart p) by A11, A29, XBOOLE_1:10, XBOOLE_1:28 ;
A34: dom (DataPart (Comput (ProgramPart s2),s2,(i + 1))) = Int-Locations \/ FinSeq-Locations by COMPOS_1:50, SCMFSA_2:127;
A35: now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) | (Int-Locations \/ FinSeq-Locations )) & (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x )
assume that
A36: x in dom ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) | (Int-Locations \/ FinSeq-Locations )) and
A37: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x
thus (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x by A36, A37, FUNCT_1:70, SCMFSA_2:127
.= (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A20, A34, A36, FUNCT_1:70, SCMFSA_2:127 ; :: thesis: verum
end;
A38: dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i)) = Int-Locations \/ FinSeq-Locations by COMPOS_1:50, SCMFSA_2:127;
A39: now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) & (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . x & (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x )
assume that
A40: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) and
A41: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . x and
A42: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x
(DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i)) . x = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . x by A38, A20, A40, FUNCT_1:70;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A10, A19, A20, A35, A40, A41, A42, FUNCT_1:70, SCMFSA_2:127; :: thesis: verum
end;
A43: Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1) = Following (ProgramPart (s1 +* (DataPart s2))),(Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) by AMI_1:14
.= Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) by A2, A4, A5, SCMFSA_3:18 ;
A44: dom (DataPart p) = dom (DataPart (Relocated p,k)) by AMISTD_2:68;
then A45: dom ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k)))) = (dom (Comput (ProgramPart s2),s2,(i + 1))) /\ (dom (DataPart p)) by RELAT_1:90
.= dom (DataPart p) by A13, A29, XBOOLE_1:10, XBOOLE_1:28 ;
A46: now
let x, d be set ; :: thesis: ( d = x & d in dom (DataPart p) & (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s2),s2,(i + 1)) . d implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x )
assume that
A47: d = x and
A48: d in dom (DataPart p) and
A49: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s2),s2,(i + 1)) . d ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x
thus ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = (Comput (ProgramPart s2),s2,(i + 1)) . d by A33, A47, A48, A49, FUNCT_1:70
.= ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A44, A45, A47, A48, FUNCT_1:70 ; :: thesis: verum
end;
A50: dom ((Comput (ProgramPart s1),s1,i) | (dom (DataPart p))) = (dom (Comput (ProgramPart s1),s1,i)) /\ (dom (DataPart p)) by RELAT_1:90
.= dom (DataPart p) by A12, A29, XBOOLE_1:10, XBOOLE_1:28 ;
reconsider j = IC (Comput (ProgramPart s1),s1,i) as Element of NAT ;
A51: Comput (ProgramPart s1),s1,(i + 1) = Following (ProgramPart s1),(Comput (ProgramPart s1),s1,i) by AMI_1:14
.= Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i) ;
A52: dom ((Comput (ProgramPart s2),s2,i) | (dom (DataPart (Relocated p,k)))) = (dom (Comput (ProgramPart s2),s2,i)) /\ (dom (DataPart p)) by A44, RELAT_1:90
.= dom (DataPart p) by A14, A29, XBOOLE_1:10, XBOOLE_1:28 ;
A53: now
let x, d be set ; :: thesis: ( d = x & d in dom (DataPart p) & (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d & (Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x )
assume that
A54: d = x and
A55: d in dom (DataPart p) and
A56: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d and
A57: (Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x
A58: ((Comput (ProgramPart s1),s1,i) | (dom (DataPart p))) . d = (Comput (ProgramPart s1),s1,i) . d by A50, A55, FUNCT_1:70;
((Comput (ProgramPart s2),s2,i) | (dom (DataPart p))) . d = (Comput (ProgramPart s2),s2,i) . d by A44, A52, A55, FUNCT_1:70;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = (Comput (ProgramPart s2),s2,(i + 1)) . d by A9, A44, A33, A54, A55, A56, A57, A58, FUNCT_1:70
.= ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A44, A45, A54, A55, FUNCT_1:70 ;
:: thesis: verum
end;
A59: succ ((IC (Comput (ProgramPart s1),s1,i)) + k) = (j + k) + 1 by NAT_1:39
.= (j + 1) + k
.= (succ (IC (Comput (ProgramPart s1),s1,i))) + k by NAT_1:39 ;
per cases ( InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 0 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 1 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 2 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 3 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 4 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 5 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 6 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 7 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 8 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 9 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 10 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 11 or InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 12 ) by A32, A31, A30, NAT_1:8, NAT_1:33;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 0 ; :: thesis: S1[i + 1]
then A60: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = halt SCM+FSA by SCMFSA_2:122;
thus (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = (IC (Comput (ProgramPart s1),s1,i)) + k by A51, A60, AMI_1:def 8
.= IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A15, A60, A8, AMI_1:def 8 ; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
hence IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A21; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A62: Comput (ProgramPart s2),s2,(i + 1) = Comput (ProgramPart s2),s2,i by A15, A60, A8, AMI_1:def 8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A9, A51, A60, AMI_1:def 8; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
thus DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A10, A43, A60, A62, AMI_1:def 8; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 1 ; :: thesis: S1[i + 1]
then consider da, db being Int-Location such that
A63: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = da := db by SCMFSA_2:54;
A64: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = da := db by A63, SCMFSA_4:9;
A65: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A63, SCMFSA_2:89;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A64, SCMFSA_2:89; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A64, A65, SCMFSA_2:89; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A66: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
A67: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
assume A68: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A68, A67, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A69: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A63, SCMFSA_2:89;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A64, SCMFSA_2:89;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A68, A69; :: thesis: verum
end;
suppose A70: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then dom (DataPart p) c= dom p by GRFUNC_1:8;
then A71: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s1),s1,i) . db by A2, A4, A5, A33, A63, A68, A70, SCMFSA_3:19;
A72: (Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s1),s1,i) . db by A51, A63, A70, SCMFSA_2:89;
(Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . db by A8, A15, A64, A70, SCMFSA_2:89;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A66, A68, A72, A71; :: thesis: verum
end;
suppose A73: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A74: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A63, A73, SCMFSA_2:89;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A64, A73, SCMFSA_2:89;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A68, A74; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A75: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A75, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider f = x as FinSeq-Location by SCMFSA_2:12;
A76: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . f = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f by A43, A63, SCMFSA_2:89;
(Comput (ProgramPart s2),s2,(i + 1)) . f = (Comput (ProgramPart s2),s2,i) . f by A8, A15, A64, SCMFSA_2:89;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A75, A76; :: thesis: verum
end;
suppose A77: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
A78: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . da = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db by A43, A63, SCMFSA_2:89;
(Comput (ProgramPart s2),s2,(i + 1)) . da = (Comput (ProgramPart s2),s2,i) . db by A8, A15, A64, SCMFSA_2:89;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A27, A35, A75, A77, A78, SCMFSA_2:127; :: thesis: verum
end;
suppose A79: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A80: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A63, A79, SCMFSA_2:89;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A64, A79, SCMFSA_2:89;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A75, A80; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 2 ; :: thesis: S1[i + 1]
then consider da, db being Int-Location such that
A81: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = AddTo da,db by SCMFSA_2:55;
A82: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
A83: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = AddTo da,db by A81, SCMFSA_4:10;
A84: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A81, SCMFSA_2:90;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A83, SCMFSA_2:90; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A83, A84, SCMFSA_2:90; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A85: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
now
A86: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
assume A87: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A87, A86, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A88: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A81, SCMFSA_2:90;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A83, SCMFSA_2:90;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A87, A88; :: thesis: verum
end;
suppose A89: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then A90: dom (DataPart p) c= dom p by GRFUNC_1:8;
A91: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . da) + ((Comput (ProgramPart s1),s1,i) . db) by A51, A81, A89, SCMFSA_2:90;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) + ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A83, A89, SCMFSA_2:90;
then (Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x by A2, A4, A5, A33, A81, A85, A82, A87, A89, A91, A90, SCMFSA_3:20;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A87; :: thesis: verum
end;
suppose A92: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A93: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A81, A92, SCMFSA_2:90;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A83, A92, SCMFSA_2:90;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A87, A93; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A94: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A94, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A95: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A81, SCMFSA_2:90;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A83, SCMFSA_2:90;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A94, A95; :: thesis: verum
end;
suppose A96: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A97: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) + ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) by A43, A81, SCMFSA_2:90;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) + ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A83, A96, SCMFSA_2:90;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A85, A82, A94, A97, SCMFSA_2:127; :: thesis: verum
end;
suppose A98: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A99: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A81, A98, SCMFSA_2:90;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A83, A98, SCMFSA_2:90;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A94, A99; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 3 ; :: thesis: S1[i + 1]
then consider da, db being Int-Location such that
A100: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = SubFrom da,db by SCMFSA_2:56;
A101: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
A102: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = SubFrom da,db by A100, SCMFSA_4:11;
A103: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A100, SCMFSA_2:91;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A102, SCMFSA_2:91; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A102, A103, SCMFSA_2:91; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A104: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
now
A105: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
assume A106: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A106, A105, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A107: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A100, SCMFSA_2:91;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A102, SCMFSA_2:91;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A106, A107; :: thesis: verum
end;
suppose A108: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then A109: dom (DataPart p) c= dom p by GRFUNC_1:8;
A110: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . da) - ((Comput (ProgramPart s1),s1,i) . db) by A51, A100, A108, SCMFSA_2:91;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) - ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A102, A108, SCMFSA_2:91;
then ((Comput (ProgramPart s1),s1,i) . da) - ((Comput (ProgramPart s1),s1,i) . db) = (Comput (ProgramPart s2),s2,(i + 1)) . x by A2, A4, A5, A33, A100, A104, A101, A106, A108, A109, SCMFSA_3:21;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A106, A110; :: thesis: verum
end;
suppose A111: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A112: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A100, A111, SCMFSA_2:91;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A102, A111, SCMFSA_2:91;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A106, A112; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A113: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A113, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A114: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A100, SCMFSA_2:91;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A102, SCMFSA_2:91;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A113, A114; :: thesis: verum
end;
suppose A115: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A116: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) - ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) by A43, A100, SCMFSA_2:91;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) - ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A102, A115, SCMFSA_2:91;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A104, A101, A113, A116, SCMFSA_2:127; :: thesis: verum
end;
suppose A117: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A118: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A100, A117, SCMFSA_2:91;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A102, A117, SCMFSA_2:91;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A113, A118; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 4 ; :: thesis: S1[i + 1]
then consider da, db being Int-Location such that
A119: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = MultBy da,db by SCMFSA_2:57;
A120: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
A121: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = MultBy da,db by A119, SCMFSA_4:12;
A122: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A119, SCMFSA_2:92;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A121, SCMFSA_2:92; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A121, A122, SCMFSA_2:92; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A123: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
now
A124: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
assume A125: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A125, A124, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A126: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A119, SCMFSA_2:92;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A121, SCMFSA_2:92;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A125, A126; :: thesis: verum
end;
suppose A127: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then A128: dom (DataPart p) c= dom p by GRFUNC_1:8;
A129: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . da) * ((Comput (ProgramPart s1),s1,i) . db) by A51, A119, A127, SCMFSA_2:92;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) * ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A121, A127, SCMFSA_2:92;
then (Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x by A2, A4, A5, A33, A119, A123, A120, A125, A127, A129, A128, SCMFSA_3:22;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A125; :: thesis: verum
end;
suppose A130: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A131: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A119, A130, SCMFSA_2:92;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A121, A130, SCMFSA_2:92;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A125, A131; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A132: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A132, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A133: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A119, SCMFSA_2:92;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A121, SCMFSA_2:92;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A132, A133; :: thesis: verum
end;
suppose A134: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A135: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) * ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) by A43, A119, SCMFSA_2:92;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) * ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A121, A134, SCMFSA_2:92;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A123, A120, A132, A135, SCMFSA_2:127; :: thesis: verum
end;
suppose A136: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A137: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A119, A136, SCMFSA_2:92;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A121, A136, SCMFSA_2:92;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A132, A137; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 5 ; :: thesis: S1[i + 1]
then consider da, db being Int-Location such that
A138: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = Divide da,db by SCMFSA_2:58;
A139: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
A140: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = Divide da,db by A138, SCMFSA_4:13;
A141: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
now
per cases ( da <> db or da = db ) ;
suppose A142: da <> db ; :: thesis: ( (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A143: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A138, SCMFSA_2:93;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A140, SCMFSA_2:93; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A140, A143, SCMFSA_2:93; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
now
A144: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
assume A145: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( ( db <> x & x in FinSeq-Locations ) or da = x or db = x or ( da <> x & db <> x & x in Int-Locations ) ) by A33, A145, A144, XBOOLE_0:def 3;
suppose ( db <> x & x in FinSeq-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A146: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A138, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, SCMFSA_2:93;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A145, A146; :: thesis: verum
end;
suppose A147: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then dom (DataPart p) c= dom p by GRFUNC_1:8;
then A148: ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) div ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) = ((Comput (ProgramPart s1),s1,i) . da) div ((Comput (ProgramPart s1),s1,i) . db) by A2, A4, A5, A33, A138, A142, A145, A147, SCMFSA_3:23;
A149: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . da) div ((Comput (ProgramPart s1),s1,i) . db) by A51, A138, A142, A147, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) div ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A140, A142, A147, SCMFSA_2:93;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x by A141, A139, A145, A149, A148, FUNCT_1:70
.= ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A44, A33, A45, A145, FUNCT_1:70 ;
:: thesis: verum
end;
suppose A150: db = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then A151: dom (DataPart p) c= dom p by GRFUNC_1:8;
A152: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . da) mod ((Comput (ProgramPart s1),s1,i) . db) by A51, A138, A150, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) mod ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A140, A150, SCMFSA_2:93;
then (Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x by A2, A4, A5, A33, A138, A141, A139, A145, A150, A152, A151, SCMFSA_3:24;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A145; :: thesis: verum
end;
suppose A153: ( da <> x & db <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A154: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A138, A153, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, A153, SCMFSA_2:93;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A145, A154; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A155: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or db = x or ( da <> x & db <> x & x in Int-Locations ) ) by A20, A155, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A156: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A138, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, SCMFSA_2:93;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A155, A156; :: thesis: verum
end;
suppose A157: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A158: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) div ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) by A43, A138, A142, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) div ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A140, A142, A157, SCMFSA_2:93;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A141, A139, A155, A158, SCMFSA_2:127; :: thesis: verum
end;
suppose A159: db = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A160: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) mod ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) by A43, A138, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) mod ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A140, A159, SCMFSA_2:93;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A141, A139, A155, A160, SCMFSA_2:127; :: thesis: verum
end;
suppose A161: ( da <> x & db <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A162: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A138, A161, SCMFSA_2:93;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, A161, SCMFSA_2:93;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A155, A162; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose A163: da = db ; :: thesis: ( (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) & IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
then A164: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A138, SCMFSA_2:94;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A140, A163, SCMFSA_2:94; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A140, A163, A164, SCMFSA_2:94; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
now
A165: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
assume A166: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A166, A165, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A167: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A138, A163, SCMFSA_2:94;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, A163, SCMFSA_2:94;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A166, A167; :: thesis: verum
end;
suppose A168: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
A169: ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x = (Comput (ProgramPart s2),s2,(i + 1)) . x by A44, A33, A45, A166, FUNCT_1:70;
A170: ((Comput (ProgramPart s1),s1,i) | (dom (DataPart p))) . x = (Comput (ProgramPart s1),s1,i) . x by A33, A50, A166, FUNCT_1:70;
A171: ((Comput (ProgramPart s2),s2,i) | (dom (DataPart p))) . x = (Comput (ProgramPart s2),s2,i) . x by A44, A33, A52, A166, FUNCT_1:70;
A172: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = (Comput (ProgramPart s1),s1,(i + 1)) . x by A166, FUNCT_1:70;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) mod ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A140, A163, A168, SCMFSA_2:94;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A9, A44, A51, A138, A163, A168, A170, A171, A172, A169, SCMFSA_2:94; :: thesis: verum
end;
suppose A173: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A174: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A138, A163, A173, SCMFSA_2:94;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, A163, A173, SCMFSA_2:94;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A166, A174; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A175: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A175, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A176: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A138, A163, SCMFSA_2:94;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, A163, SCMFSA_2:94;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A175, A176; :: thesis: verum
end;
suppose A177: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A178: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) mod ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) by A43, A138, A163, SCMFSA_2:94;
(Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . da) mod ((Comput (ProgramPart s2),s2,i) . db) by A8, A15, A140, A163, A177, SCMFSA_2:94;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A141, A139, A175, A178, SCMFSA_2:127; :: thesis: verum
end;
suppose A179: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A180: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A138, A163, A179, SCMFSA_2:94;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A140, A163, A179, SCMFSA_2:94;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A175, A180; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
end;
end;
hence S1[i + 1] ; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 6 ; :: thesis: S1[i + 1]
then consider loc being Element of NAT such that
A181: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = goto loc by SCMFSA_2:59;
A182: CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) = goto (loc + k) by A8, A181, SCMFSA_4:14;
thus (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = loc + k by A51, A181, SCMFSA_2:95
.= IC (Comput (ProgramPart s2),s2,(i + 1)) by A15, A182, SCMFSA_2:95 ; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
hence IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A21; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x )
assume A183: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x
dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
then ( x in Int-Locations or x in FinSeq-Locations ) by A33, A183, XBOOLE_0:def 3;
then A184: ( x is Int-Location or x is FinSeq-Location ) by SCMFSA_2:11, SCMFSA_2:12;
then A185: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x by A15, A182, SCMFSA_2:95;
(Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s1),s1,i) . x by A51, A181, A184, SCMFSA_2:95;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A183, A185; :: thesis: verum
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x )
assume A186: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x
then ( x in Int-Locations or x in FinSeq-Locations ) by A20, XBOOLE_0:def 3;
then A187: ( x is Int-Location or x is FinSeq-Location ) by SCMFSA_2:11, SCMFSA_2:12;
then A188: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x by A15, A182, SCMFSA_2:95;
(Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . x by A43, A181, A187, SCMFSA_2:95;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A186, A188; :: thesis: verum
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 7 ; :: thesis: S1[i + 1]
then consider loc being Element of NAT , da being Int-Location such that
A189: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = da =0_goto loc by SCMFSA_2:60;
A190: now
per cases ( (Comput (ProgramPart s1),s1,i) . da = 0 or (Comput (ProgramPart s1),s1,i) . da <> 0 ) ;
case (Comput (ProgramPart s1),s1,i) . da = 0 ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = loc + k
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = loc + k by A51, A189, SCMFSA_2:96; :: thesis: verum
end;
case (Comput (ProgramPart s1),s1,i) . da <> 0 ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = succ (IC (Comput (ProgramPart s2),s2,i))
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = succ (IC (Comput (ProgramPart s2),s2,i)) by A7, A51, A59, A189, SCMFSA_2:96; :: thesis: verum
end;
end;
end;
A191: CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) = da =0_goto (loc + k) by A8, A189, SCMFSA_4:15;
A192: now
per cases ( (Comput (ProgramPart s2),s2,i) . da = 0 or (Comput (ProgramPart s2),s2,i) . da <> 0 ) ;
case (Comput (ProgramPart s2),s2,i) . da = 0 ; :: thesis: IC (Comput (ProgramPart s2),s2,(i + 1)) = loc + k
hence IC (Comput (ProgramPart s2),s2,(i + 1)) = loc + k by A15, A191, SCMFSA_2:96; :: thesis: verum
end;
case (Comput (ProgramPart s2),s2,i) . da <> 0 ; :: thesis: IC (Comput (ProgramPart s2),s2,(i + 1)) = succ (IC (Comput (ProgramPart s2),s2,i))
hence IC (Comput (ProgramPart s2),s2,(i + 1)) = succ (IC (Comput (ProgramPart s2),s2,i)) by A15, A191, SCMFSA_2:96; :: thesis: verum
end;
end;
end;
A193: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
A194: now
per cases ( loc <> succ (IC (Comput (ProgramPart s1),s1,i)) or loc = succ (IC (Comput (ProgramPart s1),s1,i)) ) ;
suppose loc <> succ (IC (Comput (ProgramPart s1),s1,i)) ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1))
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A2, A4, A5, A189, A193, A190, A192, SCMFSA_3:25; :: thesis: verum
end;
suppose loc = succ (IC (Comput (ProgramPart s1),s1,i)) ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1))
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A59, A190, A192; :: thesis: verum
end;
end;
end;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) ; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A21, A194; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x )
assume A195: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x
dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
then ( x in Int-Locations or x in FinSeq-Locations ) by A33, A195, XBOOLE_0:def 3;
then A196: ( x is Int-Location or x is FinSeq-Location ) by SCMFSA_2:11, SCMFSA_2:12;
then A197: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x by A15, A191, SCMFSA_2:96;
(Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s1),s1,i) . x by A51, A189, A196, SCMFSA_2:96;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A195, A197; :: thesis: verum
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x )
assume A198: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x
then ( x in Int-Locations or x in FinSeq-Locations ) by A20, XBOOLE_0:def 3;
then A199: ( x is Int-Location or x is FinSeq-Location ) by SCMFSA_2:11, SCMFSA_2:12;
then A200: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x by A15, A191, SCMFSA_2:96;
(Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . x by A43, A189, A199, SCMFSA_2:96;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A198, A200; :: thesis: verum
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 8 ; :: thesis: S1[i + 1]
then consider loc being Element of NAT , da being Int-Location such that
A201: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = da >0_goto loc by SCMFSA_2:61;
A202: now
per cases ( (Comput (ProgramPart s1),s1,i) . da > 0 or (Comput (ProgramPart s1),s1,i) . da <= 0 ) ;
case (Comput (ProgramPart s1),s1,i) . da > 0 ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = loc + k
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = loc + k by A51, A201, SCMFSA_2:97; :: thesis: verum
end;
case (Comput (ProgramPart s1),s1,i) . da <= 0 ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = succ (IC (Comput (ProgramPart s2),s2,i))
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = succ (IC (Comput (ProgramPart s2),s2,i)) by A7, A51, A59, A201, SCMFSA_2:97; :: thesis: verum
end;
end;
end;
A203: CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,i) = da >0_goto (loc + k) by A8, A201, SCMFSA_4:16;
A204: now
per cases ( (Comput (ProgramPart s2),s2,i) . da > 0 or (Comput (ProgramPart s2),s2,i) . da <= 0 ) ;
case (Comput (ProgramPart s2),s2,i) . da > 0 ; :: thesis: IC (Comput (ProgramPart s2),s2,(i + 1)) = loc + k
hence IC (Comput (ProgramPart s2),s2,(i + 1)) = loc + k by A15, A203, SCMFSA_2:97; :: thesis: verum
end;
case (Comput (ProgramPart s2),s2,i) . da <= 0 ; :: thesis: IC (Comput (ProgramPart s2),s2,(i + 1)) = succ (IC (Comput (ProgramPart s2),s2,i))
hence IC (Comput (ProgramPart s2),s2,(i + 1)) = succ (IC (Comput (ProgramPart s2),s2,i)) by A15, A203, SCMFSA_2:97; :: thesis: verum
end;
end;
end;
A205: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
A206: now
per cases ( loc <> succ (IC (Comput (ProgramPart s1),s1,i)) or loc = succ (IC (Comput (ProgramPart s1),s1,i)) ) ;
suppose loc <> succ (IC (Comput (ProgramPart s1),s1,i)) ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1))
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A2, A4, A5, A201, A205, A202, A204, SCMFSA_3:26; :: thesis: verum
end;
suppose loc = succ (IC (Comput (ProgramPart s1),s1,i)) ; :: thesis: (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1))
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A59, A202, A204; :: thesis: verum
end;
end;
end;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) ; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A21, A206; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x )
assume A207: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x
dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
then ( x in Int-Locations or x in FinSeq-Locations ) by A33, A207, XBOOLE_0:def 3;
then A208: ( x is Int-Location or x is FinSeq-Location ) by SCMFSA_2:11, SCMFSA_2:12;
then A209: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x by A15, A203, SCMFSA_2:97;
(Comput (ProgramPart s1),s1,(i + 1)) . x = (Comput (ProgramPart s1),s1,i) . x by A51, A201, A208, SCMFSA_2:97;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A207, A209; :: thesis: verum
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x )
assume A210: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x
then ( x in Int-Locations or x in FinSeq-Locations ) by A20, XBOOLE_0:def 3;
then A211: ( x is Int-Location or x is FinSeq-Location ) by SCMFSA_2:11, SCMFSA_2:12;
then A212: (Comput (ProgramPart s2),s2,(i + 1)) . x = (Comput (ProgramPart s2),s2,i) . x by A15, A203, SCMFSA_2:97;
(Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . x by A43, A201, A211, SCMFSA_2:97;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A210, A212; :: thesis: verum
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 9 ; :: thesis: S1[i + 1]
then consider db, da being Int-Location , f being FinSeq-Location such that
A213: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = da := f,db by SCMFSA_2:62;
A214: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f = (Comput (ProgramPart s2),s2,i) . f by A17;
A215: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = da := f,db by A213, SCMFSA_4:17;
A216: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A213, SCMFSA_2:98;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A215, SCMFSA_2:98; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A215, A216, SCMFSA_2:98; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A217: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
A218: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
assume A219: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A219, A218, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A220: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A213, SCMFSA_2:98;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A215, SCMFSA_2:98;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A219, A220; :: thesis: verum
end;
suppose A221: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then consider k1 being Element of NAT such that
A222: k1 = abs ((Comput (ProgramPart s1),s1,i) . db) and
A223: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . f) /. k1 by A51, A213, SCMFSA_2:98;
consider k2 being Element of NAT such that
A224: k2 = abs ((Comput (ProgramPart s2),s2,i) . db) and
A225: (Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . f) /. k2 by A8, A15, A215, A221, SCMFSA_2:98;
DataPart p c= p by RELAT_1:88;
then dom (DataPart p) c= dom p by GRFUNC_1:8;
then ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f) /. k2 = ((Comput (ProgramPart s1),s1,i) . f) /. k1 by A2, A4, A5, A33, A213, A217, A219, A221, A222, A224, SCMFSA_3:27;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A214, A219, A223, A225; :: thesis: verum
end;
suppose A226: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A227: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A213, A226, SCMFSA_2:98;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A215, A226, SCMFSA_2:98;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A219, A227; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A228: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A228, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider f = x as FinSeq-Location by SCMFSA_2:12;
A229: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . f = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f by A43, A213, SCMFSA_2:98;
(Comput (ProgramPart s2),s2,(i + 1)) . f = (Comput (ProgramPart s2),s2,i) . f by A8, A15, A215, SCMFSA_2:98;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A228, A229; :: thesis: verum
end;
suppose A230: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A231: ex k1 being Element of NAT st
( k1 = abs ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) & (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f) /. k1 ) by A43, A213, SCMFSA_2:98;
ex k2 being Element of NAT st
( k2 = abs ((Comput (ProgramPart s2),s2,i) . db) & (Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . f) /. k2 ) by A8, A15, A215, A230, SCMFSA_2:98;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A217, A214, A228, A231, SCMFSA_2:127; :: thesis: verum
end;
suppose A232: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A233: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A213, A232, SCMFSA_2:98;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A215, A232, SCMFSA_2:98;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A228, A233; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 10 ; :: thesis: S1[i + 1]
then consider db, da being Int-Location , f being FinSeq-Location such that
A234: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = f,db := da by SCMFSA_2:63;
A235: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f = (Comput (ProgramPart s2),s2,i) . f by A17;
A236: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = f,db := da by A234, SCMFSA_4:18;
A237: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A234, SCMFSA_2:99;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A236, SCMFSA_2:99; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A238: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A236, A237, SCMFSA_2:99; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A239: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db = (Comput (ProgramPart s2),s2,i) . db by A27;
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
A240: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
assume A241: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in Int-Locations or f = x or ( f <> x & x in FinSeq-Locations ) ) by A33, A241, A240, XBOOLE_0:def 3;
suppose x in Int-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A242: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A234, SCMFSA_2:99;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A236, SCMFSA_2:99;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A241, A242; :: thesis: verum
end;
suppose A243: f = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then consider k1 being Element of NAT such that
A244: k1 = abs ((Comput (ProgramPart s1),s1,i) . db) and
A245: (Comput (ProgramPart s1),s1,(i + 1)) . x = ((Comput (ProgramPart s1),s1,i) . f) +* k1,((Comput (ProgramPart s1),s1,i) . da) by A51, A234, SCMFSA_2:99;
consider k2 being Element of NAT such that
A246: k2 = abs ((Comput (ProgramPart s2),s2,i) . db) and
A247: (Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . f) +* k2,((Comput (ProgramPart s2),s2,i) . da) by A8, A15, A236, A243, SCMFSA_2:99;
DataPart p c= p by RELAT_1:88;
then dom (DataPart p) c= dom p by GRFUNC_1:8;
then ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f) +* k2,((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) = ((Comput (ProgramPart s1),s1,i) . f) +* k1,((Comput (ProgramPart s1),s1,i) . da) by A2, A4, A5, A33, A234, A239, A241, A243, A244, A246, SCMFSA_3:28;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A238, A235, A241, A245, A247; :: thesis: verum
end;
suppose A248: ( f <> x & x in FinSeq-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A249: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A234, A248, SCMFSA_2:99;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A236, A248, SCMFSA_2:99;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A241, A249; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A250: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in Int-Locations or f = x or ( f <> x & x in FinSeq-Locations ) ) by A20, A250, XBOOLE_0:def 3;
suppose x in Int-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider f = x as Int-Location by SCMFSA_2:11;
A251: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . f = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f by A43, A234, SCMFSA_2:99;
(Comput (ProgramPart s2),s2,(i + 1)) . f = (Comput (ProgramPart s2),s2,i) . f by A8, A15, A236, SCMFSA_2:99;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A250, A251; :: thesis: verum
end;
suppose A252: f = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A253: ex k1 being Element of NAT st
( k1 = abs ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . db) & (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f) +* k1,((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) ) by A43, A234, SCMFSA_2:99;
ex k2 being Element of NAT st
( k2 = abs ((Comput (ProgramPart s2),s2,i) . db) & (Comput (ProgramPart s2),s2,(i + 1)) . x = ((Comput (ProgramPart s2),s2,i) . f) +* k2,((Comput (ProgramPart s2),s2,i) . da) ) by A8, A15, A236, A252, SCMFSA_2:99;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A239, A238, A235, A250, A253, SCMFSA_2:127; :: thesis: verum
end;
suppose A254: ( f <> x & x in FinSeq-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A255: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A234, A254, SCMFSA_2:99;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A236, A254, SCMFSA_2:99;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A250, A255; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 11 ; :: thesis: S1[i + 1]
then consider da being Int-Location , f being FinSeq-Location such that
A256: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = da :=len f by SCMFSA_2:64;
A257: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = da :=len f by A256, SCMFSA_4:19;
A258: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A256, SCMFSA_2:100;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A257, SCMFSA_2:100; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A257, A258, SCMFSA_2:100; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A259: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f = (Comput (ProgramPart s2),s2,i) . f by A17;
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
A260: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
assume A261: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A33, A261, A260, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A262: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A256, SCMFSA_2:100;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A257, SCMFSA_2:100;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A261, A262; :: thesis: verum
end;
suppose A263: da = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
DataPart p c= p by RELAT_1:88;
then dom (DataPart p) c= dom p by GRFUNC_1:8;
then A264: len ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f) = len ((Comput (ProgramPart s1),s1,i) . f) by A2, A4, A5, A33, A256, A261, A263, SCMFSA_3:29;
A265: (Comput (ProgramPart s1),s1,(i + 1)) . x = len ((Comput (ProgramPart s1),s1,i) . f) by A51, A256, A263, SCMFSA_2:100;
(Comput (ProgramPart s2),s2,(i + 1)) . x = len ((Comput (ProgramPart s2),s2,i) . f) by A8, A15, A257, A263, SCMFSA_2:100;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A259, A261, A265, A264; :: thesis: verum
end;
suppose A266: ( da <> x & x in Int-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A267: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A256, A266, SCMFSA_2:100;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A257, A266, SCMFSA_2:100;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A261, A267; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A268: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in FinSeq-Locations or da = x or ( da <> x & x in Int-Locations ) ) by A20, A268, XBOOLE_0:def 3;
suppose x in FinSeq-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider f = x as FinSeq-Location by SCMFSA_2:12;
A269: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . f = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f by A43, A256, SCMFSA_2:100;
(Comput (ProgramPart s2),s2,(i + 1)) . f = (Comput (ProgramPart s2),s2,i) . f by A8, A15, A257, SCMFSA_2:100;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A268, A269; :: thesis: verum
end;
suppose A270: da = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A271: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = len ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f) by A43, A256, SCMFSA_2:100;
(Comput (ProgramPart s2),s2,(i + 1)) . x = len ((Comput (ProgramPart s2),s2,i) . f) by A8, A15, A257, A270, SCMFSA_2:100;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A259, A268, A271, SCMFSA_2:127; :: thesis: verum
end;
suppose A272: ( da <> x & x in Int-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A273: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A256, A272, SCMFSA_2:100;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A257, A272, SCMFSA_2:100;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A268, A273; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
suppose InsCode (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)) = 12 ; :: thesis: S1[i + 1]
then consider da being Int-Location , f being FinSeq-Location such that
A274: CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i) = f :=<0,...,0> da by SCMFSA_2:65;
A275: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),k = f :=<0,...,0> da by A274, SCMFSA_4:20;
A276: (Exec (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,i)),(Comput (ProgramPart s1),s1,i)) . (IC SCM+FSA ) = succ (IC (Comput (ProgramPart s1),s1,i)) by A274, SCMFSA_2:101;
hence (IC (Comput (ProgramPart s1),s1,(i + 1))) + k = IC (Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A51, A15, A59, A275, SCMFSA_2:101; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) & (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
thus IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,(i + 1))),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,(i + 1)) by A7, A8, A21, A51, A15, A59, A275, A276, SCMFSA_2:101; :: thesis: ( (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) )
A277: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da = (Comput (ProgramPart s2),s2,i) . da by A27;
now
let x be set ; :: thesis: ( x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) implies ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1 )
A278: dom (DataPart p) c= Int-Locations \/ FinSeq-Locations by RELAT_1:87, SCMFSA_2:127;
assume A279: x in dom ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
per cases ( x in Int-Locations or f = x or ( f <> x & x in FinSeq-Locations ) ) by A33, A279, A278, XBOOLE_0:def 3;
suppose x in Int-Locations ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as Int-Location by SCMFSA_2:11;
A280: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A274, SCMFSA_2:101;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A275, SCMFSA_2:101;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A279, A280; :: thesis: verum
end;
suppose A281: f = x ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then consider k1 being Element of NAT such that
A282: k1 = abs ((Comput (ProgramPart s1),s1,i) . da) and
A283: (Comput (ProgramPart s1),s1,(i + 1)) . x = k1 |-> 0 by A51, A274, SCMFSA_2:101;
consider k2 being Element of NAT such that
A284: k2 = abs ((Comput (ProgramPart s2),s2,i) . da) and
A285: (Comput (ProgramPart s2),s2,(i + 1)) . x = k2 |-> 0 by A8, A15, A275, A281, SCMFSA_2:101;
DataPart p c= p by RELAT_1:88;
then dom (DataPart p) c= dom p by GRFUNC_1:8;
then k2 |-> 0 = k1 |-> 0 by A2, A4, A5, A33, A274, A277, A279, A281, A282, A284, SCMFSA_3:30;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A46, A279, A283, A285; :: thesis: verum
end;
suppose A286: ( f <> x & x in FinSeq-Locations ) ; :: thesis: ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . b1 = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A287: (Comput (ProgramPart s1),s1,(i + 1)) . d = (Comput (ProgramPart s1),s1,i) . d by A51, A274, A286, SCMFSA_2:101;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A275, A286, SCMFSA_2:101;
hence ((Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p))) . x = ((Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p))) . x by A33, A53, A279, A287; :: thesis: verum
end;
end;
end;
then (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) c= (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart p)) by A44, A33, A45, GRFUNC_1:8;
hence (Comput (ProgramPart s1),s1,(i + 1)) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,(i + 1)) | (dom (DataPart (Relocated p,k))) by A44, A33, A45, GRFUNC_1:9; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1))
now
let x be set ; :: thesis: ( x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) implies (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1 )
assume A288: x in dom (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
per cases ( x in Int-Locations or f = x or ( f <> x & x in FinSeq-Locations ) ) by A20, A288, XBOOLE_0:def 3;
suppose x in Int-Locations ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider f = x as Int-Location by SCMFSA_2:11;
A289: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . f = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . f by A43, A274, SCMFSA_2:101;
(Comput (ProgramPart s2),s2,(i + 1)) . f = (Comput (ProgramPart s2),s2,i) . f by A8, A15, A275, SCMFSA_2:101;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A288, A289; :: thesis: verum
end;
suppose A290: f = x ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then A291: ex k1 being Element of NAT st
( k1 = abs ((Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . da) & (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . x = k1 |-> 0 ) by A43, A274, SCMFSA_2:101;
ex k2 being Element of NAT st
( k2 = abs ((Comput (ProgramPart s2),s2,i) . da) & (Comput (ProgramPart s2),s2,(i + 1)) . x = k2 |-> 0 ) by A8, A15, A275, A290, SCMFSA_2:101;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A35, A277, A288, A291, SCMFSA_2:127; :: thesis: verum
end;
suppose A292: ( f <> x & x in FinSeq-Locations ) ; :: thesis: (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . b1 = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . b1
then reconsider d = x as FinSeq-Location by SCMFSA_2:12;
A293: (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) . d = (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),i) . d by A43, A274, A292, SCMFSA_2:101;
(Comput (ProgramPart s2),s2,(i + 1)) . d = (Comput (ProgramPart s2),s2,i) . d by A8, A15, A275, A292, SCMFSA_2:101;
hence (DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1))) . x = (DataPart (Comput (ProgramPart s2),s2,(i + 1))) . x by A39, A288, A293; :: thesis: verum
end;
end;
end;
then DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) c= DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:8;
hence DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),(i + 1)) = DataPart (Comput (ProgramPart s2),s2,(i + 1)) by A20, A34, GRFUNC_1:9; :: thesis: verum
end;
end;
end;
A294: DataPart p = DataPart (Relocated p,k) by AMISTD_2:68;
reconsider ii = IC p as Element of NAT ;
A295: DataPart p c= p by RELAT_1:88;
A296: DataPart (Relocated p,k) c= Relocated p,k by RELAT_1:88;
A297: IC SCM+FSA in dom (Relocated p,k) by AMISTD_2:72;
now
thus (IC (Comput (ProgramPart s1),s1,0 )) + k = (IC s1) + k by AMI_1:13
.= (IC p) + k by A1, A2, GRFUNC_1:8
.= IC (Relocated p,k) by A1, AMISTD_2:73
.= IC s2 by A3, A297, GRFUNC_1:8
.= IC (Comput (ProgramPart s2),s2,0 ) by AMI_1:13 ; :: thesis: ( IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,0 )),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,0 ) & (Comput (ProgramPart s1),s1,0 ) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,0 ) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),0 ) = DataPart (Comput (ProgramPart s2),s2,0 ) )
reconsider loc = IC p as Element of NAT ;
A298: IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,0 )),k = IncAddr (CurInstr (ProgramPart s1),s1),k by AMI_1:13
.= IncAddr (s1 . (IC s1)),k by COMPOS_1:38 ;
A299: IC p = IC s1 by A1, A2, GRFUNC_1:8;
then IC p = IC (Comput (ProgramPart s1),s1,0 ) by AMI_1:13;
then A300: loc in dom (ProgramPart p) by A2, A4, SCMFSA_3:17;
ProgramPart p c= p by RELAT_1:88;
then A301: dom (ProgramPart p) c= dom p by GRFUNC_1:8;
then A302: (IC p) + k in dom (Relocated p,k) by A300, AMISTD_2:71;
A303: IC SCM+FSA in dom (Relocated p,k) by AMISTD_2:72;
A304: p . ii = s1 . (IC s1) by A2, A299, A300, A301, GRFUNC_1:8;
Z: (ProgramPart s2) /. (IC s2) = s2 . (IC s2) by COMPOS_1:38;
CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,0 ) = CurInstr (ProgramPart s2),s2 by AMI_1:13
.= s2 . (IC (Relocated p,k)) by A3, A303, Z, GRFUNC_1:8
.= s2 . ((IC p) + k) by A1, AMISTD_2:73
.= (Relocated p,k) . ((IC p) + k) by A3, A302, GRFUNC_1:8 ;
hence IncAddr (CurInstr (ProgramPart s1),(Comput (ProgramPart s1),s1,0 )),k = CurInstr (ProgramPart s2),(Comput (ProgramPart s2),s2,0 ) by A300, A304, A298, AMISTD_2:76; :: thesis: ( (Comput (ProgramPart s1),s1,0 ) | (dom (DataPart p)) = (Comput (ProgramPart s2),s2,0 ) | (dom (DataPart (Relocated p,k))) & DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),0 ) = DataPart (Comput (ProgramPart s2),s2,0 ) )
thus (Comput (ProgramPart s1),s1,0 ) | (dom (DataPart p)) = s1 | (dom (DataPart p)) by AMI_1:13
.= DataPart p by A2, A295, GRFUNC_1:64, XBOOLE_1:1
.= s2 | (dom (DataPart p)) by A3, A294, A296, GRFUNC_1:64, XBOOLE_1:1
.= (Comput (ProgramPart s2),s2,0 ) | (dom (DataPart (Relocated p,k))) by A294, AMI_1:13 ; :: thesis: DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),0 ) = DataPart (Comput (ProgramPart s2),s2,0 )
thus DataPart (Comput (ProgramPart (s1 +* (DataPart s2))),(s1 +* (DataPart s2)),0 ) = DataPart (s1 +* (DataPart s2)) by AMI_1:13
.= DataPart s2 by PBOOLE:157
.= DataPart (Comput (ProgramPart s2),s2,0 ) by AMI_1:13 ; :: thesis: verum
end;
then A305: S1[ 0 ] ;
thus for i being Element of NAT holds S1[i] from NAT_1:sch 1(A305, A6); :: thesis: verum