Cardinality of a finite set #
This defines the cardinality of a Finset
and provides induction principles for finsets.
Main declarations #
Finset.card
:s.card : ℕ
returns the cardinality ofs : Finset α
.
Induction principles #
Alias of the reverse direction of Finset.card_pos
.
If a ∈ s
is known, see also Finset.card_insert_of_mem
and Finset.card_insert_of_not_mem
.
Alias of Finset.card_pair
.
$#(s \setminus {a}) = #s - 1$ if $a \in s$.
$#(s \setminus {a}) = #s - 1$ if $a \in s$.
This result is casted to any additive group with 1,
so that we don't have to work with ℕ
-subtraction.
If a ∈ s
is known, see also Finset.card_erase_of_mem
and Finset.erase_eq_of_not_mem
.
Lattice structure #
Alias of the reverse direction of Finset.card_union_eq_card_add_card
.
Alias of the reverse direction of Finset.card_union_eq_card_add_card
.
Alias of the reverse direction of Finset.card_union_eq_card_add_card
.
Alias of the reverse direction of Finset.card_union_eq_card_add_card
.
Alias of the reverse direction of Finset.card_union_eq_card_add_card
.
Explicit description of a finset from its card #
A Finset
of a subsingleton type has cardinality at most one.
Alias of Finset.one_lt_card_iff_nontrivial
.
If a Finset in a Pi type is nontrivial (has at least two elements), then its projection to some factor is nontrivial, and the fibers of the projection are proper subsets.
Inductions #
Suppose that, given objects defined on all strict subsets of any finset s
, one knows how to
define an object on s
. Then one can inductively define an object on all finsets, starting from
the empty set and iterating. This can be used either to define data, or to prove properties.
Equations
- Finset.strongInduction H x = H x fun (t : Finset α) (h : t ⊂ x) => let_fun this := ⋯; Finset.strongInduction H t
Instances For
Analogue of strongInduction
with order of arguments swapped.
Equations
Instances For
Suppose that, given objects defined on all nonempty strict subsets of any nontrivial finset s
,
one knows how to define an object on s
. Then one can inductively define an object on all finsets,
starting from singletons and iterating.
TODO: Currently this can only be used to prove properties.
Replace Finset.Nonempty.exists_eq_singleton_or_nontrivial
with computational content
in order to let p
be Sort
-valued.
Suppose that, given that p t
can be defined on all supersets of s
of cardinality less than
n
, one knows how to define p s
. Then one can inductively define p s
for all finsets s
of
cardinality less than n
, starting from finsets of card n
and iterating. This
can be used either to define data, or to prove properties.
Equations
- Finset.strongDownwardInduction H x = H x fun {t : Finset α} (ht : t.card ≤ n) (h : x ⊂ t) => let_fun this := ⋯; Finset.strongDownwardInduction H t ht
Instances For
Analogue of strongDownwardInduction
with order of arguments swapped.
Equations
Instances For
Alias of Finset.card_le_card
.