驚くような三段論法
「抽象によるソフトウェア設計」を読んだ。
内容が難しい上にAlloyの記述形式に馴染めないので、読むのに時間が掛かった。
説明のための例としてアドレス帳を取り上げているのだが、アドレス帳の仕様記述には何の興味も湧かないので退屈だった。説明する側からすれば、ものすごく合理的で適切な例なんだろうと思うが。
- 作者: Daniel Jackson,中島震,今井健男,酒井政裕,遠藤侑介,片岡欣夫
- 出版社/メーカー: オーム社
- 発売日: 2011/07/15
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 274回
- この商品を含むブログ (35件) を見る
付録に載っている練習問題を考えてみる。
A.3.1「驚くような三段論法」
Doris Dayの歌
Everybody loves my baby
but my baby don't love nobody but me.
これは「私は私の彼だ」を含意していることになる。検査せよ。
sig 人 { 愛する: set 人 } sig 彼 in 人 {} one sig 私 in 人 {} pred 歌の主張 { all x: 人 | 彼 in x.愛する -- Everybody loves my baby all b: 彼 | no (b.愛する & (人 - 私)) -- but my baby don’t love nobody but me. } fact { #彼 > 0 } check { 歌の主張 => 私 in 彼 }
Solver=sat4j Bitwidth=0 MaxSeq=0 SkolemDepth=1 Symmetry=20
162 vars. 18 primary vars. 243 clauses. 114ms.
No counterexample found. Assertion may be valid. 11ms.
となって反例は見つからない。
fact {...}を消して、彼が存在しない場合も許すと、歌の主張に意味がなくなるので反例が生じる。