// Simple numbering for non-book documents #let equation-numbering = "(1)" #let callout-numbering = "1" #let subfloat-numbering(n-super, subfloat-idx) = { numbering("1a", n-super, subfloat-idx) } // Theorem configuration for theorion // Simple numbering for non-book documents (no heading inheritance) #let theorem-inherited-levels = 0 // Theorem numbering format (can be overridden by extensions for appendix support) // This function returns the numbering pattern to use #let theorem-numbering(loc) = "1.1" // Default theorem render function #let theorem-render(prefix: none, title: "", full-title: auto, body) = { if full-title != "" and full-title != auto and full-title != none { strong[#full-title.] h(0.5em) } body } // Some definitions presupposed by pandoc's typst output. #let content-to-string(content) = { if content.has("text") { content.text } else if content.has("children") { content.children.map(content-to-string).join("") } else if content.has("body") { content-to-string(content.body) } else if content == [ ] { " " } } #let horizontalrule = line(start: (25%,0%), end: (75%,0%)) #let endnote(num, contents) = [ #stack(dir: ltr, spacing: 3pt, super[#num], contents) ] #show terms.item: it => block(breakable: false)[ #text(weight: "bold")[#it.term] #block(inset: (left: 1.5em, top: -0.4em))[#it.description] ] // Some quarto-specific definitions. #show raw.where(block: true): set block( fill: luma(230), width: 100%, inset: 8pt, radius: 2pt ) #let block_with_new_content(old_block, new_content) = { let fields = old_block.fields() let _ = fields.remove("body") if fields.at("below", default: none) != none { // TODO: this is a hack because below is a "synthesized element" // according to the experts in the typst discord... fields.below = fields.below.abs } block.with(..fields)(new_content) } #let empty(v) = { if type(v) == str { // two dollar signs here because we're technically inside // a Pandoc template :grimace: v.matches(regex("^\\s*$")).at(0, default: none) != none } else if type(v) == content { if v.at("text", default: none) != none { return empty(v.text) } for child in v.at("children", default: ()) { if not empty(child) { return false } } return true } } // Subfloats // This is a technique that we adapted from https://github.com/tingerrr/subpar/ #let quartosubfloatcounter = counter("quartosubfloatcounter") #let quarto_super( kind: str, caption: none, label: none, supplement: str, position: none, subcapnumbering: "(a)", body, ) = { context { let figcounter = counter(figure.where(kind: kind)) let n-super = figcounter.get().first() + 1 set figure.caption(position: position) [#figure( kind: kind, supplement: supplement, caption: caption, { show figure.where(kind: kind): set figure(numbering: _ => { let subfloat-idx = quartosubfloatcounter.get().first() + 1 subfloat-numbering(n-super, subfloat-idx) }) show figure.where(kind: kind): set figure.caption(position: position) show figure: it => { let num = numbering(subcapnumbering, n-super, quartosubfloatcounter.get().first() + 1) show figure.caption: it => block({ num.slice(2) // I don't understand why the numbering contains output that it really shouldn't, but this fixes it shrug? [ ] it.body }) quartosubfloatcounter.step() it counter(figure.where(kind: it.kind)).update(n => n - 1) } quartosubfloatcounter.update(0) body } )#label] } } // callout rendering // this is a figure show rule because callouts are crossreferenceable #show figure: it => { if type(it.kind) != str { return it } let kind_match = it.kind.matches(regex("^quarto-callout-(.*)")).at(0, default: none) if kind_match == none { return it } let kind = kind_match.captures.at(0, default: "other") kind = upper(kind.first()) + kind.slice(1) // now we pull apart the callout and reassemble it with the crossref name and counter // when we cleanup pandoc's emitted code to avoid spaces this will have to change let old_callout = it.body.children.at(1).body.children.at(1) let old_title_block = old_callout.body.children.at(0) let children = old_title_block.body.body.children let old_title = if children.len() == 1 { children.at(0) // no icon: title at index 0 } else { children.at(1) // with icon: title at index 1 } // TODO use custom separator if available // Use the figure's counter display which handles chapter-based numbering // (when numbering is a function that includes the heading counter) let callout_num = it.counter.display(it.numbering) let new_title = if empty(old_title) { [#kind #callout_num] } else { [#kind #callout_num: #old_title] } let new_title_block = block_with_new_content( old_title_block, block_with_new_content( old_title_block.body, if children.len() == 1 { new_title // no icon: just the title } else { children.at(0) + new_title // with icon: preserve icon block + new title })) align(left, block_with_new_content(old_callout, block(below: 0pt, new_title_block) + old_callout.body.children.at(1))) } // 2023-10-09: #fa-icon("fa-info") is not working, so we'll eval "#fa-info()" instead #let callout(body: [], title: "Callout", background_color: rgb("#dddddd"), icon: none, icon_color: black, body_background_color: white) = { block( breakable: false, fill: background_color, stroke: (paint: icon_color, thickness: 0.5pt, cap: "round"), width: 100%, radius: 2pt, block( inset: 1pt, width: 100%, below: 0pt, block( fill: background_color, width: 100%, inset: 8pt)[#if icon != none [#text(icon_color, weight: 900)[#icon] ]#title]) + if(body != []){ block( inset: 1pt, width: 100%, block(fill: body_background_color, width: 100%, inset: 8pt, body)) } ) } // arxivai — Quarto Typst template partial. // Replaces Quarto's default `article()` with the arxivai preprint layout. // Both packages are importable from raw ```{=typst}``` blocks in the body: // #arxivai.operation-box(...) #arxivai.app-figure(...) #lettreai.badge(...) #import "lettreai.typ" as lettreai #import "arxivai.typ" as arxivai // --------------------------------------------------------------------------- // Re-theme Quarto's automatic callouts (same contract as lettreai: block // nesting kept structurally identical to Quarto's default so the crossref // figure show rule in definitions.typ keeps working). // --------------------------------------------------------------------------- #let callout( body: [], title: "Callout", background_color: rgb("#dddddd"), icon: none, icon_color: black, body_background_color: white, ) = { let accent = if icon_color == black { lettreai.colors.oxford-blue } else { icon_color } block( breakable: false, fill: lettreai.tint(accent, 0.94), stroke: (left: 3pt + accent, rest: 0.5pt + lettreai.tint(accent, 0.5)), width: 100%, radius: 3pt, block( inset: 1pt, width: 100%, below: 0pt, block( fill: lettreai.tint(accent, 0.84), width: 100%, inset: 8pt, )[#if icon != none [#text(accent, weight: 900)[#icon] ]#text(fill: lettreai.shade(accent, 0.25), weight: 700)[#title]]) + if (body != []) { block( inset: 1pt, width: 100%, block(fill: body_background_color, width: 100%, inset: 8pt, body)) } ) } // --------------------------------------------------------------------------- // arXiv preprint article — same signature contract as Quarto's default, // extended with keywords and running-title. // --------------------------------------------------------------------------- #let article( title: none, subtitle: none, authors: none, keywords: (), running-title: none, book: false, date: none, abstract-title: none, abstract: none, thanks: none, cols: 1, lang: "en", region: "US", font: none, fontsize: 10.5pt, title-size: 1.7em, subtitle-size: 1.15em, heading-family: none, heading-weight: "bold", heading-style: "normal", heading-color: black, heading-line-height: 0.65em, mathfont: none, codefont: none, linestretch: 1, sectionnumbering: none, linkcolor: none, citecolor: none, filecolor: none, toc: false, toc_title: none, toc_depth: none, toc_indent: 1.5em, doc, ) = { // PDF metadata. set document(title: title) set document( author: authors.map(a => lettreai.to-string(a.name)).join(", ", last: " & "), ) if authors != none and authors != () set document( keywords: keywords.map(k => lettreai.to-string(k)), ) if keywords != none and keywords != () set par(justify: true, leading: linestretch * 0.65em) set text(lang: lang, region: region, size: fontsize) show math.equation: set text(font: mathfont) if mathfont != none set heading(numbering: sectionnumbering) // Running header + footer; book mode gets chapter-aware heads and the // O'Reilly outer-margin geometry. let rt = if running-title != none { running-title } else if title != none { title } else { [] } set page( header: if book { arxivai.book-header() } else { arxivai.arxiv-header(rt) }, footer: if book { arxivai.book-footer() } else { arxivai.arxiv-footer() }, ) set page(margin: arxivai.book-margin) if book // Resolve fonts: explicit Quarto fonts win, else theme defaults. let resolved-font = if font != none { font } else { lettreai.body-font } let resolved-code = if codefont != none { codefont } else { lettreai.mono-font } let resolved-heading-color = if heading-color != black { heading-color } else { lettreai.colors.oxford-blue } let resolved-link = if linkcolor != none { rgb(lettreai.to-string(linkcolor)) } else { lettreai.colors.oxford-blue } // Paint everything with the shared theme, then the figure rules. show: lettreai.theme-rules.with( fonts: resolved-font, code-font: resolved-code, heading-color: resolved-heading-color, link-color: resolved-link, ) show: arxivai.arxiv-figure-rules // Book chapter rule is the innermost show, so it transforms level-1 // headings FIRST (inner rules apply first), replacing them with chapter // openers before the theme's h1 rule could wrap them in a container. // Synthetic non-outlined headings (e.g. the outline's own title) are // excluded inside book-heading-rules. show: doc2 => if book { arxivai.book-heading-rules(doc2) } else { doc2 } show ref: set text(fill: rgb(lettreai.to-string(citecolor))) if citecolor != none // Preprint front matter. arxivai.arxiv-title-block( title: title, subtitle: subtitle, authors: authors, date: date, ) if abstract != none { arxivai.arxiv-abstract( abstract, abstract-title: if abstract-title == none { [Abstract] } else { abstract-title }, ) } arxivai.arxiv-keywords(keywords) // Book mode: the front matter is a title page of its own. if book { pagebreak(weak: true) } // Optional table of contents (its own page in book mode). if toc { block(above: 0.5em, below: 2em, lettreai.lettreai-outline( title: if toc_title == none { auto } else { toc_title }, depth: toc_depth, indent: toc_indent, )) if book { pagebreak(weak: true) } } if cols > 1 { columns(cols, doc) } else { doc } } #let brand-color = (:) #let brand-color-background = (:) #let brand-logo = (:) #set page( paper: "a4", margin: (x: 2.4cm,y: 2.6cm,), numbering: "1", columns: 1, ) #show: doc => article( title: [Wittgensteinian Grammar and OED Dictionaries for AI], subtitle: [A foundation of semantic understanding of scientific texts], authors: ( ( name: [Gerd Graßhoff], affiliation: [Humboldt-Universität zu Berlin, Deutsches Museum], email: [gerd.grasshoff\@hu-berlin.de], orcid: [0000-0002-4450-357X] ), ), keywords: ([Wittgenstein],[rule-following],[Oxford English Dictionary],[LWgrammar],[historical scientific Latin],[semantic conformity],[Kepler],[Euler],), running-title: [Wittgensteinian Grammar], abstract: [Meaning in scientific prose is a documented inventory of rules of use, scoped by time, person, and discipline, rather than similarity of tokens. Semantic understanding of scientific texts is conformity to such rules: what an expression means is shown by the grammar of its employment; whether a formulation hits that meaning is decided by whether it follows a rule or contradicts it --- and a violation can be stated only by naming the specific rule whose authority is breached. This paper develops that claim from Wittgenstein's later philosophy (rule-following, the standard metre, perspicuous representation) and from the entry form of the Oxford English Dictionary. It then shows how, after OCR and linguistic analysis, those rules can be compiled as LWgrammar entries from a declared corpus and consulted as a reference library. The argument is carried by cases: length without a measurement standard; Kepler's #emph[anima] beside #emph[virtus motrix]\; the phrase #emph[lex naturae] attested in Euler as a nominative proposition and in Kepler as an ablative mode; three grammars of #emph[vis motrix] in Kepler, Newton, and Euler. A formulation score operationalises the thesis: no verdict of violation without a cited rule and an anchor. The instrument is built and measured: an ai-dictionary whose senses are scoped by author, work, and period, with every attestation addressed to a page and a sentence; a rule-submission path with a revision lifecycle; a conformity check that assigns each rule the verdict engine its content demands (dependency syntax, lexis, or natural-language inference), calibrated to 17/17 on a seeded golden test; and a logical-relation scan that finds, among the 663,972 sentences of an archival collection, those expressing propositions that entail or contradict a given proposition. The same rules guard what language models write: every revision is measured against its source, each measurement names its rule, and the guard rejects 133 of 136 revisions in which a lectoring run had inserted evaluations of the author's text; the author's accept and reject decisions become evidence for or against the rules. ], abstract-title: "Abstract", font: ("Source Sans 3",), sectionnumbering: "1.1", toc: true, toc_title: [Table of contents], toc_depth: 3, doc, ) = The problem: token similarity is not understanding The Latin lemma #emph[vis] occurs in Kepler's #emph[Astronomia nova] (1609), Newton's #emph[Principia] (1687), and Euler's mechanics of the 1740s. A retrieval system that ranks passages by embedding similarity treats these three passages as near neighbours. They are not: Kepler models #emph[virtus motrix] on light spreading from the Sun; Newton defines #emph[vis motrix] as the product of an accelerating force and a quantity of matter; Euler defines #emph[vis motrix] as the cause that of itself always produces motion. One lemma, three language-games. Token similarity collapses the distinction a historian of science seeks to recover. This paper therefore asks not how to embed scientific Latin more cleverly, but what it means to #emph[follow] or #emph[contradict] a meaning-rule --- and how, after OCR and linguistic parsing, to build an instrument that makes that judgement checkable on scientific texts. Five contributions follow from that question: + #strong[Rule-following as a measure of conformity.] A formulation is semantically in order when it follows an identifiable rule of use; a lector may report a violation only by naming and citing the rule. + #strong[The OED entry as perspicuous representation.] The dictionary that begins from dated quotations and lets the definition summarise the evidence is the lexicographical form of Wittgenstein's #emph[übersichtliche Darstellung]. + #strong[LWgrammar.] The same entry type, compiled from one declared corpus after OCR and Stanza analysis, with the rule of use written out as `usage_rule`. + #strong[A casebook of microscopic semantic history.] Who used #emph[anima], #emph[vis], #emph[lex naturae] when, and under which rule --- with every quotation anchored at `(doc_id, pidx, sent_idx)`. + #strong[Context-specific judgement.] Time, person, and discipline scope the same engine; publication-format profiles (the analogue of a LaTeX document class) configure style dimensions without replacing the rule inventory. #arxivai.concept-box(title: [The thesis in one sentence])[ Semantic understanding is rule-conformity with a citable rule, not latent similarity. A verdict of violation that cannot name the rule it invokes has not yet made a judgement. ] This paper works immanently on the #emph[Philosophische Untersuchungen] and #emph[Über Gewißheit], pairing them with a built instrument and with corpus evidence that the reader can open at a page. It does not rehearse secondary literature on Wittgenstein. Companion papers carry what this one assumes: the PDAI page format @grasshoff2026aischolar, the linguistic index @grasshoff2026aistanza, the dictionary as a scholar's operation @grasshoff2026aierasmus, the Partitur as the score behind an agent's answer @grasshoff2026aipartitur, and the golden-query testbed that holds those operations to a declared oracle @grasshoff2026goldenqueries. Computational epistemology treats the validity of #emph[arguments] @grasshoff2026compepist\; this paper treats the grammar of #emph[words]. The two tasks are neighbours, not substitutes. = Following a rule == The paradox and its resolution as practice Wittgenstein states the paradox of rule-following in PU §201: #quote(block: true)[ Unser Paradox war dies: eine Regel könnte keine Handlungsweise bestimmen, da jede Handlungsweise mit der Regel in Übereinstimmung zu bringen sei. Die Antwort war: Ist jede mit der Regel in Übereinstimmung zu bringen, dann auch zum Widerspruch. Daher gäbe es hier weder Übereinstimmung noch Widerspruch. @wittgensteinPU2022[PU §201] ] If every action can agree with a rule, then every action can contradict it. Agreement and contradiction would both vanish. The example that makes the paradox concrete is the pupil of PU §185. He has mastered, by the ordinary criteria, the series of cardinal numbers and the command "+ n". The exercises have been in the number space up to 1 000. Asked to continue "+ 2" beyond 1 000, he writes 1 000, 1 004, 1 008, 1 012. Told that he was to add #emph[two], he does not understand. One can always offer a further interpretation of "+ 2" (add two up to 1 000, add four thereafter) for what he did @wittgensteinPU2022[PU §185]. No finite sample of applications determines the next step by itself. That is why the answer cannot be another interpretation. The misunderstanding, §201 continues, shows itself in the habit of placing interpretation behind interpretation, as if each reading of the rule calmed us until the next one unsettled it. What that chain reveals is that there is a way of taking a rule which is #emph[not] an interpretation, but which expresses itself, from case to case of application, in what we call "following the rule" and "going against it". That taking is a practice. PU §202 draws the consequence: #quote(block: true)[ Darum ist ›der Regel folgen‹ eine Praxis. Und der Regel zu folgen #emph[glauben] ist nicht: der Regel folgen. @wittgensteinPU2022[PU §202] ] To follow a rule is not to have a private conviction that one is following it. And one cannot follow a rule privately, because then believing one was following it would be the same as following it. The grammar of "following a rule" is the grammar of a custom. PU §199 makes the point as a remark on that grammar: following a rule, giving an order, playing a game of chess are #emph[Gepflogenheiten] --- customs, institutions. A language is a technique one has mastered, not a hypothesis one entertains about signs. For semantic judgement this is not atmosphere. It is the difference between two kinds of report. "This sentence is off" is an impression. "This sentence violates rule #emph[R], whose statement is … and whose authority is cited at PU §50 / CGPM 1983 / Kepler kgw-01 Bl. 83 (S. 70)" is a move in a practice. The second report can be contested, because the rule can be looked up. The first cannot. #arxivai.method-box(title: [Following versus contradicting])[ To contradict a rule is not to use a word vaguely or poorly. It is to go against a #emph[nameable] rule of a practice. The operational form of that demand: a verdict of violation cites a rule identifier and a documentary anchor. Without both, the verdict is not a judgement but a mood. ] == The negation test: grammatical sentences are not empirical PU §251 distinguishes a grammatical sentence from an empirical one by what happens under negation. "I cannot imagine the opposite" is not a report on the limits of one's imagination. It is a defence against something that #emph[looks] like an empirical claim and is in fact a rule of the language-game. The example is "Every rod has a length": #quote(block: true)[ Beispiel: »Jeder Stab hat eine Länge«. Das heißt etwa: wir nennen etwas (oder #emph[dies]) »die Länge eines Stabes« --- aber nichts »die Länge einer Kugel«. @wittgensteinPU2022[PU §251] ] The negation "Some rods have no length" is not a false physical hypothesis. It is nonsense in this game: it withdraws the very technique by which "length of a rod" is said. That is the test this paper will use on scientific prose. A formulation that drops the standard by which a quantity is defined does not make a weaker empirical claim. It leaves the game in which that quantity can be said. == The standard metre: a role, not a property PU §50 is the load-bearing example, and the wording matters. Wittgenstein writes #emph[aussagen], not #emph[sagen]: #quote(block: true)[ Man kann von #emph[einem] Ding nicht aussagen, es sei 1 m lang, noch, es sei nicht 1 m lang, und das ist das Urmeter in Paris. --- Damit haben wir aber diesem natürlich nicht irgend eine merkwürdige Eigenschaft zugeschrieben, sondern nur seine eigenartige Rolle im Spiel des Messens mit dem Metermaß gekennzeichnet. @wittgensteinPU2022[PU §50] ] One cannot #emph[predicate] of the Paris prototype that it is, or is not, one metre long. The sentence would seem to measure something; instead, it stipulates the game. The prototype has no occult property; it has a role. When one measures, all other length-talk in that game multiplies that role quantitatively. The scientific consequence is immediate. Before each redefinition, the then-current standard #emph[is] the reference against which length-statements are moves. A length given without reference to the standard and the procedure is already a violation of the grammar of measuring: it is unclear what the figure is a multiple #emph[of]. The violation is not that the number is inaccurate. The violation is that the number has not yet been given a move in the game. == The same sentence, a different logical function The metre has changed its definition without the word "metre" disappearing. Three epochs, three stipulations @bipm2019: #table( columns: (33.33%, 33.33%, 33.33%), align: (auto,auto,auto,), table.header([Epoch], [Definition], [What is held fixed],), table.hline(), [1799--1960], [Platinum--iridium prototype, Paris], [An artefact as reference standard], [1960--1983], [1 650 763.73 wavelengths of Kr-86 radiation], [11th CGPM, Resolution 6 @cgpm1960], [1983--], [Distance light travels in vacuum in 1/299 792 458 s], [17th CGPM, Resolution 1 @cgpm1983], ) Since 1983 the sentence "The speed of light is 299 792 458 m/s" is no longer an empirical report. It #emph[defines] what a metre is. The wording is almost unchanged; the logical function has switched. The sentence has frozen into the riverbed (the image is taken up below). One does not test it against a measurement. One tests the measurement against it. The OPERA neutrino-velocity episode is the counter-check. In September 2011 the collaboration announced an apparent arrival of CNGS muon neutrinos earlier than light-travel time would allow @opera2011arxiv. The physics community did not, as a body, treat "nothing travels faster than #emph[c]" as a hypothesis now in doubt. It treated the timing chain as the thing to be examined. A fibre-optic connection in the GPS synchronisation path and a clock oscillator were identified as the sources of the anomaly; the published measurement is consistent with #emph[c] @opera2012. The measurement was checked against the sentence, not the sentence against the measurement --- for as long as that sentence plays the role of a norm of description. #arxivai.sidebar(title: [Rule R-SI-LENGTH-REF])[ A quantitative length without reference to the metre definition then in force, and without a measuring procedure, violates the grammar of measuring: it remains unclear to which standard and which procedure the figure is attached. Authority: BIPM SI Brochure, 9th ed. (2019). Anchor: PU §50. ] Two everyday and two scientific violations of this family: + "The rod is 2 m long," with no standard and no procedure. Violates R-SI-LENGTH-REF and the grammar of PU §50. + The same sentence in a scientific paper, still without the standard. Same rule, tightened by the explicitness demanded of scholarly prose. + A word used against the sense documented in the governing dictionary, without being marked as a coinage. Violates the documented rule of use; the verdict cites the entry. + Kepler 1596 (#emph[anima motrix], #emph[anima mundi]) read with Newton's grammar of #emph[vis]. An anachronism: it violates the temporally scoped rule of the corpus. The case is worked in Section 5. == Where conventions live, and why they move If following a rule is a practice, conventions live where the practice is kept: in a metrology conference, a dictionary office, a laboratory, a discipline's way of writing. The OED, the Duden, Le Robert and the Académie, Treccani, the Historical Dictionary of the Academy of the Hebrew Language, Grimm's #emph[Deutsches Wörterbuch] --- these are not oracles. They are movable authorities. A speech community can violate them, and they change historically. That is the dynamic Wittgenstein returns to in #emph[Über Gewißheit]. Certain sentences of the form of empirical sentences can #emph[harden] and function as a channel for the ones that remain fluid; the relation changes with time, as fluid sentences harden and fixed ones liquefy @wittgensteinUG2023[ÜG §§96--97]. The mythology can flow again; the riverbed of thoughts can shift. Wittgenstein distinguishes the motion of the water from the shift of the bed, while refusing a sharp boundary between them. That is the right picture for the metre and for a dictionary sense alike. The hinge image gives the other half. The questions we ask, and our doubts, rest on certain sentences being exempted from doubt --- the hinges on which they turn. If the door is to turn, the hinges must stay put @wittgensteinUG2023[ÜG §§341, 343]. A check presupposes rules that are not themselves being checked in the same move. Semantic conformity is such a check. It is not a demand that every rule be proved before it is used. Two further remarks in #emph[Über Gewißheit] decide the relativism question that the riverbed image otherwise leaves open. First, a world-picture is not held because one has been convinced of its correctness. It is the inherited background against which one distinguishes true and false @wittgensteinUG2023[ÜG §94]. Second, that background can still be revised, and the revision can be given reasons. §92 asks whether someone could have a good ground for believing the earth had existed only since his birth; Moore, meeting a king raised in that belief, might convert him --- but it would be a conversion of a special kind, the king brought to look at the world differently. Simplicity and symmetry can move one to a view; one then says "It must be so." §§608--612 press the same point from the other side. Acting on the propositions of physics #emph[is] what we call having a good ground. One would "combat" a person who did not; one would give reasons; and at the end of reasons stands persuasion. Conventionality is not arbitrariness. Rules can be revised; a revision that cannot give reasons has left the practice. The instrument below takes that pair of thoughts as a design constraint. Rules are scoped (they have a time, a person, a discipline). They are citable (they have an identifier and an anchor). They are revisable (an LWgrammar entry has a revision log). They are never silent: a missing rule is reported as a status, not as an empty search. = The dictionary as a grammar of use PU §43 gives the method, with the restriction Wittgenstein himself writes in: #quote(block: true)[ Man kann für eine #emph[große] Klasse von Fällen der Benützung des Wortes »Bedeutung« --- wenn auch nicht für #emph[alle] Fälle seiner Benützung --- dieses Wort so erklären: Die Bedeutung eines Wortes ist sein Gebrauch in der Sprache. @wittgensteinPU2022[PU §43] ] For a large class of cases, though not for all, the meaning of a word is its use in the language. The claim is methodological, not a reduction of meaning to behaviour. If one wants to know what a term means, one does not hunt an essence. One surveys the uses. PU §373 states what that survey yields: grammar tells us what kind of object anything is. PU §122 names the form of the survey. A principal source of our lack of understanding is that we do not #emph[overlook] the use of our words; our grammar lacks perspicuity. The perspicuous representation (#emph[übersichtliche Darstellung]) is the understanding that consists in seeing connections. The Oxford English Dictionary is already that form, in lexicography. It does not start from a definition and hunt for illustrations. It starts from dated quotations and lets the definition summarise the evidence. An entry collects real sentences, sorts them into groups that share a way of using the word (branches and numbered senses), and gives each group a short label read off the examples. Around that core it records spellings (Forms), origin (Etymology), and marks the uses that have died (†). The quotations are the evidence; the definitions are summaries of that evidence. The entry never says what the word #emph[is]. It shows the family of language-games the word plays. The entry for English #emph[time] is the structural model --- not reproduced here as OED text, which remains the Dictionary's, but as an anatomy. Forms and etymology sit above the senses. Branch I treats time as a bounded stretch (a while, a lifetime). Branch II treats time #emph[when]: a juncture, an appointed moment. Later branches generalise (time as a dimension) and record combinations. Newton's scholium on absolute time in the #emph[Principia] belongs in the generalised branch: time as a container independent of matter, subject to mathematical operations @newton1687. A relational use, in which time is derivative of motion, is a different game. The dagger marks what has dropped out of the living language. That is perspicuity: one page on which the connections can be seen. LWgrammar writes the same object from #strong[one declared corpus]. The corpus sentences become the quotations; the branches capture the distinct language-games of that corpus; every quotation keeps its address `(doc_id, pidx, sent_idx)`. The one thing the OED leaves implicit --- the actual rule of use: which verbs the term takes, what it is contrasted with, the construction it sits in --- LWgrammar writes as `usage_rule`, because that rule is what a search engine and a conformity judge need. Two live entries from the Eneström corpus make the anatomy concrete. Both were read from `enestroem_lwgrammar.duckdb` (short-lived read-only connection) for this paper. #strong[tempus] (lemma `tempus`, Latin noun). Corpus frequency 5,548 tokens across 252 documents --- 4,547 Latin sentences in 251 of them; four senses in two branches; first attestation in the compiled entry at E1. A scoped sibling `enestroem:tempus:la#le1748` compiles the same lemma on documents up to 1748 (84 documents, 2,749 tokens, three senses): the rule of use is read off a different evidence set, so the entry is allowed to differ. - #strong[Branch I --- physical and mathematical time.] Sense I.1: duration of physical motion, especially descent under gravity. Rule of use: a variable to be minimised (`tempus descensus`, `tempore brevissimo`) or equated (`tempore aequali`), typically governed by $integral d s\/v$. Pivotal quotation: Euler, #emph[Methodus inveniendi] (E101), Bl. 28 (S. 29), sent\_idx 3 (1744) --- #emph[Ut si quaerenda sit curva brachystochrona, debebit tempus descensus, quod per $integral d s\/sqrt(x)$ exprimitur, esse minimum.] Sense I.2: an infinitesimal increment (`elementum temporis`), collocated with #emph[elementum] or #emph[differenziale], the differential $d t$. - #strong[Branch II --- temporal reference and historical period.] Sense II.3: a point or epoch, in adverbial genitive or ablative (`tum temporis`, `hoc tempore`). Sense II.4: a historical era or generation, with demonstratives (`illius temporis`) to locate the state of a science or a scholar's lifetime. Pivotal quotation: E101, Bl. 140, sent\_idx 9 --- #emph[Methodum autem, qua summus illius temporis Geometra est usus…] Retrieval that treated #emph[tempus] as one vector would mix the brachistochrone with a historian's "in those days". The entry keeps them apart by rule. #strong[vis] (lemma `vis`, Latin noun). Corpus frequency 8,933 tokens across 298 documents --- 6,418 Latin sentences in 284 of them; five senses in two branches. - #strong[Branch I --- physical and mechanical force.] Sense I.1: an active influence (gravity, central attraction) causing motion. Rule: often a genitive of origin (`vis gravitatis`, `vis centripetae`); direction by participle (`versus centrum tendente`). Quotation: E1, E1, Bl. 0, sent\_idx 0 --- the ordinary cycloid as tautochrone, #emph[vi gravitatis uniformiter versus centrum infinite distans tendente]. Sense I.2: a reactive or component force of curvilinear motion (`vis normalis`, `vis centrifuga`, `vis tangentialis`), almost always paired with an orthogonal counterpart. Sense I.3: a general mechanical load, often in the plural #emph[vires], modelled as functions of position or mass and subjected to integration. - #strong[Branch II --- mathematical and logical efficacy.] Sense II.1: the analytical power of a method (`vis Analyseos`, `vis methodi`), object of #emph[superare] or #emph[perspiciatur]. Quotation: E101, Bl. 84 (S. 85), sent\_idx 2 --- #emph[ut methodi meae vis et praestantia…] Sense II.2: the logical force of an equation (`vi relationis`, `vi aequationis`), "by virtue of". The same lemma, in the same author, already splits into a mechanical game and a methodological one. Section 5 will add Kepler and Newton to the mechanical branch and show that #emph[that] branch is not one game either. #arxivai.concept-box(title: [usage_rule])[ A usage rule states how a sense is played: typical constructions, contrasts, and governing verbs. It is the OED's implicit grammar made explicit. A sense without a usage rule is a label; a sense without a quotation is a conjecture. ] National dictionaries occupy the same role as the OED, for other languages and other offices: Duden for contemporary German orthography and usage; Le Robert and the Dictionnaire de l'Académie for French; Treccani for Italian; Ma'agarim for historically attested Hebrew; Grimm for historical German. None of their copyrighted articles is stored in the reference library. What is stored is their authority as metadata: a verdict against a documented sense cites the office, not a pirated entry. The authority remains movable in the sense of ÜG §§96--97. = From page to grammar A scientific page does not arrive as an OED entry. It arrives as an image. The pipeline that turns the image into a citable rule is the PDAI processing chain, specialised at the last stage for LWgrammar. #arxivai.operation-box( title: [From page to usage rule], question: [How does a printed page become a sense with a usage rule?], steps: ( (agent: "ocr", does: [transcribes the page image into text, with the page remaining the unit of evidence]), (agent: "stanza", does: [tokenises, lemmatises, dependency-parses, and tags named entities into stz_sentences, stz_tokens, stz_deps, stz_entities]), (agent: "gazetteer", does: [marks terms that already belong to a domain inventory and therefore earn an entry]), (agent: "lw-slips", does: [copies every sentence using the term onto a slip, with neighbouring words and dependency context]), (agent: "lw-compile", does: [groups slips into branches and senses, writes definition and usage_rule, stores the entry with quotations still addressed to (doc_id, pidx, sent_idx)]), ), answer: [An LWgrammar entry in the collection database, revisable when new slips arrive.], ) The linguistic layer is necessary and not sufficient. Stanza @qi2020stanza supplies lemma, part of speech, and dependency context as slip features. Named-entity recognition, however, is not a grammar. In kepler-prim the surface #emph[Anima] is tagged PER on kgw-06 Bl. 265 (S. 276): the tagger has treated a cosmological soul as a person. The mistake is instructive. A pipeline that stopped at NER would file the passage under biography. The rule of use --- #emph[anima] as motive soul of the world in 1596, still present in the #emph[Epitome] after #emph[virtus motrix] has entered --- lives in the entry, not in the tag. Qualification for an entry follows two paths, unioned. Gazetteer membership is sufficient: a term already inventoried as astronomical, geometrical, mechanical, or philosophical earns an entry because its rule of use is what scholarly search needs. Independently, a both-gate admits a lemma that has been used often enough in the corpus (`corpus_freq` ≥ 10) #emph[and] asked after often enough (`search_count` ≥ 10). The thresholds are editorial policy, not metaphysics. They keep the card folder from filling with hapax noise while still letting repeated scholarly interest promote a term. Compilation copies the OED's office practice. Readers (here: the corpus) copy telling sentences onto slips (`lw_slip`). An editor (here: a language model under an editorial brief) groups the slips, drafts branches and senses, and writes a usage rule for each. When new pages enter, only the new slips are handed back with the existing entry; the revision is logged (`lw_revision`). The entry is a living folder, not a pronouncement. Disagreement has an address: every quotation points at a page and a sentence. Beside the per-collection databases sits a workspace-wide reference library, `LWgrammar/`, whose DuckDB store @raasveldt2019duckdb holds the Wittgenstein sections used above at paragraph-accurate anchors (PU 693 sections, #emph[Über Gewißheit] 676, #emph[Tractatus] 526 propositions, #emph[Zettel] 717), together with the measurement-standard and dictionary-authority rules of Section 2. Full-text search over those sections is BM25 via DuckDB's FTS extension. Connections are short-lived and read-only: open, read, close. The digital texts are the working copies of the Wittgenstein Project; the citation editions remain Suhrkamp @wittgensteinPU2022@wittgensteinUG2023. Part II of the #emph[Investigations] is absent from the digital file used here --- the file ends at §693 --- and is not silently treated as present. = Microscopic semantic history Who used #emph[anima], #emph[vis], #emph[lex naturae], and when, with which meaning? The answers below are not impressions. They are sentences retrieved from Stanza databases of the PDAI collections kepler-prim, enestroem, and natural-philosophy, cited as `doc_id` pidx / sent\_idx. The editions themselves are Kepler's #emph[Gesammelte Werke] @keplerGW, Euler via the Eneström numbers @enestroem1910, and Newton's #emph[Principia] of 1687 @newton1687. == Case A --- Kepler: from soul to force, without substitution In 1596 Kepler's #emph[Mysterium cosmographicum] (KGW I) still speaks the language of motive souls. Two adjacent sentences on kgw-01 Bl. 83 (S. 70) (sent\_idx 9--10) offer either several motive souls or one at the centre of all orbs, in the Sun: #quote(block: true)[ …aut Motrices animas… aut, vnam esse motricem animam in orbium omnium centro, scilicet in Sole… …ita nunc vita, motus et anima mundi in eundem Solem recidit… ] By 1609 the #emph[Astronomia nova] (KGW III) has a different leading term. On kgw-03 Bl. 43 sent\_idx 24 the motive power is #emph[virtus motrix], located in the body of the Sun, with physical arguments attached: #quote(block: true)[ …virtutem motricem seu morarum dispensatricem esse in corpore Solis: Accedunt argumenta Physica. ] On Bl. 44 sent\_idx 0--1 that power is said to receive quantities plainly as light does: #quote(block: true)[ Virtutem motricem plane ut Lucem, recipere quantitates… ] The new game is analogical: force on the model of radiation. The later #emph[Epitome astronomiae Copernicanae] (KGW VII, 1618--21) does not complete a replacement. On kgw-07 Bl. 295 (S. 299) sent\_idx 8 the Sun still #emph[animam in se habeat]. On Bl. 302 sent\_idx 3 Kepler can list, in one breath, intelligences, motive souls, and solid orbs: #quote(block: true)[ …de intelligentijs, animabus motricibus, et orbibus solidis? ] The point is not a synonym swap. A new language-game (#emph[virtus motrix] as light-like power) is played #emph[beside] the old one (#emph[anima] as motive soul). Family resemblance and rule-change are datable on the page. Reading the 1596 sentences with Newton's grammar of #emph[vis] violates the temporally scoped rule R-KEPLER-ANIMA-VIS: Kepler in 1596 does not yet play that game, and #emph[anima] has not left the later work. == Case B --- #emph[lex naturae] as an emergent phrase A collocation is not a co-occurrence, and a co-occurrence is not a rule. In kepler-prim, the lemmata #emph[lex] and #emph[natura] share a Latin sentence #strong[45 times], across 16 documents. A proximity search narrows this to #strong[23 sentences] within five tokens and #strong[15] within one (10 and 9 documents respectively). The compiled OED entry for `lex natura` in kepler-prim spans two branches and rests on 16 proximity-confirmed quotations from across the #emph[Gesammelte Werke]. Every one of those figures depends on decisions that the figure itself does not display, and we state them because two of them move the number by more than a factor of six. A sentence is addressed by the triple (document, page, sentence). The sentence index restarts on each page, so a key built from document and sentence alone merges sentences that merely share an index on different pages: the same-sentence count then reads #strong[313] instead of 45. That is not a stricter or looser criterion, it is a wrong one, and it inflates precisely the quantity a philological claim would rest on. Second, what counts as an instance of #emph[natura]. Admitting the adjective #emph[naturalis] as a variant of the noun yields #strong[54] same-sentence hits, 27 within five tokens and 16 within one. Those are the figures an earlier draft of this paper reported, and they were not miscalculated: they follow exactly from the variant list that draft named. The move is not obviously illegitimate either, since it is how one folds #emph[naturae] or the OCR artefact #emph[naturâa] into the lemma. But #emph[naturalis] is a different word with a different grammar, and admitting it counts sentences in which Kepler speaks of natural things among sentences about nature's law. A defensible-looking definition, stated openly, still produced a fifth more evidence than the claim can carry. Third, language. kepler-prim is a bilingual edition --- 325,702 sentences tagged Latin against 137,435 tagged German --- so one expects a language filter to matter. Here it does not: all 45 co-occurrences fall in Latin sentences. The expectation was reasonable and the data declined it, which is the ordinary fate of plausible methodological assumptions and the reason for recording the language rather than assuming it. The lemma census therefore stores the sentence language and the counting mode alongside every figure, including the rejected one, so that a reader can reproduce the 54 as readily as the 45. A figure that cannot state its own definition is not a finding. But the compiled entry reveals something the raw co-occurrence count does not. Kepler's #emph[lege Naturae] is an #strong[ablative construction]. In #emph[De Stella Nova] (1606; KGW I, kgw-01 Bl. 346 (S. 336) sent\_idx 3) he faults those who ascribed every celestial event to the free choice of the gods: had they weighed from the start #emph[ista omnia rata lege Naturae circumire] --- "that all these things come round by a fixed law of Nature" --- they would never have fallen into such credulity. On the next page (Bl. 347, S. 337, sent\_idx 1) a spirit is #emph[quadam naturae lege connexus], "bound by a certain law of nature", to men and to the world. The ablative places #emph[lex] as the manner or bond of a process, and its opponent is #emph[arbitrium liberum], not falsehood. Nature's law is that by which motion runs orderly; Kepler does not name it and set it on the table to be conserved. Euler does exactly that. Eneström E88, #emph[Nova theoria lucis et colorum] (1744), Bl. 27 (S. 28) sent\_idx 5, rejects a rival account of refraction because #emph[amplissima quaedam et constantissima #strong[lex naturae] non adimpletur] --- "a most comprehensive and most constant law of nature is not fulfilled". Four sentences later his own theory is commended because #emph[lex naturae gravissima conservatur]. Here the phrase stands in the nominative as the subject of fulfilment and conservation. E57, #emph[Inquisitio physica in causam fluxus ac refluxus maris] (1739), Bl. 1 (S. 20) sent\_idx 3, shows the same standing in another case: #emph[cum ex #strong[legibus naturae] satis superque constet] --- the laws are the premisses from which a conclusion follows. One may argue #emph[from] a law only if the law is a proposition. Whether nominative or ablative of premiss, Euler's #emph[lex naturae] is something that can be true, violated, upheld, and reasoned from. This is the rule difference, and it is grammatical before it is doctrinal: Kepler's #emph[lege Naturae] states the manner in which things happen; Euler's #emph[lex naturae] names a proposition that bodies obey or violate. Two usage rules, not one concept. A system that answers "Kepler on the law of nature" by retrieving the 45 co-occurrence sentences --- or by finding embedding neighbours of #emph[lex] and #emph[natura] --- returns evidence that fits neither rule. A system that compiles the collocation, distinguishes ablative from nominative constructions, and reads Kepler's grammar against Euler's, understands the difference. The compiled OED entry is the understanding (R-LEX-NATURAE-ATTEST). == Case C --- #emph[vis motrix] across three authors The mechanical branch of #emph[vis] is still not one rule. - #strong[Kepler], kgw-03 Bl. 44 sent\_idx 0: #emph[virtus motrix] on the model of light --- analogical, radiating from the solar body. - #strong[Newton], newton-principia-1687 Bl. 11 sent\_idx 6: #emph[vis motrix ex vi acceleratrice ducta in quantitatem ejusdem materiæ] --- #emph[vis motrix] taken from the accelerating force multiplied into the quantity of matter. The rule is definitional and relational: one quantity is the product of two others. - #strong[Euler], #emph[Briefwechsel mit J. A. von Segner] (Opera Omnia IVA 8, doc `978-3-319-75942`), Bl. 564 (S. 551) sent\_idx 24: #emph[Vis motrix est caussa, quae per se semper producet motum] --- a causal definition. Force is the cause that of itself always produces motion. Same lemma, three rules. But the Segner letter does something more interesting than supply a third definition: Euler states the rule of use himself, and states what it excludes. Three sentences on (sent\_idx 27) he writes that the character of motive force #quote(block: true)[ …wird von der Bewegung her genommen, und kan, so weit ich sehe, von nichts andern hergenommen werden, so daß derjenige, der nicht wüste was eine Bewegung ist, unmöglich wissen könte, was man in der Mechanic eine Kraft nennet; er würde die selbe von einer der Kräffte seiner Seele nicht unterscheiden. ] Whoever does not know what motion is cannot know what is called a force in mechanics --- #emph[he would not distinguish it from one of the powers of his soul]. This is a usage rule given in the source: the mechanical game is fixed by its tie to motion, and its boundary runs exactly where Case A found Kepler's difficulty. What LWgrammar formalises as `usage_rule`, Euler here writes out in German while defining in Latin. The partition is not by author, though. In the #emph[Correspondance] of Opera Omnia IVA 7 (doc `978-3-7643-8743-3`, Bl. 382 sent\_idx 8) Euler writes #emph[vis motrix est ut productum ex massa in celeritatem] --- Newton's relational rule, not the causal one. Euler defines causally where he settles what mechanics is about, and relationally where he computes an impact. So a terminology-compare that reports "all three use #emph[vis motrix]" has understood none of them, and one that reports "Euler defines it causally" has understood half of Euler. The LWgrammar entry for Euler's #emph[vis] (Section 3) already splits mechanical from methodological senses; the present case splits the mechanical sense again --- by rule, not by author. A further warning sits in the lemma layer itself. #emph[visus] (seeing) is a different lemma. In kepler-prim it occurs in 264 Latin sentences. A string search for `vis` will harvest it. Lemma normalisation is required, and even then it does not disambiguate Kepler's analogical #emph[virtus] from Newton's product from Euler's cause. Only the rule does. #arxivai.method-box(title: [How a case cites])[ Every historical claim above names a collection document, a zero-based page index, and a sentence index. Disagreement is an invitation to open that page, not a dispute about an impression. ] = The ai-dictionary: scoped senses and submitted rules The cases of the previous section make a structural demand. If Kepler's #emph[lege Naturae] and Euler's #emph[lex naturae] are two rules and not one concept, then the dictionary that records them cannot have one article per lemma. It must have one article per lemma #emph[and scope]: the same headword carries different senses for different authors, works, and periods, and each sense carries its own rule of use. The workspace reference library described in Section 4 has been extended into exactly that object. We call it the #strong[ai-dictionary]: a dictionary category whose entry is not "what the word means" but "what the word means #emph[for this author, in this work, in this period, in this context of use]" --- the OED's historical principle, sharpened into a queryable scope. == The entry form Four tables carry the category. `term_entry` holds the headword with lemma and language. `term_sense` holds the scoped senses: each row names its author, work, period, and context of use, gives the definition, and writes the rule of use out as text. `sense_locus` holds the attestations, and here the PDAI reference policy is not optional decoration but the schema itself: a locus #emph[is] the quadruple (collection, document, page index, sentence index). The page index is the #emph[physical] scan (`page_`, the leaf); the entry's readable `ref` names the number actually printed on that leaf and declares the physical index beside it --- `S. 277 [Bl. 288]` --- falling back to the declared sheet alone (`Bl. 302`) only where the running head carries no legible number. A citation never lets the physical index stand in for the printed page without saying so. `usage_rule_entry` holds the rules that are not tied to one headword --- the grammatical and stylistic rules against which formulations are judged --- each with a tier (blocking or advisory), a statement, positive and negative examples, and a status. The #emph[lex naturae] case of Section 5 lives in this form, though not yet with its result. The Kepler sense (`lex-natura#kepler#1`, scoped to 1600--1630) states as its rule of use that the phrase is to be resolved by its attestation loci in kepler-prim and that neither the juridical sense of the eighteenth century nor the modern sense of a scientific law may be projected back onto Kepler. It carries six harvested loci from the #emph[Gesammelte Werke]: two in KGW I (kgw-01, Bl. 190 → S. 180; Bl. 288 → S. 277), two in the #emph[Epitome] volume (kgw-07, Bl. 77 → S. 103; Bl. 406 → Bl. 406), and two in the correspondence volume kgw-21-1. The ablative rule that Section 5 reads off #emph[De Stella Nova] (kgw-01, Bl. 346--347) is not yet written into the stored sense, and those two passages are not among its loci: the entry records where the reading is to be done, not yet what it found. A second, deliberately distinct sense records the juridical-moral use of the natural-law tradition, linked to the Kepler sense as its contrast, so that a passage of that register is not forced under Kepler's physical rule. The scoping answers the retrieval failure this paper began with: a query for "Kepler on the law of nature" resolves against the Kepler sense and its loci, not against a lemma-wide average. Two properties of the store follow the riverbed dynamic of Section 2 rather than convenience. First, senses and rules carry a status (active, revised, revoked) and a source; a correction revises, it never deletes, and a revoked rule remains visible as revoked. Second, compilation is layered: the seed layer of entries is compiled from declared source files and can be recompiled at any time, while submitted rules and harvested loci survive recompilation untouched. The dictionary is a living folder in the OED's sense, with the revision log as part of the object. == The submission path A dictionary that admits new rules only at compile time is an archive. The ai-dictionary has a live path: a rule observed in practice --- typically a correction by the author --- is submitted with a statement, examples, scope, and tier, receives an identifier, and is active from that moment for every consumer of the store. The founding submission is the truth-bearer rule: #arxivai.sidebar(title: [Rule R-GG-001 (submitted)])[ Sachverhalte and Tatsachen — states of affairs and facts — are not true or false. They are parts of the world: a state of affairs obtains or does not obtain. Only Aussagen — propositions, what a declarative sentence expresses — are true or false. "This fact is true" is therefore not an emphatic assertion but a grammatical error. Anchor: TLP 2; PU §§134–137. ] The rule is Wittgensteinian in content and in kind: it is a grammatical sentence in the sense of PU §251, defended by the negation test ("this fact is false" is not a weaker claim but a confusion of categories), and it is #emph[submitted], dated, and scoped like every other rule --- the author's authority is recorded as a source, not presumed as an oracle. On 20 October 2026 the store held 528 entries and 560 scoped senses: 242 active, 310 candidates that the Famulus lector had written back for curation, and 8 held, obsolete or superseded. It held 127 usage rules, of which 118 are active (104 blocking, 14 advisory), 3 revised and 6 revoked, together with seven review gates that stage the rules into a delivery protocol. == From annotation to rule The submission path becomes productive when it is wired into the editing loop. The ai-lektorat annotation viewer (port 5114) operates over any Quarto paper. The author annotates a paragraph with an instruction; the reviewing stance is chosen from lector family, lector, and scripted or free instruction (#ref(, supplement: [Figure])), and a mode control switches between #emph[diagnose], #emph[propose], and #emph[frei]. The model's answer returns as a version of the paragraph in a review card: fine corrections are shown inline as ``/`` hunks, each of which can be kept or reverted (#ref(, supplement: [Figure])), and the card's action bar accepts or rejects the whole version. The model is always the current member of the configured model family (at the time of writing `gemini-3.8-flash`, via the `gemini` family entry in `standards/model-routing.yaml`\; the superseded `gemini-3.7-flash` survives only in that entry's list of superseded versions). The figures of this section show the viewer as it stood on 7 September 2026; the panel has since been rebuilt around the review card, and the steps described here are those of the current viewer. #figure([ #box(image("figures/sidebar-three-pane.png")) ], caption: figure.caption( position: bottom, [ The annotation panel of 7 September 2026 with three-pane picker (Lector family | Lector | Instruction), mode control, and "Also register as LWgrammar rule" toggle pre-set by the classify step. ]), kind: "quarto-float-fig", supplement: "Figure", ) The revision runs under a task form that LWgrammar issues (#ref(, supplement: [Section])): the viewer asks the store for the form, passes the document context, and lets the guard measure the result before the version reaches the review card. Rule identifiers stay out of the prompt, because a model that sees them repeats them in the text. If LWgrammar is unreachable, the run fails with that reason; there is no unguarded fallback. Accepting a version writes it into the source file as a new version with provenance; the kept and reverted hunks compose the accepted text (#ref(, supplement: [Figure])). Every accept and every reject is reported to the store as rule evidence (#ref(, supplement: [Section])). #figure([ #box(image("figures/inline-revision-hunks.png")) ], caption: figure.caption( position: bottom, [ Inline revision block of 7 September 2026 with word-level hunks. Each hunk carries a ✓/✗ decision; "Accept all" composes the merged text; "Create version" stores it and, when the generalise toggle is on, triggers the rule-proposal step. ]), kind: "quarto-float-fig", supplement: "Figure", ) An instruction carries a scope of validity: this paragraph only, the whole document, or every text. When the author accepts a version under the widest scope, the server runs the `rule-propose` role (a small Gemini call) to extract a generalised rule statement, positive and negative examples, a tier, a scope, and a detector specification from the accepted change. A compact rule card appears in the review card (#ref(, supplement: [Figure])). The author may edit the statement; one click submits the rule via `lw_submit_rule` with provenance evidence (paper, segment identifier, annotation identifier, quoted passage), and the returned rule code is stored on the annotation record. #figure([ #box(image("figures/rule-card-proposal.png")) ], caption: figure.caption( position: bottom, [ Rule card (7 September 2026) after acceptance of an active-voice revision: the card shows the proposed rule statement, a positive and a negative example, and the assigned code R-GG-010. The "Confirm & Submit" button records the rule in the LWgrammar store via the MCP write path. ]), kind: "quarto-float-fig", supplement: "Figure", ) The worked case is R-GG-002 --- Wittgenstein citation grammar. The failing form, which citeproc produced from `[@wittgensteinPU2022, PU §201]`, was `(Wittgenstein 2022, sec. 201)` when written as `[@wittgensteinPU2022, §201]`: the CSL locator label "sec." rendered where the siglum `§` was expected. The annotation identified this as a #emph[bibliothekar] issue. On acceptance the server proposed the rule, which the store now holds as: #emph[Wittgenstein's works are cited by work siglum and section number, never by author--year and locator label. Use: PU §201, ÜG §96, TLP 4.021, Z 717. Never: Wittgenstein (2022, sec.~201) or (Wittgenstein 2022, p.~45).] The lexical detector stored with the rule has the markers `sec. \d`, `wittgenstein.*sec\.`, `, sec.` and `(sec.`: it names the failing form, not the siglum that the rule demands. From that point forward `lw_rule_conformity` can flag the violation in new text without a full revision run (#ref(, supplement: [Figure])). The source fix --- `[@wittgensteinPU2022, PU §201]` --- renders cleanly as "\(Wittgenstein 2022, PU §201)" in both HTML and PDF output. #figure([ #box(image("figures/revision-rule-honoured.png")) ], caption: figure.caption( position: bottom, [ A later revision (7 September 2026) of a passage about the Paris prototype runs with R-GG-010 injected. The sidebar reports "✦ LWgrammar rules consulted" and the lector flags DEF-P08 Dead abstraction --- passive nominalisations --- as a direct consequence of the active-voice rule in the store. ]), kind: "quarto-float-fig", supplement: "Figure", ) The loop from correction to enforceable rule involves five components that are now wired together: the annotation viewer, the revision engine, the guard, the MCP write path, and the conformity checker. The store is the stable centre; the viewer and the checker are consumers on opposite sides of the edit cycle. == Services The ai-dictionary and the annotation-rule loop are exposed as two services, both accessible tailnet-wide (Tailscale): #strong[LWgrammar MCP] (port 5116, streamable HTTP, launchd job `com.ai-platform.lwgrammar-mcp`) offers 26 tools in seven families --- dictionary (`lw_term`, `lw_usage_rules`, `lw_submit_rule`, `lw_revoke_rule`), decision record (`lw_record_decision`, `lw_rule_candidates`, `lw_resolve_candidate`), modes and situating (`lw_modes`, `lw_mode`, `lw_sprachformen`, `lw_situate`, `lw_gate`, `lw_application_examples`), consult/lector (`lw_consult_understanding`, `lw_lector`, `lw_rule_conformity`, `lw_writingguide_check`), guard (`lw_task_forms`, `lw_guard_pack`, `lw_evaluate`, `lw_check_instruction`), senses in time (`lw_sense_history`, `lw_situate_specimen`), and corpus reference and inference (`lw_search`, `lw_cite`, `lw_logical_relations`). Reads are served from any Tailscale node; writes (`lw_submit_rule`, `lw_revoke_rule`, `lw_record_decision`, `lw_resolve_candidate`) execute only on mac-studio. #strong[ai-lektorat viewer] (port 5114, launchd job `com.ai-platform.lektorat`) offers annotation, revision, review and decision, version, classify, document metadata, rule-propose, curate-publish, render, and apply endpoints, and the sentence-level checks of sachliche Validität, whose terminology entries are looked up in the store and written back to it as candidate senses. The viewer is the primary write source for new rule submissions initiated by the author during revision. == Modes: the same store under different contexts The context axes of the next section (time, person, discipline, profile) need a practical switch. The store therefore compiles #strong[modes]: named recipes that select, for one kind of task, the registers, rules, and gates that govern it, and emit them as a compact context for a language model. Writing an English conceptual paper, a German Gutachten, and a reading of seventeenth-century Latin are three modes over one store --- the inventory does not change, the selection does. A mode is the analogue, on the consultation side, of what the publication profile is on the judging side. The implemented registry holds nine modes; five of them show the range: `conceptual-paper-en` (English scholarly prose, covering analytic-core and system-register senses, the full blocking-rule set, and ai-erasmus register passages), `gutachten-de` (the German evaluative register with Gutachten exemplars and verdict-grounding rules), `documentation` (the lucid prose rules with terminology lock for the project scope), `orchestrator-book` (the system-register, action-and-goal, and analytic-core terminology frames together with the chapter-gate protocol), and `historical-reading` (term senses filtered by author, work, and period --- the mode under which a query for #emph[lex naturae] in Kepler's #emph[Astronomia Nova] returns Kepler's senses and their loci, never the house sense projected backward). The other four are `causal-architect`, the German history-of-science register `editionsgeschichte-de`, and `explain-en` and `explain-de` for explanations a model gives to the author. Each mode emits a compact deterministic pack --- the relevant rules, senses, and guide references, a few kilobytes --- suitable for direct injection into a language-model context. == The consultation hub: four application forms A mode pack is not a consultation. Four forms of consultation correspond to four distinct practical relationships a language user has with the store. #strong[Writing.] The task is to formulate text in the author's registers. Before drafting, the agent calls the store with the mode name and the list of terms the text will use; it receives back the blocking rules (ordered by tier, each with its defective and its correct example), the house senses of each planned term with their usage rules, a gap note for every planned term without an entry, the sentence limits that the house writing guide `famulus-writingguide-1` sets for the mode's level of strictness, and the guides that hold the register's exemplary passages. During drafting, per-term spot checks confirm that each term is introduced in the right scope. After drafting, the self-check gate runs. The pack binds: a blocking rule is a gate, not a suggestion; an advisory rule is deviated from only with a stated reason. This is the institutional form of PU §201: to write correctly under the standard is to know what it means to go against #emph[this] rule, and the pack makes that explicit. #strong[Lectoring.] The task is to audit a text --- one's own or another's --- against the standard. The call names the file and optionally a scope; the pipeline returns rule findings keyed by rule code, each with the offending passage, the statement and tier of the rule, the engine that judged it, and the evidence of the judgement, together with term findings: terms used outside their registered scope, and recurring terms without an entry. What licenses a correction is the cited rule, not an aesthetic judgement. The lector proposes no reformulation of its own; a reformulation is written under a task form and measured by the guard of #ref(, supplement: [Section]). #strong[Understanding.] The task is to resolve what a term meant in a specific historical or foreign text --- not to project the house sense backward. The call names the term, the author, and the work; it receives the sense lattice filtered by that frame, each sense-instance with its attestation loci `(collection, doc_id, pidx, sent_idx)` and real quotations, plus contrast senses showing what the term meant to other authors or in other periods. A missing sense is reported as an explicit gap --- the institution offers a provenance-governed catalogue of actual usage, not a closed claim about meaning. #strong[Situating.] The task is to prepare a writing assignment before anyone writes. The call passes a brief --- thesis, intended form of language, planned terms, structure, source documents, an annotated example --- and receives a special instruction in seven slots: the form of language, the binding rules, the senses of the planned terms, the register, the structure, the example, and the source context. Each slot names where in the store it comes from; a slot the store cannot fill appears as a gap block, never as a guess. Situating composes from the inventory; it adds no rule and no style of its own. The four forms are not interfaces to four separate systems. The same store, the same rules, and the same loci serve all four; what changes is the direction of the query and the nature of the result. Writing extracts a prescription; lectoring extracts a finding; understanding extracts an attestation; situating extracts an instruction. == Lectoring for maximal linguistic precision The lectoring form requires a pipeline that is lemma-based, not surface-string-based, for the obvious reason that inflection hides terms. The pipeline runs in four steps. #strong[Segmentation and lemmatization.] The text is split into prose paragraphs (Markdown headers and code fences are excluded from auditing). Each paragraph is parsed by the stanza pipeline of the text's declared language (en, de, or la) into sentences with per-token lemma, POS tag, and dependency relation. Term keys are lemmata; #emph[Sachverhalt] and its case forms resolve to the same key. #strong[Term identification.] Surface forms and lemmata are read as n-grams, up to the length of the longest registered headword, and matched against the headword table. This channel is deterministic, free, and complete for terms whose form the store knows. A second channel was measured against it: the entity tagger GLiNER2.5 with terminology-harvest labels (technical term, philosophical concept, system component, Latin phrase). On a 285-line chapter (`action.qmd`) the lemma channel alone found 8 of 9 registered terms; the tagger found all 9, at the cost of 7 additional false candidates. The tagger is not part of the implemented pipeline. Terms the store does not yet know reach it through the gap findings below. #strong[Sense resolution.] The matched terms are collected in one DuckDB pass over the headwords and then resolved, term by term, to their scoped senses and usage rules under the current scope. A term whose senses all lie outside that scope is reported. #strong[Finding generation.] Three classes of finding are implemented. Rule conflicts are reported by the conformity check of the next section, paragraph by paragraph. Out-of-scope findings name a dictionary term used where none of its senses applies. Gaps are terms without any entry in the store, reported as curation candidates when they appear repeatedly as technical-register nouns (capitalized, NOUN/PROPN tag, frequency ≥ 2). Forbidden synonymy --- the #emph[cluster/package/route] class --- needs no detector class of its own: it is a usage rule (R-LG-042), judged by the conformity check like every other rule, and the guard of #ref(, supplement: [Section]) measures term substitution in a revision against R-LG-001. Sense drift, one term used across a draft in senses from incompatible scopes, is not yet detected. The lector pipeline was run against three chapters of the orchestrator book (`index.qmd`, `action.qmd`, `justification.qmd`, 940 lines in total). The conformity engine returned no conflicts on the sentence/proposition class (R-LG-008) or the truth-bearer class (R-GG-001) in the final drafts --- the passages that previously contained those constructions had been rewritten. The verification ban (R-LG-007) fired on legacy schema field name occurrences but with the accompanying prose making the exemption explicit; the authors chose to retain the field name with an explicit gloss, "acceptance check (schema field `verification`)". Gap candidates included `Harness`, `enfolding`, and `frontier`, which are present in the system-register terminology guide and could be promoted to the dictionary in a subsequent curation round. = Measuring semantic conformity == Four verdicts Given a formulation and a context (time, person, discipline, collection, publication profile), the instrument returns one of four verdicts for each load-bearing expression: #table( columns: (50%, 50%), align: (auto,auto,), table.header([Verdict], [Condition],), table.hline(), [#strong[conform]], [A rule applies, and the formulation follows it (a length #emph[with] a standard; a term in its documented sense).], [#strong[violation]], [A structural miss (length without standard) or a fired violation-group (Kepler + 1596 + Newton's #emph[vis]). Always with `rule_id` and anchor.], [#strong[innovation]], [The use departs and is marked as a coinage --- a rule in the making.], [#strong[obsolete]], [The use follows a daggered rule.], ) Innovation and obsolete are not assigned automatically in the present deterministic score; they remain editorial. Conform and violation are assigned by matchers that live in the rule table as data (`scope.terms`, `scope.violation_when`), not as buried constants. == The formulation score The Partitur `lwgrammar-formulation` is the thesis as infrastructure @grasshoff2026aipartitur. Five stages, no language model on the hot path: + #strong[formulation-parse] --- isolate measures (value + unit), whether a standard or procedure is named, and the observation terms. + #strong[rule-locate] --- collect applicable rows from `ref_rule` (grammar principles, measurement standards, dictionary conventions, corpus-usage rules, style rules). + #strong[reference-cite] --- resolve each rule's anchors to section text (PU §50, ÜG §341, a CGPM resolution, a corpus `source_ref`). + #strong[conformity-judge] --- emit verdicts. A violation without `rule_id` and an anchor is a #emph[stage failure], not a soft warning. + #strong[formulation-assemble] --- write the answer as sentences that quote the rule. If no rule applies, that fact is stated as a status. An empty hit-list is not returned as "nothing found". #arxivai.operation-box( title: [Iron Rule], question: [When is a semantic verdict allowed to say "violation"?], steps: ( (agent: "formulation-parse", does: [finds the quantity 2 m in "Der Stab ist 2 m lang." and records that no SI, BIPM, or procedure cue is present]), (agent: "rule-locate", does: [activates R-SI-LENGTH-REF because a measure is present]), (agent: "reference-cite", does: [resolves the rule's citation to PU §50]), (agent: "conformity-judge", does: [emits violation, with rule_id and the anchor; refusing to emit the verdict if either is missing]), ), answer: [Violation of R-SI-LENGTH-REF (grammar of measuring), anchor PU §50.], ) The same score, given "Der Stab ist 2 m lang, gemessen nach der SI-Meterdefinition (BIPM 2019)", returns #strong[conform] under the same rule. The rule has not changed; the formulation now makes the move the game requires. Kepler 1596 read as Newton's #emph[vis], and Kepler credited with #emph[lex naturae], fire corpus-usage rules whose violation-groups are stored in the library. In each case the answer names the rule. That is PU §201 operationalised: going against a rule is going against #emph[this] rule. == Context axes and style profiles The same engine judges differently when the context changes, because `rule-locate` resolves rules under a scope. The scope is not a parameter the caller sets from scratch each time: it is the scope of the active #strong[mode], which names the combination of context axes appropriate to the task. The axes are: - #strong[time] --- LWgrammar scopes such as `le1748`\; metre definitions 1799 / 1960 / 1983; - #strong[person] --- an author's compiled entry, not a field-wide average; - #strong[discipline] --- gazetteer domains (astronomy, mechanics, philosophy); - #strong[collection] --- kepler-prim is not enestroem; - #strong[profile] --- a publication-format profile, declared on the Partitur as `stil_profil`, the analogue of a document class. A mode compiles these axes into a single scope identifier and supplies the rules, senses, and style profile relevant to that scope. The `historical-reading` mode, for instance, sets the person and collection axes to the author and collection in question and suppresses all house-rule blocking that does not apply to a reading context: one does not audit Kepler's Latin for violations of the English conceptual-paper register. Style is not a second system. The ai-lektorat defect catalogue (excellence rules and DEF-codes for argument, structure, prose, terminology, bibliography, integrity, figures, examples) is ingested into the same `ref_rule` table, with a dimension path (`stil/komposition/argument`, `stil/formulierung/terminologie`, …). A finding counts only when the code resolves to a registered rule. The profile `arxivai` does not replace that catalogue. It #emph[weights] it for this venue: British scholarly English, examples after claims, thesis locatable in the abstract and the first section, new terms motivated and explained in plain language before their first load-bearing use (in the lettreai Typst theme, as short info boxes), citations complete and not placeholders, figures referenced in the running text, lists set as lists. The limits of the instrument are the limits of a practice. Entries are relative to a declared corpus. Compilation is editorial and revisable. Scopes are historical. The library is not a meaning-oracle and does not pretend to be. What it offers is stricter and rarer: a place where a disagreement about meaning has an address. = Two services, measured The formulation score of the previous section is deterministic: its matchers live in the rule table as data. Two further services extend the judgement to cases a matcher cannot reach, and both are built and measured rather than proposed. Their shared discipline is the golden test: a set of passages, or sentence pairs, with verdicts fixed #emph[in advance] of any run, against which every engine choice and every threshold is calibrated. An engine claim without such a measurement is treated the way this paper treats a violation verdict without a rule --- as not yet a judgement. == The conformity check Given a passage and the rule inventory, the conformity check returns, per rule, one of three verdicts: #strong[conforms], #strong[conflicts], or #strong[not applicable]. A topic gate keeps the third verdict honest: a rule whose subject matter is absent from the passage produces no finding at all, rather than a vacuous "conforms". The instructive result is #emph[which] engine may judge #emph[which] rule. A single zero-shot inference engine --- a natural-language inference model asked whether the passage entails a violation hypothesis --- was measured first and scored 4 of 16 on the golden set of that time: subtle grammatical distinctions such as "a fact cannot be true" are exactly what a similarity-trained judge misses, which is this paper's opening claim returned as an experimental result. The engine was therefore demoted, not discarded, and each rule is now judged by the engine its own content demands: - #strong[Syntax rules] are judged on the dependency parse. The truth-bearer rule R-GG-001 fires when a parse configuration obtains --- the lemma #emph[fact] or #emph[Sachverhalt] as subject under the predicate #emph[true] or #emph[false] --- not when suspicious vocabulary co-occurs. The rules that nothing follows from a #emph[sentence] (only from the proposition it expresses) and that a #emph[goal] is not a truth-bearer are detected the same way. - #strong[Lexical rules] are judged by the words they themselves ban or demand: the verification ban, the marketing register, the hedging budget. For these rules the word list is not a heuristic for the rule; it #emph[is] the rule's subject matter. - #strong[Semantic rules] --- in the present inventory, the metaphor ban --- keep the inference engine, but contrastively: the passage is scored against a violation hypothesis #emph[and] a conform hypothesis stored on the rule, and only a clear margin between the two yields a verdict. These findings are advisory by tier. The rules of the house writing guide `famulus-writingguide-1` (R-LG-027 to R-LG-055) bring detectors of their own, which decide on the same dependency parse by lemma, part of speech and dependency relation; a word in quotation marks counts as mentioned, not used. Under this division the golden set is met in full: re-run on 20 October 2026, after the metaphor ban had been revised into the writing guide's rule R-LG-039, it scores 17 of 17 verdicts, 12 of 12 conflicts and 5 of 5 conforming counterparts, with no false positive on the not-applicable passages. Every finding names its rule, its engine, and its evidence --- a parse configuration, a matched expression, or an inference margin --- so a contested verdict can be taken apart at the level where it was made. == Logical relations across a collection The second service turns the judgement outward, from a passage against rules to a sentence against a corpus. Given a test sentence A and a collection, it returns every sentence B for which B #strong[implies] A, A implies B, the two are #strong[equivalent], or B #strong[contradicts] A --- with each finding addressed, as always, to (document, page, sentence). Pairwise inference over a whole collection is not feasible directly, and the query philosophy of the PDAI platform forbids it anyway: the most restrictive fast filter runs first. The scan is therefore a funnel. A BM25 index over the sentences of the collection's corpus file supplies recall (`ai_lemma_index.stanza.pipeline.bm25_hits`, called from `lwgrammar_reference.logical_relations`): word-level BM25 over the sentence text and its lemmatised form, fused for German and French with a character 4-gram index, returns the top candidates for A. It replaced the vector store over a multilingual embedding @chen2024bgem3, which was removed on 20 October 2026; on 200 paraphrase probes BM25 finds the source sentence in the top 50 for 0.830 of them and in the top 10 for 0.725, the vector store did for 0.895 and 0.890 @grasshoff2026famulusdatalayer, so a paraphrase of A that shares few words with B is now more often missed at this stage. Only this candidate slice reaches the judge, a multilingual inference cross-encoder @laurer2024nli that scores each pair in both directions. The direction matters twice over. Entailment is asymmetric, so B-implies-A and A-implies-B are distinguished and their conjunction reported as equivalence; contradiction, by contrast, is symmetric, and the scan exploits that as a guard --- a contradiction is reported only when it holds in #emph[both] directions, which was measured to suppress the spurious one-directional contradictions that negated phrasings of A otherwise provoke. The golden test seeds the measurement. Ten sentences were drawn deterministically from the karman-nachlass collection --- the technical reports and correspondence of Theodore von Kármán's Nachlass, 663,972 parsed sentences --- and one of them fixed as B₁: a hydraulics report sentence stating that Colorado River water must be lifted about 1,700 feet over a mountain range. Two test sentences were written down with their verdicts in advance: A1, a paraphrase that B₁ implies, and A2, its gravity-flow negation that B₁ contradicts; the other nine seeds are neutral to both. The cross-encoder reproduces all 20 designed verdicts. The full funnel then runs both test sentences against the entire collection (these runs were measured with the former vector-store recall): in both runs the seeded B₁ is retrieved with the designed relation --- as an implication of A1 among 21 non-neutral findings, as a contradiction of A2 among 32 --- with recall in 1--13 seconds and the verdict stage near 50 seconds for 200 candidate pairs scored in both directions. The scan also returns what no seed predicted but the design hoped for: the same report's neighbouring formulations of the lift, found independently on other pages, each with its address. #arxivai.method-box(title: [One discipline, two directions])[ The conformity check reads a passage against the rule inventory; the relation scan reads a corpus against a sentence. Both refuse the shortcut this paper argues against: neither reports a verdict from similarity alone. Similarity only nominates candidates; the verdict is an inference with a direction, and it carries its evidence and its address. ] Both services, together with the dictionary lookup, the mode compiler, and the rule-submission path, are served from one process that keeps the linguistic models warm and attaches the collection databases read-only --- one language institution consulted over the local network, rather than a copy of its rules pasted into every prompt. = Guarding what a model writes The services so far judge a text that exists. A language model that revises or writes text for the workspace needs the same rules before its output reaches a reader. The case that made this necessary was a lectoring run on a German paper about the Famulus platform: 136 paragraphs were revised under one instruction, which asked for "brilliant, eloquent, vividly readable German". The revised paragraphs praised what the author had written ("remarkable", "masters three heterogeneous holdings"), added intensifiers and remarks about the text, and lost propositions of the source. None of this broke a rule of grammar in the school sense; every case broke a rule of use of the practice the paper belongs to --- an author states his claims, and a lector does not grade them. == Task forms, context, and measurements LWgrammar is therefore the only source of linguistic instruction for every model call that writes or rewrites text, whatever the model. A client asks for a #emph[task form] (revise a paragraph, reformulate it, shorten it, answer from evidence, write notebook text, explain something to the author) and receives it as the system instruction. It passes a context: language, author and style family, scope, the whole document, the fixed terms of the document, the citable bibliography keys, and, for text without a source, the evidence the text is drawn from. After the model has written, the result is measured against its source. Every measurement is blocking: a revision passes only if none of them is worse than in the source, and every measurement names the rule that it enforces. #table( columns: (50%, 50%), align: (auto,auto,), table.header([Measurement], [Rule],), table.hline(), [propositions kept, none added, none reversed; logical particles unchanged], [R-LG-024], [no evaluative predicate about the text, its author or its subject], [R-LG-021], [no remarks about the text or its author], [R-LG-022], [no rule identifiers or instruction echoes in running prose], [R-LG-023], [one concept, one word], [R-LG-001], [no conflict with any registered usage rule], [R-GG-001 and following], [no inflation or register change against the author's style family], [R-LG-026], [no invented or lost citations; numbers with provenance], [R-LG-014, R-LG-006], [no aesthetic objective in the instruction itself], [R-LG-025], ) The last row checks the instruction, not the text: "brilliant" and "eloquent" are not admissible objectives, because they license the evaluation and inflation the other rows forbid. An owner's content directive --- strike, add, complete, cite --- changes content on purpose; the measurements it necessarily touches are reported but do not block. No directive licenses an evaluation, a meta remark or an intensifier. Text without a source, such as a synthesised answer, is checked for numbers and citations only where it goes beyond the evidence it was given; where no evidence was passed, those two measurements are reported as not applicable rather than as passed. The detectors of R-LG-021 to R-LG-026 are derived from the evaluation itself, and each change of a detector is written to a history table. == Measured on the damaged revisions Against the 136 damaged paragraphs, each measured against the paragraph as it stood before the lectoring run, the guard rejects 133. The identity control (each of the 141 source paragraphs measured against itself) fails in no case. The three revisions that pass are the limit of the present measurements. A positive control is still missing. Measured against the author's later rewrite of the whole paper, only 8 of 77 aligned paragraph pairs pass; that rewrite changes and extends content by the author's instruction, which was not passed to the guard as a directive, so the figure measures the difference between a reformulation and a rewrite, not a false-positive rate. A clean positive control needs revisions that the author accepted as faithful reformulations, and those are what the decision record below collects. The guard was also run on the other seven prose paragraphs of this section, as text without a source. A word in quotation marks counts as mentioned, not used, so the quoted "remarkable" and "brilliant" do not count as evaluations. Four of the seven paragraphs still fail: three because they speak of the author, one because it names rule identifiers. Here the author and the rules are the subject of the text, not remarks about it, and the guard does not yet tell the two apart. == Decisions become rule evidence The author decides on every revision the lector proposes. Each accept and each reject is recorded with the guard's verdict on that revision, and three cases carry information. A reject of a revision the guard had failed confirms the failed rules. An accept of a revision the guard had failed contests them: the rule receives counter-evidence and a candidate for its revision opens. A reject of a revision the guard had passed shows that something the author rejects is covered by no rule, and a candidate for a new rule opens. The author's decision outranks the machine's measurement, but no rule changes by itself: candidates stay open until the author turns one into a rule, revises or revokes the contested rule, or dismisses the candidate, which is kept. On 20 October 2026 the record held 60 open candidates: 28 contested, from accepts of revisions the guard had failed, and 32 missed, from rejects of revisions it had passed. None has yet been resolved, and no reject of a failed revision has yet been recorded as confirming evidence. An accept of a revision the guard had passed is not stored, so the record does not yet supply the positive control asked for above. == Senses in time: the store behind Case A The rules a guard applies are scoped, and so are the senses behind them. For Kepler the ai-dictionary holds two dated senses of the cause of planetary motion: `anima#kepler#motrix`, attested in the #emph[Mysterium cosmographicum] of 1596, and `vis#kepler#motrix`, attested from 1609 to 1621. The change between them is stored with Kepler's own words: in a note of the second edition of the #emph[Mysterium] (1621; kgw-08, Bl. 109, sentences 16--22) he writes that one has his principle of celestial physics if one substitutes #emph[vis] for #emph[anima], and that he had once believed the moving cause to be a soul, until he saw that it weakens with distance as the light of the Sun does. The store records that replacement as a relation between two senses with a locus and a year. It does not turn it into a synonymy: Case A showed #emph[anima] still in use in the #emph[Epitome]. The rule R-KEPLER-ANIMA-VIS is the consequence: a 1596 sentence is not to be read with the later sense. If the senses are dated, a specimen of text can be situated by them. This service (`lw_situate_specimen`\; not to be confused with the situating of a writing task in Section 6) measures the distance of a specimen to the dated works of an author by the frequencies of their most frequent word forms (Burrows' Delta), adds the hits of markers of dated senses such as #emph[anima motrix] and #emph[vis motrix], and returns a time window, a discussion context and the nearest works; below 250 tokens it returns no verdict. On 18 specimens from the Kepler volumes, each situated with its own volume excluded, the mean error of the estimated year is 8.8 years at 500 and at 1,000 tokens, against 9.4 years for a baseline that answers the mean year of the remaining works; 10 of the 18 true years fall inside the returned window. The improvement over the baseline is small, and the discussion context is less reliable than the year: a passage from the #emph[Astronomia nova] (1609), situated with that volume excluded, is dated 1605 with a window of 1596--1619, but assigned to the context "correspondence". Situating a specimen is therefore a measured service with declared error, not an attribution. = Relation to fine-tuning Fine-tuning a language model on authored text encodes a practice of use, but it does so implicitly: the practice is captured in the gradient updates rather than written down as rules, and it cannot be queried or corrected without re-training. Two things this paper's approach does that fine-tuning alone cannot: it makes the rules inspectable (the store is read; a decision can be traced to a cited rule) and it makes them revisable (a submitted correction takes effect immediately, for every consumer of the store, without a training run). The two approaches are complementary. A fine-tuned model learns the statistical regularities of the register; the institution supplies the declared exceptions --- the norm that must be followed precisely because it is a norm, not merely the most probable next token. A model that has been trained on Kepler will produce Keplerian prose; it will not, without the dictionary, know that #emph[lex naturae] in an #emph[Astronomia Nova] passage follows the ablative-rule sense and must not be glossed by the juridical-natural-law sense of a century later. For that it needs the locus with its coordinates, the competing sense with its contrast, and the rule that makes the distinction a distinction. The store is therefore consultable ground truth for any language model, fine-tuned or not. A model that consults the pack before drafting is not merely imitating the register: it is following the rules of the practice, which is what it means to write in the language of that practice in the first place. = Conclusion Semantic understanding of scientific texts is not a better embedding. It is a normative achievement: a formulation either follows a rule of a practice or it contradicts one, and the contradiction is only stateable with the rule in hand. Wittgenstein's later philosophy supplies the grammar of that achievement --- use, perspicuity, practice, hinges, a riverbed that can shift for reasons. The OED supplies the form in which a practice of use can be #emph[seen]. LWgrammar writes that form from the pages of a corpus, after OCR and linguistic analysis, and keeps every quotation on a page. The formulation score makes the thesis executable: no violation without a cited rule. The ai-dictionary makes the scope executable: one headword, many rules, each with an author, a period, and an address. And the two measured services make the judgement scale without surrendering it --- a conformity check whose engines are assigned by what each rule is about, and a relation scan in which similarity only nominates and inference decides. What this changes for historical scientific Latin is microscopic and therefore decisive. #emph[vis] is not one thing. #emph[anima] does not become #emph[vis] by translation. #emph[lex naturae] is not Kepler's phrase because #emph[lex] and #emph[natura] co-occur. Length is not a number. Each of those sentences is a rule, with an anchor, and a machine that cannot cite the rule has not understood the sentence. The companions take neighbouring tasks: AI Erasmus, the dictionary as an operation the scholar performs; the AI Partitur, the score that makes an agent's steps readable; the golden-query testbed, the thirteen questions against which those operations are held @grasshoff2026goldenqueries\; computational epistemology, the validity of reconstructed arguments. Further authors can be added to the reference library the way Wittgenstein was added; further national dictionaries can be added as authorities without storing their text; further publication profiles can be declared the way `arxivai` is declared. The inventory grows. The demand does not: a judgement of meaning names its rule. #bibliography(("bibliography.bib"))