set D = Int-Locations \/ FinSeq-Locations ;
let I be good InitHalting Program of SCM+FSA ; :: thesis: for a being read-write Int-Location st ( for s being State of SCM+FSA st s . a > 0 holds
(IExec I,s) . a < s . a ) holds
while>0 a,I is InitHalting

let a be read-write Int-Location ; :: thesis: ( ( for s being State of SCM+FSA st s . a > 0 holds
(IExec I,s) . a < s . a ) implies while>0 a,I is InitHalting )

assume A1: for s being State of SCM+FSA st s . a > 0 holds
(IExec I,s) . a < s . a ; :: thesis: while>0 a,I is InitHalting
defpred S1[ Element of NAT ] means for t being State of SCM+FSA st t . a <= $1 holds
while>0 a,I is_halting_onInit t;
A2: S1[ 0 ] by Th16;
A3: now
let k be Element of NAT ; :: thesis: ( S1[k] implies S1[k + 1] )
assume A4: S1[k] ; :: thesis: S1[k + 1]
now
let t be State of SCM+FSA ; :: thesis: ( t . a <= k + 1 implies while>0 a,I is_halting_onInit b1 )
assume A5: t . a <= k + 1 ; :: thesis: while>0 a,I is_halting_onInit b1
per cases ( t . a <> k + 1 or t . a = k + 1 ) ;
suppose A6: t . a = k + 1 ; :: thesis: while>0 a,I is_halting_onInit b1
A7: I is_closed_onInit t by SCM_HALT:35;
A8: I is_halting_onInit t by SCM_HALT:36;
set Iwhile = Initialized (while>0 a,I);
set tW0 = t +* (Initialized (while>0 a,I));
set t1 = t +* (Initialized I);
set Wt = Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3);
set A = NAT ;
set It = Computation (t +* (Initialized I)),(LifeSpan (t +* (Initialized I)));
A9: ( IC (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) = insloc 0 & DataPart (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) = DataPart (Computation (t +* (Initialized I)),(LifeSpan (t +* (Initialized I)))) ) by A6, A7, A8, Th21;
A10: t +* (Initialized I) is halting by A8, SCM_HALT:def 5;
set l0 = intloc 0 ;
now
assume intloc 0 in NAT ; :: thesis: contradiction
then reconsider l0 = intloc 0 as Instruction-Location of SCM+FSA by AMI_1:def 4;
l0 = l0 ;
hence contradiction by SCMFSA_2:84; :: thesis: verum
end;
then not intloc 0 in (dom t) /\ NAT by XBOOLE_0:def 4;
then A11: ( intloc 0 in dom (Result (t +* (Initialized I))) & not intloc 0 in dom (t | NAT ) ) by RELAT_1:90, SCMFSA_2:66;
A12: (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) . (intloc 0 ) = (Computation (t +* (Initialized I)),(LifeSpan (t +* (Initialized I)))) . (intloc 0 ) by A9, SCMFSA6A:38
.= (Result (t +* (Initialized I))) . (intloc 0 ) by A10, AMI_1:122
.= ((Result (t +* (Initialized I))) +* (t | NAT )) . (intloc 0 ) by A11, FUNCT_4:12
.= (IExec I,t) . (intloc 0 ) by SCMFSA6B:def 1
.= 1 by SCM_HALT:17 ;
A13: Initialized (while>0 a,I) c= t +* (Initialized (while>0 a,I)) by FUNCT_4:26;
while>0 a,I c= Initialized (while>0 a,I) by SCMFSA6A:26;
then while>0 a,I c= t +* (Initialized (while>0 a,I)) by A13, XBOOLE_1:1;
then while>0 a,I c= Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3) by AMI_1:81;
then (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) +* (while>0 a,I) = Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3) by FUNCT_4:79;
then A14: (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) +* (Initialized (while>0 a,I)) = Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3) by A9, A12, Th6;
now
assume a in NAT ; :: thesis: contradiction
then reconsider a = a as Instruction-Location of SCM+FSA by AMI_1:def 4;
a = a ;
hence contradiction by SCMFSA_2:84; :: thesis: verum
end;
then not a in (dom t) /\ NAT by XBOOLE_0:def 4;
then A15: ( a in dom (Result (t +* (Initialized I))) & not a in dom (t | NAT ) ) by RELAT_1:90, SCMFSA_2:66;
(Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) . a = (Computation (t +* (Initialized I)),(LifeSpan (t +* (Initialized I)))) . a by A9, SCMFSA6A:38
.= (Result (t +* (Initialized I))) . a by A10, AMI_1:122
.= ((Result (t +* (Initialized I))) +* (t | NAT )) . a by A15, FUNCT_4:12
.= (IExec I,t) . a by SCMFSA6B:def 1 ;
then (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) . a < k + 1 by A1, A6;
then while>0 a,I is_halting_onInit Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3) by A4, INT_1:20;
then A16: (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)) +* (Initialized (while>0 a,I)) is halting by SCM_HALT:def 5;
now end;
then t +* (Initialized (while>0 a,I)) is halting by AMI_1:def 20;
hence while>0 a,I is_halting_onInit t by SCM_HALT:def 5; :: thesis: verum
end;
end;
end;
hence S1[k + 1] ; :: thesis: verum
end;
A18: for k being Element of NAT holds S1[k] from NAT_1:sch 1(A2, A3);
now end;
hence while>0 a,I is InitHalting by SCM_HALT:36; :: thesis: verum