set A = NAT ;
let s be State of SCM+FSA ; :: thesis: for I being good Program of SCM+FSA st I is_halting_on Initialize s & I is_closed_on Initialize s holds
( (IExec I,s) . (intloc 0 ) = 1 & ( for k being Element of NAT holds (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1 ) )

let I be good Program of SCM+FSA ; :: thesis: ( I is_halting_on Initialize s & I is_closed_on Initialize s implies ( (IExec I,s) . (intloc 0 ) = 1 & ( for k being Element of NAT holds (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1 ) ) )
set s0 = Initialize s;
set s1 = (Initialize s) +* (I +* (Start-At (insloc 0 )));
set a = intloc 0 ;
assume I is_halting_on Initialize s ; :: thesis: ( not I is_closed_on Initialize s or ( (IExec I,s) . (intloc 0 ) = 1 & ( for k being Element of NAT holds (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1 ) ) )
then A1: (Initialize s) +* (I +* (Start-At (insloc 0 ))) is halting by SCMFSA7B:def 8;
assume A2: I is_closed_on Initialize s ; :: thesis: ( (IExec I,s) . (intloc 0 ) = 1 & ( for k being Element of NAT holds (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1 ) )
defpred S1[ Element of NAT ] means for n being Element of NAT st n <= $1 holds
(Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 );
A3: S1[ 0 ]
proof
let n be Element of NAT ; :: thesis: ( n <= 0 implies (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 ) )
assume A4: n <= 0 ; :: thesis: (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 )
for i being Element of NAT st i < 0 holds
IC (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),i) in dom I ;
hence (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 ) by A4, Th95; :: thesis: verum
end;
A5: 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] )
assume S1[k] ; :: thesis: S1[k + 1]
let n be Element of NAT ; :: thesis: ( n <= k + 1 implies (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 ) )
assume A6: n <= k + 1 ; :: thesis: (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 )
for i being Element of NAT st i < k + 1 holds
IC (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),i) in dom I by A2, SCMFSA7B:def 7;
hence (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),n) . (intloc 0 ) = (Initialize s) . (intloc 0 ) by A6, Th95; :: thesis: verum
end;
A7: for k being Element of NAT holds S1[k] from NAT_1:sch 1(A3, A5);
A8: now
let k be Element of NAT ; :: thesis: (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1
thus (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = (Initialize s) . (intloc 0 ) by A7
.= 1 by SCMFSA6C:3 ; :: thesis: verum
end;
now end;
then not intloc 0 in (dom s) /\ NAT by XBOOLE_0:def 4;
then A10: ( intloc 0 in dom (Result ((Initialize s) +* (I +* (Start-At (insloc 0 ))))) & not intloc 0 in dom (s | NAT ) ) by RELAT_1:90, SCMFSA_2:66;
s +* (Initialized I) = (Initialize s) +* (I +* (Start-At (insloc 0 ))) by SCMFSA8A:13;
hence (IExec I,s) . (intloc 0 ) = ((Result ((Initialize s) +* (I +* (Start-At (insloc 0 ))))) +* (s | NAT )) . (intloc 0 ) by SCMFSA6B:def 1
.= (Result ((Initialize s) +* (I +* (Start-At (insloc 0 ))))) . (intloc 0 ) by A10, FUNCT_4:12
.= (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),(LifeSpan ((Initialize s) +* (I +* (Start-At (insloc 0 )))))) . (intloc 0 ) by A1, AMI_1:122
.= 1 by A8 ;
:: thesis: for k being Element of NAT holds (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1
thus for k being Element of NAT holds (Computation ((Initialize s) +* (I +* (Start-At (insloc 0 )))),k) . (intloc 0 ) = 1 by A8; :: thesis: verum