diff options
-rw-r--r-- | _CoqProject | 2 | ||||
-rw-r--r-- | src/Util/Tactics.v | 1 | ||||
-rw-r--r-- | src/Util/Tactics/ETransitivity.v | 14 |
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.. ]. |