言語仕様 · Playground

問題

roll の着地先が見つからず結果がになるとき、Kairos は「なぜ空か」を出力の形で区別する。 次の 2 つの評価(どちらも点ゼロ)の出力の違いと、それぞれの運用上の読みを述べよ。

【A】軸データの covering が 2026 年で尽きている(2027 年分は未取得):

sekkiA = [2026-02-04, 2026-05-05] covering: 2026..2026
([2027-03-01] covering: ..) |> roll(Following, on: sekkiA)

【B】軸データの covering が開端(2026-01-01..=それ以降は完結の主張):

sekkiB = [2026-02-04, 2026-05-05] covering: 2026-01-01..
([2027-03-01] covering: ..) |> roll(Following, on: sekkiB)

正答

解説

同じ「点ゼロ」に三つの顔がある(ADR-37 判断 6/8 の三分岐): ①実体化地平線(計算範囲 to+400 日の端に当たった——horizon-clip 警告で知らせる・言語の地平線ではない)・ ②実効被覆域の外(未知——範囲外註釈が並走)・③完結データの正当な尽き(該当なし—— 何も付かない空。ADR-15「事故の空と正当な空の区別」)。運用の分岐がそのまま対応する: ①は評価範囲の設計を見直す・②は供給を更新する・③は何もしない。「空だから何かがおかしい」でも 「空だから正常」でもなく、空の種類を出力が語る——これを読み分けるのが 1 級の運用意味論。 覆域末尾の開端(2026-01-01..)が「以降ずっと完結」という強い主張である点にも注意(安易に 付けると③の顔で嘘をつく)。②③は下の検証で実出力を照合済み・①は警告面のため検証対象外 (doctest 規約では #~> が担う)。impl 実走検証済み(2026-08-02・公開 HEAD d1085ee)。

検証

【A】実効被覆域の外=空+註釈:

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

@JP
sekkiA = [2026-02-04, 2026-05-05] covering: 2026..2026
([2027-03-01] covering: ..) |> roll(Following, on: sekkiA)
# ⚠ 範囲外 2027-01-01..2027-06-01(sekkiA covering 2026-01-01..2026-12-31)
# 被覆サマリ
#   (無名テーブル) covering ..(完結主張) 残走路 ∞
#   sekkiA covering 2026-01-01..2026-12-31 残走路 -151 日

【B】完結データの正当な尽き=註釈なしの空:

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

@JP
sekkiB = [2026-02-04, 2026-05-05] covering: 2026-01-01..
([2027-03-01] covering: ..) |> roll(Following, on: sekkiB)
# 被覆サマリ
#   (無名テーブル) covering ..(完結主張) 残走路 ∞
#   sekkiB covering 2026-01-01..(完結主張) 残走路 ∞