R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
⊢ Prime (↑C r) ↔ Prime r
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
⊢ Prime (↑C r) ↔ Prime r
let f (d : ℕ) := (finSuccEquiv R d).symm.toMulEquiv
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
⊢ Prime (↑C r) ↔ Prime r
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
⊢ Prime (↑C r) ↔ Prime r
let _coe' (d : ℕ) : CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R)
  (fun _ => (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R) := inferInstance
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑C r) ↔ Prime r
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
⊢ Prime (↑C r) ↔ Prime r
have that (d : ℕ) : @C R (Fin (d+1)) _ r = (f d) (Polynomial.C (@C R (Fin d) _ r)) := by
  rw [← finSuccEquiv_comp_C_eq_C]; rfl
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑(AlgEquiv.toMulEquiv (renameEquiv R (Fintype.equivFin σ))) (↑C r)) ↔ Prime r
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑C r) ↔ Prime r
rw [(renameEquiv R (Fintype.equivFin σ)).toMulEquiv.prime_iff]
case h.e'_1.a
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑(AlgEquiv.toMulEquiv (renameEquiv R (Fintype.equivFin σ))) (↑C r)) ↔ Prime (↑C r)

R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑C r) ↔ Prime r
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑(AlgEquiv.toMulEquiv (renameEquiv R (Fintype.equivFin σ))) (↑C r)) ↔ Prime r
convert_to Prime (C r) ↔ _
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
d : ℕ
⊢ ↑(RingHom.comp (↑(AlgEquiv.symm (finSuccEquiv R d))) (RingHom.comp Polynomial.C C)) r = ↑(f d) (↑Polynomial.C (↑C r))
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
d : ℕ
⊢ ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
rw [← finSuccEquiv_comp_C_eq_C]
no goals
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
d : ℕ
⊢ ↑(RingHom.comp (↑(AlgEquiv.symm (finSuccEquiv R d))) (RingHom.comp Polynomial.C C)) r = ↑(f d) (↑Polynomial.C (↑C r))
rfl
case h.e'_1.a.a.h.e'_3
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ ↑(AlgEquiv.toMulEquiv (renameEquiv R (Fintype.equivFin σ))) (↑C r) = ↑C r
case h.e'_1.a
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑(AlgEquiv.toMulEquiv (renameEquiv R (Fintype.equivFin σ))) (↑C r)) ↔ Prime (↑C r)
congr!
no goals
case h.e'_1.a.a.h.e'_3
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ ↑(AlgEquiv.toMulEquiv (renameEquiv R (Fintype.equivFin σ))) (↑C r) = ↑C r
apply rename_C
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime r ↔ Prime (↑C r)
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime (↑C r) ↔ Prime r
symm
case zero
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime r ↔ Prime (↑C r)

case succ
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
d : ℕ
hd : Prime r ↔ Prime (↑C r)
⊢ Prime r ↔ Prime (↑C r)
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime r ↔ Prime (↑C r)
induction' Fintype.card σ with d hd
no goals
case zero
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
⊢ Prime r ↔ Prime (↑C r)
exact (isEmptyAlgEquiv R (Fin 0)).toMulEquiv.symm.prime_iff
case succ
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
d : ℕ
hd : Prime r ↔ Prime (↑C r)
⊢ Prime (↑Polynomial.C (↑C r)) ↔ Prime (↑C r)
case succ
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
d : ℕ
hd : Prime r ↔ Prime (↑C r)
⊢ Prime r ↔ Prime (↑C r)
rw [hd, ← Polynomial.prime_C_iff]
case succ
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
d : ℕ
hd : Prime r ↔ Prime (↑C r)
⊢ Prime (↑Polynomial.C (↑C r)) ↔ Prime (↑(f d) (↑Polynomial.C (↑C r)))
case succ
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
d : ℕ
hd : Prime r ↔ Prime (↑C r)
⊢ Prime (↑Polynomial.C (↑C r)) ↔ Prime (↑C r)
rw [that d]
no goals
case succ
R✝ : Type u
S : Type ?u.283331
σ✝ : Type v
M : Type w
inst✝⁵ : CommRing R✝
inst✝⁴ : CommRing S
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
r✝ : R✝
R : Type u
σ : Type v
r : R
inst✝¹ : CommRing R
inst✝ : Fintype σ
f : (d : ℕ) → (MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R :=
  fun d => AlgEquiv.toMulEquiv (AlgEquiv.symm (finSuccEquiv R d))
_coe' : (d : ℕ) →
  CoeFun ((MvPolynomial (Fin d) R)[X] ≃* MvPolynomial (Fin (d + 1)) R) fun x =>
    (MvPolynomial (Fin d) R)[X] → MvPolynomial (Fin (d + 1)) R :=
  fun d => inferInstance
that : ∀ (d : ℕ), ↑C r = ↑(f d) (↑Polynomial.C (↑C r))
d : ℕ
hd : Prime r ↔ Prime (↑C r)
⊢ Prime (↑Polynomial.C (↑C r)) ↔ Prime (↑(f d) (↑Polynomial.C (↑C r)))
refine @MulEquiv.prime_iff (MvPolynomial (Fin d) R)[X] (MvPolynomial (Fin (d + 1)) R)
  ?_ ?_ (Polynomial.C (C r)) ?_