@@ -72,15 +72,14 @@ theorem mul_apply_mul_eq_mul_of_uniqueMul [Mul A] {f g : MonoidAlgebra R A} {a0
7272 classical
7373 simp_rw [mul_apply, sum, ← Finset.sum_product']
7474 refine (Finset.sum_eq_single (a0, b0) ?_ ?_).trans (if_pos rfl) <;> simp_rw [Finset.mem_product]
75- · refine fun ab hab hne => if_neg (fun he => hne <| Prod.ext ?_ ?_)
75+ · refine fun ab hab hne ↦ if_neg (fun he ↦ hne <| Prod.ext ?_ ?_)
7676 exacts [(h hab.1 hab.2 he).1 , (h hab.1 hab.2 he).2 ]
77- · refine fun hnotMem => ite_eq_right_iff.mpr (fun _ => ?_)
77+ · refine fun hnotMem ↦ ite_eq_right_iff.mpr (fun _ ↦ ?_)
7878 rcases not_and_or.mp hnotMem with af | bg
7979 · rw [notMem_support_iff.mp af, zero_mul]
8080 · rw [notMem_support_iff.mp bg, mul_zero]
8181
82- instance instNoZeroDivisorsOfUniqueProds [NoZeroDivisors R] [Mul A] [UniqueProds A] :
83- NoZeroDivisors (MonoidAlgebra R A) where
82+ instance [NoZeroDivisors R] [Mul A] [UniqueProds A] : NoZeroDivisors (MonoidAlgebra R A) where
8483 eq_zero_or_eq_zero_of_mul_eq_zero {a b} ab := by
8584 contrapose! ab
8685 obtain ⟨da, a0, db, b0, h⟩ := UniqueProds.uniqueMul_of_nonempty
@@ -89,6 +88,34 @@ instance instNoZeroDivisorsOfUniqueProds [NoZeroDivisors R] [Mul A] [UniqueProds
8988 rw [mem_support_iff] at a0 b0 ⊢
9089 exact mul_apply_mul_eq_mul_of_uniqueMul h ▸ mul_ne_zero a0 b0
9190
91+ instance [IsCancelAdd R] [IsLeftCancelMulZero R] [Mul A] [UniqueProds A] :
92+ IsLeftCancelMulZero (MonoidAlgebra R A) where
93+ mul_left_cancel_of_ne_zero {f g₁ g₂} hf eq := by
94+ classical
95+ induction hg : g₁.support ∪ g₂.support using Finset.eraseInduction generalizing g₁ g₂ with
96+ | _ s ih =>
97+ obtain h | h := s.eq_empty_or_nonempty <;> subst s
98+ · simp_rw [Finset.union_eq_empty, support_eq_empty] at h; exact h.1 .trans h.2 .symm
99+ have ⟨af, haf, ag, hag, uniq⟩ := UniqueProds.uniqueMul_of_nonempty (support_nonempty_iff.2 hf) h
100+ have h := mul_apply_mul_eq_mul_of_uniqueMul (uniq.mono subset_rfl Finset.subset_union_left)
101+ rw [eq, mul_apply_mul_eq_mul_of_uniqueMul (uniq.mono subset_rfl Finset.subset_union_right)] at h
102+ have := mul_left_cancel₀ (mem_support_iff.mp haf) h
103+ rw [← g₁.erase_add_single ag, ← g₂.erase_add_single ag, this] at eq ⊢
104+ simp_rw [mul_add, add_right_cancel_iff] at eq
105+ rw [ih ag hag eq]
106+ simp_rw [support_erase, Finset.erase_union_distrib]
107+
108+ instance [IsCancelAdd R] [IsRightCancelMulZero R] [Mul A] [UniqueProds A] :
109+ IsRightCancelMulZero (MonoidAlgebra R A) :=
110+ MulOpposite.isLeftCancelMulZero_iff.mp <|
111+ MonoidAlgebra.opRingEquiv.injective.isLeftCancelMulZero _ (map_zero _) (map_mul _)
112+
113+ instance [IsCancelAdd R] [IsCancelMulZero R] [Mul A] [UniqueProds A] :
114+ IsCancelMulZero (MonoidAlgebra R A) where
115+
116+ instance [IsCancelAdd R] [IsDomain R] [Monoid A] [UniqueProds A] :
117+ IsDomain (MonoidAlgebra R A) where
118+
92119end MonoidAlgebra
93120
94121namespace AddMonoidAlgebra
@@ -100,26 +127,20 @@ theorem mul_apply_add_eq_mul_of_uniqueAdd [Add A] {f g : R[A]} {a0 b0 : A}
100127 (f * g) (a0 + b0) = f a0 * g b0 :=
101128 MonoidAlgebra.mul_apply_mul_eq_mul_of_uniqueMul (A := Multiplicative A) h
102129
103- instance instNoZeroDivisorsOfUniqueSums [NoZeroDivisors R] [Add A] [UniqueSums A] :
104- NoZeroDivisors R[A] := MonoidAlgebra.instNoZeroDivisorsOfUniqueProds (A := Multiplicative A)
105-
106- end AddMonoidAlgebra
107- end Semiring
108-
109- section Ring
110- variable [Ring R] [IsDomain R]
130+ instance [NoZeroDivisors R] [Add A] [UniqueSums A] : NoZeroDivisors R[A] :=
131+ inferInstanceAs (NoZeroDivisors (MonoidAlgebra R (Multiplicative A)))
111132
112- namespace MonoidAlgebra
133+ instance [IsCancelAdd R] [IsLeftCancelMulZero R] [Add A] [UniqueSums A] :
134+ IsLeftCancelMulZero R[A] :=
135+ inferInstanceAs (IsLeftCancelMulZero (MonoidAlgebra R (Multiplicative A)))
113136
114- instance instIsDomainOfUniqueProds [Monoid A] [UniqueProds A] : IsDomain (MonoidAlgebra R A) :=
115- NoZeroDivisors.to_isDomain _
137+ instance [IsCancelAdd R] [IsRightCancelMulZero R] [Add A] [UniqueSums A] :
138+ IsRightCancelMulZero R[A] :=
139+ inferInstanceAs (IsRightCancelMulZero (MonoidAlgebra R (Multiplicative A)))
116140
117- end MonoidAlgebra
141+ instance [IsCancelAdd R] [IsCancelMulZero R] [Add A] [UniqueSums A] : IsCancelMulZero R[A] where
118142
119- namespace AddMonoidAlgebra
120-
121- instance instIsDomainOfUniqueSums [AddMonoid A] [UniqueSums A] : IsDomain R[A] :=
122- NoZeroDivisors.to_isDomain _
143+ instance [IsCancelAdd R] [IsDomain R] [AddMonoid A] [UniqueSums A] : IsDomain R[A] where
123144
124145end AddMonoidAlgebra
125- end Ring
146+ end Semiring
0 commit comments