Skip to content

Commit

Permalink
Add Z.rewrite_mod_divide
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonGross committed Oct 23, 2022
1 parent a4005d1 commit b797484
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/Util/ZUtil.v
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ Require Crypto.Util.ZUtil.Tactics.PullPush.
Require Crypto.Util.ZUtil.Tactics.PullPush.Modulo.
Require Crypto.Util.ZUtil.Tactics.ReplaceNegWithPos.
Require Crypto.Util.ZUtil.Tactics.RewriteModSmall.
Require Crypto.Util.ZUtil.Tactics.RewriteModDivide.
Require Crypto.Util.ZUtil.Tactics.SimplifyFractionsLe.
Require Crypto.Util.ZUtil.Tactics.SplitMinMax.
Require Crypto.Util.ZUtil.Tactics.ZeroBounds.
Expand Down
21 changes: 21 additions & 0 deletions src/Util/ZUtil/Tactics/RewriteModDivide.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Require Import Coq.ZArith.ZArith.
Require Import Crypto.Util.ZUtil.Divide.
Local Open Scope Z_scope.

Module Z.
(** [rewrite_mod_divide] is a better version of [rewrite <- Z.mod_div_mod_full
by rewrite_mod_divide_solver]; it backtracks across occurences
that the solver fails to solve the side-conditions on. *)
Ltac rewrite_mod_divide_solver := assumption.
Ltac rewrite_mod_divide :=
repeat match goal with
| [ |- context[(?a mod ?m) mod ?n] ]
=> rewrite <- (@Z.mod_div_mod_full a m n) by rewrite_mod_divide_solver
end.
Ltac rewrite_mod_divide_in_hyps :=
repeat match goal with
| [ H : context[(?a mod ?m) mod ?n] |- _ ]
=> rewrite <- (@Z.mod_div_mod_full a m n) in H by rewrite_mod_divide_solver
end.
Ltac rewrite_mod_divide_in_all := repeat (rewrite_mod_divide || rewrite_mod_divide_in_hyps).
End Z.

0 comments on commit b797484

Please sign in to comment.