Theorem: Nat.det_vandermonde_id_eq_superFactorial
File: Mathlib/Data/Nat/Factorial/SuperFactorial.lean

tactic: induction' n with n hn
state_before: n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
⊢ (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
state_after: case zero
n : ℕ
R : Type u_1
inst✝ : CommRing R
⊢ (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf 0)

case succ
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n + 1)

tactic: simp [Matrix.det_vandermonde]
state_before: case zero
n : ℕ
R : Type u_1
inst✝ : CommRing R
⊢ (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf 0)
state_after: no goals

tactic: rw [Nat.superFactorial, Matrix.det_vandermonde, Fin.prod_univ_succAbove _ 0]
state_before: case succ
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n + 1)
state_after: case succ
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ (∏ j ∈ Ioi 0, (↑↑j - ↑↑0)) * ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) =
    ↑(n.succ ! * sf n)

tactic: push_cast
state_before: case succ
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ (∏ j ∈ Ioi 0, (↑↑j - ↑↑0)) * ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) =
    ↑(n.succ ! * sf n)
state_after: case succ
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ (∏ j ∈ Ioi 0, (↑↑j - ↑↑0)) * ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) =
    ↑n.succ ! * ↑(sf n)

tactic: congr
state_before: case succ
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ (∏ j ∈ Ioi 0, (↑↑j - ↑↑0)) * ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) =
    ↑n.succ ! * ↑(sf n)
state_after: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ∏ j ∈ Ioi 0, (↑↑j - ↑↑0) = ↑n.succ !

case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) = ↑(sf n)

tactic: simp only [Fin.val_zero, Nat.cast_zero, sub_zero]
state_before: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ∏ j ∈ Ioi 0, (↑↑j - ↑↑0) = ↑n.succ !
state_after: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ∏ x ∈ Ioi 0, ↑↑x = ↑n.succ !

tactic: norm_cast
state_before: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ∏ x ∈ Ioi 0, ↑↑x = ↑n.succ !
state_after: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ↑(∏ x ∈ Ioi 0, ↑x) = ↑n.succ !

tactic: simp [Fin.prod_univ_eq_prod_range (fun i ↦ (↑i + 1)) (n + 1)]
state_before: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ↑(∏ x ∈ Ioi 0, ↑x) = ↑n.succ !
state_after: no goals

tactic: rw [Matrix.det_vandermonde] at hn
state_before: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : (Matrix.vandermonde fun i => ↑↑i).det = ↑(sf n)
⊢ ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) = ↑(sf n)
state_after: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : ∏ i : Fin (n + 1), ∏ j ∈ Ioi i, (↑↑j - ↑↑i) = ↑(sf n)
⊢ ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) = ↑(sf n)

tactic: simp [hn]
state_before: case succ.e_a
n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
hn : ∏ i : Fin (n + 1), ∏ j ∈ Ioi i, (↑↑j - ↑↑i) = ↑(sf n)
⊢ ∏ i : Fin (n + 1), ∏ j ∈ Ioi (Fin.succAbove 0 i), (↑↑j - ↑↑(Fin.succAbove 0 i)) = ↑(sf n)
state_after: no goals