2016-11-18 12 views
0

「天気」をRainy,Sunny,Cloudyのいずれかにします。雨天の都市はありません

「天気」は、都市と天気の関係です。そのモデルを考える

Boston – Sunny 
Seattle – Cloudy 
Miami – Sunny 

、私は主張することができるはずです::

sig Forecast {weather: City -> one Weather} 

sig City, Weather {} 

one sig Rainy, Sunny, Cloudy extends Weather {} 

は、ここでのサンプルインスタンスのすべての都市天気を持っています。

assert Every_city_has_weather { 
    all forecast: Forecast | all city: City | one forecast.weather[city] 
}    

私は、アサートをチェックするために合金アナライザを求めることができます:ない反例が

が優れた:

check Every_city_has_weather 

Analyzerが期待される結果を返します。

ここでは天気があり、その天気がない都市はないと主張したいと思います。上記の例では、CityにはRainyという値はありません。

これを表現するのが難しいです。私はこれを試しました:いくつかのw:天気の関係にwと合流するとき、都市がないような天気があります。ここ合金アサートだ:

assert A_weather_may_not_be_in_any_city { 
    all forecast: Forecast | some w: Weather | no forecast.weather.w 
} 

それから私は自分の主張を確認するために合金アナライザを尋ねた:

check A_weather_may_not_be_in_any_city 

ザ・アナライザは、(それが各天気値はシティにマッピングされているインスタンスを示した反例と答え)。

明らかに私の論理は正しくありません。あなたはこれを表現するための正しい論理を考えることができますか?

答えて

1
  1. インスタンスが存在するかどうかを確認するには、実行文を使用する必要があります。アサートによれば、のすべてがインスタンスの真であると言われています。 、私は非常にこれを直接表現することをお勧めしたい:

    some w: Weather | no c: City | ...

  2. :あなたは「ワットと気象の関係を結ぶ際に何の市が存在しないような天気は、いくつかのワットがあり、」言いたいことを考えると

関連する問題