Library Stdlib.Zmod.ZmodNsatz
Require Export (ltac.notations) NsatzTactic.
Require Import Zdivisibility Lia NsatzTactic.
Require Import ZmodDef ZmodBase ZmodInv.
#[export]
Instance Ring_ops_Zmod m : @Ring_ops (Zmod m) Zmod.zero Zmod.one Zmod.add Zmod.mul Zmod.sub Zmod.opp Logic.eq := {}.
#[export]
Instance Ring_Zmod m : Ring (Ro:=Ring_ops_Zmod m).
#[export]
Instance Cring_ZMod m : Cring (Rr:=Ring_Zmod m).
#[export]
Instance Integral_domain_Zmod m : Z.prime m -> Integral_domain (Rr:=Ring_Zmod m).
Local Ltac extra_reify_of_Z :=
lazymatch goal with |- Ncring_tac.extra_reify _ (@Zmod.of_Z ?m ?z) =>
constr_eq true ltac:(isZcst m);
constr_eq true ltac:(isZcst z);
exact (PEc z)
end.
Local Ltac extra_reify_pow_pos :=
lazymatch goal with |- @Ncring_tac.extra_reify ?R ?ring0 ?ring1 ?add ?mul ?sub ?opp ?lvar (Zmod.pow ?t (Z.pos ?p)) =>
constr_eq true ltac:(isPcst p);
let et := Ncring_tac.reify_term R ring0 ring1 add mul sub opp lvar t in
exact (PEpow et (BinNat.N.pos p))
end.
#[export] Hint Extern 1 (Ncring_tac.extra_reify _ (Zmod.of_Z ?m ?z)) => extra_reify_of_Z : typeclass_instances.
#[export] Hint Extern 1 (Ncring_tac.extra_reify _ (Zmod.pow _ (Z.pos _))) => extra_reify_pow_pos : typeclass_instances.
#[export] Hint Extern 1 (Ncring_tac.extra_reify _ (Zmod.pow _ Z0)) => exact (PEc 0%Z) : typeclass_instances.
Require Import Zdivisibility Lia NsatzTactic.
Require Import ZmodDef ZmodBase ZmodInv.
#[export]
Instance Ring_ops_Zmod m : @Ring_ops (Zmod m) Zmod.zero Zmod.one Zmod.add Zmod.mul Zmod.sub Zmod.opp Logic.eq := {}.
#[export]
Instance Ring_Zmod m : Ring (Ro:=Ring_ops_Zmod m).
#[export]
Instance Cring_ZMod m : Cring (Rr:=Ring_Zmod m).
#[export]
Instance Integral_domain_Zmod m : Z.prime m -> Integral_domain (Rr:=Ring_Zmod m).
Local Ltac extra_reify_of_Z :=
lazymatch goal with |- Ncring_tac.extra_reify _ (@Zmod.of_Z ?m ?z) =>
constr_eq true ltac:(isZcst m);
constr_eq true ltac:(isZcst z);
exact (PEc z)
end.
Local Ltac extra_reify_pow_pos :=
lazymatch goal with |- @Ncring_tac.extra_reify ?R ?ring0 ?ring1 ?add ?mul ?sub ?opp ?lvar (Zmod.pow ?t (Z.pos ?p)) =>
constr_eq true ltac:(isPcst p);
let et := Ncring_tac.reify_term R ring0 ring1 add mul sub opp lvar t in
exact (PEpow et (BinNat.N.pos p))
end.
#[export] Hint Extern 1 (Ncring_tac.extra_reify _ (Zmod.of_Z ?m ?z)) => extra_reify_of_Z : typeclass_instances.
#[export] Hint Extern 1 (Ncring_tac.extra_reify _ (Zmod.pow _ (Z.pos _))) => extra_reify_pow_pos : typeclass_instances.
#[export] Hint Extern 1 (Ncring_tac.extra_reify _ (Zmod.pow _ Z0)) => exact (PEc 0%Z) : typeclass_instances.