aboutsummaryrefslogtreecommitdiff
path: root/pretyping/evd.ml
diff options
context:
space:
mode:
authorherbelin2007-05-28 22:54:04 +0000
committerherbelin2007-05-28 22:54:04 +0000
commit9d2ebaa610b0fde6354cf86e4bbfae95cec71f09 (patch)
treef3469ca85cba86dcac953c7a62714bac35dde535 /pretyping/evd.ml
parentfcfba96d039bf86966ffa53eb12528f9c49d11c2 (diff)
Contrôle de la compatibilité de apply via une information dans les
métas permettant de savoir si une instance de méta vient d'un with-binding ou d'une unification, et si elle a déjà été typée ou pas. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9866 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping/evd.ml')
-rw-r--r--pretyping/evd.ml14
1 files changed, 9 insertions, 5 deletions
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index 7b5690e2cc..439f462642 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -334,9 +334,13 @@ let map_fl f cfl = { cfl with rebus=f cfl.rebus }
(e.g. the solution [P] to [?X u v = P u v] can be eta-expanded twice)
*)
-type instance_status =
- | IsSuperType | IsSubType
- | ConvUpToEta of int | Coercible of types | Processed
+type instance_constraint =
+ IsSuperType | IsSubType | ConvUpToEta of int | UserGiven
+
+type instance_typing_status =
+ TypeNotProcessed | TypeProcessed
+
+type instance_status = instance_constraint * instance_typing_status
(* Clausal environments *)
@@ -543,7 +547,7 @@ let retract_coercible_metas evd =
let mc,ml =
Metamap.fold (fun n v (mc,ml) ->
match v with
- | Clval (na,(b,s),typ) when s <> Processed ->
+ | Clval (na,(b,(UserGiven,TypeNotProcessed as s)),typ) ->
(n,b.rebus,s)::mc, Metamap.add n (Cltyp (na,typ)) ml
| v ->
mc, Metamap.add n v ml)
@@ -556,7 +560,7 @@ let rec list_assoc_in_triple x = function
let subst_defined_metas bl c =
let rec substrec c = match kind_of_term c with
- | Meta i -> list_assoc_in_triple i bl
+ | Meta i -> substrec (list_assoc_in_triple i bl)
| _ -> map_constr substrec c
in try Some (substrec c) with Not_found -> None