Model Base

A.3.1 驚くような三段論法

最終更新:

modelbase

- view
管理者のみ編集可

更新日2011-09-03
[ Alloy Analyzer ] / [ 抽象によるソフトウェア設計/付録 A 練習問題 解答例 ]


Doris Day の歌

Everybody loves my baby
but my baby don’t love nobody but me.

この歌をいくつかの制約で形式化し、Gries の推論をアサーションにせよ。

Doris Day の歌の主張を 述語DorisDay 、「私は私の彼だ」を 述語I_am_my_baby、Geriesの推論を示す 述語Gries は以下となる。

 pred Greies{
   DorisDay => I_am_my_baby
   }

"私"や、"私の彼"、"好き"などの構造を以下のように定義すると、

 sig Person{ 
   -- この人が愛している人達
   love: set Person
   }
 some sig MyBaby in Person{}
 one sig Me extends Person{}

述語DorisDay と 述語I_am_my_baby は以下のようになる。

pred DorisDay{
   -- Everybody loves my baby
   all p: Person | MyBaby in p.love 
   -- but my baby don't love nobody but me.
   all p: Person | p=Me => (all b: MyBaby | p in b.love) else  p not in MyBaby.love 
   }
 
 pred I_am_my_baby{
   Me in MyBaby
   }
 
 assert Greies{ Greies }
 check Greies

アサーションを実行して反例は出なかった。

制約を変更して、Doris Day が言いたかったであろう形に記述し直し、今度はアサーションが反例を持つことを示せ

"Everybody loves my baby"の Everybody について、彼自身を除いてあげる。

 pred DorisDay'{
   -- Everybody loves my baby
   all p: Person-MyBaby | MyBaby in p.love 
   -- but my baby don't love nobody but me.
   all p: Person | p=Me => (all b: MyBaby | p in b.love) else  p not in MyBaby.love 
   }
 
 pred Greies'{
   DorisDay' => I_am_my_baby
   }
   
 assert Greies'{ Greies' }
 check Greies'

アサーションを実行して以下のような反例が出た。






















添付ファイル
記事メニュー
目安箱バナー