let s1, s2 be State of SCM+FSA; for i being Instruction of SCM+FSA
for a being Int-Location st ( for b being Int-Location st a <> b holds
s1 . b = s2 . b ) & ( for f being FinSeq-Location holds s1 . f = s2 . f ) & not i refers a & IC s1 = IC s2 holds
( ( for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . b ) & ( for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . f ) & IC (Exec (i,s1)) = IC (Exec (i,s2)) )
let i be Instruction of SCM+FSA; for a being Int-Location st ( for b being Int-Location st a <> b holds
s1 . b = s2 . b ) & ( for f being FinSeq-Location holds s1 . f = s2 . f ) & not i refers a & IC s1 = IC s2 holds
( ( for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . b ) & ( for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . f ) & IC (Exec (i,s1)) = IC (Exec (i,s2)) )
let a be Int-Location; ( ( for b being Int-Location st a <> b holds
s1 . b = s2 . b ) & ( for f being FinSeq-Location holds s1 . f = s2 . f ) & not i refers a & IC s1 = IC s2 implies ( ( for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . b ) & ( for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . f ) & IC (Exec (i,s1)) = IC (Exec (i,s2)) ) )
defpred S1[ State of SCM+FSA, State of SCM+FSA] means ( ( for b being Int-Location st a <> b holds
$1 . b = $2 . b ) & ( for f being FinSeq-Location holds $1 . f = $2 . f ) );
assume A1:
S1[s1,s2]
; ( i refers a or not IC s1 = IC s2 or ( ( for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . b ) & ( for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . f ) & IC (Exec (i,s1)) = IC (Exec (i,s2)) ) )
assume A2:
not i refers a
; ( not IC s1 = IC s2 or ( ( for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . b ) & ( for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . f ) & IC (Exec (i,s1)) = IC (Exec (i,s2)) ) )
A3:
InsCode i <= 12
by SCMFSA_2:16;
A4:
now for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . blet b be
Int-Location;
( a <> b implies (Exec (i,s1)) . b1 = (Exec (i,s2)) . b1 )assume A5:
a <> b
;
(Exec (i,s1)) . b1 = (Exec (i,s2)) . b1
not not
InsCode i = 0 & ... & not
InsCode i = 12
by A3;
per cases then
( InsCode i = 0 or InsCode i = 1 or InsCode i = 2 or InsCode i = 3 or InsCode i = 4 or InsCode i = 5 or InsCode i = 6 or InsCode i = 7 or InsCode i = 8 or InsCode i = 9 or InsCode i = 10 or InsCode i = 11 or InsCode i = 12 )
;
suppose
InsCode i = 9
;
(Exec (i,s1)) . b1 = (Exec (i,s2)) . b1then consider db,
da being
Int-Location,
g being
FinSeq-Location such that A32:
i = da := (
g,
db)
by SCMFSA_2:38;
A33:
a <> db
by A2, A32, SCMFSA7B:def 1;
hereby verum
per cases
( b = da or b <> da )
;
suppose A34:
b = da
;
(Exec (i,s1)) . b = (Exec (i,s2)) . bthen consider m2 being
Nat such that A35:
m2 = |.(s2 . db).|
and A36:
(Exec ((da := (g,db)),s2)) . b = (s2 . g) /. m2
by SCMFSA_2:72;
consider m1 being
Nat such that A37:
m1 = |.(s1 . db).|
and A38:
(Exec ((da := (g,db)),s1)) . b = (s1 . g) /. m1
by A34, SCMFSA_2:72;
m1 = m2
by A1, A33, A37, A35;
hence
(Exec (i,s1)) . b = (Exec (i,s2)) . b
by A1, A32, A38, A36;
verum end; end;
end; end; end; end;
assume A45:
IC s1 = IC s2
; ( ( for b being Int-Location st a <> b holds
(Exec (i,s1)) . b = (Exec (i,s2)) . b ) & ( for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . f ) & IC (Exec (i,s1)) = IC (Exec (i,s2)) )
now for f being FinSeq-Location holds (Exec (i,s1)) . f = (Exec (i,s2)) . flet f be
FinSeq-Location ;
(Exec (i,s1)) . b1 = (Exec (i,s2)) . b1
not not
InsCode i = 0 & ... & not
InsCode i = 12
by A3;
per cases then
( InsCode i = 0 or InsCode i = 1 or InsCode i = 2 or InsCode i = 3 or InsCode i = 4 or InsCode i = 5 or InsCode i = 6 or InsCode i = 7 or InsCode i = 8 or InsCode i = 9 or InsCode i = 10 or InsCode i = 11 or InsCode i = 12 )
;
suppose
InsCode i = 10
;
(Exec (i,s1)) . b1 = (Exec (i,s2)) . b1then consider db,
da being
Int-Location,
g being
FinSeq-Location such that A56:
i = (
g,
db)
:= da
by SCMFSA_2:39;
A57:
a <> db
by A2, A56, SCMFSA7B:def 1;
A58:
a <> da
by A2, A56, SCMFSA7B:def 1;
hereby verum
per cases
( f = g or f <> g )
;
suppose A59:
f = g
;
(Exec (i,s1)) . f = (Exec (i,s2)) . fA60:
s1 . da = s2 . da
by A1, A58;
consider m2 being
Nat such that A61:
m2 = |.(s2 . db).|
and A62:
(Exec (((g,db) := da),s2)) . g = (s2 . g) +* (
m2,
(s2 . da))
by SCMFSA_2:73;
consider m1 being
Nat such that A63:
m1 = |.(s1 . db).|
and A64:
(Exec (((g,db) := da),s1)) . g = (s1 . g) +* (
m1,
(s1 . da))
by SCMFSA_2:73;
m1 = m2
by A1, A57, A63, A61;
hence
(Exec (i,s1)) . f = (Exec (i,s2)) . f
by A1, A56, A59, A64, A62, A60;
verum end; end;
end; end; suppose
InsCode i = 12
;
(Exec (i,s1)) . b1 = (Exec (i,s2)) . b1then consider da being
Int-Location,
g being
FinSeq-Location such that A67:
i = g :=<0,...,0> da
by SCMFSA_2:41;
A68:
a <> da
by A2, A67, SCMFSA7B:def 1;
hereby verum
per cases
( f = g or f <> g )
;
suppose A69:
f = g
;
(Exec (i,s1)) . f = (Exec (i,s2)) . fA70:
ex
m2 being
Nat st
(
m2 = |.(s2 . da).| &
(Exec ((g :=<0,...,0> da),s2)) . g = m2 |-> 0 )
by SCMFSA_2:75;
ex
m1 being
Nat st
(
m1 = |.(s1 . da).| &
(Exec ((g :=<0,...,0> da),s1)) . g = m1 |-> 0 )
by SCMFSA_2:75;
hence
(Exec (i,s1)) . f = (Exec (i,s2)) . f
by A1, A67, A68, A69, A70;
verum end; end;
end; end; end; end;
hence
S1[ Exec (i,s1), Exec (i,s2)]
by A4; IC (Exec (i,s1)) = IC (Exec (i,s2))
hence
IC (Exec (i,s1)) = IC (Exec (i,s2))
; verum