let p1, p2 be Instruction-Sequence of SCM+FSA; for s1, s2 being State of SCM+FSA
for a being read-write Int-Location
for I being Program of SCM+FSA st ProperBodyWhile=0 a,I,s1,p1 & DataPart s1 = DataPart s2 holds
for k being Element of NAT holds DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart ((StepWhile=0 (a,I,p2,s2)) . k)
let s1, s2 be State of SCM+FSA; for a being read-write Int-Location
for I being Program of SCM+FSA st ProperBodyWhile=0 a,I,s1,p1 & DataPart s1 = DataPart s2 holds
for k being Element of NAT holds DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart ((StepWhile=0 (a,I,p2,s2)) . k)
let a be read-write Int-Location ; for I being Program of SCM+FSA st ProperBodyWhile=0 a,I,s1,p1 & DataPart s1 = DataPart s2 holds
for k being Element of NAT holds DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart ((StepWhile=0 (a,I,p2,s2)) . k)
let I be Program of SCM+FSA; ( ProperBodyWhile=0 a,I,s1,p1 & DataPart s1 = DataPart s2 implies for k being Element of NAT holds DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart ((StepWhile=0 (a,I,p2,s2)) . k) )
assume that
A1:
ProperBodyWhile=0 a,I,s1,p1
and
A2:
DataPart s1 = DataPart s2
; for k being Element of NAT holds DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart ((StepWhile=0 (a,I,p2,s2)) . k)
set WH = while=0 (a,I);
set ST2 = StepWhile=0 (a,I,p2,s2);
set PT2 = p2 +* (while=0 (a,I));
set ST1 = StepWhile=0 (a,I,p1,s1);
set PT1 = p1 +* (while=0 (a,I));
A3:
(p2 +* (while=0 (a,I))) +* (while=0 (a,I)) = p2 +* (while=0 (a,I))
by FUNCT_4:93;
A4:
(p1 +* (while=0 (a,I))) +* (while=0 (a,I)) = p1 +* (while=0 (a,I))
by FUNCT_4:93;
defpred S1[ Nat] means DataPart ((StepWhile=0 (a,I,p1,s1)) . $1) = DataPart ((StepWhile=0 (a,I,p2,s2)) . $1);
A5:
for k being Element of NAT st S1[k] holds
S1[k + 1]
proof
let k be
Element of
NAT ;
( S1[k] implies S1[k + 1] )
set ST1kI =
Initialize ((StepWhile=0 (a,I,p1,s1)) . k);
set PT1I =
(p1 +* (while=0 (a,I))) +* I;
set ST2kI =
Initialize ((StepWhile=0 (a,I,p2,s2)) . k);
set PT2I =
(p2 +* (while=0 (a,I))) +* I;
A6:
I c= (p1 +* (while=0 (a,I))) +* I
by FUNCT_4:25;
A7:
I c= (p2 +* (while=0 (a,I))) +* I
by FUNCT_4:25;
assume A8:
DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart ((StepWhile=0 (a,I,p2,s2)) . k)
;
S1[k + 1]
then A9:
((StepWhile=0 (a,I,p1,s1)) . k) . a = ((StepWhile=0 (a,I,p2,s2)) . k) . a
by SCMFSA6A:7;
per cases
( ((StepWhile=0 (a,I,p1,s1)) . k) . a <> 0 or ((StepWhile=0 (a,I,p1,s1)) . k) . a = 0 )
;
suppose A10:
((StepWhile=0 (a,I,p1,s1)) . k) . a <> 0
;
S1[k + 1]hence DataPart ((StepWhile=0 (a,I,p1,s1)) . (k + 1)) =
DataPart ((StepWhile=0 (a,I,p1,s1)) . k)
by Th24
.=
DataPart ((StepWhile=0 (a,I,p2,s2)) . (k + 1))
by A8, A9, A10, Th24
;
verum end; suppose A11:
((StepWhile=0 (a,I,p1,s1)) . k) . a = 0
;
S1[k + 1]then A12:
I is_closed_on (StepWhile=0 (a,I,p1,s1)) . k,
p1 +* (while=0 (a,I))
by A1, Def1;
A13:
I is_halting_on (StepWhile=0 (a,I,p1,s1)) . k,
p1 +* (while=0 (a,I))
by A1, A11, Def1;
then A14:
(
I is_closed_on (StepWhile=0 (a,I,p2,s2)) . k,
p2 +* (while=0 (a,I)) &
I is_halting_on (StepWhile=0 (a,I,p2,s2)) . k,
p2 +* (while=0 (a,I)) )
by A8, A12, SCMFSA8B:5;
A15:
DataPart ((StepWhile=0 (a,I,p1,s1)) . (k + 1)) =
DataPart (Comput (((p1 +* (while=0 (a,I))) +* (while=0 (a,I))),(Initialize ((StepWhile=0 (a,I,p1,s1)) . k)),((LifeSpan (((p1 +* (while=0 (a,I))) +* I),(Initialize ((StepWhile=0 (a,I,p1,s1)) . k)))) + 3)))
by A4, SCMFSA_9:def 4
.=
DataPart (Comput (((p1 +* (while=0 (a,I))) +* I),(Initialize ((StepWhile=0 (a,I,p1,s1)) . k)),(LifeSpan (((p1 +* (while=0 (a,I))) +* I),(Initialize ((StepWhile=0 (a,I,p1,s1)) . k))))))
by A11, A12, A13, Th23
;
A16:
DataPart ((StepWhile=0 (a,I,p2,s2)) . (k + 1)) =
DataPart (Comput (((p2 +* (while=0 (a,I))) +* (while=0 (a,I))),(Initialize ((StepWhile=0 (a,I,p2,s2)) . k)),((LifeSpan (((p2 +* (while=0 (a,I))) +* I),(Initialize ((StepWhile=0 (a,I,p2,s2)) . k)))) + 3)))
by A3, SCMFSA_9:def 4
.=
DataPart (Comput (((p2 +* (while=0 (a,I))) +* I),(Initialize ((StepWhile=0 (a,I,p2,s2)) . k)),(LifeSpan (((p2 +* (while=0 (a,I))) +* I),(Initialize ((StepWhile=0 (a,I,p2,s2)) . k))))))
by A9, A11, A14, Th23
;
A18:
DataPart ((StepWhile=0 (a,I,p1,s1)) . k) = DataPart (Initialize ((StepWhile=0 (a,I,p1,s1)) . k))
by MEMSTR_0:79;
then A19:
I is_closed_on Initialize ((StepWhile=0 (a,I,p1,s1)) . k),
(p1 +* (while=0 (a,I))) +* I
by A12, SCMFSA8B:3;
A20:
DataPart (Initialize ((StepWhile=0 (a,I,p1,s1)) . k)) =
DataPart ((StepWhile=0 (a,I,p1,s1)) . k)
by MEMSTR_0:79
.=
DataPart (Initialize ((StepWhile=0 (a,I,p2,s2)) . k))
by A8, MEMSTR_0:79
;
I is_halting_on Initialize ((StepWhile=0 (a,I,p1,s1)) . k),
(p1 +* (while=0 (a,I))) +* I
by A12, A13, A18, SCMFSA8B:5;
then
LifeSpan (
((p1 +* (while=0 (a,I))) +* I),
(Initialize ((StepWhile=0 (a,I,p1,s1)) . k)))
= LifeSpan (
((p2 +* (while=0 (a,I))) +* I),
(Initialize ((StepWhile=0 (a,I,p2,s2)) . k)))
by A12, A20, A18, A6, A7, SCMFSA8B:3, SCMFSA8C:18;
hence
S1[
k + 1]
by A15, A16, A20, A19, A6, A7, SCMFSA8C:17;
verum end; end;
end;
DataPart ((StepWhile=0 (a,I,p1,s1)) . 0) =
DataPart s1
by SCMFSA_9:def 4
.=
DataPart ((StepWhile=0 (a,I,p2,s2)) . 0)
by A2, SCMFSA_9:def 4
;
then A21:
S1[ 0 ]
;
thus
for k being Element of NAT holds S1[k]
from NAT_1:sch 1(A21, A5); verum