aboutsummaryrefslogtreecommitdiffhomepage
path: root/test-suite
diff options
context:
space:
mode:
Diffstat (limited to 'test-suite')
-rw-r--r--test-suite/success/Equations.v105
1 files changed, 93 insertions, 12 deletions
diff --git a/test-suite/success/Equations.v b/test-suite/success/Equations.v
index ea4d693dd..160940185 100644
--- a/test-suite/success/Equations.v
+++ b/test-suite/success/Equations.v
@@ -1,8 +1,6 @@
Require Import Bvector.
Require Import Program.
-Obligation Tactic := try equations.
-
Equations neg (b : bool) : bool :=
neg true := false ;
neg false := true.
@@ -27,17 +25,16 @@ Eval compute in (tail (cons 1 nil)).
Reserved Notation " x ++ y " (at level 60, right associativity).
+Equations app' {A} (l l' : list A) : (list A) :=
+app' A nil l := l ;
+app' A (cons a v) l := cons a (app' v l).
+
Equations app (l l' : list nat) : list nat :=
[] ++ l := l ;
(a :: v) ++ l := a :: (v ++ l)
where " x ++ y " := (app x y).
-Equations app' {A} (l l' : list A) : (list A) :=
-app' A nil l := l ;
-app' A (cons a v) l := cons a (app' v l).
-
-
Eval compute in @app'.
Equations zip' {A} (f : A -> A -> A) (l l' : list A) : (list A) :=
@@ -46,9 +43,8 @@ zip' A f (cons a v) (cons b w) := cons (f a b) (zip' f v w) ;
zip' A f nil (cons b w) := nil ;
zip' A f (cons a v) nil := nil.
-Eval compute in @zip'.
-Eval cbv delta [ zip' zip'_obligation_1 zip'_obligation_2 zip'_obligation_3 ] beta iota zeta in @zip'.
+Eval compute in @zip'.
Equations zip'' {A} (f : A -> A -> A) (l l' : list A) (def : list A) : (list A) :=
zip'' A f nil nil def := nil ;
@@ -57,7 +53,6 @@ zip'' A f nil (cons b w) def := def ;
zip'' A f (cons a v) nil def := def.
Eval compute in @zip''.
-Eval cbv delta [ zip'' ] beta iota zeta in @zip''.
Implicit Arguments Vnil [[A]].
Implicit Arguments Vcons [[A] [n]].
@@ -105,8 +100,6 @@ Section Image.
Equations inv (t : T) (im : Imf t) : S :=
inv (f s) (imf s) := s.
- Eval compute in inv.
-
End Image.
Section Univ.
@@ -131,3 +124,91 @@ End Univ.
Eval compute in (foo ubool false).
Eval compute in (foo (uarrow ubool ubool) negb).
Eval compute in (foo (uarrow ubool ubool) id).
+
+(* Overlap. *)
+
+Inductive foobar : Set := bar | baz.
+
+Equations bla f : bool :=
+bla bar := true ;
+bla baz := false.
+
+Eval simpl in bla.
+Print refl_equal.
+
+Notation "'refl'" := (@refl_equal _ _).
+
+Equations K {A} (x : A) (P : x = x -> Type) (p : P (refl_equal x)) (p : x = x) : P p :=
+K A x P p refl := p.
+
+Equations eq_sym {A} (x y : A) (H : x = y) : y = x :=
+eq_sym A x x refl := refl.
+
+(* Obligation Tactic := idtac. *)
+
+Equations eq_trans {A} (x y z : A) (p : x = y) (q : y = z) : x = z :=
+eq_trans A x x x refl refl := refl.
+
+Lemma eq_trans_eq A x : @eq_trans A x x x refl refl = refl.
+Proof. reflexivity. Qed.
+
+Equations nth {A} {n} (v : vector A n) (f : fin n) : A :=
+nth A (S n) (Vcons a v) fz := a ;
+nth A (S n) (Vcons a v) (fs f) := nth v f.
+
+Equations tabulate {A} {n} (f : fin n -> A) : vector A n :=
+tabulate A 0 f := Vnil ;
+tabulate A (S n) f := Vcons (f fz) (tabulate (f ∘ fs)).
+
+Equations vlast {A} {n} (v : vector A (S n)) : A :=
+vlast A 0 (Vcons a Vnil) := a ;
+vlast A (S n) (Vcons a v) := vlast v.
+
+Lemma vlast_equation1 A (a : A) : vlast (Vcons a Vnil) = a.
+Proof. intros. compute ; reflexivity. Qed.
+
+Lemma vlast_equation2 A n a v : @vlast A (S n) (Vcons a v) = vlast v.
+Proof. intros. compute ; reflexivity. Qed.
+
+Print Assumptions vlast.
+Print Assumptions nth.
+Print Assumptions tabulate.
+
+Equations vliat {A} {n} (v : vector A (S n)) : vector A n :=
+vliat A 0 (Vcons a Vnil) := Vnil ;
+vliat A (S n) (Vcons a v) := Vcons a (vliat v).
+
+Eval compute in (vliat (Vcons 2 (Vcons 5 (Vcons 4 Vnil)))).
+
+Equations vapp {A} {n m} (v : vector A n) (w : vector A m) : vector A (n + m) :=
+vapp A 0 m Vnil w := w ;
+vapp A (S n) m (Vcons a v) w := Vcons a (vapp v w).
+
+Lemma JMeq_Vcons_inj A n m a (x : vector A n) (y : vector A m) : n = m -> JMeq x y -> JMeq (Vcons a x) (Vcons a y).
+Proof. intros until y. simplify_dep_elim. reflexivity. Qed.
+
+Equations NoConfusion_fin (P : Prop) {n : nat} (x y : fin n) : Prop :=
+NoConfusion_fin P (S n) fz fz := P -> P ;
+NoConfusion_fin P (S n) fz (fs y) := P ;
+NoConfusion_fin P (S n) (fs x) fz := P ;
+NoConfusion_fin P (S n) (fs x) (fs y) := (x = y -> P) -> P.
+
+Equations noConfusion_fin P (n : nat) (x y : fin n) (H : x = y) : NoConfusion_fin P x y :=
+noConfusion_fin P (S n) fz fz refl := λ p, p ;
+noConfusion_fin P (S n) (fs x) (fs x) refl := λ p : x = x -> P, p refl.
+
+Equations NoConfusion_vect (P : Prop) {A n} (x y : vector A n) : Prop :=
+NoConfusion_vect P A 0 Vnil Vnil := P -> P ;
+NoConfusion_vect P A (S n) (Vcons a x) (Vcons b y) := (a = b -> x = y -> P) -> P.
+
+Equations noConfusion_vect (P : Prop) A n (x y : vector A n) (H : x = y) : NoConfusion_vect P x y :=
+noConfusion_vect P A 0 Vnil Vnil refl := λ p, p ;
+noConfusion_vect P A (S n) (Vcons a v) (Vcons a v) refl := λ p : a = a -> v = v -> P, p refl refl.
+
+Instance fin_noconf n : NoConfusionPackage (fin n) :=
+ NoConfusion := λ P, Π x y, x = y -> NoConfusion_fin P x y ;
+ noConfusion := λ P x y, noConfusion_fin P n x y.
+
+Instance vect_noconf A n : NoConfusionPackage (vector A n) :=
+ NoConfusion := λ P, Π x y, x = y -> NoConfusion_vect P x y ;
+ noConfusion := λ P x y, noConfusion_vect P A n x y.