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 b1per cases
( t . a <> k + 1 or t . a = k + 1 )
;
suppose A6:
t . a = k + 1
;
:: thesis: while>0 a,I is_halting_onInit b1A7:
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 ;
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;
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 consider m being
Element of
NAT such that A17:
CurInstr (Computation (Computation (t +* (Initialized (while>0 a,I))),((LifeSpan (t +* (Initialized I))) + 3)),m) = halt SCM+FSA
by A14, A16, AMI_1:def 20;
take mm =
((LifeSpan (t +* (Initialized I))) + 3) + m;
:: thesis: CurInstr (Computation (t +* (Initialized (while>0 a,I))),mm) = halt SCM+FSA thus
CurInstr (Computation (t +* (Initialized (while>0 a,I))),mm) = halt SCM+FSA
by A17, AMI_1:51;
:: thesis: verum 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);
hence
while>0 a,I is InitHalting
by SCM_HALT:36; :: thesis: verum