Equivalence between fintypes #
This file contains some basic results on equivalences where one or both
sides of the equivalence are fintype
s.
Main definitions #
function.embedding.to_equiv_range
: computably turn an embedding of a fintype into anequiv
of 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_range
uses a computable inverse, but one that has poor computational performance, since it operates by exhaustive search over the inputfintype
s.
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.