Documentation

Mathlib.Data.Finset.NatAntidiagonal

Antidiagonals in ℕ × ℕ as finsets #

This file defines the antidiagonals of ℕ × ℕ as finsets: the n-th antidiagonal is the finset of pairs (i, j) such that i + j = n. This is useful for polynomial multiplication and more generally for sums going from 0 to n.

Notes #

This refines files Data.List.NatAntidiagonal and Data.Multiset.NatAntidiagonal, providing an instance enabling Finset.antidiagonal on Nat.

The antidiagonal of a natural number n is the finset of pairs (i, j) such that i + j = n.

Equations
theorem Finset.Nat.antidiagonal_eq_map (n : ℕ) :
Finset.antidiagonal n = Finset.map { toFun := fun (i : ℕ) => (i, n - i), inj' := ⋯ } (Finset.range (n + 1))
theorem Finset.Nat.antidiagonal_eq_map' (n : ℕ) :
Finset.antidiagonal n = Finset.map { toFun := fun (i : ℕ) => (n - i, i), inj' := ⋯ } (Finset.range (n + 1))
@[simp]

The cardinality of the antidiagonal of n is n + 1.

@[simp]

The antidiagonal of 0 is the list [(0, 0)]

theorem Finset.Nat.antidiagonal.fst_lt {n : ℕ} {kl : ℕ × ℕ} (hlk : kl ∈ Finset.antidiagonal n) :
kl.1 < n + 1
theorem Finset.Nat.antidiagonal.snd_lt {n : ℕ} {kl : ℕ × ℕ} (hlk : kl ∈ Finset.antidiagonal n) :
kl.2 < n + 1
@[simp]
theorem Finset.Nat.antidiagonal_filter_snd_le_of_le {n : ℕ} {k : ℕ} (h : k ≤ n) :
Finset.filter (fun (a : ℕ × ℕ) => a.2 ≤ k) (Finset.antidiagonal n) = Finset.map (Function.Embedding.prodMap { toFun := fun (x : ℕ) => x + (n - k), inj' := ⋯ } (Function.Embedding.refl ℕ)) (Finset.antidiagonal k)
@[simp]
theorem Finset.Nat.antidiagonal_filter_fst_le_of_le {n : ℕ} {k : ℕ} (h : k ≤ n) :
Finset.filter (fun (a : ℕ × ℕ) => a.1 ≤ k) (Finset.antidiagonal n) = Finset.map (Function.Embedding.prodMap (Function.Embedding.refl ℕ) { toFun := fun (x : ℕ) => x + (n - k), inj' := ⋯ }) (Finset.antidiagonal k)
@[simp]
theorem Finset.Nat.antidiagonal_filter_le_fst_of_le {n : ℕ} {k : ℕ} (h : k ≤ n) :
Finset.filter (fun (a : ℕ × ℕ) => k ≤ a.1) (Finset.antidiagonal n) = Finset.map (Function.Embedding.prodMap { toFun := fun (x : ℕ) => x + k, inj' := ⋯ } (Function.Embedding.refl ℕ)) (Finset.antidiagonal (n - k))
@[simp]
theorem Finset.Nat.antidiagonal_filter_le_snd_of_le {n : ℕ} {k : ℕ} (h : k ≤ n) :
Finset.filter (fun (a : ℕ × ℕ) => k ≤ a.2) (Finset.antidiagonal n) = Finset.map (Function.Embedding.prodMap (Function.Embedding.refl ℕ) { toFun := fun (x : ℕ) => x + k, inj' := ⋯ }) (Finset.antidiagonal (n - k))
@[simp]
theorem Finset.Nat.antidiagonalEquivFin_symm_apply_coe (n : ℕ) :
∀ (x : Fin (n + 1)), ↑((Finset.Nat.antidiagonalEquivFin n).symm x) = (↑x, n - ↑x)

The set antidiagonal n is equivalent to Fin (n+1), via the first projection. -

Equations
  • One or more equations did not get rendered due to their size.
Instances For