Theorem: IsIntegrallyClosed.pow_dvd_pow_iff
File: Mathlib/RingTheory/IntegralClosure/IntegrallyClosed.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K : Type u_3
inst✝¹ : CommRing K
inst✝ : Algebra R K
ifr : IsFractionRing R K
n : ℕ
hn : n ≠ 0
a b : R
⊢ a ^ n ∣ b ^ n ↔ a ∣ b
state_after: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K : Type u_3
inst✝¹ : CommRing K
inst✝ : Algebra R K
ifr : IsFractionRing R K
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
⊢ a ∣ b
tactic: refine ⟨fun ⟨x, hx⟩ ↦ ?_, fun h ↦ pow_dvd_pow_of_dvd h n⟩
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K : Type u_3
inst✝¹ : CommRing K
inst✝ : Algebra R K
ifr : IsFractionRing R K
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
⊢ a ∣ b
state_after: case pos
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K : Type u_3
inst✝¹ : CommRing K
inst✝ : Algebra R K
ifr : IsFractionRing R K
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
ha : a = 0
⊢ a ∣ b

case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K : Type u_3
inst✝¹ : CommRing K
inst✝ : Algebra R K
ifr : IsFractionRing R K
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
ha : ¬a = 0
⊢ a ∣ b
tactic: by_cases ha : a = 0
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K : Type u_3
inst✝¹ : CommRing K
inst✝ : Algebra R K
ifr : IsFractionRing R K
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
ha : ¬a = 0
⊢ a ∣ b
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
ha : ¬a = 0
K : Type u_1 := FractionRing R
⊢ a ∣ b
tactic: let K := FractionRing R
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
ha : ¬a = 0
K : Type u_1 := FractionRing R
⊢ a ∣ b
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
⊢ a ∣ b
tactic: replace ha : algebraMap R K a ≠ 0 := fun h ↦
    ha <| (injective_iff_map_eq_zero _).1 (IsFractionRing.injective R K) _ h
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
⊢ a ∣ b
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
⊢ a ∣ b
tactic: let y := (algebraMap R K b) / (algebraMap R K a)
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
⊢ a ∣ b
state_after: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
hy : IsIntegral R y
⊢ a ∣ b
tactic: have hy : IsIntegral R y := by
    refine ⟨X ^ n - C x, monic_X_pow_sub_C _ hn, ?_⟩
    simp only [y, map_pow, eval₂_sub, eval₂_X_pow, div_pow, eval₂_pow', eval₂_C]
    replace hx := congr_arg (algebraMap R K) hx
    rw [map_pow] at hx
    field_simp [hx, ha]
state_before: case neg
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
hy : IsIntegral R y
⊢ a ∣ b
state_after: case neg.intro
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
hy : IsIntegral R y
k : R
hk : (algebraMap R K) k = y
⊢ a ∣ b
tactic: obtain ⟨k, hk⟩ := algebraMap_eq_of_integral hy
state_before: case neg.intro
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
hy : IsIntegral R y
k : R
hk : (algebraMap R K) k = y
⊢ a ∣ b
state_after: case neg.intro
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
hy : IsIntegral R y
k : R
hk : (algebraMap R K) k = y
⊢ (algebraMap R K) b = (algebraMap R K) (a * k)
tactic: refine ⟨k, IsFractionRing.injective R K ?_⟩
state_before: case neg.intro
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
id : IsDomain R
iic : IsIntegrallyClosed R
K✝ : Type u_3
inst✝¹ : CommRing K✝
inst✝ : Algebra R K✝
ifr : IsFractionRing R K✝
n : ℕ
hn : n ≠ 0
a b : R
x✝ : a ^ n ∣ b ^ n
x : R
hx : b ^ n = a ^ n * x
K : Type u_1 := FractionRing R
ha : (algebraMap R K) a ≠ 0
y : K := (algebraMap R K) b / (algebraMap R K) a
hy : IsIntegral R y
k : R
hk : (algebraMap R K) k = y
⊢ (algebraMap R K) b = (algebraMap R K) (a * k)
state_after: no goals
tactic: rw [map_mul, hk, mul_div_cancel₀ _ ha]