deffunc H1( Symbol of F1(), FinSequence, FinSequence of F2()) -> Element of F2() = F4($1,($2 . 1),($2 . 2),($3 . 1),($3 . 2));
consider f being Function of (TS F1()),F2() such that
A1:
for t being Symbol of F1() st t in Terminals F1() holds
f . (root-tree t) = F3(t)
and
A2:
for nt being Symbol of F1()
for ts being FinSequence of TS F1() st nt ==> roots ts holds
f . (nt -tree ts) = H1(nt, roots ts,f * ts)
from DTCONSTR:sch 8();
take
f
; :: thesis: ( ( for t being Terminal of F1() holds f . (root-tree t) = F3(t) ) & ( for nt being NonTerminal of F1()
for tl, tr being Element of TS F1()
for rtl, rtr being Symbol of F1() st rtl = root-label tl & rtr = root-label tr & nt ==> <*rtl,rtr*> holds
for xl, xr being Element of F2() st xl = f . tl & xr = f . tr holds
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr) ) )
A3:
dom f = TS F1()
by FUNCT_2:def 1;
thus
for t being Terminal of F1() holds f . (root-tree t) = F3(t)
by A1; :: thesis: for nt being NonTerminal of F1()
for tl, tr being Element of TS F1()
for rtl, rtr being Symbol of F1() st rtl = root-label tl & rtr = root-label tr & nt ==> <*rtl,rtr*> holds
for xl, xr being Element of F2() st xl = f . tl & xr = f . tr holds
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr)
let nt be NonTerminal of F1(); :: thesis: for tl, tr being Element of TS F1()
for rtl, rtr being Symbol of F1() st rtl = root-label tl & rtr = root-label tr & nt ==> <*rtl,rtr*> holds
for xl, xr being Element of F2() st xl = f . tl & xr = f . tr holds
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr)
let tl, tr be Element of TS F1(); :: thesis: for rtl, rtr being Symbol of F1() st rtl = root-label tl & rtr = root-label tr & nt ==> <*rtl,rtr*> holds
for xl, xr being Element of F2() st xl = f . tl & xr = f . tr holds
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr)
let rtl, rtr be Symbol of F1(); :: thesis: ( rtl = root-label tl & rtr = root-label tr & nt ==> <*rtl,rtr*> implies for xl, xr being Element of F2() st xl = f . tl & xr = f . tr holds
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr) )
assume A4:
( rtl = root-label tl & rtr = root-label tr & nt ==> <*rtl,rtr*> )
; :: thesis: for xl, xr being Element of F2() st xl = f . tl & xr = f . tr holds
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr)
let xl, xr be Element of F2(); :: thesis: ( xl = f . tl & xr = f . tr implies f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr) )
assume A5:
( xl = f . tl & xr = f . tr )
; :: thesis: f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr)
reconsider ts = <*tl,tr*> as FinSequence of TS F1() ;
reconsider rts = <*rtl,rtr*> as FinSequence ;
A6:
( ts . 1 = tl & ts . 2 = tr & rts . 1 = rtl & rts . 2 = rtr )
by FINSEQ_1:61;
A7:
dom rts = {1,2}
by FINSEQ_1:4, FINSEQ_3:29;
A8:
dom ts = {1,2}
by FINSEQ_1:4, FINSEQ_3:29;
then A10:
rts = roots ts
by A7, A8, TREES_3:def 18;
reconsider x = <*xl,xr*> as FinSequence of F2() ;
A11:
dom x = {1,2}
by FINSEQ_1:4, FINSEQ_3:29;
then
x = f * ts
by A12, FUNCT_1:20;
then A16:
f . (nt -tree ts) = F4(nt,(rts . 1),(rts . 2),(x . 1),(x . 2))
by A2, A4, A10;
( rts . 1 = rtl & rts . 2 = rtr & x . 1 = xl & x . 2 = xr )
by FINSEQ_1:61;
hence
f . (nt -tree tl,tr) = F4(nt,rtl,rtr,xl,xr)
by A16, TREES_4:def 6; :: thesis: verum