日本語 · English(未訳)

ADR-18: premise 層と本体層の二層構造。語彙は共有し型は分離する

判断: 言語を二層に分ける。premise 層(暦法・カレンダーを組み立てる層。多行・宣言的でよい)と、 本体層(スケジュールを紡ぐ層。一行・パイプ的でありたい)。SQL の DDL と DML の関係に対応する。 両層は同じストリーム語彙(生成子・結合子・窓等)を共有するが、扱う型は分かれる。本体層の第一級値は 時間ストリーム(外延・点の列)、premise 層が構築するのは premise(内包・生成規則)であり、両者は別の型。

背景: 「本体式は可能な限り一行、premise 宣言は一行にこだわらない」という要求は、書式の希望ではなく 「premise を定義する言語と premise の上で式を書く言語は別」という宣言だった。この分離は、premise の含む/ 含まないの線引き(3.0:ストリームと演算子は premise でない)と同じ場所で割れており、モデルの自己整合を示す。 複雑さは消せず保存される(ADR-16 のトレードオフ)ため、本体式が簡潔でいられるのは premise 層が複雑さを 引き受けるからである。ゆえに premise 層は複雑になることを許容する。ただし許容するのは「表現力」(表せる 暦法の範囲)であって「構文の華美」(独自記法の積み増し)ではない。後者は二重学習コストに反転する罠。 両立の鍵は、premise 層の操作を本体式と同じストリーム代数で書くこと。祝日の増減=ストリームの和・差、 暦法の合成=積、会計暦の境界ずらし=窓操作。新しい演算子を足さずに表現力だけを上げる。

時間ストリームで premise を表現することは原理的に不可能である。時間ストリームは外延(生成された点の列)、 premise は内包(生成規則)であり、外延から内包は復元できない(3 月末という点列から「月末とは何か」の規則は 逆算できない。情報が落ちている)。ゆえに両者は別の型でなければならず、これは設計判断ではなく情報量の差という 事実の反映である。両者の関係は非対称で、premise を評価すると時間ストリームが出る(レシピを実行すると料理が できる)が、逆は不可。

却下した案:

帰結:

改訂(ADR-25 による): 値型(数値・論理・列挙・将来の文字列)の追加で、言語全体の型は「時間ストリーム型・ premise 型・値型」の三系統になる。二層構造・語彙共有・型分離という本判断は不変で、型の系統数のみ更新される。