let s be State of SCM+FSA; for p being Instruction-Sequence of SCM+FSA
for k being Nat
for a being read-write Int-Location
for J being good really-closed MacroInstruction of SCM+FSA st not J destroys a & s . a = k & ( ProperTimesBody a,J,s,p or J is parahalting ) holds
DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k)
let p be Instruction-Sequence of SCM+FSA; for k being Nat
for a being read-write Int-Location
for J being good really-closed MacroInstruction of SCM+FSA st not J destroys a & s . a = k & ( ProperTimesBody a,J,s,p or J is parahalting ) holds
DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k)
let k be Nat; for a being read-write Int-Location
for J being good really-closed MacroInstruction of SCM+FSA st not J destroys a & s . a = k & ( ProperTimesBody a,J,s,p or J is parahalting ) holds
DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k)
let a be read-write Int-Location; for J being good really-closed MacroInstruction of SCM+FSA st not J destroys a & s . a = k & ( ProperTimesBody a,J,s,p or J is parahalting ) holds
DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k)
let J be good really-closed MacroInstruction of SCM+FSA ; ( not J destroys a & s . a = k & ( ProperTimesBody a,J,s,p or J is parahalting ) implies DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k) )
set I = J;
assume A1:
not J destroys a
; ( not s . a = k or ( not ProperTimesBody a,J,s,p & not J is parahalting ) or DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k) )
assume A2:
s . a = k
; ( ( not ProperTimesBody a,J,s,p & not J is parahalting ) or DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k) )
set ST = StepTimes (a,J,p,s);
reconsider ISu = J ";" (SubFrom (a,(intloc 0))) as really-closed MacroInstruction of SCM+FSA ;
set s1 = Initialized s;
set Is1 = Initialized (Initialized s);
set SW = StepWhile>0 (a,ISu,p,(Initialized s));
set ISW = StepWhile>0 (a,ISu,p,(Initialized (Initialized s)));
set WH = while>0 (a,ISu);
assume A3:
( ProperTimesBody a,J,s,p or J is parahalting )
; DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k)
then A4:
ProperTimesBody a,J,s,p
by Th50;
A5:
ProperBodyWhile>0 a,ISu, Initialized s,p
proof
let k be
Nat;
SCMFSA9A:def 4 ( ((StepWhile>0 (a,ISu,p,(Initialized s))) . k) . a > 0 implies ISu is_halting_on (StepWhile>0 (a,ISu,p,(Initialized s))) . k,p +* (while>0 (a,ISu)) )
assume
((StepWhile>0 (a,ISu,p,(Initialized s))) . k) . a > 0
;
ISu is_halting_on (StepWhile>0 (a,ISu,p,(Initialized s))) . k,p +* (while>0 (a,ISu))
then A6:
k < s . a
by A2, A4, Th53, A1;
then A7:
((StepTimes (a,J,p,s)) . k) . (intloc 0) = 1
by A3, Th50, Th51, A1;
then A8:
DataPart ((StepTimes (a,J,p,s)) . k) = DataPart (Initialized ((StepTimes (a,J,p,s)) . k))
by SCMFSA_M:19;
J is_halting_on (StepTimes (a,J,p,s)) . k,
p +* (Times (a,J))
by A4, A6;
then A9:
J is_halting_on Initialized ((StepTimes (a,J,p,s)) . k),
p +* (Times (a,J))
by A7, SCMFSA8B:42;
Macro (SubFrom (a,(intloc 0))) is_halting_on IExec (
J,
(p +* (Times (a,J))),
((StepTimes (a,J,p,s)) . k)),
p +* (Times (a,J))
by SCMFSA7B:19;
then
ISu is_halting_on Initialized ((StepTimes (a,J,p,s)) . k),
p +* (Times (a,J))
by A9, SFMASTR1:3;
hence
ISu is_halting_on (StepWhile>0 (a,ISu,p,(Initialized s))) . k,
p +* (while>0 (a,ISu))
by A8, SCMFSA8B:5;
verum
end;
A10:
WithVariantWhile>0 a,ISu, Initialized (Initialized s),p
proof
reconsider sa =
s . a as
Element of
NAT by A2, ORDINAL1:def 12;
deffunc H1(
State of
SCM+FSA)
-> Element of
NAT =
|.($1 . a).|;
consider f being
Function of
(product (the_Values_of SCM+FSA)),
NAT such that A11:
for
x being
Element of
product (the_Values_of SCM+FSA) holds
f . x = H1(
x)
from FUNCT_2:sch 4();
A12:
for
x being
State of
SCM+FSA holds
f . x = H1(
x)
take
f
;
SCMFSA9A:def 5 for k being Nat holds
( f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) < f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) or ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a <= 0 )
let k be
Nat;
( f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) < f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) or ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a <= 0 )
per cases
( k < s . a or k >= s . a )
;
suppose A13:
k < s . a
;
( f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) < f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) or ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a <= 0 )then A14:
k - k < (s . a) - k
by XREAL_1:9;
A15:
(((StepTimes (a,J,p,s)) . k) . a) + k = s . a
by A4, A13, Th52, A1;
A16:
k + 1
<= sa
by A13, NAT_1:13;
then A17:
(k + 1) - (k + 1) <= (s . a) - (k + 1)
by XREAL_1:9;
A18:
(((StepTimes (a,J,p,s)) . (k + 1)) . a) + (k + 1) = s . a
by A4, A16, Th52, A1;
then A19:
s . a = ((((StepTimes (a,J,p,s)) . (k + 1)) . a) + 1) + k
;
A20:
f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) =
|.(((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) . a).|
by A12
.=
((StepWhile>0 (a,ISu,p,(Initialized s))) . (k + 1)) . a
by A18, A17, ABSVALUE:def 1
;
f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) =
|.(((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a).|
by A12
.=
((StepWhile>0 (a,ISu,p,(Initialized s))) . k) . a
by A15, A14, ABSVALUE:def 1
;
hence
(
f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) < f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) or
((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a <= 0 )
by A15, A19, A20, NAT_1:13;
verum end; suppose
k >= s . a
;
( f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) < f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) or ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a <= 0 )hence
(
f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (k + 1)) < f . ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) or
((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a <= 0 )
by A2, A4, Th53, A1;
verum end; end;
end;
A21:
ProperBodyWhile>0 a,ISu, Initialized (Initialized s),p
by A5;
then consider K being Nat such that
A22:
ExitsAtWhile>0 (a,ISu,p,(Initialized (Initialized s))) = K
and
A23:
((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . K) . a <= 0
and
A24:
for i being Nat st ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . i) . a <= 0 holds
K <= i
and
DataPart (Comput ((p +* (while>0 (a,ISu))),(Initialize (Initialized (Initialized s))),(LifeSpan ((p +* (while>0 (a,ISu))),(Initialize (Initialized (Initialized s))))))) = DataPart ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . K)
by A10, Def6;
A25:
DataPart (IExec ((while>0 (a,ISu)),p,(Initialized s))) = DataPart ((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . (ExitsAtWhile>0 (a,ISu,p,(Initialized (Initialized s)))))
by A21, A10, Th36;
((StepWhile>0 (a,ISu,p,(Initialized s))) . k) . a = 0
by A2, A4, Th53, A1;
then
((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . k) . a = 0
;
then A26:
K <= k
by A24;
then A27:
(((StepWhile>0 (a,ISu,p,(Initialized s))) . K) . a) + K = k
by A2, A4, Th52, A1;
K - K <= k - K
by A26, XREAL_1:9;
then A28:
((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . K) . a = 0
by A23, A27;
A29:
(((StepWhile>0 (a,ISu,p,(Initialized (Initialized s)))) . K) . a) + K = k
by A27;
A30:
now for x being Int-Location holds (IExec ((Times (a,J)),p,s)) . x = ((StepTimes (a,J,p,s)) . k) . xlet x be
Int-Location;
(IExec ((Times (a,J)),p,s)) . x = ((StepTimes (a,J,p,s)) . k) . xthus (IExec ((Times (a,J)),p,s)) . x =
(IExec ((while>0 (a,ISu)),p,(Initialized s))) . x
by SCMFSA8C:3
.=
((StepTimes (a,J,p,s)) . k) . x
by A25, A22, A29, A28, SCMFSA_M:2
;
verum end;
now for x being FinSeq-Location holds (IExec ((Times (a,J)),p,s)) . x = ((StepTimes (a,J,p,s)) . k) . xlet x be
FinSeq-Location ;
(IExec ((Times (a,J)),p,s)) . x = ((StepTimes (a,J,p,s)) . k) . xthus (IExec ((Times (a,J)),p,s)) . x =
(IExec ((while>0 (a,ISu)),p,(Initialized s))) . x
by SCMFSA8C:3
.=
((StepTimes (a,J,p,s)) . k) . x
by A25, A22, A29, A28, SCMFSA_M:2
;
verum end;
hence
DataPart (IExec ((Times (a,J)),p,s)) = DataPart ((StepTimes (a,J,p,s)) . k)
by A30, SCMFSA_M:2; verum