Quivers #
This module defines quivers. A quiver on a type V of vertices assigns to every
pair a b : V of vertices a type a ⟶ b of arrows from a to b. This
is a very permissive notion of directed graph.
Implementation notes #
Currently Quiver is defined with Hom : V → V → Sort v.
This is different from the category theory setup,
where we insist that morphisms live in some Type.
There's some balance here: it's nice to allow Prop to ensure there are no multiple arrows,
but it is also results in error-prone universe signatures when constraints require a Type.
A quiver G on a type V of vertices assigns to every pair a b : V of vertices
a type a ⟶ b of arrows from a to b.
For graphs with no repeated edges, one can use Quiver.{0} V, which ensures
a ⟶ b : Prop. For multigraphs, one can use Quiver.{v+1} V, which ensures
a ⟶ b : Type v.
Because Category will later extend this class, we call the field Hom.
Except when constructing instances, you should rarely see this, and use the ⟶ notation instead.
- Hom : V → V → Sort v
The type of edges/arrows/morphisms between a given source and target.
Instances
Notation for the type of edges/arrows/morphisms between a given source and target in a quiver or category.
Equations
- «term_⟶_» = Lean.ParserDescr.trailingNode `«term_⟶_» 10 11 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⟶ ") (Lean.ParserDescr.cat `term 10))
Instances For
Vᵒᵖ reverses the direction of all arrows of V.
Equations
- Quiver.opposite = { Hom := fun (a b : Vᵒᵖ) => (Opposite.unop b ⟶ Opposite.unop a)ᵒᵖ }
Given an arrow in Vᵒᵖ, we can take the "unopposite" back in V.
Equations
- f.unop = Opposite.unop f
Instances For
The bijection (X ⟶ Y) ≃ (op Y ⟶ op X).
Equations
- Quiver.Hom.opEquiv = { toFun := Opposite.op, invFun := Opposite.unop, left_inv := ⋯, right_inv := ⋯ }
Instances For
Equations
- Quiver.emptyQuiver V = { Hom := fun (x x : Quiver.Empty V) => PEmpty.{?u.9} }
A quiver is thin if it has no parallel arrows.
Equations
- Quiver.IsThin V = ∀ (a b : V), Subsingleton (a ⟶ b)