Zulip Chat Archive
Stream: new members
Topic: Ring iso induced by quotient
Riccardo Brasca (Feb 26 2021 at 18:47):
What is the best way of proving that if f : R ≃+* S
is an isomorphism of rings and I : ideal R
then I get an iso I.quotient ≃+* (map (f : R →+* S) I).quotient
? As in the following
import ring_theory.ideal.operations
variables {R S : Type*} [comm_ring R] [comm_ring S]
open ideal
def quotient_equiv (I : ideal R) (f : R ≃+* S) :
I.quotient ≃+* (map (f : R →+* S) I).quotient := sorry
The map in one direction if given immediately by quotient_map (map ↑f I) ↑f (@le_comap_map _ S _ _ _ _)
, but going in the other direction requires (I : ideal R) (f : R ≃+* S) : I.map (f : R →+* S) ≤ I.comap f.symm
that, even if not difficult, is annoying. The fact that I am doing this by hand make me suspicious that I didn't understand the API correctly, in particular ideal.rel_iso_of_bijective
seems relevant, but I don't know how to use it. Thank you!
Adam Topaz (Feb 26 2021 at 19:57):
Here's a proof I came up with that's WAY too long:
import ring_theory.ideal.operations
variables {R S : Type*} [comm_ring R] [comm_ring S]
open ideal
lemma helper (I : ideal R) (f : R ≃+* S) :
(I.map (f : R →+* S) : set S) = f '' I :=
begin
ext,
split,
{ intros hx,
apply submodule.span_induction hx,
{ tauto },
{ refine ⟨0, I.zero_mem, by simp⟩ },
{ rintros x y ⟨x,hx,rfl⟩ ⟨y,hy,rfl⟩,
refine ⟨x+y,I.add_mem hx hy, by simp⟩ },
{ rintros a x ⟨x,hx,rfl⟩,
refine ⟨f.symm a * x,_,_⟩,
refine I.mul_mem_left _ hx,
simp } },
{ rintros ⟨y,hy,rfl⟩,
exact mem_map_of_mem hy }
end
def quotient_equiv (I : ideal R) (f : R ≃+* S) :
I.quotient ≃+* (map (f : R →+* S) I).quotient :=
let J := map (f : R →+* S) I,
π : R →+* I.quotient := ideal.quotient.mk _,
π' : S →+* J.quotient := ideal.quotient.mk _
in
ring_equiv.of_hom_inv
(ideal.quotient.lift _ (π'.comp f.to_ring_hom)
begin
intros a ha,
erw quotient.eq_zero_iff_mem,
exact mem_map_of_mem ha
end) (ideal.quotient.lift _ (π.comp f.symm.to_ring_hom)
begin
intros s hs,
erw quotient.eq_zero_iff_mem,
change _ ∈ (_ : set _) at hs,
rw helper at hs,
rcases hs with ⟨r,hr,rfl⟩,
change ((f.symm ∘ f) r) ∈ _,
simpa,
end)
begin
ext,
rcases quotient.mk_surjective x with ⟨x,rfl⟩,
tidy,
end
begin
ext,
rcases quotient.mk_surjective x with ⟨x,rfl⟩,
tidy,
end
Riccardo Brasca (Feb 26 2021 at 20:04):
It is surprisingly annoying, isn't it? If this is not my fault no problem, I will prove the relevant lemmas to improve the API. For example I am a little surprised that ext
doesn't work for ideals...
Adam Topaz (Feb 26 2021 at 20:04):
It looks like there should certainly be some more api around this map
function.
Riccardo Brasca (Feb 26 2021 at 20:05):
For example your helper
should be an immediate consequence of ideal.mem_image_of_mem_map_of_surjective
Adam Topaz (Feb 26 2021 at 20:07):
Oh yeah, I didn't know about that lemma.
Riccardo Brasca (Feb 26 2021 at 20:08):
Ah sure, because you wrote (I.map (f : R →+* S) : set S)
, but I mean, this should be true without going to set S
Riccardo Brasca (Mar 01 2021 at 18:20):
#6492 if someone is interested
Last updated: Dec 20 2023 at 11:08 UTC