Finite inverse automata and subgroup membership #
A finite graph with inverse-labelled edges and at most one outgoing edge of each label from each vertex is represented by its partial transition map. This file proves that the labels of loops at a chosen basepoint form a subgroup of the free group, and that membership in this subgroup is exactly a finite traversal test on the canonical reduced word.
A letter in the rank-two free group, with a Boolean recording orientation.
Equations
- Stallings.Letter = (Fin 2 × Bool)
Instances For
A word in the signed generators a, b, a⁻¹, and b⁻¹.
Equations
Instances For
The free group on two generators.
Equations
- Stallings.Free = FreeGroup (Fin 2)
Instances For
Reverse the orientation of a letter.
Instances For
The inverse word, obtained by reversing and inverting its letters.
Equations
Instances For
Interpret a signed word as an element of the free group.
Equations
Instances For
Interpret one signed generator as an element of the free group.
Equations
- Stallings.letterEval x = if x.2 = true then FreeGroup.of x.1 else (FreeGroup.of x.1)⁻¹
Instances For
A deterministic graph whose edges come in inverse-labelled pairs.
The transition function is partial: none means that no edge with that label
leaves the given vertex.
- base : V
The vertex at which accepted loops start and end.
The target of a labelled edge, when that edge exists.
Instances For
A labelled path in an inverse automaton.
- nil {V : Type u_1} {G : InverseAutomaton V} (v : V) : G.Walk v [] v
- cons {V : Type u_1} {G : InverseAutomaton V} {v u z : V} {x : Letter} {w : Word} (edge : G.next v x = some u) (tail : G.Walk u w z) : G.Walk v (x :: w) z
Instances For
The executable traversal returns an endpoint exactly when the corresponding path exists.
Concatenate two paths whose endpoints match.
Reversing a path and inverting every label gives the reverse path.
A successful traversal remains successful under one free-reduction step.
A successful traversal remains successful after any sequence of free reductions.
A successful traversal remains successful on the canonical reduced word.
The subgroup represented by all loops at the basepoint.
Equations
- G.loopSubgroup = { carrier := {g : Stallings.Free | ∃ (w : Stallings.Word), Stallings.wordEval w = g ∧ G.Walk G.base w G.base}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
Membership in the loop subgroup is decided by traversing the canonical reduced word.
Instances For
Executable subgroup-membership test for a finite inverse automaton.