Injective functions #
- to_fun : α → β
- inj' : function.injective self.to_fun
α ↪ β is a bundled injective function.
Instances for function.embedding
- function.embedding.has_sizeof_inst
- function.embedding.has_coe_to_fun
- function.embedding_like
- function.embedding.can_lift
- equiv.coe_embedding
- equiv.perm.coe_embedding
- function.embedding.fintype
- function.embedding.is_empty
- function.embedding.finite
- function.embedding.has_smul
- function.embedding.has_vadd
- function.embedding.is_scalar_tower
- function.embedding.smul_comm_class
- function.embedding.vadd_comm_class
- function.embedding.is_central_scalar
- function.embedding.mul_action
- function.embedding.add_action
Equations
Equations
- function.embedding_like = {to_fun_like := {coe := function.embedding.to_fun β, coe_injective' := _}, injective' := _}
Equations
Convert an α ≃ β to α ↪ β.
This is also available as a coercion equiv.coe_embedding.
The explicit equiv.to_embedding version is preferred though, since the coercion can have issues
inferring the type of the resulting embedding. For example:
-- Works:
example (s : finset (fin 3)) (f : equiv.perm (fin 3)) : s.map f.to_embedding = s.map f := by simp
-- Error, `f` has type `fin 3 ≃ fin 3` but is expected to have type `fin 3 ↪ ?m_1 : Type ?`
example (s : finset (fin 3)) (f : equiv.perm (fin 3)) : s.map f = s.map f.to_embedding := by simp
Equations
Equations
The identity map as a function.embedding.
Transfer an embedding along a pair of equivalences.
Equations
- function.embedding.congr e₁ e₂ f = e₁.symm.to_embedding.trans (f.trans e₂.to_embedding)
A right inverse surj_inv of a surjective function as an embedding.
Equations
- function.embedding.of_surjective f hf = {to_fun := function.surj_inv hf, inj' := _}
Convert a surjective embedding to an equiv
Equations
- f.equiv_of_surjective hf = equiv.of_bijective ⇑f _
There is always an embedding from an empty type. -
Equations
- function.embedding.of_is_empty = {to_fun := is_empty_elim (λ (a : α), β), inj' := _}
Change the value of an embedding f at one point. If the prescribed image
is already occupied by some f a', then swap the values at these two points.
Embedding into option α using some.
Equations
- function.embedding.some = {to_fun := option.some α, inj' := _}
Embedding into option α using coe. Usually the correct synctatical form for simp.
Equations
- function.embedding.coe_option = {to_fun := coe coe_to_lift, inj' := _}
Embedding into with_top α.
Equations
- function.embedding.coe_with_top = {to_fun := coe coe_to_lift, inj' := _}
Given an embedding f : α ↪ β and a point outside of set.range f, construct an embedding
option α ↪ β.
Equations
- f.option_elim x h = {to_fun := option.elim x ⇑f, inj' := _}
Equivalence between embeddings of option α and a sigma type over the embeddings of α.
A version of option.map for function.embeddings.
Equations
- f.option_map = {to_fun := option.map ⇑f, inj' := _}
Embedding of a subtype.
Equations
- function.embedding.subtype p = {to_fun := coe coe_to_lift, inj' := _}
quotient.out as an embedding.
Equations
- function.embedding.quotient_out α = {to_fun := quotient.out s, inj' := _}
Fixing an element b : β gives an embedding α ↪ α × β.
Equations
- function.embedding.sectl α b = {to_fun := λ (a : α), (a, b), inj' := _}
Fixing an element a : α gives an embedding β ↪ α × β.
Equations
- function.embedding.sectr a β = {to_fun := λ (b : β), (a, b), inj' := _}
If e₁ and e₂ are embeddings, then so is λ ⟨a, b⟩, ⟨e₁ a, e₂ b⟩ : pprod α γ → pprod β δ.
The embedding of α into the sum α ⊕ β.
The embedding of β into the sum α ⊕ β.
sigma.mk as an function.embedding.
If f : α ↪ α' is an embedding and g : Π a, β α ↪ β' (f α) is a family
of embeddings, then sigma.map f g is an embedding.
Define an embedding (Π a : α, β a) ↪ (Π a : α, γ a) from a family of embeddings
e : Π a, (β a ↪ γ a). This embedding sends f to λ a, e a (f a).
An embedding e : α ↪ β defines an embedding (γ → α) ↪ (γ → β) that sends each f
to e ∘ f.
Equations
- e.arrow_congr_right = function.embedding.Pi_congr_right (λ (_x : γ), e)
An embedding e : α ↪ β defines an embedding (α → γ) ↪ (β → γ) for any inhabited type γ.
This embedding sends each f : α → γ to a function g : β → γ such that g ∘ e = f and
g y = default whenever y ∉ range e.
Equations
- e.arrow_congr_left = {to_fun := λ (f : α → γ), function.extend ⇑e f inhabited.default, inj' := _}
Restrict both domain and codomain of an embedding.
Equations
- f.subtype_map h = {to_fun := subtype.map ⇑f h, inj' := _}
The type of embeddings α ↪ β is equivalent to
the subtype of all injective functions α → β.
If α₁ ≃ α₂ and β₁ ≃ β₂, then the type of embeddings α₁ ↪ β₁
is equivalent to the type of embeddings α₂ ↪ β₂.
Equations
- h.embedding_congr h' = {to_fun := λ (f : α ↪ γ), function.embedding.congr h h' f, inv_fun := λ (f : β ↪ δ), function.embedding.congr h.symm h'.symm f, left_inv := _, right_inv := _}
A subtype {x // p x ∨ q x} over a disjunction of p q : α → Prop can be injectively split
into a sum of subtypes {x // p x} ⊕ {x // q x} such that ¬ p x is sent to the right.
A subtype {x // p x ∨ q x} over a disjunction of p q : α → Prop is equivalent to a sum of
subtypes {x // p x} ⊕ {x // q x} such that ¬ p x is sent to the right, when
disjoint p q.
See also equiv.sum_compl, for when is_compl p q.
Equations
- subtype_or_equiv p q h = {to_fun := ⇑(subtype_or_left_embedding p q), inv_fun := sum.elim ⇑(subtype.imp_embedding (λ (x : α), p x) (λ (x : α), p x ∨ q x) _) ⇑(subtype.imp_embedding (λ (x : α), q x) (λ (x : α), p x ∨ q x) _), left_inv := _, right_inv := _}