Module docstring
{"# modular equivalence for submodule "}
{"# modular equivalence for submodule "}
SModEq
definition
(x y : M) : Prop
/-- A predicate saying two elements of a module are equivalent modulo a submodule. -/
def SModEq (x y : M) : Prop :=
(Submodule.Quotient.mk x : M ⧸ U) = Submodule.Quotient.mk y
term_≡_[SMOD_]
definition
: Lean.TrailingParserDescr✝
SModEq.def
theorem
: x ≡ y [SMOD U] ↔ (Submodule.Quotient.mk x : M ⧸ U) = Submodule.Quotient.mk y
protected theorem SModEq.def :
x ≡ y [SMOD U]x ≡ y [SMOD U] ↔ (Submodule.Quotient.mk x : M ⧸ U) = Submodule.Quotient.mk y :=
Iff.rfl
SModEq.sub_mem
theorem
: x ≡ y [SMOD U] ↔ x - y ∈ U
theorem sub_mem : x ≡ y [SMOD U]x ≡ y [SMOD U] ↔ x - y ∈ U := by rw [SModEq.def, Submodule.Quotient.eq]
SModEq.top
theorem
: x ≡ y [SMOD (⊤ : Submodule R M)]
@[simp]
theorem top : x ≡ y [SMOD (⊤ : Submodule R M)] :=
(Submodule.Quotient.eq ⊤).2 mem_top
SModEq.bot
theorem
: x ≡ y [SMOD (⊥ : Submodule R M)] ↔ x = y
@[simp]
theorem bot : x ≡ y [SMOD (⊥ : Submodule R M)]x ≡ y [SMOD (⊥ : Submodule R M)] ↔ x = y := by
rw [SModEq.def, Submodule.Quotient.eq, mem_bot, sub_eq_zero]
SModEq.mono
theorem
(HU : U₁ ≤ U₂) (hxy : x ≡ y [SMOD U₁]) : x ≡ y [SMOD U₂]
@[mono]
theorem mono (HU : U₁ ≤ U₂) (hxy : x ≡ y [SMOD U₁]) : x ≡ y [SMOD U₂] :=
(Submodule.Quotient.eq U₂).2 <| HU <| (Submodule.Quotient.eq U₁).1 hxy
SModEq.refl
theorem
(x : M) : x ≡ x [SMOD U]
@[refl]
protected theorem refl (x : M) : x ≡ x [SMOD U] :=
@rfl _ _
SModEq.rfl
theorem
: x ≡ x [SMOD U]
protected theorem rfl : x ≡ x [SMOD U] :=
SModEq.refl _
SModEq.instIsRefl
instance
: IsRefl _ (SModEq U)
instance : IsRefl _ (SModEq U) :=
⟨SModEq.refl⟩
SModEq.symm
theorem
(hxy : x ≡ y [SMOD U]) : y ≡ x [SMOD U]
@[symm]
nonrec theorem symm (hxy : x ≡ y [SMOD U]) : y ≡ x [SMOD U] :=
hxy.symm
SModEq.trans
theorem
(hxy : x ≡ y [SMOD U]) (hyz : y ≡ z [SMOD U]) : x ≡ z [SMOD U]
@[trans]
nonrec theorem trans (hxy : x ≡ y [SMOD U]) (hyz : y ≡ z [SMOD U]) : x ≡ z [SMOD U] :=
hxy.trans hyz
SModEq.instTrans
instance
: Trans (SModEq U) (SModEq U) (SModEq U)
SModEq.add
theorem
(hxy₁ : x₁ ≡ y₁ [SMOD U]) (hxy₂ : x₂ ≡ y₂ [SMOD U]) : x₁ + x₂ ≡ y₁ + y₂ [SMOD U]
theorem add (hxy₁ : x₁ ≡ y₁ [SMOD U]) (hxy₂ : x₂ ≡ y₂ [SMOD U]) : x₁ + x₂ ≡ y₁ + y₂ [SMOD U] := by
rw [SModEq.def] at hxy₁ hxy₂ ⊢
simp_rw [Quotient.mk_add, hxy₁, hxy₂]
SModEq.smul
theorem
(hxy : x ≡ y [SMOD U]) (c : R) : c • x ≡ c • y [SMOD U]
theorem smul (hxy : x ≡ y [SMOD U]) (c : R) : c • x ≡ c • y [SMOD U] := by
rw [SModEq.def] at hxy ⊢
simp_rw [Quotient.mk_smul, hxy]
SModEq.nsmul
theorem
(hxy : x ≡ y [SMOD U]) (n : ℕ) : n • x ≡ n • y [SMOD U]
lemma nsmul (hxy : x ≡ y [SMOD U]) (n : ℕ) : n • x ≡ n • y [SMOD U] := by
rw [SModEq.def] at hxy ⊢
simp_rw [Quotient.mk_smul, hxy]
SModEq.zsmul
theorem
(hxy : x ≡ y [SMOD U]) (n : ℤ) : n • x ≡ n • y [SMOD U]
lemma zsmul (hxy : x ≡ y [SMOD U]) (n : ℤ) : n • x ≡ n • y [SMOD U] := by
rw [SModEq.def] at hxy ⊢
simp_rw [Quotient.mk_smul, hxy]
SModEq.mul
theorem
{I : Ideal A} {x₁ x₂ y₁ y₂ : A} (hxy₁ : x₁ ≡ y₁ [SMOD I]) (hxy₂ : x₂ ≡ y₂ [SMOD I]) : x₁ * x₂ ≡ y₁ * y₂ [SMOD I]
theorem mul {I : Ideal A} {x₁ x₂ y₁ y₂ : A} (hxy₁ : x₁ ≡ y₁ [SMOD I])
(hxy₂ : x₂ ≡ y₂ [SMOD I]) : x₁ * x₂ ≡ y₁ * y₂ [SMOD I] := by
simp only [SModEq.def, Ideal.Quotient.mk_eq_mk, map_mul] at hxy₁ hxy₂ ⊢
rw [hxy₁, hxy₂]
SModEq.pow
theorem
{I : Ideal A} {x y : A} (n : ℕ) (hxy : x ≡ y [SMOD I]) : x ^ n ≡ y ^ n [SMOD I]
lemma pow {I : Ideal A} {x y : A} (n : ℕ) (hxy : x ≡ y [SMOD I]) :
x ^ n ≡ y ^ n [SMOD I] := by
simp only [SModEq.def, Ideal.Quotient.mk_eq_mk, map_pow] at hxy ⊢
rw [hxy]
SModEq.neg
theorem
(hxy : x ≡ y [SMOD U]) : -x ≡ -y [SMOD U]
lemma neg (hxy : x ≡ y [SMOD U]) : - x ≡ - y [SMOD U] := by
simpa only [SModEq.def, Quotient.mk_neg, neg_inj]
SModEq.sub
theorem
(hxy₁ : x₁ ≡ y₁ [SMOD U]) (hxy₂ : x₂ ≡ y₂ [SMOD U]) : x₁ - x₂ ≡ y₁ - y₂ [SMOD U]
lemma sub (hxy₁ : x₁ ≡ y₁ [SMOD U]) (hxy₂ : x₂ ≡ y₂ [SMOD U]) : x₁ - x₂ ≡ y₁ - y₂ [SMOD U] := by
rw [SModEq.def] at hxy₁ hxy₂ ⊢
simp_rw [Quotient.mk_sub, hxy₁, hxy₂]
SModEq.zero
theorem
: x ≡ 0 [SMOD U] ↔ x ∈ U
theorem zero : x ≡ 0 [SMOD U]x ≡ 0 [SMOD U] ↔ x ∈ U := by rw [SModEq.def, Submodule.Quotient.eq, sub_zero]
sub_smodEq_zero
theorem
: x - y ≡ 0 [SMOD U] ↔ x ≡ y [SMOD U]
theorem _root_.sub_smodEq_zero : x - y ≡ 0 [SMOD U]x - y ≡ 0 [SMOD U] ↔ x ≡ y [SMOD U] := by
simp only [SModEq.sub_mem, sub_zero]
SModEq.map
theorem
(hxy : x ≡ y [SMOD U]) (f : M →ₗ[R] N) : f x ≡ f y [SMOD U.map f]
theorem map (hxy : x ≡ y [SMOD U]) (f : M →ₗ[R] N) : f x ≡ f y [SMOD U.map f] :=
(Submodule.Quotient.eq _).2 <| f.map_sub x y ▸ mem_map_of_mem <| (Submodule.Quotient.eq _).1 hxy
SModEq.comap
theorem
{f : M →ₗ[R] N} (hxy : f x ≡ f y [SMOD V]) : x ≡ y [SMOD V.comap f]
theorem comap {f : M →ₗ[R] N} (hxy : f x ≡ f y [SMOD V]) : x ≡ y [SMOD V.comap f] :=
(Submodule.Quotient.eq _).2 <|
show f (x - y) ∈ V from (f.map_sub x y).symm ▸ (Submodule.Quotient.eq _).1 hxy
SModEq.eval
theorem
{R : Type*} [CommRing R] {I : Ideal R} {x y : R} (h : x ≡ y [SMOD I]) (f : R[X]) : f.eval x ≡ f.eval y [SMOD I]
theorem eval {R : Type*} [CommRing R] {I : Ideal R} {x y : R} (h : x ≡ y [SMOD I]) (f : R[X]) :
f.eval x ≡ f.eval y [SMOD I] := by
rw [SModEq.def] at h ⊢
show Ideal.Quotient.mk I (f.eval x) = Ideal.Quotient.mk I (f.eval y)
replace h : Ideal.Quotient.mk I x = Ideal.Quotient.mk I y := h
rw [← Polynomial.eval₂_at_apply, ← Polynomial.eval₂_at_apply, h]