The subregular function hierarchy #
Inclusions among the directionality classes of Core/Computability/Subregular/Function/,
assembled from the strictly-local, synchronous-subsequential (LetterSubsequential) and
bimachine (Bimachine) substrate:
single-symbol ISL/OSL ⊆ IsLetterLeftSubsequential ⊆ IsBimachineWeaklyDeterministic ⊆ IsBimachineComputable
A left-subsequential transducer is the degenerate bimachine whose right automaton is trivial, so its cell output is a one-sided rule — non-interacting.
Main results #
IsBimachineWeaklyDeterministic.of_letterLeftSubsequential— subsequential ⊆ WD.IsBimachineComputable.of_weaklyDeterministic— WD ⊆ regular.weaklyDeterministic_strict_subset_regular— WD ⊊ regular is proper: the conjunctive changeconjBM(a target raised iff a trigger occurs on both sides) is bimachine-computable butRequiresBothSides.isLetterLeftSubsequential_of_ISLRule/_of_OSLRule— single-symbol ISL/OSL ⊆ subsequential (the bounded window as aMealystate);.of_ISLRule/.of_OSLRuleextend the chain to WD.
TODO #
- subsequential ⊊ WD is also proper, but a witness is not yet formalized here: a genuinely
two-sided union is
IsUnboundedCircumambient, hence not right-myopic (IsLetterLeftSubsequential.isRightMyopic), hence not left-subsequential, yet weakly deterministic.
Synchronous ⊆ block subsequential #
A Mealy machine is an SFST emitting singleton blocks with an empty final flush, so
the synchronous class embeds in the block class scanning the same direction.
A letter-left-subsequential function is left-subsequential: synchronous ⊆ block.
Subsequential ⊆ weakly deterministic. A synchronous left-subsequential function is
computed by a non-interacting bimachine: the left automaton is the transducer, the right
automaton is trivial, so the cell output is a one-sided rule (ωR is the identity).
Weakly deterministic ⊆ regular. A non-interacting bimachine is a bimachine.
Strictness: WD ⊊ regular #
A conjunctive change — a target raised iff a trigger occurs on both sides — is
bimachine-computable but RequiresBothSides, so no non-interacting bimachine computes
it.
Equations
- Subregular.instDecidableEqConjSym x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Subregular.instReprConjSym = { reprPrec := Subregular.instReprConjSym.repr }
Equations
- Subregular.instReprConjSym.repr Subregular.ConjSym.trig prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Subregular.ConjSym.trig")).group prec✝
- Subregular.instReprConjSym.repr Subregular.ConjSym.tgt prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Subregular.ConjSym.tgt")).group prec✝
- Subregular.instReprConjSym.repr Subregular.ConjSym.raised prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Subregular.ConjSym.raised")).group prec✝
Instances For
Equations
- Subregular.instFintypeConjSym = { elems := {Subregular.ConjSym.trig, Subregular.ConjSym.tgt, Subregular.ConjSym.raised}, complete := Subregular.instFintypeConjSym._proof_1 }
A target raises iff a trigger occurs on both sides — a flag bimachine
(Bimachine.ofFlags) tracking a trigger on each side, whose cell genuinely needs both
flags (l && r).
Equations
- One or more equations did not get rendered due to their size.
Instances For
The conjunctive spread requires both sides: the base raises a medial target (a trigger
on each side), but flipping either far trigger to a filler reverts it. The perturbations are
List.sets of the base, so they agree with it off the flipped index (getElem?_set_ne),
and the reverting cell output is read off via conjBM_run_at.
The strictly-local lower end: single-symbol ISL/OSL ⊆ subsequential #
The ISL/OSL classes are block-output (length-changing) in general, so they sit outside the
length-preserving lattice. Their single-symbol (length-preserving) fragment embeds: the
same bounded window that makes toFinSFST finite-state serves as a Mealy state, with
the lone output symbol as the letter. This extends the chain to
single-symbol ISL/OSL ⊆ subsequential ⊆ WD ⊆ regular.
A length-preserving (single-symbol) left-ISL rule as a synchronous transducer: the bounded input window is the state, the lone output symbol the letter.
Equations
- r.toMealy hs = { initial := ⟨[], ⋯⟩, step := fun (w : { l : List α // l.length ≤ k - 1 }) (x : α) => (⟨(↑w ++ [x]).rtake (k - 1), ⋯⟩, (r.windowOutput (↑w) x).head ⋯) }
Instances For
Single-symbol left-ISL ⊆ left-subsequential.
A length-preserving (single-symbol) left-OSL rule as a synchronous transducer: the bounded output window is the state.
Equations
- r.toMealy hs = { initial := ⟨[], ⋯⟩, step := fun (w : { l : List β // l.length ≤ k - 1 }) (x : α) => (⟨(↑w ++ r.windowOutput (↑w) x).rtake (k - 1), ⋯⟩, (r.windowOutput (↑w) x).head ⋯) }
Instances For
Single-symbol left-OSL ⊆ left-subsequential.
Single-symbol left-ISL ⊆ WD — extends the lattice down through subsequential.
Single-symbol left-OSL ⊆ WD.