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

full_name: Nat.superFactorial
code: /-- `Nat.superFactorial n` is the superfactorial of `n`. -/
def superFactorial : ℕ → ℕ
  
goal: ℕ → ℕ

full_name: Nat._aux_Mathlib_Data_Nat_Factorial_SuperFactorial___macroRules_Nat_termSf__1
code: /-- `sf` notation for superfactorial -/
scoped notation "sf" n:60 => Nat.superFactorial n
goal: Lean.Macro

full_name: Nat._aux_Mathlib_Data_Nat_Factorial_SuperFactorial___unexpand_Nat_superFactorial_1
code: /-- `sf` notation for superfactorial -/
scoped notation "sf" n:60 => Nat.superFactorial n
goal: Lean.PrettyPrinter.Unexpander

full_name: Nat.superFactorial_zero
code: @[simp]
theorem superFactorial_zero : sf 0 = 1 
goal: Nat.superFactorial 0 = 1

full_name: Nat.superFactorial_succ
code: theorem superFactorial_succ (n : ℕ) : (sf n.succ) = (n + 1)! * sf n 
goal: n.succ.superFactorial = (n + 1).factorial * n.superFactorial

full_name: Nat.superFactorial_one
code: @[simp]
theorem superFactorial_one : sf 1 = 1 
goal: Nat.superFactorial 1 = 1

full_name: Nat.superFactorial_two
code: @[simp]
theorem superFactorial_two : sf 2 = 2 
goal: Nat.superFactorial 2 = 2

full_name: Nat.prod_Icc_factorial
code: @[simp]
theorem prod_Icc_factorial : ∀ n : ℕ, ∏ x ∈ Icc 1 n, x ! = sf n
  
goal: ∏ x ∈ Finset.Icc 1 n, x.factorial = n.superFactorial

full_name: Nat.prod_range_factorial_succ
code: @[simp]
theorem prod_range_factorial_succ (n : ℕ) : ∏ x ∈ range n, (x + 1)! = sf n 
goal: ∏ x ∈ Finset.range n, (x + 1).factorial = n.superFactorial

full_name: Nat.prod_range_succ_factorial
code: @[simp]
theorem prod_range_succ_factorial : ∀ n : ℕ, ∏ x ∈ range (n + 1), x ! = sf n
  
goal: ∏ x ∈ Finset.range (n + 1), x.factorial = n.superFactorial

full_name: Nat.det_vandermonde_id_eq_superFactorial
code: theorem det_vandermonde_id_eq_superFactorial (n : ℕ) :
    (Matrix.vandermonde (fun (i : Fin (n + 1)) ↦ (i : R))).det = Nat.superFactorial n 
goal: (Matrix.vandermonde fun i => ↑↑i).det = ↑n.superFactorial

full_name: Nat.superFactorial_two_mul
code: theorem superFactorial_two_mul : ∀ n : ℕ,
    sf (2 * n) = (∏ i ∈ range n, (2 * i + 1) !) ^ 2 * 2 ^ n * n !
  
goal: (2 * n).superFactorial = (∏ i ∈ Finset.range n, (2 * i + 1).factorial) ^ 2 * 2 ^ n * n.factorial

full_name: Nat.superFactorial_four_mul
code: theorem superFactorial_four_mul (n : ℕ) :
    sf (4 * n) = ((∏ i ∈ range (2 * n), (2 * i + 1) !) * 2 ^ n) ^ 2 * (2 * n) ! 
goal: (4 * n).superFactorial = ((∏ i ∈ Finset.range (2 * n), (2 * i + 1).factorial) * 2 ^ n) ^ 2 * (2 * n).factorial

full_name: _private.Mathlib.Data.Nat.Factorial.SuperFactorial.0.Nat.matrixOf_eval_descPochhammer_eq_mul_matrixOf_choose
code: private theorem matrixOf_eval_descPochhammer_eq_mul_matrixOf_choose {n : ℕ} (v : Fin n → ℕ) :
    (Matrix.of (fun (i j : Fin n) => (descPochhammer ℤ j).eval (v i : ℤ))).det =
    (∏ i : Fin n, Nat.factorial i) *
      (Matrix.of (fun (i j : Fin n) => (Nat.choose (v i) (j : ℕ) : ℤ))).det 
goal: (Matrix.of fun i j => Polynomial.eval (↑(v i)) (descPochhammer ℤ ↑j)).det =
  ↑(∏ i : Fin n, (↑i).factorial) * (Matrix.of fun i j => ↑((v i).choose ↑j)).det

full_name: Nat.superFactorial_dvd_vandermonde_det
code: theorem superFactorial_dvd_vandermonde_det {n : ℕ} (v : Fin (n + 1) → ℤ) :
    ↑(Nat.superFactorial n) ∣ (Matrix.vandermonde v).det 
goal: ↑n.superFactorial ∣ (Matrix.vandermonde v).det