Thm* as:(Label T) List, p:(Label T), l:Label, d:T.
apply_alist([p / as];l;d) ~ if 1of(p) = l 2of(p) else apply_alist(as;l;d) fi | [apply_alist_cons] |
Def apply_alist(as;l;d) == 2of((first p as s.t. 1of(p) = l else < l,d > )) | [apply_alist] |
Def st_eq(s1;s2)
== Case(s1)
Case a;b = >
Case(s2)
Case a';b' = >
st_eq(a;a') st_eq(b;b')
Default = > false
Case tree_leaf(x) = >
Case(s2)
Case a';b' = >
false
Case tree_leaf(y) = >
InjCase(x; x'. InjCase(y; y'. x' = y'; b. false ); a.
InjCase(y; y'. false ; b. true ))
Default = > false
Default = > false
(recursive) | [st_eq] |
Def (a=b)
== ts_case(a)
var(v)= > ts_case(b)
var(v')= > v = v'
var'(x)= > false
opr(x)= > false
fvar(x)= > false
trace(x)= > false
end_ts_case
var'(p)= > ts_case(b)
var(x)= > false
var'(p')= > p = p'
opr(x)= > false
fvar(x)= > false
trace(x)= > false
end_ts_case
opr(op)= > ts_case(b)
var(x)= > false
var'(x)= > false
opr(op')= > op = op'
fvar(x)= > false
trace(x)= > false
end_ts_case
fvar(f)= > ts_case(b)
var(x)= > false
var'(x)= > false
opr(x)= > false
fvar(f')= > f = f'
trace(x)= > false
end_ts_case
trace(P)= > ts_case(b)
var(x)= > false
var'(x)= > false
opr(x)= > false
fvar(x)= > false
trace(P')= > P = P'
end_ts_case
end_ts_case | [ts_eq] |