aboutsummaryrefslogtreecommitdiffhomepage
path: root/test-suite/modules/PO.v
diff options
context:
space:
mode:
authorGravatar coq <coq@85f007b7-540e-0410-9357-904b9bb8a0f7>2002-08-02 17:17:42 +0000
committerGravatar coq <coq@85f007b7-540e-0410-9357-904b9bb8a0f7>2002-08-02 17:17:42 +0000
commit12965209478bd99dfbe57f07d5b525e51b903f22 (patch)
tree36a7f5e4802cd321caf02fed0be8349100be09fb /test-suite/modules/PO.v
parent8b26fd6ba739d4f49fae99ed764b086022e44b50 (diff)
Modules dans COQ\!\!\!\!
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@2957 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'test-suite/modules/PO.v')
-rw-r--r--test-suite/modules/PO.v89
1 files changed, 89 insertions, 0 deletions
diff --git a/test-suite/modules/PO.v b/test-suite/modules/PO.v
new file mode 100644
index 000000000..da098a420
--- /dev/null
+++ b/test-suite/modules/PO.v
@@ -0,0 +1,89 @@
+Implicit Arguments On.
+
+Implicits fst.
+Implicits snd.
+
+Module Type PO.
+ Parameter T:Set.
+ Parameter le:T->T->Prop.
+
+ Axiom le_refl : (x:T)(le x x).
+ Axiom le_trans : (x,y,z:T)(le x y) -> (le y z) -> (le x z).
+ Axiom le_antis : (x,y:T)(le x y) -> (le y x) -> (x=y).
+
+ Hints Resolve le_refl le_trans le_antis.
+End PO.
+
+
+Module Pair[X:PO][Y:PO].
+ Definition T:=X.T*Y.T.
+ Definition le:=[p1,p2]
+ (X.le (fst p1) (fst p2)) /\ (Y.le (snd p1) (snd p2)).
+
+ Hints Unfold le.
+
+ Lemma le_refl : (p:T)(le p p).
+ Auto.
+ Save.
+
+ Lemma le_trans : (p1,p2,p3:T)(le p1 p2) -> (le p2 p3) -> (le p1 p3).
+ Unfold le.
+ Intuition; EAuto.
+ Save.
+
+ Lemma le_antis : (p1,p2:T)(le p1 p2) -> (le p2 p1) -> (p1=p2).
+ NewDestruct p1.
+ NewDestruct p2.
+ Unfold le.
+ Intuition.
+ Cut t=t1;Auto.
+ Cut t0=t2;Auto.
+ Intros.
+ Rewrite H0.
+ Rewrite H4.
+ Reflexivity.
+ Save.
+
+ Hints Resolve le_refl le_trans le_antis.
+
+End Pair.
+
+Module Check_Pair [X:PO][Y:PO] : PO := (Pair X Y).
+
+
+Module Type Fmono.
+ Module X:PO.
+ Module Y:PO.
+
+ Parameter f : X.T -> Y.T.
+
+ Axiom f_mono : (x1,x2:X.T)(X.le x1 x2) -> (Y.le (f x1) (f x2)).
+End Fmono.
+
+
+Read Module Nat.
+
+
+Module PlusMono:Fmono.
+ Module Y:=Nat.
+ Module X:=Pair Nat Nat.
+
+ Definition f:=[p] (plus (fst p) (snd p)).
+
+ Lemma f_mono : (p1,p2:nat*nat)(X.le p1 p2) -> (le (f p1) (f p2)).
+ NewDestruct p1;NewDestruct p2.
+ Unfold X.le Nat.le f.
+ Simpl.
+ NewDestruct 1.
+ Induction H.
+
+ Induction n.
+ Auto.
+ Simpl.
+ Apply Nat.le_mono_S.
+ Auto.
+
+ Simpl.
+ Auto.
+ Save.
+End PlusMono.