2016-11-18 62 views
0
沒有城市

讓「天氣」是其中之一:RainySunnyCloudy可能有陰雨天氣

我可以創造一個合金模型,說:「天氣」是城市和一個天氣之間的關係。

sig Forecast {weather: City -> one Weather} 

sig City, Weather {} 

one sig Rainy, Sunny, Cloudy extends Weather {} 

以下是樣本實例:

Boston – Sunny 
Seattle – Cloudy 
Miami – Sunny 

鑑於模型,我應該能夠斷言:每座城市都有天氣。

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

我可以再問問合金分析儀來檢查斷言:

check Every_city_has_weather 

分析儀返回預期的結果:沒有發現反例

優秀。

現在我想斷言,有可能是對於沒有城市有天氣天氣。在上面的示例中,沒有城市具有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. 如果你想看到某個實例存在,你應該使用運行而不是檢查語句。一個斷言說每實例有一些事情是真實的

  2. 既然你想說「有一些女:天氣,使得沒有加入城市用W天氣關係時」,我建議非常直接地表達這一點:

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