summaryrefslogtreecommitdiff
path: root/test-suite/bugs/closed/3700.v
diff options
context:
space:
mode:
authorGravatar Enrico Tassi <gareuselesinge@debian.org>2015-01-25 14:42:51 +0100
committerGravatar Enrico Tassi <gareuselesinge@debian.org>2015-01-25 14:42:51 +0100
commit7cfc4e5146be5666419451bdd516f1f3f264d24a (patch)
treee4197645da03dc3c7cc84e434cc31d0a0cca7056 /test-suite/bugs/closed/3700.v
parent420f78b2caeaaddc6fe484565b2d0e49c66888e5 (diff)
Imported Upstream version 8.5~beta1+dfsg
Diffstat (limited to 'test-suite/bugs/closed/3700.v')
-rw-r--r--test-suite/bugs/closed/3700.v84
1 files changed, 84 insertions, 0 deletions
diff --git a/test-suite/bugs/closed/3700.v b/test-suite/bugs/closed/3700.v
new file mode 100644
index 00000000..4e226524
--- /dev/null
+++ b/test-suite/bugs/closed/3700.v
@@ -0,0 +1,84 @@
+
+Set Implicit Arguments.
+Module NonPrim.
+ Unset Primitive Projections.
+ Record prod A B := pair { fst : A ; snd : B }.
+End NonPrim.
+Module Prim.
+ Set Primitive Projections.
+ Record prod A B := pair { fst : A ; snd : B }.
+End Prim.
+Goal (forall x : NonPrim.prod Set Set, let (a, b) := x in a = a)
+/\ (forall x : Prim.prod Set Set, let (a, b) := x in a = a).
+ Show. (* (forall x : NonPrim.prod Set Set, let (a, _) := x in a = a) /\
+ (forall x : Prim.prod Set Set,
+ let a := Prim.fst x in let b := Prim.snd x in a = a) *)
+ Set Printing All.
+ Show. (* and
+ (forall x : NonPrim.prod Set Set,
+ match x return Prop with
+ | NonPrim.pair a _ => @eq Set a a
+ end)
+ (forall x : Prim.prod Set Set,
+ let a := @Prim.fst Set Set x in
+ let b := @Prim.snd Set Set x in @eq Set a a) *)
+ Unset Printing All.
+Abort.
+Goal (forall x : NonPrim.prod Set Set, match x with NonPrim.pair a b => a = a end)
+/\ (forall x : Prim.prod Set Set, match x with Prim.pair a b => a = a end).
+ Show. (* (forall x : NonPrim.prod Set Set,
+ match x with
+ | {| NonPrim.fst := a |} => a = a
+ end) /\ (forall x : Prim.prod Set Set, Prim.fst x = Prim.fst x) *)
+ (** Wrong: [match] should generate unfolded things *)
+ Set Printing All.
+ Show. (* and
+ (forall x : NonPrim.prod Set Set,
+ match x return Prop with
+ | NonPrim.pair a _ => @eq Set a a
+ end)
+ (forall x : Prim.prod Set Set,
+ @eq Set (@Prim.fst Set Set x) (@Prim.fst Set Set x)) *)
+ Unset Printing All.
+Abort.
+Goal (forall x : NonPrim.prod Set Set, let (a, b) := x in a = a /\ b = b)
+/\ (forall x : Prim.prod Set Set, let (a, b) := x in a = a /\ b = b).
+ Show. (* (forall x : NonPrim.prod Set Set, let (a, b) := x in a = a /\ b = b) /\
+ (forall x : Prim.prod Set Set,
+ let a := Prim.fst x in let b := Prim.snd x in a = a /\ b = b) *)
+ (** Understandably different, maybe, but should still be unfolded *)
+ Set Printing All.
+ Show. (* and
+ (forall x : NonPrim.prod Set Set,
+ match x return Prop with
+ | NonPrim.pair a b => and (@eq Set a a) (@eq Set b b)
+ end)
+ (forall x : Prim.prod Set Set,
+ let a := @Prim.fst Set Set x in
+ let b := @Prim.snd Set Set x in and (@eq Set a a) (@eq Set b b)) *)
+ Unset Printing All.
+Abort.
+Goal (forall x : NonPrim.prod Set Set, match x with NonPrim.pair a b => a = a /\ b = b end)
+/\ (forall x : Prim.prod Set Set, match x with Prim.pair a b => a = a /\ b = b end).
+ Show. (* (forall x : NonPrim.prod Set Set,
+ match x with
+ | {| NonPrim.fst := a; NonPrim.snd := b |} => a = a /\ b = b
+ end) /\
+ (forall x : Prim.prod Set Set,
+ Prim.fst x = Prim.fst x /\ Prim.snd x = Prim.snd x) *)
+ Set Printing All.
+ Show.
+
+ set(foo:=forall x : Prim.prod Set Set, match x return Set with
+ | Prim.pair fst _ => fst
+ end).
+ (* and
+ (forall x : NonPrim.prod Set Set,
+ match x return Prop with
+ | NonPrim.pair a b => and (@eq Set a a) (@eq Set b b)
+ end)
+ (forall x : Prim.prod Set Set,
+ and (@eq Set (@Prim.fst Set Set x) (@Prim.fst Set Set x))
+ (@eq Set (@Prim.snd Set Set x) (@Prim.snd Set Set x))) *)
+ Unset Printing All.
+Abort. \ No newline at end of file