|  | Who Cites affects  trace  rel? | 
|  | 
| affects_trace_rel | Def affects_trace_rel(e;k;r) == reduce(  x,y. affects_trace(e;k;x)   y;false  ;r.args) | 
 | |  | Thm*  e:(Label   Label    ), k:Label, r:rel(). affects_trace_rel(e;k;r)    | 
|  | 
| rel_args | Def t.args == 2of(t) | 
 | |  | Thm*  t:rel(). t.args  Term List | 
|  | 
| affects_trace | Def affects_trace(e;k;t)
== iterate(statevar x- > false  statevar x'- > false  funsymbol x- > false  freevar x- > false  trace(P)- > e(P,k)
 x(y)- > x   y
 over t) | 
 | |  | Thm*  e:(Label   Label    ), k:Label, t:Term. affects_trace(e;k;t)    | 
|  | 
| bor | Def p   q == if p  true  else q fi | 
 | |  | Thm*  p,q:  . (p   q)    | 
|  | 
| reduce | Def reduce(f;k;as) == Case of as; nil  k ; a.as'  f(a,reduce(f;k;as'))  (recursive) | 
 | |  | Thm*  A,B:Type, f:(A   B   B), k:B, as:A List. reduce(f;k;as)  B | 
|  | 
| pi2 | Def 2of(t) == t.2 | 
 | |  | Thm*  A:Type, B:(A   Type), p:(a:A  B(a)). 2of(p)  B(1of(p)) | 
|  | 
| term_iter | Def iterate(statevar x- > v(x)
 statevar x''- > v'(x')
 funsymbol op- > opr(op)
 freevar f- > fvar(f)
 trace(tr)- > trace(tr)
 a(b)- > comb(a;b)
 over t)
== term_iterate(  x.v(x);  x'.v'(x');  op.opr(op);  f.fvar(f);  tr.trace(tr);  a,b. comb(a;b);
 t) | 
 | |  | Thm*  A:Type, v,v',opr,fvar,trace:(Label   A), comb:(A   A   A), t:Term.
iterate(statevar x- > v(x)
 statevar x''- > v'(x')
 funsymbol op- > opr(op)
 freevar f- > fvar(f)
 trace(tr)- > trace(tr)
 a(b)- > comb(a,b)
 over t)  A | 
|  | 
| term_iterate | Def term_iterate(v;p;op;f;tr;a;t) == t_iterate(  x.ts_case(x)var(a)= > v(a)var'(b)= > p(b)opr(c)= > op(c)fvar(d)= > f(d)trace(P)= > tr(P)end_ts_case ;a;t) | 
 | |  | Thm*  A:Type, v,op,f,p,tr:(Label   A), a:(A   A   A), t:Term. term_iterate(v;p;op;f;tr;a;t)  A | 
|  | 
| ts_case | Def ts_case(x)var(a)= > v(a)var'(b)= > p(b)opr(f)= > op(f)fvar(x)= > f(x)trace(P)= > t(P)end_ts_case  == Case(x) Case ts_var(a) = >  v(a) Case ts_pvar(b) = >  p(b) Case ts_op(f) = >  op(f) Case ts_fvar(x) = >  f(x) Case ts_trace(P) = >  t(P) Default = >  | 
 | |  | Thm*  A:Type, v,op,f,p,t:(Label   A), x:ts(). ts_case(x)var(a)= > v(a)var'(b)= > p(b)opr(f)= > op(f)fvar(y)= > f(y)trace(P)= > t(P)end_ts_case  A | 
|  | 
| t_iterate | Def t_iterate(l;n;t) == Case(t) Case x;y = >  n(t_iterate(l;n;x),t_iterate(l;n;y)) Case tree_leaf(x) = >  l(x) Default = >  True  (recursive) | 
 | |  | Thm*  E,A:Type, l:(E   A), n:(A   A   A), t:Tree(E). t_iterate(l;n;t)  A | 
|  | 
| case_default | Def Default = >  body(value,value) == body | 
|  | 
| case_ts_trace | Def Case ts_trace(x) = >  body(x) cont(x1,z) == (  x1.inr(x2) = >  (  x1.inr(x2) = >  (  x1.inr(x2) = >  (  x1.inr(x2) = >  body(hd([x2 / tl(x1)])) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x1]) | 
|  | 
| case_ts_fvar | Def Case ts_fvar(x) = >  body(x) cont(x1,z) == (  x1.inr(x2) = >  (  x1.inr(x2) = >  (  x1.inr(x2) = >  (  x1.inl(x2) = >  body(hd([x2 / tl(x1)])) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x1]) | 
|  | 
| case_ts_op | Def Case ts_op(x) = >  body(x) cont(x1,z) == (  x1.inr(x2) = >  (  x1.inr(x2) = >  (  x1.inl(x2) = >  body(hd([x2 / tl(x1)])) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x1]) | 
|  | 
| case_ts_pvar | Def Case ts_pvar(x) = >  body(x) cont(x1,z) == (  x1.inr(x2) = >  (  x1.inl(x2) = >  body(hd([x2 / tl(x1)])) cont(hd(x1),z))([x2 / tl(x1)]) cont(hd(x1),z))([x1]) | 
|  | 
| case_ts_var | Def Case ts_var(x) = >  body(x) cont(x1,z) == InjCase(x1; x2. body(x2); _. cont(z,z)) | 
|  | 
| case | Def Case(value) body == body(value,value) | 
|  | 
| case_tree_leaf | Def Case tree_leaf(x) = >  body(x) cont(x1,z) == InjCase(x1; x2. body(x2); _. cont(z,z)) | 
|  | 
| case_node | Def Case x;y = >  body(x;y) cont(x1,z) == InjCase(x1; _. cont(z,z); x2. x2/x3,x2@0. body(x3;x2@0)) | 
|  | 
| hd | Def hd(l) == Case of l; nil  "?" ; h.t  h | 
 | |  | Thm*  A:Type, l:A List. ||l||  1   hd(l)  A | 
 | |  | Thm*  A:Type, l:A List  . hd(l)  A | 
|  | 
| tl | Def tl(l) == Case of l; nil  nil ; h.t  t | 
 | |  | Thm*  A:Type, l:A List. tl(l)  A List | 
|  | 
| case_inr | Def inr(x) = >  body(x) cont(value,contvalue) == InjCase(value; _. cont(contvalue,contvalue); x. body(x)) | 
|  | 
| case_inl | Def inl(x) = >  body(x) cont(value,contvalue) == InjCase(value; x. body(x); _. cont(contvalue,contvalue)) |