日本語 · English(未訳)

ADR-17: 名前解決は premise 相対である。曖昧なときのみ上位存在で修飾する

判断: 名前(monthEndFollowingTSE 等)は、現在の premise の下でのみ値に解決される遅延参照とし、 premise から切り離された絶対的意味を持たない。ある premise 集合の下で名前が一意に解決できるなら裸で書け、 複数の解釈があり得るなら上位存在(暦法・軸・名前空間)での修飾を強制し、無修飾は静的エラーとする。 上位存在は、省略の有無にかかわらず別途宣言されねばならず、その宣言が曖昧判定の前提条件をなす。

背景: 同じ綴りが premise で別物に解決される場面は、この言語に構造的に存在する。monthEnd は暦法相対 (グレゴリオ暦と会計暦で別の日)、Following は軸相対(日軸と時刻軸で判定根拠が違う。ADR-13 の軸非依存の 裏面)、TSE は asof 相対(年により祝日集合が違う。ADR-15)。ゆえに名前解決は premise 相対でなければならず、 これは ADR-16「意味は premise 相対」が値だけでなく名前にまで及ぶ帰結である。解決の定石は VB のモジュール 修飾名(Module1.Foo)や SQL のスキーマ修飾(sales.orders)に既にあり、「一意なら裸、曖昧なら修飾」という 枯れた規則をそのまま採れる。

ただし SQL/VB との決定的な差が一つある。SQL の名前が曖昧かどうかはスキーマ一覧から静的に確定するが、 本言語の monthEnd が曖昧かどうかは「どの暦法が premise に載っているか」に依存する。context calendar-system: Gregorian だけなら一意、Gregorian, Fiscal2026 の二つが載れば同じ monthEnd が曖昧化する。 すなわち曖昧性そのものが premise 依存で発生する。この判定を可能にするのが「上位存在は別途宣言必須」であり、 宣言された premise 集合が確定して初めて、名前が一意か曖昧かを機械的に判定できる。

却下した案:

帰結: