The flower graph of a finite list of words #
The flower graph has one common basepoint and one loop spelling each input word. Its vertices are indexed by generator and letter position, so the construction is finite and the input words remain visible in the definition.
A finite vertex type for the flower of S. none is the common basepoint;
some ⟨i,k⟩ is the vertex after k + 1 letters of the ith generator.
Only internal positions are retained; empty and singleton words add no vertices.
Equations
- Stallings.FlowerVertex S = Option ((i : Fin S.length) × Fin (List.length (S.get i) - 1))
Instances For
Encode flower vertices in a finite lexicographic order.
Equations
Instances For
The vertex at position k while reading generator i, with both endpoints
of the generator loop identified with the common basepoint.
Equations
Instances For
The source vertex of the edge in position j of a generator.
Equations
- Stallings.flowerSource S i j = Stallings.flowerPos S i ↑j ⋯
Instances For
The target vertex of the edge in position j of a generator.
Equations
- Stallings.flowerTarget S i j = Stallings.flowerPos S i (↑j + 1) ⋯
Instances For
The signed letter at position j of input generator i.
Equations
- Stallings.flowerLabel S i j = List.get (S.get i) j
Instances For
A directed edge, allowing either the forward letter in an input word or its inverse orientation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
The initial bouquet of loops spelling the words in S.
Equations
- Stallings.flowerGraph S = { edges := fun (v : Stallings.FlowerVertex S) (x : Stallings.Letter) => Finset.filter (Stallings.flowerEdge S v x) Finset.univ, inverse_edges := ⋯ }
Instances For
The subgroup generated by the words in the input list.
Equations
- Stallings.generatorSubgroup S = Subgroup.closure (Set.range fun (i : Fin S.length) => Stallings.wordEval (S.get i))
Instances For
The word prefix reaching an internal flower vertex, with 1 at the basepoint.
Equations
- Stallings.flowerPotential S none = 1
- Stallings.flowerPotential S (some ⟨i, k⟩) = Stallings.wordEval (List.take (↑k + 1) (S.get i))
Instances For
The input flower has a coset potential for the subgroup generated by its loop labels.
The loop subgroup of the initial flower is exactly the subgroup generated by the input words.
The folded automaton constructed from a finite generator list.
Equations
Instances For
The folded automaton's based-loop subgroup is exactly the subgroup generated by the input words.
The executable folded-graph traversal accepts exactly the elements of the subgroup generated by the supplied words.