Finite types #
This file defines a typeclass to state that a type is finite.
Main declarations #
- Fintype α: Typeclass saying that a type is finite. It takes as fields a- Finsetand a proof that all terms of type- αare in it.
- Finset.univ: The finset of all elements of a fintype.
See Data.Fintype.Basic for elementary results,
Data.Fintype.Card for the cardinality of a fintype,
the equivalence with Fin (Fintype.card α), and pigeonhole principles.
Instances #
Instances for Fintype for
- {x // p x}are in this file as- Fintype.subtype
- Option αare in- Data.Fintype.Option
- α × βare in- Data.Fintype.Prod
- α ⊕ βare in- Data.Fintype.Sum
- Σ (a : α), β aare in- Data.Fintype.Sigma
These files also contain appropriate Infinite instances for these types.
Infinite instances for ℕ, ℤ, Multiset α, and List α are in Data.Fintype.Lattice.
Preparatory lemmas #
Equations
Equations
- List.instDecidableBijOnToSetOfDecidableEq = inferInstanceAs (Decidable (Set.MapsTo f ↑s ↑t' ∧ Set.InjOn f ↑s ∧ Set.SurjOn f ↑s ↑t'))
Elaborate set builder notation for Finset.
- {x | p x}is elaborated as- Finset.filter (fun x ↦ p x) Finset.univif the expected type is- Finset ?α.
- {x : α | p x}is elaborated as- Finset.filter (fun x : α ↦ p x) Finset.univif the expected type is- Finset ?α.
- {x ∉ s | p x}is elaborated as- Finset.filter (fun x ↦ p x) sᶜif either the expected type is- Finset ?αor the expected type is not- Set ?αand- shas expected type- Finset ?α.
- {x ≠ a | p x}is elaborated as- Finset.filter (fun x ↦ p x) {a}ᶜif the expected type is- Finset ?α.
See also
- Data.Set.Defsfor the- Setbuilder notation elaborator that this elaborator partly overrides.
- Data.Finset.Basicfor the- Finsetbuilder notation elaborator partly overriding this one for syntax of the form- {x ∈ s | p x}.
- Data.Fintype.Basicfor the- Finsetbuilder notation elaborator handling syntax of the form- {x | p x},- {x : α | p x},- {x ∉ s | p x},- {x ≠ a | p x}.
- Order.LocallyFinite.Basicfor the- Finsetbuilder notation elaborator handling syntax of the form- {x ≤ a | p x},- {x ≥ a | p x},- {x < a | p x},- {x > a | p x}.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Delaborator for Finset.filter. The pp.funBinderTypes option controls whether
to show the domain type when the filter is over Finset.univ.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Fintype.decidablePiFintype f g = decidable_of_iff (∀ a ∈ Fintype.elems, f a = g a) ⋯
Equations
- Fintype.decidableForallFintype = decidable_of_iff (∀ a ∈ Finset.univ, p a) ⋯
Equations
- Fintype.decidableExistsFintype = decidable_of_iff (∃ a ∈ Finset.univ, p a) ⋯
Equations
Equations
- Fintype.decidableSubsingleton = decidable_of_iff (∀ a ∈ s, ∀ b ∈ s, a = b) ⋯
Equations
- Fintype.decidableEqEquivFintype a b = decidable_of_iff (a.toFun = b.toFun) ⋯
Equations
- Fintype.decidableEqEmbeddingFintype a b = decidable_of_iff (⇑a = ⇑b) ⋯
Equations
Equations
Equations
Equations
Equations
Given a predicate that can be represented by a finset, the subtype associated to the predicate is a fintype.
Equations
- Fintype.subtype s H = { elems := { val := Multiset.pmap Subtype.mk s.val ⋯, nodup := ⋯ }, complete := ⋯ }
Instances For
Construct a fintype from a finset with the same elements.
Equations
- Fintype.ofFinset s H = Fintype.subtype s H
Instances For
Equations
- Bool.fintype = { elems := { val := {true, false}, nodup := Bool.fintype._proof_1 }, complete := Bool.fintype._proof_2 }
Equations
- Ordering.fintype = { elems := { val := {Ordering.lt, Ordering.eq, Ordering.gt}, nodup := Ordering.fintype._proof_1 }, complete := Ordering.fintype._proof_2 }
Equations
- OrderDual.fintype α = inst✝
Equations
- Lex.fintype α = inst✝