40-examples — 表現力検証(既知スケジュールのサンプル集)
Kairos が「利用者が実際に書きたい既知のスケジュール」を表現できるかを、サンプルを書いて検証する
作業層。RC(リリース候補)策定の一環で、方法論は INDEX の「説明を書いて綻びを炙り出す」——
サンプル記述そのものが綻び出しである。ここは探索の記録であり、確定仕様は ../../spec/、確定した
綻びの解消は ADR と draft(../30-syntax/)へ送る。
判定基準
各サンプルに三値の判定を付す。
- 書ける — 既存語彙(+draft §1.14 の暫定語彙)で表現できた。
- 要補完 — 構造・機構が欠けており、補完機構の候補(
90-findings.md→ draft §1.15〜)が要る。 - 要外部データ — 周期規則から生成できず、権威データ(天文暦・官報・暦書)の持ち込みが要る。 持ち込み口(テーブルリテラル等)は「要補完」と重なる。
検証は当初は実装が無いため期待値照合による(05 以降はリファレンス実装の doctest で実行検証): 各サンプルに公知の具体日付(2026 年の祝日・旧正月・
節気など)を期待値として付し、式の読み下しと突き合わせる。天文・暦データの期待値は国立天文台
令和8年(2026)暦要項の実データで照合済み(95-reference-data.md に一次データと照合結果)。
実データ投入により、時点だけのテーブルでは「立春」を意味的に選べない綻び(F32/F33)が新たに露見し、
射影一族(labelOf)の必要性が具体的に裏づけられた。
記法の規約
- 各サンプルは五点セット: (1) 自然言語仕様+期待値、(2) premise 定義+本体式(糖衣形)、
(3) core 展開(糖衣と差があるとき)、(4) 判定、(5) 綻びログ(F 番号。
90-findings.mdに集約)。 - 前提の前文は断りなければ
@JP(Gregorian・Asia/Tokyo・wkst: Mon)。 - 暫定語彙(日付リテラル・cycle ラベル述語・week 窓・snapTo 等)は draft §1.14 と各所の(暫定)注記。
ファイル構成
| ファイル | 対象 |
|---|---|
| 01-jp-holidays.md | 国民の祝日一式(固定日・ハッピーマンデー・春分秋分・振替・国民の休日・五輪特例)+生活系(給料日・ゴミ収集・中国調休) |
| 02-cycles.md | 十干・十二支(日/年)・干支 60・六曜・一粒万倍日 |
| 03-astronomical.md | 二十四節気・旧暦・雑節・月齢月相・イースター・ISO 週番号 |
| 04-projections.md | 射影一族(ordinalIn/labelOf/snapTo/epochOrdinal/label:)の綻び出し |
| 05-astronomical-calendars.md | 天文由来の暦法の横断検証(ティティ=実行検証・イスラム暦/バハーイー暦/日没起点の日=机上)。```kairos ブロックは doctest 実行 |
| 06-business-hours.md | 営業時間・半日休(F67 の綻び出し)。壁時計 vs 経過時間の二意味論・帯+証人パターン・DST 切替日と深夜営業の実行検証(多 TZ 例は # eval: の後置 tz:) |
| 07-injected-origin.md | 実行起点相対の分解(注入された時点からの次回計算=spec §7.7 の doctest 4 例・誤形の整列エラー実測) |
| 08-backup-schedules.md | バックアップの多段世代(日次増分・週次差分・月次フル・上位優先の抑止・開始時刻の漸減=有限場合分け+結合子。doctest 2 例) |
| 90-findings.md | 綻びログの集約(F1〜F105)と補完機構への写像 |
| 95-reference-data.md | NAOJ 令和8年暦要項の一次データ(節気・朔弦望・春分秋分)と照合結果 |
仕分けマトリクス(全要素)
| 暦要素 | 判定 | 主な依存 |
|---|---|---|
| 固定日の祝日(元日・建国記念の日 等) | 書ける | cycle ラベル述語・月への cycle |
| ハッピーマンデー(成人の日 等) | 書ける | cycle ラベル述語(WKST 非依存) |
| 春分の日・秋分の日(官報版) | 要外部データ | テーブルリテラル |
| 振替休日 | 書ける | 導出ストリームを roll の軸に |
| 国民の休日(挟まれ) | 書ける | —(積 & の実用例) |
| 年限定特例(五輪移動) | 書ける | テーブルリテラル・asof/source |
| 給料日(25 日・前営業日) | 書ける | — |
| ゴミ収集日(第 1・第 3 水曜) | 書ける | — |
| 中国の調休(反転) | 書ける | テーブルリテラル・カスケード差 |
| 十干・十二支(日) | 書ける | anchor=権威データ |
| 十干・十二支(年)・丙午 | 書ける | 年窓への cycle |
| 干支 60 | 書けるが鈍い | (cycle の積は述語合成で代替可) |
| 六曜 | 要補完+要外部データ | 窓内序数・窓ラベル射影・旧暦 |
| 一粒万倍日(選日) | 構造は書ける | 節気データ・ラベル射影・in |
| 二十四節気 | 要外部データ | テーブルリテラル・snapTo |
| 旧暦(朔・大小月・閏月) | 要外部データ+要補完 | 窓ラベル付与・層またぎ規則 |
| 雑節(八十八夜・二百十日・彼岸) | 節気があれば書ける | 範囲 shift は列挙 |
| 月齢・月相 | 要外部データ | イベント化して持ち込む |
| イースター(Computus) | 値は書ける・時点化で要補完 | 点→値の射影 or 値→時点の持ち上げ |
| ISO 週番号 | 要補完 | 窓ラベル射影(年度ラベルと同族) |
| 毎営業日 9 時(壁時計) | 書ける | strideBy の市民時幅・coincides(06) |
| 営業時間帯+半日休(11:30 引け) | 書ける(冗長=F77 糖衣候補) | segmentBy 帯+証人パターン・時刻付きテーブル(06) |
| 深夜営業の帯(日跨ぎ) | 書ける(帰属は修理形=F85) | 証人パターンの二段掛け(06) |
| バックアップ多段世代(抑止・時刻漸減) | 書ける | day 集合の差・場合分け+結合子・壁時計 tick(08) |
総括: 「書けない構造」は無かった。欠けているのは (1) データの持ち込み口(テーブルリテラル)、
(2) 窓→値の射影一族(窓内序数・窓ラベル・snap)、(3) 細部の値語彙(in・日付範囲・非 ASCII
ラベル)の三群に集約される。詳細は 90-findings.md。