Sequent |
Def Sequent == (Formula List) (Formula List)
Thm* Sequent Type
|
Formula |
Def Formula
== rec(formula.Var+formula+(formula formula)+(formula formula)+(formula formula))
Thm* Formula Type
|
Var |
Def Var == Atom
Thm* Var Type
|
discrete_equality |
Def {T= } == {eq:(T T  )| x,y:T. (eq(x,y))  x = y }
Thm* T:Type. {T= } Type
|
assert |
Def b == if b True else False fi
Thm* b: . b Prop
|
fvar |
Def F == inl(F)
Thm* x:Var. x Formula
|
is_member |
Def x( eq) L
== (letrec is_member x eq L = (Case of L
nil false
h.t if eq(x,h) true else is_member(x,eq,t) fi) )
(x
,eq
,L)
Thm* T:Type, eq:(T T  ), u:T. u( eq) nil
Thm* T:Type, eq:(T T  ), x:T, L:T List. x( eq) L 
|
list_all |
Def x L.P(x)
== (letrec list_all L = (Case of L; nil True ; h.t P(h) & list_all(t)) ) (L)
Thm* T:Type, P:(T Prop), L:T List. x L.P(x) Type
Thm* T:Type, P:(T Type). x nil.P(x) Type
|
sequent_rank |
Def (S) == (S.H)+ (S.C)
Thm* Sequent  
|
iff |
Def P  Q == (P  Q) & (P  Q)
Thm* A,B:Prop. (A  B) Prop
|
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  
|
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)
|
C |
Def s.C == s.2
Thm* s:Sequent. s.C Formula List
|
H |
Def s.H == s.1
Thm* s:Sequent. s.H Formula List
|
rev_implies |
Def P  Q == Q  P
Thm* A,B:Prop. (A  B) Prop
|
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)))))
|