Symmetric quivers and arrow reversal #
This file contains constructions related to symmetric quivers:
Symmetrify V
adds formal inverses to each arrow ofV
.HasReverse
is the class of quivers where each arrow has an assigned formal inverse.HasInvolutiveReverse
extendsHasReverse
by requiring that the reverse of the reverse is equal to the original arrow.Prefunctor.PreserveReverse
is the class of prefunctors mapping reverses to reverses.Symmetrify.of
,Symmetrify.lift
, and the associated lemmas witness the universal property ofSymmetrify
.
A type synonym for the symmetrized quiver (with an arrow both ways for each original arrow).
NB: this does not work for Prop
-valued quivers. It requires [Quiver.{v+1} V]
.
Equations
- Quiver.Symmetrify V = V
Instances For
Equations
- Quiver.symmetrifyQuiver V = { Hom := fun (a b : V) => (a ⟶ b) ⊕ (b ⟶ a) }
A quiver HasReverse
if we can reverse an arrow p
from a
to b
to get an arrow
p.reverse
from b
to a
.
the map which sends an arrow to its reverse
Instances
A quiver HasInvolutiveReverse
if reversing twice is the identity.
- inv' : ∀ {a b : V} (f : a ⟶ b), Quiver.reverse (Quiver.reverse f) = f
reverse
is involutive
Instances
A prefunctor preserving reversal of arrows
- map_reverse' : ∀ {u v : U} (e : u ⟶ v), φ.map (Quiver.reverse e) = Quiver.reverse (φ.map e)
The image of a reverse is the reverse of the image.
Instances
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- Quiver.instHasReverseSymmetrify = { reverse' := fun {a b : Quiver.Symmetrify V} (e : a ⟶ b) => Sum.swap e }
Equations
- Quiver.instHasInvolutiveReverseSymmetrify = Quiver.HasInvolutiveReverse.mk ⋯
Shorthand for the "forward" arrow corresponding to f
in symmetrify V
Instances For
Shorthand for the "backward" arrow corresponding to f
in symmetrify V
Instances For
Reverse the direction of a path.
Equations
- Quiver.Path.nil.reverse = Quiver.Path.nil
- (p.cons e).reverse = (Quiver.reverse e).toPath.comp p.reverse
Instances For
The inclusion of a quiver in its symmetrification
Equations
- Quiver.Symmetrify.of = { obj := id, map := fun {X Y : V} => Sum.inl }
Instances For
Given a quiver V'
with reversible arrows, a prefunctor to V'
can be lifted to one from
Symmetrify V
to V'
Equations
- Quiver.Symmetrify.lift φ = { obj := φ.obj, map := fun {X Y : Quiver.Symmetrify V} (f : X ⟶ Y) => match f with | Sum.inl g => φ.map g | Sum.inr g => Quiver.reverse (φ.map g) }
Instances For
lift φ
is the only prefunctor extending φ
and preserving reverses.
A prefunctor canonically defines a prefunctor of the symmetrifications.
Equations
- φ.symmetrify = { obj := φ.obj, map := fun {X Y : Quiver.Symmetrify U} => Sum.map φ.map φ.map }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- ⋯ = ⋯
A quiver is preconnected iff there exists a path between any pair of
vertices.
Note that if V
doesn't HasReverse
, then the definition is stronger than
simply having a preconnected underlying SimpleGraph
, since a path in one
direction doesn't induce one in the other.
Equations
- Quiver.IsPreconnected V = ∀ (X Y : V), Nonempty (Quiver.Path X Y)