| Formula |
Def Formula
== rec(formula.Var+formula+(formula formula)+(formula formula)+(formula formula))
Thm* Formula Type
|
| 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  
|
| nat |
Def == {i: | 0 i }
Thm* Type
|
| 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
|
| Var |
Def Var == Atom
Thm* Var Type
|
| 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)
|
| le |
Def A B == B < A
Thm* i,j: . i j Prop
|
| not |
Def A == A  False
Thm* A:Prop. ( A) Prop
|