Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 3d621b5

Browse files
urkudmergify[bot]
andauthored
refactor(ring_theory/subring): use bundled homs (#2144)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent ade1ee3 commit 3d621b5

File tree

3 files changed

+25
-32
lines changed

3 files changed

+25
-32
lines changed

src/field_theory/subfield.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ instance preimage.is_subfield {K : Type*} [field K]
3434
{ inv_mem := λ a (ha : f a ∈ s), show f a⁻¹ ∈ s,
3535
by { rw [f.map_inv],
3636
exact is_subfield.inv_mem ha },
37-
..is_ring_hom.is_subring_preimage f s }
37+
..f.is_subring_preimage s }
3838

3939
instance image.is_subfield {K : Type*} [field K]
4040
(f : F →+* K) (s : set F) [is_subfield s] : is_subfield (f '' s) :=
4141
{ inv_mem := λ a ⟨x, xmem, ha⟩, ⟨x⁻¹, is_subfield.inv_mem xmem, ha ▸ f.map_inv⟩,
42-
..is_ring_hom.is_subring_image f s }
42+
..f.is_subring_image s }
4343

4444
instance range.is_subfield {K : Type*} [field K]
4545
(f : F →+* K) : is_subfield (set.range f) :=

src/ring_theory/integral_closure.lean

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,14 @@ theorem fg_adjoin_of_finite {s : set A} (hfs : s.finite)
7878
(his : ∀ x ∈ s, is_integral R x) : (algebra.adjoin R s : submodule R A).fg :=
7979
set.finite.induction_on hfs (λ _, ⟨finset.singleton 1, le_antisymm
8080
(span_le.2 $ set.singleton_subset_iff.2 $ is_submonoid.one_mem _)
81-
(show ring.closure _ ⊆ _, by rw set.union_empty; exact
82-
set.subset.trans (ring.closure_subset (set.subset.refl _))
83-
(λ y ⟨x, hx⟩, hx ▸ mul_one (algebra_map A x) ▸ algebra.smul_def x (1:A) ▸ (mem_coe _).2
84-
(submodule.smul_mem _ x $ subset_span $ or.inl rfl)))⟩)
81+
begin
82+
change ring.closure _ ⊆ _,
83+
simp only [set.union_empty, finset.coe_singleton, span_singleton_eq_range,
84+
algebra.smul_def, mul_one],
85+
-- TODO drop the next `rw` once `algebra_map` will be a bundled `ring_hom`
86+
rw [← ring_hom.coe_of (algebra_map A)]; try { apply_instance },
87+
exact ring.closure_subset (set.subset.refl _)
88+
end⟩)
8589
(λ a s has hs ih his, by rw [← set.union_singleton, algebra.adjoin_union_coe_submodule]; exact
8690
fg_mul _ _ (ih $ λ i hi, his i $ set.mem_insert_of_mem a hi)
8791
(fg_adjoin_singleton_of_integral _ $ his a $ set.mem_insert a s)) his

src/ring_theory/subring.lean

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,18 @@ instance subset.ring {S : set R} [is_subring S] : ring S :=
2626

2727
instance subtype.ring {S : set R} [is_subring S] : ring (subtype S) := subset.ring
2828

29-
namespace is_ring_hom
30-
31-
instance {S : set R} [is_subring S] : is_ring_hom (@subtype.val R S) :=
32-
by refine {..} ; intros ; refl
29+
namespace ring_hom
3330

3431
instance is_subring_preimage {R : Type u} {S : Type v} [ring R] [ring S]
35-
(f : R → S) [is_ring_hom f] (s : set S) [is_subring s] : is_subring (f ⁻¹' s) := {}
32+
(f : R →+* S) (s : set S) [is_subring s] : is_subring (f ⁻¹' s) := {}
3633

3734
instance is_subring_image {R : Type u} {S : Type v} [ring R] [ring S]
38-
(f : R → S) [is_ring_hom f] (s : set R) [is_subring s] : is_subring (f '' s) := {}
35+
(f : R →+* S) (s : set R) [is_subring s] : is_subring (f '' s) := {}
3936

4037
instance is_subring_set_range {R : Type u} {S : Type v} [ring R] [ring S]
41-
(f : R → S) [is_ring_hom f] : is_subring (set.range f) := {}
38+
(f : R →+* S) : is_subring (set.range f) := {}
4239

43-
end is_ring_hom
40+
end ring_hom
4441

4542
/-- Restrict the codomain of a ring homomorphism to a subring that includes the range. -/
4643
def ring_hom.cod_restrict {R : Type u} {S : Type v} [ring R] [ring S] (f : R →+* S)
@@ -52,20 +49,12 @@ def ring_hom.cod_restrict {R : Type u} {S : Type v} [ring R] [ring S] (f : R →
5249
map_mul' := λ x y, subtype.eq $ f.map_mul x y,
5350
map_one' := subtype.eq f.map_one }
5451

55-
instance subtype_val.is_ring_hom {s : set R} [is_subring s] :
56-
is_ring_hom (subtype.val : s → R) :=
57-
{ ..subtype_val.is_add_group_hom, ..subtype_val.is_monoid_hom }
58-
59-
instance coe.is_ring_hom {s : set R} [is_subring s] : is_ring_hom (coe : s → R) :=
60-
subtype_val.is_ring_hom
61-
62-
instance subtype_mk.is_ring_hom {γ : Type*} [ring γ] {s : set R} [is_subring s] (f : γ → R)
63-
[is_ring_hom f] (h : ∀ x, f x ∈ s) : is_ring_hom (λ x, (⟨f x, h x⟩ : s)) :=
64-
{ ..subtype_mk.is_add_group_hom f h, ..subtype_mk.is_monoid_hom f h }
52+
/-- Coersion `S → R` as a ring homormorphism-/
53+
def is_subring.subtype (S : set R) [is_subring S] : S →+* R :=
54+
⟨coe, rfl, λ _ _, rfl, rfl, λ _ _, rfl⟩
6555

66-
instance set_inclusion.is_ring_hom {s t : set R} [is_subring s] [is_subring t] (h : s ⊆ t) :
67-
is_ring_hom (set.inclusion h) :=
68-
subtype_mk.is_ring_hom _ _
56+
@[simp] lemma is_subring.coe_subtype {S : set R} [is_subring S] :
57+
⇑(is_subring.subtype S) = coe := rfl
6958

7059
variables {cR : Type u} [comm_ring cR]
7160

@@ -190,18 +179,18 @@ theorem closure_subset_iff (s t : set R) [is_subring t] : closure s ⊆ t ↔ s
190179
theorem closure_mono {s t : set R} (H : s ⊆ t) : closure s ⊆ closure t :=
191180
closure_subset $ set.subset.trans H subset_closure
192181

193-
lemma image_closure {S : Type*} [ring S] (f : R → S) [is_ring_hom f] (s : set R) :
182+
lemma image_closure {S : Type*} [ring S] (f : R →+* S) (s : set R) :
194183
f '' closure s = closure (f '' s) :=
195184
le_antisymm
196185
begin
197186
rintros _ ⟨x, hx, rfl⟩,
198187
apply in_closure.rec_on hx; intros,
199-
{ rw [is_monoid_hom.map_one f], apply is_submonoid.one_mem },
200-
{ rw [is_ring_hom.map_neg f, is_monoid_hom.map_one f],
188+
{ rw [f.map_one], apply is_submonoid.one_mem },
189+
{ rw [f.map_neg, is_monoid_hom.map_one f],
201190
apply is_add_subgroup.neg_mem, apply is_submonoid.one_mem },
202-
{ rw [is_monoid_hom.map_mul f],
191+
{ rw [f.map_mul],
203192
apply is_submonoid.mul_mem; solve_by_elim [subset_closure, set.mem_image_of_mem] },
204-
{ rw [is_ring_hom.map_add f], apply is_add_submonoid.add_mem, assumption' },
193+
{ rw [f.map_add], apply is_add_submonoid.add_mem, assumption' },
205194
end
206195
(closure_subset $ set.image_subset _ subset_closure)
207196

0 commit comments

Comments
 (0)