let s be State of SCMPDS; :: thesis: for i being parahalting Instruction of SCMPDS holds Exec (i,(Initialize s)) = IExec ((Load i),s)
set SA0 = Start-At (0,SCMPDS);
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;
I1: (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));
A1: ProgramPart ((Initialize s) +* (stop (Load i))) halts_on (Initialize s) +* (stop (Load i)) by FUNCT_4:26, SCMPDS_4:def 10;
A2: 1 in dom (stop (Load i)) by Th9;
A3: 0 in dom (stop (Load i)) by Th9;
A4: now
set Y = NAT ;
set X = SCM-Data-Loc \/ {(IC SCMPDS)};
assume A5: 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 SCMPDS)}) = ((Initialize s) +* (stop (Load i))) | (SCM-Data-Loc \/ {(IC SCMPDS)}) by Th41;
then A6: (Exec (i,(Initialize s))) | (SCM-Data-Loc \/ {(IC SCMPDS)}) = (Exec (i,((Initialize s) +* (stop (Load i))))) | (SCM-Data-Loc \/ {(IC SCMPDS)}) by SCMPDS_3:7;
A7: NAT /\ ((SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT) c= NAT /\ ((SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT) ;
A8: dom (IExec ((Load i),s)) = the carrier of SCMPDS by PARTFUN1:def 4;
A9: dom (Exec (i,(Initialize s))) = the carrier of SCMPDS by PARTFUN1:def 4;
A10: dom s = (SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT by PARTFUN1:def 4, SCMPDS_3:5;
now
thus dom ((Exec (i,(Initialize s))) | NAT) = (dom s) /\ NAT by A9, A10, RELAT_1:90, SCMPDS_3:5; :: 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 A11: x in NAT /\ ((SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT) by A9, RELAT_1:90, SCMPDS_3:5;
then reconsider x9 = x as Element of NAT by XBOOLE_1:21;
x in NAT by A11, 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 A12: (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 A13: (IExec ((Load i),s)) | NAT = s | NAT by A5, A10, A7, FUNCT_4:93, SCMPDS_3:5;
SCM-Data-Loc \/ {(IC SCMPDS)} misses NAT
proof end;
then SCM-Data-Loc \/ {(IC SCMPDS)} misses dom (s | NAT) by RELAT_1:87, XBOOLE_1:63;
then (IExec ((Load i),s)) | (SCM-Data-Loc \/ {(IC SCMPDS)}) = (Exec (i,((Initialize s) +* (stop (Load i))))) | (SCM-Data-Loc \/ {(IC SCMPDS)}) by A5, FUNCT_4:76;
then A17: (Exec (i,(Initialize s))) | ((SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT) = (IExec ((Load i),s)) | ((SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT) by A6, A13, A12, RELAT_1:185;
thus Exec (i,(Initialize s)) = (Exec (i,(Initialize s))) | ((SCM-Data-Loc \/ {(IC SCMPDS)}) \/ NAT) by A9, RELAT_1:98, SCMPDS_3:5
.= IExec ((Load i),s) by A8, A17, RELAT_1:98, SCMPDS_3:5 ; :: thesis: verum
end;
A18: (stop (Load i)) . 1 = halt SCMPDS by Th10;
A19: (stop (Load i)) . 0 = i by Th10;
A20: stop (Load i) c= (Initialize s) +* (stop (Load i)) by FUNCT_4:26;
A21: 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;
Y: (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;
A22: 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, Y, I1, FUNCT_4:26
.= Exec (i,((Initialize s) +* (stop (Load i)))) by A3, A19, A20, 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 A21, Th11;
suppose A23: 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, I1, FUNCT_4:26
.= 1 ;
then A24: InsCode i in {0,1,4,5,6} by A22, A23, SCMPDS_4:6;
A25: 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 A23, COMPOS_1:38
.= i by A3, A19, A20, GRFUNC_1:8 ;
A26: InsCode i <> 1 by Th26;
hereby :: thesis: verum
per cases ( i = halt SCMPDS or i <> halt SCMPDS ) ;
suppose A27: i <> halt SCMPDS ; :: thesis: Exec (i,(Initialize s)) = IExec ((Load i),s)
A28: 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;
A29: 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 A24, A26, 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;
A30: 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 A22, EXTPRO_1:4 ;
A31: IC ((Initialize s) +* (stop (Load i))) = IC (Exec (i,((Initialize s) +* (stop (Load i))))) by A22, A23, Th18, I1, FUNCT_4:26;
then A32: (Initialize s) +* (stop (Load i)) = Exec (i,((Initialize s) +* (stop (Load i)))) by A29, A28, 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 S: 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 S, COMPOS_1:38
.= halt SCMPDS by A2, A18, A20, GRFUNC_1:8 ;
hence Exec (i,(Initialize s)) = IExec ((Load i),s) by A1, A4, A22, EXTPRO_1:def 8; :: thesis: verum
end;
end;