list_rank |
Def (L) == reduce( x,y. (x)+y;0;L)
Thm* (Formula List)  
|
formula_rank |
Def
== (letrec formula_rank f = case f:
x 0;
  p (formula_rank(p)+1);
p  q (formula_rank(p)+formula_rank(q)+1);
p  q (formula_rank(p)+formula_rank(q)+1);
p   q (formula_rank(p)+formula_rank(q)+1); )
Thm* Formula  
|
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
|
formula_case |
Def case F:
x varC(x);
  p1 notC(p1);
p2  p3 andC(p2;p3);
p4  p5 orC(p4;p5);
p6   p7 impC(p6;p7);
== InjCase(F; x. varC(x); F.
InjCase(F; p1. notC(p1); F.
InjCase(F; x. x/p2,p3.andC(p2;p3); F. InjCase(F; x. x/p4,p5.orC(p4;p5), x/p6,p7.impC(p6;p7)))))
|
letrec_body |
Def = b == b
|
letrec_arg |
Def x b(x) (x) == b(x)
|
letrec |
Def (letrec f b(f)) == b((letrec f b(f)) ) (recursive)
|