日本語 · English(未訳)

07 — 注入された時点からの次回計算(「実行起点相対」の分解)

発端(設計者の洞察・2026-07-11): スコープ確定時に「実行起点に相対な窓(『前回完了から 5 時間』など)」を射程外とした(00-overview §2・ADR-10・I7)。この決定は覆さないが—— 「ある時点を示す生成子を足すか、時間リテラルをストリームに昇格させれば、『この時点から 3 営業日後』は今の Kairos でも書けるのではないか」。

結論: 書ける。しかも新語彙ゼロ——仮定に置かれた 2 つの前提はどちらも既に言語にある。 「ある時点を示す語」は単一要素のテーブルリテラル(ADR-26 の「時点リストの時間ストリーム 昇格」は要素 1 個でも合法)、時点の値束縛も ADR-43(F97)で正式に合法。本ページはこの分解を 実行検証つきで確定する(正本の説明は spec §7.7・スコープの但し書きは 00-overview §2)。

7.1 スコープの分解——何が書けないままで、何が最初から書けていたか

判定 理由
「前回完了から 5 時間ごと、完了のたびにリセット」を単一の無限ストリームとして書く 書けない(正しくスコープ外のまま) 式の出力(実行結果)が入力に戻るフィードバック。I7(純粋・遅延)と外延性(式=時点の集合)が壊れる
与えられた 1 点 t からの「次の発火時刻」 書ける(最初から射程内) t が固定なら決定的な暦計算=純関数。再評価・監査で同じ答えが出る

スコープ外にしたのは「前回完了という束縛」=実行状態への依存であって、「与えられた時点からの 暦計算」ではない。ステートフルな無限ストリームを「注入された 1 点からの純計算(評価ごとに 1 回)」へ分解すれば、後者は現行語彙で閉じる。t の注入口も新設不要——祝日データと同格の 外部データとして、テーブルリテラル+出所統治(source: "runtime/lastCompleted"asof: 評価時刻)で差し込む(ADR-15 のデータ供給の切り離し・適用検討 01(非公開)のソース生成方式 そのまま)。「完了のたびに t を差し替えて再評価する」ループは発報層の責務。

7.2 実行例(doctest)

この時点から 3 営業日後(起点が営業日: 木曜 7/9 → 金・月・火):

# eval: 2026-07-01..2026-08-01
@JP
[2026-07-09] covering: .. |> roll(Following, on: bizDay) |> shift(+3, unit: bizDay)
#=> 2026-07-14

起点が非営業日でも roll が先に立て直す(土曜 7/11 → 月 7/13 に着地 → 火・水・木):

# eval: 2026-07-01..2026-08-01
@JP
[2026-07-11] covering: .. |> roll(Following, on: bizDay) |> shift(+3, unit: bizDay)
#=> 2026-07-16

時刻付きの起点(実運用の形——完了時刻をそのまま注入し、日粒度の営業日算術は snap してから):

# eval: 2026-07-01..2026-08-01
@JP
lastCompleted = [2026-07-09T14:23] covering: ..
lastCompleted |> snapTo(day) |> roll(Following, on: bizDay) |> shift(+3, unit: bizDay)
#=> 2026-07-14

経過時間の形(「この時点から 5 時間後」——粒度をまたがない純経過):

# eval: 2026-07-09..2026-07-10
premise HourG = Gregorian with { hour = chronos grid 1h }
premise T { calendar-system: HourG; tz: "Asia/Tokyo"; wkst: Mon }
@T
[2026-07-09T14:23] covering: .. |> shift(+5, unit: hour)
#=> 2026-07-09T19:23

7.3 誤形と統治(実測)

時刻付きの起点をそのまま bizDay 軸へ流すのは整列の静的エラー(ADR-36 が黙った空振りを 封じる。実測のエラー文言):

[2026-07-09T14:23] covering: .. |> shift(+3, unit: bizDay)
# → shift(unit: 点列軸): 両辺の整列が同一でない——点の等値所属が黙って空振りする形(ADR-36)。
#   入力=なし・軸/右辺=市民日 1d

正準は上の例のとおり snapTo(day) で明示に日粒度へ落としてから営業日算術。「3 営業日後の 同時刻(14:23 を保存)」の機械的な時刻再付与は F78(壁時計の時刻値射影・保留)の領域—— 固定時刻の発火(09:00 級)なら strideBy(1d, from: …T09:00) の既存形、可変時刻の保存が 要るなら発報層で t の時刻成分を再付与する(作法)。

7.4 帰結