Zm

Let m be a positive integer. We will look at the integers modulo m and prove that they form a ring. Eventually we will proof that Zp is even a field for p prime.



Section zm.

Variable m:positive.

Lemma m_gt_0 : m>0.

Zm is a CSetoid


Section zm_setoid.

Definition ZModeq (a b:Z) : Prop := (Zmodeq m a b).
Definition ZModap (a b:Z) : CProp := (~ (Zmodeq m a b)).

Lemma Zmodeq_wd : forall a b:Z, a=b -> a mod m = b mod m.

Lemma Zmodap_irreflexive: (irreflexive ZModap).

Lemma Zmodap_symmetric: (Csymmetric ZModap).

Lemma Zmodap_cotransitive: (cotransitive ZModap).

Lemma Zmodap_tight_apart: (tight_apart ZModeq ZModap).

Lemma Zm_is_CSetoid : (is_CSetoid _ ZModeq ZModap).

Definition Zm_csetoid :=
                    (Build_CSetoid Z ZModeq ZModap Zm_is_CSetoid).

End zm_setoid.

Zm is a CAbGroup

Zm is a CRing


Section zm_ring.

Hypothesis Hnontriv: ~(m=xH).

Lemma m_gt_1: m>1.


Section zm_def.

Definition Zm_mult (x y:Zm_cabgroup) : Zm_cabgroup := x*y.

Lemma Zm_mult_strext : (bin_fun_strext _ _ _ Zm_mult).

Lemma Zm_mult_wd : (bin_fun_wd _ _ _ Zm_mult).

Definition Zm_mult_op := (Build_CSetoid_bin_op _ _ Zm_mult_strext).

Lemma Zm_mult_assoc : (associative Zm_mult_op).

Lemma Zm_mult_commutative: forall x y:Zm_cabgroup,
           (Zm_mult_op x y) [=] (Zm_mult_op y x).

Lemma Zm_mult_one : forall x:Zm_cabgroup, (Zm_mult_op x 1)[=]x.

Lemma Zm_mult_onel : forall x:Zm_cabgroup, (Zm_mult_op 1 x)[=]x.

Definition Zm_mult_semigroup := (Build_CSemiGroup Zm_csetoid Zm_mult_op Zm_mult_assoc).

Lemma Zm_mult_one_r : is_rht_unit Zm_mult_op 1.

Lemma Zm_mult_one_l : is_lft_unit Zm_mult_op 1.

Lemma Zm_mult_monoid: (is_CMonoid Zm_mult_semigroup 1).

Lemma Zm_mult_plus_dist : (distributive Zm_mult_op Zm_plus_op).

Lemma Zm_non_triv : (ZModap 1 0).


Lemma Zm_is_CRing : (is_CRing Zm_cabgroup 1 Zm_mult_op).

End zm_def.

Definition Zm_cring := (Build_CRing _ _ _ Zm_is_CRing) : CRing.
Definition Zm := Zm_cring.

Section zm_ring_basics.

Definition Zm_mult_ord (a:Zm)(h:nat) := (a[^]h[=]1) /\
  forall k:nat, (lt k h)->~(a[^]k[=]1).

End zm_ring_basics.

End zm_ring.

Zp is a field

From now on m is prime.

Section zp_def.

Hypothesis Hprime: (Prime m).

Lemma p_not_1: ~m=xH.

Lemma p_gt_0: m>0.

Lemma p_gt_1: m>1.

Definition Zp := (Zm p_not_1).

The inverse element in Zp

Let x in Zp, such that x is apart from Zero. Then we will show that there is an inverse element y such that x*y = One in Zp.

Section zp_nonzero.

Variable x: Zp.
Hypothesis Hx: x[#]0.

Lemma Zp_nonz_mod: 0<(Zmod x m)<m.

Lemma Zp_nonz_relprime: (Zrelprime x m).

End zp_nonzero.

Definition Zp_inv (x:Zp)(Hx:(x[#]0)) : Zp := (Zgcd_coeff_a x m).

Lemma Zp_inv_strext : forall (x y:Zp)(x_ y_:_), (((Zp_inv x x_)[#](Zp_inv y y_))->(x[#]y)).

Lemma Zp_is_CField: (is_CField Zp Zp_inv).

Definition Fp : CField := (Build_CField _ _ Zp_is_CField Zp_inv_strext).

Definition Fp_inv (x:Fp)(Hx:x[#]0) : Fp := (Zp_inv x Hx).

End zp_def.


Section zp_prop.

End zp_prop.

End zm.