Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Mathlib/Algebra/Algebra/Operations.lean
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,19 @@ theorem mul_bot : M * ⊥ = ⊥ :=
theorem bot_mul : ⊥ * M = ⊥ :=
bot_smul _

@[simp]
theorem mul_eq_bot [NoZeroDivisors A] {M N : Submodule R A} :
M * N = ⊥ ↔ M = ⊥ ∨ N = ⊥ :=
⟨fun hmn =>
or_iff_not_imp_left.mpr fun M_ne_bot =>
N.eq_bot_iff.mpr fun n hn =>
let ⟨m, hm, ne0⟩ := M.ne_bot_iff.mp M_ne_bot
Or.resolve_left (mul_eq_zero.mp ((M * N).eq_bot_iff.mp hmn _ (mul_mem_mul hm hn))) ne0,
fun h => by obtain rfl | rfl := h; exacts [bot_mul _, mul_bot _]⟩

Comment thread
NoahW314 marked this conversation as resolved.
instance [NoZeroDivisors A] : NoZeroDivisors (Submodule R A) where
eq_zero_or_eq_zero_of_mul_eq_zero := mul_eq_bot.1

protected theorem one_mul : (1 : Submodule R A) * M = M :=
Submodule.one_smul _

Expand Down
12 changes: 1 addition & 11 deletions Mathlib/RingTheory/Ideal/Operations.lean
Original file line number Diff line number Diff line change
Expand Up @@ -395,17 +395,7 @@ protected theorem pow_succ : I ^ (n + 1) = I * I ^ n := by

end IsTwoSided

@[simp]
theorem mul_eq_bot [NoZeroDivisors R] : I * J = ⊥ ↔ I = ⊥ ∨ J = ⊥ :=
⟨fun hij =>
or_iff_not_imp_left.mpr fun I_ne_bot =>
J.eq_bot_iff.mpr fun j hj =>
let ⟨i, hi, ne0⟩ := I.ne_bot_iff.mp I_ne_bot
Or.resolve_left (mul_eq_zero.mp ((I * J).eq_bot_iff.mp hij _ (mul_mem_mul hi hj))) ne0,
fun h => by obtain rfl | rfl := h; exacts [bot_mul _, mul_bot _]⟩

instance [NoZeroDivisors R] : NoZeroDivisors (Ideal R) where
eq_zero_or_eq_zero_of_mul_eq_zero := mul_eq_bot.1
theorem mul_eq_bot [NoZeroDivisors R] : I * J = ⊥ ↔ I = ⊥ ∨ J = ⊥ := Submodule.mul_eq_bot
Comment thread
themathqueen marked this conversation as resolved.

instance {S A : Type*} [Semiring S] [SMul R S] [AddCommMonoid A] [Module R A] [Module S A]
[IsScalarTower R S A] [IsTorsionFree R A] {I : Submodule S A} : IsTorsionFree R I :=
Expand Down
Loading