let s be State of SCMPDS; :: thesis: for i being parahalting Instruction of SCMPDS holds Exec (i,(Initialize s)) = IExec ((Load i),s)
let i be parahalting Instruction of SCMPDS; :: thesis: Exec (i,(Initialize s)) = IExec ((Load i),s)
set Li = Load i;
set Mi = stop (Load i);
set sI = (Initialize s) +* (stop (Load i));
set Is = Initialize s;
A1: (Initialize s) +* (stop (Load i)) = s +* (Initialize (stop (Load i))) by COMPOS_1:125;
set IC1 = IC (Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1));
A2: ProgramPart ((Initialize s) +* (stop (Load i))) halts_on (Initialize s) +* (stop (Load i)) by FUNCT_4:26, SCMPDS_4:def 10;
A3: 1 in dom (stop (Load i)) by Th9;
A4: 0 in dom (stop (Load i)) by Th9;
A5: now
set Y = NAT ;
set X = SCM-Data-Loc \/ {(IC )};
assume A6: Result ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i)))) = Exec (i,((Initialize s) +* (stop (Load i)))) ; :: thesis: Exec (i,(Initialize s)) = IExec ((Load i),s)
Initialize s,(Initialize s) +* (stop (Load i)) equal_outside NAT by FUNCT_7:132;
then (Initialize s) | (SCM-Data-Loc \/ {(IC )}) = ((Initialize s) +* (stop (Load i))) | (SCM-Data-Loc \/ {(IC )}) by Th41;
then A7: (Exec (i,(Initialize s))) | (SCM-Data-Loc \/ {(IC )}) = (Exec (i,((Initialize s) +* (stop (Load i))))) | (SCM-Data-Loc \/ {(IC )}) by SCMPDS_3:7;
A8: NAT /\ ((SCM-Data-Loc \/ {(IC )}) \/ NAT) c= NAT /\ ((SCM-Data-Loc \/ {(IC )}) \/ NAT) ;
A9: dom (Exec (i,(Initialize s))) = the carrier of SCMPDS by PARTFUN1:def 4;
A10: dom s = the carrier of SCMPDS by PARTFUN1:def 4;
then dom s = (SCM-Data-Loc \/ {(IC )}) \/ NAT by COMPOS_1:160, SCMPDS_2:100;
then A11: dom s = (SCM-Data-Loc \/ {(IC )}) \/ NAT ;
now
thus A12: dom ((Exec (i,(Initialize s))) | NAT) = (dom s) /\ NAT by A9, RELAT_1:90, A10; :: thesis: for x being set st x in dom ((Exec (i,(Initialize s))) | NAT) holds
((Exec (i,(Initialize s))) | NAT) . x = s . x

let x be set ; :: thesis: ( x in dom ((Exec (i,(Initialize s))) | NAT) implies ((Exec (i,(Initialize s))) | NAT) . x = s . x )
assume x in dom ((Exec (i,(Initialize s))) | NAT) ; :: thesis: ((Exec (i,(Initialize s))) | NAT) . x = s . x
then x in (dom s) /\ NAT by A12;
then A13: x in NAT /\ ((SCM-Data-Loc \/ {(IC )}) \/ NAT) by A11;
then reconsider x9 = x as Element of NAT by XBOOLE_1:21;
x in NAT by A13, XBOOLE_1:21;
hence ((Exec (i,(Initialize s))) | NAT) . x = (Exec (i,(Initialize s))) . x by FUNCT_1:72
.= (Initialize s) . x9 by AMI_1:def 13
.= s . x by Th40 ;
:: thesis: verum
end;
then A14: (Exec (i,(Initialize s))) | NAT = s | NAT by FUNCT_1:68;
dom (Exec (i,((Initialize s) +* (stop (Load i))))) = the carrier of SCMPDS by PARTFUN1:def 4;
then dom (Exec (i,((Initialize s) +* (stop (Load i))))) = (SCM-Data-Loc \/ {(IC )}) \/ NAT by COMPOS_1:160, SCMPDS_2:100;
then A15: (IExec ((Load i),s)) | NAT = s | NAT by A6, A11, A8, FUNCT_4:93;
SCM-Data-Loc \/ {(IC )} misses NAT
proof end;
then SCM-Data-Loc \/ {(IC )} misses dom (s | NAT) by RELAT_1:87, XBOOLE_1:63;
then (IExec ((Load i),s)) | (SCM-Data-Loc \/ {(IC )}) = (Exec (i,((Initialize s) +* (stop (Load i))))) | (SCM-Data-Loc \/ {(IC )}) by A6, FUNCT_4:76;
then A19: (Exec (i,(Initialize s))) | ((SCM-Data-Loc \/ {(IC )}) \/ NAT) = (IExec ((Load i),s)) | ((SCM-Data-Loc \/ {(IC )}) \/ NAT) by A7, A15, A14, RELAT_1:185;
dom (IExec ((Load i),s)) = the carrier of SCMPDS by PARTFUN1:def 4;
then A20: dom (IExec ((Load i),s)) = (SCM-Data-Loc \/ {(IC )}) \/ NAT by COMPOS_1:160, SCMPDS_2:100;
A21: dom (Exec (i,(Initialize s))) = the carrier of SCMPDS by PARTFUN1:def 4;
dom (Exec (i,(Initialize s))) = (SCM-Data-Loc \/ {(IC )}) \/ NAT by COMPOS_1:160, SCMPDS_2:100, A21;
hence Exec (i,(Initialize s)) = (Exec (i,(Initialize s))) | ((SCM-Data-Loc \/ {(IC )}) \/ NAT) by RELAT_1:98
.= (IExec ((Load i),s)) | ((SCM-Data-Loc \/ {(IC )}) \/ NAT) by A19
.= IExec ((Load i),s) by RELAT_1:98, A20 ;
:: thesis: verum
end;
A22: (stop (Load i)) . 1 = halt SCMPDS by Th10;
A23: (stop (Load i)) . 0 = i by Th10;
A24: stop (Load i) c= (Initialize s) +* (stop (Load i)) by FUNCT_4:26;
A25: IC (Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1)) in dom (stop (Load i)) by FUNCT_4:26, SCMPDS_4:def 9;
A26: (ProgramPart ((Initialize s) +* (stop (Load i)))) /. (IC ((Initialize s) +* (stop (Load i)))) = ((Initialize s) +* (stop (Load i))) . (IC ((Initialize s) +* (stop (Load i)))) by COMPOS_1:38;
A27: Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),(0 + 1)) = Following ((ProgramPart ((Initialize s) +* (stop (Load i)))),(Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),0))) by EXTPRO_1:4
.= Following ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i)))) by EXTPRO_1:3
.= Exec ((((Initialize s) +* (stop (Load i))) . 0),((Initialize s) +* (stop (Load i)))) by Th18, A26, A1, FUNCT_4:26
.= Exec (i,((Initialize s) +* (stop (Load i)))) by A4, A23, A24, GRFUNC_1:8 ;
per cases ( IC (Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1)) = 0 or IC (Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1)) = 1 ) by A25, Th11;
suppose A28: IC (Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1)) = 0 ; :: thesis: Exec (i,(Initialize s)) = IExec ((Load i),s)
set Ni = InsCode i;
succ (IC ((Initialize s) +* (stop (Load i)))) = succ 0 by Th18, A1, FUNCT_4:26
.= 1 ;
then A29: InsCode i in {0,1,4,5,6} by A27, A28, SCMPDS_4:6;
A30: CurInstr ((ProgramPart ((Initialize s) +* (stop (Load i)))),(Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1))) = ((Initialize s) +* (stop (Load i))) . 0 by A28, COMPOS_1:38
.= i by A4, A23, A24, GRFUNC_1:8 ;
A31: InsCode i <> 1 by Th26;
hereby :: thesis: verum
per cases ( i = halt SCMPDS or i <> halt SCMPDS ) ;
suppose A32: i <> halt SCMPDS ; :: thesis: Exec (i,(Initialize s)) = IExec ((Load i),s)
A33: for loc being Element of NAT holds ((Initialize s) +* (stop (Load i))) . loc = (Exec (i,((Initialize s) +* (stop (Load i))))) . loc by AMI_1:def 13;
A34: now
let b be Int_position ; :: thesis: ((Initialize s) +* (stop (Load i))) . b1 = (Exec (i,((Initialize s) +* (stop (Load i))))) . b1
per cases ( InsCode i = 0 or InsCode i = 4 or InsCode i = 5 or InsCode i = 6 ) by A29, A31, ENUMSET1:def 3;
suppose InsCode i = 0 ; :: thesis: ((Initialize s) +* (stop (Load i))) . b1 = (Exec (i,((Initialize s) +* (stop (Load i))))) . b1
end;
suppose InsCode i = 4 ; :: thesis: ((Initialize s) +* (stop (Load i))) . b1 = (Exec (i,((Initialize s) +* (stop (Load i))))) . b1
then ex a being Int_position ex k1, k2 being Integer st i = (a,k1) <>0_goto k2 by SCMPDS_2:39;
hence ((Initialize s) +* (stop (Load i))) . b = (Exec (i,((Initialize s) +* (stop (Load i))))) . b by SCMPDS_2:67; :: thesis: verum
end;
suppose InsCode i = 5 ; :: thesis: ((Initialize s) +* (stop (Load i))) . b1 = (Exec (i,((Initialize s) +* (stop (Load i))))) . b1
then ex a being Int_position ex k1, k2 being Integer st i = (a,k1) <=0_goto k2 by SCMPDS_2:40;
hence ((Initialize s) +* (stop (Load i))) . b = (Exec (i,((Initialize s) +* (stop (Load i))))) . b by SCMPDS_2:68; :: thesis: verum
end;
suppose InsCode i = 6 ; :: thesis: ((Initialize s) +* (stop (Load i))) . b1 = (Exec (i,((Initialize s) +* (stop (Load i))))) . b1
then ex a being Int_position ex k1, k2 being Integer st i = (a,k1) >=0_goto k2 by SCMPDS_2:41;
hence ((Initialize s) +* (stop (Load i))) . b = (Exec (i,((Initialize s) +* (stop (Load i))))) . b by SCMPDS_2:69; :: thesis: verum
end;
end;
end;
A35: Following ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i)))) = Following ((ProgramPart ((Initialize s) +* (stop (Load i)))),(Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),0))) by EXTPRO_1:3
.= Exec (i,((Initialize s) +* (stop (Load i)))) by A27, EXTPRO_1:4 ;
A36: IC ((Initialize s) +* (stop (Load i))) = IC (Exec (i,((Initialize s) +* (stop (Load i))))) by A27, A28, Th18, A1, FUNCT_4:26;
then A37: (Initialize s) +* (stop (Load i)) = Exec (i,((Initialize s) +* (stop (Load i)))) by A34, A33, SCMPDS_2:54;
now end;
then not ProgramPart ((Initialize s) +* (stop (Load i))) halts_on (Initialize s) +* (stop (Load i)) by EXTPRO_1:30;
hence Exec (i,(Initialize s)) = IExec ((Load i),s) by FUNCT_4:26, SCMPDS_4:def 10; :: thesis: verum
end;
end;
end;
end;
suppose A38: IC (Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1)) = 1 ; :: thesis: Exec (i,(Initialize s)) = IExec ((Load i),s)
CurInstr ((ProgramPart ((Initialize s) +* (stop (Load i)))),(Comput ((ProgramPart ((Initialize s) +* (stop (Load i)))),((Initialize s) +* (stop (Load i))),1))) = ((Initialize s) +* (stop (Load i))) . 1 by A38, COMPOS_1:38
.= halt SCMPDS by A3, A22, A24, GRFUNC_1:8 ;
hence Exec (i,(Initialize s)) = IExec ((Load i),s) by A2, A5, A27, EXTPRO_1:def 8; :: thesis: verum
end;
end;