let s be State of SCMPDS ; :: thesis: for i being parahalting Instruction of SCMPDS holds Exec i,(Initialized s) = IExec (Load i),s
set SA0 = Start-At 0 ,SCMPDS ;
let i be parahalting Instruction of SCMPDS ; :: thesis: Exec i,(Initialized s) = IExec (Load i),s
set Li = Load i;
set Mi = stop (Load i);
set sI = s +* (Initialized (stop (Load i)));
set Is = Initialized s;
set IC1 = IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1);
A1: ProgramPart (s +* (Initialized (stop (Load i)))) halts_on s +* (Initialized (stop (Load i))) by FUNCT_4:26, SCMPDS_4:63;
A2: 1 in dom (Initialized (stop (Load i))) by Th13;
A3: 0 in dom (Initialized (stop (Load i))) by Th13;
A4: now
set Y = NAT ;
set X = SCM-Data-Loc \/ {(IC SCMPDS )};
assume A5: Result (s +* (Initialized (stop (Load i)))) = Exec i,(s +* (Initialized (stop (Load i)))) ; :: thesis: Exec i,(Initialized s) = IExec (Load i),s
s +* (Initialized (stop (Load i))) = (s +* (stop (Load i))) +* (Start-At 0 ,SCMPDS ) by FUNCT_4:15;
then Initialized s,s +* (Initialized (stop (Load i))) equal_outside NAT by AMI_1:120, FUNCT_7:106;
then (Initialized s) | (SCM-Data-Loc \/ {(IC SCMPDS )}) = (s +* (Initialized (stop (Load i)))) | (SCM-Data-Loc \/ {(IC SCMPDS )}) by Th41;
then A6: (Exec i,(Initialized s)) | (SCM-Data-Loc \/ {(IC SCMPDS )}) = (Exec i,(s +* (Initialized (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,(Initialized 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,(Initialized 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,(Initialized s)) | NAT ) holds
((Exec i,(Initialized s)) | NAT ) . x = s . x

let x be set ; :: thesis: ( x in dom ((Exec i,(Initialized s)) | NAT ) implies ((Exec i,(Initialized s)) | NAT ) . x = s . x )
assume x in dom ((Exec i,(Initialized s)) | NAT ) ; :: thesis: ((Exec i,(Initialized 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 x is Element of NAT by XBOOLE_1:21;
then reconsider x9 = x as Element of NAT ;
x in NAT by A11, XBOOLE_1:21;
hence ((Exec i,(Initialized s)) | NAT ) . x = (Exec i,(Initialized s)) . x by FUNCT_1:72
.= (Initialized s) . x9 by AMI_1:def 13
.= s . x by Th40 ;
:: thesis: verum
end;
then A12: (Exec i,(Initialized s)) | NAT = s | NAT by FUNCT_1:68;
dom (Exec i,(s +* (Initialized (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,(s +* (Initialized (stop (Load i))))) | (SCM-Data-Loc \/ {(IC SCMPDS )}) by A5, FUNCT_4:76;
then A17: (Exec i,(Initialized 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,(Initialized s) = (Exec i,(Initialized 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: (Initialized (stop (Load i))) . 1 = halt SCMPDS by Th13;
A19: (Initialized (stop (Load i))) . 0 = i by Th13;
A20: Initialized (stop (Load i)) c= s +* (Initialized (stop (Load i))) by FUNCT_4:26;
then A21: IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) in dom (stop (Load i)) by SCMPDS_4:def 9;
u: Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),0 = s +* (Initialized (stop (Load i))) by AMI_1:13;
Y: (ProgramPart (s +* (Initialized (stop (Load i))))) /. (IC (s +* (Initialized (stop (Load i))))) = (s +* (Initialized (stop (Load i)))) . (IC (s +* (Initialized (stop (Load i))))) by AMI_1:150;
A22: Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),(0 + 1) = Following (ProgramPart (s +* (Initialized (stop (Load i))))),(Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),0 ) by AMI_1:14
.= Following (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))) by AMI_1:13
.= Exec ((s +* (Initialized (stop (Load i)))) . 0 ),(s +* (Initialized (stop (Load i)))) by Th18, FUNCT_4:26, Y, u
.= Exec i,(s +* (Initialized (stop (Load i)))) by A3, A19, A20, GRFUNC_1:8 ;
per cases ( IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) = 0 or IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) = 1 ) by A21, Th11;
suppose A23: IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) = 0 ; :: thesis: Exec i,(Initialized s) = IExec (Load i),s
set Ni = InsCode i;
succ (IC (s +* (Initialized (stop (Load i))))) = succ 0 by Th18, FUNCT_4:26
.= 1 ;
then A24: InsCode i in {0 ,1,4,5,6} by A22, A23, SCMPDS_4:6;
Y: (ProgramPart (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1)) /. (IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1)) = (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) . (IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1)) by AMI_1:150;
A25: CurInstr (ProgramPart (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1)),(Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) = (s +* (Initialized (stop (Load i)))) . 0 by A22, A23, AMI_1:def 13, Y
.= 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,(Initialized s) = IExec (Load i),s
A28: for loc being Element of NAT holds (s +* (Initialized (stop (Load i)))) . loc = (Exec i,(s +* (Initialized (stop (Load i))))) . loc by AMI_1:def 13;
A29: now
let b be Int_position ; :: thesis: (s +* (Initialized (stop (Load i)))) . b1 = (Exec i,(s +* (Initialized (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 = 4 ; :: thesis: (s +* (Initialized (stop (Load i)))) . b1 = (Exec i,(s +* (Initialized (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 (s +* (Initialized (stop (Load i)))) . b = (Exec i,(s +* (Initialized (stop (Load i))))) . b by SCMPDS_2:67; :: thesis: verum
end;
suppose InsCode i = 5 ; :: thesis: (s +* (Initialized (stop (Load i)))) . b1 = (Exec i,(s +* (Initialized (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 (s +* (Initialized (stop (Load i)))) . b = (Exec i,(s +* (Initialized (stop (Load i))))) . b by SCMPDS_2:68; :: thesis: verum
end;
suppose InsCode i = 6 ; :: thesis: (s +* (Initialized (stop (Load i)))) . b1 = (Exec i,(s +* (Initialized (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 (s +* (Initialized (stop (Load i)))) . b = (Exec i,(s +* (Initialized (stop (Load i))))) . b by SCMPDS_2:69; :: thesis: verum
end;
end;
end;
u: Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),0 = s +* (Initialized (stop (Load i))) by AMI_1:13;
A30: Following (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))) = Following (ProgramPart (s +* (Initialized (stop (Load i))))),(Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),0 ) by AMI_1:13
.= Exec i,(s +* (Initialized (stop (Load i)))) by A22, AMI_1:14 ;
A31: IC (s +* (Initialized (stop (Load i)))) = IC (Exec i,(s +* (Initialized (stop (Load i))))) by A22, A23, Th18, FUNCT_4:26;
then A32: s +* (Initialized (stop (Load i))) = Exec i,(s +* (Initialized (stop (Load i)))) by A29, A28, SCMPDS_2:54;
now end;
then not ProgramPart (s +* (Initialized (stop (Load i)))) halts_on s +* (Initialized (stop (Load i))) by AMI_1:146;
hence Exec i,(Initialized s) = IExec (Load i),s by FUNCT_4:26, SCMPDS_4:63; :: thesis: verum
end;
end;
end;
end;
suppose S: IC (Comput (ProgramPart (s +* (Initialized (stop (Load i))))),(s +* (Initialized (stop (Load i)))),1) = 1 ; :: thesis: Exec i,(Initialized s) = IExec (Load i),s
end;
end;