Quotient types #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This module extends the core library's treatment of quotient types (init.data.quot
).
Tags #
quotient
Equations
- quot.inhabited r = {default := quot.mk r inhabited.default}
Recursion on two quotient
arguments a
and b
, result type depends on ⟦a⟧
and ⟦b⟧
.
Descends a function f : α → β → γ
to quotients of α
and β
.
Equations
- quot.lift₂ f hr hs q₁ q₂ = quot.lift (λ (a : α), quot.lift (f a) _) _ q₁ q₂
Descends a function f : α → β → γ
to quotients of α
and β
and applies it.
Equations
- p.lift_on₂ q f hr hs = quot.lift₂ f hr hs p q
Descends a function f : α → β → γ
to quotients of α
and β
wih values in a quotient of
γ
.
Equations
- quot.map₂ f hr hs q₁ q₂ = quot.lift₂ (λ (a : α) (b : β), quot.mk t (f a b)) _ _ q₁ q₂
A binary version of quot.rec_on_subsingleton
.
Equations
- q₁.rec_on_subsingleton₂ q₂ f = q₁.rec_on_subsingleton (λ (a : α), q₂.rec_on_subsingleton (λ (b : β), f a b))
Equations
- quot.lift.decidable_pred r f h = λ (q : quot (λ (a b : α), r a b)), q.rec_on_subsingleton hf
Note that this provides decidable_rel (quot.lift₂ f ha hb)
when α = β
.
Equations
- quot.lift₂.decidable_pred r s f ha hb q₁ = λ (q₂ : quot (λ (b₁ b₂ : β), s b₁ b₂)), q₁.rec_on_subsingleton₂ q₂ hf
Equations
- quot.lift_on.decidable r q f h = quot.lift.decidable_pred (λ (a b : α), r a b) f h q
Equations
- quot.lift_on₂.decidable r s q₁ q₂ f ha hb = quot.lift₂.decidable_pred (λ (a₁ a₂ : α), r a₁ a₂) (λ (b₁ b₂ : β), s b₁ b₂) f ha hb q₁ q₂
Equations
Induction on two quotient
arguments a
and b
, result type depends on ⟦a⟧
and ⟦b⟧
.
Equations
- qa.hrec_on₂ qb f c = quot.hrec_on₂ qa qb f _ _
Map a function f : α → β
that sends equivalent elements to equivalent elements
to a function quotient sa → quotient sb
. Useful to define unary operations on quotients.
Equations
- quotient.map f h = quot.map f h
Map a function f : α → β → γ
that sends equivalent elements to equivalent elements
to a function f : quotient sa → quotient sb → quotient sc
.
Useful to define binary operations on quotients.
Equations
- quotient.map₂ f h = quotient.lift₂ (λ (x : α) (y : β), ⟦f x y⟧) _
Equations
- quotient.lift.decidable_pred f h = quot.lift.decidable_pred (λ (a b : α), a ≈ b) f h
Note that this provides decidable_rel (quotient.lift₂ f h)
when α = β
.
Equations
- quotient.lift₂.decidable_pred f h q₁ = λ (q₂ : quotient sb), q₁.rec_on_subsingleton₂ q₂ hf
Equations
- quotient.lift_on.decidable q f h = quotient.lift.decidable_pred f h q
Equations
- quotient.lift_on₂.decidable q₁ q₂ f h = quotient.lift₂.decidable_pred f h q₁ q₂
quot.mk r
is a surjective function.
quotient.mk
is a surjective function.
Choose an element of the equivalence class using the axiom of choice. Sound but noncomputable.
Equations
Given a function f : Π i, quotient (S i)
, returns the class of functions Π i, α i
sending
each i
to an element of the class f i
.
Equations
- quotient.choice f = ⟦λ (i : ι), (f i).out⟧
Truncation #
trunc α
is the quotient of α
by the always-true relation. This
is related to the propositional truncation in HoTT, and is similar
in effect to nonempty α
, but unlike nonempty α
, trunc α
is data,
so the VM representation is the same as α
, and so this can be used to
maintain computability.
Equations
Instances for trunc
Equations
A version of trunc.rec_on
assuming the codomain is a subsingleton
.
Equations
- q.rec_on_subsingleton f = trunc.rec f _ q
Versions of quotient definitions and lemmas ending in '
use unification instead
of typeclass inference for inferring the setoid
argument. This is useful when there are
several different quotient relations on a type, for example quotient groups, rings and modules.
A version of quotient.mk
taking {s : setoid α}
as an implicit argument instead of an
instance argument.
Equations
- quotient.mk' a = quot.mk setoid.r a
quotient.mk'
is a surjective function.
A version of quotient.lift_on₂
taking {s₁ : setoid α} {s₂ : setoid β}
as implicit arguments
instead of instance arguments.
A version of quotient.ind
taking {s : setoid α}
as an implicit argument instead of an
instance argument.
A version of quotient.ind₂
taking {s₁ : setoid α} {s₂ : setoid β}
as implicit arguments
instead of instance arguments.
A version of quotient.induction_on
taking {s : setoid α}
as an implicit argument instead
of an instance argument.
A version of quotient.induction_on₂
taking {s₁ : setoid α} {s₂ : setoid β}
as implicit
arguments instead of instance arguments.
A version of quotient.induction_on₃
taking {s₁ : setoid α} {s₂ : setoid β} {s₃ : setoid γ}
as implicit arguments instead of instance arguments.
A version of quotient.rec_on_subsingleton
taking {s₁ : setoid α}
as an implicit argument
instead of an instance argument.
Equations
- q.rec_on_subsingleton' f = q.rec_on_subsingleton f
A version of quotient.rec_on_subsingleton₂
taking {s₁ : setoid α} {s₂ : setoid α}
as implicit arguments instead of instance arguments.
Equations
- q₁.rec_on_subsingleton₂' q₂ f = q₁.rec_on_subsingleton₂ q₂ f
Recursion on a quotient
argument a
, result type depends on ⟦a⟧
.
Equations
- qa.hrec_on' f c = quot.hrec_on qa f c
Recursion on two quotient
arguments a
and b
, result type depends on ⟦a⟧
and ⟦b⟧
.
Map a function f : α → β
that sends equivalent elements to equivalent elements
to a function quotient sa → quotient sb
. Useful to define unary operations on quotients.
Equations
- quotient.map' f h = quot.map f h
A version of quotient.map₂
using curly braces and unification.
Equations
- quotient.map₂' f h = quotient.map₂ f h
A version of quotient.out
taking {s₁ : setoid α}
as an implicit argument instead of an
instance argument.
Equations
- quotient.lift_on'.decidable q f h = quotient.lift.decidable_pred f h q
Equations
- quotient.lift_on₂'.decidable q₁ q₂ f h = quotient.lift₂.decidable_pred (λ (a₁ : α), f a₁) h q₁ q₂