aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7>2007-02-07 20:12:34 +0000
committerGravatar msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7>2007-02-07 20:12:34 +0000
commit13223ba6649dfd7501a34a700abc09c2e7169636 (patch)
tree626096576a69f19470ee2d2682373cc7469f99a9
parentddbfb9299340f069a26fc6218e82031a8a99d056 (diff)
Add tactics for induction on subterms.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9623 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--Makefile2
-rw-r--r--contrib/subtac/Tactics.v22
-rw-r--r--contrib/subtac/Utils.v4
3 files changed, 27 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index c9156cb17..4b8580d66 100644
--- a/Makefile
+++ b/Makefile
@@ -1101,7 +1101,7 @@ JPROVERVO=
CCVO=
-SUBTACVO=contrib/subtac/Utils.vo contrib/subtac/FixSub.vo contrib/subtac/Subtac.vo \
+SUBTACVO=contrib/subtac/Tactics.vo contrib/subtac/Utils.vo contrib/subtac/FixSub.vo contrib/subtac/Subtac.vo \
contrib/subtac/FunctionalExtensionality.vo
RTAUTOVO = \
diff --git a/contrib/subtac/Tactics.v b/contrib/subtac/Tactics.v
new file mode 100644
index 000000000..25d8d8319
--- /dev/null
+++ b/contrib/subtac/Tactics.v
@@ -0,0 +1,22 @@
+Ltac induction_with_subterm c H :=
+ let x := fresh "x" in
+ let y := fresh "y" in
+ (set(x := c) ; assert(y:x = c) by reflexivity ;
+ rewrite <- y in H ;
+ induction H ; subst).
+
+Ltac induction_on_subterm c :=
+ let x := fresh "x" in
+ let y := fresh "y" in
+ (set(x := c) ; assert(y:x = c) by reflexivity ; clearbody x ; induction x ; inversion y ; try subst ;
+ clear y).
+
+Ltac induction_with_subterms c c' H :=
+ let x := fresh "x" in
+ let y := fresh "y" in
+ let z := fresh "z" in
+ let w := fresh "w" in
+ (set(x := c) ; assert(y:x = c) by reflexivity ;
+ set(z := c') ; assert(w:z = c') by reflexivity ;
+ rewrite <- y in H ; rewrite <- w in H ;
+ induction H ; subst).
diff --git a/contrib/subtac/Utils.v b/contrib/subtac/Utils.v
index 569c52e89..fc002a01b 100644
--- a/contrib/subtac/Utils.v
+++ b/contrib/subtac/Utils.v
@@ -4,6 +4,8 @@ Notation "'fun' { x : A | P } => Q" :=
(fun x:{x:A|P} => Q)
(at level 200, x ident, right associativity).
+Notation " {{ x }} " := (tt : { y : unit | x }).
+
Notation "( x & ? )" := (@exist _ _ x _) : core_scope.
Notation " ! " := (False_rect _ _).
@@ -82,6 +84,8 @@ Extraction Inline proj1_sig.
Extract Inductive unit => "unit" [ "()" ].
Extract Inductive bool => "bool" [ "true" "false" ].
Extract Inductive sumbool => "bool" [ "true" "false" ].
+Axiom pair : Type -> Type -> Type.
+Extract Constant pair "'a" "'b" => " 'a * 'b ".
Extract Inductive prod => "pair" [ "" ].
Extract Inductive sigT => "pair" [ "" ].