aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Sozeau2014-05-16 21:09:48 +0200
committerMatthieu Sozeau2014-05-16 21:12:03 +0200
commit1588a84a71c3df3007296bdafbb29b6a0d15435b (patch)
treeb6bc6ccb9496bd5935f1f6a7648946c3ed540abd
parent0f6a9c150b1a93358f6e9f8de5072fff52625ab9 (diff)
More fixes of unification with primitive projections (missed cases during the merge).
Obligations are not necessarily opaque.
-rw-r--r--pretyping/evarconv.ml9
-rw-r--r--toplevel/g_obligations.ml42
2 files changed, 7 insertions, 4 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index aaf7ff65cc..86bd36a30b 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -270,6 +270,9 @@ let exact_ise_stack2 env evd f sk1 sk2 =
(fun i -> ise_array2 i (fun ii -> f (push_rec_types recdef1 env) ii CONV) bds1 bds2);
(fun i -> ise_stack2 i a1 a2)]
else UnifFailure (i,NotSameHead)
+ | Stack.Proj (n1,a1,p1)::q1, Stack.Proj (n2,a2,p2)::q2 ->
+ if eq_constant p1 p2 then ise_stack2 i q1 q2
+ else (UnifFailure (i, NotSameHead))
| Stack.Update _ :: _, _ | Stack.Shift _ :: _, _
| _, Stack.Update _ :: _ | _, Stack.Shift _ :: _ -> assert false
| Stack.App _ :: _, Stack.App _ :: _ ->
@@ -388,7 +391,7 @@ and evar_eqappr_x ?(rhs_is_already_stuck = false) ts env evd pbty
ev lF apprM i
and f3 i =
switch (evar_eqappr_x ts env i pbty) (apprF,cstsF)
- (whd_betaiota_deltazeta_for_iota_state ts env i cstsM (vM, skM))
+ (whd_betaiota_deltazeta_for_iota_state ts env i cstsM vM)
in
ise_try evd [f1; (consume_stack on_left apprF apprM); f3] in
let flex_rigid on_left ev (termF, skF as apprF) (termR, skR as apprR) =
@@ -439,10 +442,10 @@ and evar_eqappr_x ?(rhs_is_already_stuck = false) ts env evd pbty
ise_try evd [f1; f2]
| Flexible ev1, MaybeFlexible (v2,sk2) ->
- flex_maybeflex true ev1 (appr1,csts1) ((term2,sk2),csts2) v2
+ flex_maybeflex true ev1 (appr1,csts1) (appr2,csts2) (v2,sk2)
| MaybeFlexible (v1,sk1), Flexible ev2 ->
- flex_maybeflex false ev2 (appr2,csts2) ((term1,sk1),csts1) v1
+ flex_maybeflex false ev2 (appr2,csts2) (appr1,csts1) (v1,sk1)
| MaybeFlexible (v1,sk1), MaybeFlexible (v2,sk2) -> begin
match kind_of_term term1, kind_of_term term2 with
diff --git a/toplevel/g_obligations.ml4 b/toplevel/g_obligations.ml4
index 2354aa3325..6ed0c24b54 100644
--- a/toplevel/g_obligations.ml4
+++ b/toplevel/g_obligations.ml4
@@ -54,7 +54,7 @@ GEXTEND Gram
open Obligations
-let classify_obbl _ = Vernacexpr.(VtStartProof ("Classic",GuaranteesOpacity,[]), VtLater)
+let classify_obbl _ = Vernacexpr.(VtStartProof ("Classic",Doesn'tGuaranteeOpacity,[]), VtLater)
VERNAC COMMAND EXTEND Obligations CLASSIFIED BY classify_obbl
| [ "Obligation" integer(num) "of" ident(name) ":" lconstr(t) withtac(tac) ] ->