日本語 · English(未訳)

ADR-51: 単独時刻リテラルと標準糖衣 at——日集合への壁時計時刻の付与

判断: 字句に単独時刻リテラル Thh:mm(:ss(.f+)?)?(日付部を持たない壁時計時刻)を追加し、 stdlib(Gregorian 公開語)に糖衣 at(a) : Stream -> Stream(a は単独時刻リテラル)を置く。 展開は壁時計正準形の機械的差し込み:

at(a) = s => (everyInstant |> strideBy(1d, from: a)) |> filter(t => coincides(s, day, t))

(発端=還流第 12 便 B-1・収蔵 13: 供給側の配信系全定義とレシピカタログ 31 本規模が経過算術形 〈snapTo(day) |> shift(+H, unit: hour)〉で書かれ、F76 の取り違え面と horizon-clip 警告 〈発火点数分〉の運用報告。候補設計 draft §1.32=4 視点並列検証〈条件付き支持 4/4〉・設計者裁定 2026-08-21〈案 C〉を経た ADR 化)。

  1. 動機の較正: 「その日の H 時」は壁時計概念で、窓単位 shift は経過時間意味論(F76——DST 切替日にずれる。06 §6.1 の実測)。壁時計正準形(tick+coincides)は書けるが 2 段で、末尾 1 段の経過形に利便で負けていた——正準形を最短形にする(F1 標準糖衣の系。ADR-41 却下案が 「糖衣 dailyAt(09:00) 級が将来この字面を回復する余地は残す」と留保した席の実現)。
  2. 単独時刻リテラルの意味論: 値は日内時刻。strideBy(1d, from:) の位置でのみ時点に 具現する——epoch 錨日 1970-01-01(在圏 tz)で錨打ちした壁時計 tick の起点になる。 1970-01-01 錨の根拠: (a) 現行 tzdb 全ゾーン悉皆で 1969-12-30〜1970-01-04 に DST 遷移なし (錨打ちが隙間/重複に落ちる tz は無い)(b) 第 1 tick=錨自身なので帯 [紀元, 錨) の欠落が ゼロ(1970-01-02 案は評価域初日の点が黙って落ちる実測により棄却——候補設計検証)。錨打ちは 日時リテラルと同じ厳格規約(万一の非一意は明示エラー)。クロス tz 実行下限の防御は錨日選びで なく F107 型(windowFloorOf)の領分。
  3. 他の位置は静的エラー(誘導つき): 点位置(stride の from:・比較の錨等)は「日付つきの 日時リテラルで錨を明示する」誘導。strideBy でも市民 1d 以外の幅は静的エラー(位相が黙って epoch 日に固定される罠の防止=ADR-31「錨必須」の精神)。等値 == は日内時刻の一致。
  4. T 接頭形限定: 裸 hh:mm は現行合法式(三値 cond ? 10:30=数値・:・数値)の意味を 変える互換破壊のため採らない(実測で確認)。T\d\d: まで見えたらこの字句の領域で、malformed は誘導つき字句エラー(黙って識別子に落とさない)。時刻部の域検査は日時リテラルと同一 (うるう秒は表現しない=ADR-33)。用語: 従来「時刻リテラル」と呼ぶことのあった時刻付き 日付リテラルとは区別する(glossary の言い換えと対)。
  5. DST は展開先の規定を継承: at は糖衣(展開=機械的差し込み・ADR-23/spec §4.8)ゆえ、 隙間日は F81(ADR-31 改訂 2)の「隙間明けの最初の瞬間へ繰り下げ」・重複日は「最初の出現」—— 独立の規約を持たない。明示エラー化の検討は候補設計検証で却下(糖衣原理の破れ・同位相 anchor grid との出力乖離=ADR-36 同一視の虚偽化・DST 圏で「毎日 02:30」が年 1 回死ぬ表現力 退行、の三重)。「名指しは厳格・導出は規約」(09-dst §9.3)の確立規範どおり。
  6. 警告面の帰結: 展開形は単位窓列を実体化しない(tick は評価範囲内のみ生成・coincides は 値述語)——経過算術形の horizon-clip(実体化域照合・ADR-37 判断 8)の経路が存在しない。 乗り換えで消えるのは末尾形の分で、マーカー準備側 snapTo の端の数点は残る(無害・既知動作)。
  7. 隣接需要は直交合成で閉じる: 「前日 23:00」=shift(-1, unit: day) |> at(T23:00) (日の調整は日の層・時刻付与は at の層)。sub-hour(T07:30)は F81 の壁時計オフセット 保存で規定済み。
  8. 名は at(glossary・reference・stdlib の全数で衝突ゼロ確認)。dailyAt は生成子誤読 (年 5 回の入力に「毎日」)・atTime は T 接頭と二重表現で不採。anchor 引数形(候補設計 案 B at(2026-01-01T17:00))は不採を明記——単発時点への能動的誤読と、チップ・雛形経由で 魔法の日付が定義文面に露出する害(「定義が読める」価値の毀損)。

経緯: 還流第 12 便 B-1(収蔵 13・2026-08-21)→回答書で利用側糖衣 1 本の実測→需要記録→裁定 「候補設計着手」→draft §1.32(案 A 文書のみ/B anchor 引数/C 時刻リテラル)→4 視点並列検証 (条件付き支持 4/4——DST 明示エラー案の撤回・錨 1970-01-01 への訂正・T 接頭限定と互換保持の 実測・eq 分岐の急所)→設計者裁定「案 C」→実装(字句+値+strideBy 受け皿+stdlib 糖衣 1 行・ テスト 13 本〈互換保持の回帰込み〉・Playground 再ビルド)。