Theorem: IsLocalization.OverPrime.mem_normalizedFactors_of_isPrime
File: Mathlib/RingTheory/DedekindDomain/PID.lean

tactic: have non_zero_div : Algebra.algebraMapSubmonoid S p.primeCompl ≤ S⁰ :=
  map_le_nonZeroDivisors_of_injective _ (NoZeroSMulDivisors.algebraMap_injective _ _)
    p.primeCompl_le_nonZeroDivisors
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
⊢ P ∈ normalizedFactors (Ideal.map (algebraMap R Sₚ) p)

tactic: letI : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra p.primeCompl S
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
⊢ P ∈ normalizedFactors (Ideal.map (algebraMap R Sₚ) p)

tactic: haveI : IsScalarTower R (Localization.AtPrime p) Sₚ :=
  IsScalarTower.of_algebraMap_eq fun x => by
    rw [IsScalarTower.algebraMap_apply R S]
    exact (IsLocalization.map_eq (T := Algebra.algebraMapSubmonoid S (primeCompl p))
      (Submonoid.le_comap_map _) x).symm
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
⊢ P ∈ normalizedFactors (Ideal.map (algebraMap R Sₚ) p)

tactic: obtain ⟨pid, p', ⟨hp'0, hp'p⟩, hpu⟩ :=
  (DiscreteValuationRing.iff_pid_with_one_nonzero_prime (Localization.AtPrime p)).mp
    (IsLocalization.AtPrime.discreteValuationRing_of_dedekind_domain R hp0 _)
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this : IsScalarTower R (Localization.AtPrime p) Sₚ
⊢ P ∈ normalizedFactors (Ideal.map (algebraMap R Sₚ) p)

tactic: have : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥ := by
  rw [Submodule.ne_bot_iff] at hp0 ⊢
  obtain ⟨x, x_mem, x_ne⟩ := hp0
  exact
    ⟨algebraMap _ _ x, (IsLocalization.AtPrime.to_map_mem_maximal_iff _ _ _).mpr x_mem,
      IsLocalization.to_map_ne_zero_of_mem_nonZeroDivisors _ p.primeCompl_le_nonZeroDivisors
        (mem_nonZeroDivisors_of_ne_zero x_ne)⟩
state_before: case intro.intro.intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
⊢ P ∈ normalizedFactors (Ideal.map (algebraMap R Sₚ) p)

tactic: rw [← Multiset.singleton_le, ← normalize_eq P, ←
  normalizedFactors_irreducible (Ideal.prime_of_isPrime hP0 hP).irreducible, ←
  dvd_iff_normalizedFactors_le_normalizedFactors hP0, dvd_iff_le,
  IsScalarTower.algebraMap_eq R (Localization.AtPrime p) Sₚ, ← Ideal.map_map,
  Localization.AtPrime.map_eq_maximalIdeal, Ideal.map_le_iff_le_comap,
  hpu (LocalRing.maximalIdeal _) ⟨this, _⟩, hpu (comap _ _) ⟨_, _⟩]
state_before: case intro.intro.intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ P ∈ normalizedFactors (Ideal.map (algebraMap R Sₚ) p)

tactic: rw [IsScalarTower.algebraMap_apply R S]
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
x : R
⊢ ↑(algebraMap R Sₚ) x = ↑(algebraMap (Localization.AtPrime p) Sₚ) (↑(algebraMap R (Localization.AtPrime p)) x)

tactic: exact (IsLocalization.map_eq (T := Algebra.algebraMapSubmonoid S (primeCompl p))
  (Submonoid.le_comap_map _) x).symm
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
x : R
⊢ ↑(algebraMap S Sₚ) (↑(algebraMap R S) x) =
    ↑(algebraMap (Localization.AtPrime p) Sₚ) (↑(algebraMap R (Localization.AtPrime p)) x)

tactic: rw [Submodule.ne_bot_iff] at hp0 ⊢
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
⊢ LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥

tactic: obtain ⟨x, x_mem, x_ne⟩ := hp0
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : ∃ x, x ∈ p ∧ x ≠ 0
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
⊢ ∃ x, x ∈ LocalRing.maximalIdeal (Localization.AtPrime p) ∧ x ≠ 0

tactic: exact
  ⟨algebraMap _ _ x, (IsLocalization.AtPrime.to_map_mem_maximal_iff _ _ _).mpr x_mem,
    IsLocalization.to_map_ne_zero_of_mem_nonZeroDivisors _ p.primeCompl_le_nonZeroDivisors
      (mem_nonZeroDivisors_of_ne_zero x_ne)⟩
state_before: case intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
x : R
x_mem : x ∈ p
x_ne : x ≠ 0
⊢ ∃ x, x ∈ LocalRing.maximalIdeal (Localization.AtPrime p) ∧ x ≠ 0

tactic: have hRS : Algebra.IsIntegral R S :=
  isIntegral_of_noetherian (isNoetherian_of_fg_of_noetherian' Module.Finite.out)
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ comap (algebraMap (Localization.AtPrime p) Sₚ) P ≠ ⊥

tactic: exact mt (Ideal.eq_bot_of_comap_eq_bot (isIntegral_localization hRS)) hP0
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
hRS : Algebra.IsIntegral R S
⊢ comap (algebraMap (Localization.AtPrime p) Sₚ) P ≠ ⊥

tactic: exact Ideal.comap_isPrime (algebraMap (Localization.AtPrime p) Sₚ) P
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ IsPrime (comap (algebraMap (Localization.AtPrime p) Sₚ) P)

tactic: exact (LocalRing.maximalIdeal.isMaximal _).isPrime
state_before: R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ IsPrime (LocalRing.maximalIdeal (Localization.AtPrime p))

tactic: rw [Ne.def, zero_eq_bot, Ideal.map_eq_bot_iff_of_injective]
state_before: case intro.intro.intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ Ideal.map (algebraMap R Sₚ) p ≠ 0

tactic: rw [IsScalarTower.algebraMap_eq R S Sₚ]
state_before: case intro.intro.intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ Function.Injective ↑(algebraMap R Sₚ)

tactic: exact
  (IsLocalization.injective Sₚ non_zero_div).comp (NoZeroSMulDivisors.algebraMap_injective _ _)
state_before: case intro.intro.intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ Function.Injective ↑(RingHom.comp (algebraMap S Sₚ) (algebraMap R S))

tactic: assumption
state_before: case intro.intro.intro.intro
R : Type u_2
inst✝¹⁶ : CommRing R
inst✝¹⁵ : IsDomain R
inst✝¹⁴ : IsDedekindDomain R
S : Type ?u.233823
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module.Free R S
inst✝⁹ : Module.Finite R S
p : Ideal R
hp0 : p ≠ ⊥
inst✝⁸ : IsPrime p
Sₚ : Type u_1
inst✝⁷ : CommRing Sₚ
inst✝⁶ : Algebra S Sₚ
inst✝⁵ : IsLocalization (Algebra.algebraMapSubmonoid S (primeCompl p)) Sₚ
inst✝⁴ : Algebra R Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsDomain Sₚ
inst✝¹ : IsDedekindDomain Sₚ
inst✝ : DecidableEq (Ideal Sₚ)
P : Ideal Sₚ
hP : IsPrime P
hP0 : P ≠ ⊥
non_zero_div : Algebra.algebraMapSubmonoid S (primeCompl p) ≤ S⁰
this✝¹ : Algebra (Localization.AtPrime p) Sₚ := localizationAlgebra (primeCompl p) S
this✝ : IsScalarTower R (Localization.AtPrime p) Sₚ
pid : IsPrincipalIdealRing (Localization.AtPrime p)
p' : Ideal (Localization.AtPrime p)
hpu : ∀ (y : Ideal (Localization.AtPrime p)), (fun P => P ≠ ⊥ ∧ IsPrime P) y → y = p'
hp'0 : p' ≠ ⊥
hp'p : IsPrime p'
this : LocalRing.maximalIdeal (Localization.AtPrime p) ≠ ⊥
⊢ ¬p = ⊥