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

Commit 1ebb206

Browse files
committed
feat(ring_theory/localization): lemmas about Frac(R)-spans (#12425)
A couple of lemmas relating spans in the localization of `R` to spans in `R` itself. Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
1 parent e48f2e8 commit 1ebb206

3 files changed

Lines changed: 103 additions & 0 deletions

File tree

src/algebra/algebra/tower.lean

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,25 @@ le_antisymm (span_le.2 $ λ x hx, let ⟨p, q, hps, hqt, hpqx⟩ := set.mem_smul
308308
(λ _ _, add_mem _)
309309
(λ k x hx, smul_mem_span_smul' hs hx)
310310

311+
/-- A variant of `submodule.span_image` for `algebra_map`. -/
312+
lemma span_algebra_map_image (a : set R) :
313+
submodule.span R (algebra_map R S '' a) =
314+
(submodule.span R a).map (algebra.linear_map R S) :=
315+
(submodule.span_image $ algebra.linear_map R S).trans rfl
316+
317+
lemma span_algebra_map_image_of_tower {S T : Type*} [comm_semiring S] [semiring T]
318+
[module R S] [is_scalar_tower R S S] [algebra R T] [algebra S T] [is_scalar_tower R S T]
319+
(a : set S) :
320+
submodule.span R (algebra_map S T '' a) =
321+
(submodule.span R a).map ((algebra.linear_map S T).restrict_scalars R) :=
322+
(submodule.span_image $ (algebra.linear_map S T).restrict_scalars R).trans rfl
323+
324+
lemma map_mem_span_algebra_map_image {S T : Type*} [comm_semiring S] [semiring T]
325+
[algebra R S] [algebra R T] [algebra S T] [is_scalar_tower R S T]
326+
(x : S) (a : set S) (hx : x ∈ submodule.span R a) :
327+
algebra_map S T x ∈ submodule.span R (algebra_map S T '' a) :=
328+
by { rw [span_algebra_map_image_of_tower, mem_map], exact ⟨x, hx, rfl⟩ }
329+
311330
end submodule
312331

313332
end semiring

src/ring_theory/localization/integral.lean

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,4 +349,42 @@ begin
349349
(no_zero_smul_divisors.algebra_map_injective _ _) _ hf₂ }
350350
end
351351

352+
open_locale non_zero_divisors
353+
354+
variables (R) {S K}
355+
/-- If the `S`-multiples of `a` are contained in some `R`-span, then `Frac(S)`-multiples of `a`
356+
are contained in the equivalent `Frac(R)`-span. -/
357+
lemma ideal_span_singleton_map_subset {L : Type*}
358+
[is_domain R] [is_domain S] [field K] [field L]
359+
[algebra R K] [algebra R L] [algebra S L] [is_integral_closure S R L]
360+
[is_fraction_ring S L] [algebra K L] [is_scalar_tower R S L] [is_scalar_tower R K L]
361+
{a : S} {b : set S} (alg : algebra.is_algebraic R L) (inj : function.injective (algebra_map R L))
362+
(h : (ideal.span ({a} : set S) : set S) ⊆ submodule.span R b) :
363+
(ideal.span ({algebra_map S L a} : set L) : set L) ⊆ submodule.span K (algebra_map S L '' b) :=
364+
begin
365+
intros x hx,
366+
obtain ⟨x', rfl⟩ := ideal.mem_span_singleton.mp hx,
367+
obtain ⟨y', z', rfl⟩ := is_localization.mk'_surjective (S⁰) x',
368+
obtain ⟨y, z, hz0, yz_eq⟩ := is_integral_closure.exists_smul_eq_mul alg inj y'
369+
(non_zero_divisors.coe_ne_zero z'),
370+
have injRS : function.injective (algebra_map R S),
371+
{ refine function.injective.of_comp
372+
(show function.injective (algebra_map S L ∘ algebra_map R S), from _),
373+
rwa [← ring_hom.coe_comp, ← is_scalar_tower.algebra_map_eq] },
374+
have hz0' : algebra_map R S z ∈ S⁰ := map_mem_non_zero_divisors (algebra_map R S) injRS
375+
(mem_non_zero_divisors_of_ne_zero hz0),
376+
have mk_yz_eq : is_localization.mk' L y' z' = is_localization.mk' L y ⟨_, hz0'⟩,
377+
{ rw [algebra.smul_def, mul_comm _ y, mul_comm _ y', ← set_like.coe_mk (algebra_map R S z) hz0']
378+
at yz_eq,
379+
exact is_localization.mk'_eq_of_eq yz_eq.symm },
380+
suffices hy : algebra_map S L (a * y) ∈ submodule.span K (⇑(algebra_map S L) '' b),
381+
{ rw [mk_yz_eq, is_fraction_ring.mk'_eq_div, set_like.coe_mk,
382+
← is_scalar_tower.algebra_map_apply, is_scalar_tower.algebra_map_apply R K L,
383+
div_eq_mul_inv, ← mul_assoc, mul_comm, ← ring_hom.map_inv, ← algebra.smul_def,
384+
← _root_.map_mul],
385+
exact (submodule.span K _).smul_mem _ hy },
386+
refine submodule.span_subset_span R K _ _,
387+
rw submodule.span_algebra_map_image_of_tower,
388+
exact submodule.mem_map_of_mem (h (ideal.mem_span_singleton.mpr ⟨y, rfl⟩))
389+
end
352390
end is_fraction_ring

src/ring_theory/localization/submodule.lean

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,52 @@ begin
114114
rw [hx, ideal.submodule_span_eq, coe_submodule_span_singleton] }
115115
end
116116

117+
variables {S} (M)
118+
lemma mem_span_iff {N : Type*} [add_comm_group N] [module R N] [module S N] [is_scalar_tower R S N]
119+
{x : N} {a : set N} :
120+
x ∈ submodule.span S a ↔ ∃ (y ∈ submodule.span R a) (z : M), x = mk' S 1 z • y :=
121+
begin
122+
split, intro h,
123+
{ refine submodule.span_induction h _ _ _ _,
124+
{ rintros x hx,
125+
exact ⟨x, submodule.subset_span hx, 1, by rw [mk'_one, _root_.map_one, one_smul]⟩ },
126+
{ exact ⟨0, submodule.zero_mem _, 1, by rw [mk'_one, _root_.map_one, one_smul]⟩ },
127+
{ rintros _ _ ⟨y, hy, z, rfl⟩ ⟨y', hy', z', rfl⟩,
128+
refine ⟨(z' : R) • y + (z : R) • y',
129+
(submodule.add_mem _ (submodule.smul_mem _ _ hy) (submodule.smul_mem _ _ hy')), z * z', _⟩,
130+
rw [smul_add, ← is_scalar_tower.algebra_map_smul S (z : R),
131+
← is_scalar_tower.algebra_map_smul S (z' : R), smul_smul, smul_smul],
132+
congr' 1,
133+
{ rw [← mul_one (1 : R), mk'_mul, mul_assoc, mk'_spec,
134+
_root_.map_one, mul_one, mul_one] },
135+
{ rw [← mul_one (1 : R), mk'_mul, mul_right_comm, mk'_spec,
136+
_root_.map_one, mul_one, one_mul] },
137+
all_goals { apply_instance } },
138+
{ rintros a _ ⟨y, hy, z, rfl⟩,
139+
obtain ⟨y', z', rfl⟩ := mk'_surjective M a,
140+
refine ⟨y' • y, submodule.smul_mem _ _ hy, z' * z, _⟩,
141+
rw [← is_scalar_tower.algebra_map_smul S y', smul_smul, ← mk'_mul,
142+
smul_smul, mul_comm (mk' S _ _), mul_mk'_eq_mk'_of_mul],
143+
all_goals { apply_instance } } },
144+
{ rintro ⟨y, hy, z, rfl⟩,
145+
exact submodule.smul_mem _ _ (submodule.span_subset_span R S _ hy) }
146+
end
147+
148+
lemma mem_span_map {x : S} {a : set R} :
149+
x ∈ ideal.span (algebra_map R S '' a) ↔
150+
∃ (y ∈ ideal.span a) (z : M), x = mk' S y z :=
151+
begin
152+
refine (mem_span_iff M).trans _,
153+
split,
154+
{ rw ← coe_submodule_span,
155+
rintros ⟨_, ⟨y, hy, rfl⟩, z, hz⟩,
156+
refine ⟨y, hy, z, _⟩,
157+
rw [hz, algebra.linear_map_apply, smul_eq_mul, mul_comm, mul_mk'_eq_mk'_of_mul, mul_one] },
158+
{ rintros ⟨y, hy, z, hz⟩,
159+
refine ⟨algebra_map R S y, submodule.map_mem_span_algebra_map_image _ _ hy, z, _⟩,
160+
rw [hz, smul_eq_mul, mul_comm, mul_mk'_eq_mk'_of_mul, mul_one] },
161+
end
162+
117163
end is_localization
118164

119165
namespace is_fraction_ring

0 commit comments

Comments
 (0)