言語仕様 · Playground

問題

「毎月 25 日と毎週金曜の両方に発火したい」。評価範囲 2026-09-01..2026-10-01 で実体化すると 発火点は何点か(2026-09-25 は金曜・9 月の金曜は 4/11/18/25 の 4 本)。

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

@JP
(everyDay |> within(month) |> nth(25)) | (everyDay |> filter(d => weekday(d) == Fri))

正答

(b)。実出力=2026-09-04, 2026-09-11, 2026-09-18, 2026-09-25 の 4 点。

解説

|集合の和——同じ点が両辺に現れても 1 点に正規化される(重複排除)。9/25 は 「25 日」としても「金曜」としても該当するが、発火点としては 1 点。「両方の予定が重なった日に 2 回発火」は起きない——at-least-once の発報と組むときにこの性質が効く。単純に「1+4=5 点」と 数えると (a) に落ちる。impl 実走検証済み(2026-07-31・公開 HEAD 9e46dcf)。

検証

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

@JP
(everyDay |> within(month) |> nth(25)) | (everyDay |> filter(d => weekday(d) == Fri))
2026-09-04
2026-09-11
2026-09-18
2026-09-25