言語仕様 · Playground

問題

契約日の 90 日後に更新確認を発火させたい。契約データは 2026 年分と 2028 年分だけ取得済みで、 2027 年分は未取得(covering の区間リストに中抜けがある)。評価範囲 2028-01-01..2028-06-01 で 実体化すると何が出るか。

premise JP {
  calendar-system: Gregorian
  tz: "Asia/Tokyo"
  wkst: Mon
}

@JP
dues = [2026-03-01, 2026-09-01] covering: 2026..2026, 2028..2028
dues |> shift(90, unit: day)

正答

(b)

解説

註釈も演算子で輸送される(ADR-37 判断 4 の輸送表)。covering の中抜け [2027-01-01, 2028-01-01) は「この区間の契約は未知」という主張で、shift(90, unit: day) は その未知区間も +90 日の平行移動像として運ぶ——像 [2027-04-01, 2028-03-31) のうち評価範囲に 掛かる [2028-01-01, 2028-03-31) が註釈として並走する。意味は「2028 年 1〜3 月の発火は、未取得の 2027 年後半の契約から来ていたかもしれない」。点が出ないことと、出ない理由が信用できることは 別——後者を註釈が担う。(d) は評価範囲外なので出ない(2026 の像は 2026 年内)。 impl 実走検証済み(2026-08-02・公開 HEAD d1085ee)。

検証

# eval: 2028-01-01..2028-06-01
premise JP {
  calendar-system: Gregorian
  tz: "Asia/Tokyo"
  wkst: Mon
}

@JP
dues = [2026-03-01, 2026-09-01] covering: 2026..2026, 2028..2028
dues |> shift(90, unit: day)
# ⚠ 範囲外 2028-01-01..2028-03-31(dues covering 2026-01-01..2026-12-31, 2028-01-01..2028-12-31)
# 被覆サマリ
#   dues covering 2026-01-01..2026-12-31, 2028-01-01..2028-12-31 残走路 214 日