let I be InitHalting good Program of SCM+FSA; 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 ; ( ( 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 )
set D = Int-Locations \/ FinSeq-Locations;
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;
assume A1:
for s being State of SCM+FSA st s . a > 0 holds
(IExec (I,s)) . a < s . a
; while>0 (a,I) is InitHalting
A2:
now let k be
Element of
NAT ;
( S1[k] implies S1[k + 1] )assume A3:
S1[
k]
;
S1[k + 1]now let t be
State of
SCM+FSA;
( t . a <= k + 1 implies while>0 (a,I) is_halting_onInit b1 )assume A4:
t . a <= k + 1
;
while>0 (a,I) is_halting_onInit b1per cases
( t . a <> k + 1 or t . a = k + 1 )
;
suppose A5:
t . a = k + 1
;
while>0 (a,I) is_halting_onInit b1set l0 =
intloc 0;
set Iwhile =
Initialized (while>0 (a,I));
set tW0 =
t +* (Initialized (while>0 (a,I)));
set t1 =
t +* (Initialized I);
set Wt =
Comput (
(ProgramPart (t +* (Initialized (while>0 (a,I))))),
(t +* (Initialized (while>0 (a,I)))),
((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3));
set A =
NAT ;
set It =
Comput (
(ProgramPart (t +* (Initialized I))),
(t +* (Initialized I)),
(LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))));
A6:
I is_halting_onInit t
by SCM_HALT:36;
then A7:
ProgramPart (t +* (Initialized I)) halts_on t +* (Initialized I)
by SCM_HALT:def 5;
not
intloc 0 in NAT
by SCMFSA_2:84;
then
not
intloc 0 in (dom t) /\ NAT
by XBOOLE_0:def 4;
then A8:
not
intloc 0 in dom (t | NAT)
by RELAT_1:90;
A9:
I is_closed_onInit t
by SCM_HALT:35;
then A10:
DataPart (Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) = DataPart (Comput ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)),(LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I))))))
by A5, A6, Th21;
then A11:
(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) . (intloc 0) =
(Comput ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)),(LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))))) . (intloc 0)
by SCMFSA6A:38
.=
(Result ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) . (intloc 0)
by A7, EXTPRO_1:23
.=
((Result ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) +* (t | NAT)) . (intloc 0)
by A8, FUNCT_4:12
.=
(IExec (I,t)) . (intloc 0)
by SCMFSA6B:def 1
.=
1
by SCM_HALT:17
;
not
a in NAT
by SCMFSA_2:84;
then
not
a in (dom t) /\ NAT
by XBOOLE_0:def 4;
then A12:
not
a in dom (t | NAT)
by RELAT_1:90;
A13:
while>0 (
a,
I)
c= Initialized (while>0 (a,I))
by SCMFSA6A:26;
Initialized (while>0 (a,I)) c= t +* (Initialized (while>0 (a,I)))
by FUNCT_4:26;
then
while>0 (
a,
I)
c= t +* (Initialized (while>0 (a,I)))
by A13, XBOOLE_1:1;
then
while>0 (
a,
I)
c= Comput (
(ProgramPart (t +* (Initialized (while>0 (a,I))))),
(t +* (Initialized (while>0 (a,I)))),
((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))
by AMI_1:81;
then A14:
(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) +* (while>0 (a,I)) = Comput (
(ProgramPart (t +* (Initialized (while>0 (a,I))))),
(t +* (Initialized (while>0 (a,I)))),
((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))
by FUNCT_4:79;
(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) . a =
(Comput ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)),(LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))))) . a
by A10, SCMFSA6A:38
.=
(Result ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) . a
by A7, EXTPRO_1:23
.=
((Result ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) +* (t | NAT)) . a
by A12, FUNCT_4:12
.=
(IExec (I,t)) . a
by SCMFSA6B:def 1
;
then
(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) . a < k + 1
by A1, A5;
then
while>0 (
a,
I)
is_halting_onInit Comput (
(ProgramPart (t +* (Initialized (while>0 (a,I))))),
(t +* (Initialized (while>0 (a,I)))),
((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))
by A3, INT_1:20;
then A15:
ProgramPart ((Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) +* (Initialized (while>0 (a,I)))) halts_on (Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) +* (Initialized (while>0 (a,I)))
by SCM_HALT:def 5;
IC (Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) = 0
by A5, A9, A6, Th21;
then A16:
(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))) +* (Initialized (while>0 (a,I))) = Comput (
(ProgramPart (t +* (Initialized (while>0 (a,I))))),
(t +* (Initialized (while>0 (a,I)))),
((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))
by A11, A14, Th6;
now consider m being
Element of
NAT such that A17:
CurInstr (
(ProgramPart (Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3)))),
(Comput ((ProgramPart (Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3)))),(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3))),m)))
= halt SCM+FSA
by A16, A15, EXTPRO_1:30;
take mm =
((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3) + m;
CurInstr ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),mm))) = halt SCM+FSAT:
ProgramPart (t +* (Initialized (while>0 (a,I)))) = ProgramPart (Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),((LifeSpan ((ProgramPart (t +* (Initialized I))),(t +* (Initialized I)))) + 3)))
by AMI_1:123;
thus
CurInstr (
(ProgramPart (t +* (Initialized (while>0 (a,I))))),
(Comput ((ProgramPart (t +* (Initialized (while>0 (a,I))))),(t +* (Initialized (while>0 (a,I)))),mm)))
= halt SCM+FSA
by A17, T, EXTPRO_1:5;
verum end; then
ProgramPart (t +* (Initialized (while>0 (a,I)))) halts_on t +* (Initialized (while>0 (a,I)))
by EXTPRO_1:30;
hence
while>0 (
a,
I)
is_halting_onInit t
by SCM_HALT:def 5;
verum end; end; end; hence
S1[
k + 1]
;
verum end;
A18:
S1[ 0 ]
by Th16;
A19:
for k being Element of NAT holds S1[k]
from NAT_1:sch 1(A18, A2);
hence
while>0 (a,I) is InitHalting
by SCM_HALT:36; verum