let s1, s2 be State of SCM+FSA; for I being Program of SCM+FSA
for a being Int-Location st not I refers a & ( for b being Int-Location st a <> b holds
s1 . b = s2 . b ) & ( for f being FinSeq-Location holds s1 . f = s2 . f ) & I is_closed_on s1 & I is_halting_on s1 holds
( I is_closed_on s2 & I is_halting_on s2 )
let I be Program of SCM+FSA; for a being Int-Location st not I refers a & ( for b being Int-Location st a <> b holds
s1 . b = s2 . b ) & ( for f being FinSeq-Location holds s1 . f = s2 . f ) & I is_closed_on s1 & I is_halting_on s1 holds
( I is_closed_on s2 & I is_halting_on s2 )
let a be Int-Location ; ( not I refers a & ( for b being Int-Location st a <> b holds
s1 . b = s2 . b ) & ( for f being FinSeq-Location holds s1 . f = s2 . f ) & I is_closed_on s1 & I is_halting_on s1 implies ( I is_closed_on s2 & I is_halting_on s2 ) )
assume A1:
not I refers a
; ( ex b being Int-Location st
( a <> b & not s1 . b = s2 . b ) or ex f being FinSeq-Location st not s1 . f = s2 . f or not I is_closed_on s1 or not I is_halting_on s1 or ( I is_closed_on s2 & I is_halting_on s2 ) )
set S2 = s2 +* (I +* (Start-At (0,SCM+FSA)));
set S1 = s1 +* (I +* (Start-At (0,SCM+FSA)));
assume A2:
for b being Int-Location st a <> b holds
s1 . b = s2 . b
; ( ex f being FinSeq-Location st not s1 . f = s2 . f or not I is_closed_on s1 or not I is_halting_on s1 or ( I is_closed_on s2 & I is_halting_on s2 ) )
A3:
now let b be
Int-Location ;
( a <> b implies (s1 +* (I +* (Start-At (0,SCM+FSA)))) . b = (s2 +* (I +* (Start-At (0,SCM+FSA)))) . b )assume A4:
a <> b
;
(s1 +* (I +* (Start-At (0,SCM+FSA)))) . b = (s2 +* (I +* (Start-At (0,SCM+FSA)))) . bA5:
not
b in dom (I +* (Start-At (0,SCM+FSA)))
by SCMFSA6B:12;
not
b in dom (I +* (Start-At (0,SCM+FSA)))
by SCMFSA6B:12;
hence (s1 +* (I +* (Start-At (0,SCM+FSA)))) . b =
s1 . b
by FUNCT_4:12
.=
s2 . b
by A2, A4
.=
(s2 +* (I +* (Start-At (0,SCM+FSA)))) . b
by A5, FUNCT_4:12
;
verum end;
assume A6:
for f being FinSeq-Location holds s1 . f = s2 . f
; ( not I is_closed_on s1 or not I is_halting_on s1 or ( I is_closed_on s2 & I is_halting_on s2 ) )
A9:
(I +* (Start-At (0,SCM+FSA))) +* (I +* (Start-At (0,SCM+FSA))) = I +* (Start-At (0,SCM+FSA))
;
then A10:
(s1 +* (I +* (Start-At (0,SCM+FSA)))) +* (I +* (Start-At (0,SCM+FSA))) = s1 +* (I +* (Start-At (0,SCM+FSA)))
by FUNCT_4:15;
A11:
(s2 +* (I +* (Start-At (0,SCM+FSA)))) +* (I +* (Start-At (0,SCM+FSA))) = s2 +* (I +* (Start-At (0,SCM+FSA)))
by A9, FUNCT_4:15;
assume that
A12:
I is_closed_on s1
and
A13:
I is_halting_on s1
; ( I is_closed_on s2 & I is_halting_on s2 )
A14:
I is_closed_on s1 +* (I +* (Start-At (0,SCM+FSA)))
by A12, A13, Th39;
A15:
now let k be
Element of
NAT ;
IC (Comput ((ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA))))),(s2 +* (I +* (Start-At (0,SCM+FSA)))),k)) in dom I
IC (Comput ((ProgramPart (s1 +* (I +* (Start-At (0,SCM+FSA))))),(s1 +* (I +* (Start-At (0,SCM+FSA)))),k)) in dom I
by A12, SCMFSA7B:def 7;
hence
IC (Comput ((ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA))))),(s2 +* (I +* (Start-At (0,SCM+FSA)))),k)) in dom I
by A1, A3, A7, A10, A11, A14, Th38;
verum end;
ProgramPart (s1 +* (I +* (Start-At (0,SCM+FSA)))) halts_on s1 +* (I +* (Start-At (0,SCM+FSA)))
by A13, SCMFSA7B:def 8;
then consider n being Element of NAT such that
A16:
CurInstr ((ProgramPart (s1 +* (I +* (Start-At (0,SCM+FSA))))),(Comput ((ProgramPart (s1 +* (I +* (Start-At (0,SCM+FSA))))),(s1 +* (I +* (Start-At (0,SCM+FSA)))),n))) = halt SCM+FSA
by EXTPRO_1:30;
TX1:
ProgramPart (s1 +* (I +* (Start-At (0,SCM+FSA)))) = ProgramPart (Comput ((ProgramPart (s1 +* (I +* (Start-At (0,SCM+FSA))))),(s1 +* (I +* (Start-At (0,SCM+FSA)))),n))
by AMI_1:123;
TX2:
ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA)))) = ProgramPart (Comput ((ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA))))),(s2 +* (I +* (Start-At (0,SCM+FSA)))),n))
by AMI_1:123;
CurInstr ((ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA))))),(Comput ((ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA))))),(s2 +* (I +* (Start-At (0,SCM+FSA)))),n))) = halt SCM+FSA
by A1, A3, A7, A10, A11, A14, A16, Th38, TX1, TX2;
then
ProgramPart (s2 +* (I +* (Start-At (0,SCM+FSA)))) halts_on s2 +* (I +* (Start-At (0,SCM+FSA)))
by EXTPRO_1:30;
hence
( I is_closed_on s2 & I is_halting_on s2 )
by A15, SCMFSA7B:def 7, SCMFSA7B:def 8; verum