抽象によるソフトウェア設計 付録A 練習問題 その8
付録A 練習問題続きます。先はまだまだ長いです。
- A.1.11 地下鉄をモデリングする (続き)
abstract sig Station { line: lone Station } fact { no s: Station | s -> s in line } sig S extends Station {}
-
- (b) line には切れ目がない(これは変わらず)
fact { all disj x, y: S | y in x.^line or x in y.^line } assert C { all disj x, y: S | some z: S | z in x.^line and z in y.^line } check C
-
- (c) line の端点 from と to。これは多分表現する式を書けばいいんですよね
-- from line.univ - univ.line -- line の始点側に含まれているけど終点側に含まれてないもの -- to univ.line - line.univ -- line の終点側に含まれているけど終点側に含まれてないもの
-
- (d) line の分岐合流点は集合 S 内
- ここでの S は (a) の S と同じものを指してるんでしょうか(それだと自明なような)、それとも line の分岐合流点の集合を S として形式化しろということなのか……
- (d) line の分岐合流点は集合 S 内
some s: S | #s.line > 1 || #line.s > 1
-
- (e) line が環状になっている (a〜d を使って書ける)
run Circle { -- line に切れ目がない all disj x, y: S | y in x.^line or x in y.^line -- line の端点が空集合 no (line.univ - univ.line) no (univ.line - line.univ) -- line の分岐集合点が空集合 no s: S | #s.line > 1 || #line.s > 1 }
A.1.11 はまだ続きがあって、今度は具体的な駅名でモデリングするようです。