type term_subst = (string * term) list
and term = { mutable free_vars : lazy_vars; mutable core : term_core }
and term_core
=
Term of term'
| Subst of term * term_subst
| Sequent of esequent
| FOVar of string
| Hashed of term Weak_memo.TheWeakMemo.descriptor
and term' = { term_op : operator; term_terms : bound_term list }
and bound_term = bound_term'
and bound_term' = { bvars : string list; bterm : term }
and esequent = { sequent_args : term; sequent_hyps : seq_hyps; sequent_goals : seq_goals }
and hypothesis
=
Hypothesis of string * term
| Context of string * term list
and seq_hyps = hypothesis array
type operator' = { op_name : opname; op_params : param list }
type param' =
Number of Num.num
| String of string
| Token of string
| Level of level_exp
| Var of string
| MNumber of string
| MString of string
| MToken of string
| MLevel of string
| MVar of string
(* Special Nuprl5 values *)
| ObId of object_id
| ParamList of param list
and object_id = param list