set O = {0};
reconsider IC1 = 0 as Element of {0} by TARSKI:def 1;
A1: 0 in NAT * by FINSEQ_1:49;
0 in ((union N) \/ {0}) * by FINSEQ_1:49;
then ( [1,0,0] in [:NAT,(NAT *),(((union N) \/ {0}) *):] & [0,0,0] in [:NAT,(NAT *),(((union N) \/ {0}) *):] ) by A1, MCART_1:69;
then reconsider ins = {[1,0,0],[0,0,0]} as non empty Subset of [:NAT,(NAT *),(((union N) \/ {0}) *):] by ZFMISC_1:32;
reconsider i = [0,0,0] as Element of ins by TARSKI:def 2;
A2: dom (0 .--> NAT) = {0} by FUNCOP_1:13;
A3: {NAT} c= N \/ {NAT} by XBOOLE_1:7;
rng (0 .--> NAT) c= N \/ {NAT} by A3, FUNCOP_1:8;
then reconsider Ok = 0 .--> NAT as Function of {0},(N \/ {NAT}) by A2, RELSET_1:4;
deffunc H1( Element of product Ok) -> set = $1 +* (0 .--> (succ ($1 . 0)));
A4: now
let s be Element of product Ok; :: thesis: H1(s) in product Ok
now
thus dom (s +* (0 .--> (succ (s . 0)))) = (dom s) \/ (dom (0 .--> (succ (s . 0)))) by FUNCT_4:def 1
.= (dom s) \/ {0} by FUNCOP_1:13
.= {0} \/ {0} by PARTFUN1:def 2
.= dom Ok by FUNCOP_1:13 ; :: thesis: for o being set st o in dom Ok holds
(s +* (0 .--> (succ (s . 0)))) . o in Ok . o

let o be set ; :: thesis: ( o in dom Ok implies (s +* (0 .--> (succ (s . 0)))) . o in Ok . o )
A5: dom (0 .--> (succ (s . 0))) = {0} by FUNCOP_1:13;
assume Z: o in dom Ok ; :: thesis: (s +* (0 .--> (succ (s . 0)))) . o in Ok . o
A8: o = 0 by Z, TARSKI:def 1;
A10: Ok . o = NAT by Z, FUNCOP_1:7;
A12: (s +* (0 .--> (succ (s . 0)))) . o = (0 .--> (succ (s . 0))) . o by A5, Z, FUNCT_4:13
.= succ (s . 0) by Z, FUNCOP_1:7 ;
0 in dom Ok by A2, TARSKI:def 1;
then reconsider k = s . 0 as Element of NAT by A8, A10, CARD_3:9;
succ k in NAT ;
hence (s +* (0 .--> (succ (s . 0)))) . o in Ok . o by Z, FUNCOP_1:7, A12; :: thesis: verum
end;
hence H1(s) in product Ok by CARD_3:9; :: thesis: verum
end;
consider f being Function of (product Ok),(product Ok) such that
A13: for s being Element of product Ok holds f . s = H1(s) from FUNCT_2:sch 8(A4);
set E = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok)));
A14: dom (([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok)))) = (dom ([1,0,0] .--> f)) \/ (dom ([0,0,0] .--> (id (product Ok)))) by FUNCT_4:def 1
.= {[1,0,0]} \/ (dom ([0,0,0] .--> (id (product Ok)))) by FUNCOP_1:13
.= {[1,0,0]} \/ {[0,0,0]} by FUNCOP_1:13
.= ins by ENUMSET1:1 ;
A15: ( rng ([1,0,0] .--> f) c= {f} & rng ([0,0,0] .--> (id (product Ok))) c= {(id (product Ok))} ) by FUNCOP_1:13;
A16: rng (([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok)))) c= (rng ([1,0,0] .--> f)) \/ (rng ([0,0,0] .--> (id (product Ok)))) by FUNCT_4:17;
rng (([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok)))) c= Funcs ((product Ok),(product Ok))
proof
let e be set ; :: according to TARSKI:def 3 :: thesis: ( not e in rng (([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok)))) or e in Funcs ((product Ok),(product Ok)) )
assume e in rng (([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok)))) ; :: thesis: e in Funcs ((product Ok),(product Ok))
then ( e in rng ([1,0,0] .--> f) or e in rng ([0,0,0] .--> (id (product Ok))) ) by A16, XBOOLE_0:def 3;
then ( e = f or e = id (product Ok) ) by A15, TARSKI:def 1;
hence e in Funcs ((product Ok),(product Ok)) by FUNCT_2:9; :: thesis: verum
end;
then reconsider E = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product Ok))) as Function of ins,(Funcs ((product Ok),(product Ok))) by A14, FUNCT_2:def 1, RELSET_1:4;
set M = AMI-Struct(# {0},IC1,ins,i,Ok,E #);
take AMI-Struct(# {0},IC1,ins,i,Ok,E #) ; :: thesis: ( the carrier of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = {0} & the ZeroF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 & the Instructions of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = {[0,0,0],[1,0,0]} & the haltF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = [0,0,0] & the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 .--> NAT & ex f being Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) st
( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) ) )

thus the carrier of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = {0} ; :: thesis: ( the ZeroF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 & the Instructions of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = {[0,0,0],[1,0,0]} & the haltF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = [0,0,0] & the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 .--> NAT & ex f being Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) st
( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) ) )

thus the ZeroF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 ; :: thesis: ( the Instructions of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = {[0,0,0],[1,0,0]} & the haltF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = [0,0,0] & the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 .--> NAT & ex f being Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) st
( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) ) )

thus the Instructions of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = {[0,0,0],[1,0,0]} ; :: thesis: ( the haltF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = [0,0,0] & the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 .--> NAT & ex f being Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) st
( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) ) )

thus the haltF of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = [0,0,0] ; :: thesis: ( the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 .--> NAT & ex f being Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) st
( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) ) )

thus the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = 0 .--> NAT ; :: thesis: ex f being Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) st
( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) )

reconsider f = f as Function of (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)),(product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)) ;
take f ; :: thesis: ( ( for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) ) & the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) )
thus for s being Element of product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #) holds f . s = s +* (0 .--> (succ (s . 0))) by A13; :: thesis: the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #))))
thus the Execution of AMI-Struct(# {0},IC1,ins,i,Ok,E #) = ([1,0,0] .--> f) +* ([0,0,0] .--> (id (product the Object-Kind of AMI-Struct(# {0},IC1,ins,i,Ok,E #)))) ; :: thesis: verum