Theorem: Ideal.map_isPrime_of_surjective
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: refine' ⟨fun h => H.ne_top (eq_top_iff.2 _), fun {x y} => _⟩
state_before: R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
⊢ IsPrime (map f I)

tactic: replace h := congr_arg (comap f) h
state_before: case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
h : map f I = ⊤
⊢ ⊤ ≤ I

tactic: rw [comap_map_of_surjective _ hf, comap_top] at h
state_before: case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
h : comap f (map f I) = comap f ⊤
⊢ ⊤ ≤ I

tactic: exact h ▸ sup_le (le_of_eq rfl) hk
state_before: case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
h : I ⊔ comap f ⊥ = ⊤
⊢ ⊤ ≤ I

tactic: refine' fun hxy => (hf x).recOn fun a ha => (hf y).recOn fun b hb => _
state_before: case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
⊢ x * y ∈ map f I → x ∈ map f I ∨ y ∈ map f I

tactic: rw [← ha, ← hb, ← _root_.map_mul f, mem_map_iff_of_surjective _ hf] at hxy
state_before: case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
hxy : x * y ∈ map f I
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
⊢ x ∈ map f I ∨ y ∈ map f I

tactic: rcases hxy with ⟨c, hc, hc'⟩
state_before: case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hxy : ∃ x, x ∈ I ∧ ↑f x = ↑f (a * b)
hb : ↑f b = y
⊢ x ∈ map f I ∨ y ∈ map f I

tactic: rw [← sub_eq_zero, ← map_sub] at hc'
state_before: case refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc' : ↑f c = ↑f (a * b)
⊢ x ∈ map f I ∨ y ∈ map f I

tactic: have : a * b ∈ I := by
  convert I.sub_mem hc (hk (hc' : c - a * b ∈ RingHom.ker f)) using 1
  abel
state_before: case refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ x ∈ map f I ∨ y ∈ map f I

tactic: exact
  (H.mem_or_mem this).imp (fun h => ha ▸ mem_map_of_mem f h) fun h => hb ▸ mem_map_of_mem f h
state_before: case refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
this : a * b ∈ I
⊢ x ∈ map f I ∨ y ∈ map f I

tactic: convert I.sub_mem hc (hk (hc' : c - a * b ∈ RingHom.ker f)) using 1
state_before: R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ a * b ∈ I

tactic: abel
state_before: case h.e'_4
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ a * b = c - (c - a * b)