日本語 · English(未訳)

ADR-30: 射影一族の内部設計を確定する(二窓 ordinalIn・labelOf 廃止・点はラベルを格納しない)

判断: ADR-27 で導入した窓→値の射影一族の内部設計を、綻び出し(40-examples/04-projections.md・ F34〜F42)を経て次のように確定する。

  1. ordinalIn は二窓引数 ordinalIn(u, w, d)——「点 d が属する w 窓の中で、d が属する u 窓が 第何番目か」(1 起点)。数える単位 u を明示するため、入力ストリームの粒度に依存しない。 epochOrdinal(u, d) は枠を紀元にした版(紀元からの u 窓通し序数)。
  2. labelOf(汎用語)は廃止。ラベルは「点 → 値の射影」であり、ラベルを持つ窓/サイクルの束縛名を 点に適用して読む(weekday(d)sekkiName(d)lunarMonthNo(d))。ADR-27 が「読む側」に置いた labelOf(w, d) は、ADR-25/§1.16 で確定済みの「cycle 束縛名は点→ラベルの値関数」を全ラベル源へ 一般化すれば不要になる。
  3. 点はラベルを格納しない。時間ストリームの点は基底位置(時刻)のみを持ち、ラベルは点→値の射影として 外にある。源は (i) cycle の律動、(ii) テーブルのラベル列、(iii) 暦座標の値関数の三つで、読む側は一様に 名前(d)時間ストリーム型も値型も拡張しない(レコード型を新設しない)。
  4. ラベル付きテーブルリテラルは時点列に並行ラベル列 labels: を添える(ADR-26 の拡張)。時点[i] の ラベル=labels[i]。これが源 (ii) の定義データで、cycle(無限律動)とは別。
  5. label: 付与式は本体層の式(窓内の点の射影・他窓参照)を書ける。別の点の窓を参照する ISO 週番号 (週の木曜が属する年)・年度ラベルは可。隣接窓(前後の同種窓)参照は射程外(I7)。
  6. snapTo は点変換として残す。公開境界語(窓→点)とは入口が違い補完。糖衣化は見送る。

暦座標 yearNo/monthNo/dayNoepochOrdinalordinalIn+既存値関数(yearOf/monthOf)の糖衣で あり、新規語ではない。読む側の中核は epochOrdinalordinalIn の二語+束縛名射影に収束する。

背景: ADR-27 は射影一族を「候補・仮称・綻び出し前」として導入し、labelOf/ordinalIn/epochOrdinal/ snapTo と付与 label: を並べた。40-examples の「要補完」例(六曜・旧暦月名・イースター時点化・固定日 祝日・ISO 週番号・立春選択)を実際に射影で書き直したところ(04-projections)、大半が書けた一方で六点の 内部設計が未決と判明した——引数が「何をどの枠で数えるか」で絡む(F34)、射影値が入力粒度に依存する (F35/F42)、labelOf が読むラベルの源が三種で未区別(F36)、label: 付与式の表現力(F37/F40)、時点だけの テーブルでは「立春」を意味的に選べない(F33/F38/F39)、snapTo が公開境界語と重複(F41)。

とりわけ「ラベル付きデータをどう持つか」で、レコード型(第 4 の値型)新設案が浮上したが、これは 時間ストリーム型の拡張と混同した筋の悪い案だった。点は時刻のみを持ち、ラベルは点→値の射影として 束縛名で読む——この一点を据えると、labelOf 廃止(源に依らず束縛名で読む)・テーブルのラベル列 (射影の定義データ)・cycle との統一(律動 vs データの違いは源だけ)がすべて同じ原理から出る。

却下した案:

帰結:

改訂(2026-07-07・F48): 本文 4 と帰結の例は、束縛 sekki = […] labels: […] に対し sekkiName(d) と 読んでおり、束縛名から Name 接尾辞の射影名を導出する規則があるかに見える(リファレンス実装で顕在化)。 規則はそのようなものではなく、束縛名がそのまま射影名(cycle 束縛名と同一の規則)——上の例は sekki(d) と 読むのが正しい。導出規則は存在しない。spec §3.8/§4.9・glossary は修正済み。

改訂(2026-07-08・ADR-34): 本文 5 の「別の点の窓を参照する ISO 週番号(週の木曜が属する年)・ 年度ラベルは可」の「別点」を精密化する。束縛規則の確定(ADR-34=ラムダは窓の先頭点を受ける)に伴い、 付与式から名指せる点は代表点(先頭点)であり、「別点の窓参照」とは「代表点に対する任意の窓・射影の 参照」(例: 先頭点の属する暦年 yearNo(p))を意味する。例示していた「週の木曜→年」は点±幅算術を 要するため字義どおりには書けないが、ISO 週番号自体が F57 の等価変形(isoYear 窓の張り直し)で label: なしに書けると実証されたため、生きた反例はない。点±幅算術は導入しない(隣接窓参照禁止への抜け道。 ADR-34 の却下案)。

改訂(2026-07-08・ADR-39): 本文 4 の並行ラベル列 labels: の適用先をテーブル(点)から segmentBy 窓列へ一般化する(F62 の器=同長性検査を宣言に錨する。窓列序数・前提条件・締めの詳細は ADR-39)。「点はラベルを格納しない」の原理は窓版でも維持——窓列は区間のみ・ラベルは束縛に付く射影の 定義データ。あわせて ADR-34 判断 5 が示した補助束縛パターン(label: ラムダ+epochOrdinal の 並行リスト引き)は「labels: に乗らない計算ラベル用」に位置づけを再配置する(データ列を貼るだけの 用途は labels: が正準・添字式が要る計算だけ label: ラムダ)。