let s1, s2 be State of SCM+FSA; :: thesis: for p1, p2 being Instruction-Sequence of SCM+FSA
for J being InitHalting Program of SCM+FSA st Initialize ((intloc 0) .--> 1) c= s1 & J c= p1 holds
for n being Element of NAT st Reloc (J,n) c= p2 & IC s2 = n & DataPart s1 = DataPart s2 holds
for i being Element of NAT holds
( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) )

let p1, p2 be Instruction-Sequence of SCM+FSA; :: thesis: for J being InitHalting Program of SCM+FSA st Initialize ((intloc 0) .--> 1) c= s1 & J c= p1 holds
for n being Element of NAT st Reloc (J,n) c= p2 & IC s2 = n & DataPart s1 = DataPart s2 holds
for i being Element of NAT holds
( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) )

let J be InitHalting Program of SCM+FSA; :: thesis: ( Initialize ((intloc 0) .--> 1) c= s1 & J c= p1 implies for n being Element of NAT st Reloc (J,n) c= p2 & IC s2 = n & DataPart s1 = DataPart s2 holds
for i being Element of NAT holds
( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) ) )

assume that
A1: Initialize ((intloc 0) .--> 1) c= s1 and
A2: J c= p1 ; :: thesis: for n being Element of NAT st Reloc (J,n) c= p2 & IC s2 = n & DataPart s1 = DataPart s2 holds
for i being Element of NAT holds
( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) )

let n be Element of NAT ; :: thesis: ( Reloc (J,n) c= p2 & IC s2 = n & DataPart s1 = DataPart s2 implies for i being Element of NAT holds
( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) ) )

assume that
A3: Reloc (J,n) c= p2 and
A4: IC s2 = n and
A5: DataPart s1 = DataPart s2 ; :: thesis: for i being Element of NAT holds
( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) )

A6: DataPart (Comput (p1,s1,0)) = DataPart s2 by A5, EXTPRO_1:2
.= DataPart (Comput (p2,s2,0)) by EXTPRO_1:2 ;
defpred S1[ Nat] means ( (IC (Comput (p1,s1,$1))) + n = IC (Comput (p2,s2,$1)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,$1)))),n) = CurInstr (p2,(Comput (p2,s2,$1))) & DataPart (Comput (p1,s1,$1)) = DataPart (Comput (p2,s2,$1)) );
A7: for k being Element of NAT st S1[k] holds
S1[k + 1]
proof
let k be Element of NAT ; :: thesis: ( S1[k] implies S1[k + 1] )
A8: Comput (p1,s1,(k + 1)) = Following (p1,(Comput (p1,s1,k))) by EXTPRO_1:3
.= Exec ((CurInstr (p1,(Comput (p1,s1,k)))),(Comput (p1,s1,k))) ;
reconsider l = IC (Comput (p1,s1,(k + 1))) as Element of NAT ;
reconsider j = CurInstr (p1,(Comput (p1,s1,(k + 1)))) as Instruction of SCM+FSA ;
A9: Comput (p2,s2,(k + 1)) = Following (p2,(Comput (p2,s2,k))) by EXTPRO_1:3
.= Exec ((CurInstr (p2,(Comput (p2,s2,k)))),(Comput (p2,s2,k))) ;
A10: IC (Comput (p1,s1,(k + 1))) in dom J by A1, Def1, A2;
assume A11: S1[k] ; :: thesis: S1[k + 1]
hence (IC (Comput (p1,s1,(k + 1)))) + n = IC (Comput (p2,s2,(k + 1))) by A8, A9, SCMFSA6A:8; :: thesis: ( IncAddr ((CurInstr (p1,(Comput (p1,s1,(k + 1))))),n) = CurInstr (p2,(Comput (p2,s2,(k + 1)))) & DataPart (Comput (p1,s1,(k + 1))) = DataPart (Comput (p2,s2,(k + 1))) )
then A12: IC (Comput (p2,s2,(k + 1))) in dom (Reloc (J,n)) by A10, COMPOS_1:46;
A13: l in dom J by A1, Def1, A2;
j = p1 . (IC (Comput (p1,s1,(k + 1)))) by PBOOLE:143
.= J . l by A10, A2, GRFUNC_1:2 ;
hence IncAddr ((CurInstr (p1,(Comput (p1,s1,(k + 1))))),n) = (Reloc (J,n)) . (l + n) by A13, COMPOS_1:35
.= (Reloc (J,n)) . (IC (Comput (p2,s2,(k + 1)))) by A11, A8, A9, SCMFSA6A:8
.= p2 . (IC (Comput (p2,s2,(k + 1)))) by A12, A3, GRFUNC_1:2
.= CurInstr (p2,(Comput (p2,s2,(k + 1)))) by PBOOLE:143 ;
:: thesis: DataPart (Comput (p1,s1,(k + 1))) = DataPart (Comput (p2,s2,(k + 1)))
thus DataPart (Comput (p1,s1,(k + 1))) = DataPart (Comput (p2,s2,(k + 1))) by A11, A8, A9, SCMFSA6A:8; :: thesis: verum
end;
A14: 0 in dom J by AFINSQ_1:65;
A15: 0 in dom J by AFINSQ_1:65;
B16: IC in dom (Initialize ((intloc 0) .--> 1)) by MEMSTR_0:48;
then A17: p1 . (IC s1) = p1 . (IC (Initialize ((intloc 0) .--> 1))) by A1, GRFUNC_1:2
.= J . 0 by A15, A2, ICiS, GRFUNC_1:2 ;
let i be Element of NAT ; :: thesis: ( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) )
0 in dom J by AFINSQ_1:65;
then A18: 0 + n in dom (Reloc (J,n)) by COMPOS_1:46;
A19: IC (Comput (p1,s1,0)) = s1 . (IC ) by EXTPRO_1:2
.= 0 by ICiS, A1, B16, GRFUNC_1:2 ;
A20: p2 /. (IC s2) = p2 . (IC s2) by PBOOLE:143;
A21: p1 /. (IC s1) = p1 . (IC s1) by PBOOLE:143;
IncAddr ((CurInstr (p1,(Comput (p1,s1,0)))),n) = IncAddr ((CurInstr (p1,s1)),n) by EXTPRO_1:2
.= (Reloc (J,n)) . (0 + n) by A17, A14, A21, COMPOS_1:35
.= CurInstr (p2,s2) by A4, A18, A20, A3, GRFUNC_1:2
.= CurInstr (p2,(Comput (p2,s2,0))) by EXTPRO_1:2 ;
then A22: S1[ 0 ] by A4, A19, A6, EXTPRO_1:2;
for k being Element of NAT holds S1[k] from NAT_1:sch 1(A22, A7);
hence ( (IC (Comput (p1,s1,i))) + n = IC (Comput (p2,s2,i)) & IncAddr ((CurInstr (p1,(Comput (p1,s1,i)))),n) = CurInstr (p2,(Comput (p2,s2,i))) & DataPart (Comput (p1,s1,i)) = DataPart (Comput (p2,s2,i)) ) ; :: thesis: verum