aboutsummaryrefslogtreecommitdiff
path: root/src/Util/ZUtil/EquivModulo.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-06-10 15:04:32 -0400
committerGravatar Jason Gross <jgross@mit.edu>2017-06-10 15:04:32 -0400
commit6ee6d5242d8caab769bd60ee4d44efe41add8bda (patch)
treeaa309b28c4c7279b113a55dcbe7b8fd9b03801cc /src/Util/ZUtil/EquivModulo.v
parentf2ddb29e6ab3c2390b2bb78260c082e52616ff0a (diff)
Add Z.pow_mod_Proper
Diffstat (limited to 'src/Util/ZUtil/EquivModulo.v')
-rw-r--r--src/Util/ZUtil/EquivModulo.v9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Util/ZUtil/EquivModulo.v b/src/Util/ZUtil/EquivModulo.v
index 93de3f267..3578a8223 100644
--- a/src/Util/ZUtil/EquivModulo.v
+++ b/src/Util/ZUtil/EquivModulo.v
@@ -29,6 +29,12 @@ Module Z.
Local Instance opp_mod_Proper : Proper (equiv_modulo ==> equiv_modulo) Z.opp.
Proof. unfold equiv_modulo, Proper, respectful; auto with zarith. Qed.
+ Local Instance pow_mod_Proper : Proper (equiv_modulo ==> eq ==> equiv_modulo) Z.pow.
+ Proof.
+ intros ?? H ???; subst; hnf in H |- *.
+ rewrite Z.power_mod_full, H, <- Z.power_mod_full; reflexivity.
+ Qed.
+
Local Instance modulo_equiv_modulo_Proper
: Proper (equiv_modulo ==> (fun x y => x = N /\ N = y) ==> Logic.eq) Z.modulo.
Proof.
@@ -59,11 +65,12 @@ Module Z.
Existing Instance add_mod_Proper.
Existing Instance sub_mod_Proper.
Existing Instance opp_mod_Proper.
+ Existing Instance pow_mod_Proper.
Existing Instance modulo_equiv_modulo_Proper.
Existing Instance eq_to_ProperProxy.
End EquivModuloInstances.
Module RemoveEquivModuloInstances (dummy : Nop).
- Global Remove Hints equiv_modulo_Reflexive equiv_modulo_Symmetric equiv_modulo_Transitive mul_mod_Proper add_mod_Proper sub_mod_Proper opp_mod_Proper modulo_equiv_modulo_Proper eq_to_ProperProxy : typeclass_instances.
+ Global Remove Hints equiv_modulo_Reflexive equiv_modulo_Symmetric equiv_modulo_Transitive mul_mod_Proper add_mod_Proper sub_mod_Proper opp_mod_Proper pow_mod_Proper modulo_equiv_modulo_Proper eq_to_ProperProxy : typeclass_instances.
End RemoveEquivModuloInstances.
End Z.