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 : ) :
antidiagonal n = map { toFun := fun (i : ) => (i, n - i), inj' := } (range (n + 1))
theorem Finset.Nat.antidiagonal_eq_map' (n : ) :
antidiagonal n = map { toFun := fun (i : ) => (n - i, i), inj' := } (range (n + 1))
theorem Finset.Nat.antidiagonal_eq_image (n : ) :
antidiagonal n = image (fun (i : ) => (i, n - i)) (range (n + 1))
theorem Finset.Nat.antidiagonal_eq_image' (n : ) :
antidiagonal n = image (fun (i : ) => (n - i, i)) (range (n + 1))
@[simp]
theorem Finset.Nat.card_antidiagonal (n : ) :
(antidiagonal n).card = n + 1

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

@[simp]

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

theorem Finset.Nat.antidiagonal_succ (n : ) :
antidiagonal (n + 1) = cons (0, n + 1) (map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Function.Embedding.refl )) (antidiagonal n))
theorem Finset.Nat.antidiagonal_succ' (n : ) :
antidiagonal (n + 1) = cons (n + 1, 0) (map ((Function.Embedding.refl ).prodMap { toFun := Nat.succ, inj' := Nat.succ_injective }) (antidiagonal n))
theorem Finset.Nat.antidiagonal_succ_succ' {n : } :
antidiagonal (n + 2) = cons (0, n + 2) (cons (n + 2, 0) (map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap { toFun := Nat.succ, inj' := Nat.succ_injective }) (antidiagonal n)) )
theorem Finset.Nat.antidiagonal.fst_lt {n : } {kl : × } (hlk : kl antidiagonal n) :
kl.1 < n + 1
theorem Finset.Nat.antidiagonal.snd_lt {n : } {kl : × } (hlk : kl antidiagonal n) :
kl.2 < n + 1
@[simp]
theorem Finset.Nat.antidiagonal_filter_snd_le_of_le {n k : } (h : k n) :
filter (fun (a : × ) => a.2 k) (antidiagonal n) = map ({ toFun := fun (x : ) => x + (n - k), inj' := }.prodMap (Function.Embedding.refl )) (antidiagonal k)
@[simp]
theorem Finset.Nat.antidiagonal_filter_fst_le_of_le {n k : } (h : k n) :
filter (fun (a : × ) => a.1 k) (antidiagonal n) = map ((Function.Embedding.refl ).prodMap { toFun := fun (x : ) => x + (n - k), inj' := }) (antidiagonal k)
@[simp]
theorem Finset.Nat.antidiagonal_filter_le_fst_of_le {n k : } (h : k n) :
filter (fun (a : × ) => k a.1) (antidiagonal n) = map ({ toFun := fun (x : ) => x + k, inj' := }.prodMap (Function.Embedding.refl )) (antidiagonal (n - k))
@[simp]
theorem Finset.Nat.antidiagonal_filter_le_snd_of_le {n k : } (h : k n) :
filter (fun (a : × ) => k a.2) (antidiagonal n) = map ((Function.Embedding.refl ).prodMap { toFun := fun (x : ) => x + k, inj' := }) (antidiagonal (n - k))

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
    @[simp]
    theorem Finset.Nat.antidiagonalEquivFin_apply_val (n : ) (x✝ : { x : × // x antidiagonal n }) :
    ((antidiagonalEquivFin n) x✝) = x✝.1.1
    @[simp]
    theorem Finset.Nat.antidiagonalEquivFin_symm_apply_coe (n : ) (x✝ : Fin (n + 1)) :
    ((antidiagonalEquivFin n).symm x✝) = (x✝, n - x✝)