The Definition of Term Types in Term_ds Module

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

and seq_goals = term array


type operator = operator'

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

and param = param'