Skip to content

Commit 8b781ec

Browse files
committed
feat(Algebra): add missing substructure lemmas (#20269)
Add missing boilerplate lemmas about the maps `.toNonUnitalSubsemiring ` and `.subsemiringClosure` This PR is split off from #16094
1 parent 758574f commit 8b781ec

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

Mathlib/Algebra/Algebra/Subalgebra/Unitization.lean

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,36 @@ variable {R : Type*} [NonAssocSemiring R]
208208
def Subsemiring.toNonUnitalSubsemiring (S : Subsemiring R) : NonUnitalSubsemiring R :=
209209
{ S with }
210210

211+
theorem Subsemiring.toNonUnitalSubsemiring_injective :
212+
Function.Injective (toNonUnitalSubsemiring : Subsemiring R → _) :=
213+
fun S₁ S₂ h => SetLike.ext'_iff.2 (
214+
show (S₁.toNonUnitalSubsemiring : Set R) = S₂ from SetLike.ext'_iff.1 h)
215+
216+
@[simp]
217+
theorem Subsemiring.toNonUnitalSubsemiring_inj {S₁ S₂ : Subsemiring R} :
218+
S₁.toNonUnitalSubsemiring = S₂.toNonUnitalSubsemiring ↔ S₁ = S₂ :=
219+
toNonUnitalSubsemiring_injective.eq_iff
220+
221+
@[simp]
222+
theorem Subsemiring.mem_toNonUnitalSubsemiring {S : Subsemiring R}
223+
{x : R} : x ∈ S.toNonUnitalSubsemiring ↔ x ∈ S := Iff.rfl
224+
225+
@[simp]
226+
theorem Subsemiring.coe_toNonUnitalSubsemiring (S : Subsemiring R) :
227+
(S.toNonUnitalSubsemiring : Set R) = S := rfl
228+
211229
theorem Subsemiring.one_mem_toNonUnitalSubsemiring (S : Subsemiring R) :
212230
(1 : R) ∈ S.toNonUnitalSubsemiring :=
213231
S.one_mem
214232

233+
@[simp]
234+
theorem Submonoid.subsemiringClosure_toNonUnitalSubsemiring {M : Submonoid R} :
235+
M.subsemiringClosure.toNonUnitalSubsemiring = .closure M := by
236+
refine Eq.symm (NonUnitalSubsemiring.closure_eq_of_le ?_ (fun _ hx => ?_))
237+
· simp [Submonoid.subsemiringClosure_coe]
238+
· simp [Submonoid.subsemiringClosure_mem] at hx
239+
induction hx using AddSubmonoid.closure_induction <;> aesop
240+
215241
/-- Turn a non-unital subsemiring containing `1` into a subsemiring. -/
216242
def NonUnitalSubsemiring.toSubsemiring (S : NonUnitalSubsemiring R) (h1 : (1 : R) ∈ S) :
217243
Subsemiring R :=
@@ -241,7 +267,7 @@ theorem unitization_apply (x : Unitization ℕ s) : unitization s x = x.fst + x.
241267
rfl
242268

243269
theorem unitization_range :
244-
(unitization s).range = subalgebraOfSubsemiring (Subsemiring.closure s) := by
270+
(unitization s).range = subalgebraOfSubsemiring (.closure s) := by
245271
have := AddSubmonoidClass.nsmulMemClass (S := S)
246272
rw [unitization, NonUnitalSubalgebra.unitization_range (hSRA := this), Algebra.adjoin_nat]
247273

@@ -288,7 +314,7 @@ theorem unitization_apply (x : Unitization ℤ s) : unitization s x = x.fst + x.
288314
rfl
289315

290316
theorem unitization_range :
291-
(unitization s).range = subalgebraOfSubring (Subring.closure s) := by
317+
(unitization s).range = subalgebraOfSubring (.closure s) := by
292318
have := AddSubgroupClass.zsmulMemClass (S := S)
293319
rw [unitization, NonUnitalSubalgebra.unitization_range (hSRA := this), Algebra.adjoin_int]
294320

Mathlib/Algebra/Ring/Subsemiring/Basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,10 @@ theorem subsemiringClosure_coe :
391391
(M.subsemiringClosure : Set R) = AddSubmonoid.closure (M : Set R) :=
392392
rfl
393393

394+
theorem subsemiringClosure_mem {x : R} :
395+
x ∈ M.subsemiringClosure ↔ x ∈ AddSubmonoid.closure (M : Set R) :=
396+
Iff.rfl
397+
394398
theorem subsemiringClosure_toAddSubmonoid :
395399
M.subsemiringClosure.toAddSubmonoid = AddSubmonoid.closure (M : Set R) :=
396400
rfl

0 commit comments

Comments
 (0)