Equivalence between fintypes #
This file contains some basic results on equivalences where one or both
sides of the equivalence are fintypes.
Main definitions #
function.embedding.to_equiv_range: computably turn an embedding of a fintype into anequivof the domain to its rangeequiv.perm.via_fintype_embedding : perm α → (α ↪ β) → perm βextends the domain of a permutation, fixing everything outside the range of the embedding
Implementation details #
function.embedding.to_equiv_rangeuses a computable inverse, but one that has poor computational performance, since it operates by exhaustive search over the inputfintypes.
Computably turn an embedding f : α ↪ β into an equiv α ≃ set.range f,
if α is a fintype. Has poor computational performance, due to exhaustive searching in
constructed inverse. When a better inverse is known, use equiv.of_left_inverse' or
equiv.of_left_inverse instead. This is the computable version of equiv.of_injective.
Equations
- f.to_equiv_range = {to_fun := λ (a : α), ⟨⇑f a, _⟩, inv_fun := f.inv_of_mem_range, left_inv := _, right_inv := _}
Extend the domain of e : equiv.perm α, mapping it through f : α ↪ β.
Everything outside of set.range f is kept fixed. Has poor computational performance,
due to exhaustive searching in constructed inverse due to using function.embedding.to_equiv_range.
When a better α ≃ set.range f is known, use equiv.perm.via_set_range.
When [fintype α] is not available, a noncomputable version is available as
equiv.perm.via_embedding.
Equations
If e is an equivalence between two subtypes of a fintype α, e.to_compl
is an equivalence between the complement of those subtypes.
See also equiv.compl, for a computable version when a term of type
{e' : α ≃ α // ∀ x : {x // p x}, e' x = e x} is known.
Equations
If e is an equivalence between two subtypes of a fintype α, e.extend_subtype
is a permutation of α acting like e on the subtypes and doing something arbitrary outside.
Note that when p = q, equiv.perm.subtype_congr e (equiv.refl _) can be used instead.