Theorem: Ideal.isJacobson_of_isIntegral
File: Mathlib/RingTheory/Jacobson.lean

tactic: rw [isJacobson_iff_prime_eq]
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
⊢ IsJacobson S
state_after: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
⊢ ∀ (P : Ideal S), P.IsPrime → P.jacobson = P

tactic: intro P hP
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
⊢ ∀ (P : Ideal S), P.IsPrime → P.jacobson = P
state_after: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
⊢ P.jacobson = P

tactic: by_cases hP_top : comap (algebraMap R S) P = ⊤
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
⊢ P.jacobson = P
state_after: case pos
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : comap (algebraMap R S) P = ⊤
⊢ P.jacobson = P

case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
⊢ P.jacobson = P

tactic: simp [comap_eq_top_iff.1 hP_top]
state_before: case pos
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : comap (algebraMap R S) P = ⊤
⊢ P.jacobson = P
state_after: no goals

tactic: haveI : Nontrivial (R ⧸ comap (algebraMap R S) P) := Quotient.nontrivial hP_top
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
⊢ P.jacobson = P
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ P.jacobson = P

tactic: rw [jacobson_eq_iff_jacobson_quotient_eq_bot]
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ P.jacobson = P
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ ⊥.jacobson = ⊥

tactic: refine eq_bot_of_comap_eq_bot (R := R ⧸ comap (algebraMap R S) P) ?_
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ ⊥.jacobson = ⊥
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) ⊥.jacobson = ⊥

tactic: rw [eq_bot_iff, ← jacobson_eq_iff_jacobson_quotient_eq_bot.1
  ((isJacobson_iff_prime_eq.1 hR) (comap (algebraMap R S) P) (comap_isPrime _ _)),
  comap_jacobson]
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) ⊥.jacobson = ⊥
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ sInf (comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) '' {J | ⊥ ≤ J ∧ J.IsMaximal}) ≤ ⊥.jacobson

tactic: refine sInf_le_sInf fun J hJ => ?_
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
⊢ sInf (comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) '' {J | ⊥ ≤ J ∧ J.IsMaximal}) ≤ ⊥.jacobson
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
⊢ J ∈ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) '' {J | ⊥ ≤ J ∧ J.IsMaximal}

tactic: simp only [true_and_iff, Set.mem_image, bot_le, Set.mem_setOf_eq]
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
⊢ J ∈ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) '' {J | ⊥ ≤ J ∧ J.IsMaximal}
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
⊢ ∃ x, x.IsMaximal ∧ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) x = J

tactic: have : J.IsMaximal := by simpa using hJ
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
⊢ ∃ x, x.IsMaximal ∧ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) x = J
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this✝ : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
this : J.IsMaximal
⊢ ∃ x, x.IsMaximal ∧ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) x = J

tactic: exact exists_ideal_over_maximal_of_isIntegral J
  (comap_bot_le_of_injective _ algebraMap_quotient_injective)
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this✝ : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
this : J.IsMaximal
⊢ ∃ x, x.IsMaximal ∧ comap (algebraMap (R ⧸ comap (algebraMap R S) P) (S ⧸ P)) x = J
state_after: no goals

tactic: simpa using hJ
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
inst✝¹ : Algebra R S
inst✝ : Algebra.IsIntegral R S
hR : IsJacobson R
P : Ideal S
hP : P.IsPrime
hP_top : ¬comap (algebraMap R S) P = ⊤
this : Nontrivial (R ⧸ comap (algebraMap R S) P)
J : Ideal (R ⧸ comap (algebraMap R S) P)
hJ : J ∈ {J | ⊥ ≤ J ∧ J.IsMaximal}
⊢ J.IsMaximal
state_after: no goals