aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_CoqProject2
-rw-r--r--src/Util/Tactics.v1
-rw-r--r--src/Util/Tactics/ETransitivity.v14
3 files changed, 17 insertions, 0 deletions
diff --git a/_CoqProject b/_CoqProject
index 57df4d61f..e034ba529 100644
--- a/_CoqProject
+++ b/_CoqProject
@@ -225,6 +225,7 @@ src/Specific/GF25519BoundedAddCoordinates.v
src/Specific/GF25519BoundedCommon.v
src/Specific/GF25519Reflective.v
src/Specific/GF25519ReflectiveAddCoordinates.v
+src/Specific/IntegrationTest.v
src/Specific/NewBaseSystemTest.v
src/Specific/SC25519.v
src/Specific/FancyMachine256/Barrett.v
@@ -515,6 +516,7 @@ src/Util/Tactics/BreakMatch.v
src/Util/Tactics/DestructHead.v
src/Util/Tactics/DestructHyps.v
src/Util/Tactics/DoWithHyp.v
+src/Util/Tactics/ETransitivity.v
src/Util/Tactics/Head.v
src/Util/Tactics/RewriteHyp.v
src/Util/Tactics/SpecializeBy.v
diff --git a/src/Util/Tactics.v b/src/Util/Tactics.v
index d98ac1bd4..eac17b0d9 100644
--- a/src/Util/Tactics.v
+++ b/src/Util/Tactics.v
@@ -5,6 +5,7 @@ Require Export Crypto.Util.Tactics.Head.
Require Export Crypto.Util.Tactics.DestructHyps.
Require Export Crypto.Util.Tactics.DestructHead.
Require Export Crypto.Util.Tactics.DoWithHyp.
+Require Export Crypto.Util.Tactics.ETransitivity.
Require Export Crypto.Util.Tactics.RewriteHyp.
Require Export Crypto.Util.Tactics.SpecializeBy.
Require Export Crypto.Util.Tactics.SplitInContext.
diff --git a/src/Util/Tactics/ETransitivity.v b/src/Util/Tactics/ETransitivity.v
new file mode 100644
index 000000000..c6fe59318
--- /dev/null
+++ b/src/Util/Tactics/ETransitivity.v
@@ -0,0 +1,14 @@
+Require Import Coq.Classes.RelationClasses.
+
+Tactic Notation "etransitivity" open_constr(y) :=
+ let R := match goal with |- ?R ?x ?z => constr:(R) end in
+ let x := match goal with |- ?R ?x ?z => constr:(x) end in
+ let z := match goal with |- ?R ?x ?z => constr:(z) end in
+ let pre_proof_term_head := constr:(@transitivity _ R _) in
+ let proof_term_head := (eval cbn in pre_proof_term_head) in
+ refine (proof_term_head x y z _ _); [ change (R x y) | change (R y z) ].
+Tactic Notation "etransitivity" := etransitivity _.
+Tactic Notation "etransitivity_rev" uconstr(y) := [ > etransitivity y; cycle 1.. ].
+Tactic Notation "etransitivity_rev" := etransitivity_rev _.
+
+Ltac transitivity_rev y := [ > transitivity y; cycle 1.. ].