ACCSTACK

Typotrontutorial

How to use the page: choose constraints and a language, read the tableau, the ranking and the weights, and the proof when nothing works.

Open the app

Bringing languages in from the catalog: see From the catalog to Typotron.

Typotron is a page for phonologists. You give it a set of constraints and the form you want to win for every input; it tells you whether a ranking or a weighting makes all of those forms win at once, shows you the grammar when one exists, and shows you a proof when none does. This page walks through every control once, with Latin as the running example.

1What Typotron answers

Take a set of constraints, a list of inputs, and one winning form per input. The question is joint optimality: is there a single grammar under which every one of those forms is optimal in its own tableau? Typotron answers it twice.

Hidden structure is handled for you. A stress form such as [L1 L L] can be footed as [(L1 L) L] or [(L1) L L]; the tableau holds one candidate per full structure and you name only the overt form. The solver searches over the choice of structure in every tableau, so a verdict covers every choice.

Every number in a verdict is an exact integer or fraction. A weight of 3/2 is 3/2, not 1.5; no floating point sits on the path from the tableaux to the answer, and every ranking, weighting and certificate is re-checked against the comparison rows before it is shown. That is what exact means in the name: the questions are the ones OT-Soft and OT-Help ask (a ranking by recursive constraint demotion, a weighting of minimal total, the factorial typology); what differs is the arithmetic and that every answer comes with a proof, so the page is a companion to OT-Soft and OT-Help that reads and writes their files, not a different theory. The whole computation runs inside your browser tab: nothing you type or paste leaves the page.

One word of usage. On this page a language is a real language, one of the StressTyp2 entries. What a constraint set generates on a set of inputs is called a pattern here; OT calls these languages too, and the drawer at the bottom of the page counts them as such.

2The page at a glance

The whole page at 1280 pixels: the masthead, the three panes Problem, Tableaux and Verdict side by side with the first problem loaded, and the collapsed Typology drawer at the bottom.
The page after it loads: the first problem, initial stress (StressTyp2 112) under Gordon's grid constraints on the all-light words of 2 to 4 syllables, already solved; it is small enough that its factorial typology runs in seconds (section 11). The Problem pane on the left starts open; the button in its head (or the [ key) folds it to a thin rail so the tableau gets the room, and a click on the rail opens it again.

The page is a workbench of three panes and a drawer.

The masthead: the Typotron wordmark, the one-line claim, and the buttons exact arithmetic, solver ready, share, Theme, question mark and Tutorial.
The masthead. The green solver ready pill means every button on the page is live.

The screenshots on this page are in the light theme. The page follows your system theme unless you choose one with Theme (or T), and this tutorial follows the same choice.

The masthead subtitle opens a dialog called How this verdict was computed. It says, for the verdict on screen, how the ranking was found (how many choices of hidden structure were searched and how many distinct comparison rows the ranking came from), how the weights were found (an exact simplex over rationals, and how many feasibility tests it made), whether the result was computed in your tab or pre-computed when the site was built, and gives the command line that reproduces it (section 15). The verdict cards report the same two counts in their own words: RCD runs is the number of times recursive constraint demotion was run, once per choice of hidden structure the search tried, and LP nodes is the number of feasibility tests of the weight search (LP is linear programming, the exact simplex). The how was this computed? link inside each verdict card opens the same dialog.

The first problem on screen was solved when the site was built, so it appears before the solver has finished loading; the solver confirms it once it is up. Everything you do afterwards is computed in your tab, or on the site's server when it answers.

Without WebAssembly

The solver is Python, run in your browser through WebAssembly. Some browsers have WebAssembly switched off (a managed-browser policy, Lockdown Mode, a privacy extension, or a site policy that forbids it); the page then says so once, in a notice under the masthead, and runs its JavaScript engine instead: the same exact arithmetic (integers and rationals, every ranking, weighting and certificate re-verified against every comparison row) and the same answers, checked field for field against the Python engine on every built-in problem and every test file. The pill reads JavaScript engine ready, and the = exact arithmetic dialog names the engine. The built-in problems were pre-computed when the site was built (their verdicts are re-verified in the page before they are shown; the built-in typologies answer at once and carry the exact ranking counts); pasted files, typed patterns, other word lengths, strict semantics, weights ≥ 1 and every edit are solved in the page. What this mode does not do: ranking volumes and weight shares (the Weight shares button and the count rankings checkbox say so); typologies beyond 4,000 candidates or 20 constraints, which it refuses with a sentence naming the problem's size and the command line to run instead; a typology is stopped after 60 s at the latest and reports the tableau it reached; comparing whole typologies; the layered-feet GEN options and serial problems. A browser that blocks WebAssembly usually blocks the JavaScript JIT too, so a large pasted file solves more slowly there than on this page's Python engine; the built-in problems are instant either way.

3Choose constraints and a language

The Problem pane on its Built-in stress tab, top to bottom: constraint-set chips, the quantity and semantics switches, word-length chips, the language gallery with Latin Classical selected, the pattern box and the Load problem button.
The Built-in stress tab, top to bottom: constraint set (the hint under the chips lists the constraints of the chosen set), quantity and semantics, word lengths (the note counts the inputs: 62 here), the language gallery with Latin Classical (StressTyp 178) selected, the pattern box filled with Latin's 62 forms, and Load problem with the size line 62 tableaux, 12 constraints, 15,344 candidates.

The constraint sets

Seven sets from the literature are built in; each chip shows the number of constraints, and the line under the chips lists them for the chosen set.

Quantity, semantics and word lengths

QS (quantity-sensitive) uses every string of light (L) and heavy (H) syllables of 2 to 5 syllables plus the all-light words of 6 and 7 syllables: 62 inputs. QI (quantity-insensitive) uses the 6 all-light inputs of 2 to 7 syllables. The word lengths chips restrict the inputs to the lengths you tick, and the note beside them counts the inputs that remain.

Semantics says what "the target wins" means when several candidates share an overt form. Under overt (the default here) the chosen structure must beat every candidate of another overt form; the other structures of the same form are not compared with it at all, so one of them may turn out to be the optimal candidate and carry the hand (section 4 shows this). Under strict (the convention of OT-Soft, OT-Help and SoftStress files) the chosen row must beat every other row, including the other structures of its own form.

The language

The gallery lists the 61 StressTyp2 entries of the appendix of Lee, Pater & Prickett (2026): number, name, StressTyp2 code, a QI or QS tag, and a miniature stress strip for every word length. The filter box narrows the list by name, code or tag; the arrow keys move the choice. Picking a language fills the pattern box under the gallery with its winning form for every input; the box is also where you type a pattern of your own (section 9).

Every change in this pane re-loads the problem and re-solves it, so you rarely need the Load problem button; it is there for a typed pattern you want to load now, and it tells you which line to fix if the pattern is not ready. The line under it reports the size of what was built: Latin under TS-Rev on the 62 QS inputs is 62 tableaux, 12 constraints and 15,344 candidates. The Solve button in the Verdict pane (or Enter) re-solves the loaded problem under the theory switch and the options in force.

The Examples tab holds five ready-made problems: Latin under TS-Rev, Latin under TS-OG, the OT-Help manual example, Gordon grids on the QI inputs of 2 to 4 syllables, and Yidin under MPK+WSP.

4Read the tableau

The tableau for the input L L under the solved ranking: six candidates in four overt-form groups with foot drawings, the constraint columns in ranking order, a red 1! on every loser, the hand on the row (L1) L and the outline on its sibling (L1 L).
The tableau for /[L L]/ under the solved ranking: the constraint columns Nonfin, WordFoot-R, FtBin, AllFeet-R, WSP, Trochee, Iambic … in ranking order, numbered under the names. The hand ☞ marks the optimal candidate, 1! in red marks each loser's first fatal violation, and the cells after it are greyed. The winner's group [L1 L] (the target) is tinted; the outline is on the structure the solver compared, [(L1 L)]; the hand on [(L1) L].

Reading the drawings

Every candidate is drawn beside its bracket string, and the same drawings appear in the verdict cards and the typology table. A light syllable is an L with a breve under it; a heavy syllable is a bold H with a thick bar. An acute mark over a syllable is primary stress, a grave mark secondary stress. A foot is an arc under its syllables, and the foot that carries primary stress is in the accent colour. In a layered footing of Martínez-Paricio & Kager the inner arc close to the syllables is the minimal foot and the outer arc below it the minimal foot with its adjunct. A Gordon grid is a column of × marks over each syllable: one for every syllable, a second for every stressed syllable, a third (in the accent colour) for the primary; a grid has no hidden structure, so the row is the form itself.

The footing (L1 L) H (L2) drawn as four syllables with an accent-coloured arc under the first two and a dark arc under the last.
Feet: [(L1 L) H (L2)]. The main foot is the coloured arc; the heavy syllable has the bar; the unfooted syllable has no arc.
The grid L2 L L1 L L2 drawn as columns of x marks of height 2, 1, 3, 1, 2 over five light syllables, at the tableau size and the large size.
A grid: [L2 L L1 L L2], columns of × marks 2, 1, 3, 1, 2 high, the top mark of the primary in colour; above it the same drawing at the size used in tableau rows.
The layered footing ((L1 L) L) (L2 L) drawn with a short inner arc under the first two syllables, a longer arc under the first three, and a dark arc under the last two.
A layered foot: [((L1 L) L) (L2 L)], the minimal foot (L1 L) on the inner arc and its adjunct on the outer one; the second foot is a plain binary foot.

The input strip across the top of the pane lists every input; click one to jump to its tableau, or scroll: the tableaux are stacked in input order. The menu beside the toggles (stacked / one at a time) shows all the tableaux or only the current one, and the drawings box hides the foot and grid drawings. Each tableau's header line names the input, the number of candidates, the winner (target) — the form you want to be optimal, the highlighted row — and the optimal candidate under the current ranking or weighting, the row with the hand, and says whether the winner is generated, that is, whether the two coincide. A legend above the tableaux repeats the three terms.

The same tableau with the comparative view on: under it a table with one row per required loser and a W, L or e cell per constraint, the deciding cell of each row outlined.
The comparative view (tick comparative, or press C). Its note reads Comparative tableau for (L1 L), overt semantics, 4 required losers, All won: one row per required loser, W where the constraint prefers the winner, L where it prefers the loser, e where it is indifferent; the cell that decides the row under the current ranking is outlined. Under weights the cells become signed differences with the weighted sum at the end.

The note under the comparative tableau also runs recursive constraint demotion on this one tableau and prints the strata that tableau alone imposes.

5The ranking

The OT ranking card: the headline Feasible: 6 strata, the Hasse diagram of the twelve constraints in six bands with Nonfin hovered at the top, the readout under it, the ranking as text, and the folds chosen structures and text report.
The OT card for Latin under TS-Rev, with Nonfin hovered: it sits in stratum 1, must dominate WordFoot-R, FtBin and AllFeet-R, and decides 339 comparisons. The line under the headline reads pre-computed when the site was built, 23 RCD runs; the fold chosen structures (62) holds one drawing per input.

When a ranking exists the headline reads Feasible with the number of strata. The strata are what recursive constraint demotion returns: constraints in the same stratum are not ordered by any comparison, and a total order that realises the strata is the one the tableaux use.

The Hasse diagram draws the strata top to bottom, one band per stratum. An edge from a constraint down to another records a domination this stratification uses: some comparison row has W under the upper constraint, which stands in the highest stratum with a W in that row, and L under the lower one; a domination that a chain of other edges already implies is not drawn. When two constraints of that highest stratum both have W in the row, both get an edge, though a total ranking needs only one of the two. The badge on a node counts the comparisons that constraint decides, and the legend under the diagram says so. Hover or focus a node and the readout under the diagram names its stratum, what it must dominate, and the first of the comparisons it decides, each as a winner–loser pair. A node whose badge reads 0 decides no comparison; it sits below its stratum's neighbours because it prefers a loser in some row that a constraint above it decides. The line under the text form counts the distinct comparison rows the ranking was found from (642 of 15,166 for Latin).

The text form is the ranking as phonologists write it, braces around a stratum:

Nonfin ≫ {WordFoot-R, FtBin, AllFeet-R} ≫ WSP ≫ Trochee ≫ {Iambic, Main-Syl-R} ≫ {WordFoot-L, Parse, Main-Syl-L, AllFeet-L}

The chosen structures fold lists, for every input, the full structure the search settled on for the target form, drawn; the options menu's list every feasible choice of structures asks the solver for every choice that works rather than the first. The text report fold fetches the plain-text report of the command line, and its button full report (every tableau) adds every tableau to it.

6The weights

The HG weights card: the headline Feasible: total weight 17, twelve horizontal weight bars from Nonfin 8 down to six constraints at 0, a note naming the zero-weight constraints, and the folds chosen structures and text report.
The HG card for Latin under TS-Rev: weights of total 17 (Nonfin 8, FtBin 2, Trochee 2, WSP 2, AllFeet-R 2, Main-Syl-R 1, the other six at 0), with the line Minimal-sum exact weights, verified against 15,166 comparison rows; pre-computed when the site was built, 31 LP nodes.

When a weighting exists the headline gives the minimal total: the weights shown are a solution of the smallest possible sum, with every winner at least 1 harmony above every loser. The bars are the weights, sorted, with the exact value at the end of each; a fraction such as 7/2 is printed as a fraction, with its decimal beside it. The line under the headline says how many comparison rows the weights were verified against.

The options menu has weights ≥ 1: the minimal-weight convention of OT-Help, where every constraint carries at least weight 1. Tick it and the weights are found again under that bound on their own (Solve is only needed to re-run by hand); the card then says weights ≥ 1 in its line under the headline, and for Latin the total rises to 65/2. As in the ranking card, the chosen structures and text report folds sit at the bottom.

7When nothing works

Latin under the original Tesar & Smolensky set is the built-in example of failure: pick the TS-OG chip (or the second entry of the Examples tab) and the summary box reads The target is generated by neither theory. Each card then carries a proof instead of a grammar.

The OT card for Latin under TS-OG: the headline No ranking, an orange-bordered proof card with two comparison rows and their fusion row, a paragraph of explanation, and the folds as text and chosen structures.
No ranking: two comparisons, on the inputs /[L L L]/ and /[H H L]/, whose fusion has no W. The line under the headline reads These 2 comparisons cannot all be won with the time and 7 RCD runs; the badge on the proof card reads fusion has no W — checked.
The HG card for Latin under TS-OG: the headline No weighting, an orange-bordered certificate card with a multiplier column, two comparison rows and a combined row, a paragraph of explanation, the re-verification line, and the folds as text and chosen structures.
No weighting: a Farkas certificate with multipliers 1 and 1 on the inputs /[L L L]/ and /[H H L]/, whose combined row is ≤ 0 everywhere. The line under the headline ends in 11 LP nodes; the badge reads every entry of Σ λ·d ≤ 0 — checked; re-verified by the solver in exact arithmetic, and the line under the card Certificate re-verified in exact arithmetic: yes.

For ranking: residual comparisons and their fusion

Recursive constraint demotion stalls when no constraint can be placed next: every remaining constraint prefers a loser in some remaining comparison. The card shows those residual comparisons as rows of W, L and e, and under them their fusion: L wherever any row has an L, otherwise W wherever any row has a W, otherwise e. A fusion with no W is the proof. Whatever the ranking, the highest-ranked constraint that decides one of these comparisons prefers a loser there, and that comparison is lost. The badge on the card, fusion has no W — checked, means the fusion was recomputed in the browser from the rows shown, independently of the solver. For Latin under TS-OG two comparisons suffice, on the inputs /[L L L]/ and /[H H L]/.

Because the hidden structure is searched, the proof shown is for one branch of the search (the structures listed in the chosen structures fold); every other branch is refuted by a proof of its own, and the one on screen is the one that involves the fewest tableaux.

For weighting: the Farkas certificate

A weighting exists when every comparison row d (violations of the loser minus violations of the winner) satisfies w·d ≥ 1 for some w ≥ 0. When none does, there are non-negative multipliers λ on the rows such that the combined row Σ λ·d is ≤ 0 in every constraint. Then for any w ≥ 0 the weighted sum Σ λ (w·d) is ≤ 0, while the requirement w·d ≥ 1 on each row would make the same sum ≥ Σ λ > 0. The card prints the multipliers, the rows and the combined row, with each entry that is ≤ 0 emphasised. The badge, every entry of Σ λ·d ≤ 0 — checked; re-verified by the solver in exact arithmetic, reports two checks: the combined row recomputed in the browser from the rows shown, and the solver's own second check of the certificate with exact rationals, which the re-verification line under the card, Certificate re-verified in exact arithmetic: yes, repeats.

8Try it live

Three things on the page answer at once, without waiting for the solver, because the tableaux are evaluated in the browser itself: dragging a header, sliding a weight, and clicking a candidate. The first two change the grammar and leave the target alone; the third changes the target and asks for a new grammar.

The page after Nonfin was dragged to the far right: the L L tableau is still generated, the L H tableau below it is not, the OT card carries an orange Live ranking note with 46 of 62 and six input links, and the visible part of the Hasse diagram shows the first five strata.
Nonfin dragged from the top of the ranking to the bottom. The hand moves at once in every tableau (/[L L]/ is still generated, /[L H]/ is not), and the card's note reads Live ranking (dragged): the target is not generated in 46 of 62 tableaux with links to the first six of them and the button back to the solved ranking; Nonfin has moved to a sixth stratum below the visible part of the diagram.

Drag a header to the position you want (with the keyboard: focus a header and press ← or →). The columns re-order, the hands and the fatal marks move, and the Verdict pane redraws the Hasse diagram in the new order with a Live ranking note that says whether the target is still generated in every tableau, naming the tableaux where it is not; each name is a link to that tableau. Back to the solved ranking restores the witness.

The tableau in the HG weights view with a slider under each constraint name, an H column of six harmonies from minus 5 to minus 14 with bars, and the hand on the row (L1) L.
The HG view with the Nonfin slider lowered from 8 to 7 (four quarter steps with ↓); the sliders read Nonfin 7, WordFoot-R 0, FtBin 2, AllFeet-R 2 … and the H column −9, −9, −13, −8, −5, −14, the hand on [(L1) L] at −5. The harmony column and the weight bars in the Verdict pane follow at once, and the live note reports the target lost in 1 of 62 tableaux, /[L H]/.

Slide a weight in the HG view (the sliders run from 0 to 20 in quarters; ↑ and ↓ on a focused header step them). The harmonies, the hands and the bars update, and the HG card carries a Live weights note of the same kind, with back to the solved weights.

The page after the candidate (L L1) was clicked in the tableau for L L: the group L L1 is tinted as the winner (target), the header says the winner is not generated under this ranking, and the Verdict pane reads The target is generated by neither theory.
A clicked candidate becomes the intended winner for its input. Here [(L L1)] was clicked in /[L L]/: the header now reads winner (target) [L L1] (2 structures, highlighted) · optimal candidate [(L1) L] ☞ · not generated under this ranking, the problem re-loads as a typed pattern (Latin with final stress on disyllables) and re-solves, and the tiles read no ranking and no weighting.

Click a candidate and it becomes the intended winner for that input: the problem is re-loaded as a typed pattern (the language card is deselected and the pattern box shows the new form), both verdicts are re-solved, and the diagram moves to the new solution or to a certificate. Clicking the header of an overt-form group instead makes that form the winner with every structure allowed. For a pasted file the click becomes a winners override (section 10).

9Your own pattern

The box Or type a pattern under the language gallery takes one winning form per input, in input order, one per line. Two spellings are accepted:

Each line is checked as you type against the inputs you selected: the syllable count and weights must match the input, and exactly one syllable must carry primary stress. A valid pattern loads and solves on its own; an invalid one holds every load until it is fixed, and the lines to fix are listed under the box.

The pattern box with the lines 10, 01 and 0100 and an orange status naming the line to fix.
A typo: the second line has two digits for the three-syllable input, and the status reads 1 line to fix: 01 — needs 3 digits for /[L L L]/.
The pattern box with the lines 10, 010 and 0100 and a green ready status.
Fixed: the status reads 3 forms for 3 inputs — ready, and the page has already solved it.

A worked example. Choose Gordon, QI and the word lengths 2, 3 and 4, so the inputs are /[L L]/, /[L L L]/ and /[L L L L]/. Type

10
010
0100

for initial stress on the disyllable and peninitial stress on the longer words. The status turns to 3 forms for 3 inputs — ready, the page loads the pattern and solves it, and the Verdict pane reports that the pattern is generated by both OT and HG under Gordon's grid constraints. Type 01 for the second line instead and the status says 1 line to fix: 01 — needs 3 digits for /[L L L]/.

10Your own file

The Import file tab: a dashed drop zone, the Tableau file box holding the OT-Help manual example with its format badge and counts, the Name field, the Semantics menu, the Winners override box, and the buttons Load file and OT-Help manual example.
The Import file tab with the OT-Help manual example loaded: the badge reads OT-Soft / OT-Help, the counts 2 tableaux, 3 constraints, 4 candidates, the Name field othelp-manual, and Semantics the file's convention.

The Import file tab takes a tableau file: drop it on the dashed zone (or anywhere on the pane), press the zone to choose one, or paste its text into the box. Four formats are read.

The badge next to Tableau file names the format the page recognised, and the counts (tableaux, constraints, candidates) appear once the solver has read the text. Name labels the problem in reports and downloads. Semantics is the file's own convention by default, which is strict for OT-Soft and OT-Help files and overt for JSON and MaxEnt csv; choose overt or strict to override it. Winners override takes one form per tableau, in file order, and replaces the winner flags in the file; a candidate clicked in the tableau lands here. Load file loads and solves; the button OT-Help manual example fills the box with the two-tableau example of the OT-Help manual (kata, pika; Trochee, Iamb, *StressHi), whose ranking is Trochee ≫ {Iamb, *StressHi} and whose minimal weights are Trochee = 1 (total 1).

A file longer than the share link can carry stays out of the link; everything else about it (name, semantics, override) travels.

11Predicted patterns

The Typology drawer at the bottom of the page (open it with a click or Y) enumerates every pattern the loaded constraint set generates on the loaded inputs: the factorial typology. Run OT lists the patterns some ranking generates, Run HG those some weighting generates, and Run both enumerates under HG and tests each pattern for a ranking, so the HG-only count is the number of patterns a weighting generates and no ranking does.

The page with the Typology drawer open during a run: the drawer head has a Cancel button, a progress bar and the progress line, which reads filter: tableau 28 of 62, 624 of 3,824 forms checked, 18 s, at least 1 min left for the filter.
A run in progress: Latin under TS-Rev on the 62 QS inputs, 18 seconds in. The run begins with the filter (one check per candidate form of every tableau), and the progress line reads filter: tableau 28 of 62 · 624 of 3,824 forms checked · 18 s · at least 1 min left for the filter; then the typology is built tableau by tableau and the line counts the partial patterns still alive after each one, with a floor for the next tableau. This run is the large one: cancel it with the button if you only wanted to see the words.

The progress line reports the tableau being processed, the partial patterns alive, the number of exact checks made and the time, and then the remaining time as far as it is known: during the filter (one check per candidate form of every tableau, before any pattern is extended; for Latin under TS-Rev this stage alone takes minutes in the browser) N of M forms checked and at least N left for the filter; after each tableau at least N left, a floor computed from the next tableau's exact number of checks (partial patterns alive × forms alive in that tableau) at the speed just measured, revised after every tableau; inside a long tableau the bar moves and the line reads about N left for this tableau; during the OT test about N left. The bar cannot promise a total, because each tableau costs roughly ten times the one before, so a floor that keeps growing means the run is blowing up: cancel it and shorten the word lengths. Cancel stops the run. The cost grows quickly with the word lengths, about thirteen times per added length. Measured for TS-OG on the QI inputs: word lengths 2 to 4 (the run shown, 46 patterns) took a few seconds; 2 to 5 (168 patterns) took 55 seconds in the browser; 2 to 6 (482 patterns) took six minutes on the command line, and the browser runs the search about twice as slow; and all six lengths, 2 to 7, did not finish within 25 minutes in either. So run the long lengths from the command line (section 15), use Cancel when a run in the browser is not worth waiting for, and leave the QS sets on all 62 inputs to the command line.

The Typology drawer after the run: the counts in the head, summary chips, a filter box, a verdict menu, the CSV, JSON and text buttons, and the table with one row per pattern showing stress strips, OT and HG ticks and the witness.
The result of TS-OG on the QI inputs of 2 to 4 syllables (Latin's inputs, section 15's problem): the head reads 46 languages · OT 28 · HG 46 · HG-only 18 and the status line done: 46 languages · 210 HG checks, 46 OT checks · 3.7 s. So 46 patterns, 28 of them generated by a ranking, all 46 by a weighting, 18 by a weighting only; 17 coincide with a StressTyp2 entry on these inputs.

The table has one row per pattern: its winner for every input as a stress strip (tick forms as text for the bracket forms), the StressTyp2 codes and names it coincides with on these inputs, an OT tick and an HG tick, and the ranking conditions: the pairwise rankings every ranking that generates the pattern must obey, as Iamb ≫ Trochee; *StressHi (Iamb above Trochee; *StressHi anywhere), with the RCD ranking (its strata, top first) in the cell's tooltip and in the downloads; a row only HG generates shows its minimal weights instead (What Typotron is, section 7, says how the conditions are computed). Every column sorts; the filter box matches forms, strips such as 010, codes, names, conditions and rankings, and the menu beside it keeps only the OT, HG, HG-only or not-OT rows. Click a row (or its Load button) to load that pattern into the workbench as the winners: the tableaux and both verdicts follow. The CSV, JSON and text buttons download the table (with the all lengths column once Certify has run; the catalog column stays on the page, and typotron typology FILE --catalog writes it).

A new problem on other inputs or constraints clears the table; new winners on the same tableaux keep it.

How many rankings, how much weight space

Two more columns say how much of each theory's grammar space a pattern occupies. The rankings column is the pattern's ranking volume (the r-volume of Riggle 2010; Bane & Riggle 2008): the number of the n! total rankings of the n constraints under which its winners are optimal in every tableau, with its share of n! beneath. It is counted exactly with the run when count rankings is ticked (the default; free up to 20 constraints). The weight share column is the analogue for weighted grammars: the fraction of the simplex of non-negative weights summing to 1 under which the winners are optimal; press Weight shares to fill it. A number without a mark is exact (a dynamic programme over ranked prefixes; a polytope volume in rational arithmetic); ≈ marks a sampled estimate, with its interval, the number of samples and the seed in the tooltip. What Typotron is, section 7, says what the two measures are, how they are computed and where they stop.

The OT-Help manual example (section 15's manual.txt: Iamb, Trochee, *Stress/Hi; kata and pika) shows the numbers by hand. Of the 6 rankings, katá piká is generated by 3 (Iamb ≫ Trochee ≫ *Stress/Hi, Iamb ≫ *Stress/Hi ≫ Trochee, *Stress/Hi ≫ Iamb ≫ Trochee), káta píka by 2 (Trochee on top) and káta piká by 1 (*Stress/Hi ≫ Trochee ≫ Iamb); katá píka by none. In weight space káta wins when Trochee outweighs Iamb and píka when Trochee outweighs Iamb and *Stress/Hi together, so katá piká holds half of the simplex, káta píka a quarter (Trochee above ½), káta piká the remaining quarter. The loaded pattern's own numbers appear under the verdicts as rankings and weight share, and how was this computed? names the states, rays and faces behind them.

Does the pattern hold on longer words?

A row of the table is a pattern on the loaded inputs: six words of 2 to 7 syllables in a full quantity-insensitive run, three of 2 to 4 in the run of the figure below. When the run stops short of 7 syllables the witness's own optima fill the missing lengths before the rule is read off, and the cell's tooltip says so (the 2-4 forms, continued to 7 by the witness, declare). Press Certify to ask, for every row, whether the witness the row shows (its ranking, or its minimal weights; the select beside the button picks the theory, the second select the length the exact check runs to) keeps that pattern on words of every length. The answer goes in the all lengths column in one of six forms. all lengths with from 8 · exact beneath is a certificate: the pattern's repeating family is the unique optimum of the witness on every word of 8 or more syllables, and exact dynamic programming checked every length from 2 to 40. all lengths ≠ is a certificate too, but for a pattern other than the one the 2-7 forms declare, from the length shown. to 40 with verified beneath means no tie and no change up to 40 syllables and no certificate; nothing is claimed beyond 40. ties at n names the first length at which two or more forms are optimal under the witness, fails at n the first length at which the witness gives a form other than the continuation of the 2-7 forms (the cell shows it), and no rule says the 2-7 forms declare no periodic rule (period 1 or 2 from length 4), so only the witness's own family is reported. Every cell's tooltip gives the family, the size of the certificate or the reason there is none. The chip under the head adds up the verdicts, and the column sorts with the certified rows first.

The Typology drawer after Certify on the HG witnesses of Gordon QI 2-4: the head line reads all lengths: 47 certified, 66 tie, 24 no rule, 64 s; the chips all lengths and catalog; the table sorted by the all lengths column, whose cells read all lengths with from 8 exact beneath, and the catalog column with three glottocode links and a +N count per row.
Gordon on the QI inputs of 2 to 4 syllables after Certify with HG witness and to 40: the head line reads all lengths: 47 certified · 66 tie · 24 no rule · 64 s, the chip all lengths 47 certified · 0 diverge · 0 verified · 66 tie · 0 fail · 24 no rule. So 47 of the 137 minimal weightings keep their pattern on every word length, 66 tie at some length between 8 and 40, and 24 rows have 2-7 forms that declare no periodic rule. The table is sorted by the new column; the catalog column beside it is the next section.

Two languages by hand. Language 112 (initial stress) under Gordon: the minimal weights are Align1LPrWd = 1 and nothing else, and that constraint counts, for every stressed syllable, the syllables to its left. So on three syllables [L1 L L] costs 0 and every other form costs at least 1 ([L L1 L] 1, [L1 L2 L] 1, [L L L1] 2), and the same holds at every length, since any other form has a stress away from the left edge. The certificate says this for all lengths at once: the family L1 L (L)* L costs 0 at every length and every other form costs at least 1 (64 terms over 10 product states, the secondary stresses confined to the first syllable by the removal lemma), so the cell reads all lengths under both witnesses (under the ranking the top constraint, Align1LPrWd, decides alone). Language 113 (stress on the second syllable): its ranking is certified from 8 as well, but its minimal weights (*LapseLeft 5, Align1RPrWd 3/2, *ExtendedLapse 1, Align1LPrWd 1/2) tie at 8 syllables. Four of the 1,024 forms of eight syllables cost 27/2 there: the pattern's continuation [L L1 L L L L L L] (Align1LPrWd 1 × 1/2, Align1RPrWd 6 × 3/2, *ExtendedLapse 4 × 1) and the forms with the stress on the sixth, seventh or last syllable, each paying *LapseLeft once (5) and a different mix of the two alignment constraints. The cell reads ties at 8 with 4 forms beneath and the tooltip lists them. The tie is a fact about that weighting, a corner of the region that generates the pattern; the row is still a language of the typology on its inputs.

The loaded language gets its own line under the verdicts: all lengths → computes it, then each witness reads its sentence with a certificate → link that downloads the certificate (families, potentials, windows) as JSON, and how was this computed? gains a part All lengths. From the command line, typotron stress --set Gordon --quantity QI --lengths 2-7 --language 112 --certify prints the same two lines, and typotron certify-check FILE re-verifies a downloaded certificate without searching.

The summary line under the verdicts of language 112: OT witness: Keeps its pattern on all longer words: certified from 8 (exact; DP to 40), certificate link; HG witness: the same sentence and link.
The line under the verdicts for language 112 under Gordon: OT witness: Keeps its pattern on all longer words: certified from 8 (exact; DP to 40). certificate →, and the same for the HG witness.

What the verdicts mean, and where they stop:

  1. The certificate is about one witness, the ranking or the weighting in the row, on all-light words. Other rankings or weightings that generate the same 2-7 forms can behave differently on longer words: under Gordon the weightings generating initial stress (112) split at 8 syllables, 99.86 % of the region keeping initial stress and 0.14 % going to final, penultimate or antepenultimate stress (exact shares); whether some witness of a row extends is the closure question, open under gradient alignment. Load another witness to certify it.
  2. A quantity-sensitive row is certified on all-light words only; heavy syllables beyond five are not covered. On a quantity-sensitive problem the line under the verdicts is labelled OT witness (all-light words), the all-lengths column's header tooltip says so, and how was this computed? repeats it.
  3. verified to 40 is not a certificate: it is an exact computation to 40 syllables and no claim beyond. It happens when the pattern's repeating block carries a gradient alignment locus (alternating secondary stresses under Gordon or the Tesar and Smolensky sets), when no periodic family appears by 40, or when the bound does not close; the tooltip says which.
  4. Minimal-sum weightings are corners of the feasible region and often tie at 8 to 11 syllables: 23 of the 41 Gordon weightings of the StressTyp2 languages, 9 of 40 under TS-Rev, 3 of 47 under MPK; the rankings are stabler (2 of 41 change their pattern at 8, 0 of 40, 1 of 46 tie). These are facts about the witness; the row is still a language of the typology on its inputs.
  5. The declared continuation is read from the six forms of lengths 2 to 7 (period 1 or 2 from length 4); 4 of the 61 StressTyp2 languages declare none (144 Cayuvava, 158 Georgian, 169 Icua Tupi, 171 Ioway Oto) and get the witness's own family only. A witness can be certified to a pattern other than the declared one (117 and 118 under TS-Rev weights: the secondary stresses stop alternating).
  6. Ties are failures of the pattern, not of the language: a tie between two forms means the witness does not decide; a tie between two structures of one form is not a tie (overt semantics).
  7. A certificate takes about 0.1 s per witness on the command line for grids and feet (Gordon QI 2-4: median 0.14 s, at most 0.56 s per weighting) and one to three seconds on layered feet (MPK: median 1.0 s per weighting, 2.7 s per ranking, at most 4.4 s); the browser runs about twice as slow (all 137 weightings of Gordon QI 2-4 in 53 s, the 53 rankings in 49 s, both witnesses of a layered-feet language in 6.8 s). Certify on a whole table runs behind the progress bar with Cancel.

Which catalog languages have this pattern?

The catalog column lists, for every row, the languages of the Word Stress Catalog whose stress strings agree with the row. The page carries a named snapshot of the catalog's release (2026-09-21, V9.15), named in the column's popover: 1,964 of its entries have stress strings (1,545 without syllable weights, 419 with them; 250 of them code a secondary stress). A record matches a row when it has a string for at least two of the row's inputs and agrees on every input it covers; a record with fewer strings than the row has inputs matches partially, and the tooltip counts those apart. The select in the column header chooses how strings are compared: primary + coded secondaries (the default) compares the position of primary stress, and the secondary stresses only where the catalog codes them, since most entries state none; whole strings requires equality. The cell shows up to three glottocodes, each a link to the language's page in the catalog's bibliography, then +N for the rest; its tooltip names the first five with their kind (fixed, weight, weight-hedged) and whether the entry is exceptionless. Click the cell for the whole list, with a glottolog link beside every code and covers k of m for the inputs each record has. The chip reads catalog: 83 rows · 1,804 languages for Gordon on the QI inputs of 2 to 4 syllables: 83 of the 137 rows have a catalog language matching on every input, and 1,804 distinct catalog languages are matched in full by some row; the initial-stress row alone matches 351 on all three inputs and 12 more on two.

The catalog popover of the initial-stress row: the head Word Stress Catalog, release 2026-09-21, the line language 99: 351 catalog languages on all 3 inputs, 12 on fewer, and the list: abau1245 glottolog Abau fixed, covers 3 of 3; aerr1238 Aer; afri1274 Afrikaans fixed, exceptionless; and so on.
The popover of the initial-stress row: 351 catalog languages on all 3 inputs, 12 on fewer (primary + coded secondaries), then every match as a glottocode linked to its bibliography page, a glottolog link, the name, the kind, exceptionless where the entry says so, and the inputs covered.

The column compares strings, not analyses: a match is not a claim that the constraint set analyses that language, only that the stress strings the catalog derives from the entry's own rule agree with the row's forms on the inputs both have. Secondary stress is compared only where the catalog codes it, so under the default two languages that differ only in secondary stress the catalog does not state are matched by the same row. The strings come from each entry's own rule by the catalog's published script, and the link opens the entry on the public bibliography page (the catalog page itself has no per-entry address). The file is a snapshot of the release named in the popover's head; rebuilding the page from a newer release replaces it.

12Compare sets on StressTyp2

The fold Compare constraint sets at the bottom of the drawer draws the Venn diagram of the languages two to four constraint sets can represent. On the StressTyp2 universe every language of the chosen quantity is solved under every set, one verdict per cell; on the generated-patterns universe the full typologies are compared instead.

The compare panel: set chips with three ticked, the universe, quantity, length, semantics and membership menus, the Compare and Fig. 4 preset buttons, a three-circle Venn diagram with StressTyp2 codes written in its regions, and a table of the regions with member chips.
TS-OG, TS-Rev-Nonfin and Gordon on the 28 quantity-insensitive StressTyp2 languages, word lengths 2 to 5, under HG (status done: 28 languages, 6.0 s; summary chips TS-OG 21, TS-Rev-Nonfin 25, Gordon 28): 21 languages in all three sets, 4 in TS-Rev-Nonfin and Gordon only (129, 208, 213, 215), 3 in Gordon only (134, 169, 171), none outside all three.

Pick the sets with the chips, then the universe, the quantity, the word lengths, the semantics and the membership (a weighting exists, a ranking exists, or both tested). Compare runs it with a progress line and a Cancel button. The Venn shows the region counts, or, on the StressTyp2 universe, the StressTyp2 codes written into the regions as Figure 4 of Lee, Pater & Prickett (2026) does; a click on a region or on a set name lights its rows in the table beside it, where every member is a chip that loads that language into the workbench under the set chosen in load a member under.

The Fig. 4 preset sets up the paper's own computation: TS-OG, TS-REV (which is TS-Rev-Nonfin here) and Gordon on all 61 languages under HG, the QI languages on the QI inputs and the QS languages on the QS inputs, merged into one diagram. Its note quotes the paper's regions (31 in all three, 7 in TS-REV only, 5 in TS-REV and Gordon, 5 in Gordon only, 13 in none); the QS half takes minutes in the browser.

13Export and share

The Tableaux pane with the export menu open under the export button, one row per format with copy and download buttons.
The export menu in the head of the Tableaux pane: LaTeX tableau, LaTeX comparative, OT-Soft file, JSON and PNG of the tableau, each with copy and, where a file makes sense, download.

LaTeX and OT-Soft use the tableau as it stands on the page: the ranking you dragged, the weights you set, the winners you chose. The Typology drawer has its own CSV, JSON and text downloads (section 11).

The share button in the masthead (or S) copies a link that reproduces the view: the constraint set, quantity, word lengths, language or typed pattern, semantics, the theory switch, the weights ≥ 1 option, the current tableau and which side panes are folded or open; a pasted file travels in the link too unless it is long. The other option (list every feasible choice of structures), the comparative view and the drawer do not travel. Opening the link in another browser loads and solves the same problem.

The report is the plain-text account of the command line: open the text report fold in a verdict card for the brief report, press full report (every tableau) for the one with every tableau, and copy to take it.

14Keyboard shortcuts

Press ? anywhere on the page for this table. Shortcuts do not fire while you type in a text field; every control is reachable with Tab, and tabs, chips and the gallery take the arrow keys.

KeysAction
?Show or hide this help
EscClose the help, dismiss a notice
EnterRe-solve the loaded problem (when no text field, button or tab has the focus: there it activates that control)
←→Move the selected constraint left or right (re-rank)
↑↓Raise or lower the selected constraint's weight (HG)
TCycle the theme: system, light, dark
YOpen or close the Typology drawer
CToggle the comparative tableau
[Show or hide the Problem pane
]Show or hide the Verdict pane
SCopy a link to this view (problem, mode, tableau)
The Keyboard dialog open over the page, listing the eleven shortcuts of the table above.
The dialog behind ?.

15Reproduce from the command line

The dialog How this verdict was computed over the page for Latin under TS-OG, with the sections What exact means, In the browser, Ranking (OT), Weighting (HG) and Reproduce, the last holding the command line and a copy button.
The = exact arithmetic dialog for Latin under TS-OG. Its first section, What exact means, says what the word promises and links OT-Soft and OT-Help. Ranking (OT): Every choice of hidden structure was searched (7 RCD runs; complete: no); the 2 residual rows in the Verdict have a fusion with no W, which was checked. Weighting (HG): Farkas multipliers over the comparisons give a combined row ≤ 0 on every constraint; re-verified in exact arithmetic: yes. Each section says Computed in this tab with the time and the solver's version, and Reproduce holds the command line that reproduces both verdicts.

The page runs the same Python package as the command line, so every verdict on screen can be reproduced off it. The Reproduce section of the dialog gives the exact command for the loaded problem, options included; copy takes it. For Latin under TS-OG on the 62 QS inputs it is

typotron stress --set TS-OG --quantity QS --lengths 2-7 --language 178 --semantics overt --both

and for a pasted file it is typotron solve NAME with the theory flag, where NAME is what you typed in the Name field of the Import file tab (in quotes) and the file of that name is the text you pasted; a --semantics flag appears only when you overrode the file's own convention. For the OT-Help manual example the dialog prints typotron solve "othelp-manual" --both.

The package installs from the repository with Python 3.10 or later and no other dependency:

git clone https://github.com/accstack/typotron typotron && cd typotron
pip install -e .

Its commands are typotron solve FILE (joint optimality of a file's marked winners, or --winners), typotron typology FILE (every pattern the file's constraints generate; --csv writes the table), typotron stress --set S … (a built-in problem: --language, --pattern, or --typology) and typotron formats (the file formats read and written). --ot alone runs the ranking solver, --hg alone the weighting solver, neither or --both runs both; -q prints the verdicts only, --json and --markdown change the format. Two of the guide's examples:

typotron stress --set TS-Rev --language 178 --hg -q
typotron solve kata.txt --winners "katá,piká" --ot

From Python, typotron.io.otsoft.read_json(path) returns a dataset and a target, and typotron.core.ot.solve_ot(ds, target) and typotron.core.hg.solve_hg(ds, target) return the same results as the command line; typotron.core.typology.compare compares the typologies of two sets on the same inputs. The user guide in the repository (docs/USER_GUIDE.md) describes every option and the file formats in full.