簡體   English   中英

使用 Double In 語句在合金中輸入錯誤

[英]Type Error in Alloy using Double In Statement

我正在嘗試編寫一個使所有香蕉和新鮮蘋果變得昂貴的謂詞。 我能夠達到其中一個條件,但不能同時達到。 我對使用 Alloy 很陌生,任何幫助將不勝感激。

下面是我的代碼,發生錯誤是因為我使用了雙 In 語句,但我不確定如何在不必使用兩個 in 語句的情況下編寫它。 我收到的錯誤是“類型錯誤,這必須是一個集合或關系”

sig Fruit{}
sig Banana, Apple, Pear extends Fruit {}
sig Fresh, Expensive in Fruit{}

pred BananasAndFreshApplesAreExpensive {
Apple in (Expensive & Fresh) + Banana in Expensive
} 
run BananasAndFreshApplesAreExpensive

其它的辦法:

所有香蕉由集合Banana所有新鮮蘋果由集合Fresh & Apple表示 x 是昂貴的由x in Expensive

所以

Banana in Expensive
(Fresh & Apple) in Expensive

要不就

Banana + (Fresh & Apple) in Expensive

如果我正確理解您要執行的操作,則代碼不會失敗,因為您有 2 個“in”語句,這是因為您使用的是聯合運算符(“+”)而不是邏輯 AND(“and”或“&&”)。

謂詞的返回必須評估為 TRUE 或 FALSE。

如果你想說以下幾點:

  • 蘋果的所有實例都是昂貴和新鮮的,並且
  • Banana 的所有實例都很昂貴

...下面的代碼將做到這一點:

sig Fruit{}
sig Banana, Apple, Pear extends Fruit {}
sig Fresh, Expensive in Fruit{}

pred BananasAndFreshApplesAreExpensive {
Apple in (Expensive & Fresh) and Banana in Expensive
} 

run BananasAndFreshApplesAreExpensive

但是,如果您想說:

  • 新鮮的蘋果實例價格昂貴且
  • 香蕉的實例很昂貴

...以下代碼是一種方法:

sig Fruit{}
sig Banana, Apple, Pear extends Fruit {}
sig Fresh, Expensive in Fruit{}

pred BananasAndFreshApplesAreExpensive {
    (all a: Apple | a in Fresh => a in Expensive) and
    Banana in Expensive
} 

run BananasAndFreshApplesAreExpensive

但是請記住,這並不能說明 Apple 實例不新鮮。 換句話說,它將允許不新鮮的 Apple 實例變得昂貴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM