Documentation

Mathlib.Data.List.NatAntidiagonal

Antidiagonals in ℕ × ℕ as lists #

This file defines the antidiagonals of ℕ × ℕ as lists: the n-th antidiagonal is the list 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 #

Files Data.Multiset.NatAntidiagonal and Data.Finset.NatAntidiagonal successively turn the List definition we have here into Multiset and Finset.

def List.Nat.antidiagonal (n : ) :
List ( × )

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

Instances For
    @[simp]
    theorem List.Nat.mem_antidiagonal {n : } {x : × } :
    x antidiagonal n x.1 + x.2 = n

    A pair (i, j) is contained in the antidiagonal of n if and only if i + j = n.

    @[simp]
    theorem List.Nat.length_antidiagonal (n : ) :
    (antidiagonal n).length = n + 1

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

    @[simp]

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

    theorem List.Nat.nodup_antidiagonal (n : ) :
    (antidiagonal n).Nodup

    The antidiagonal of n does not contain duplicate entries.

    @[simp]
    theorem List.Nat.antidiagonal_succ {n : } :
    antidiagonal (n + 1) = (0, n + 1) :: map (Prod.map Nat.succ id) (antidiagonal n)
    theorem List.Nat.antidiagonal_succ' {n : } :
    antidiagonal (n + 1) = map (Prod.map id Nat.succ) (antidiagonal n) ++ [(n + 1, 0)]
    theorem List.Nat.antidiagonal_succ_succ' {n : } :
    antidiagonal (n + 2) = (0, n + 2) :: map (Prod.map Nat.succ Nat.succ) (antidiagonal n) ++ [(n + 2, 0)]
    theorem List.Nat.map_swap_antidiagonal {n : } :
    map Prod.swap (antidiagonal n) = (antidiagonal n).reverse