diff options
| author | herbelin | 2000-11-27 10:25:43 +0000 |
|---|---|---|
| committer | herbelin | 2000-11-27 10:25:43 +0000 |
| commit | 1f0eb2fb6d5de9c2aa60b93014f28c52d5f3a356 (patch) | |
| tree | da23008f3752a5ae38fe8f14c8e0d2f5423649a8 /kernel/instantiate.ml | |
| parent | 7b0c76beedf0e4e59c03701ee776a7c1dae58e20 (diff) | |
Généralisation de constant_opt_value en reference_opt_value
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@971 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel/instantiate.ml')
| -rw-r--r-- | kernel/instantiate.ml | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/kernel/instantiate.ml b/kernel/instantiate.ml index 7f6f1258b5..c9e39c9f5b 100644 --- a/kernel/instantiate.ml +++ b/kernel/instantiate.ml @@ -18,7 +18,7 @@ let is_id_inst inst = List.for_all is_id inst let instantiate_constr sign c args = - let inst = instantiate_named_context sign args in + let inst = instantiate_named_context sign args in if is_id_inst inst then c else @@ -76,3 +76,47 @@ let existential_value sigma (n,args) = let existential_opt_value sigma ev = try Some (existential_value sigma ev) with NotInstantiatedEvar -> None + + +type evaluable_reference = + | EvalConst of constant + | EvalVar of identifier + | EvalRel of int + | EvalEvar of existential + +let mkEvalRef = function + | EvalConst cst -> mkConst cst + | EvalVar id -> mkVar id + | EvalRel n -> mkRel n + | EvalEvar ev -> mkEvar ev + +let isEvalRef c = match kind_of_term c with + | IsConst _ | IsVar _ | IsRel _ | IsEvar _ -> true + | _ -> false + +let destEvalRef c = match kind_of_term c with + | IsConst cst -> EvalConst cst + | IsVar id -> EvalVar id + | IsRel n -> EvalRel n + | IsEvar ev -> EvalEvar ev + | _ -> anomaly "Not an evaluable reference" + +let evaluable_reference sigma env = function + | EvalConst (sp,_) -> evaluable_constant env sp + | EvalVar id -> evaluable_named_decl env id + | EvalRel n -> evaluable_rel_decl env n + | EvalEvar (ev,_) -> Evd.is_defined sigma ev + +let reference_opt_value sigma env = function + | EvalConst cst -> constant_opt_value env cst + | EvalVar id -> lookup_named_value id env + | EvalRel n -> lookup_rel_value n env + | EvalEvar ev -> existential_opt_value sigma ev + +exception NotEvaluable +let reference_value sigma env c = + match reference_opt_value sigma env c with + | None -> raise NotEvaluable + | Some d -> d + + |
