defpred S1[ Integer, set ] means ex i being Integer st
( i = p . $1 & $2 = ((aSeq (intloc 1),$1) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> );
set D = the Instructions of SCM+FSA * ;
A1:
for k being Nat st k in Seg (len p) holds
ex d being Element of the Instructions of SCM+FSA * st S1[k,d]
consider pp being FinSequence of the Instructions of SCM+FSA * such that
A2:
len pp = len p
and
A3:
for k being Nat st k in Seg (len p) holds
S1[k,pp /. k]
from FINSEQ_4:sch 1(A1);
take
FlattenSeq pp
; ex pp being FinSequence of the Instructions of SCM+FSA * st
( len pp = len p & ( for k being Element of NAT st 1 <= k & k <= len p holds
ex i being Integer st
( i = p . k & pp . k = ((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> ) ) & FlattenSeq pp = FlattenSeq pp )
take
pp
; ( len pp = len p & ( for k being Element of NAT st 1 <= k & k <= len p holds
ex i being Integer st
( i = p . k & pp . k = ((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> ) ) & FlattenSeq pp = FlattenSeq pp )
thus
len pp = len p
by A2; ( ( for k being Element of NAT st 1 <= k & k <= len p holds
ex i being Integer st
( i = p . k & pp . k = ((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> ) ) & FlattenSeq pp = FlattenSeq pp )
hereby FlattenSeq pp = FlattenSeq pp
let k be
Element of
NAT ;
( 1 <= k & k <= len p implies ex i being Integer st
( i = p . k & ((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> = pp . k ) )assume A4:
( 1
<= k &
k <= len p )
;
ex i being Integer st
( i = p . k & ((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> = pp . k )then
k in dom p
by FINSEQ_3:27;
then
p . k in INT
by FINSEQ_2:13;
then reconsider i =
p . k as
Integer ;
take i =
i;
( i = p . k & ((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> = pp . k )thus
i = p . k
;
((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> = pp . k
k in Seg (len p)
by A4;
then
(
k in dom pp &
S1[
k,
pp /. k] )
by A2, A3, FINSEQ_1:def 3;
hence
((aSeq (intloc 1),k) ^ (aSeq (intloc 2),i)) ^ <*(f,(intloc 1) := (intloc 2))*> = pp . k
by PARTFUN1:def 8;
verum
end;
thus
FlattenSeq pp = FlattenSeq pp
; verum