Theorem: MvPolynomial.prime_C_iff
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: rw [← C_inj, h]
state_before: R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
h : ↑C r = 0
⊢ r = 0

tactic: simp
state_before: R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
h : ↑C r = 0
⊢ 0 = ↑C 0

tactic: rw [← constantCoeff_C _ r]
state_before: R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
h : IsUnit (↑C r)
⊢ IsUnit r

tactic: exact h.map _
state_before: R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
h : IsUnit (↑C r)
⊢ IsUnit (↑constantCoeff (↑C r))

R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
h : IsUnit (↑C r)
⊢ Type ?u.531262

tactic: obtain ⟨s, a', b', rfl, rfl⟩ := exists_finset_rename₂ a b
state_before: R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
a b : (fun x => MvPolynomial σ R) r
hd : ↑C r ∣ a * b
⊢ ↑C r ∣ a ∨ ↑C r ∣ b

tactic: rw [← algebraMap_eq] at hd
state_before: case intro.intro.intro.intro
R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑C r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
⊢ ↑C r ∣ ↑(rename Subtype.val) a' ∨ ↑C r ∣ ↑(rename Subtype.val) b'

tactic: have := (@killCompl s σ R _ ((↑) : s → σ) Subtype.coe_injective).toRingHom.map_dvd hd
state_before: case intro.intro.intro.intro
R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑(algebraMap R (MvPolynomial σ R)) r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
⊢ ↑C r ∣ ↑(rename Subtype.val) a' ∨ ↑C r ∣ ↑(rename Subtype.val) b'

tactic: have : algebraMap R _ r ∣ a' * b' := by convert this <;> simp
state_before: case intro.intro.intro.intro
R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑(algebraMap R (MvPolynomial σ R)) r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
this :
  ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(algebraMap R (MvPolynomial σ R)) r) ∣
    ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(rename Subtype.val) a' * ↑(rename Subtype.val) b')
⊢ ↑C r ∣ ↑(rename Subtype.val) a' ∨ ↑C r ∣ ↑(rename Subtype.val) b'

tactic: rw [← rename_C ((↑) : s → σ)]
state_before: case intro.intro.intro.intro
R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑(algebraMap R (MvPolynomial σ R)) r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
this✝ :
  ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(algebraMap R (MvPolynomial σ R)) r) ∣
    ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(rename Subtype.val) a' * ↑(rename Subtype.val) b')
this : ↑(algebraMap R (MvPolynomial { x // x ∈ s } R)) r ∣ a' * b'
⊢ ↑C r ∣ ↑(rename Subtype.val) a' ∨ ↑C r ∣ ↑(rename Subtype.val) b'

tactic: let f := @AlgHom.toRingHom R (MvPolynomial s R)
  (MvPolynomial σ R) _ _ _ _ _ (@rename _ _ R _ ((↑) : s → σ))
state_before: case intro.intro.intro.intro
R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑(algebraMap R (MvPolynomial σ R)) r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
this✝ :
  ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(algebraMap R (MvPolynomial σ R)) r) ∣
    ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(rename Subtype.val) a' * ↑(rename Subtype.val) b')
this : ↑(algebraMap R (MvPolynomial { x // x ∈ s } R)) r ∣ a' * b'
⊢ ↑(rename Subtype.val) (↑C r) ∣ ↑(rename Subtype.val) a' ∨ ↑(rename Subtype.val) (↑C r) ∣ ↑(rename Subtype.val) b'

tactic: exact (((prime_C_iff_of_fintype s).2 hr).2.2 a' b' this).imp f.map_dvd f.map_dvd
state_before: case intro.intro.intro.intro
R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑(algebraMap R (MvPolynomial σ R)) r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
this✝ :
  ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(algebraMap R (MvPolynomial σ R)) r) ∣
    ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(rename Subtype.val) a' * ↑(rename Subtype.val) b')
this : ↑(algebraMap R (MvPolynomial { x // x ∈ s } R)) r ∣ a' * b'
f : MvPolynomial { x // x ∈ s } R →+* MvPolynomial σ R := ↑(rename Subtype.val)
⊢ ↑(rename Subtype.val) (↑C r) ∣ ↑(rename Subtype.val) a' ∨ ↑(rename Subtype.val) (↑C r) ∣ ↑(rename Subtype.val) b'

tactic: convert this <;> simp
state_before: R : Type u
S : Type ?u.467790
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
r : R
hr : Prime r
s : Finset σ
a' b' : MvPolynomial { x // x ∈ s } R
hd : ↑(algebraMap R (MvPolynomial σ R)) r ∣ ↑(rename Subtype.val) a' * ↑(rename Subtype.val) b'
this :
  ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(algebraMap R (MvPolynomial σ R)) r) ∣
    ↑↑(killCompl (_ : Function.Injective fun a => ↑a)) (↑(rename Subtype.val) a' * ↑(rename Subtype.val) b')
⊢ ↑(algebraMap R (MvPolynomial { x // x ∈ s } R)) r ∣ a' * b'