type id = string;;
type joint_recursion_kind =
- [ `Recursive
+ [ `Recursive of int list (* decreasing arguments *)
| `CoRecursive
| `Inductive of int (* paramsno *)
| `CoInductive of int (* paramsno *)
type 'term declaration =
{ dec_name : string option;
- dec_id : string ;
+ dec_id : id ;
dec_inductive : bool;
dec_aref : string;
dec_type : 'term
type 'term definition =
{ def_name : string option;
- def_id : string ;
+ def_id : id ;
def_aref : string ;
def_term : 'term
}
;;
type 'term inductive =
- { inductive_id : string ;
+ { inductive_id : id ;
inductive_kind : bool;
inductive_type : 'term;
inductive_constructors : 'term declaration list
;;
type ('term,'proof) joint =
- { joint_id : string ;
+ { joint_id : id ;
joint_kind : joint_recursion_kind ;
joint_defs : ('term,'proof) in_joint_context_element list
}
type 'term proof =
{ proof_name : string option;
- proof_id : string ;
+ proof_id : id ;
proof_context : 'term in_proof_context_element list ;
proof_apply_context: 'term proof list;
proof_conclude : 'term conclude_item
]
and 'term conclude_item =
- { conclude_id :string;
+ { conclude_id : id;
conclude_aref : string;
conclude_method : string;
conclude_args : ('term arg) list ;
}
and 'term arg =
- Aux of int
+ Aux of string
| Premise of premise
+ | Lemma of lemma
| Term of 'term
| ArgProof of 'term proof
| ArgMethod of string (* ???? *)
and premise =
- { premise_id: string;
+ { premise_id: id;
premise_xref : string ;
premise_binder : string option;
premise_n : int option;
}
+
+and lemma =
+ { lemma_id: id;
+ lemma_name : string;
+ lemma_uri: string
+ }
;;
type 'term conjecture = id * int * 'term context * 'term
and 'term context = 'term hypothesis list
and 'term hypothesis =
- id *
['term decl_context_element | ('term,'term proof) def_context_element ] option
;;