summaryrefslogtreecommitdiff
path: root/test-suite/ideal-features
diff options
context:
space:
mode:
Diffstat (limited to 'test-suite/ideal-features')
-rw-r--r--test-suite/ideal-features/Apply.v26
-rw-r--r--test-suite/ideal-features/Case3.v28
-rw-r--r--test-suite/ideal-features/Case4.v39
-rw-r--r--test-suite/ideal-features/Case8.v40
4 files changed, 133 insertions, 0 deletions
diff --git a/test-suite/ideal-features/Apply.v b/test-suite/ideal-features/Apply.v
new file mode 100644
index 00000000..bba356f2
--- /dev/null
+++ b/test-suite/ideal-features/Apply.v
@@ -0,0 +1,26 @@
+(************************************************************************)
+(* v * The Coq Proof Assistant / The Coq Development Team *)
+(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
+(* \VV/ **************************************************************)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(************************************************************************)
+
+(* This needs unification on type *)
+
+Goal (n,m:nat)(eq nat (S m) (S n)).
+Intros.
+Apply f_equal.
+
+(* f_equal : (A,B:Set; f:(A->B); x,y:A)x=y->(f x)=(f y) *)
+(* and A cannot be deduced from the goal but only from the type of f, x or y *)
+
+
+(* This needs step by step unfolding *)
+
+Fixpoint T [n:nat] : Prop := Cases n of O => True | (S p) => n=n->(T p) end.
+Require Arith.
+
+Goal (T (3))->(T (1)).
+Intro H.
+Apply H.
diff --git a/test-suite/ideal-features/Case3.v b/test-suite/ideal-features/Case3.v
new file mode 100644
index 00000000..e9dba1e3
--- /dev/null
+++ b/test-suite/ideal-features/Case3.v
@@ -0,0 +1,28 @@
+Inductive Le : nat->nat->Set :=
+ LeO: (n:nat)(Le O n)
+| LeS: (n,m:nat)(Le n m) -> (Le (S n) (S m)).
+
+Parameter iguales : (n,m:nat)(h:(Le n m))Prop .
+
+Type <[n,m:nat][h:(Le n m)]Prop>Cases (LeO O) of
+ (LeO O) => True
+ | (LeS (S x) (S y) H) => (iguales (S x) (S y) H)
+ | _ => False end.
+
+
+Type <[n,m:nat][h:(Le n m)]Prop>Cases (LeO O) of
+ (LeO O) => True
+ | (LeS (S x) O H) => (iguales (S x) O H)
+ | _ => False end.
+
+Parameter discr_l : (n:nat) ~((S n)=O).
+
+Type
+[n:nat]
+ <[n:nat]n=O\/~n=O>Cases n of
+ O => (or_introl ? ~O=O (refl_equal ? O))
+ | (S O) => (or_intror (S O)=O ? (discr_l O))
+ | (S (S x)) => (or_intror (S (S x))=O ? (discr_l (S x)))
+
+ end.
+
diff --git a/test-suite/ideal-features/Case4.v b/test-suite/ideal-features/Case4.v
new file mode 100644
index 00000000..d8f14a4e
--- /dev/null
+++ b/test-suite/ideal-features/Case4.v
@@ -0,0 +1,39 @@
+Inductive listn : nat-> Set :=
+ niln : (listn O)
+| consn : (n:nat)nat->(listn n) -> (listn (S n)).
+
+Inductive empty : (n:nat)(listn n)-> Prop :=
+ intro_empty: (empty O niln).
+
+Parameter inv_empty : (n,a:nat)(l:(listn n)) ~(empty (S n) (consn n a l)).
+
+Type
+[n:nat] [l:(listn n)]
+ <[n:nat] [l:(listn n)](empty n l) \/ ~(empty n l)>Cases l of
+ niln => (or_introl ? ~(empty O niln) intro_empty)
+ | ((consn n O y) as b) => (or_intror (empty (S n) b) ? (inv_empty n O y))
+ | ((consn n a y) as b) => (or_intror (empty (S n) b) ? (inv_empty n a y))
+
+ end.
+
+
+Type
+[n:nat] [l:(listn n)]
+ <[n:nat] [l:(listn n)](empty n l) \/ ~(empty n l)>Cases l of
+ niln => (or_introl ? ~(empty O niln) intro_empty)
+ | (consn n O y) => (or_intror (empty (S n) (consn n O y)) ?
+ (inv_empty n O y))
+ | (consn n a y) => (or_intror (empty (S n) (consn n a y)) ?
+ (inv_empty n a y))
+
+ end.
+
+Type
+[n:nat] [l:(listn n)]
+ <[n:nat] [l:(listn n)](empty n l) \/ ~(empty n l)>Cases l of
+ niln => (or_introl ? ~(empty O niln) intro_empty)
+ | ((consn O a y) as b) => (or_intror (empty (S O) b) ? (inv_empty O a y))
+ | ((consn n a y) as b) => (or_intror (empty (S n) b) ? (inv_empty n a y))
+
+ end.
+
diff --git a/test-suite/ideal-features/Case8.v b/test-suite/ideal-features/Case8.v
new file mode 100644
index 00000000..73b55028
--- /dev/null
+++ b/test-suite/ideal-features/Case8.v
@@ -0,0 +1,40 @@
+Inductive listn : nat-> Set :=
+ niln : (listn O)
+| consn : (n:nat)nat->(listn n) -> (listn (S n)).
+
+Inductive empty : (n:nat)(listn n)-> Prop :=
+ intro_empty: (empty O niln).
+
+Parameter inv_empty : (n,a:nat)(l:(listn n)) ~(empty (S n) (consn n a l)).
+
+Type
+[n:nat] [l:(listn n)]
+ <[n:nat] [l:(listn n)](empty n l) \/ ~(empty n l)>Cases l of
+ niln => (or_introl ? ~(empty O niln) intro_empty)
+ | ((consn n O y) as b) => (or_intror (empty (S n) b) ? (inv_empty n O y))
+ | ((consn n a y) as b) => (or_intror (empty (S n) b) ? (inv_empty n a y))
+
+ end.
+
+
+Type
+[n:nat] [l:(listn n)]
+ <[n:nat] [l:(listn n)](empty n l) \/ ~(empty n l)>Cases l of
+ niln => (or_introl ? ~(empty O niln) intro_empty)
+ | (consn n O y) => (or_intror (empty (S n) (consn n O y)) ?
+ (inv_empty n O y))
+ | (consn n a y) => (or_intror (empty (S n) (consn n a y)) ?
+ (inv_empty n a y))
+
+ end.
+
+
+
+Type
+[n:nat] [l:(listn n)]
+ <[n:nat] [l:(listn n)](empty n l) \/ ~(empty n l)>Cases l of
+ niln => (or_introl ? ~(empty O niln) intro_empty)
+ | ((consn O a y) as b) => (or_intror (empty (S O) b) ? (inv_empty O a y))
+ | ((consn n a y) as b) => (or_intror (empty (S n) b) ? (inv_empty n a y))
+
+ end.