Quotient types #
This module extends the core library's treatment of quotient types (Init.Core).
Tags #
quotient
When writing a lemma about someSetoid x y (which uses this instance),
call it someSetoid_apply not someSetoid_r.
Equations
- Setoid.instCoeFunForallForallProp_mathlib = { coe := @Setoid.r α }
Equations
- Quot.instUnique = Unique.mk' (Quot ra)
Recursion on two Quotient arguments a and b, result type depends on ⟦a⟧ and ⟦b⟧.
Equations
- qa.hrecOn₂ qb f ca cb = Quot.hrecOn qa (fun (a : α) => Quot.hrecOn qb (f a) ⋯) ⋯
Instances For
Descends a function f : α → β → γ to quotients of α and β.
Equations
- Quot.lift₂ f hr hs q₁ q₂ = Quot.lift (fun (a : α) => Quot.lift (f a) ⋯) ⋯ q₁ q₂
Instances For
Descends a function f : α → β → γ to quotients of α and β and applies it.
Equations
- p.liftOn₂ q f hr hs = Quot.lift₂ f hr hs p q
Instances For
Descends a function f : α → β → γ to quotients of α and β with values in a quotient of
γ.
Equations
- Quot.map₂ f hr hs q₁ q₂ = Quot.lift₂ (fun (a : α) (b : β) => Quot.mk t (f a b)) ⋯ ⋯ q₁ q₂
Instances For
A binary version of Quot.recOnSubsingleton.
Equations
- q₁.recOnSubsingleton₂ q₂ f = Quot.recOnSubsingleton q₁ fun (a : α) => Quot.recOnSubsingleton q₂ fun (b : β) => f a b
Instances For
Equations
- Quot.lift.decidablePred r f h q = Quot.recOnSubsingleton q hf
Note that this provides DecidableRel (Quot.Lift₂ f ha hb) when α = β.
Equations
- Quot.lift₂.decidablePred r s f ha hb q₁ q₂ = q₁.recOnSubsingleton₂ q₂ hf
Equations
- Quot.instDecidableLiftOnOfDecidablePred_mathlib r q f h = Quot.lift.decidablePred r f h q
Equations
- Quot.instDecidableLiftOn₂OfDecidablePred r s q₁ q₂ f ha hb = Quot.lift₂.decidablePred r s f ha hb q₁ q₂
Places an element of a type into the quotient that equates terms according to an equivalence relation.
The setoid instance is provided explicitly. Quotient.mk' uses instance synthesis instead.
Given v : α, Quotient.mk s v : Quotient s is like v, except all observations of v's value
must respect s.r. Quotient.lift allows values in a quotient to be mapped to other types, so long
as the mapping respects s.r.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Induction on two Quotient arguments a and b, result type depends on ⟦a⟧ and ⟦b⟧.
Equations
- qa.hrecOn₂ qb f c = Quot.hrecOn₂ qa qb f ⋯ ⋯
Instances For
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
Instances For
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₂ (fun (x : α) (y : β) => ⟦f x y⟧) ⋯
Instances For
Equations
Note that this provides DecidableRel (Quotient.lift₂ f h) when α = β.
Equations
- Quotient.lift₂.decidablePred f h q₁ q₂ = Quotient.recOnSubsingleton₂ q₁ q₂ hf
Equations
Equations
- q₁.instDecidableLiftOn₂OfDecidablePred_mathlib q₂ f h = Quotient.lift₂.decidablePred f h q₁ q₂
Quot.mk r is a surjective function.
Quotient.mk is a surjective function.
Quotient.mk' is a surjective function.
Unwrap the VM representation of a quotient to obtain an element of the equivalence class. Computable but unsound.
Equations
- Quot.unquot = cast ⋯
Instances For
Choose an element of the equivalence class using the axiom of choice. Sound but noncomputable.
Equations
Instances For
Given a class of functions q : @Quotient (∀ i, α i) _, returns the class of i-th projection
Quotient (S i).
Equations
- q.eval i = Quotient.map (fun (x : (i : ι) → α i) => x i) ⋯ q
Instances For
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 = ⟦fun (i : ι) => (f i).out⟧
Instances For
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
Any constant function lifts to a function out of the truncation
Equations
- Trunc.lift f c = Quot.lift f ⋯
Instances For
Lift a constant function on q : Trunc α.
Equations
- q.liftOn f c = Trunc.lift f c q
Instances For
Equations
- One or more equations did not get rendered due to their size.
A version of Trunc.recOn assuming the codomain is a Subsingleton.
Equations
- q.recOnSubsingleton f = Trunc.rec f ⋯ q
Instances For
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 = ⟦a⟧
Instances For
Quotient.mk'' is a surjective function.
A version of Quotient.liftOn taking {s : Setoid α} as an implicit argument instead of an
instance argument.
Instances For
A version of Quotient.liftOn₂ taking {s₁ : Setoid α} {s₂ : Setoid β} as implicit arguments
instead of instance arguments.
Instances For
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.inductionOn taking {s : Setoid α} as an implicit argument instead
of an instance argument.
A version of Quotient.inductionOn₂ taking {s₁ : Setoid α} {s₂ : Setoid β} as implicit
arguments instead of instance arguments.
A version of Quotient.inductionOn₃ taking {s₁ : Setoid α} {s₂ : Setoid β} {s₃ : Setoid γ}
as implicit arguments instead of instance arguments.
A version of Quotient.recOnSubsingleton taking {s₁ : Setoid α} as an implicit argument
instead of an instance argument.
Equations
Instances For
A version of Quotient.recOnSubsingleton₂ taking {s₁ : Setoid α} {s₂ : Setoid α}
as implicit arguments instead of instance arguments.
Equations
- q₁.recOnSubsingleton₂' q₂ f = Quotient.recOnSubsingleton₂ q₁ q₂ f
Instances For
Recursion on a Quotient argument a, result type depends on ⟦a⟧.
Equations
- qa.hrecOn' f c = Quot.hrecOn qa f c
Instances For
Recursion on two Quotient arguments a and b, result type depends on ⟦a⟧ and ⟦b⟧.
Instances For
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.
This is a version of Quotient.map using Setoid.r instead of ≈.
Equations
- Quotient.map' f h = Quot.map f h
Instances For
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. This is a version of Quotient.map₂ using Setoid.r instead of ≈.
Equations
- Quotient.map₂' f h = Quotient.map₂ f h
Instances For
Equations
Equations
- q₁.instDecidableLiftOn₂'OfDecidablePred q₂ f h = Quotient.lift₂.decidablePred f h q₁ q₂