let s be State of ; :: thesis: for I being Program of st I is_closed_on s & I is_halting_on s holds
for k being Element of NAT st k <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) holds
( Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) <> halt SCM+FSA )

let I be Program of ; :: thesis: ( I is_closed_on s & I is_halting_on s implies for k being Element of NAT st k <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) holds
( Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) <> halt SCM+FSA ) )

assume that
A1: I is_closed_on s and
A2: I is_halting_on s ; :: thesis: for k being Element of NAT st k <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) holds
( Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) <> halt SCM+FSA )

set s2 = s +* ((Directed I) +* (Start-At (insloc 0 )));
set s1 = s +* (I +* (Start-At (insloc 0 )));
defpred S1[ Element of NAT ] means ( $1 <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) implies ( Computation (s +* (I +* (Start-At (insloc 0 )))),$1, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),$1 equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),$1) <> halt SCM+FSA ) );
A3: now
let k be Element of NAT ; :: thesis: ( Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT implies not CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) = halt SCM+FSA )
dom (Directed I) = dom I by FUNCT_4:105;
then A4: IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k) in dom (Directed I) by A1, SCMFSA7B:def 7;
( Directed I c= (Directed I) +* (Start-At (insloc 0 )) & (Directed I) +* (Start-At (insloc 0 )) c= s +* ((Directed I) +* (Start-At (insloc 0 ))) ) by Th9, FUNCT_4:26;
then Directed I c= s +* ((Directed I) +* (Start-At (insloc 0 ))) by XBOOLE_1:1;
then A5: Directed I c= Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k by AMI_1:81;
assume Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT ; :: thesis: not CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) = halt SCM+FSA
then CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) = (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) . (IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k)) by AMI_1:121
.= (Directed I) . (IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k)) by A5, A4, GRFUNC_1:8 ;
then A6: CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) in rng (Directed I) by A4, FUNCT_1:def 5;
assume CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) = halt SCM+FSA ; :: thesis: contradiction
hence contradiction by A6, SCMFSA6A:18; :: thesis: verum
end;
now
A7: ProgramPart (s +* (I +* (Start-At (insloc 0 )))) halts_on s +* (I +* (Start-At (insloc 0 ))) by A2, SCMFSA7B:def 8;
A8: dom I c= dom (Directed I) by FUNCT_4:105;
let k be Element of NAT ; :: thesis: ( ( k <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) implies Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT ) & k + 1 <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) implies ( Computation (s +* (I +* (Start-At (insloc 0 )))),(k + 1), Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1) equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1)) <> halt SCM+FSA ) )
assume A9: ( k <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) implies Computation (s +* (I +* (Start-At (insloc 0 )))),k, Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k equal_outside NAT ) ; :: thesis: ( k + 1 <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) implies ( Computation (s +* (I +* (Start-At (insloc 0 )))),(k + 1), Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1) equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1)) <> halt SCM+FSA ) )
A10: Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1) = Following (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) by AMI_1:14
.= Exec (CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k)),(Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) ;
A11: IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k) in dom I by A1, SCMFSA7B:def 7;
( I c= I +* (Start-At (insloc 0 )) & I +* (Start-At (insloc 0 )) c= s +* (I +* (Start-At (insloc 0 ))) ) by Th9, FUNCT_4:26;
then I c= s +* (I +* (Start-At (insloc 0 ))) by XBOOLE_1:1;
then I c= Computation (s +* (I +* (Start-At (insloc 0 )))),k by AMI_1:81;
then A12: CurInstr (Computation (s +* (I +* (Start-At (insloc 0 )))),k) = I . (IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k)) by A11, GRFUNC_1:8;
( Directed I c= (Directed I) +* (Start-At (insloc 0 )) & (Directed I) +* (Start-At (insloc 0 )) c= s +* ((Directed I) +* (Start-At (insloc 0 ))) ) by Th9, FUNCT_4:26;
then Directed I c= s +* ((Directed I) +* (Start-At (insloc 0 ))) by XBOOLE_1:1;
then A13: Directed I c= Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k by AMI_1:81;
A14: k + 0 < k + 1 by XREAL_1:8;
assume A15: k + 1 <= LifeSpan (s +* (I +* (Start-At (insloc 0 )))) ; :: thesis: ( Computation (s +* (I +* (Start-At (insloc 0 )))),(k + 1), Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1) equal_outside NAT & CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1)) <> halt SCM+FSA )
then k < LifeSpan (s +* (I +* (Start-At (insloc 0 )))) by A14, XXREAL_0:2;
then I . (IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k)) <> halt SCM+FSA by A12, A7, AMI_1:def 46;
then A16: CurInstr (Computation (s +* (I +* (Start-At (insloc 0 )))),k) = (Directed I) . (IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k)) by A12, FUNCT_4:111
.= (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) . (IC (Computation (s +* (I +* (Start-At (insloc 0 )))),k)) by A13, A11, A8, GRFUNC_1:8
.= CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),k) by A9, A15, A14, AMI_1:121, XXREAL_0:2 ;
A17: Computation (s +* (I +* (Start-At (insloc 0 )))),(k + 1) = Following (Computation (s +* (I +* (Start-At (insloc 0 )))),k) by AMI_1:14
.= Exec (CurInstr (Computation (s +* (I +* (Start-At (insloc 0 )))),k)),(Computation (s +* (I +* (Start-At (insloc 0 )))),k) ;
hence Computation (s +* (I +* (Start-At (insloc 0 )))),(k + 1), Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1) equal_outside NAT by A9, A15, A14, A16, A10, SCMFSA6A:32, XXREAL_0:2; :: thesis: CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1)) <> halt SCM+FSA
thus CurInstr (Computation (s +* ((Directed I) +* (Start-At (insloc 0 )))),(k + 1)) <> halt SCM+FSA by A3, A9, A15, A14, A16, A17, A10, SCMFSA6A:32, XXREAL_0:2; :: thesis: verum
end;
then A18: for k being Element of NAT st S1[k] holds
S1[k + 1] ;
now end;
then A20: S1[ 0 ] ;
thus for k being Element of NAT holds S1[k] from NAT_1:sch 1(A20, A18); :: thesis: verum