lojban-rs implementation plan

The plan is split into focused documents under plan/. Code is the source of truth for implemented features; the plan tracks gaps and documents architecture.

Document Purpose
plan/RULES.md Agent workflow, #[jbo_ref] conventions, slug naming, status legend
plan/SCRIPTS.md Maintenance scripts and CI regeneration
plan/ARCHITECTURE.md Parser pipeline, Earley CFG, semantic rules, olog, Prolog
plan/OPEN.md Manual open tickets (MISSING, PARTIAL, AD HOC, …)
plan/READY.md Auto-generated implemented features — do not edit by hand

The document references @cll-md/ reference grammar book.

Quick start for agents

  1. Read plan/RULES.md before implementing any feature.
  2. Consult the CLL section(s) cited in the open ticket row.
  3. Add or update #[jbo_ref(...)] in code; keep plan/OPEN.md rows for non-ready work.
  4. Run bash scripts/regenerate_plan.sh (or at minimum sync_plan_ready.py + ref_audit.py --strict).

Regenerate

bash scripts/regenerate_plan.sh

Plan rules & agent workflow

This document must be kept up to date. Update the plan after implementing or fixing any features/tasks from it.

The plan is split under plan/ — see PLAN.md for the index. The document references @cll-md/ reference grammar book.

Rule: Read Before Implement

Before implementing any feature, you MUST read the corresponding CLL section(s) listed in the reference column. CLL sections contain the authoritative grammar definitions, examples, and edge cases needed for correct implementation. Do not implement from the feature description alone — always consult the source material first.

When implementing or fixing a feature: (1) add or update #[jbo_ref(...)] (Rust) or an @ref: comment block (.egg, Cargo.toml) with full metadata in code, (2) if still AD HOC / PARTIAL / MISSING, keep or update the row in OPEN.md, (3) run python3 scripts/sync_plan_ready.py and python3 scripts/ref_audit.py.

Reference Conventions

Code is the source of truth for implemented features. Each @ref: block in source holds: Feature, Status, CLL, PlanSection, and optional Deviation, Notes.

PLAN section Contents
OPEN.md (manual) ❌ MISSING, ⚠️ PARTIAL / ⚠️ AD HOC, ⏳ NEEDS EVAL, and rows still using @ref:plan.* without a real code anchor
READY.md (auto-generated) Extracted from code with Status: IMPLEMENTED or N/A — do not edit by hand

Code-first workflow

When you implement or fix a feature:

  1. Read the CLL section(s) cited in the open ticket row (if any).
  2. Add or update #[jbo_ref(...)] on the Rust item (or a const marker for module-level gaps). Use comment blocks only in .egg / Cargo.toml.
  3. If the feature is still AD HOC, PARTIAL, or MISSING, keep or update the matching OPEN.md row.
  4. Run python3 scripts/sync_plan_ready.py to regenerate READY.md from code.
  5. Run python3 scripts/ref_audit.py --strict and JBO_REF_STRICT=1 cargo build.

Migrating remaining gaps: use python3 scripts/migrate_plan_refs.py for templates. Completed features live in #[jbo_ref] (Rust), comment blocks (.egg/Cargo.toml), or src/plan_implemented.rs for bulk registry entries — then run sync_plan_ready.py.

See SCRIPTS.md for the full maintenance script reference.

Slug naming

Slugs follow layer.name and are stable across refactors:

Layer prefix Where Example
grammar. earley_word_grammar.egg rule alts grammar.sumti_6_zo, grammar.frees
morph. morphology (earley_morph_extract.rs, …) morph.segment_compound_cmavo
ast. AST conversion (earley_to_syntax.rs) ast.convert_sumti_6
semantic. semantics (jbo_parse.rs, jbo_prop.rs) semantic.parse_goi_rel
lujvo. lujvo decomposition (lujvo_decompose.rs) lujvo.needs_hyphen
egglog. rewrite rules (egglog_rules.egg) egglog.propositional-logic
olog. olog integration (src/olog/, …) olog.extract_olog
prolog. Prolog export (jbo_prolog.rs, …) prolog.prop_to_prolog
feature. Cargo feature flags (Cargo.toml) feature.approx-scalar-neg
plan. Temporary until code anchor exists plan.s1_1_audio_visual_isomorphism

Grammar rule alts use semantic names {cll_nonterminal}_{variant}. Tree extraction uses CLL-aligned disambiguation: longest-match for left-grouped ... repetition (CLL §21 rule 7), empty-alt preference for zero-width optional matches, shortest-base-alt for equal-span optional suffixes, and ParseTree::Ambig parse-forest nodes for remaining structural ambiguity.

Anchor formats

Rust (required — use #[jbo_ref], not hand-written /// @ref: comments):

#[jbo_ref(
    slug = "semantic.parse_sumti_atom",
    feature = "All sumti atom types",
    status = "IMPLEMENTED",
    cll = "§6.2, §6.6",
    plan_section = "2.4",
)]
fn parse_sumti_atom(...) { ... }

Egg / TOML comment block:

; @ref:grammar.sumti_6_zo
; Feature: ZO single-word quotation
; Status: IMPLEMENTED
; CLL: §19.10
; Notes: sumti_6_zo = ZO_clause any_word frees; word-1100 skips indicator merge after ZO
; PlanSection: 2.4

Validate with python3 scripts/sync_plan_ready.py, python3 scripts/ref_audit.py --strict, and JBO_REF_STRICT=1 cargo build after any change.


Status Legend



Plan maintenance scripts

Companion to RULES.md. Run bash scripts/regenerate_plan.sh to refresh the auto-generated sections and audit reports.

Detecting gaps and discrepancies

Script What it checks
python3 scripts/sync_plan_ready.py Regenerates plan/READY.md from code. Use --check in CI.
python3 scripts/ref_audit.py Open vs ready consistency, schema errors, stale file:line. Use --strict in CI.
python3 scripts/parse_ref_blocks.py Lists all code ref blocks; --strict for schema. Used by build.rs.
python3 scripts/migrate_plan_refs.py Lists open @ref:plan.* rows in OPEN.md and suggests migration templates.
python3 scripts/grammar_audit.py CLL Ch 21 formal non-terminals vs grammar coverage.
python3 scripts/cll_coverage.py CLL sections in plan corpus vs cll-md/ files.
python3 scripts/grammar_ambiguity_probe.py Reports ParseTree::Ambig nodes on a test corpus; writes scripts/grammar_ambiguity_report.json.

Regenerate everything

bash scripts/regenerate_plan.sh

This runs, in order:

  1. python3 scripts/sync_plan_ready.py — regenerate READY.md from code #[jbo_ref] / @ref: blocks
  2. python3 scripts/ref_audit.py — consistency report at scripts/ref_audit_report.md
  3. python3 scripts/cll_coverage.py — CLL section coverage at scripts/cll_coverage_report.md
  4. python3 scripts/grammar_audit.py — CLL Ch 21 non-terminal coverage at scripts/grammar_audit_report.md

CI on main runs the same pipeline and commits updated plan/READY.md plus audit reports when they drift.

After any feature change

python3 scripts/sync_plan_ready.py
python3 scripts/ref_audit.py --strict
JBO_REF_STRICT=1 cargo build

Architecture & tooling

Human-readable description of the parser pipeline, semantic layers, and subsystems. Open gaps are tracked in OPEN.md; completed features are auto-listed in READY.md.

Pure CFG Earley

The word-level Earley recognizer is a pure CFG: earley_word_schema.egg saturates all chart items with no ordered-choice pruning.

Behaviour

Area Behaviour
Recognition Egglog Earley saturation keeps every competing Item and ParseTreeEdge in the chart; recognition itself does not prune alternatives by rule order.
Tree extraction earley_extract.rs rebuilds one tree (or a local forest) from saturated edges using CLL-aligned tie-breaking: longest child span, then zero-width _empty alts, then shortest alt name; unresolved equal-span ties become ParseTree::Ambig (see policy below).
lerfu_word Four CLL alternatives in earley_word_grammar.egg: lerfu_word_by (BY_clause), lerfu_word_lau_chain (LAU_clause + nested lerfu_word), lerfu_word_tei_lerfu_foi (TEI_clause + lerfu_string + FOI_clause), lerfu_word_any_bu (ANY_WORD_clause + BU_clause).
sumti Quantified sumti follow the CLL sumti_5 hierarchy (sumti_5_quant_sumti_6, sumti_5_quant_selbri, and rel/KU variants); outer quantifiers are not handled by shortcut non-terminals that skip sumti_5.
paragraph Two paragraph alts: paragraph_indics_paragraph (indicators + paragraph) and paragraph_indics_fragment (fragment only).
Indefinite descriptions When sumti_5_quant_sumti_6 and sumti_5_quant_selbri both match after a quantifier, (NegLookaheadPos "sumti_5_quant_sumti_6" 1 "selbri") blocks the sumti_6 branch if selbri can start at that dot; Phase B neg-inhibit in earley_word_extract.rs materializes the guard before tree extraction.

Tree extraction policy (src/earley_extract.rs)

  1. Longest match — maximize child_end at each dot (CLL §21 rule 7, left-grouped ...; not PEG).
  2. Zero-width tie — prefer alt ending in _empty (CLL optional []).
  3. Equal non-zero span — prefer shortest alt name (base rule over optional suffix, e.g. sumti_6_koha over sumti_6_koha_frees).
  4. Remaining equal-span ties — emit ParseTree::Ambig { alternatives } (parse forest).

AST resolution (src/earley_to_syntax.rs): resolve_ambig_first_ok tries each alternative at root and hot spots (sumti, paragraph, lerfu_word) until conversion succeeds.

Verification


Comprehensive Feature Gap Analysis: CLL vs lojban-rs

Our parser must follow the grammar of @cll-md/chapter-grammars.md so no rule or part of it can be omitted. If there is or planned a deviation from that it must be done through a feature flag and reported by editing this document. Thus no simplficatons to the formal grammar are allowed. Fix related issues if any.

The codebase must be clean, stramlined, avoid duplication, avoid hardcoding where needed. the codebase must try to be generic where needed.

Ad hoc / architecture principles (avoid when implementing fixes):

  1. No string comparisons on cmavo names — use selma'o checks, generated tables, or AST tags instead.
  2. No hand-enumerating optional-position variants — prefer optional ([]) and repetition (...) in grammar; expand at generation time.
  3. No layer crossing — morphology should not hide grammar structure (e.g., ZO/ZOI must consume quoted content) unless CLL explicitly says so.
  4. No manual semantic tables in parser code — move tables like indicator_bridi_tail or ZAhO pairings into typed_dictionary.rs or external data files.

Gaps, deviations, and missing features are tracked once each in the section tables below (grouped by CLL topic). Do not maintain a separate duplicate index.


14. SEMANTIC RULES (egglog_rules.egg)

14.0 Rewrite rule taxonomy (3a–3d)

Tersmu/camxes-rs groups rewrite rules into four categories. lojban-rs implements the same rules under the §1–§23 section names below.

Category Maps to egglog_rules sections Key rules
3a Logical simplification §1 Propositional Logic Double negation, De Morgan, Eet identity, idempotency, commutativity, associativity, implication/equivalence elimination
3b Lojban-specific §3 SE-Conversion, §4 Scalar Negation, §5 Tanru, §6 Modal/Tense se se cancel, nai/to'e, tanru collapse, modal idempotency
3c Quantifier normalisation §7 Quantifiers, §7c scope conditional, §15 (Rust pre-lowering) Vacuous restriction strip, ¬∃↔∀¬, FreeIn conditional rules
3d Anaphora hints §12 Anaphora (pre-lowering in Rust) ri/ra resolved in jbo_parse before e-graph lowering

14.1 Implemented Rules (Internal egglog rules — no direct CLL mapping)

14.2 Testing Strategy (CLL Ch 2 — examples throughout)


15. QUANTIFIER SCOPE & naku BOUNDARIES — IMPLEMENTATION

15.1 Problem Statement

egglog rewrite rules are unconditional pattern matches. They can match structural patterns like (PAnd p q) but cannot express predicate conditions like "x is not free in q". This blocks:

The negation push-through rule (¬∃x.P ↔ ∀x.¬P) already handles the core naku boundary case, but partial distribution under quantifiers was the gap.

15.2 Solution: Two-Phase Architecture

The solution uses two complementary phases that together cover all cases:

Phase 1 (Rust pre-lowering)          Phase 2 (egglog saturation)
─────────────────────────            ──────────────────────────
simplify_prop() on JboProp           FreeIn facts + conditional rules
    │                                     │
    ├─ Partial distribution               ├─ Partial distribution
    ├─ Vacuous quantifier removal         ├─ Vacuous quantification
    │                                     ├─ Quantifier over implication
    │                                     │
    ▼                                     ▼
  Lowered to egglog ◄──────────── FreeIn(BoundVar(v), subprop) = 0/1

Phase 1 handles the initial parse form before saturation. It's fast, deterministic, and handles the common case.

Phase 2 handles forms discovered during equality saturation. When egglog rewrites produce new quantified forms, the conditional rules can simplify them.

15.3 Phase 1: Rust Pre-Lowering Simplification

File: jbo_prop.rspub fn simplify_prop(prop: &JboProp) -> JboProp

Core mechanism: A recursive contains_bound_var(v, prop) function traverses JboProp (including HOAS closures) to check if BoundVar(v) appears in a subformula. When it doesn't, the quantifier is vacuous or partial distribution applies.

Rules implemented (6 distribution + 1 vacuous):

Rule Pattern Condition
∃-conjunction-left ∃x.(P∧Q) → (∃x.P)∧Q x∉FV(Q)
∃-conjunction-right ∃x.(P∧Q) → P∧(∃x.Q) x∉FV(P)
∀-disjunction-left ∀x.(P∨Q) → (∀x.P)∨Q x∉FV(Q)
∀-disjunction-right ∀x.(P∨Q) → P∨(∀x.Q) x∉FV(P)
∀-conjunction-left ∀x.(P∧Q) → (∀x.P)∧Q x∉FV(Q)
∀-conjunction-right ∀x.(P∧Q) → P∧(∀x.Q) x∉FV(P)
∃-disjunction-left ∃x.(P∨Q) → (∃x.P)∨Q x∉FV(Q)
∃-disjunction-right ∃x.(P∨Q) → P∨(∃x.Q) x∉FV(P)
∀-implication ∀x.(P→Q) → (∃x.P→Q) x∉FV(Q)
∃-implication ∃x.(P→Q) → (∀x.P→Q) x∉FV(Q)
Vacuous ∀ ∀x.P → P x∉FV(P), no restriction
Vacuous ∃ ∃x.P → P x∉FV(P), no restriction

Hook point: egglog_lower.rs:lower_texticule() calls simplify_prop() before lowering each TexticuleProp.

Helper functions (all in jbo_prop.rs):

Tests: 6 unit tests in jbo_prop::simplify_tests covering vacuous removal, partial distribution, and negative cases.

15.4 Phase 2: egglog FreeIn Facts + Conditional Rules

Schema (egglog_schema.egg):

(function FreeIn (JboTerm JboProp) i64 :merge (max old new))

Lowering (egglog_lower.rs):

Conditional rules (egglog_rules.egg §7c) — 12 rules:

; ∃x.(P∧Q) → (∃x.P)∧Q when x∉FV(Q)
(rule ((PQuant (Exists) restr (PAnd p q) v)
       (= (FreeIn (BoundVar v) q) 0))
      ((union (PQuant (Exists) restr (PAnd p q) v)
              (PAnd (PQuant (Exists) restr p v) q))))

Full list:

  1. ∃-conjunction: (P∧Q) with x∉FV(Q) and x∉FV(P)
  2. ∀-disjunction: (P∨Q) with x∉FV(Q) and x∉FV(P)
  3. ∀-conjunction: (P∧Q) with x∉FV(Q) and x∉FV(P)
  4. ∃-disjunction: (P∨Q) with x∉FV(Q) and x∉FV(P)
  5. ∀-implication: (P→Q) with x∉FV(Q)
  6. ∃-implication: (P→Q) with x∉FV(Q)
  7. Vacuous ∀: any body with x∉FV(body)
  8. Vacuous ∃: any body with x∉FV(body)

Key design decision: Using (= (FreeIn ...) 0) instead of (not (FreeIn ...)) because egglog's not requires built-in Bool type, but FreeIn returns i64. The = 0 check achieves the same semantics.

15.5 How the Two Phases Interact

Input: ∃x.(P(x) ∧ Q)
         │
         ▼
Phase 1: simplify_prop()
  - contains_bound_var(1, Q) = false
  - Apply ∃-conjunction-left: (∃x.P(x)) ∧ Q
         │
         ▼
Lowering: egglog_lower.rs
  - Lower (∃x.P(x)) ∧ Q to egglog
  - Generate FreeIn facts:
    - FreeIn(BoundVar(1), P(BoundVar(1))) = 1  [P contains x]
    - FreeIn(BoundVar(1), Q) = 0  [Q does not contain x]
         │
         ▼
Phase 2: egglog saturation
  - If equality saturation produces ∃x.(P∧Q) again
  - §7c rule fires: (= (FreeIn (BoundVar v) q) 0) → union with (∃x.P)∧Q

15.6 Status Updates

§14.1: Added §7c Quantifier Scope Conditional Rules to implemented rules list.

§15.7 naku Negation Boundaries — How They're Solved

The CLL §16.9 rule "naku ro da P ↔ su'o da naku P" is semantically identical to ¬∀x.P ↔ ∃x.¬P, which was already implemented in §7 (negation push-through). The partial distribution rules in §7c complete the picture:

This is the composition of existing §7 rules + new §7c rules — no separate naku-specific rules needed.


16. OLOG INTEGRATION (dzaske)

Ologs (Ontology Logs) are a category-theoretic knowledge-representation format. lojban-rs embeds the dzaske olog system with bidirectional integration: extract schemas from parsed Lojban, validate instance data, run relational queries, and compose with the egglog e-graph.

Theory & sources: docs/ologs.md, docs/olog/sources/ (Spivak & Kent 2012, Patterson 2017, Lambert & Patterson 2024).

Note: Olog integration uses Cargo features olog and olog-proofs (both default-on). See @ref:feature.olog.

16.1 Core extraction

Status Feature Impl Ref Notes
extract_olog — JboProp → Olog @ref:olog.extract_olog Types, aspects, facts, 2-cells from brivla and connectives
populate_instances — JboTerm → OlogInstanceData @ref:olog.populate_instances Event IDs, filler instances, aspect applications

Extraction mapping:

Semantic construct Olog construct
JboRel::Brivla("klama") with n args klama_event, klama_x1klama_xN, filler types
JboRel::PermutedRel(n, r) Dual aspect + dual(r_xN) = r_xN_dual fact
JboRel::Tanru(r1, r2) {r1}_{r2}_event, recurses both parts
Prop::Connected(Impl, p1, p2) Implication 2-cell
Prop::Not(inner) 2-cell inner_event ⊆ ⊥

16.2 Validation & querying

Status Feature Impl Ref Notes
Structure validation @ref:olog.validate_structure Types, aspects, instance membership
Fact validation @ref:olog.validate_facts Commutative diagram facts
2-cell validation @ref:olog.validate_two_cells Subsumption / implication
Query engine @ref:olog.run_query_file Load + execute JSON queries
Load olog JSON @ref:olog.load_olog olog_data/ologs/*.json

16.3 Bundled corpus

Status Feature Impl Ref Notes
dzaske example ologs (12 files) @ref:olog.bundled_corpus olog_data/ologs/
Instance data (9 files) @ref:olog.bundled_corpus olog_data/instances/
Query files (12 files) @ref:olog.bundled_corpus olog_data/queries/
Integration tests @ref:olog.test_suite cargo test --test camxes_olog
JSON Schema olog_schema/schema.json, instance_schema.json, query_schema.json

16.4 Egglog composition (Layers A/B/C)

Status Feature Impl Ref Notes
Layer A — olog → egglog rules @ref:olog.egglog_layer_a olog_to_egg_rules; inject before saturation
Layer B — e-graph → olog @ref:olog.egglog_layer_b extract_olog_from_egraph
⚠️ PARTIAL Layer C — queries in e-graph @ref:olog.egglog_layer_c Tabulator, Tensor fall back to empty
Egglog type validation @ref:olog.egglog_type_validation type_schema.egg, type_rules.egg

Tests: cargo test --test camxes_olog_egglog.

17. PROLOG EXPORT

Prolog source generation from Lojban semantics via a target-neutral Prolog IR (src/prolog/: AST + tokenizer + precedence-climbing parser + dialect-aware pretty-printer). Two emission dialects behind PrologDialect:

The legacy SWI-dialect string API (prop_to_prolog, semantic_results_to_prolog, eval_text_to_prolog) is preserved for backward compatibility; new code uses the _dialect variants. References: docs/prolog/references.md.

Lojban construct Prolog output Impl
.i sentences Facts ending with . PrologMode::Fact
Implications (.ijanai etc.) Rules with :- (SWI) / --> term (Tersmu) PrologMode::Rule
Questions (ma) ?- (SWI) / ? (Tersmu) queries PrologMode::Query
Logical negation \+ lower_prop
Conjunction / disjunction , / ; connective mapping
Biconditional (.ijo) <-> term lower_prop (fixed)
Relational quantifier (bu'a) rel_quant/3 (preserved) lower_prop (fixed)
Nested quantifiers (ro da su'o de) distinct de Bruijn vars VarCtx::depth (fixed)
Non-veridical gadri (le) non-veridical: side-fact (Tersmu) / \+\+ (SWI) lower_prop + SideNote
PredNamed / MexSelbri in term position call/1 wrapper (fixed) lower_term / lower_mex
VUhU operators SWI arithmetic functors (+,-,*,…) / cmavo (Tersmu) operator_functor_dialect
=.., is/2, DCG -->, cut ! parse + render src/prolog/{lexer,parser,pretty}.rs
Status Feature Impl Ref Notes
prolog IR module (AST + lexer + parser + pretty) src/prolog/ Round-trippable; tests/prolog_round_trip.rs
PrologDialect (Swi / Tersmu) src/prolog/pretty.rs Dialect flag in pretty-printer + lowerer
prop_to_prolog @ref:prolog.prop_to_prolog Single proposition → clause (SWI)
semantic_results_to_prolog @ref:prolog.semantic_results_to_prolog Full program from semantic results (SWI)
prop_to_prolog_dialect / semantic_results_to_prolog_dialect src/jbo_prolog.rs Dialect-aware lowering
eval_text_to_prolog @ref:prolog.eval_text_to_prolog Text → Prolog; WASM prolog JSON key (SWI)
eval_text_to_prolog_dialect @ref:prolog.eval_text_to_prolog_dialect Text → Prolog in a chosen dialect
WASM parse_lojban_with_dialect src/lib.rs prolog_dialect option; default Tersmu
Golden tests vs examples/*.loj tests/prolog_golden.rs Characterization mode; strict via env var
SWI execution tests tests/prolog_swi.rs Skipped if swipl absent
✅ N/A CLI -P / --prolog flag No binary yet; library + WASM only

18. SEMANTIC EQUIVALENCE & OUTPUT FORMATS

18.1 Semantic equivalence

Status Feature Impl Ref Notes
check_equiv / check_equiv_with_limit @ref:semantic.check_equiv Two texts → same e-class after saturation
Equivalence tests tests/camxes_egglog.rs

18.2 Output formats

Format API Status
Logical form eval_show
Canonical Lojban jbo_show
Graph JSON jbo_tree
Prolog source eval_text_to_prolog / eval_text_to_prolog_dialect ✅ (SWI + Tersmu dialects)
Egglog e-graph JSON run_egglog_analysisgraph_json
Olog summary JSON summarize_olog ✅ (library); ⚠️ WASM partial

18.3 Future CLI (tersmu parity)

lojban-rs has no main.rs today. tersmu/camxes-rs CLI flags for reference when a binary is added: --json, -E/--egglog, --equiv=S, -O/--olog, --olog-schema=F, -P/--prolog, -l/--loj, -j/--jbo.


Open Tickets

Manual tracking for MISSING, PARTIAL, AD HOC, NEEDS EVAL, and @ref:plan.* rows without a code anchor. Completed work moves to code #[jbo_ref] entries and appears in READY.md after sync_plan_ready.py.

3. TENSES & MODALS (CLL Ch 10)

Simple tense cmavo from CLL §10.2–10.11 (PU/ZI/FAhA/VA/ZAhO/ZEhA/VEhA/VIhA/MOhI/TAhE/ROI/re'u/FEhE/KI/CUhE/CAhA and compounds) are implemented — see auto-generated §3.1 Spatial Tenses, §3.2 Temporal Tenses, and §8.1–8.2. Remaining Ch 10 gaps are tracked in §3.6 below (§10.23 tense vs modals). §10.26–10.28 are reference/summary (N/A for parser).

3.6 Complex Tense Constructs (remaining)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL Tenses versus modals (semantic distinction) §10.23 @ref:semantic.s8_2_tenses_versus_modals WithEventAs(term, EventReferenceRole)TenseBalvi vs ModalMukti selected via is_tense_tag in connective handlers. Egglog layer still treats both as WithEventAs.

5. NEGATION (CLL Ch 15)

5.2 Scalar Negation (CLL Ch 15)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL na'e(na'e(r)) = r scalar approximation §15.3 @ref:feature.approx-scalar-neg Behind approx-scalar-neg feature flag
⚠️ PARTIAL to'e(r) ≈ ¬PRel(r) scalar approximation §15.4 @ref:feature.approx-to-e Behind approx-to-e feature flag

5.6 Metalinguistic Negation (CLL Ch 15)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL na'i (metalinguistic negation) §15.10 @ref:plan.s5_6_na_i_metalinguistic_negation Parsed as Free::Indicator; metalinguistic negation (rejecting presupposition) requires discourse-level analysis not available in proposition-level pipeline — semantic effect cannot be implemented without discourse context
⚠️ PARTIAL jo'a (metalinguistic affirmation) §15.10 @ref:plan.s5_6_jo_a_metalinguistic_affirmation Parsed as Free::Indicator; metalinguistic affirmation (accepting presupposition) requires discourse-level analysis not available in proposition-level pipeline — semantic effect cannot be implemented without discourse context

6. QUANTIFIERS (CLL Ch 16)

6.3 bu'a-series (selbri variables)

bu'a/bu'e/bu'i (selma'o GOhA) are second-order predicate-logic relation variables (CLL §16.13). Core quantification, xi subscripts (bu'a xi re == bu'e), and prenex su'o/ro forms are implemented — see @ref:semantic.tu_is_buha in READY.md. The remaining AD HOC special cases are tracked here as a single consolidated ticket.

Status Feature CLL Reference Impl Ref Notes
⚠️ AD HOC bu'a-series special cases §7.6, §7.12, §16.7, §16.13, §19.6 @ref:semantic.parse_terms_helper Consolidated tracking of the bu'a-series AD HOC special cases. (1) Prenex (this anchor) — su'o bu'a zo'u is grammatically a sumti (indefinite description), but bu'a-series indefinite descriptions cannot be imported from the prenex (CLL §16.13), so parse_terms_helper binds the relation variable locally via do_buha/rquantify rather than via generic prenex term binding. (2) **parse_tu buha branch** — bu'a-series are second-order relation variables, not ordinary predicates, so they require their own bridi construction path (do_buha) rather than the generic brivla binding; the parse_tu row in §7.3 covers this together with the du/ka/ni/poi'i special cases. Both are principled special cases forced by second-order predicate logic, not generic-rule workarounds.

7. ABSTRACTIONS (CLL Ch 11)

7.3 Event Contour Relationship (CLL Ch 11)

Status Feature CLL Reference Impl Ref Notes
⚠️ AD HOC validate_zaho_abstractor_pairing §11.11 @ref:semantic.validate_zaho_abstractor_pairing Hardcoded ZAhO contours per abstractor
⚠️ AD HOC is_variable_free §7.4, §7.5 @ref:semantic.is_variable_free Hardcoded assignable cmavo lists
⚠️ AD HOC parse_tu special cases §5.10, §7.14 @ref:semantic.parse_tu Special cases for du, ka/ni, poi'i. The buha branch is tracked separately under §6.3 (bu'a-series).

9. MEKSO / MATHEMATICS (CLL Ch 18)

9.7 Mekso Selbri & Conversions (CLL §18.7, §18.11, §18.18–18.19, §18.21)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL MOhE sumti-to-operand (mo'e) in mekso bridi §18.18 @ref:plan.s9_7_mohe_sumti_to_operand_in_mekso CLL Ex. 18.126 (li mo'e re ratcu su'i mo'e re ractu du li re) rejected by Earley. AST path exists (convert_operand_3_3); grammar/mex bridi path needs verification.
⚠️ PARTIAL NIhE selbri-to-operand (ni'e) in compound mekso §18.18 @ref:plan.s9_7_nihe_operand_compound_mekso Selbri → operand via ni'e + selbri + te'u (NIhE, §18.18). li ni'e ni clani te'u parses; chained Ex. 18.125–18.127 (pi'i ni'e ni ganra te'u … du li ni'e ni canlu) need end-to-end verification. Operator→operand via ni'e nu'a is implemented — @ref:semantic.ni_e_nu_a_operator_to_operand.
⚠️ PARTIAL Logical/non-logical connectives within mekso §18.17 @ref:plan.s9_7_logical_non_logical_connectives_within_mekso mex grammar has joik/ek alternatives; verify with CLL examples. — earley_word_grammar.egg, jbo_parse.rs
⚠️ AD HOC is_null_mex / is_null_op / null_jbo_mex §18.2 @ref:semantic.is_null_mex Hardcoded tu'o/ge'a null handling

10. LETTERALS (CLL Ch 17)

CLL §17.14 auxiliary lerfu-word cmavo (this chapter):

Cmavo Selma'o CLL role
bu BU §17.4 — makes preceding word a lerfu word
ga'e, to'a BY §17.3 — upper / lower case shift
tau LAU §17.3 — case-shift next lerfu word only
lo'a, ge'o, je'o, jo'o, ru'o BY §17.5 — alphabet shifts (Latin, Greek, Hebrew, Arabic, Cyrillic)
se'e BY §17.13 — following digits are a character code
na'a BY §17.5 — cancel all shifts
zai, ce'a, lau LAU §17.5/17.7 — custom alphabet, font, punctuation
tei, foi TEI / FOI §17.6 — compound lerfu word delimiters

Not letterals (were incorrectly listed under the old §9.8 “Acronyms” ticket): la'u (BAI modal “with quantity”, §9.6/§10.25), te'u (TEhU mekso/vector terminator, §18.15/§18.18), ce'u (KOhA abstraction focus, §7.11) — implemented elsewhere; see auto-generated §7.11, §9.6, §18.15.

Core BY/LAU/teifoi/bu parsing is implemented — see auto-generated §9.8 lerfu entries and @ref:grammar.lerfu_word_lau_chain. Open gaps below.

10.1 Shift & Alphabet Cmavo (CLL §17.3, §17.5, §17.7)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL LAU/BY shift stack (zai, ce'a, tau, lau, lo'a/ge'o/…, na'a) §17.3, §17.5, §17.7, §17.14 @ref:plan.s10_1_lau_by_shift_stack Grammar: lerfu_word_lau_chain + BY shifts; AST: LerfuShift/LerfuShifted. Verify CLL examples for zai .devanagar.bu, ce'a font, tau single-letter case, na'a reset. Non-Lojban glyph mapping still partial — @ref:semantic.non_lojban_alphabets_ge_o_je_o_etc.
⚠️ PARTIAL se'e character codes → Unicode glyph §17.13 @ref:plan.s10_1_se_e_unicode_evaluation Parsed as BY+PA digits (@ref:semantic.se_e_character_codes); not evaluated to codepoints/characters.

10.2 Acronyms & Lerfu Names (CLL §17.12)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL Acronyms as cmevla and la me lerfu-string §17.12 @ref:plan.s10_2_acronyms_lerfu_names CLL §17.12 uses glued cmevla (.dyny'abub.) and la me dy ny. .abu — no dedicated cmavo; verify standard lerfu + la/me paths parse CLL Ex. 17.40–17.44.

10.3 Mathematical Lerfu Strings (CLL §17.11)

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL Lerfu strings in mekso (functions, ordinals, subscripts) §17.11 @ref:plan.s10_3_mathematical_lerfu_strings ma'o + lerfu, MOI/MAI/xi on lerfu strings; shift-isolation rule (math vs running text). Partial via existing mex/lerfu grammar; verify CLL §17.11 examples end-to-end.

11. ATTITUDINALS & INDICATORS (CLL Ch 13, 21)

11.1 Vocatives (CLL Ch 6, 13)

Status Feature CLL Reference Impl Ref Notes
⚠️ AD HOC Vocative free_coi_selbri_dohufree_doi_rels_cmevla_dohu §32 @ref:grammar.free_coi_selbri_dohu 10 rules enumerate COI/DOI variants; CLL vocative non-terminal inlined into free. Preferred: 3 CLL alternatives
⚠️ PARTIAL Relative clauses in vocatives §8.9 @ref:grammar.free_coi_selbri_dohu, @ref:semantic.parse_rels Grammar may parse; needs test coverage and semantic verification
⚠️ AD HOC indicator absent as non-terminal §411 @ref:grammar.indicators No explicit indicator non-terminal

11.2 Miscellaneous (CLL Ch 13, 19)

Status Feature CLL Reference Impl Ref Notes
⚠️ AD HOC indicator_bridi_tail UI→selbri mapping §13.2–13.13 @ref:semantic.indicator_bridi_tail 40+ UI cmavo manually mapped to selbri
⚠️ AD HOC eval_free_with_context cmavo branches §7.13, §13.9, §19.11 @ref:semantic.eval_free_with_context String-inspected cmavo branches for da'o/fu'e/etc.

11.3 Formal Grammar (CLL Ch 21)

Status Feature CLL Reference Impl Ref Notes
⚠️ AD HOC frees helper injected everywhere §9, §32 @ref:grammar.frees frees added as fixed sequence after many terminals instead of # preprocessor

17. PROLOG EXPORT — tersmu parity gaps

The Prolog IR (src/prolog/), dialect flag (PrologDialect::Swi / Tersmu), AST lowerer, tersmu display-format path (eval_text_to_tersmu_lines, behind tersmu-parity), and the rendering/AST fixes (connective normalization, is/2 arithmetic goals, AbsPred/AbsProp/Moi lowering, tanru seltau in convert_selbri_3) are implemented — see auto-generated §17 in READY.md. Remaining examples/*.loj byte-parity gaps are upstream PARSER/semantic issues (forethought ganai…gi / afterthought .e/.ijanai logical connection not producing Connected props), tracked under §3/§5.

Status Feature CLL Reference Impl Ref Notes
⚠️ PARTIAL tersmu tersmuLines output parity (feature flag) @ref:feature.tersmu-parity Behind tersmu-parity feature flag (not in default or wasm); gates display-format path
⚠️ PARTIAL examples/*.loj full byte-parity @ref:prolog.eval_text_to_tersmu_lines tersmu-parity characterization (tersmu_lines_golden_all_char, #[ignore]-gated, strict via LOJBAN_PROLOG_GOLDEN_STRICT=1). Connective semantics aligned with tersmu connToFOL (.e, ganai…gi produce Connected props); examples/1.loj 100%. Remaining gaps: forethought gek subsentence shapes, statement-level .ijanai, and non-connective parse errors in some examples.

Implemented Features (auto-generated)

1.1 Phonology (CLL Ch 3)

Status Feature CLL Reference Impl Ref Notes
16 diphthongs §3.4 @ref:morph.16_diphthongs Handled in morphology
27-char alphabet (no h/q/w) §3.1 @ref:morph.27_char_alphabet_no_h_q_w Handled in morphology
48 permissible initial pairs §3.7 @ref:morph.48_permissible_initial_pairs Handled in morphology
6 vowels + y distribution §3.2 @ref:morph.6_vowels_y_distribution Handled in morphology
Apostrophe = [h] §3.3 @ref:morph.apostrophe_h Handled in morphology
Audio-visual isomorphism §3.1 @ref:morph.audio_visual_isomorphism Implicit in parser design
Comma = syllable break §3.1 @ref:morph.comma_syllable_break Handled in morphology
Consonant triple rules §3.7 @ref:morph.consonant_triple_rules CLL §3.7: IsConsonantTriple relation added; detects valid triples (permissible pair + initial pair); IsForbiddenTriple tracks ndj/ndz/ntc/nts
Consonant voicing pairs §3.2 @ref:morph.consonant_voicing_pairs Handled in morphology
Penultimate stress §3.9 @ref:morph.penultimate_stress Handled in morphology
Period = mandatory pause §3.1 @ref:morph.period_mandatory_pause Handled in morphology
Stress-based word boundary detection §3.9 @ref:morph.stress_based_word_boundary_detection Stress used for word classification in morphology; penultimate stress rule enforced in is_valid_gismu_shape. Full boundary detection not needed for egglog pipeline.
Syllabication rules §3.9 @ref:morph.syllabication_rules Handled in morphology
Vowel pairs with apostrophe (a'a, e'i, etc.) §3.5 @ref:morph.vowel_pairs_with_apostrophe_a_a_e_i_etc Handled in morphology

1.2 Word Classes (CLL Ch 4)

Status Feature CLL Reference Impl Ref Notes
Brivla identification (3 properties) §4.3 @ref:morph.brivla_identification_3_properties Handled in morphology
Cmavo identification (V, CV, VV, CVV forms) §4.2 @ref:morph.cmavo_identification_v_cv_vv_cvv_forms HashMap-based cmavo lookup
Cmavo special form .y. §4.2 @ref:morph.cmavo_special_form_y Handled
Cmevla identification (end in consonant, pause-bounded) §4.8 @ref:morph.cmevla_identification_end_in_consonant_pause_bou Handled in morphology
Compound cmavo §4.2 (compound cmavo segmentation) @ref:morph.segment_compound_cmavo Recursively splits compound forms (e.g., .iseci'i → .i se ci'i). CLL §4.1 examples pass.
Cy-form cmavo (letterals) §4.2, §17 @ref:morph.cy_form_cmavo_letterals Detection: is_cy_form_cmavo(), cy_form_to_letter() in earley_morph_extract.rs
Cy-form cmavo detection §4.2, §17 @ref:morph.cy_form_cmavo_detection is_cy_form_cmavo(), cy_form_to_letter()
Experimental cmavo forms §4.2 @ref:morph.experimental_cmavo_forms Not needed — experimental forms are not part of standard Lojban
Fu'ivla identification §4.7 @ref:morph.fu_ivla_identification Identified as fuhivla word type in morphology
Gismu form (CVC/CV or CCVCV, 5 letters) §4.4 @ref:morph.gismu_form_cvc_cv_or_ccvcv_5_letters Handled in morphology
Morphological word class determination from form §4.10 @ref:morph.morphological_word_class_determination_from_form cmavo/brivla/cmevla identification by word shape
Pause rules (vowel-initial words need preceding pause; consonant-final words need surrounding pauses) §4.9 @ref:morph.pause_rules_vowel_initial_words_need_preceding_p Handled in morphology
Slinku'i test §4.7 @ref:morph.slinku_i_test is_slinkuhi() + passes_slinkuhi_test (CLL §4.7)
Tosmabru test §4.3 @ref:morph.tosmabru_test is_tosmabru() + segment_cmavo_brivla (CLL §4.11)

1.3 Lujvo Formation & Decomposition (CLL Ch 4, 12)

Status Feature CLL Reference Impl Ref Notes
Lujvo decomposition to source tanru §12.1–12.3 @ref:lujvo.decompose_lujvo Parses rafsi components using rafsi dictionary
Lujvo place structure rules (tertau dominance, unused place pruning) §12.3–12.5 (lujvo place structure from veljvo) @ref:lujvo.derive_place_structure §12.3 tertau first; §12.4 seltau x2+; §12.5 prune x1
Lujvo scoring algorithm (4.12) §4.12 (lujvo scoring algorithm) @ref:lujvo.score_lujvo score_lujvo(), count_hyphens(), needs_hyphen(), score_decomposed_lujvo(); 11 unit tests
Unreduced vs fully reduced distinction §4.11, §4.12 (unreduced vs fully reduced lujvo distinction) @ref:lujvo.is_fully_reduced is_fully_reduced() + both reduced/unreduced candidates
Unreduced vs fully reduced distinction §4.11 (lujvo construction algorithm) @ref:lujvo.build_lujvo_candidates is_fully_reduced() + both reduced/unreduced candidates

1.4 Fu'ivla (CLL Ch 4)

Status Feature CLL Reference Impl Ref Notes
L-hyphen for fu'ivla §4.11, §4.7 (Y/R/N/L hyphen insertion for lujvo and fu'ivla) @ref:lujvo.needs_hyphen 'l' when CVV rafsi precedes consonant-initial borrow; 4 unit tests
Stage 3 fu'ivla construction (rafsi prefix + borrow) §4.7; §4.7 (stage-3 fu'ivla construction; L-hyphen) @ref:lujvo.build_fuivla build_fuivla() + fuivla_stage() for stages 1/2/3

1.5 Cmevla (CLL Ch 4)

Status Feature CLL Reference Impl Ref Notes
Cmevla identification §4.8 @ref:morph.cmevla_identification Handled
Multi-part cmevla (.djan. .braun.) §4.8 @ref:morph.multi_part_cmevla_djan_braun Multi-part cmevla treated as single name in parser; pause-bounded segmentation handles .djan. .braun. as one entity.

2.1 Text Structure (CLL Ch 19)

Status Feature CLL Reference Impl Ref Notes
Fragments as standalone utterances §19.1 @ref:grammar.fragments_as_standalone_utterances Implemented
Paragraph separator ni'o / no'i §19.3 @ref:grammar.paragraph_separator_ni_o_no_i Implemented
Sentence separator .i §19.2 @ref:grammar.sentence_separator_i Implemented
Statement binding hierarchy (5 levels with I) §19.2 @ref:grammar.statement_binding_hierarchy_5_levels_with_i Implemented
TUhE...TUhU grouping blocks §19.2 @ref:grammar.tuhe_tuhu_grouping_blocks Implemented
Text → paragraphs → statements hierarchy §19.1, §19.2 @ref:grammar.text_paragraphs_statements_hierarchy Implemented in earley_word_grammar.egg

2.2 Sentence Structure (CLL Ch 9, 19)

Status Feature CLL Reference Impl Ref Notes
Bridi-tail binding hierarchy (5 levels) §19.1 @ref:grammar.bridi_tail_binding_hierarchy_5_levels Implemented
Prenex = terms ZOhU §16.2, §19.4 @ref:grammar.prenex_terms_zohu Implemented
Subsentence = sentence prenex subsentence @ref:grammar.subsentence_sentence Implemented
Tail terms with VAU §19.1 @ref:grammar.tail_terms_with_vau Implemented
sentence = [terms [CU]] bridi-tail §9.2, §19.1 @ref:grammar.sentence_terms_cu_bridi_tail Implemented

2.3 Terms (CLL Ch 9, 14, 16)

Status Feature CLL Reference Impl Ref Notes
CEhE non-logical term connection §14.11 @ref:grammar.cehe_non_logical_term_connection Implemented
FA place tags (fa-fe-fi-fo-fu) §9.3 @ref:grammar.fa_place_tags_fa_fe_fi_fo_fu Implemented. Fixed: convert_terms now properly handles nested terms nodes from recursive grammar (terms → term terms), fixing citka fa mi lo fasnu equivalence. CLL §9.3 rule: after FA-tagged sumti, untagged sumti fill succeeding places, skipping filled ones.
Gek termsets (NUhI gek terms gik terms NUhU) §14.11 @ref:grammar.gek_termsets_nuhi_gek_terms_gik_terms_nuhu Grammar rules documented in earley_word_grammar.egg; NUhI/NUhU recognized in morphology; structural markers in egglog_rules.egg §17. Semantic composition via jbo_parse termset handling.
KU elidable terminator §6.2 @ref:grammar.ku_elidable_terminator Implemented
PEhE logical term connection §14.11 @ref:grammar.pehe_logical_term_connection Implemented
Terms structure (terms-1, terms-2) §9.3 @ref:grammar.terms_structure_terms_1_terms_2 Implemented
Termset (NUhI...NUhU) §14.11 @ref:grammar.termset_nuhi_nuhu Implemented

2.4 Sumti (CLL Ch 6, 8, 14)

Status Feature CLL Reference Impl Ref Notes
Indefinite descriptions (ci gerku) §6.8 (indefinite descriptions: ci gerku = ci lo gerku) @ref:grammar.sumti_5_quant_selbri_rels "ci gerku" = "ci lo gerku". Verified identical output.
Interval sumti (bi'i, bi'o with GAhO) §14.16; §14.16 (interval sumti via joik + KE selbri; bi'i/bi'o with GAhO) @ref:ast.convert_selbri_4 convert_selbri_4 builds ConnectedSB chain; commutativity/idempotency in egglog
LA descriptions (la + sumti-tail) §97, §6.2 @ref:grammar.sumti_6_la_sumti_tail (LA) # sumti-tail /KU#/ — la descriptions distinct from la names (CMEVLA)
LA names (la + optional rels + name) §97, §6.12 @ref:grammar.sumti_6_la_name LA # [relative-clauses] CMEVLA; dotted names may be BRIVLA_clause in morphology
LE/LA description variants (gadri + sumti-tail) §97, §6.2 @ref:grammar.sumti_6_gadri_sumti_tail LE/LO # sumti-tail /KU#/ — le/lo descriptions (la uses sumti_6_la_sumti_tail)
LOhU...LEhU ungrammatical quotation §19.10 @ref:morph.lohu_quote Morphology consumes LOhU…LEhU span as one LOhU_clause token; word-1100 disables indicator merge inside span
Numbers (li + mekso + lo'o) §6.15, §18.5 (numbers: li + mekso + lo'o) @ref:grammar.sumti_6_li_mex Implemented
Pro-sumti (mi/do/ti/ko'a/da series) §6.13, §7 (pro-sumti: mi/do/ti/ko'a/da series) @ref:grammar.sumti_6_koha Implemented
Quantifier distribution across description types §6.2, §6.6, §6.7, §6.9, §6.10 (descriptions, quantifiers, sumti qualifiers) @ref:semantic.parse_sumti_atom Inner/outer quantifier interaction with le/lo/la via Description inner_quant
Quotations (lu/li'u) §6.14, §19.9 (quotations: lu/li'u) @ref:grammar.sumti_6_lu_text Implemented
Sumti-based descriptions (le re do) §6.1 (formal: sumti-5, sumti-6 — five kinds of simple sumti) @ref:grammar.sumti_5 Inner quantifier with sumti via EitherSelbriSumti::Sumti
VUhO relative clause scope extension §8.8 (VUhO relative clause scope extension) @ref:grammar.sumti_vuho_rels VUhO recognized in morphology; scope extends via grammar structure
ZOI delimited quotation §19.10 @ref:morph.zoi_quote Morphology consumes ZOI delimiter…content…delimiter span as one token
LOhU...LEhU ungrammatical quotation §19.10 @ref:grammar.sumti_6_lohu Morphology consumes LOhU…LEhU span as one LOhU_clause token; word-1100 disables indicator merge inside span
ZOI delimited quotation §19.10 @ref:grammar.sumti_6_zoi Morphology consumes ZOI delimiter…content…delimiter as one token
ZO single-word quotation §19.10 @ref:grammar.sumti_6_zo CLL sumti-6 = ZO # any-word #; word-1100 skips indicator merge after ZO
any-word non-terminal §21 (non-formal any-word) @ref:grammar.any_word ANY_WORD_clause dual-tagged on every word by Rust
la'e, lu'e, tu'a, lu'a, lu'i, lu'o, vu'i §6.10 (LAhE/NAhE+BO sumti qualifiers; la'e, lu'e, tu'a, etc.) @ref:grammar.sumti_6_lahe_sumti tu'a via SumtiQualifier::LAhE; others parsed as LAhE qualifier
na'ebo, to'ebo, no'ebo, je'abo §6.10, §15.6 (na'ebo, to'ebo, no'ebo, je'abo) @ref:grammar.sumti_6_nahe_bo_sumti Implemented

2.5 Relative Clauses (CLL Ch 8)

Status Feature CLL Reference Impl Ref Notes
GOI relative phrase construction (goi + term) §8.3; §8.3, §8.7 (GOI relative phrases: pe/po/po'e/po'u/ne/no'u; possessive sumti) @ref:semantic.parse_goi_rel goi assigns referent; JRAssign variant in JboRelClause
GOI relative phrases (pe/po/po'e/po'u/ne/no'u) §8.3 (GOI relative phrases: pe/po/po'e/po'u/ne/no'u) @ref:grammar.relative_clause_goi parse_goi_rel handles pe(ne), po, po'e, po'u(no'u)
Incidental (noi...ku'o) §8.1, §8.2 (restrictive poi…ku'o; incidental noi…ku'o) @ref:grammar.relative_clause_noi Implemented
Nested relative clauses §8.4 (zi'e — multiple relative clauses) @ref:grammar.relative_clauses_zie_chain ke'a subscripting via antecedent_stack; ZIhE chain support
Nested relative clauses §8.10; §8.1, §8.10 (ke'a relative pro-sumti; nested relative clauses) @ref:semantic.subsent_to_pred ke'a subscripting via antecedent_stack; ZIhE chain support
Restrictive (poi...ku'o) §8.1–8.4 (relative clauses: poi/noi, zi'e chains) @ref:grammar.relative_clauses Implemented

2.6 Selbri (CLL Ch 5, 11)

Status Feature CLL Reference Impl Ref Notes
Abstraction selbri (NU + bridi + kei) §11.1 @ref:grammar.abstraction_selbri_nu_bridi_kei Implemented
Asymmetric tanru types (agent-action, property-entity, etc.) §5.14 @ref:grammar.asymmetric_tanru_types_agent_action_property_ent Documented in CLL; tanru left-grouping and bo right-grouping implemented; semantic interpretation follows tertau-dominant model.
CEI (equality within tanru) §7.5 @ref:grammar.cei_equality_within_tanru Grammar rule selbri_5_selbri_4_cei_selbri_4 (selbri_4 CEI selbri_4); convert_selbri_5 handles BridiBinding; morphology classifies cei as CEI; tests pass.
Forethought tanru connection (gu'e...gi) §5.6 @ref:grammar.forethought_tanru_connection_gu_e_gi Implemented
Left-grouping rule §5.2 @ref:grammar.left_grouping_rule Implemented
Linked sumti (be/bei/be'o) §5.7 @ref:grammar.linked_sumti_be_bei_be_o Implemented
Logical connection within tanru (je/ja) §5.6 @ref:grammar.logical_connection_within_tanru_je_ja Implemented
NAhE scalar negation on selbri §5.12 @ref:grammar.nahe_scalar_negation_on_selbri Implemented
NU abstraction selbri (tanru-unit-2) §152, §11.1 @ref:grammar.tanru_unit_2_nu_abstraction Decomposed nu_prefix_chain + optional kei_optional; joik-jek compound abstractors per CLL §11.12
Non-logical connectives within tanru (joi) §5.6 @ref:grammar.non_logical_connectives_within_tanru_joi Implemented
Pro-bridi (go'i, du) as selbri §7.6, §7.17 @ref:grammar.pro_bridi_go_i_du_as_selbri Implemented
SE conversion on selbri §5.11 @ref:grammar.se_conversion_on_selbri Implemented
Simple brivla as selbri §5.1 @ref:grammar.simple_brivla_as_selbri Implemented
Symmetric tanru types §5.15 @ref:grammar.symmetric_tanru_types Documented in CLL; non-logical connectives within tanru (joi, ce, jo'e, ku'a) handled via TanruConnRel; commutativity/idempotency rules in egglog §5b.
Tanru composition §5.2 @ref:grammar.tanru_composition Implemented
Tanru inversion (co) §5.8 @ref:grammar.tanru_inversion_co Implemented
Tense/negation on selbri §5.13 @ref:grammar.tense_negation_on_selbri Implemented
ZEI phrasal lujvo tanru-unit-2 §152, §4.6 @ref:grammar.tanru_unit_2_zei_any_word
bo right-grouping §5.3 @ref:grammar.bo_right_grouping Grammar rule selbri_5_selbri_6_bo_chain (selbri_6 BO selbri_5); convert_selbri_5 handles BO with SBTanru right-grouping.
ke...ke'e grouping §5.5 @ref:grammar.ke_ke_e_grouping Implemented
me (sumti to selbri) §5.10 @ref:grammar.me_sumti_to_selbri Implemented
moi/mei (number to selbri) §5.11, §18.18 @ref:grammar.moi_mei_number_to_selbri Implemented via JboRel::Moi

2.7 Selbri Place Structure (CLL Ch 9)

Status Feature CLL Reference Impl Ref Notes
Compound conversions (setese) §9.4 @ref:grammar.compound_conversions_setese Documented; relies on single-conversion rules via equality saturation
FA place tags §9.3 @ref:grammar.fa_place_tags Implemented (nested terms fix applied; see §2.3 notes)
Multiple conversions stacking §9.4 @ref:grammar.multiple_conversions_stacking Nested PermutedRel (se se, te ve, etc.) handled by double-cancellation rules (§3) and place-swap birewrites for 2-5 place predicates; compound conversions like setese reduce via equality saturation
Observative (empty x1) §9.2 @ref:grammar.observative_empty_x1 Implemented
Place omission §9.2 @ref:grammar.place_omission Implemented
SE conversion (se/te/ve/xe) §9.4 @ref:grammar.se_conversion_se_te_ve_xe Implemented
Standard bridi form with cu §9.2 @ref:grammar.standard_bridi_form_with_cu Implemented
convert_fa place mapping §9.3 @ref:ast.convert_fa fa→1…fu→5 and se→2…xe→5 by default; xi subscript overrides base cmavo (CLL §19.6): {fa xi vo}={fo}, {se xi ci}={te}

2.8a SE conversion AST + type inference (CLL §9.4, §6.8)

Status Feature CLL Reference Impl Ref Notes
SE/NAhE chain inner tanru_unit_2 dispatch §9.4, §5.11 @ref:ast.convert_tanru_unit convert_tanru_unit(1) dispatch on the node's own alt when it is already tanru_unit_2 / tanru_unit_1_; fixes SE/NAhE chains that pass a leaf tanru_unit_2_brivla child (was TUBrivla(\
Type check SE-converted selbri and description place inference §9.4, §6.8 @ref:semantic.type_check_converted_selbri check_prop_type_with_context handles PermutedRel; collect_description_types uses constant term position (reflects bridi-level SE swap) for lo se X typing

2.8 Pro-sumti and Pro-bridi (CLL Ch 7)

Status Feature CLL Reference Impl Ref Notes
Demonstrative pro-sumti: ti, ta, tu §7.3 @ref:grammar.demonstrative_pro_sumti_ti_ta_tu Implemented
Personal pro-sumti: mi, do, mi'o, mi'a, ma'a, do'o, ko §7.2 @ref:grammar.personal_pro_sumti_mi_do_mi_o_mi_a_ma_a_do_o_ko Implemented; ko triggers imperative semantics
Pro-sumti assignment with goi (ko'a goi le gerku) §7.5 @ref:grammar.pro_sumti_assignment_with_goi_ko_a_goi_le_gerku Implemented in jbo_parse.rs: goi assignment stores referent
SOI reciprocal marker §7.8 @ref:grammar.soi_reciprocal_marker Parsed as Free::SOI in Free enum
Utterance pro-sumti (di'u-series) §7.4 @ref:semantic.utterance-prosumti di'u/de'u/da'u/di'e/de'e/da'e/dei/do'i classified in AST; utterance_history resolves past/current references
broda-brodu (pro-bridi variables) §7.17 @ref:grammar.broda_brodu_pro_bridi_variables Implemented; treated as brivla with fixed place structure
ce'u (lambda variable in ka abstractions) §7.11 @ref:grammar.ce_u_lambda_variable_in_ka_abstractions Implemented in §7 (Abstractions)
da'o (cancel all pro-sumti/pro-bridi assignments) §7.13, §19.3 @ref:grammar.da_o_cancel_all_pro_sumti_pro_bridi_assignments Implemented in §12 (Text Structure)
da/de/di quantified variables §7.9, §16.2 @ref:grammar.da_de_di_quantified_variables Implemented in §6 (Quantifiers)
du (identity relation as pro-bridi) §7.14 @ref:grammar.du_identity_relation_as_pro_bridi Implemented as JboRel::Equal
go'a-series pro-bridi (go'a-go'o) §7.12 @ref:grammar.go_a_series_pro_bridi_go_a_go_o go'a/go'e/go'o parsed as TUGOhA; bound via set_shunting in parse_statement1 (previous bridi stored). get_bribasti_binding resolves to stored bridi function.
ke'a relative pro-sumti §7.10 @ref:grammar.ke_a_relative_pro_sumti Implemented in §2.5 (Relative Clauses)
ko'a-series pro-sumti (ko'a-ko'e, ko'i-ko'o, ko'u) §7.5 @ref:grammar.ko_a_series_pro_sumti_ko_a_ko_e_ko_i_ko_o_ko_u Implemented via goi assignment
na'e/to'e/no'e pro-bridi (scalar pro-bridi) §7.15 @ref:grammar.na_e_to_e_no_e_pro_bridi_scalar_pro_bridi Parsed as NAhE_clause in morphology; scalar negation handled via Selbri3::ScalarNegatedSB and JboRel::ScalarNegatedRel in semantic processing.
ri-series anaphoric pro-sumti (ri, ra, ru) §7.6 @ref:grammar.ri_series_anaphoric_pro_sumti_ri_ra_ru Implemented; ri/ra/ru refer to previous sumti
vo'a-series reflexive pro-sumti (vo'a, vo'e, vo'i, vo'o, vo'u) §7.8 @ref:grammar.vo_a_series_reflexive_pro_sumti_vo_a_vo_e_vo_i_v Implemented via SumtiAtom::MainBridiSumbasti(n); vo'a=1, vo'e=2, vo'i=3, vo'o=4, vo'u=5. Substitution transforms replace placeholders with actual terms in add_arg().
zo'e / mo'e / zo'u / co'e indefinite pro-sumti/bridi §7.7 @ref:grammar.zo_e_mo_e_zo_u_co_e_indefinite_pro_sumti_bridi Implemented; zo'e = unspecified sumti
zo'e-series (zo'e, zo'u, zo'ei, soi) §7.7 @ref:grammar.zo_e_series_zo_e_zo_u_zo_ei_soi Implemented

3.1 Spatial Tenses (CLL Ch 10)

Status Feature CLL Reference Impl Ref Notes
Compound spatial tenses §10.3 @ref:semantic.compound_spatial_tenses Implemented
FAhA directional tenses (zu'a, ri'u, ga'u, etc.) §10.2 @ref:semantic.faha_directional_tenses_zu_a_ri_u_ga_u_etc Implemented
Movement tenses (mo'i + direction) §10.8 @ref:semantic.movement_tenses_mo_i_direction Implemented
VA distance tenses (vi, va, vu) §10.2 @ref:semantic.va_distance_tenses_vi_va_vu Implemented
VEhA space intervals (ve'i, ve'a, ve'u) §10.5 @ref:semantic.veha_space_intervals_ve_i_ve_a_ve_u Implemented
VIhA dimensionality (vi'i, vi'a, vi'u) §10.7 @ref:semantic.viha_dimensionality_vi_i_vi_a_vi_u Implemented — Earley syntax conversion preserves surface VIhA cmavo as tense cmavo, so vi'i/vi'a/vi'u remain distinct in semantic tags

3.2 Temporal Tenses (CLL Ch 10)

Status Feature CLL Reference Impl Ref Notes
Event contours (ZAhO: pu'o, ca'o, ba'o, co'a, etc.) §10.10 @ref:semantic.event_contours_zaho_pu_o_ca_o_ba_o_co_a_etc Implemented
Interval properties (TAhE: di'i, na'o, ru'i, ta'e) §10.9 @ref:semantic.interval_properties_tahe_di_i_na_o_ru_i_ta_e Implemented
PU directional tenses (pu, ca, ba) §10.4 @ref:semantic.pu_directional_tenses_pu_ca_ba Implemented
Quantified tenses (roi, re'u) §10.9 @ref:semantic.quantified_tenses_roi_re_u Implemented
Sub-events (pi'u cross product) §10.21 @ref:semantic.sub_events_pi_u_cross_product Implemented
Whole interval markers (ze'e, ve'e) §10.5 @ref:semantic.whole_interval_markers_ze_e_ve_e Implemented
ZEhA time intervals (ze'i, ze'a, ze'u) §10.5 @ref:semantic.zeha_time_intervals_ze_i_ze_a_ze_u Implemented
ZI distance tenses (zi, za, zu) §10.4 @ref:semantic.zi_distance_tenses_zi_za_zu Implemented

3.3 Aspect & Modality (CLL Ch 10)

Status Feature CLL Reference Impl Ref Notes
CAhA (actual/potential/capable) §10.19 @ref:semantic.caha_actual_potential_capable Implemented
CUhE metatension §10.24 @ref:semantic.cuhe_metatension Documented in egglog_rules.egg §14b; QTruthModal for tense questions
KI sticky tenses §10.13 @ref:semantic.ki_sticky_tenses Implemented
Story time conventions §10.14 @ref:semantic.story_time_conventions Tense defaults to context-dependent (§10.1); story time handled via narrative tense (pu/ca/ba) sequence in connected sentences.
Tenses as sumtcita (tagged sumti) §10.12 @ref:semantic.tenses_as_sumtcita_tagged_sumti parse_tag_helper converts syntax tags to JboTag for modal/tense application
Vague intervals and non-specific tenses (aorist property) §10.6 @ref:semantic.vague_intervals_and_non_specific_tenses_aorist_p Implicit — tense is optional and context-dependent; no specific implementation needed

3.4 BAI Modal Tags (CLL Ch 9)

Status Feature CLL Reference Impl Ref Notes
BAI cmavo (65 predefined modals) §9.6, §9.17 @ref:semantic.bai_cmavo_65_predefined_modals Implemented
FIhO selbri FEhU custom modals §9.5 @ref:semantic.fiho_selbri_fehu_custom_modals Implemented
NAI + BAI contradictory negation §9.13 @ref:semantic.nai_bai_contradictory_negation Implemented
NAhE + BAI scalar negation §9.13 @ref:semantic.nahe_bai_scalar_negation NAhE parsed as NAhE_clause; applied to BAI tags via DecTagUnit::DecTagUnitMk in tag conversion; scalar negation of modal tags handled in parse_tag_helper.
SE conversion of BAI §9.6 @ref:semantic.se_conversion_of_bai Implemented
Sticky modals (ki) §9.14 @ref:semantic.sticky_modals_ki Implemented
do'e (vague modal) §9.6 @ref:semantic.do_e_vague_modal Implemented

3.5 Modal Connections (CLL Ch 9)

Status Feature CLL Reference Impl Ref Notes
Afterthought modal connection (.iBAIbo) §9.7, §9.8 @ref:semantic.afterthought_modal_connection_ibaibo Implemented
Bridi-tail modal connection §9.8 @ref:semantic.bridi_tail_modal_connection CLL §9.8: modals connecting bridi-tails — bridi-tail modal tags parsed via Tagged/TaggedNoTerm; applied to bridi-tail in parse_bridi_tail with modal composition.
Causal modals (ri'a, ki'u, mu'i, ni'i) §9.7 @ref:semantic.causal_modals_ri_a_ki_u_mu_i_ni_i Implemented
Comparison (mau/me'a + BAI) §9.10 @ref:semantic.comparison_mau_me_a_bai mau/me'a recognized in morphology as comparative BAI tags; parsed via parse_tag_helper as modal tags with comparison semantics.
Convert Earley tag to syntax Tag §971–972 @ref:ast.convert_tag convert_tag walks tense_modal / simple_tense_modal parse nodes
Convert simple_tense_modal parse tree to DecoratedTagUnit §971–972 @ref:ast.convert_simple_tense_modal Walks CLL §972 compositional simple_tense_modal and time/space/interval-property subtrees
Forethought modal connection (BAI+gi) §9.8 @ref:semantic.forethought_modal_connection_bai_gi Implemented
JAI modal conversion §9.12 @ref:semantic.jai_modal_conversion Implemented
Logical connection between modals §9.15 @ref:semantic.logical_connection_between_modals CLL §9.15: connecting modal sumti with logical connectives — modal sumti parsed via ConnectedTag in JboTag; logical composition handled in jbo_parse parse_tag_helper.
Mixed modal-logical connection §9.11 @ref:semantic.mixed_modal_logical_connection CLL §9.11: mixing logical connectives with modal tags — modal tags parsed as DecTagUnit; logical connectives handled via conn_to_fol; composition in jbo_parse via do_modal_helper.
Modal relative phrases (pe/ne + BAI) §9.10 @ref:semantic.modal_relative_phrases_pe_ne_bai Documented in egglog_rules.egg §18; parser handles via parse_goi_rel with TagRel
Simple tense and modal cmavo (PU/ZI/FAhA/VA/ZAhO/ZEhA/BAI/…) §971–972, §1030–1051 @ref:grammar.simple_tense_modal CLL §972 compositional tense_group + time/space/interval-property non-terminals.
Sumti modal connection (forethought/afterthought) §9.8 @ref:semantic.sumti_modal_connection_forethought_afterthought CLL §9.8: modal sumti connected with logical connectives — sumti modal tags parsed via Tagged/TaggedNoTerm; connection handled in jbo_parse parse_terms with modal composition.
Termset modal connection (nu'i...nu'u) §9.8 @ref:semantic.termset_modal_connection_nu_i_nu_u CLL §9.8: modals within termsets — nu'i/nu'u recognized in morphology; termset modals parsed as structural markers in egglog_rules.egg §17.
fai tag §9.3 @ref:semantic.fai_tag Implemented

3.6 Complex Tense Constructs (remaining)

Status Feature CLL Reference Impl Ref Notes
Explicit magnitudes (termset after tense/modal tag) §10.25 @ref:semantic.s8_2_explicit_magnitudes_termset_after_tag CLL §10.25: tag+nu'i termset after selbri; la'u+mekso quantity term via linked sumti (BE→BE_clause mapping + elidable BEhO)
Subordinate bridi tense semantics §10.15 @ref:semantic.s8_2_subordinate_bridi_tense_semantics reference_point_stack on abstraction and relative-clause subsentences; nau clears stack; WithEventAs(BridiEvent) before tense tags

4.1 Logical Connectives (CLL Ch 14)

Status Feature CLL Reference Impl Ref Notes
Afterthought bridi connection (ijeks) §14.4 @ref:semantic.afterthought_bridi_connection_ijeks Implemented
Connective rule expansion (ek/jek/joik/gihek) §802, §805, §806, §818 @ref:grammar.connective_rule_expansion_ek_jek_joik_gihek Full [NA] [SE] cmavo [NAI] enumeration per CLL formal grammar; eks=A (sumti), jeks=JA (tanru/bridi), joiks=JOI and BIhI (non-logical), giheks=GIhA (bridi-tail). Per-cmavo JOI semantics in connectives.rs + egglog_rules.egg.
Forethought bridi connection (geks) §14.5 @ref:semantic.forethought_bridi_connection_geks Implemented
Forethought grouping (ge...gi nesting) §14.7 @ref:semantic.forethought_grouping_ge_gi_nesting Forethought connectives unambiguously scope
Forethought sumti connection (geks) §14.6 (forethought sumti connection via geks) @ref:grammar.sumti_1 Implemented
Left-grouping rule §14.8 @ref:semantic.left_grouping_rule Implemented
Logical connective truth functions (And/Or/Impl/Equiv) §14.5–14.6 @ref:semantic.conn_to_fol Ports tersmu connToFOL; affix encoding matches Lojban.pappy (b1=!NA, b2=!NAI)
More than two propositions (associativity of connectives) §14.7 @ref:semantic.more_than_two_propositions_associativity_of_conn Left-grouping handles associativity
Sumti connection (eks) §14.6 (sumti connection via joik_ek = joik ek) @ref:ast.convert_joik_ek
Sumti connection (eks) §14.6 (sumti connection via eks) @ref:grammar.sumti_3 Implemented
Sumti logical connectives (eks) §14.6, §802 @ref:ast.convert_ek A-selma'o eks for sumti connection via connectives::parse_ek_connective; NA/SE/NAI affixes per CLL §802.
bo grouping for connectives §14.8 @ref:semantic.bo_grouping_for_connectives Implemented
ke...ke'e for sumti/bridi-tail grouping §14.8 @ref:semantic.ke_ke_e_for_sumti_bridi_tail_grouping Implemented
tu'e...tu'u parentheses §14.8 @ref:semantic.tu_e_tu_u_parentheses Implemented

4.2 Gihek (Bridi-tail connection) (CLL Ch 14)

Status Feature CLL Reference Impl Ref Notes
Forethought bridi-tail connection (ge...gi as bridi-tail) §14.10 @ref:semantic.forethought_bridi_tail_connection_ge_gi_as_bridi Forethought sentence pairs can function as bridi-tails
Gihek afterthought (GIhA) §14.3 @ref:semantic.gihek_afterthought_giha Implemented
Gihek forethought (gik) §14.5 @ref:semantic.gihek_forethought_gik Implemented
Multiple gihek compound bridi §14.10 @ref:semantic.multiple_gihek_compound_bridi Left-grouping with bo override; ke...ke'e grouping for bridi-tails
Tail-terms shared across gihek §14.9 @ref:semantic.tail_terms_shared_across_gihek CLL §14.9: Grammar rule bridi_tail_connected added; semantic expansion applies tail-terms to both bridi-tails

4.3 Non-Logical Connectives (CLL Ch 14)

Status Feature CLL Reference Impl Ref Notes
Forethought joiks (joigiks) §14.15 @ref:semantic.forethought_joiks_joigiks Documented in egglog_rules.egg §22; parsed via gik grammar rules (earley_word_grammar.egg); semantic composition handled in jbo_parse.rs joik_to_fol.
GAhO endpoint inclusion/exclusion §14.16 @ref:semantic.gaho_endpoint_inclusion_exclusion Parsed as PNonLog with composite keys (e.g., \
Interval connectives (bi'i, bi'o, mi'i) §14.16 @ref:semantic.interval_connectives_bi_i_bi_o_mi_i Commutativity/idempotency rules in §2c + §16. jbo_prop: Prop::NonLogConnected used for interval connectives
Joik per-cmavo classification (JoikedTerms) §14.14–14.16 @ref:semantic.joik_classification_per_cmavo connectives::classify_joik + JoikKind per CLL §14.14 table; typed_dictionary and jbo_prolog use selma'o-based classification instead of hardcoded ce/joi strings.
Non-logical connection within tanru §14.14 @ref:semantic.non_logical_connection_within_tanru Implemented (joi, ce, jo'e, ku'a)
Non-logical joik connectives (per-cmavo JOI semantics) §14.6, §14.14–14.16 @ref:ast.convert_joik JOI/BIhI joiks classified via connectives::classify_joik (selma'o lookup); each cmavo has distinct sumti semantics per CLL §14.14 table. No empty-text default.
Non-logical joik semantics (per-cmavo JOI expansion) §14.14–14.16 @ref:semantic.joik_to_fol_per_cmavo Per-cmavo classification via connectives::classify_joik; ConnQuestion for je'i/gi'i/ge'i/gu'i; NonLogConnected otherwise with egglog per-cmavo rules.
ce (set \ §14.14 @ref:semantic.ce_set_and Implemented with commutativity/idempotency rules
ce'o (sequence \ §14.14 @ref:semantic.ce_o_sequence_and Parsed as PNonLog(\
fa'u (respectively) §14.14 @ref:semantic.fa_u_respectively Parsed as PNonLog(\
jo'u (joint consideration) §14.14 @ref:semantic.jo_u_joint_consideration CLL 14.14 — egglog rules for commutativity/idempotency in §2; parsed as PNonLog via joik grammar rule; jo'u classified as JA cmavo in morphology
joi (mass \ §14.14 @ref:semantic.joi_mass_and Implemented with commutativity/idempotency rules

4.4 Termset Connection (CLL Ch 14)

Status Feature CLL Reference Impl Ref Notes
Forethought termset (nu'i...nu'u) §14.11 @ref:semantic.forethought_termset_nu_i_nu_u NUhI/NUhU structural markers parsed; termset grouping handled by parser which flattens terms into surrounding context
PEhE prefix for termset logical connection §14.11 @ref:semantic.pehe_prefix_for_termset_logical_connection PEhE structural markers parsed; PEhE + joik-jek creates logical term connection via convert_terms
ce'e termset separator §14.11 @ref:semantic.ce_e_termset_separator Parsed as PNonLog(\

4.5 Tensed Connectives (CLL Ch 10, 14)

Status Feature CLL Reference Impl Ref Notes
Non-logical tense connection (ce'o between tenses) §10.17 @ref:semantic.non_logical_tense_connection_ce_o_between_tenses ce'o recognized as PNonLog(\
Tensed logical connectives (.ijebabo) §10.17 @ref:semantic.tensed_logical_connectives_ijebabo Implemented

4.6 Connective Questions (CLL Ch 14)

Status Feature CLL Reference Impl Ref Notes
Connective questions (ji, ge'i, gi'i, gu'i, je'i) §14.13 @ref:semantic.connective_questions_ji_ge_i_gi_i_gu_i_je_i Semantic representation (ConnQuestion variant in Prop) + PConnQuestion schema + lowering. Grammar path wired: joik_to_fol detects question cmavo (ji, je'i, gi'i, ge'i, gu'i) and produces ConnQuestion; convert_gihek routes gi'i as JboConnJoik. 7 unit tests in conn_question_tests.
Summary of logical connective uses §14.21 @ref:semantic.summary_of_logical_connective_uses All truth functions covered in §1
Sumtcita with logical connectives §14.17 @ref:semantic.sumtcita_with_logical_connectives CLL §14.17: modal/tense tags combined with logical connectives — modal tags parsed via DecTagUnit; logical connectives composed via conn_to_fol in jbo_parse.
Tenses and modals with logical connection §14.18 @ref:semantic.tenses_and_modals_with_logical_connection CLL §14.18: logical connectives between modal/tense sumti — modal sumti parsed via ConnectedTag; logical composition in jbo_parse.
Truth questions (xu) §14.13 @ref:semantic.truth_questions_xu Parsed; QTruthModal wrapping in semantic layer; PConnQuestion schema in egglog_schema.egg; lowering emits PModal(QTruthModal, P); extraction preserves question marker. Questions are opaque — no rewrite rules needed.
bridi-tail sumtcita with connectives §14.19 @ref:semantic.bridi_tail_sumtcita_with_connectives Brdi-tail modal tags with logical connectives parsed via ConnectedTag in JboTag; composition handled in jbo_parse.
selbri sumtcita with connectives §14.20 @ref:semantic.selbri_sumtcita_with_connectives Selbri modal tags with logical connectives parsed via ConnectedTag in JboTag; composition handled in jbo_parse.

5.1 Bridi Negation (CLL Ch 15)

Status Feature CLL Reference Impl Ref Notes
Bridi na / tense-modal order normalization §5.13, §15.6, §15.7 @ref:feature.modal-neg-lift Egglog §6: PU(¬P) = ¬PU(P) for TaggedNoTerm, Tagged, WithEventAs; bridi_tail_3_na_chain in earley_to_syntax; check_equiv + unit tests
Multiple na cancellation §15.2 @ref:semantic.multiple_na_cancellation Implemented
na (contradictory bridi negation) §15.2 @ref:semantic.na_contradictory_bridi_negation Implemented
naku in prenex §15.2, §16.9 @ref:semantic.naku_in_prenex Negation push-through in §7 + partial distribution in §7c handle this

5.2 Scalar Negation (CLL Ch 15)

Status Feature CLL Reference Impl Ref Notes
Scale specification (ci'u, teci'e, etc.) §15.5 @ref:semantic.scale_specification_ci_u_teci_e_etc Recognized as BAI modals; handled by semantic analysis
na'e (other-than) §15.3 @ref:semantic.na_e_other_than Implemented
no'e (neutral point) §15.3 @ref:semantic.no_e_neutral_point Implemented with 11 rewrite rules + 4 tests
to'e (polar opposite) §15.3 @ref:semantic.to_e_polar_opposite Implemented (partial semantics behind feature flag)

5.3 Sumti Negation (CLL Ch 15, 16)

Status Feature CLL Reference Impl Ref Notes
na'ebo, to'ebo, no'ebo, je'abo §15.6, §6.10 @ref:semantic.na_ebo_to_ebo_no_ebo_je_abo Documented in egglog_rules.egg §2b
no + descriptor (zero quantifier) §15.6, §16.3 @ref:semantic.no_descriptor_zero_quantifier Implemented

5.4 nai Suffix Negation (CLL Ch 15)

Status Feature CLL Reference Impl Ref Notes
nai on attitudinals (polar) §13.7 @ref:semantic.nai_on_attitudinals_polar nai suffix parsed and split off from indicator_cmavo; when nai=true, indicator_bridi_tail returns None (negated indicator produces no side-effect bridi).
nai on interval modifiers (scalar) §15.7 @ref:semantic.nai_on_interval_modifiers_scalar Implemented
nai on non-logical connectives (scalar) §15.7 @ref:semantic.nai_on_non_logical_connectives_scalar Implemented
nai on tenses/modals (contradictory) §15.7 @ref:semantic.nai_on_tenses_modals_contradictory Implemented

5.5 Affirmation (CLL Ch 15)

Status Feature CLL Reference Impl Ref Notes
ja'a (bridi affirmation) §15.9 @ref:semantic.ja_a_bridi_affirmation Implemented §4b with 7 rewrite rules + 3 tests
je'a (scalar affirmation) §15.9 @ref:semantic.je_a_scalar_affirmation Implemented §4c with 7 rewrite rules

6.1 Variables (CLL Ch 16)

Status Feature CLL Reference Impl Ref Notes
Bound variable binding and scoping §16.2, §16.4 @ref:semantic.bound_variable_binding_and_scoping Implemented
Number questions (xo) §16.5 @ref:semantic.number_questions_xo Implemented — xo classified as PA in morphology; terp_jbo_mex_as_quantifier_from_jbo returns QuestionQuantifier; egglog lowers as (QuestionQ)
Restricted claims (da poi broda ku'o) §16.4 @ref:semantic.restricted_claims_da_poi_broda_ku_o Implemented — relative clauses restrict variables
bu'a, bu'e, bu'i (selbri variables) §16.13 @ref:semantic.bu_a_bu_e_bu_i_selbri_variables Implemented — do_buha() in jbo_parse.rs handles quantified selbri variables; RVar in jbo_prop.rs; grammar via TUGOhA(\
da, de, di (existentially quantified) §16.2 @ref:semantic.da_de_di_existentially_quantified Implemented
terp_jbo_mex_as_quantifier_from_jbo §6.6, §16.2 @ref:semantic.terp_jbo_mex_as_quantifier PA digit strings via eval_numeral_string; vei...ve'o and compound mekso via eval_mekso; ro/su'o/xo as logical quantifiers; non-concrete → MexQuantifier

6.2 Prenex (CLL Ch 16)

Status Feature CLL Reference Impl Ref Notes
Prenex = terms ZOhU §16.2 @ref:semantic.prenex_terms_zohu Implemented
Prenex across connected sentences §16.4 @ref:semantic.prenex_across_connected_sentences CLL §16.4: Prenex variables persist through connected sentences; scope reset only at new paragraph
Variable scope persistence §16.4 @ref:semantic.variable_scope_persistence CLL §16.4: Variables persist across sentences until new prenex or paragraph; var_bindings no longer reset per statement

6.3 Quantifiers (CLL Ch 16)

Status Feature CLL Reference Impl Ref Notes
Exact numbers (pa, re, ci, etc.) §16.3 @ref:semantic.exact_numbers_pa_re_ci_etc Implemented
Generalized quantifiers §16.6 @ref:semantic.generalized_quantifiers Quantifier parsing handles general forms via PA grammar; ro/su'o/exact numbers implemented; indefinite/subjective/approximate numbers parsed and return None from evaluator.
Indefinite numbers (so'a through so'u) §16.6 @ref:semantic.indefinite_numbers_so_a_through_so_u Parsed in PA grammar; evaluator returns None (correct for qualitative numbers)
Quantifier grouping with termsets §16.7 @ref:semantic.quantifier_grouping_with_termsets Quantifiers parsed via PA grammar; termset grouping via nu'i/nu'u structural markers; scope handled in jbo_parse via variable binding.
ro (universal) §16.3 @ref:semantic.ro_universal Implemented
su'o (existential) §16.2 @ref:semantic.su_o_existential Implemented

6.4 Scope & DeMorgan (CLL Ch 16)

Status Feature CLL Reference Impl Ref Notes
DeMorgan's Law rules §16.12 @ref:semantic.demorgan_s_law_rules Implemented in egglog_rules.egg §1
Double negative cancellation §15.2 @ref:semantic.double_negative_cancellation Implemented
Negation push-through (∀↔∃) §16.9 @ref:semantic.negation_push_through Implemented in §7
Scope distinctions with termsets §16.7 @ref:semantic.scope_distinctions_with_termsets Quantifier scope handled via prenex variable binding and FreeIn facts; termset scope via nu'i/nu'u markers; scope resolved in jbo_parse.
naku negation boundaries §16.9, §16.11 @ref:semantic.naku_negation_boundaries Negation push-through in §7 + partial distribution in §7c handle this. egglog_lower: generate_free_in_facts() + collect_free_in_facts() with 7 helper functions

7.1 Abstractor Types (CLL Ch 11)

Status Feature CLL Reference Impl Ref Notes
du'u (predication abstractor) §11.7 @ref:semantic.du_u_predication_abstractor Implemented with double-wrapping rules
jei (truth-value abstractor) §11.6 @ref:semantic.jei_truth_value_abstractor Implemented with double-wrapping rule
ka (property abstractor) §11.4 @ref:semantic.ka_property_abstractor Implemented with double-wrapping rules
li'i (experience abstractor) §11.9 @ref:semantic.li_i_experience_abstractor Implemented with double-wrapping rule
mu'e (point-event abstractor) §11.3 @ref:semantic.mu_e_point_event_abstractor Implemented with double-wrapping rule
ni (amount abstractor) §11.5 @ref:semantic.ni_amount_abstractor Implemented with double-wrapping rule
nu (event abstractor) §11.2 @ref:semantic.nu_event_abstractor Implemented with double-wrapping rules
pu'u (process abstractor) §11.3 @ref:semantic.pu_u_process_abstractor Implemented with double-wrapping rule
si'o (concept abstractor) §11.9 @ref:semantic.si_o_concept_abstractor Implemented with double-wrapping rule
su'u (general abstractor) §11.9 @ref:semantic.su_u_general_abstractor Implemented with double-wrapping rule
za'i (state abstractor) §11.3 @ref:semantic.za_i_state_abstractor Implemented with double-wrapping rule
zu'o (activity abstractor) §11.3 @ref:semantic.zu_o_activity_abstractor Implemented with double-wrapping rule

7.2 Abstractor Features (CLL Ch 7, 11)

Status Feature CLL Reference Impl Ref Notes
Abstractor connectives §11.12 @ref:semantic.abstractor_connectives Implemented — LogConnectedAbstractor and JoiConnectedAbstractor in jbo_syntax.rs; parsed and evaluated in jbo_parse.rs parse_tu()
Abstractor double-wrapping reduction §11.1 @ref:semantic.abstractor_double_wrapping_reduction Implemented for all 12 abstractors
Implicit ce'u arity for ka/ni abstractions §7.11, §11.4 @ref:semantic.implicit_ce_u_arity_for_ka_ni_abstractions When ka/ni has no explicit ce'u and no terms, arity defaults to the predicate's place count (position). E.g., lo ka prami → arity 2 (prami has 2 places), ensuring simxu lo ka prami = simxu lo ka ce'u ce'u prami. When terms are present (e.g., le ka mi prami), arity stays 1. Implemented: do_lambdas_min_arity() in parse_m.rs; ka/ni branch in parse_tu calculates min_arity from sub_bridi_state.arglist.position.
Sumti ellipsis in abstractions §11.1 @ref:semantic.sumti_ellipsis_in_abstractions Sumti can be elided within abstractions — default to zo'e (unspecified) via parse_sumti_atom default handling. kea/ke'e terminators elided per CLL.
ce'u (abstraction focus variable in ka) §7.11 @ref:semantic.ce_u_abstraction_focus_variable_in_ka LambdaVar implemented in SumtiAtom
ce'u placement determines property focus §11.4 @ref:semantic.ce_u_placement_determines_property_focus ce'u parsed as LambdaVar in SumtiAtom; marks lambda variable position in ka abstractions; placement in selbri determines property focus.
jai (abstraction conversion / sumti raising) §11.10 @ref:semantic.jai_abstraction_conversion_sumti_raising Implemented
kau (indirect question in du'u) §11.8 @ref:semantic.kau_indirect_question_in_du_u SumtiQ implemented in SumtiAtom
kei elidable terminator §11.1 @ref:semantic.kei_elidable_terminator Implemented
tu'a (sumti raising) §11.10 @ref:semantic.tu_a_sumti_raising Implemented

7.3 Event Contour Relationship (CLL Ch 11)

Status Feature CLL Reference Impl Ref Notes
Event type ↔ ZAhO pairing rules §11.11 @ref:semantic.event_type_zaho_pairing_rules Event type abstractors (mu'e/za'i/pu'u/zu'o) and ZAhO contours (co'a/ca'o/co'u etc.) parsed; validate_zaho_abstractor_pairing() added to jbo_parse.rs for CLL §11.11 compliance
tu_is_buha / do_buha §7.6, §7.12, §16.13, §19.6 (bu'a/bu'e/bu'i relation variables; xi subscripts) @ref:semantic.tu_is_buha bu'a/bu'e/bu'i are selma'o GOhA pro-bridi bound variables (second-order predicate logic, CLL §16.13). Only three cmavo exist by definition, so the series is hardcoded. Additional variables come from xi subscripts (CLL §19.6): bu'a xi re == bu'e, bu'a xi vo == a fresh 4th relation variable. do_buha maps the vowel (a→1, e→2, i→3) when no xi subscript is present and uses the subscript number directly when one is.
mu'e with pu'o/ba'o/co'i only §11.11 @ref:semantic.mu_e_with_pu_o_ba_o_co_i_only mu'e (point-event) abstractor parsed; ZAhO contours validated via validate_zaho_abstractor_pairing()
za'i with specific contours §11.11 @ref:semantic.za_i_with_specific_contours za'i (state abstractor) parsed; ZAhO contours validated via validate_zaho_abstractor_pairing()

8.1 Tense Conversion (CLL Ch 10)

Status Feature CLL Reference Impl Ref Notes
NAhE + tense (scalar negation of tense) §10.18 @ref:semantic.nahe_tense_scalar_negation_of_tense NAhE parsed as NAhE_clause; applied to tense via DecTagUnit::DecTagUnitMk; scalar negation of tense handled in parse_tag_helper.
Subscripted ki (kixipa, multiple reference points) §10.13 @ref:semantic.subscripted_ki_kixipa_multiple_reference_points Grammar: simple_tense_modal_ki_free_xi_number/2 for ki+subscript. TagUnit::KI(Option) carries subscript through syntax→semantic→egglog layers. CLL §130 selbri=[tag]selbri-1 implemented in grammar.
Tense as sumtcita (additional bridi place) §10.12 @ref:semantic.tense_as_sumtcita_additional_bridi_place Implemented
Tense negation (nai suffix on PU/FAhA/ZAhO) §10.18 @ref:semantic.tense_negation_nai_suffix_on_pu_faha_zaho Implemented
Tenseless = context-dependent §10.1 @ref:semantic.tenseless_context_dependent Implicit

8.2 Complex Tense Constructs (CLL Ch 10)

Status Feature CLL Reference Impl Ref Notes
Direction + distance + interval + property §10.3, §10.5 @ref:semantic.direction_distance_interval_property Implemented
FEhE space interval properties §10.11 @ref:semantic.fehe_space_interval_properties FEhE recognized as tag unit; parsed in DecTagUnit; space interval properties handled alongside VEhA.
Logical and non-logical connections between tenses §10.20 @ref:semantic.logical_and_non_logical_connections_between_tens Tense connections via logical connectives (je/ja) and non-logical (joi/ce) parsed; composition in jbo_parse.
Multiple directions (compound spatial) §10.3 @ref:semantic.multiple_directions_compound_spatial Implemented
Multiple distances §10.3 @ref:semantic.multiple_distances Implemented
Tense connection afterthought (.ijepu, etc.) §10.16 @ref:semantic.tense_connection_afterthought_ijepu_etc Tense connectives recognized in grammar; parsed via .i + tense cmavo sequence; semantic composition handled in jbo_parse via conn_to_fol.
Tense connection forethought §10.17 @ref:semantic.tense_connection_forethought Forethought tense connections parsed via gek + tense + gik pattern; semantic composition in jbo_parse via conn_to_fol.
Tense conversion (JAI) §10.22 @ref:semantic.tense_conversion_jai Implemented

9.1 Numbers & Punctuation (CLL §18.2–18.4)

Status Feature CLL Reference Impl Ref Notes
Basic digit cmavo (pa-so, no) §18.2 @ref:semantic.basic_digit_cmavo_pa_so_no Parsed as Numeral::PA in MexNumeralString
Complex number separator (ka'o as separator) §18.4 @ref:semantic.complex_number_separator_ka_o_as_separator ka'o separates real/imaginary parts in numeral strings: re ka'o ci = 2+3i. Standalone ka'o = i. MeksoValue::Complex variant added with full arithmetic (add, sub, mul, div, pow, abs, negate).
Decimal point (pi) as punctuation §18.3 @ref:semantic.decimal_point_pi_as_punctuation Evaluated in eval_numeral_string
Fraction slash (fi'u) §18.3 @ref:semantic.fraction_slash_fi_u Evaluated in eval_numeral_string
Multi-digit numbers (pa re ci = 123) §18.2 @ref:semantic.multi_digit_numbers_pa_re_ci_123 Digit strings parsed into numeral lists
PA bound quantifiers in LE/LO descriptions (le za'u da, lei za'u da) §18.8, §6.7 @ref:grammar.sumti_tail_sumti_tail_1 sumti_tail_sumti_tail_1 exposes CLL sumti-tail-1 quantifier sumti in descriptions
Percentage (ce'i) §18.3 @ref:semantic.percentage_ce_i Evaluated in eval_numeral_string
Repeating decimal (ra'e) §18.3 @ref:semantic.repeating_decimal_ra_e Evaluated in eval_numeral_string
Signs (ma'u, ni'u) as numbers §18.3 @ref:semantic.signs_ma_u_ni_u_as_numbers Evaluated in eval_numeral_string
Special numbers (ci'i ∞, ka'o i, pai π, te'o e, fi'u φ) §18.4 @ref:semantic.special_numbers_ci_i_ka_o_i_pai_te_o_e_fi_u Evaluated in eval_numeral_string
Thousands comma (ki'o) §18.3 @ref:semantic.thousands_comma_ki_o Evaluated in eval_numeral_string

9.2 Operators & Infix (CLL §18.5, §18.14, §18.24)

Status Feature CLL Reference Impl Ref Notes
Absolute value (cu'a) §18.5, §18.24 @ref:semantic.absolute_value_cu_a Evaluated in eval_mekso: cu'a(x) =
Basic operators (su'i, vu'u, pi'i, te'a) §18.5, §18.24 @ref:semantic.basic_operators_su_i_vu_u_pi_i_te_a Algebraic rules: commutativity, identity, annihilation, associativity, distributivity; evaluation via eval_mekso. earley_to_syntax: convert_mex, convert_operator, convert_mex_forethought
Derivative (sa'o) §18.5, §18.24 @ref:semantic.derivative_sa_o Symbolic — returns None from eval_mekso; parsed as OpVUhU in grammar
Division (fe'i) §18.5, §18.24 @ref:semantic.division_fe_i Algebraic rules: identity, annihilation; evaluated in eval_mekso
Factorial (ne'o) §18.5, §18.24 @ref:semantic.factorial_ne_o Evaluated in eval_mekso: ne'o(n) = n! (0–20)
Integral (ri'o) §18.5, §18.24 @ref:semantic.integral_ri_o Symbolic — returns None from eval_mekso (cannot be numerically evaluated); parsed as OpVUhU in grammar
Logarithm (de'o) §18.5, §18.24 @ref:semantic.logarithm_de_o Evaluated in eval_mekso: de'o(base, x) = log_base(x)
Negation/additive inverse (va'a) §18.5, §18.24 @ref:semantic.negation_additive_inverse_va_a Evaluated in eval_mekso: va'a(x) = -x
Non-specific operator (fu'u) §18.5, §18.24 @ref:semantic.non_specific_operator_fu_u Symbolic — returns None from eval_mekso; parsed as OpVUhU in grammar
Nth root (fe'a) §18.5, §18.24 @ref:semantic.nth_root_fe_a Evaluated in eval_mekso: fe'a(n, x) = x^(1/n)
Null operand (tu'o) §18.5 @ref:semantic.null_operand_tu_o Parsed as MexNumeralString(\
Null operator (ge'a) §18.5 @ref:semantic.null_operator_ge_a Parsed as OpVUhU(\
Operator precedence (bi'e) §18.20 @ref:semantic.operator_precedence_bi_e Grammar rule operand_bi_e added to earley_word_grammar.egg; convert_operand_bi_e in earley_to_syntax.rs wraps right operand in MexPrecedence; morphology already maps bi'e to BIhE_clause
Parentheses (vei/ve'o) §18.5 @ref:semantic.parentheses_vei_ve_o Grammar now has explicit VEI/VEhO rules (grammar.mex_2_grouping); convert_mex_2 handles grouping; eval_mekso unwraps MexPrecedence.
Ratio (pa'i) §18.5, §18.24 @ref:semantic.ratio_pa_i Evaluated in eval_mekso: pa'i(a, b) = a/b
Reciprocal (fa'i) §18.5, §18.24 @ref:semantic.reciprocal_fa_i Evaluated in eval_mekso: fa'i(x) = 1/x
Scientific notation (gei) §18.5, §18.24 @ref:semantic.scientific_notation_gei Evaluated in eval_mekso: gei(exp, mantissa) = mantissa × 10^exp
Sigma summation (si'i) §18.5, §18.24 @ref:semantic.sigma_summation_si_i Symbolic — returns None from eval_mekso; parsed as OpVUhU in grammar

9.3 Forethought & Reverse Polish (CLL §18.6, §18.16)

Status Feature CLL Reference Impl Ref Notes
Forethought flag (pe'o) §18.6 @ref:semantic.forethought_flag_pe_o Handled in grammar.mex_2_forethought and grammar.mex_2_forethought_multi grammar rules
Forethought operators (pe'o ... ku'e) §18.6 @ref:semantic.forethought_operators_pe_o_ku_e Grammar has PEhO/KUhE rules (grammar.mex_2_forethought, grammar.mex_2_forethought_multi); convert_mex_forethought handles evaluation
Forethought terminator (ku'e) §18.6 @ref:semantic.forethought_terminator_ku_e Handled in grammar.mex_2_forethought and grammar.mex_2_forethought_multi grammar rules
Reverse Polish (fu'a) §18.16 @ref:semantic.reverse_polish_fu_a MexReversePolish variant in AST; eval_mekso converts to Operation; fully working
boi (numeral/lerfu terminator) §18.6 @ref:semantic.boi_numeral_lerfu_terminator Classified in morphology; typically elided in CLL — parser handles numeral/lerfu termination through grammar structure without requiring explicit BOI

9.4 Non-decimal & Compound Bases (CLL §18.10)

Status Feature CLL Reference Impl Ref Notes
Base operator (ju'u) §18.10 @ref:semantic.base_operator_ju_u Evaluated in eval_mekso: ju'u(base, number) interprets number in base
Compound base point (pi'e) §18.10 @ref:semantic.compound_base_point_pi_e Recognized in eval_numeral_string; returns None (not evaluatable as single number)
Hex digits (dau, fei, gai, jau, rei, vai) §18.10 @ref:semantic.hex_digits_dau_fei_gai_jau_rei_vai dau parsed in PA grammar; hex evaluation in pa_to_hex_digit

9.5 Vectors & Matrices (CLL §18.15)

Status Feature CLL Reference Impl Ref Notes
Matrix column combiner (sa'i) §18.15 @ref:semantic.matrix_column_combiner_sa_i Evaluates to Matrix when matrix-eval feature enabled
Matrix row combiner (pi'a) §18.15 @ref:semantic.matrix_row_combiner_pi_a Evaluates to Matrix when matrix-eval feature enabled
Vector start (jo'i) §18.15 @ref:semantic.vector_start_jo_i Grammar has JOhI support; evaluation returns Vector when matrix-eval enabled
Vector/matrix terminator (te'u) §18.15 @ref:semantic.vector_matrix_terminator_te_u Parsed in TEhU grammar rules

9.6 Indefinite & Approximate Numbers (CLL §18.8–18.9)

Status Feature CLL Reference Impl Ref Notes
All-but (da'a) §18.8 @ref:semantic.all_but_da_a Parsed in PA grammar; evaluator returns None
Approximate (ji'i) §18.9 @ref:semantic.approximate_ji_i Parsed in PA grammar; evaluator returns None
At least (su'o) — as number §18.8 @ref:semantic.at_least_su_o_as_number Parsed in PA grammar; evaluator returns None (also used as existential quantifier)
At most (su'e) §18.8 @ref:semantic.at_most_su_e Parsed in PA grammar; evaluator returns None
Fractional indefinites (piro, piso'a–piso'u, pino'o) §18.8 @ref:semantic.fractional_indefinites_piro_piso_a_piso_u_pino_o pi + indefinite number combos parsed in PA grammar; evaluator returns None (correct for qualitative/compound indefinite numbers).
Indefinite numbers (so'a–so'u) §18.8 @ref:semantic.indefinite_numbers_so_a_so_u Parsed in PA grammar; evaluator returns None (correct for qualitative numbers)
Less than (me'i) §18.8 @ref:semantic.less_than_me_i Parsed in PA grammar; evaluator returns None
More than (za'u) §18.8 @ref:semantic.more_than_za_u Parsed in PA grammar; evaluator returns None
PA quantifier with explicit boi in sumti §6.6, §18.6, §18.8 @ref:semantic.quantifier_num_boi quantifier_num_boi per CLL number /BOI#/; za'u boi da valid; za'u boi re not CLL bound-quantifier form (use za'u re) — @ref:semantic.invalid_approx_boi_digit_split
Reject approx-prefix boi digit split (post-CFG filter) §18.6, §18.8 @ref:semantic.invalid_approx_boi_digit_split boi splits PA strings (cf. re boi ci); CLL bound quantifiers use za'u re not za'u boi re
Subjective numbers (rau, du'e, mo'a) §18.8 @ref:semantic.subjective_numbers_rau_du_e_mo_a Parsed in PA grammar; evaluator returns None
Typical number (no'o) §18.8 @ref:semantic.typical_number_no_o Parsed in PA grammar; evaluator returns None

9.7 Mekso Selbri & Conversions (CLL §18.7, §18.11, §18.18–18.19)

Status Feature CLL Reference Impl Ref Notes
Forethought mekso (pe'o...ku'e) §18.6 @ref:semantic.forethought_mekso_pe_o_ku_e Grammar has PEhO/KUhE rules; convert_mex_forethought handles evaluation
Interval connective use in mekso §18.5 @ref:semantic.interval_connective_use_in_mekso bi'i/bi'o used in mekso context — parsed via interval connective grammar rules; conversion handles interval operands.
Mekso in descriptions (li mekso lo'o) §18.5 @ref:semantic.mekso_in_descriptions_li_mekso_lo_o li...lo'o wraps mekso as sumti
Mekso selbri (du, mleca, zmadu, etc.) §18.7, §18.11 @ref:semantic.mekso_selbri_du_mleca_zmadu_etc du implemented as JboRel::Equal; comparison selbri (mleca, zmadu) parsed as regular brivla with standard semantics.
Mekso selbri with place structure (dunli, etc.) §18.11 @ref:semantic.mekso_selbri_with_place_structure_dunli_etc Parsed as regular brivla; comparison selbri (mleca, zmadu) have standard brivla semantics with standard place structures.
NAhE scalar negation on operators §18.18 @ref:semantic.nahe_scalar_negation_on_operators Grammar: operator_nahe: NAhE_clause operator; conversion: Operator::OpScalarNegated(nahe, inner) in convert_operator
NIhE selbri-to-operand (ni'e) §18.18, §18.21 @ref:grammar.operand_ni_e_selbri operand_ni_e_selbri; AST convert_operand_3_2 → MexSelbri
ni'e nu'a operator-to-operand chain §18.18, §18.21 @ref:semantic.ni_e_nu_a_operator_to_operand §18.18: NIhE + selbri + TEhU → MexSelbri via convert_operand_3_2. §18.21: operator→operand composes nu'a (tanru_unit_2_nuha_operator) inside selbri; grammar operand_ni_e_selbri; test_ni_e_nu_a_operator_to_operand
cu'o (probability selbri) §18.18 @ref:semantic.cu_o_probability_selbri Implemented — same as si'e via MOI_clause handling
du (equals) §18.7 @ref:semantic.du_equals JboRel::Equal, fully implemented
ma'o (operand to operator) §18.6 @ref:semantic.ma_o_operand_to_operator Implemented — convert_operator handles MAhO_clause, returns OpMex
me (sumti to selbri) §18.7 @ref:semantic.me_sumti_to_selbri JboRel::Among, implemented
me'o (mekso article) §18.19 @ref:semantic.me_o_mekso_article Grammar: operand_mo_e_sumti: cmavo sumti cmavo; conversion: convert_operand_3_3 produces MexSumti
mekso selbri (dunli, mleca, zmadu, etc.) §18.7, §18.11 @ref:semantic.mekso_selbri_dunli_mleca_zmadu_etc Parsed as regular brivla via TUBrivla; standard brivla semantics applied; comparison selbri have standard place structures.
mo'e (sumti to operand) §18.18 @ref:semantic.mo_e_sumti_to_operand Implemented — convert_operand_3_3 handles MOhE_clause, returns MexSumti
moi/mei (number to selbri) §18.18 @ref:semantic.moi_mei_number_to_selbri JboRel::Moi, implemented
na'ebo/to'ebo on operands §18.18 @ref:semantic.na_ebo_to_ebo_on_operands Grammar: operand_nahe_bo: NAhE_clause BO_clause operand; conversion: convert_operand_nahe_bo produces Mex::QualifiedMex(NAhE_BO(...), inner)
na'u (selbri to operator) §18.18 @ref:semantic.na_u_selbri_to_operator Implemented — convert_operator handles NAhU_clause, returns OpSelbri
nu'a (operator to selbri) §18.19 @ref:grammar.nu_a_operator_to_selbri Nests inside ni'e … te'u selbri for §18.21 operator-to-operand chain
se conversion on operators §18.18 @ref:semantic.se_conversion_on_operators Grammar: operator_se: SE_clause operator; conversion: Operator::OpPermuted(perm, inner) in convert_operator
si'e (portion selbri) §18.18 @ref:semantic.si_e_portion_selbri Implemented — convert_tanru_unit_2 handles MOI_clause, creates TUMoi with MexLi sumti
va'e (scale selbri) §18.18 @ref:semantic.va_e_scale_selbri Implemented — same as si'e via MOI_clause handling
xo (number question) §18.12 @ref:semantic.xo_number_question Implemented — see §6.1

9.8 Mekso Evaluator (NEEDED for full semantics)

Status Feature CLL Reference Impl Ref Notes
Algebraic rules enhancement §18.5, §18.24 @ref:semantic.algebraic_rules_enhancement Covers su'i/pi'i/vu'u/fe'i/te'a commutativity, identity, annihilation, associativity; distributivity; te'a special cases
Basic lerfu words (by., cy., dy., etc.) §17.2 @ref:semantic.basic_lerfu_words_by_cy_dy_etc LerfuString implemented in SumtiAtom. jbo_prop: lerfu system representation needed
Complex number arithmetic §18.4 @ref:semantic.complex_number_arithmetic ka'o as real/imaginary separator in numeral strings; MeksoValue::Complex variant; full arithmetic (add, sub, mul, div, pow, abs, negate); modulus via cu'a; Display format: re ka'o ci
Egglog lowering improvement §18.2 @ref:semantic.egglog_lowering_improvement MexNumeralString now evaluated via eval_numeral_string before lowering to egglog
Lerfu string composition rules §17.8 @ref:semantic.lerfu_string_composition_rules LerfuComposite(Vec) handles composition; jboshow_lerfu_string joins elements; tei...foi wrapping for compound forms.
Lerfu strings as pro-sumti §17.9 @ref:semantic.lerfu_strings_as_pro_sumti SumtiAtom::LerfuString(Vec) in jbo_syntax.rs; constructed in earley_to_syntax.rs; formatted in jbo_show as lerfu string sumti.
Lerfu strings as sumti (by cmene, du'e, etc.) §17.9 @ref:semantic.lerfu_strings_as_sumti_by_cmene_du_e_etc SumtiAtom::LerfuString(Vec) serves as lerfu string sumti; used in descriptions (lo/le + lerfu).
Math expression evaluator §18.5, §18.24 @ref:semantic.math_expression_evaluator eval_mekso(JboMex) -> Option<MeksoValue> implemented in jbo_prop.rs with 45+ unit tests. typed_dictionary: mekso type system (number, operator, operand)
Matrix arithmetic §18.15 @ref:semantic.matrix_arithmetic su'i/vu'u element-wise, pi'i matmul, te'a power — behind matrix-eval feature
Matrix row/column combiners §18.15 @ref:semantic.matrix_row_column_combiners pi'a/sa'i — behind matrix-eval feature
Matrix transpose (re'a) §18.15 @ref:semantic.matrix_transpose_re_a Behind matrix-eval feature — uses peroxide Matrix::transpose
MeksoValue type §18.2 @ref:semantic.meksovalue_type MeksoValue enum: Scalar(f64), Complex{real,imag}, Vector(Vec), Matrix(peroxide::Matrix) — Matrix/Vector variants behind matrix-eval feature flag
Non-Lojban alphabets (ge'o, je'o, etc.) §17.5 @ref:semantic.non_lojban_alphabets_ge_o_je_o_etc Recognized in morphology as PA/cmavo; LerfuShift variant supports alphabet switching. Not fully implemented for non-Lojban character mapping.
Numeral string evaluation §18.2 @ref:semantic.numeral_string_evaluation eval_numeral_string(Vec<Numeral>) -> Option<MeksoValue> implemented; returns Scalar for real numbers, Complex for ka'o-separated numbers
Universal bu (any word → lerfu) §17.4 @ref:semantic.universal_bu_any_word_lerfu LerfuValsi(word) represents word-as-lerfu via bu conversion; formatted as \
Upper/lower case shifts (ga'e, to'a) §17.3 @ref:semantic.upper_lower_case_shifts_ga_e_to_a LerfuShift variant in Lerfu enum; LerfuShifted(Cmavo, Box) for shifted forms; formatted in jbo_show/eval_show. Grammar: GA_clause mapped.
Vector arithmetic §18.15 @ref:semantic.vector_arithmetic su'i/vu'u element-wise, pi'i scalar multiply, cu'a norm — behind matrix-eval feature
eval_mekso_scalar helper §18.5 @ref:semantic.eval_mekso_scalar_helper eval_mekso_scalar extracts f64 from MeksoValue::Scalar
lau (punctuation marks) §17.7 @ref:semantic.lau_punctuation_marks LerfuShift(\
me'o for referencing lerfu §17.10 @ref:semantic.me_o_for_referencing_lerfu me'o constructs MexSumti(sumti) in jbo_syntax; grammar: operand_mo_e_sumti handles me'o + sumti. Lerfu strings as mex operands.
se'e (character codes) §17.13 @ref:semantic.se_e_character_codes se'e recognized as PA cmavo in morphology; numeric character codes parsed but not evaluated to Unicode codepoints.
tei...foi compound lerfu words §17.6 @ref:semantic.tei_foi_compound_lerfu_words LerfuComposite(Vec) in Lerfu enum; jbobracket(\

11.1 Emotion Indicators (CLL Ch 13)

Status Feature CLL Reference Impl Ref Notes
a-series propositional attitudes §13.3 @ref:semantic.a_series_propositional_attitudes Parsed as Free::Indicator; a'o mapped to sruma when indicator_texticules enabled.
e-series propositional attitudes §13.3 @ref:semantic.e_series_propositional_attitudes Parsed as Free::Indicator; ba'a mapped to sance when indicator_texticules enabled.
i-series emotions §13.2 @ref:semantic.i_series_emotions Parsed as Free::Indicator; iu mapped to prami when indicator_texticules enabled.
o-series emotions §13.2 @ref:semantic.o_series_emotions Parsed as Free::Indicator; oi mapped to flibu when indicator_texticules enabled.
u-series emotions (ui, .ui, etc.) §13.2 @ref:semantic.u_series_emotions_ui_ui_etc Parsed as Free::Indicator; when indicator_texticules enabled, converted to bridi-tail side effects (ui→gleki).

11.2 Scale System (CLL Ch 13)

Status Feature CLL Reference Impl Ref Notes
Scale markers (cai, sai, ru'e, cu'i) §13.4 @ref:semantic.scale_markers_cai_sai_ru_e_cu_i Parsed as Free::Indicator; mapped in indicator_bridi_tail when indicator_texticules enabled.
ge'e (non-specific emotion separator) §13.4 @ref:semantic.ge_e_non_specific_emotion_separator Parsed as Free::Indicator; non-specific emotion marker.
nai negation of scales §13.4 @ref:semantic.nai_negation_of_scales Parsed; nai suffix split off from indicator_cmavo; negated indicator returns None from indicator_bridi_tail.

11.3 Emotional Categories (CLL Ch 13)

Status Feature CLL Reference Impl Ref Notes
ro'a through re'e categories §13.5, §13.6 @ref:semantic.ro_a_through_re_e_categories Mapped in indicator_bridi_tail: ro'a (social), ro'e (intellectual), roi (emotional), rei (mystical), ra'a (physical), re'e (spiritual).

11.5 Vocatives (CLL Ch 6, 13)

Status Feature CLL Reference Impl Ref Notes
COI vocatives (coi, co'o, etc.) §6.11, §13.14 @ref:semantic.coi_vocatives_coi_co_o_etc Parsed as Free::Vocative
DOI general vocative §6.11, §13.14 @ref:semantic.doi_general_vocative Parsed
Vocative + bare selbri §6.11, §13.14 @ref:semantic.vocative_bare_selbri Parsed via COI/DOI grammar rules; vocative + name/brivla handled in earley_to_syntax convert_free; do'u terminator supported.
Vocative + name §6.11, §13.14 @ref:semantic.vocative_name Parsed
do'u terminator §6.11, §13.14 @ref:semantic.do_u_terminator Implemented

11.6 Miscellaneous (CLL Ch 13, 19)

Status Feature CLL Reference Impl Ref Notes
Attitude contours (bu'o) §13.10 @ref:semantic.attitude_contours_bu_o bu'o mapped in indicator_bridi_tail when indicator_texticules enabled.
Attitude questions (pei) §13.10 @ref:semantic.attitude_questions_pei pei mapped to casnu in indicator_bridi_tail when indicator_texticules enabled. Parsed as CAI/PEI/UI cmavo.
Attitude scope markers (fu'e/fu'o) §19.8 @ref:semantic.attitude_scope_markers_fu_e_fu_o Implemented via indicator_scope_depth in ParseState; fu'e opens scope, fu'o closes it (CLL §13.9).
Attitudinal modifiers (ga'i, le'o, etc.) §13.7 @ref:semantic.attitudinal_modifiers_ga_i_le_o_etc ga'i, le'o, ru'e, cu'i, sai, cai, je'e mapped in indicator_bridi_tail when indicator_texticules enabled.
Discourse management (ta'o, ra'u, etc.) §13.13 @ref:semantic.discourse_management_ta_o_ra_u_etc ta'o, ra'u mapped in indicator_bridi_tail when indicator_texticules enabled.
Discursives (ku'i, ji'a, etc.) §13.12 @ref:semantic.discursives_ku_i_ji_a_etc Parsed as Free::Indicator; ku'i, ji'a mapped to bridi-tail side effects when indicator_texticules enabled.
Empathy (dai) §13.10 @ref:semantic.empathy_dai dai mapped to tavla in indicator_bridi_tail when indicator_texticules enabled.
Erasure (si, sa, su) §19.13 (SI/SA/SU erasure at morphology level) @ref:morph.apply_erasure Implemented via apply_erasure() — pre-parse token erasure between morphology and grammar, per CLL §19.13. ⚠️ PARTIAL: verify SA erases across utterance boundaries. — Deviation: SA utterance-level erasure across boundaries needs verification
Evidentials (ja'o, ca'e, ba'a, etc.) §13.11 @ref:semantic.evidentials_ja_o_ca_e_ba_a_etc Parsed as Free::Indicator; ja'o, ca'e, ba'a mapped to bridi-tail side effects when indicator_texticules enabled.
Hesitation (.y.) §19.14 @ref:semantic.hesitation_y .y. recognized as a CmavoNamed in morphology (via earley_morph_rules). Parsed as a cmavo; acts as filler with no semantic content.
Indicator scope (fu'e/fu'o) §13.9, §19.8 @ref:semantic.indicator_scope_fu_e_fu_o fu'e/fu'o handled in eval_free_with_context: fu'e increments indicator_scope_depth, fu'o decrements. Scope blocks track attitudinal application range.
Indicator scope resolution §19.8, §13.9 @ref:semantic.indicator_scope_resolution Indicators apply to preceding word by default; split_off_nai extracts nai suffix. When indicator_texticules enabled, converted to bridi-tail side effects with correct scope.
Indicators on .i (sentence-level attitudes) §19.8, §13.9 @ref:semantic.indicators_on_i_sentence_level_attitudes Parsed via grammar.indicators_ui / grammar.free_to_text_toi grammar rules; scope tracked via indicator_scope_depth in ParseState.
Questions and answers §19.5 @ref:semantic.questions_and_answers Parsed; QTruthModal for truth questions; ConnQuestion for connective questions; QSumti/QBridi for sumti/bridi questions; full question infrastructure in parse_m.rs
SEI metalinguistic bridi §19.12 @ref:semantic.sei_metalinguistic_bridi Discursive implemented in Free enum
SOI reciprocity §7.8 @ref:semantic.soi_reciprocity SOI implemented in Free enum
Subscripts (xi) §18.13, §19.6 @ref:semantic.subscripts_xi Grammar: free_xi_number (XI mex free) + sumti_6_koha_frees (cmavo free) rules; convert_sumti_6 handles sumti_6_koha_frees with Free::XI(Mex); do_frees resolves xi subscripts via prev_frees lookback; attach_subscript encodes subscript in variable name; full-subscripts feature flag gates implementation. CLL §16.14 compliant.
TO...TOI parentheticals §19.12 @ref:semantic.to_toi_parentheticals Bracketed implemented in Free enum
Topic-comment (zo'u) §19.4 @ref:semantic.topic_comment_zo_u Implemented
Utterance ordinals (mai, mo'o) §19.7 @ref:semantic.utterance_ordinals_mai_mo_o Parsed
ba'e/za'e emphasis §19.11 @ref:semantic.ba_e_za_e_emphasis ba'e and za'e handled in eval_free_with_context when indicator_texticules enabled — recognized as emphasis markers; structural emphasis preserved through parsing.
bi'u (new information) §13.13 @ref:semantic.bi_u_new_information Parsed as UI/UI3 cmavo; mapped to indicator_bridi_tail when indicator_texticules enabled.
da'o (cancel all assignments) §7.13, §19.3 @ref:semantic.da_o_cancel_all_assignments CLL §7.13: da'o cancels all pro-sumti (ko'a, ko'e, etc.) and pro-bridi (go'i, go'e, etc.) bindings; supports variable-specific cancellation with full-subscripts feature
fa'o (end of text) §19.15 @ref:semantic.fa_o_end_of_text Implemented — FAhO morphology rule, text_1_faho grammar rule, convert_text_1 handles FAhO
kau (indirect question) §11.8 @ref:semantic.kau_indirect_question SumtiQ implemented in SumtiAtom
ni'o / no'i paragraph management §19.3 @ref:semantic.ni_o_no_i_paragraph_management Implemented
ni'oni'o context cancellation §19.3 @ref:semantic.ni_oni_o_context_cancellation CLL §19.3: ni'oni'o cancels pro-sumti (KOhA) and pro-bridi (GOhA) assignments; da'o provides explicit cancellation
pau (question premarker) §13.13 @ref:semantic.pau_question_premarker Added to indicator_bridi_tail in jbo_parse.rs
pe'a (figurative language) §13.13 @ref:semantic.pe_a_figurative_language Parsed as UI/UI3 cmavo; mapped to indicator_bridi_tail when indicator_texticules enabled.
xu (truth question) §14.13, §15.8 @ref:semantic.xu_truth_question Parsed; QTruthModal wrapping in semantic layer; questions are opaque markers

12. TEXT STRUCTURE (CLL Ch 19)

Status Feature CLL Reference Impl Ref Notes
Paragraph AST conversion (nested paragraph_fragment) §19.1 @ref:ast.convert_paragraph Recurses into nested paragraph_* nodes so paragraph_fragment → fragment_terms converts (e.g. li ni'e nu'a su'i te'u mekso fragments)

12b.4 Status

Status Feature CLL Reference Impl Ref Notes
AST: sumti_6_koha_frees with frees §6.1–6.15, §7, §19.9–19.10 (sumti-6 alternatives: descriptions, pro-sumti, names, quotations) @ref:ast.convert_sumti_6 KOhA via koha_cmavo_to_sumti_atom + morphology selma'o; elided inner sumti uses SumtiAtom::Zohe; quantified descriptions use default_quantified_gadri()
Grammar: free_xi_number (XI mex free) §16.14, §18.13 (XI subscript free modifier) @ref:grammar.free_xi_number Compound free modifier for xi
Grammar: sumti_6_koha_frees (cmavo free) §16.14, §18.13 (KOhA with free modifiers; subscripts via free_xi_number) @ref:grammar.sumti_6_koha_frees KOhA with frees (CLL KOhA #)
Morphology classification §16.14, §18.13 @ref:ast.morphology_classification XI cmavo class recognized
Tests §16.14, §18.13 @ref:ast.tests 10 tests in subscript_tests.rs

13.1 Selma'o Catalogue (CLL Ch 20)

Status Feature CLL Reference Impl Ref Notes
Catalogue reference for implementation §20.1 @ref:grammar.catalogue_reference_for_implementation Used as reference during implementation
Complete selma'o classification §20.1 @ref:grammar.complete_selma_o_classification All selma'o defined in typed_dictionary; morphology classifies cmavo into selma'o

13.2 Formal Grammar (CLL Ch 21)

Status Feature CLL Reference Impl Ref Notes
EBNF grammar implementation §21.1 @ref:grammar.ebnf_grammar_implementation Implemented as earley_word_grammar.egg (Earley parser); grammar rules derived from CLL EBNF
Grammar completeness §21.1 @ref:grammar.grammar_completeness All grammar rules from CLL §21 in earley_word_grammar.egg (CLL CFG + Earley).

14.1 Implemented Rules (Internal egglog rules — no direct CLL mapping)

Status Feature CLL Reference Impl Ref Notes
§1 Propositional Logic §14.1, §14.21, §16.12 (propositional logic rewrite rules) @ref:egglog.propositional-logic Double negation, De Morgan, absorption, distributivity, idempotency, commutativity, associativity, implication/equivalence expansion, contrapositive
§10 Abstraction §11.1 @ref:egglog.10_abstraction Double-wrapping reduction for all 12 abstractors
§11 ModalRel §9.6, §9.12 @ref:egglog.11_modalrel TaggedNoTerm composition/commutativity
§11b AppliedRelRel §9.6 @ref:egglog.11b_appliedrelrel Empty terms identity, scalar negation/modal distribution
§12 Anaphora §7.5, §7.6 @ref:egglog.12_anaphora Variable binding resolved before lowering
§13 FA-Tag §9.3 @ref:egglog.13_fa_tag Explicit place equivalence
§14 Mekso Operators §18.5, §18.24 @ref:egglog.14_mekso_operators su'i/pi'i/vu'u/fe'i/te'a algebraic rules
§14b CUhE Metatension §10.24 @ref:egglog.14b_cuhe_metatension QTruthModal for tense questions; CUhE parsed as TagUnit::CUhE
§15 GAhO §14.16 @ref:egglog.15_gaho GAhO endpoint semantics: interval degeneracy (ga'o bi'i ga'o p p = p), interval inclusion (closed contains open); composite keys for GAhO+BIhI combinations
§15 Inner Quantifier §5.11, §18.18 @ref:egglog.15_inner_quantifier moi/mei rules
§16 Interval Connectives §14.16 @ref:egglog.16_interval_connectives bi'o degeneracy, bi'i/mi'i in §2
§16 nu'a Operator-to-Selbri §18.19 @ref:egglog.16_nu_a_operator_to_selbri OperatorRel wrapper for operator-to-selbri conversion; nu'a parsed as TUOperator
§17 CEI Equality §7.5 @ref:egglog.17_cei_equality BridiBinding in parse
§17 Forethought Termset §14.11 @ref:egglog.17_forethought_termset nu'i/nu'u structural markers parsed; termset grouping handled by parser which flattens terms into surrounding context
§18 Modal Relative Phrases §9.10 @ref:egglog.18_modal_relative_phrases pe/ne + BAI handled via parse_goi_rel with TagRel
§2 Lojban Connectives §14.14, §14.16 @ref:egglog.2_lojban_connectives joi, ce, jo'e, ku'a commutativity/idempotency; ce'o sequence (degeneracy + associativity), ce'e (degeneracy + commutativity), fa'u (degeneracy), bi'o (degeneracy), bi'i/mi'i commutativity
§2b Scalar Sumti Qualifiers §6.10, §15.6 @ref:egglog.2b_scalar_sumti_qualifiers na'ebo, to'ebo, no'ebo, je'abo parsed as QualifiedTerm with semantic handling
§3 SE-Conversion §5.11, §9.4 @ref:egglog.3_se_conversion se/te/ve/xe with cancellation and place swaps (2-5 place)
§4 Scalar Negation §15.3, §15.4 @ref:egglog.4_scalar_negation nai, to'e, na'e normalization; double cancellation; distribution
§4b ja'a Affirmation §15.9 @ref:egglog.4b_ja_a_affirmation 7 rewrite rules: identity, PNot absorption, idempotency, distribution, cancellation with na'e
§4c je'a Affirmation §15.9 @ref:egglog.4c_je_a_affirmation 7 rewrite rules: identity, PNot absorption, idempotency, distribution, cancellation with na'e
§5 Tanru §5.2, §5.3 @ref:egglog.5_tanru Reflexive identity, right-grouping, ScalarNegRel distribution
§5b Tanru Connective §5.6, §14.14 @ref:egglog.5b_tanru_connective je/ja/joi/jo'e/ku'a commutativity, reflexive identity
§6 Modal/Tense §9.6, §10.12 @ref:egglog.6_modal_tense NonVeridical idempotency, TaggedNoTerm idempotency, bridi na/tense-modal order lift, modal distribution over PAnd/POr
§7 Quantifiers §16.2, §16.9 @ref:egglog.7_quantifiers Neg push-through, Exactly-1, distribution, Eet absorption
§7b naku Negation §16.9, §16.11 @ref:egglog.7b_naku_negation Documented; basic quantifier inversion
§7c Quantifier Scope Conditional §16.9, §16.4 @ref:egglog.7c_quantifier_scope_conditional 12 conditional rules using FreeIn facts: partial distribution (∧/∨/→), vacuous quantification. FreeIn(i64) function asserted during lowering.
§8 Equality (du) §7.14 @ref:egglog.8_equality_du Symmetry, reflexivity, transitivity
§9 Among (lo/le) §6.2, §6.8 @ref:egglog.9_among_lo_le Set-membership with singleton identity

17. PROLOG EXPORT — tersmu parity

Status Feature CLL Reference Impl Ref Notes
Convert JboProp to SWI-Prolog clause @ref:prolog.prop_to_prolog Fact, Rule, Query, Body modes; SWI dialect
Convert parsed Text to Prolog source @ref:prolog.eval_text_to_prolog WASM JSON prolog key; eval_text → semantic_results_to_prolog (SWI dialect)
Convert parsed Text to Prolog source in a chosen dialect @ref:prolog.eval_text_to_prolog_dialect Dialect-aware: tersmu (examples/*.loj parity) or swi (executable)
Convert semantic results to Prolog program @ref:prolog.semantic_results_to_prolog Facts, rules, queries from .i sentences and implications; SWI dialect
JboOperator → is/2 executable goals (SWI) @ref:prolog.swi_mex_is_goal Equal with arithmetic mex on one side lowers to X is Expr in SWI dialect
JboRel coverage (AbsPred/AbsProp/Moi) in Prolog lowerer @ref:prolog.lower_jbo_rel_abs_moi AST lowerer maps abstractions to Compound(abs, [body, …outer]) (nu, ka, du'u, mei)
Tanru seltau juxtaposition in convert_selbri_3 §5.7 @ref:ast.convert_selbri_3_tanru selbri_3_selbri_3_selbri_4 builds SBTanru(seltau, tertau); fixes dropped seltau (tersmu applySeltau parity)
Tersmu ----- per-line framing in tersmuLines display @ref:prolog.tersmu_lines_framing eval_text_to_tersmu_lines: each input line → > {line} / prolog / rewrite / ----- block
Tersmu ju'a nai / cy no rewrite section in tersmuLines display @ref:prolog.tersmu_rewrite_section Rewrite section uses canonical jbo_show output (non-veridical modals, Skolem constants)
Tersmu prolog-section rendering (connectives + shapes) @ref:prolog.tersmu_prolog_section tersmu_show_prop + normalize_tersmu_connectives: !/-->/<->, nu[…]/ka[…]/<…>…, non-veridical:

16

Status Feature CLL Reference Impl Ref Notes
Olog (dzaske) integration — extraction, validation, querying, egglog layers @ref:feature.olog Behind olog feature flag (enabled by default)

16.2

Status Feature CLL Reference Impl Ref Notes
Olog extraction from JboProp tree @ref:olog.extract_olog Walks TexticuleProp; emits types, aspects, facts, 2-cells from brivla and connectives
Olog instance population from JboTerm leaves @ref:olog.populate_instances Ground terms → instance IDs; brivla predications → event IDs and aspect apps

16.3

Status Feature CLL Reference Impl Ref Notes
Olog 2-cell validation @ref:olog.validate_two_cells Validates subsumption and implication 2-cells against instances
Olog fact validation @ref:olog.validate_facts Validates commutative diagram facts against instance data
Olog structure validation @ref:olog.validate_structure Validates types, aspects, and instance membership
Run olog query from JSON file @ref:olog.run_query_file Loads query from olog_data/queries/ and executes against schema + instances

16.4

Status Feature CLL Reference Impl Ref Notes
Bundled dzaske olog corpus @ref:olog.bundled_corpus olog_data/: 12 ologs, 9 instances, 12 queries; covered by camxes_olog tests
Load olog schema from JSON file @ref:olog.load_olog Deserializes olog_data/ologs/*.json
Olog integration test suite @ref:olog.test_suite tests/camxes_olog.rs — extraction, validation, bundled E2E

16.6

Status Feature CLL Reference Impl Ref Notes
Evaluate olog expressions in e-graph (Layer C) @ref:olog.egglog_layer_c eval_expression_in_egraph; Tabulator/Tensor fall back to empty
Extract olog from saturated e-graph (Layer B) @ref:olog.egglog_layer_b extract_olog_from_egraph recovers proved equivalences as 2-cells
Olog 2-cells → egglog rewrite rules (Layer A) @ref:olog.egglog_layer_a olog_to_egg_rules compiles subsumption/equivalence into rule/birewrite

16.7

Status Feature CLL Reference Impl Ref Notes
Egglog-based olog type validation @ref:olog.egglog_type_validation validate_with_egglog via type_schema.egg and type_rules.egg

16.8

Status Feature CLL Reference Impl Ref Notes
Direct-flow olog translation via functor @ref:olog.direct_flow_olog Maps types and aspects from source to target olog using FunctorDefinition
Layer C complex olog expressions @ref:olog.layer_c_complex Tabulator, Tensor, Composition in eval_expression_in_egraph
Metamath-backed olog proof verification @ref:olog.prove_olog prove_olog and prove_prop_types via olog_proofs/olog.mm and typed_dictionary
Metamath-backed proof verification for olog 2-cells and typed_dictionary obligations @ref:feature.olog-proofs Behind olog-proofs feature flag (enabled by default; workspace crate vendor/metamath-rs)
Typed dictionary to olog type mapping @ref:olog.typed_bridge typed_bridge.rs maps TypeExpr to semantic olog types; enriches extract_olog
Validate olog functor structure @ref:olog.validate_functor_structure Checks type_map and aspect_map against source/target ologs
WASM olog JSON output @ref:olog.wasm_json_output parse_lojban WASM includes olog, ologInstances, proofResults when feature=olog

18

Status Feature CLL Reference Impl Ref Notes
Olog summary for JSON output @ref:olog.summarize_olog summarize_olog in olog/mod.rs
Semantic equivalence check via egglog saturation @ref:semantic.check_equiv check_equiv loads both texts into one e-graph and compares canonical props