← back to the parsed text
Specification · v0.4

Reading Philosophy Like Code

A semantics for rendering dense philosophical prose as a typed, colored, bracketed structure that exposes its logical form. This is the contract handed to anyone — human or agent — parsing a passage: apply these rules by reviewing every clause for its function, never by surface word-matching.

Two hard invariants

1 · text unchanged Every character of the source appears once, unchanged — same words, order, punctuation, paragraphs. You only add brackets, type-prefixes, and entity/operator markers.
2 · brackets balance

§1 The core idea — typed constituents

A sentence is decomposed recursively into nested constituents. Each constituent is a bracketed group with a type. The type colors the group's brackets and its own direct frame text (the connective / operator words that carry the logical form), while its nested children — the operands — carry their own types and colors.

Frame vs. operands. The frame is the functor — the words doing the logical work (“if … then …”, “is a consequence of”, “everything … is incompatible with …”). The operands are the contentful sub-phrases plugged in. Frame text takes the group color; each operand nests in its operand color. Parallel operands of one functor share one color.

Worked example (a universally-quantified relation):

for everything incompatible with being a mammal is incompatible with being a dog

c(for) q( everything incompatible with v(being a mammal) is incompatible with v(being a dog) )

Connectives are inline; constituents are bracketed

A bare operator that links sibling constituents is rendered as inline colored text — it is never given its own bracket. Brackets enclose constituents: operands, and frames that contain their operands.

Conceptual realism is a consequence of understanding the alethic modal articulation … as essential to their being …
«cr:Conceptual realism» `c:is a consequence of` ( understanding n(the alethic modal articulation …)
                         `c:as essential to` n(their being …) )

“is a consequence of” and “as essential to” link their operands, so they are inline red — not c(as essential to). A bracket around a lone connective wrongly makes it look like a third sibling beside the two operands. By contrast, the “if”/“then” inside c( if … , then … ) is colored frame-text, because that bracket encloses the whole conditional constituent, not a bare word.

the test

Does the bracket enclose operands? → keep it. Or just an operator word? → make it inline.

Same level → same color

Coordinated operators at one level share one color; parallel operands at one level share one color. When a frame has two operator-parts separated by intervening content — if x then y, not only x but y, both x and y — every part takes the frame's one color, so the eye reads them as the two ends of a single bracket; the operands they bracket likewise share their one operand color. This falls out automatically (operator-parts are frame-text of one typed group; parallel operands are sibling groups of one type). A solitary operator has nothing to coordinate with — no pairing to enforce.

§2 Types & colors

typemarks — by function
conditional / inferenceconditionals (if…then) and inference/dependence relations between contents: because, for (causal), hence, so (= therefore), it follows that, is a consequence of, is a condition of, is essential to, precludes, induces, requires, entails, underwrites.
quantificational / scopequantification/scope over a domain: every, all, no, nothing, none, any when binding a domain; not only…but also; only; except; without. Wrap the whole quantified statement, never the bare quantifier word.
modalalethic modality: possible, impossible, necessary, contingent, can, could, would, must, may, potentially, anomic (= lawless).
content / noun clausea contentful noun phrase or embedded how/what/that clause functioning as a unit — the “stuff” being related, vs. logical form: “how things are in themselves”, “what a fact is”.
predicate / operanda predicate or clausal argument plugged into a frame: “being a mammal”, “Coda were a dog”, “bridge it or reunite the two sides”.
entitya recurring developed concept — clickable, category-colored italic (see §4).
neutralplain grouping, no special logical role — descriptive glue. Use freely; not everything is logical form.

When a clause mixes types, pick the type of the dominant operation. “Nothing can be both a bivalve and a vertebrate” is fundamentally a quantified exclusion → green, even though “can” is modal. When a modal genuinely dominates (“it is impossible to exhibit … simultaneously”) → teal.

§3 Decomposition procedure — review every clause

  1. Find the main functor — what is the sentence fundamentally doing? conditional? inference/dependence? quantified statement? modal claim? plain predication?
  2. Wrap the logical core in a group of that type; its connective words become the group's colored frame-text.
  3. Identify the operands — the contentful arguments — and wrap each as a nested group of the right type (content, predicate, or a sub-frame if itself complex). Recurse.
  4. Parallel operands share a color.
  5. Leave purely descriptive glue (“in this work”, “as sketched in Chapter 8”) neutral.
  6. Mark entities wherever a developed concept appears, including coreferent/aliased forms (§4).
  7. The author's own literal brackets fold into the parse as groups ([begrifflich], (so)).
anti-pattern

Do not color a word because it's “in the quantifier list.” If a quantifier/pronoun merely heads a noun phrase and scopes nothing interesting, color the clause it governs or leave it neutral. Function over form, always.

§4 Entities & coreference — FIRST priority

§5 Relations — SECOND layer

After entities are fixed, record typed relations between concepts. The most important are the author's identity claims, where two apparently-separate concepts are asserted to be the same thing.

kindglyphmeaning
identicalthe two are the same (“two ways of talking about the same thing”)
isformone just is the other under a different description
paira constituting pair
consequence / requires / price→ / ⊢one is a condition / consequence / price of the other
contrastopposed pair (sense- vs reference-dependence)
dependsasymmetric dependence
arcstep in the chapter's argument

Each relation: { a:id, kind, b:id, note:"short quote/justification" }.

§6 DSL encoding

Brackets ( ) [ ] { } are interchangeable nesting brackets — choose glyphs for readability. A type prefix is a single letter immediately before an opening bracket, with whitespace (or another opener) before it; it colors the group's brackets and its direct frame text:

c(   conditional / inference   (red)
q(   quantificational / scope   (green)
m(   modal                      (teal)
n(   content / noun clause      (magenta)   [ @( alias ]
v(   predicate / operand        (blue)      [ &( alias ]
(    neutral                    (grey brackets, ink text)

Entities: «id:surface text» with optional final flag |def or |coref:

«cr:conceptual realism|def»   «oi:this doctrine I called|coref»   «world:nonmental world»

Inline operator — to tint a single linking connective without bracketing it (see §1): `c:word` / `q:word` / `m:word`.

Reserved characters (the source prose contains none): « » ` @ &. Everything else is literal text.

§7 What an agent returns

Given a passage + the shared entity registry (existing ids, names, glosses) + this spec, return JSON:

{
  "dsl": "<passage, encoded paragraph-by-paragraph; \n separates paragraphs>",
  "new_entities": [ { "id","name","category","gloss","aliases":[…] }, … ],
  "new_relations": [ { "a","kind","b","note" }, … ]
}

← back to the parsed text