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

tactic: refine' fun h => le_antisymm (le_sInf _) _
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
⊢ (∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J) → map f (sInf A) = sInf (map f '' A)

tactic: intro j hj y hy
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
⊢ ∀ (b : Ideal S), b ∈ map f '' A → map f (sInf A) ≤ b

tactic: cases' (mem_map_iff_of_surjective f hf).1 hy with x hx
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
⊢ y ∈ j

tactic: cases' (Set.mem_image _ _ _).mp hj with J hJ
state_before: case refine'_1.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
x : R
hx : x ∈ sInf A ∧ ↑f x = y
⊢ y ∈ j

tactic: rw [← hJ.right, ← hx.right]
state_before: case refine'_1.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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
x : R
hx : x ∈ sInf A ∧ ↑f x = y
J : Ideal R
hJ : J ∈ A ∧ map f J = j
⊢ y ∈ j

tactic: exact mem_map_of_mem f (sInf_le_of_le hJ.left (le_of_eq rfl) hx.left)
state_before: case refine'_1.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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
x : R
hx : x ∈ sInf A ∧ ↑f x = y
J : Ideal R
hJ : J ∈ A ∧ map f J = j
⊢ ↑f x ∈ map f J

tactic: intro y hy
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
⊢ sInf (map f '' A) ≤ map f (sInf A)

tactic: cases' hf y with x hx
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
⊢ y ∈ map f (sInf A)

tactic: refine' hx ▸ mem_map_of_mem f _
state_before: case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
⊢ y ∈ map f (sInf A)

tactic: have : ∀ I ∈ A, y ∈ map f I := by simpa using hy
state_before: case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
⊢ x ∈ sInf A

tactic: rw [Submodule.mem_sInf]
state_before: case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
this : ∀ (I : Ideal R), I ∈ A → y ∈ map f I
⊢ x ∈ sInf A

tactic: intro J hJ
state_before: case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
this : ∀ (I : Ideal R), I ∈ A → y ∈ map f I
⊢ ∀ (p : Submodule R R), p ∈ A → x ∈ p

tactic: rcases (mem_map_iff_of_surjective f hf).1 (this J hJ) with ⟨x', hx', rfl⟩
state_before: case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
this : ∀ (I : Ideal R), I ∈ A → y ∈ map f I
J : Submodule R R
hJ : J ∈ A
⊢ x ∈ J

tactic: have : x - x' ∈ J := by
  apply h J hJ
  rw [RingHom.mem_ker, map_sub, hx, sub_self]
state_before: case refine'_2.intro.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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
⊢ x ∈ J

tactic: simpa only [sub_add_cancel] using J.add_mem this hx'
state_before: case refine'_2.intro.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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this✝ : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
this : x - x' ∈ J
⊢ x ∈ J

tactic: simpa using hy
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
⊢ ∀ (I : Ideal R), I ∈ A → y ∈ map f I

tactic: apply h J hJ
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
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
⊢ x - x' ∈ J

tactic: rw [RingHom.mem_ker, map_sub, hx, sub_self]
state_before: case a
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
⊢ x - x' ∈ RingHom.ker f