メインコンテンツまでスキップ

導出の決定性

形を作らないことと、形を作れないことは違う。この記述からは、一意な形が作れなければならない。

導出の規則が消費者ごとに違えば、同じ原本から違う建物が出る。それは原本ではない。だから規則は仕様として明文であり、参照実装が API として提供される。

「同じ構成から複数の形が出る」ことは欠陥である。複数あってよいのは見た目であって、形ではない。

一意性は文ではなく述語である

「一意である」は約束の文としては弱い。誰も検算できないからである。koyu はそれを機械が縛れる含意として書く。

toCanonical(a) === toCanonical(b)  ⟹  derive(a) ≡ derive(b)

形は正準形の関数である。

正準形は「同じ建物とは何か」の定義である。したがって正準形が捨てる情報は、形を変えてはならない。

  • 線の端点の書き順
  • 境界の宣言順
  • 行の並び
  • boundary /L1/a /outboundary /out /L1/a の向き

これらを変えても正準 JSON はバイト同一である。だから形も一致していなければならない。変えてしまうなら、捨ててよいものを捨てていないか、捨ててはいけないものを捨てているかのどちらかである。

この含意はテストが縛っている。正準形が等しいことを前提として確かめてから形の一致を主張するので、前提が崩れれば「この組は何も証明していない」と落ちる。

担保は第一に構造による

規則を並べる前に、構造そのものが一意性を担保している。

与件が座標を与え、関係が共有面という座を与え、実体はその座に乗る。実体は座を持って生まれる。

これが効いている場面を三つ挙げる。

壁。壁は「置かれる」のではなく、二つの領域の共有辺として現れる。置く操作が無いので、置き場所の曖昧さも無い (境界による壁の表現)。

柱。柱の位置はどこにも書かれない。通り芯の交点と床の交わりから現れる。同じ交点に二本は立たない — 先に書かれた宣言が勝つ、という決定的な規則がある。

縦動線。段数も踏面も勾配も書かれない。領域と階高と「上る向き」の宣言だけから導かれる。同じ大きさの階段室に、階高に応じて 37 段が入ったり 24 段が入ったりする — どちらも決定的である。

導出の規則にも順序がある

構造だけでは足りない場面がある。そこでは順序そのものが規範の一部になる。

一例。空間に「描かれた線」(斜めの分割線) があると、領域が切り直される。切り直しは複数の線が順に効くので、どの順で効くかで結果が変わりうる。

だから規則はこう定める。切り分けは宣言順ではなく、正準の境界順に効く。

正準 JSON は境界の宣言順を捨てる。もし宣言順に切っていたら、同じ正準形から違う面積が出ることになる — つまり上の含意に反する。捨てられる情報が形に効いてはならないという要請が、そのまま実装の走査順を決めている。

同じ理由で、線分は向きを持たない。同じ二点を結ぶ線は、どちらの端から書いても同じ線である。導出は切り分けの前に端点を昇順へ揃える。揃えなければ、正準 JSON がバイト同一のまま扉が別の位置に出る。

既定値を捏造しない

必要な値が書かれていなければ、既定を勝手に置くのではなくその要素を作らない。

天井高が一つも決まらなければ階高も決まらず、そのレベルには壁も柱も立たない。そして充足性の診断がそれを言葉にする (SUF01)。黙って 2400 を置いて図面を出すことはしない。

例外は、仕様が定めた導出の既定である — 壁厚 100mm、まぐさ高 2000mm、蹴上げの上限 180mm など。これは捏造ではなく規則である。書かれた値があれば必ず書いた値が勝つ。一覧は 導出の定数

この区別が要る。「規則として定めた既定」と「その場でこしらえた既定」は、前者が仕様に書かれて再現できるのに対し、後者は実装ごとに違う。後者を許せば一意性は消える。

形は見た目を持たない

参照実装 derive(model) が返す Form は、見た目を一つも持たない。

持つもの — 座標 (領域の凸片・境界線分・開口の中心・柱の断面・段板の矩形)・厚み・z 範囲・向き・対象の同一性・平面の分類。

持たないもの — 色・書体・文字寸・線幅・線種・注記の言葉 (UP も「12段 蹴上175/踏面300」も)・作図の記号 (吹抜けの対角線・切断線の二本の斜線・通り芯の丸・矢印の頭)・縮尺と紙面の余白・描く順序と重ね順と陰影・何を描き何を省くかの判断。

この線引きがあるから、「見た目は複数あってよい」と「形は一つでなければならない」が両立する。描画は Form を描くだけであり、SVG の中身はいつ変わってもよい。変わってはならないのは SVG ではなく Form である。

これも機械が縛っている。描画のコードが形を組み立てる部品を一つも引いていないこと、導出の定数が描画側に綴られていないこと、平面に出た黒帯が Form の「切られた区間」そのものであること — どれも検査される。

「複数の形が出てよい」は誤りである

この立場は一度は逆だった。「生成は一意ではない。同じ構成から複数の形が出る。それは欠陥ではない」と書かれていた時期がある。

その立場を捨てた理由は単純である。複数の形が出るなら、原本は建物を決めていない。面積が消費者ごとに違い、壁の位置が実装ごとに違い、平面図が版ごとに違う。それは交換形式としてすら成り立たない。

残ったのは「見た目は複数あってよい」だけである。そしてそれは形の話ではない。

この先