日本語 · English(未訳)

1.1 RC の草稿(2026-10-18・判断前)。観点の異なる 3 案(最小の語彙追加/読みやすさと教材/実装と波及)を独立に起こし、審査役が採点して統合した。2026-10-19 に推奨案で確定し、2026-10-21 に ADR-54・ADR-55 として起こした。本書は経過の記録(判断前の本文のまま)。実測の根拠は 1.0.10〜1.0.11 準備版の参照実装。

ADR-5x(1.1 RC 草稿): 列挙ラベルの序数射影 labelOrdinal(B, x)——宣言値域の宣言順から番号を読む

判断: 本体層 core の射影一族(§4.9)に第 4 の語 labelOrdinal(B, x) : 数値 を追加する。B は列挙値域を宣言した束縛、x はラベル値(または点)。値は x の宣言順の序数(1 起点)。1.1 の追加拡張=呼び出し形を 1 つ足すだけで、1.0 の全プログラムの意味は不変(意味論・文法・字句は凍結のまま。90-open 3-10 の確定)。

  1. 値域 dom(B) は宣言リストに限る——(i) external(…, labels: [E₁…Eₙ]) の値域(ADR-46 判断 4)、(ii) 窓束縛 cycle [E₁…Eₙ] anchor:、(iii) segmentBy(…, labels: cycle […] anchor:)(ADR-47)。いずれも窓列・点列から独立に順序を持つ宣言。並行ラベル列(segmentBy の静的 labels:・テーブルリテラルの labels:)は窓順の割り当て列で列挙順ではない(labels: [m12, m1, …] の m1 は位置 2)。label: ラムダは列挙不能(ADR-42 判断 7 (g))。これらとラベル源なしの束縛は誘導つき静的エラー(並行列→数値を labels: に直接書く・ラムダ形→値域を持つ側を渡す labelOrdinal(saku, lunar(d)))。ADR-42 判断 7 (g) の域外検査は所属、本語は順序の問い——矛盾しない。
  2. 意味論は定義的等式: labelOrdinal(B, v) ≡ v == E₁ ? 1 : … : v == Eₙ ? n : ⊥。右辺は 1.0 の値式だけで書け、現行正準形(reference/segmentBy.md の三項 12 段)の畳み込み。違いは既定枝が ⊥=明示エラー「値域の外」になること(実測: 値域に m13 を足すと三項形は 29 日が既定枝 12 に化け、警告 0)。型は == の規則を継承(§4.9)。識別子形と文字列形は同じ文字列値(§5.5)。
  3. 点形 labelOrdinal(B, d) ≡ labelOrdinal(B, B(d))(ADR-42 と同じ型 dispatch)。B(d) の規約(範囲外の註釈輸送 §4.10・tz 名検査 ADR-40)を継承し、本語自身は註釈を生まない。
  4. 1 起点——「第 N」は ordinalIn と同じ。0 起点は添字 l[i]・epochOrdinal に温存。labelOrdinal(weekday, Sun) == 7 は wkst に依らない(cycle のリスト順)。
  5. 値域の重複は呼び出し時の静的エラー(4 勤 4 休 cycle [On, On, On, On, Off, …] 級——序数が一意でない)。宣言側に検査は足さない(実測: labels: [m1, m1, …] は今日合法)。数値・論理値の値域も一様に位置を返す。
  6. 糖衣ではなく core——値層にリスト探索の原語がなく、再帰も禁止(F110)、値域は宣言に住む。labelOrdinal は CORE_WORDS に加わり、同名の再定義は §4.8 の静的エラー(唯一の互換の縁。全コーパスで束縛名としての使用 0 件)。1 引数形 ord(lunar(d)) は原理的に不可——ラベル値は素の文字列で所属宣言を持たない(ADR-30 判断 3。実測: == "m1" と == m1 は同じ点列)。
  7. 名は labelOrdinal——一族の綴り(ordinalIn=枠内の第 N・epochOrdinal=紀元からの座標・labelOrdinal=値域内の第 N)に乗り、略語なし。ADR-30 で廃した labelOf とは別物=値域を読む語(ラベルは従来どおり束縛名射影)。
  8. 供給契約と EBNF は不変——wire・schema・解決子は触らない。name(args) で導出済み・param-key 追加なし。

背景: 供給側の大安・不成就日は external の識別子ラベル(旧暦月)を算術に使うため、列挙名→数の関数を三項 12 段で premise に置く(実測で成立)。可読性の代償に加え、補助関数名が標準語 monthNo と衝突した事故(収蔵 28)と、既定枝が黙って吸う罠(判断 2)がある。labels: の宣言順は既に序数を定めており、それを読む 1 語で三者が同時に消える。

却下した案: 案 0=labels: に数値を許す(新語ゼロだが供給契約の変更・名前ラベルには効かない。併用は 1.1 で一度に判断)/ord(略語・文字コードの含意・衝突面が最大。実測: 1.0 で ord = l => … は合法)/ordinalOf(yearOf/monthOf の Of と向きが逆)/labelNo(stdlib の …No の register・monthNo 事故と同じ面)/indexOf(list, v)(0 起点・列挙を素のリストに書けない=実測「未解決の名前: m5」)/並行列を値域に含める/点形を anchor 起点の「コマの番号」にする(別の量の相乗り——需要が立てば別語)。

帰結: spec §4.9 の表に 1 行・§4.8/§5.4 に「1.1 の新語は予約語に加わる」規約と命名確定行・§5.2・glossary・CHANGELOG は追補でなく 1.1 の節。reference/labelOrdinal.md(ja/en)新設・segmentBy.md の正準形を差し替え三項形は 1.0 互換として残す・ADR-30/46/47 に改訂節。impl: CORE_WORDS・TableV に宣言値域・evalCall 分岐。Playground 再構築・MCP 再バンドル・検定の追従・semver minor。ADR README の 4 面は EBNF 変更なし・輸送表/整列表は値式の語で行なし(coincides と同列)。

検証の案: (1) 大安の外延一致——三項形と同じ点列・同じ註釈(変異: 起点 0・順序反転で赤)(2) m13 の罠が明示エラー (3) 値域外・型不一致・引数個数の文言 (4) 並行列・label: ラムダ・ラベル源なしの誘導文言 (5) 重複値域のエラーと宣言の受理 (6) 点形の継承=範囲外註釈・tz 名検査 (7) labelOrdinal(weekday, d) == ordinalIn(day, week, d)(wkst: Mon・全日)(8) 往復 E[labelOrdinal(B, v) − 1] == v (9) 予約語(変異: CORE_WORDS 未登録で赤)(10) 既存 827 本が無変更で緑=追加拡張の証人。

決める論点(審査役の一覧・推奨つき)と実装の順序

実装の順序

    1. 判断の確定と記録(言語の持ち主): decisions の 13 点に答えを付け、ADR-54(本草稿)を design/20-adr/adr-54-label-ordinal.md に確定・design/INDEX.md の ADR 一覧に 1 行・design/30-syntax/00-syntax-draft.md §1.34 に候補設計を写す。ADR-30(読む側の核 二語→三語+labelOf との線引き)・ADR-46(labels: 値域は序数の源)・ADR-47(labels: cycle の値域)に改訂節。90-open 3-10(232-239 行・一覧 50 行)を 91-closed へ移す。公開文書に対話の引用を書かない(上限検査)。
    1. spec(ja): 30-body-layer.md §4.9 の表に labelOrdinal(B, x) 行(値域 3 形・1 起点・註釈なし・点形の等式)と「読む側の中核は四語」・§4.8 に「1.1 の新語は予約語に加わる」規約。40-grammar.md §5.2 の射影行にシグネチャ・§5.4 に確定行(候補比較)・§5.6 は「EBNF 変更なし」の注記のみ。50-glossary.md §6.4 に行 1 本。10-types.md §2.7 の dispatch 表に「labelOrdinal の第 2 引数も同じ規則」の 1 句。
    1. impl(impl/ から実行): eval.ts 574-575 行 CORE_WORDS に ‘labelOrdinal’(§4.8 の再定義ガード 666/716 行が自動で効く)・122-130 行 TableV に domain?: string[]・1303 行 externalToTable で declLabels を domain に保持・1943-1983 行の並びに labelOrdinal 分岐(引数 2 個→B の種別で値域導出〈table.domain/CycleV.labels/WinLevel.labelsCycle.list・無ければ誘導つきエラー〉→重複検査→x が点なら B(x) の射影経路で値に→型検査→indexOf+1・域外はエラー)。lexer/parser/stdlib は変更なし。
    1. witness(impl/test/label-ordinal.test.ts 新設): 本草稿「検証の案」(1)〜(10) を vitest に(doctest にエラー期待の記法は無いのでエラー系はここ)。変異試験の 3 系統(退行版へ戻す・修正を落とす・文言を変異)で赤を実測してから数える。TZ=UTC npx vitest run と typecheck を impl/ から併走。既存 827 本が無変更で緑=追加拡張の証人。テスト数の入口 6 箇所(README 英日・llms.txt・en/spec/README・impl/README・CHANGELOG 最新節)と impl/scripts/check-test-count.mjs を更新。
    1. reference(ja→en 同一コミット): reference/labelOrdinal.md 新設(doctest: external 版六曜=# resolve: 付き・weekday 番号・labels: cycle の節切り月・落とし穴=三つの序数の使い分けと並行列の不受理)・README.md 34-36 行の射影の表に 1 行・segmentBy.md 134-142 行の正準形を labelOrdinal に差し替え三項形を「1.0 互換の書き方」として残す(既定枝の罠の注記)・external.md の labels: 箇条と cycle.md に 1 行。en/reference は tools/refresh-source-sha.mjs で source_sha 更新・kairos フェンス数一致(doc-consistency 299-328 行)・tools/paralen.mjs 0。
    1. Playground: tools/build-playground.mjs で js/eval.js を再構築(焼き込み sha を doc-consistency が検査=同じコミットで)。例チップは任意(external 例は供給が要るので weekday 番号の例が向く)。pg-link の encode→decode→CLI 同等実走でリンクを確認。
    1. MCP: mcp/scripts/bundle-docs.mjs を実行(reference/labelOrdinal.md から words.json と同梱 reference が自動追加)・依存 kairos-lang を 1.1 系へ・README 日英に語数の記載があれば更新・schema/supply.schema.json と cli-report.schema.json は不変であることを確認(供給契約不変の witness と対)。
    1. CHANGELOG と入口: spec/CHANGELOG.md に「## 1.1(追加拡張)——labelOrdinal」の節(新語 1・既存の式の意味は不変・予約語の縁・テスト数)。doc-consistency.test.ts の状態行検査の正規表現と spec/README・README 日英・en/spec/README の状態行(「1.0 で凍結・1.1 で 1 語追加」)を 1.1 の形に。README.md 202 行「naming is final for every word」を訂正。ADR README のチェックリスト 4 面(EBNF 変更なし・輸送表/整列表は値式の語で行なし・否定リスト該当なし)を ADR 帰結に明記。
    1. 公開(3-8 の材料が揃ってから一度に 1.1.0): runbook を v1.0.11 から読み替え(semver minor・npm kairos-lang/kairos-lang-mcp 1.1.0・Windows exe の自動ジョブ・Release 本文は日本語を先に)。検定は follow.mjs→verify→publish(Playground と同版追従)。供給側へ便で通知(正準例の差し替え・旧形は合法のまま・任意採用)。ブログは既公開を遡らず、第 29 弾(4 勤 4 休)への追記は別項の需要が立ってから。