Definition of the Finite typeclass #
This file defines a typeclass Finite saying that α : Sort* is finite. A type is Finite if it
is equivalent to Fin n for some n. We also define Infinite α as a typeclass equivalent to
¬Finite α.
The Finite predicate has no computational relevance and, being Prop-valued, gets to enjoy proof
irrelevance -- it represents the mere fact that the type is finite. While the Finite class also
represents finiteness of a type, a key difference is that a Fintype instance represents finiteness
in a computable way: it gives a concrete algorithm to produce a Finset whose elements enumerate
the terms of the given type. As such, one generally relies on congruence lemmas when rewriting
expressions involving Fintype instances.
Every Fintype instance automatically gives a Finite instance, see Fintype.finite, but not vice
versa. Every Fintype instance should be computable since they are meant for computation. If it's
not possible to write a computable Fintype instance, one should prefer writing a Finite instance
instead.
Main definitions #
Implementation notes #
The definition of Finite α is not just Nonempty (Fintype α) since Fintype requires
that α : Type*, and the definition in this module allows for α : Sort*. This means
we can write the instance Finite.prop.
Tags #
finite, fintype
Equations
Equations
Alias of the reverse direction of not_infinite_iff_finite.
Alias of the forward direction of not_infinite_iff_finite.