[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x a✝ b✝ : S
ha : a✝ ∈ {a | ∀ (b : S), a * b ∈ adjoin R {x}}
hb : b✝ ∈ {a | ∀ (b : S), a * b ∈ adjoin R {x}}
c : S
⊢ (a✝ + b✝) * c ∈ adjoin R {x}
[PROOFSTEP]
simpa only [add_mul] using Subalgebra.add_mem _ (ha c) (hb c)
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x b : S
⊢ 0 * b ∈ adjoin R {x}
[PROOFSTEP]
simpa only [zero_mul] using Subalgebra.zero_mem _
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x c a : S
ha :
  a ∈
    {
          toAddSubsemigroup :=
            { carrier := {a | ∀ (b : S), a * b ∈ adjoin R {x}},
              add_mem' :=
                (_ :
                  ∀ {a b : S},
                    a ∈ {a | ∀ (b : S), a * b ∈ adjoin R {x}} →
                      b ∈ {a | ∀ (b : S), a * b ∈ adjoin R {x}} → ∀ (c : S), (a + b) * c ∈ adjoin R {x}) },
          zero_mem' := (_ : ∀ (b : S), 0 * b ∈ adjoin R {x}) }.toAddSubsemigroup.carrier
b : S
⊢ c • a * b ∈ adjoin R {x}
[PROOFSTEP]
simpa only [smul_eq_mul, mul_left_comm, mul_assoc] using ha (c * b)
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x y : S
hy : y ∈ ↑(conductor R x)
⊢ y ∈ ↑(adjoin R {x})
[PROOFSTEP]
simpa only [mul_one] using hy 1
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
h : adjoin R {x} = ⊤
⊢ conductor R x = ⊤
[PROOFSTEP]
simp only [Ideal.eq_top_iff_one, mem_conductor_iff, h, mem_top, forall_const]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
hz' : z ∈ Ideal.map (algebraMap R S) I
⊢ ↑(algebraMap R S) p * z ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
rw [Ideal.map, Ideal.span, Finsupp.mem_span_image_iff_total] at hz'
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
hz' : ∃ l, l ∈ Finsupp.supported S S ↑I ∧ ↑(Finsupp.total R S S ↑(algebraMap R S)) l = z
⊢ ↑(algebraMap R S) p * z ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
obtain ⟨l, H, H'⟩ := hz'
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : ↑(Finsupp.total R S S ↑(algebraMap R S)) l = z
⊢ ↑(algebraMap R S) p * z ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
rw [Finsupp.total_apply] at H'
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
⊢ ↑(algebraMap R S) p * z ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
rw [← H', mul_comm, Finsupp.sum_mul]
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
⊢ (Finsupp.sum l fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
have lem :
  ∀ {a : R}, a ∈ I → l a • algebraMap R S a * algebraMap R S p ∈ algebraMap R<x> S '' I.map (algebraMap R R<x>) :=
  by
  intro a ha
  rw [Algebra.id.smul_eq_mul, mul_assoc, mul_comm, mul_assoc, Set.mem_image]
  refine Exists.intro (algebraMap R R<x> a * ⟨l a * algebraMap R S p, show l a * algebraMap R S p ∈ R<x> from ?_⟩) ?_
  · refine ⟨?_, ?_⟩
    · rw [mul_comm]
      exact mem_conductor_iff.mp (Ideal.mem_comap.mp hp) _
    · rw [mul_comm]
      apply Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ ha)
    · simp only [RingHom.map_mul, mul_comm (algebraMap R S p) (l a)]
      rfl
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
⊢ ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
intro a ha
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
rw [Algebra.id.smul_eq_mul, mul_assoc, mul_comm, mul_assoc, Set.mem_image]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ∃ x_1,
    x_1 ∈ ↑(Ideal.map (algebraMap R { x_2 // x_2 ∈ adjoin R {x} }) I) ∧
      ↑(algebraMap { x_2 // x_2 ∈ adjoin R {x} } S) x_1 = ↑(algebraMap R S) a * (↑(algebraMap R S) p * ↑l a)
[PROOFSTEP]
refine Exists.intro (algebraMap R R<x> a * ⟨l a * algebraMap R S p, show l a * algebraMap R S p ∈ R<x> from ?_⟩) ?_
[GOAL]
case refine_1
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) a *
        { val := ↑l a * ↑(algebraMap R S) p, property := (_ : ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}) } ∈
      ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
        (↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) a *
          { val := ↑l a * ↑(algebraMap R S) p, property := (_ : ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}) }) =
      ↑(algebraMap R S) a * (↑(algebraMap R S) p * ↑l a)
[PROOFSTEP]
refine ⟨?_, ?_⟩
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}
[PROOFSTEP]
rw [mul_comm]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑(algebraMap R S) p * ↑l a ∈ adjoin R {x}
[PROOFSTEP]
exact mem_conductor_iff.mp (Ideal.mem_comap.mp hp) _
[GOAL]
case refine_1.refine_1
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) a *
      { val := ↑l a * ↑(algebraMap R S) p, property := (_ : ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}) } ∈
    ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
case refine_1.refine_1
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ { val := ↑l a * ↑(algebraMap R S) p, property := (_ : ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}) } *
      ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) a ∈
    ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
apply Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ ha)
[GOAL]
case refine_1.refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
      (↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) a *
        { val := ↑l a * ↑(algebraMap R S) p, property := (_ : ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}) }) =
    ↑(algebraMap R S) a * (↑(algebraMap R S) p * ↑l a)
[PROOFSTEP]
simp only [RingHom.map_mul, mul_comm (algebraMap R S p) (l a)]
[GOAL]
case refine_1.refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
a : R
ha : a ∈ I
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) a) *
      ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
        { val := ↑l a * ↑(algebraMap R S) p, property := (_ : ↑l a * ↑(algebraMap R S) p ∈ adjoin R {x}) } =
    ↑(algebraMap R S) a * (↑l a * ↑(algebraMap R S) p)
[PROOFSTEP]
rfl
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ (Finsupp.sum l fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
refine Finset.sum_induction _ (fun u => u ∈ algebraMap R<x> S '' I.map (algebraMap R R<x>)) (fun a b => ?_) ?_ ?_
[GOAL]
case intro.intro.refine_1
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
a b : S
⊢ (fun u =>
        u ∈
          ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
      a →
    (fun u =>
          u ∈
            ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) ''
              ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
        b →
      (fun u =>
          u ∈
            ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) ''
              ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
        (a + b)
case intro.intro.refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ (fun u =>
      u ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
    0
case intro.intro.refine_3
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ ∀ (x_1 : R),
    x_1 ∈ l.support →
      (fun u =>
          u ∈
            ↑(algebraMap { x_2 // x_2 ∈ adjoin R {x} } S) ''
              ↑(Ideal.map (algebraMap R { x_2 // x_2 ∈ adjoin R {x} }) I))
        ((fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) x_1 (↑l x_1))
[PROOFSTEP]
rintro ⟨z, hz, rfl⟩ ⟨y, hy, rfl⟩
[GOAL]
case intro.intro.refine_1.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z✝ : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z✝
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
z : { x_1 // x_1 ∈ adjoin R {x} }
hz : z ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
y : { x_1 // x_1 ∈ adjoin R {x} }
hy : y ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) z + ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) y ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
case intro.intro.refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ (fun u =>
      u ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
    0
case intro.intro.refine_3
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ ∀ (x_1 : R),
    x_1 ∈ l.support →
      (fun u =>
          u ∈
            ↑(algebraMap { x_2 // x_2 ∈ adjoin R {x} } S) ''
              ↑(Ideal.map (algebraMap R { x_2 // x_2 ∈ adjoin R {x} }) I))
        ((fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) x_1 (↑l x_1))
[PROOFSTEP]
rw [← RingHom.map_add]
[GOAL]
case intro.intro.refine_1.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z✝ : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z✝
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
z : { x_1 // x_1 ∈ adjoin R {x} }
hz : z ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
y : { x_1 // x_1 ∈ adjoin R {x} }
hy : y ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (z + y) ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
case intro.intro.refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ (fun u =>
      u ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
    0
case intro.intro.refine_3
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ ∀ (x_1 : R),
    x_1 ∈ l.support →
      (fun u =>
          u ∈
            ↑(algebraMap { x_2 // x_2 ∈ adjoin R {x} } S) ''
              ↑(Ideal.map (algebraMap R { x_2 // x_2 ∈ adjoin R {x} }) I))
        ((fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) x_1 (↑l x_1))
[PROOFSTEP]
exact ⟨z + y, Ideal.add_mem _ (SetLike.mem_coe.mp hz) hy, rfl⟩
[GOAL]
case intro.intro.refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ (fun u =>
      u ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
    0
[PROOFSTEP]
exact ⟨0, SetLike.mem_coe.mpr <| Ideal.zero_mem _, RingHom.map_zero _⟩
[GOAL]
case intro.intro.refine_3
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ ∀ (x_1 : R),
    x_1 ∈ l.support →
      (fun u =>
          u ∈
            ↑(algebraMap { x_2 // x_2 ∈ adjoin R {x} } S) ''
              ↑(Ideal.map (algebraMap R { x_2 // x_2 ∈ adjoin R {x} }) I))
        ((fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) x_1 (↑l x_1))
[PROOFSTEP]
intro y hy
[GOAL]
case intro.intro.refine_3
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
p : R
z : S
hp : p ∈ comap (algebraMap R S) (conductor R x)
l : R →₀ S
H : l ∈ Finsupp.supported S S ↑I
H' : (Finsupp.sum l fun i a => a • ↑(algebraMap R S) i) = z
lem :
  ∀ {a : R},
    a ∈ I →
      ↑l a • ↑(algebraMap R S) a * ↑(algebraMap R S) p ∈
        ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
y : R
hy : y ∈ l.support
⊢ (fun a c => c • ↑(algebraMap R S) a * ↑(algebraMap R S) p) y (↑l y) ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
exact lem ((Finsupp.mem_supported _ l).mp H hy)
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
⊢ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I) =
    Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
⊢ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I) ≤
    Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
intro y hy
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
y : { x_1 // x_1 ∈ adjoin R {x} }
hy : y ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
⊢ y ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
obtain ⟨z, hz⟩ := y
[GOAL]
case a.mk
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
obtain ⟨p, hp, q, hq, hpq⟩ := Submodule.mem_sup.mp ((Ideal.eq_top_iff_one _).mp hx)
[GOAL]
case a.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
have temp : algebraMap R S p * z + algebraMap R S q * z = z := by
  simp only [← add_mul, ← RingHom.map_add (algebraMap R S), hpq, map_one, one_mul]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
⊢ ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
[PROOFSTEP]
simp only [← add_mul, ← RingHom.map_add (algebraMap R S), hpq, map_one, one_mul]
[GOAL]
case a.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
suffices z ∈ algebraMap R<x> S '' I.map (algebraMap R R<x>) ↔ (⟨z, hz⟩ : R<x>) ∈ I.map (algebraMap R R<x>)
  by
  rw [← this, ← temp]
  obtain ⟨a, ha⟩ :=
    (Set.mem_image _ _ _).mp
      (prod_mem_ideal_map_of_mem_conductor hp (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy ))
  use a + algebraMap R R<x> q * ⟨z, hz⟩
  refine
    ⟨Ideal.add_mem (I.map (algebraMap R R<x>)) ha.left ?_, by
      simp only [ha.right, map_add, AlgHom.map_mul, add_right_inj]; rfl⟩
  rw [mul_comm]
  exact Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ hq)
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
rw [← this, ← temp]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
⊢ ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
obtain ⟨a, ha⟩ :=
  (Set.mem_image _ _ _).mp
    (prod_mem_ideal_map_of_mem_conductor hp (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy ))
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
⊢ z ∈ Ideal.map (algebraMap R S) I
[PROOFSTEP]
rwa [Ideal.mem_comap] at hy
[GOAL]
case intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
a : { x_1 // x_1 ∈ adjoin R {x} }
ha :
  a ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) a = ↑(algebraMap R S) p * z
⊢ ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z ∈
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
use a + algebraMap R R<x> q * ⟨z, hz⟩
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
a : { x_1 // x_1 ∈ adjoin R {x} }
ha :
  a ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) a = ↑(algebraMap R S) p * z
⊢ a + ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) q * { val := z, property := hz } ∈
      ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
        (a + ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) q * { val := z, property := hz }) =
      ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z
[PROOFSTEP]
refine
  ⟨Ideal.add_mem (I.map (algebraMap R R<x>)) ha.left ?_, by
    simp only [ha.right, map_add, AlgHom.map_mul, add_right_inj]; rfl⟩
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
a : { x_1 // x_1 ∈ adjoin R {x} }
ha :
  a ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) a = ↑(algebraMap R S) p * z
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
      (a + ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) q * { val := z, property := hz }) =
    ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z
[PROOFSTEP]
simp only [ha.right, map_add, AlgHom.map_mul, add_right_inj]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
a : { x_1 // x_1 ∈ adjoin R {x} }
ha :
  a ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) a = ↑(algebraMap R S) p * z
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
      (↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) q * { val := z, property := hz }) =
    ↑(algebraMap R S) q * z
[PROOFSTEP]
rfl
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
a : { x_1 // x_1 ∈ adjoin R {x} }
ha :
  a ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) a = ↑(algebraMap R S) p * z
⊢ ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) q * { val := z, property := hz } ∈
    Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
rw [mul_comm]
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
this :
  z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
a : { x_1 // x_1 ∈ adjoin R {x} }
ha :
  a ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ∧
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) a = ↑(algebraMap R S) p * z
⊢ { val := z, property := hz } * ↑(algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) q ∈
    Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
exact Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ hq)
[GOAL]
case a.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
⊢ z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I) ↔
    { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
refine ⟨fun h => ?_, fun h => (Set.mem_image _ _ _).mpr (Exists.intro ⟨z, hz⟩ ⟨by simp [h], rfl⟩)⟩
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
⊢ { val := z, property := hz } ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
simp [h]
[GOAL]
case a.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
obtain ⟨x₁, hx₁, hx₂⟩ := (Set.mem_image _ _ _).mp h
[GOAL]
case a.mk.intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
x₁ : { x_1 // x_1 ∈ adjoin R {x} }
hx₁ : x₁ ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
hx₂ : ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) x₁ = z
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
have : x₁ = ⟨z, hz⟩ := by
  apply h_alg
  simp [hx₂]
  rfl
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
x₁ : { x_1 // x_1 ∈ adjoin R {x} }
hx₁ : x₁ ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
hx₂ : ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) x₁ = z
⊢ x₁ = { val := z, property := hz }
[PROOFSTEP]
apply h_alg
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
x₁ : { x_1 // x_1 ∈ adjoin R {x} }
hx₁ : x₁ ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
hx₂ : ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) x₁ = z
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) x₁ =
    ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) { val := z, property := hz }
[PROOFSTEP]
simp [hx₂]
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
x₁ : { x_1 // x_1 ∈ adjoin R {x} }
hx₁ : x₁ ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
hx₂ : ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) x₁ = z
⊢ z = ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) { val := z, property := hz }
[PROOFSTEP]
rfl
[GOAL]
case a.mk.intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
z : S
hz : z ∈ adjoin R {x}
hy : { val := z, property := hz } ∈ comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
p : R
hp : p ∈ comap (algebraMap R S) (conductor R x)
q : R
hq : q ∈ I
hpq : p + q = 1
temp : ↑(algebraMap R S) p * z + ↑(algebraMap R S) q * z = z
h : z ∈ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) '' ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
x₁ : { x_1 // x_1 ∈ adjoin R {x} }
hx₁ : x₁ ∈ ↑(Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
hx₂ : ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) x₁ = z
this : x₁ = { val := z, property := hz }
⊢ { val := z, property := hz } ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
rwa [← this]
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
⊢ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I ≤
    comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
have : algebraMap R S = (algebraMap _ S).comp (algebraMap R R<x>) := by ext; rfl
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
⊢ algebraMap R S =
    RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
x✝ : R
⊢ ↑(algebraMap R S) x✝ =
    ↑(RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })) x✝
[PROOFSTEP]
rfl
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
this :
  algebraMap R S =
    RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })
⊢ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I ≤
    comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
rw [this, ← Ideal.map_map]
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
this :
  algebraMap R S =
    RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })
⊢ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I ≤
    comap (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
      (Ideal.map (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
        (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I))
[PROOFSTEP]
apply Ideal.le_comap_map
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
⊢ { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I ≃+*
    S ⧸ Ideal.map (algebraMap R S) I
[PROOFSTEP]
let f : R<x> ⧸ I.map (algebraMap R R<x>) →+* S ⧸ I.map (algebraMap R S) :=
  (Ideal.Quotient.lift (I.map (algebraMap R R<x>))
    ((Ideal.Quotient.mk (I.map (algebraMap R S))).comp (algebraMap R<x> S))
    (fun r hr => by
      have : algebraMap R S = (algebraMap R<x> S).comp (algebraMap R R<x>) := by ext; rfl
      rw [RingHom.comp_apply, Ideal.Quotient.eq_zero_iff_mem, this, ← Ideal.map_map]
      exact Ideal.mem_map_of_mem _ hr))
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
r : { x_1 // x_1 ∈ adjoin R {x} }
hr : r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
⊢ ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) r = 0
[PROOFSTEP]
have : algebraMap R S = (algebraMap R<x> S).comp (algebraMap R R<x>) := by ext; rfl
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
r : { x_1 // x_1 ∈ adjoin R {x} }
hr : r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
⊢ algebraMap R S =
    RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
r : { x_1 // x_1 ∈ adjoin R {x} }
hr : r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
x✝ : R
⊢ ↑(algebraMap R S) x✝ =
    ↑(RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })) x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
r : { x_1 // x_1 ∈ adjoin R {x} }
hr : r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
this :
  algebraMap R S =
    RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })
⊢ ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) r = 0
[PROOFSTEP]
rw [RingHom.comp_apply, Ideal.Quotient.eq_zero_iff_mem, this, ← Ideal.map_map]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
r : { x_1 // x_1 ∈ adjoin R {x} }
hr : r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
this :
  algebraMap R S =
    RingHom.comp (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (algebraMap R { x_1 // x_1 ∈ adjoin R {x} })
⊢ ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) r ∈
    Ideal.map (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S) (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
[PROOFSTEP]
exact Ideal.mem_map_of_mem _ hr
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
⊢ { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I ≃+*
    S ⧸ Ideal.map (algebraMap R S) I
[PROOFSTEP]
refine RingEquiv.ofBijective f ⟨?_, ?_⟩
[GOAL]
case refine_1
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
⊢ Function.Injective ↑f
[PROOFSTEP]
refine RingHom.lift_injective_of_ker_le_ideal _ _ fun u hu => ?_
[GOAL]
case refine_1
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
u : { x_1 // x_1 ∈ adjoin R {x} }
hu :
  u ∈ ker (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
⊢ u ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I
[PROOFSTEP]
rwa [RingHom.mem_ker, RingHom.comp_apply, Ideal.Quotient.eq_zero_iff_mem, ← Ideal.mem_comap,
  comap_map_eq_map_adjoin_of_coprime_conductor hx h_alg] at hu
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
⊢ Function.Surjective ↑f
[PROOFSTEP]
refine Ideal.Quotient.lift_surjective_of_surjective _ _ fun y => ?_
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
⊢ ∃ a,
    ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) a =
      y
[PROOFSTEP]
obtain ⟨z, hz⟩ := Ideal.Quotient.mk_surjective y
[GOAL]
case refine_2.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
⊢ ∃ a,
    ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) a =
      y
[PROOFSTEP]
have : z ∈ conductor R x ⊔ I.map (algebraMap R S) :=
  by
  suffices conductor R x ⊔ I.map (algebraMap R S) = ⊤ by simp only [this, Submodule.mem_top]
  rw [Ideal.eq_top_iff_one] at hx ⊢
  replace hx := Ideal.mem_map_of_mem (algebraMap R S) hx
  rw [Ideal.map_sup, RingHom.map_one] at hx
  exact
    (sup_le_sup
        (show ((conductor R x).comap (algebraMap R S)).map (algebraMap R S) ≤ conductor R x from Ideal.map_comap_le)
        (le_refl (I.map (algebraMap R S))))
      hx
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
⊢ z ∈ conductor R x ⊔ Ideal.map (algebraMap R S) I
[PROOFSTEP]
suffices conductor R x ⊔ I.map (algebraMap R S) = ⊤ by simp only [this, Submodule.mem_top]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : conductor R x ⊔ Ideal.map (algebraMap R S) I = ⊤
⊢ z ∈ conductor R x ⊔ Ideal.map (algebraMap R S) I
[PROOFSTEP]
simp only [this, Submodule.mem_top]
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
⊢ conductor R x ⊔ Ideal.map (algebraMap R S) I = ⊤
[PROOFSTEP]
rw [Ideal.eq_top_iff_one] at hx ⊢
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : 1 ∈ comap (algebraMap R S) (conductor R x) ⊔ I
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
⊢ 1 ∈ conductor R x ⊔ Ideal.map (algebraMap R S) I
[PROOFSTEP]
replace hx := Ideal.mem_map_of_mem (algebraMap R S) hx
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
hx : ↑(algebraMap R S) 1 ∈ Ideal.map (algebraMap R S) (comap (algebraMap R S) (conductor R x) ⊔ I)
⊢ 1 ∈ conductor R x ⊔ Ideal.map (algebraMap R S) I
[PROOFSTEP]
rw [Ideal.map_sup, RingHom.map_one] at hx
[GOAL]
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
hx : 1 ∈ Ideal.map (algebraMap R S) (comap (algebraMap R S) (conductor R x)) ⊔ Ideal.map (algebraMap R S) I
⊢ 1 ∈ conductor R x ⊔ Ideal.map (algebraMap R S) I
[PROOFSTEP]
exact
  (sup_le_sup
      (show ((conductor R x).comap (algebraMap R S)).map (algebraMap R S) ≤ conductor R x from Ideal.map_comap_le)
      (le_refl (I.map (algebraMap R S))))
    hx
[GOAL]
case refine_2.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : z ∈ conductor R x ⊔ Ideal.map (algebraMap R S) I
⊢ ∃ a,
    ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) a =
      y
[PROOFSTEP]
rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this
[GOAL]
case refine_2.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : ∃ x_1, x_1 ∈ conductor R x ∧ ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) x_1 = y
⊢ ∃ a,
    ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) a =
      y
case refine_2.intro.hf
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : y ∈ Ideal.map (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (conductor R x)
⊢ Function.Surjective ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
[PROOFSTEP]
obtain ⟨u, hu, hu'⟩ := this
[GOAL]
case refine_2.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
u : S
hu : u ∈ conductor R x
hu' : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) u = y
⊢ ∃ a,
    ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)) a =
      y
case refine_2.intro.hf
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : y ∈ Ideal.map (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (conductor R x)
⊢ Function.Surjective ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
[PROOFSTEP]
use⟨u, conductor_subset_adjoin hu⟩
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
u : S
hu : u ∈ conductor R x
hu' : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) u = y
⊢ ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
      { val := u, property := (_ : u ∈ ↑(adjoin R {x})) } =
    y
case refine_2.intro.hf
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : y ∈ Ideal.map (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (conductor R x)
⊢ Function.Surjective ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
[PROOFSTEP]
simp only [← hu']
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
u : S
hu : u ∈ conductor R x
hu' : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) u = y
⊢ ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
      { val := u, property := (_ : u ∈ ↑(adjoin R {x})) } =
    ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) u
case refine_2.intro.hf
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : y ∈ Ideal.map (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (conductor R x)
⊢ Function.Surjective ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
[PROOFSTEP]
rfl
[GOAL]
case refine_2.intro.hf
R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
x : S
I : Ideal R
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
h_alg : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
f : { x_1 // x_1 ∈ adjoin R {x} } ⧸ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →+*
  S ⧸ Ideal.map (algebraMap R S) I :=
  Ideal.Quotient.lift (Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I)
    (RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
    (_ :
      ∀ (r : { x_1 // x_1 ∈ adjoin R {x} }),
        r ∈ Ideal.map (algebraMap R { x_1 // x_1 ∈ adjoin R {x} }) I →
          ↑(RingHom.comp (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
                  (algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))
              r =
            0)
y : S ⧸ Ideal.map (algebraMap R S) I
z : S
hz : ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) z = y
this : y ∈ Ideal.map (Ideal.Quotient.mk (Ideal.map (algebraMap R S) I)) (conductor R x)
⊢ Function.Surjective ↑(Ideal.Quotient.mk (Ideal.map (algebraMap R S) I))
[PROOFSTEP]
exact Ideal.Quotient.mk_surjective
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
⊢ ↑{J | J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)} ≃
    ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
[PROOFSTEP]
have : IsPrincipalIdealRing (R ⧸ I)[X] := inferInstance
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
⊢ ↑{J | J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)} ≃
    ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
[PROOFSTEP]
let f : S ⧸ map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  by
  refine
    (quotAdjoinEquivQuotMap hx ?_).symm.trans
      (((Algebra.adjoin.powerBasis' hx').quotientEquivQuotientMinpolyMap I).toRingEquiv.trans (quotEquivOfEq ?_))
  · exact NoZeroSMulDivisors.algebraMap_injective (Algebra.adjoin R { x }) S
  · rw [Algebra.adjoin.powerBasis'_minpoly_gen hx']
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
⊢ S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)}
[PROOFSTEP]
refine
  (quotAdjoinEquivQuotMap hx ?_).symm.trans
    (((Algebra.adjoin.powerBasis' hx').quotientEquivQuotientMinpolyMap I).toRingEquiv.trans (quotEquivOfEq ?_))
[GOAL]
case refine_1
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
⊢ Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S)
[PROOFSTEP]
exact NoZeroSMulDivisors.algebraMap_injective (Algebra.adjoin R { x }) S
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
⊢ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
    span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)}
[PROOFSTEP]
rw [Algebra.adjoin.powerBasis'_minpoly_gen hx']
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
f : S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  RingEquiv.trans
    (RingEquiv.symm (quotAdjoinEquivQuotMap hx (_ : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))))
    (RingEquiv.trans (AlgEquiv.toRingEquiv (PowerBasis.quotientEquivQuotientMinpolyMap (adjoin.powerBasis' hx') I))
      (quotEquivOfEq
        (_ :
          span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
            span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})))
⊢ ↑{J | J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)} ≃
    ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
[PROOFSTEP]
refine (normalizedFactorsEquivOfQuotEquiv f ?_ ?_).trans ?_
[GOAL]
case refine_1
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
f : S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  RingEquiv.trans
    (RingEquiv.symm (quotAdjoinEquivQuotMap hx (_ : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))))
    (RingEquiv.trans (AlgEquiv.toRingEquiv (PowerBasis.quotientEquivQuotientMinpolyMap (adjoin.powerBasis' hx') I))
      (quotEquivOfEq
        (_ :
          span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
            span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})))
⊢ Ideal.map (algebraMap R S) I ≠ ⊥
[PROOFSTEP]
rwa [Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S), ← Ne.def]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
f : S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  RingEquiv.trans
    (RingEquiv.symm (quotAdjoinEquivQuotMap hx (_ : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))))
    (RingEquiv.trans (AlgEquiv.toRingEquiv (PowerBasis.quotientEquivQuotientMinpolyMap (adjoin.powerBasis' hx') I))
      (quotEquivOfEq
        (_ :
          span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
            span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})))
⊢ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} ≠ ⊥
[PROOFSTEP]
by_contra h
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
f : S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  RingEquiv.trans
    (RingEquiv.symm (quotAdjoinEquivQuotMap hx (_ : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))))
    (RingEquiv.trans (AlgEquiv.toRingEquiv (PowerBasis.quotientEquivQuotientMinpolyMap (adjoin.powerBasis' hx') I))
      (quotEquivOfEq
        (_ :
          span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
            span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})))
h : span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} = ⊥
⊢ False
[PROOFSTEP]
exact
  (show Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0 from Polynomial.map_monic_ne_zero (minpoly.monic hx'))
    (span_singleton_eq_bot.mp h)
[GOAL]
case refine_3
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
f : S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  RingEquiv.trans
    (RingEquiv.symm (quotAdjoinEquivQuotMap hx (_ : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))))
    (RingEquiv.trans (AlgEquiv.toRingEquiv (PowerBasis.quotientEquivQuotientMinpolyMap (adjoin.powerBasis' hx') I))
      (quotEquivOfEq
        (_ :
          span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
            span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})))
⊢ ↑{M | M ∈ normalizedFactors (span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})} ≃
    ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
[PROOFSTEP]
refine (normalizedFactorsEquivSpanNormalizedFactors ?_).symm
[GOAL]
case refine_3
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
this : IsPrincipalIdealRing (R ⧸ I)[X]
f : S ⧸ Ideal.map (algebraMap R S) I ≃+* (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} :=
  RingEquiv.trans
    (RingEquiv.symm (quotAdjoinEquivQuotMap hx (_ : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ adjoin R {x} } S))))
    (RingEquiv.trans (AlgEquiv.toRingEquiv (PowerBasis.quotientEquivQuotientMinpolyMap (adjoin.powerBasis' hx') I))
      (quotEquivOfEq
        (_ :
          span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R (adjoin.powerBasis' hx').gen)} =
            span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)})))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
[PROOFSTEP]
exact Polynomial.map_monic_ne_zero (minpoly.monic hx')
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
[PROOFSTEP]
rw [normalizedFactorsMapEquivNormalizedFactorsMinPolyMk, Equiv.coe_trans, Function.comp_apply,
  multiplicity_normalizedFactorsEquivSpanNormalizedFactors_symm_eq_multiplicity,
  normalizedFactorsEquivOfQuotEquiv_multiplicity_eq_multiplicity]
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
⊢ normalizedFactors (Ideal.map (algebraMap R S) I) =
    Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
      (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
[PROOFSTEP]
ext J
[GOAL]
case a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
[PROOFSTEP]
by_cases hJ : J ∈ normalizedFactors (I.map (algebraMap R S))
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
case neg
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : ¬J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
[PROOFSTEP]
swap
[GOAL]
case neg
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : ¬J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
[PROOFSTEP]
rw [Multiset.count_eq_zero.mpr hJ, eq_comm, Multiset.count_eq_zero, Multiset.mem_map]
[GOAL]
case neg
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : ¬J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ ¬∃ a,
      a ∈ Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) ∧
        ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm a) = J
[PROOFSTEP]
simp only [Multiset.mem_attach, true_and_iff, not_exists]
[GOAL]
case neg
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : ¬J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ ∀ (x_1 : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}),
    ¬↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm x_1) = J
[PROOFSTEP]
rintro J' rfl
[GOAL]
case neg
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J' : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
hJ :
  ¬↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J') ∈
      normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ False
[PROOFSTEP]
exact hJ ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J').prop
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
[PROOFSTEP]
have := multiplicity_factors_map_eq_multiplicity hI hI' hx hx' hJ
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
[PROOFSTEP]
rw [multiplicity_eq_count_normalizedFactors, multiplicity_eq_count_normalizedFactors,
  UniqueFactorizationMonoid.normalize_normalized_factor _ hJ, UniqueFactorizationMonoid.normalize_normalized_factor,
  PartENat.natCast_inj] at this
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
⊢ Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
case pos.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }) ∈
    normalizedFactors ?m.1024627
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ (R ⧸ I)[X]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ })
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible J
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
refine'
  this.trans
    _
      -- Get rid of the `map` by applying the equiv to both sides.
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
⊢ Multiset.count (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
case pos.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }) ∈
    normalizedFactors ?m.1024627
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ (R ⧸ I)[X]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ })
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible J
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
generalize hJ' : (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') ⟨J, hJ⟩ = J'
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
J' : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
hJ' : ↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ } = J'
⊢ Multiset.count (↑J') (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
case pos.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }) ∈
    normalizedFactors ?m.1024627
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ (R ⧸ I)[X]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ })
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible J
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
have : ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J' : Ideal S) = J := by
  rw [← hJ', Equiv.symm_apply_apply _ _, Subtype.coe_mk]
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
J' : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
hJ' : ↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ } = J'
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J') = J
[PROOFSTEP]
rw [← hJ', Equiv.symm_apply_apply _ _, Subtype.coe_mk]
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝² :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝¹ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
J' : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
hJ' : ↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ } = J'
this : ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J') = J
⊢ Multiset.count (↑J') (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) =
    Multiset.count J
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
case pos.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }) ∈
    normalizedFactors ?m.1024627
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ (R ⧸ I)[X]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ })
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible J
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
subst this
[GOAL]
case pos
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J' : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
hJ :
  ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J') ∈
    normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
      (Ideal.map (algebraMap R S) I) =
    multiplicity
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
          { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
        (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
          { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  Multiset.count (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
      (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
          { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
hJ' :
  ↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
      { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ } =
    J'
⊢ Multiset.count (↑J') (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) =
    Multiset.count (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
      (Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))))
case pos.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }) ∈
    normalizedFactors ?m.1024627
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ (R ⧸ I)[X]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ })
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible J
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
rw [Multiset.count_map_eq_count' fun f =>
    ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f : Ideal S),
  Multiset.attach_count_eq_count_coe]
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J' : ↑{d | d ∈ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
hJ :
  ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J') ∈
    normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
      (Ideal.map (algebraMap R S) I) =
    multiplicity
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
          { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
        (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
          { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  Multiset.count (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'))
      (normalizedFactors (Ideal.map (algebraMap R S) I)) =
    Multiset.count
      (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
          { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ }))
      (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))
hJ' :
  ↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx')
      { val := ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J'), property := hJ } =
    J'
⊢ Function.Injective fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f)
[PROOFSTEP]
exact Subtype.coe_injective.comp (Equiv.injective _)
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝¹ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this✝ :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count J (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    ↑(Multiset.count
        (↑normalize
          ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
        (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))))
⊢ ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }) ∈
    normalizedFactors ?m.1024627
[PROOFSTEP]
exact (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx' _).prop
[GOAL]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ })
[PROOFSTEP]
exact irreducible_of_normalized_factor _ (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx' _).prop
[GOAL]
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this✝ :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this :
  ↑(Multiset.count (↑normalize J) (normalizedFactors (Ideal.map (algebraMap R S) I))) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0
[PROOFSTEP]
exact Polynomial.map_monic_ne_zero (minpoly.monic hx')
[GOAL]
case pos.ha
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible J
[PROOFSTEP]
exact irreducible_of_normalized_factor _ hJ
[GOAL]
case pos.hb
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
J : Ideal S
hJ : J ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
this :
  multiplicity J (Ideal.map (algebraMap R S) I) =
    multiplicity (↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') { val := J, property := hJ }))
      (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
rwa [← bot_eq_zero, Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)]
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
have mem_norm_factors :
  normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) :=
  by simp [normalizedFactors_irreducible hf]
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
[PROOFSTEP]
simp [normalizedFactors_irreducible hf]
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Irreducible (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
suffices ∃ y, normalizedFactors (I.map (algebraMap R S)) = { y }
  by
  obtain ⟨y, hy⟩ := this
  have h :=
    normalizedFactors_prod
      (show I.map (algebraMap R S) ≠ 0 by
        rwa [← bot_eq_zero, Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)])
  rw [associated_iff_eq, hy, Multiset.prod_singleton] at h
  rw [← h]
  exact irreducible_of_normalized_factor y (show y ∈ normalizedFactors (I.map (algebraMap R S)) by simp [hy])
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
this : ∃ y, normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
⊢ Irreducible (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
obtain ⟨y, hy⟩ := this
[GOAL]
case intro
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
y : Ideal S
hy : normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
⊢ Irreducible (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
have h :=
  normalizedFactors_prod
    (show I.map (algebraMap R S) ≠ 0 by
      rwa [← bot_eq_zero, Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)])
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
y : Ideal S
hy : normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
⊢ Ideal.map (algebraMap R S) I ≠ 0
[PROOFSTEP]
rwa [← bot_eq_zero, Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)]
[GOAL]
case intro
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
y : Ideal S
hy : normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
h : Associated (Multiset.prod (normalizedFactors (Ideal.map (algebraMap R S) I))) (Ideal.map (algebraMap R S) I)
⊢ Irreducible (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
rw [associated_iff_eq, hy, Multiset.prod_singleton] at h
[GOAL]
case intro
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
y : Ideal S
hy : normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
h : y = Ideal.map (algebraMap R S) I
⊢ Irreducible (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
rw [← h]
[GOAL]
case intro
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
y : Ideal S
hy : normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
h : y = Ideal.map (algebraMap R S) I
⊢ Irreducible y
[PROOFSTEP]
exact irreducible_of_normalized_factor y (show y ∈ normalizedFactors (I.map (algebraMap R S)) by simp [hy])
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
y : Ideal S
hy : normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
h : y = Ideal.map (algebraMap R S) I
⊢ y ∈ normalizedFactors (Ideal.map (algebraMap R S) I)
[PROOFSTEP]
simp [hy]
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ ∃ y, normalizedFactors (Ideal.map (algebraMap R S) I) = {y}
[PROOFSTEP]
rw [normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map hI hI' hx hx']
[GOAL]
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ ∃ y,
    Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
        (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))) =
      {y}
[PROOFSTEP]
use((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm
      ⟨normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), mem_norm_factors⟩ :
    Ideal S)
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Multiset.map (fun f => ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f))
      (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))) =
    {↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm
          { val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors })}
[PROOFSTEP]
rw [Multiset.map_eq_singleton]
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ ∃ a,
    Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) = {a} ∧
      ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm a) =
        ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm
            { val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors })
[PROOFSTEP]
use⟨normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), mem_norm_factors⟩
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) =
      {{ val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors }} ∧
    ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm
          { val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors }) =
      ↑(↑(normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm
          { val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors })
[PROOFSTEP]
refine ⟨?_, rfl⟩
[GOAL]
case h
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))) =
    {{ val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors }}
[PROOFSTEP]
apply Multiset.map_injective Subtype.coe_injective
[GOAL]
case h.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ Multiset.map (fun a => ↑a)
      (Multiset.attach (normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)))) =
    Multiset.map (fun a => ↑a)
      {{ val := ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)), property := mem_norm_factors }}
[PROOFSTEP]
rw [Multiset.attach_map_val, Multiset.map_singleton, Subtype.coe_mk]
[GOAL]
case h.a
R : Type u_1
S : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
x : S
I : Ideal R
inst✝⁴ : IsDomain R
inst✝³ : IsIntegrallyClosed R
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : NoZeroSMulDivisors R S
hI : IsMaximal I
hI' : I ≠ ⊥
hx : comap (algebraMap R S) (conductor R x) ⊔ I = ⊤
hx' : _root_.IsIntegral R x
hf : Irreducible (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
mem_norm_factors :
  ↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) ∈
    normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))
⊢ normalizedFactors (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)) =
    {↑normalize (Polynomial.map (Ideal.Quotient.mk I) (minpoly R x))}
[PROOFSTEP]
exact normalizedFactors_irreducible hf