Arborescences #
A quiver V is an arborescence (or directed rooted tree) when we have a root vertex root : V such
that for every b : V there is a unique path from root to b.
Main definitions #
Quiver.Arborescence V: a typeclass asserting thatVis an arborescencearborescenceMk: a convenient way of proving that a quiver is an arborescenceRootedConnected r: a typeclass asserting that there is at least one path fromrtobfor everyb.geodesicSubtree r: given[RootedConnected r], this is a subquiver ofVwhich contains just enough edges to include a shortest path fromrtobfor everyb.geodesicArborescence : Arborescence (geodesicSubtree r): an instance saying that the geodesic subtree is an arborescence. This proves the directed analogue of 'every connected graph has a spanning tree'. This proof avoids the use of Zorn's lemma.
A quiver is an arborescence when there is a unique path from the default vertex to every other vertex.
- root : V
The root of the arborescence.
There is a unique path from the root to any other vertex.
Instances
The root of an arborescence.
Equations
Instances For
Equations
noncomputable def
Quiver.arborescenceMk
{V : Type u}
[Quiver V]
(r : V)
(height : V → ℕ)
(height_lt : ∀ ⦃a b : V⦄ (a_1 : a ⟶ b), height a < height b)
(unique_arrow : ∀ ⦃a b c : V⦄ (e : a ⟶ c) (f : b ⟶ c), a = b ∧ e ≍ f)
(root_or_arrow : ∀ (b : V), b = r ∨ ∃ (a : V), Nonempty (a ⟶ b))
:
To show that [Quiver V] is an arborescence with root r : V, it suffices to
- provide a height function
V → ℕsuch that every arrow goes from a lower vertex to a higher vertex, - show that every vertex has at most one arrow to it, and
- show that every vertex other than
rhas an arrow to it.
Equations
- Quiver.arborescenceMk r height height_lt unique_arrow root_or_arrow = { root := r, uniquePath := fun (b : V) => { toInhabited := Classical.inhabited_of_nonempty ⋯, uniq := ⋯ } }
Instances For
noncomputable def
Quiver.shortestPath
{V : Type u}
[Quiver V]
(r : V)
[RootedConnected r]
(b : V)
:
Path r b
A path from r of minimal length.
Equations
- Quiver.shortestPath r b = ⋯.min Set.univ ⋯
Instances For
theorem
Quiver.shortest_path_spec
{V : Type u}
[Quiver V]
(r : V)
[RootedConnected r]
{a : V}
(p : Path r a)
:
The length of a path is at least the length of the shortest path
A subquiver which by construction is an arborescence.
Equations
- Quiver.geodesicSubtree r a b = {e : a ⟶ b | ∃ (p : Quiver.Path r a), Quiver.shortestPath r b = p.cons e}
Instances For
noncomputable instance
Quiver.geodesicArborescence
{V : Type u}
[Quiver V]
(r : V)
[RootedConnected r]
:
Equations
- Quiver.geodesicArborescence r = Quiver.arborescenceMk r (fun (a : WideSubquiver.toType V (Quiver.geodesicSubtree r)) => (Quiver.shortestPath r a).length) ⋯ ⋯ ⋯