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

Commit a793042

Browse files
committed
feat(ring_theory/fractional_ideal): pushforward of fractional ideals (#2984)
Extend `submodule.map` to fractional ideals by showing that the pushforward is also fractional. For this, we need a slightly tweaked definition of fractional ideal: if we localize `R` at the submonoid `S`, the old definition required a nonzero `x : R` such that `xI ≤ R`, and the new definition requires `x ∈ S` instead. In the most common case, `S = non_zero_divisors R`, the results are exactly the same, and all operations are still the same. A practical use of these pushforwards is included: `canonical_equiv` states fractional ideals don't depend on choice of localization map. Co-authored-by: Vierkantor <Vierkantor@users.noreply.github.com>
1 parent c360e01 commit a793042

File tree

5 files changed

+181
-49
lines changed

5 files changed

+181
-49
lines changed

src/data/equiv/ring.lean

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ variables [has_mul R] [has_add R] [has_mul S] [has_add S] [has_mul S'] [has_add
5252

5353
instance : has_coe_to_fun (R ≃+* S) := ⟨_, ring_equiv.to_fun⟩
5454

55-
@[simp]
56-
lemma to_fun_eq_coe (f : R ≃+* S) : f.to_fun = f := rfl
55+
@[simp] lemma to_fun_eq_coe_fun (f : R ≃+* S) : f.to_fun = f := rfl
5756

5857
instance has_coe_to_mul_equiv : has_coe (R ≃+* S) (R ≃* S) := ⟨ring_equiv.to_mul_equiv⟩
5958

@@ -70,6 +69,12 @@ variable (R)
7069
/-- The identity map is a ring isomorphism. -/
7170
@[refl] protected def refl : R ≃+* R := { .. mul_equiv.refl R, .. add_equiv.refl R }
7271

72+
@[simp] lemma refl_apply (x : R) : ring_equiv.refl R x = x := rfl
73+
74+
@[simp] lemma coe_add_equiv_refl : (ring_equiv.refl R : R ≃+ R) = add_equiv.refl R := rfl
75+
76+
@[simp] lemma coe_mul_equiv_refl : (ring_equiv.refl R : R ≃* R) = mul_equiv.refl R := rfl
77+
7378
variables {R}
7479

7580
/-- The inverse of a ring isomorphism is a ring isomorphism. -/
@@ -169,6 +174,15 @@ def of (e : R ≃ S) [is_semiring_hom e] : R ≃+* S :=
169174

170175
instance (e : R ≃+* S) : is_semiring_hom e := e.to_ring_hom.is_semiring_hom
171176

177+
@[simp]
178+
lemma to_ring_hom_refl : (ring_equiv.refl R).to_ring_hom = ring_hom.id R := rfl
179+
180+
@[simp]
181+
lemma to_monoid_hom_refl : (ring_equiv.refl R).to_monoid_hom = monoid_hom.id R := rfl
182+
183+
@[simp]
184+
lemma to_add_monoid_hom_refl : (ring_equiv.refl R).to_add_monoid_hom = add_monoid_hom.id R := rfl
185+
172186
@[simp]
173187
lemma to_ring_hom_apply_symm_to_ring_hom_apply {R S} [semiring R] [semiring S] (e : R ≃+* S) :
174188
∀ (y : S), e.to_ring_hom (e.symm.to_ring_hom y) = y :=

src/group_theory/submonoid.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,9 @@ lemma comap_infi {ι : Sort*} (f : M →* N) (s : ι → submonoid N) :
510510
@[simp, to_additive] lemma comap_top (f : M →* N) : (⊤ : submonoid N).comap f = ⊤ :=
511511
(gc_map_comap f).u_top
512512

513+
@[simp, to_additive] lemma map_id (S : submonoid M) : S.map (monoid_hom.id M) = S :=
514+
ext (λ x, ⟨λ ⟨_, h, rfl⟩, h, λ h, ⟨_, h, rfl⟩⟩)
515+
513516
/-- Given `submonoid`s `s`, `t` of monoids `M`, `N` respectively, `s × t` as a submonoid
514517
of `M × N`. -/
515518
@[to_additive prod "Given `add_submonoid`s `s`, `t` of `add_monoid`s `A`, `B` respectively, `s × t`

src/ring_theory/algebra.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,9 @@ instance : inhabited (A₁ ≃ₐ[R] A₁) := ⟨1⟩
399399
@[refl]
400400
def refl : A₁ ≃ₐ[R] A₁ := 1
401401

402+
@[simp] lemma coe_refl : (@refl R A₁ _ _ _ : A₁ →ₐ[R] A₁) = alg_hom.id R A₁ :=
403+
alg_hom.ext (λ x, rfl)
404+
402405
/-- Algebra equivalences are symmetric. -/
403406
@[symm]
404407
def symm (e : A₁ ≃ₐ[R] A₂) : A₂ ≃ₐ[R] A₁ :=
@@ -418,6 +421,14 @@ def trans (e₁ : A₁ ≃ₐ[R] A₂) (e₂ : A₂ ≃ₐ[R] A₃) : A₁ ≃
418421
@[simp] lemma symm_apply_apply (e : A₁ ≃ₐ[R] A₂) : ∀ x, e.symm (e x) = x :=
419422
e.to_equiv.symm_apply_apply
420423

424+
@[simp] lemma comp_symm (e : A₁ ≃ₐ[R] A₂) :
425+
alg_hom.comp (e : A₁ →ₐ[R] A₂) ↑e.symm = alg_hom.id R A₂ :=
426+
by { ext, simp }
427+
428+
@[simp] lemma symm_comp (e : A₁ ≃ₐ[R] A₂) :
429+
alg_hom.comp ↑e.symm (e : A₁ →ₐ[R] A₂) = alg_hom.id R A₁ :=
430+
by { ext, simp }
431+
421432
end alg_equiv
422433

423434
namespace algebra

src/ring_theory/algebra_operations.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,27 @@ begin
126126
exact mul_mem_mul hi hj
127127
end
128128

129+
lemma map_mul {A'} [ring A'] [algebra R A'] (f : A →ₐ[R] A') :
130+
map f.to_linear_map (M * N) = map f.to_linear_map M * map f.to_linear_map N :=
131+
calc map f.to_linear_map (M * N)
132+
= ⨆ (i : M), (N.map (lmul R A i)).map f.to_linear_map : map_supr _ _
133+
... = map f.to_linear_map M * map f.to_linear_map N :
134+
begin
135+
apply congr_arg Sup,
136+
ext S,
137+
split; rintros ⟨y, hy⟩,
138+
{ use [f y, mem_map.mpr ⟨y.1, y.2, rfl⟩],
139+
refine trans _ hy,
140+
ext,
141+
simp },
142+
{ obtain ⟨y', hy', fy_eq⟩ := mem_map.mp y.2,
143+
use [y', hy'],
144+
refine trans _ hy,
145+
rw f.to_linear_map_apply at fy_eq,
146+
ext,
147+
simp [fy_eq] }
148+
end
149+
129150
variables {M N P}
130151

131152
instance : semiring (submodule R A) :=

0 commit comments

Comments
 (0)