consider D0 being non empty set such that
W:
the Instructions of S c= [:NAT ,(D0 * ):]
by AMI_1:def 32;
set D = D0 \/ NAT ;
defpred S1[ set , set ] means ( ( (product" (AddressParts (InsCode I))) . $1 = NAT implies ex il being Element of NAT st
( il = (AddressPart I) . $1 & $2 = il. S,(k + (locnum il,S)) ) ) & ( (product" (AddressParts (InsCode I))) . $1 <> NAT implies $2 = (AddressPart I) . $1 ) );
A1:
for m being Nat st m in Seg (len (AddressPart I)) holds
ex x being Element of D0 \/ NAT st S1[m,x]
consider p being FinSequence of D0 \/ NAT such that
A6:
dom p = Seg (len (AddressPart I))
and
A7:
for k being Nat st k in Seg (len (AddressPart I)) holds
S1[k,p . k]
from FINSEQ_1:sch 5(A1);
set f = product" (AddressParts (InsCode I));
A8:
AddressPart I in AddressParts (InsCode I)
;
then A9:
AddressParts (InsCode I) = product (product" (AddressParts (InsCode I)))
by CARD_3:95;
A10: dom p =
dom (AddressPart I)
by A6, FINSEQ_1:def 3
.=
DOM (AddressParts (InsCode I))
by A8, CARD_3:def 12
.=
dom (product" (AddressParts (InsCode I)))
by CARD_3:92
;
for z being set st z in dom p holds
p . z in (product" (AddressParts (InsCode I))) . z
then
p in AddressParts (InsCode I)
by A9, A10, CARD_3:18;
then consider IT being Instruction of S such that
A14:
p = AddressPart IT
and
A15:
InsCode I = InsCode IT
;
take
IT
; ( InsCode IT = InsCode I & dom (AddressPart IT) = dom (AddressPart I) & ( for n being set st n in dom (AddressPart I) holds
( ( (product" (AddressParts (InsCode I))) . n = NAT implies ex f being Element of NAT st
( f = (AddressPart I) . n & (AddressPart IT) . n = il. S,(k + (locnum f,S)) ) ) & ( (product" (AddressParts (InsCode I))) . n <> NAT implies (AddressPart IT) . n = (AddressPart I) . n ) ) ) )
thus
InsCode IT = InsCode I
by A15; ( dom (AddressPart IT) = dom (AddressPart I) & ( for n being set st n in dom (AddressPart I) holds
( ( (product" (AddressParts (InsCode I))) . n = NAT implies ex f being Element of NAT st
( f = (AddressPart I) . n & (AddressPart IT) . n = il. S,(k + (locnum f,S)) ) ) & ( (product" (AddressParts (InsCode I))) . n <> NAT implies (AddressPart IT) . n = (AddressPart I) . n ) ) ) )
thus
dom (AddressPart IT) = dom (AddressPart I)
by A6, A14, FINSEQ_1:def 3; for n being set st n in dom (AddressPart I) holds
( ( (product" (AddressParts (InsCode I))) . n = NAT implies ex f being Element of NAT st
( f = (AddressPart I) . n & (AddressPart IT) . n = il. S,(k + (locnum f,S)) ) ) & ( (product" (AddressParts (InsCode I))) . n <> NAT implies (AddressPart IT) . n = (AddressPart I) . n ) )
let n be set ; ( n in dom (AddressPart I) implies ( ( (product" (AddressParts (InsCode I))) . n = NAT implies ex f being Element of NAT st
( f = (AddressPart I) . n & (AddressPart IT) . n = il. S,(k + (locnum f,S)) ) ) & ( (product" (AddressParts (InsCode I))) . n <> NAT implies (AddressPart IT) . n = (AddressPart I) . n ) ) )
assume A16:
n in dom (AddressPart I)
; ( ( (product" (AddressParts (InsCode I))) . n = NAT implies ex f being Element of NAT st
( f = (AddressPart I) . n & (AddressPart IT) . n = il. S,(k + (locnum f,S)) ) ) & ( (product" (AddressParts (InsCode I))) . n <> NAT implies (AddressPart IT) . n = (AddressPart I) . n ) )
then reconsider n = n as Element of NAT ;
n in Seg (len (AddressPart I))
by A16, FINSEQ_1:def 3;
hence
( ( (product" (AddressParts (InsCode I))) . n = NAT implies ex f being Element of NAT st
( f = (AddressPart I) . n & (AddressPart IT) . n = il. S,(k + (locnum f,S)) ) ) & ( (product" (AddressParts (InsCode I))) . n <> NAT implies (AddressPart IT) . n = (AddressPart I) . n ) )
by A7, A14; verum