(************************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* (ev,x)::acc) evc [] let dom evc = Evarmap.fold (fun ev _ acc -> ev::acc) evc [] let map evc k = Evarmap.find k evc let rmv evc k = Evarmap.remove k evc let remap evc k i = Evarmap.add k i evc let in_dom evc k = Evarmap.mem k evc let add evd ev newinfo = Evarmap.add ev newinfo evd let define evd ev body = let oldinfo = map evd ev in let newinfo = { evar_concl = oldinfo.evar_concl; evar_hyps = oldinfo.evar_hyps; evar_body = Evar_defined body} in match oldinfo.evar_body with | Evar_empty -> Evarmap.add ev newinfo evd | _ -> anomaly "cannot define an isevar twice" (* The list of non-instantiated existential declarations *) let non_instantiated sigma = let listev = to_list sigma in List.fold_left (fun l ((ev,evd) as d) -> if evd.evar_body = Evar_empty then (d::l) else l) [] listev let is_evar sigma ev = in_dom sigma ev let is_defined sigma ev = let info = map sigma ev in not (info.evar_body = Evar_empty) let evar_body ev = ev.evar_body let string_of_existential ev = "?" ^ string_of_int ev let existential_of_int ev = ev