日本語 · English(未訳)

ADR-42: 位置依存の名前解釈と窓インスタンス参照——適用の型規則

判断: 名前の解釈規則を「位置依存の名前解釈」の型規則として統一し、その新設面として 窓インスタンス参照 W(v)year(2020)=その年の日々)を導入する(draft §1.25 の候補設計= 3 視点検証〈整合性コーパス・敵対・実装〉・指摘計約 40 件反映済み。設計者裁定 4 件〈2026-07-09〉: 意味論=逆像・dispatch=展開後判定・標準ラベル=year+month+Fiscal.year・ゼロマッチ=域外は 静的エラー。F64・F9 の解消、ADR-35 判断 4〈F53〉の統一受け皿)。

  1. 統一原理(受け皿): 名前の解釈は候補集合を出現位置の期待型で絞り、絞った後に複数の解釈が 残るなら黙って選ばない=曖昧エラー(ADR-17・ADR-35 判断 4 と同じ統治)。既存二面+新設一面:

    位置 名前の種別 解釈 出典
    軸位置(on:/unit:/axis: premise 名 実体の正体判定+標準導出への読み替え ADR-35 判断 4(不変)
    適用・引数 W(d) ラベル源つき束縛 束縛名射影(点→値) ADR-30/34/39(不変)
    適用・引数 W(v) ラベル源つき束縛 窓インスタンス参照(値→点列) 本 ADR

    既存二面の意味論は変えない——本 ADR は受け皿の一般原理を立て、三面をその実例として位置づける (spec には型の節の新設小節として置く)。

  2. 窓インスタンス参照の意味論=逆像。ADR-34 の定義的等式(点→値)の対:

    W(v)  ≡  W の要素点列 |> filter(d => W(d) == v)
    

    「W の要素点列」=W の定義が窓に束ねた入力点列のうち、W の窓に属する点(内部概念—— ユーザーが直接書く語は増えない)。grid/span/split 連鎖では原子グリッド(ADR-36 の 整列 G)の目盛りと同値、segmentBy では入力ストリームの点。この定義により未 snap マーカーの窓(ティティ級・G=なし)でも定義が立ち、濾過入力の窓で「窓の実要素でない点」が 混入しない(当初案〈原子グリッドの目盛り〉の構造欠陥 F93——検証で発見・修正)。

    • 解決値は時間ストリーム(型は増えない・I2)。marineDay & year(2020)(F9 の正準形)が ADR-36 の整列検査と両立する据え方。
    • 結果の整列は入力の整列を filter 保存で継承(lunarMonth(6)=day 整列・ティティ級= 整列なし→ & は ADR-36 が安全側で止め、coincides の S 位置では使える)。
    • ラベルが一意でなければ全マッチの和kyuMonth("六月")=毎年の六月)。番号ラベルは 一意キーではない——lunarMonth(6) は閏六月(前月番号の繰り返し)を含む。これは 全マッチ和の正しい帰結で、一意が要る問いは名前ラベル側か filter+序数で書く。
    • 空窓(欠ティティ級)・ゼロマッチは(ADR-15・正当な値。ただし判断 7 (g) の域外検査が先)。
    • 用語の区別: 本 ADR の「要素点列」は窓の中身の実点、ADR-36 の「要素グリッド」は窓列の 幾何タグ(整列検査用)——別概念で衝突しない。
  3. 輸送行の新設(ADR-37 の輸送表に一行): 「窓列 → 要素点列」の出力の註釈区間=窓列の 実効被覆域の補集合(segmentBy 行の継承)。マーカー覆域の外では要素点そのものが無く filter が 一度も走らないため、この行が無いと註釈の湧き口が消えて F61 と同型の黙った退化になる (F94——検証で発見)。F82 の 4 サイトに続く第 5 の窓リーダーサイト。規則由来の窓 (year/month)は覆域完全なので註釈ゼロ=既存例に波及なし。これ以外の輸送・覆域・整列は filter の既存規則(ADR-37 輸送表・F75 逆像拡幅・F82)からすべて従う——評価器の新機構は この一行を除きゼロ・新語彙ゼロ

  4. dispatch=適用の型規則(F64 の解消)。引数の型(ADR-25 の三型)で一意に分岐—— 点なら射影、値(数値・列挙・文字列)ならインスタンス参照。
    • ラムダ変数の型は束縛サイトの文脈で確定する(filter/label: のラムダは点・span の ラムダは窓序数=数値・値関数は本体の型付けから。「ラムダ変数=点型」という当初の字面は誤り ——F95・検証で棄却)。
    • 判定時点は「糖衣展開後・実引数束縛後」(裁定=ADR-36 が整列を計算するのと同じ時点)。 判定時点では実引数の型が常に一意なので、判断 1 の曖昧エラーはここでは構造上発火しない。 自由なラッパ(f = v => year(v))は呼び出しごとに型が確定する=多相を許容
    • W(v)ストリーム期待位置のすべてで合法(頭位置・結合子被演算子・on:/unit:coincides の S スロット等)。純値位置(x = year(2020) + 1)のみ型エラー——ストリームは 値式に混ざれない(ADR-18 の型分離から従う)。
    • year(2026-05-15)=射影=2026(日付リテラルは点)。日付リテラルの裸の値束縛d0 = 2026-05-15)の型は未規定の既存穴——F97 として F66(字句)と束ねて宿題。
    • EBNF はほぼ変更なし——頭位置の name(args) は stream-atom に既在(糖衣適用が使用中)で、 弁別は意味規則。唯一の追補は stream-atom への修飾適用形 C.W(args)(機構 A の修飾ピン Gregorian.year(2020)——Fiscal 下で暦年を指す唯一の手——が頭位置に書けなかった穴の解消。 修飾ピンは射影・インスタンス参照の両面に同一に効く)。

    図解(2026-07-13 追補・判断 1/2/4/7 の分岐——判断内容の変更なし):

    flowchart TD
      APP["適用 W(arg)——判定は糖衣展開後・実引数束縛後(判断 4)"]
      APP --> T{"実引数の型は?(ADR-25 の三型)"}
      T -- "点(日付リテラル・点変数)" --> PROJ["束縛名射影(点→値): year(2026-05-15) = 2026<br/>(ADR-30/34/39・不変)"]
      T -- "値(数値・列挙・文字列)" --> W{"W はラベル源(label:/labels:)を<br/>持つ窓束縛?"}
      W -- "はい" --> INV["窓インスタンス参照=逆像(判断 2):<br/>W(v) ≡ W の要素点列 |> filter(d => W(d) == v)<br/>一意でなければ全マッチの和・整列は filter 保存"]
      W -- "いいえ(ラベル源なし・cycle・テーブル・点列束縛)" --> E1["静的エラー(判断 7 (a)(b))<br/>誘導: label: を付けるか filter 正準形で書く"]
      INV --> DOM{"ラベル値域が静的に列挙可能で<br/>v が域外?(labels: リテラル等)"}
      DOM -- "はい" --> E2["静的エラー(判断 7 (g)——month(2020) 級の<br/>タイポが黙って空になるのを封じる)"]
      DOM -- "いいえ" --> S["時間ストリーム(ゼロマッチ・空窓は正当な空)"]
      T -- "ストリーム" --> E3["静的エラー(判断 7 (e)——year(mondays) 級)"]
    
  5. 適用範囲=ラベル源(label:/labels:)を持つ窓束縛のみ(表現力の必然基準)。cycle・ ラベル付きテーブルの逆像は台の点列が手元にあり filter 一行で書ける(everyDay |> filter(d => weekday(d) == Mon)sekki |> filter(s => sekki(s) == 立春)——コーパス全数掃引で 全用例が既にこの形=退行ゼロ)。窓束縛だけは要素点列が premise 相対(原子が day とは 限らない)で、書き手が原子を知らずに済む自己完結の式が現行に無い。cycle・テーブルへの対称 拡張は将来糖衣の枠(意味論は判断 2 がそのまま延びる)。

  6. stdlib への標準ラベル(裁定): Gregorian の yearlabel: (p => yearNo(p))monthlabel: (p => monthNo(p))Fiscal の year 上書き行にも同時付与(fiscal 解説 §5 の字面を §1 の正式定義へ昇格)。統治の明文化: 上書きはラベルを継承しないlabel: は定義の一部)。 同時付与を怠ると (a) Gregorian で動き Fiscal で落ちる stdlib 内非一貫、(b) shiftBoundary は base の label:保存する(F65)ため「year 一行と同じ展開」の等価主張が観測可能に破れる (F96——検証で発見)。quarter・week は見送り(week は WKST・ISO 系と絡む・quarter は需要待ち ——誤導つきエラーで書き手に見える)。付与式は自己参照ガードに掛からない(yearNo/monthNoepochOrdinal 経由でラベル射影を呼ばない——ADR-34 判断 6 の除外どおり・impl 実証済み)。

  7. 静的検査群: (a) ラベル源なし窓束縛への値引数(「label: を付けるか filter で書く」誘導。 ISOWeek 級は filter(d => isoYearNo(d) == 2026) へ)、(b) 窓束縛以外(cycle・テーブル・点列 束縛)への値引数=filter 正準形へ誘導、(c) ラベル値の型域と引数型の不一致、(d) 細粒度 ストリームとの & は既存の整列検査がそのまま守る(誘導: 値述語 yearNo(t) == 2020coincides——ADR-38 の使い分け規範に合流)、(e) 窓束縛へのストリーム引数year(mondays) 級)、(f) label: 付与式内の自束縛への値引数適用(逆像は射影を内包するため無限再帰の 抜け道——ADR-34 判断 6 のガードを拡張・相互参照含む。ADR-34 に改訂節)、(g) ラベル値域が 静的に列挙できる束縛labels: リテラル)では域外の値引数=静的エラー(裁定。 month(2020)month(0) 級のタイポが「註釈なしの空」で黙って流れるのを封じる——射影側の ミスが硬エラー〈ADR-36 判断 7 の前提〉なのに値引数側だけ緩い非対称の解消。計算ラベル 〈label: 式〉は列挙不能なので「該当なし=空」のまま=多マッチ設計の裏面として明文化)。

却下した案:

検証記録: 候補設計を 3 視点並列(整合性+コーパス全数掃引・敵対・実装可能性)に掛け、 critical 2 件を含む指摘計約 40 件を裁定前に反映した。当初案の構造欠陥は F93(要素点列の 原子グリッド定義が segmentBy 窓で未定義・濾過入力で混入)・F94(輸送行の欠け=覆域外で黙って空)・ F95(dispatch の「ラムダ変数=点型」根拠崩れ)、stdlib 波及は F96(Fiscal.year のラベル非継承と shiftBoundary 等価の破れ)、新出の宿題は F97(日付リテラルの裸の値束縛の型が未規定——F66 と 束ねる)。コーパス全数掃引(ラベル源束縛 20 件の表)で cycle・テーブルの締めは退行ゼロ、 過去の投機的字面 everyDay & sekkiMonth(寅)(02 §2.5)が本 ADR でそのまま立つことを確認。 impl 試作(約 70 行)で全正準例(year(2020)month(5) & year(2026)・F9 の元例・ kyuMonth("五月"))の動作と 301 テスト無傷・逆像の窓単位評価最適化(naive filter の 1/5〜1/25)を 実証済み。

帰結:

改訂(2026-07-09・ADR-43)