exception NotImplemented;;
+(* It returns true iff the proof has been perforated, i.e. if a subterm *)
+(* has been changed into a meta. *)
let to_sequent id ids_to_terms ids_to_father_ids =
let module P = ProofEngine in
let term = Hashtbl.find ids_to_terms id in
| P.Definition,_,_ -> raise NotImplemented
) context
in
- let ty = CicTypeChecker.type_of_aux' type_checker_env_of_context term in
- ((context,ty) : ProofEngine.sequent)
+ let metasenv =
+ match !P.proof with
+ None -> assert false
+ | Some (_,metasenv,_,_) -> metasenv
+ in
+ let ty =
+ CicTypeChecker.type_of_aux' metasenv type_checker_env_of_context term
+ in
+ let (meta,perforated) =
+ (* If the selected term is already a meta, we return it. *)
+ (* Otherwise, we are trying to refine a non-meta term... *)
+ match term with
+ Cic.Meta n -> P.goal := Some (n,(context,ty)) ; n,false
+ | _ -> P.perforate context term ty,true (* P.perforate also sets the goal *)
+ in
+ perforated
;;