Theorem: Ideal.map_eq_top_iff_of_ker_le
File: Mathlib/RingTheory/Ideal/Over.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ map f I = ⊤ ↔ I = ⊤
state_after: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ map f I = ⊤ → I = ⊤

case mpr
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ I = ⊤ → map f I = ⊤
tactic: constructor
state_before: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ map f I = ⊤ → I = ⊤

case mpr
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ I = ⊤ → map f I = ⊤
state_after: case mpr
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ I = ⊤ → map f I = ⊤

case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ map f I = ⊤ → I = ⊤
tactic: swap
state_before: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ map f I = ⊤ → I = ⊤
state_after: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ ¬I = ⊤ → ¬map f I = ⊤
tactic: contrapose
state_before: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
⊢ ¬I = ⊤ → ¬map f I = ⊤
state_after: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
⊢ ¬map f I = ⊤
tactic: intro h
state_before: case mp
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
⊢ ¬map f I = ⊤
state_after: case mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
m : Ideal R
left✝ : m.IsMaximal
hm : I ≤ m
⊢ ¬map f I = ⊤
tactic: obtain ⟨m, _, hm⟩ := Ideal.exists_le_maximal I h
state_before: case mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
m : Ideal R
left✝ : m.IsMaximal
hm : I ≤ m
⊢ ¬map f I = ⊤
state_after: case mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
m : Ideal R
left✝ : m.IsMaximal
hm : I ≤ m
x✝ : Algebra R S := f.toAlgebra
⊢ ¬map f I = ⊤
tactic: let _ := f.toAlgebra
state_before: case mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
m : Ideal R
left✝ : m.IsMaximal
hm : I ≤ m
x✝ : Algebra R S := f.toAlgebra
⊢ ¬map f I = ⊤
state_after: case mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
m : Ideal R
left✝ : m.IsMaximal
hm : I ≤ m
x✝ : Algebra R S := f.toAlgebra
this : Algebra.IsIntegral R S
⊢ ¬map f I = ⊤
tactic: have : Algebra.IsIntegral _ _ := ⟨hf₂⟩
state_before: case mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
m : Ideal R
left✝ : m.IsMaximal
hm : I ≤ m
x✝ : Algebra R S := f.toAlgebra
this : Algebra.IsIntegral R S
⊢ ¬map f I = ⊤
state_after: case mp.intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
x✝ : Algebra R S := f.toAlgebra
this : Algebra.IsIntegral R S
m' : Ideal S
left✝¹ : m'.IsMaximal
left✝ : (comap (algebraMap R S) m').IsMaximal
hm : I ≤ comap (algebraMap R S) m'
⊢ ¬map f I = ⊤
tactic: obtain ⟨m', _, rfl⟩ := exists_ideal_over_maximal_of_isIntegral m (hf₁.trans hm)
state_before: case mp.intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
x✝ : Algebra R S := f.toAlgebra
this : Algebra.IsIntegral R S
m' : Ideal S
left✝¹ : m'.IsMaximal
left✝ : (comap (algebraMap R S) m').IsMaximal
hm : I ≤ comap (algebraMap R S) m'
⊢ ¬map f I = ⊤
state_after: case mp.intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
x✝ : Algebra R S := f.toAlgebra
this : Algebra.IsIntegral R S
m' : Ideal S
left✝¹ : m'.IsMaximal
left✝ : (comap (algebraMap R S) m').IsMaximal
hm : map (algebraMap R S) I ≤ m'
⊢ ¬map f I = ⊤
tactic: rw [← map_le_iff_le_comap] at hm
state_before: case mp.intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Type u_2
inst✝¹ : CommRing S
f✝ : R →+* S
I✝ J : Ideal S
inst✝ : Algebra R S
f : R →+* S
I : Ideal R
hf₁ : RingHom.ker f ≤ I
hf₂ : f.IsIntegral
h : ¬I = ⊤
x✝ : Algebra R S := f.toAlgebra
this : Algebra.IsIntegral R S
m' : Ideal S
left✝¹ : m'.IsMaximal
left✝ : (comap (algebraMap R S) m').IsMaximal
hm : map (algebraMap R S) I ≤ m'
⊢ ¬map f I = ⊤
state_after: no goals
tactic: exact (hm.trans_lt (lt_top_iff_ne_top.mpr (IsMaximal.ne_top ‹_›))).ne