日本語 · English(未訳)

ADR-37: 範囲外出自と covering: の活性化——評価註釈(I6)の具体化

判断: データ被覆域(covering:)の外に掛かる評価の統治を次のとおり確定する(F61。 draft §1.20 の候補設計=4 視点検証・設計者裁定 4 件(2026-07-08)を経た ADR 化。 ADR-15 が予約した「出自は評価註釈」の初めての具体化であり、ADR-35 判断 3 が要請した bizDay 標準導出の註釈伝播をここで規定する)。

  1. covering: は値に一切触れない。covering は「範囲内は完全・範囲外は未知」という二面の 主張であり、テーブルの値は書かれた列そのもの。主張と値の整合は静的検査で保証する—— 列の全要素は covering に包含(違反は乱順・重複と同格の静的エラー。覆域外の要素はほぼ確実に 誤記か覆域の書き漏らし)。この検査により「覆域外に点は無い」が静的に立ち、覆域外の評価は結果と して「空+範囲外註釈」になる——が、値を切る刃(clip)は言語に存在しない。値は列が決め、 註釈は covering が決める。覆域の端は premise の tz の市民日で解決し、covering: または日付 テーブルを持つ premise は tz: 宣言必須(執行点は宣言時=ADR-35 判断 2 の実体要件の延長。 ADR-36 判断 2 の表の字面をここで正式化)。省略時は列の端(閉区間 [先頭要素, 末尾要素])が覆域 (ADR-26 既定のまま)。

  2. 註釈の種は「範囲外」(out-of-coverage)一種から始める。属性は〔区間・源(premise.束縛名)・ その covering・asof〕。「正当な空」は註釈なしの空として表現され、専用の種を持たない。 ただし註釈なしは「既知のデータ端に起因しない」ことを言うだけで、正当性の証明ではない (タイポの全落ち・供給未投入は註釈ゼロの空のまま外部判定に渡る。証拠の不在を不在の証拠に 格上げしない——判定器の文書にも義務づける字面)。種の集合は開放的(将来: asof: の版差・ 観測データの未確定域)だが、本 ADR で規定するのは一種のみ。

  3. 註釈の付き先は区間——結果ストリームに chronos 上の註釈区間の列〔[a, b) ごとの種と属性〕が 並走する。点註釈は不可(範囲外の本質は「点が無いかもしれない」こと——存在しない点には 付けられない)。ストリーム全体フラグは粗すぎる(信頼できる部分範囲が識別できない)。註釈は 空でない結果にも付く(範囲外区間に satSun 由来の点は出続ける)。ADR-15 の「空の出自」から 「区間の出自」への一般化(ADR-15 に改訂節)。

  4. 伝播は註釈の輸送表——規範は「結果が覆域外データに依存し得る区間を漏らさない」 (過小近似は不可・過大近似は許容)。点でなく区間そのものを輸送する(註釈区間には定義上 点が無いので、点渡しの伝播は shift の平行移動〈満了 90 日前通知〉で漏れる)。ADR-36 の統治表と 同型に、core 全演算子に輸送行を義務づける(行の無い演算子は註釈を通せない=新演算子の追加時は 輸送行の定義が必須):

    演算子 出力の註釈区間
    結合子 \|&\ 両辺の(自動相殺なし——\| も例外にしない)
    shift(n, unit: U) 入力註釈 ∪ 註釈区間を n·U 平行移動した像(窓語 unit は窓添字ずらしの像・過大近似可)
    roll(規約, on: A) 入力註釈の像 ∪ 軸 A の註釈区間の依存像(規約の逆方向へ直前/直後の既知軸点まで拡張。Modified 等の双方向探査は照会域全体の包)。着地先が無い=軸のデータ端→空+註釈、ただし軸の覆域が完結(開端 covering)なら註釈なしの空(正当な該当なし)
    選択子 first/nth/last 対象窓が註釈区間に交差したら窓全域へ拡幅(窓内の序数は覆域外を覗き得る)
    stride/strideBy(from:) 歩行が註釈区間に交差したら最初の交差点から先すべて(位相は状態——汚染は下流へ伝染し続ける)
    segmentBy マーカー覆域の補集合。edges:/empties: の発火判定は「マーカー覆域の端」であって「列の端」ではない——覆域内では最終マーカー起点の窓も覆域端まで確定して張る(この確定域=窓列の実効被覆域
    filter(述語) 述語が範囲外参照を要求した点は落とし、依存束縛の註釈区間∩評価域を出力に註釈
    射影(窓→値) ストリーム文脈は「落として註釈」・純値文脈は判断 6
    within・snapTo・grid/span/split/cycle 入力(マーカー・対象窓)の註釈をそのまま(点変換は像で)通す。暦法純粋な生成子自体は註釈を生まない

    premise 束縛は定義でなく評価ごとに註釈を得る(I6——註釈は評価文脈の随伴。定義に焼き込まない)。 「単調(消えない)」は結合子の性質で、輸送は区間を移す——不変量は規範の側。

  5. 明示の被覆主張が相殺の唯一の口。年別テーブルの合成(nonWorking = satSun | h2024 | h2025 | h2026——各年が各 asof を持つ現実の運用形)は和規則だけだと全期間が恒常註釈になり狼少年化する (覆域の積の補集合≒全時間)。自動相殺は偽陰性を作るため却下のまま、束縛への covering: 後置を 認める: nonWorking = (satSun | h2024 | h2025 | h2026) covering: 2024..2026。これは検証不能な 意味論的主張であり source:/asof: と同格の統治を掛ける——黙って消すのではなく名指しで 引き受け、出自(判断 2 の属性の源)に記録し、被覆サマリ(判断 7)に常時表示する。必要条件の 静的検査を付す: 主張範囲 ⊆ 成分覆域の和(どの成分も語れない区間の完全性は主張できない。 規則ベースの成分は全時間を語る)。socket の器の被覆主張も同じ形(ADR-36 が整列で行った送りと同型)。

  6. 実効被覆域がエラーの分類器。失敗した参照の点が、その参照が実際に読む束縛の実効被覆域の外 (=判断 4 の輸送で計算された註釈区間の内)にあれば「範囲外」——ストリーム文脈は落として註釈・ 純値文脈は範囲外分類の明示エラー(「値なし」スロットは導入しない。属性〔源・covering・asof〕を メッセージが運ぶ)。実効被覆域の内なら従来どおり硬エラー(取り違え=プログラミングエラー。 ADR-16 の統治のまま)。基準を生テーブルの covering にしないのが要(派生構造の実効被覆域は輸送で ずれる——segmentBy の頭の edges: 領域など——ので、生 covering で分類すると「覆域内・窓なし」の 帯で系統的に誤爆する)。細則: 多依存は失敗したその参照の依存だけで分類し、範囲外とも取り違えとも 説明がつくときは安全側=硬エラー完結データの正当な尽きは失敗ではない(判断 4 の roll 行)。 適用される失敗種の列挙: テーブル射影(点が列にない)・束縛名射影・ordinalIn/epochOrdinal の 窓所属・roll/shift の着地・並行リスト添字(F62 連動)。

  7. 「判定は外部」の器は二つ。言語仕様が定めるのは「実装表面は結果とともに註釈を提示しなければ ならない」(I6)まで。対処は呼び手の責務(ADR-15)。(a) 区間註釈(動的・交差計算用)—— 評価範囲 [from, to) にクリップして返す。(b) 被覆サマリ(静的・監視用・クリップしない)—— 評価が参照した各データ源の〔源・covering・asof・完結主張の有無・評価 to からの残走路〕。 クリップ済み註釈だけだと「to の直後にデータが尽きる」が観測できず発報運用(データ更新のリード タイム確保)が立たない——覆域は静的に判明しているのに捨てるのは誤り。開端 covering の完結主張も ここに常時出す(黙らせた事実そのものを可観測にする)。正準形では両者は results と同格の フィールド(註釈を捨てる短絡アクセスを既定にしない。厳格モードは呼び手の判定の実装であって言語の 判定ではない)。

  8. 二重の地平線。(a) データ被覆域(covering:)=言語概念・註釈の。(b) 評価範囲(from/to)= 評価の需要域・註釈のクリップ枠(覆域内に収まる狭い評価は註釈ゼロで走る——「狭い評価範囲を 殺さない」の実現形)。クリップは表面で一度だけ行い、内部伝播は非クリップで走らせる(葉で先に クリップすると、輸送で覆域外から評価範囲内へ入ってくる註釈を取りこぼす)。実装の実体化範囲 (リファレンス実装の to+約 400 日)は第三の、プロトタイプ限りの近似地平線であり言語には存在しない ——その越えは硬エラーでなくクリップ+実装警告(snapTo・roll 終端・shift の 4 サイトを三分岐に 統一: ①計算範囲以遠→クリップ+警告・②実効被覆域外→落として註釈・③それ以外→硬エラー維持)。

  9. covering: の表現域を拡張する。(a) 開端: covering: 2021..(以後完結)・..2027.. (全域完結=註釈を生まない宣言。単発除外テーブル [2026-01-05] covering: .. の受け皿)。意図的に 有限なデータ(一回性の法・告示)は「覆域外=未知」ではなく「列は全時間で完結」であり、閉区間しか 書けないと未来を永久に註釈で汚す。統治: 開端は検証不能な完結主張(「註釈を黙らせる最短の 2 文字」になり得る)なので source:/asof: 宣言必須寄り+被覆サマリに常時表示。 (b) 区間リスト: covering: 2020..2022, 2024..2027(中抜けの正直な申告。閉区間一本だと過大主張 〈欠落年が「完全」の証明書付きで沈黙——ADR-15 の原文「祝日定義の年が抜けている」が偽の安全証明 付きになる〉か過小主張〈恒常註釈〉を強いる)。註釈の器は最初から区間列であり EBNF の小拡張で済む。 意味の対比: 省略=列の端(最狭の主張)・..=全域完結(最広の主張)——正反対(glossary に 注記)。省略既定は変えない(黙って完結扱いにすると官報表の covering 書き忘れがデータ切れの黙認に なる——うるさい側が安全側)。

図解(2026-07-13 追補・判断 3/6/8 の要約——判断内容の変更なし。gantt は spec §4.10 と同図):

gantt
    dateFormat YYYY-MM-DD
    axisFormat %Y-%m
    title 二重の地平線(判断 8): covering 2026 のデータを 2026-07〜2027-06 で評価
    section データ
    covering(完全の主張・判断 1)    :done, 2026-01-01, 2026-12-31
    section 評価
    評価範囲 [from, to)=クリップ枠   :active, 2026-07-01, 2027-06-30
    section 結果(bizDay 等)
    確定域=註釈なし                  : 2026-07-01, 2026-12-31
    範囲外の区間註釈が値に並走        :crit, 2027-01-01, 2027-06-30
flowchart TD
  F["参照の失敗(テーブル射影・束縛名射影・窓所属・<br/>roll/shift の着地・並行リスト添字=判断 6 の列挙)"]
  F --> H{"点が実体化地平線<br/>(実装の計算範囲)の外?"}
  H -- "はい" --> W["クリップ+実装警告<br/>(プロトタイプ限りの近似地平線——言語には存在しない=判断 8)"]
  H -- "いいえ" --> E{"点が実効被覆域の外?<br/>(=判断 4 の輸送で計算された註釈区間の内)"}
  E -- "はい" --> A["範囲外——ストリーム文脈は落として註釈・<br/>純値文脈は範囲外分類の明示エラー(判断 6)"]
  E -- "いいえ" --> HE["硬エラー維持(取り違え=ADR-16 の統治のまま。<br/>多依存で説明が割れたら安全側=硬エラー)"]

背景: F61(stdlib 拡充で新出・2026-07-08 棚卸し)。impl は値射影のデータ被覆域外で硬エラーになり everyDay 起点の六曜が書けず、テーブル時点が計算範囲を越えると snapTo が硬エラーになり狭い評価範囲が 書けなかった。covering: は RC1(ADR-26)で構文が入ったまま評価では不活性。ADR-35 判断 3 で優先度が 上がった——bizDay 標準導出は祝日データの尽きた先で everyDay \ satSun へ黙って退化し、出自を落とすと 退化が観測できない。40-examples/05 では観測ベースの暦法(イスラム暦ヒラール)の運用が F61 の活性化に 懸かることを確認。設計論点 8 点(INDEX 棚卸し)を draft §1.20 で具体化し、4 視点並列の検証(整合性・ コーパス全数掃引・実装可能性・敵対的、指摘約 40 件)で当初案の構造欠陥 4 つ——clip の致命反例・点渡し 伝播の過小近似・edges: の覆域端問題・恒常註釈の狼少年化——を修正、設計者裁定 4 件(値意味論・ 付き先・伝播と相殺・covering 拡張=いずれも推奨案)で確定した。

却下した案:

帰結:

改訂(2026-07-08・実装検証): 判断 5 の必要条件検査を精密化する——「規則ベースの成分は全時間を 語る」は数えない。正しい式は「主張範囲のうち註釈が掛かる区間は、いずれかのデータ成分の covering に含まれること」(=主張範囲 ⊆ 註釈区間の補集合 ∪ データ成分覆域の和)。規則成分の完全性は 自明で、主張が上書きするのはデータ由来の註釈だけ——どのデータ成分も語れない区間への完結主張 ((satSun | h2026) covering: 2026..2030 の 2027 以降)は出所も版も持たない主張であり、成分テーブル 側の開端 covering(source:/asof: の統治つき)へ倒すのが正しい置き場所。純規則の合成への主張は空虚だが 無害(註釈が無いので上書き対象が無い)。判断 1 の tz: 宣言必須の執行はリファレンス実装では 未実装(同梱 stdlib の tz 供給形と衝突するため。impl/README に宿題として記録)。

改訂 2(2026-07-08・ADR-38): 二点を改める。(1) 判断 4 の filter 輸送行を逆像拡幅に精密化—— 述語が読むのは点 d 自身とは限らず d の属する窓の全域coincides・データ由来窓越しの ordinalIn) なので、輸送は「述語が読んだ領域(窓)が註釈区間に交差したら、その逆像(当該窓に属する入力点の 全域)へ拡幅」と一般化する(選択子行と同型。従来の「依存束縛の註釈区間∩評価域」は述語が d の近傍しか 読まない場合の特殊形で、窓越し参照では過小近似だった=F75。coincides が強制事例)。 (2) 判断 6 の失敗種列挙に「coincides の窓所属なし」を追記。あわせて coincides の確定は 証人規則(ADR-38 判断 4)——真の確定は非註釈区間の点(証人)に限る・偽の確定は窓の実効被覆域 完全性に依存する非対称——であり、「計算値に点が在れば真」ではないことを本 ADR の側からも注記する (everyDay \ holidays の退化尾部の点は証人にならない——判断 3 の「註釈は空でない結果にも付く」の 消費側の規則)。

改訂 3(2026-07-25・発報層還流 第 5 便=F105): 判断 4 の segmentBy 行を頭側へ精密化する—— 窓列の実効被覆域は「マーカー覆域」ではなく「窓の張られた範囲」。マーカー覆域の内側でも窓の 張られていない区間(edges: drop/error の頭側〔覆域始端〜最初のマーカー〕・empties: drop の 中抜け)は窓列由来の註釈とし、そこへの読み(labels 射影・coincides の窓所属)には分類器が 「落として註釈」で応える。末尾の覆域端確定(F72——最終マーカー起点の窓は覆域端まで確定)の 頭側対称。動機: filter は実体化範囲全域の点を述語評価するため、従来の「覆域内=硬エラー」では 覆域始端 < 最初のマーカーの構成(filter 派生マーカーの典型——第 5 便の暦×占い検証で実測)で labels 射影の filter 正準形が構造的に評価不能だった。覆域註釈を持たない規則マーカーは従来どおり 対象外。覆域始端=最初のマーカーの従来形は挙動不変(頭側が空なら註釈も増えない)。エラー→註釈の 緩和方向のみの変更で、正しく評価できていた式の意味は変わらない。