\<setminus> 伊莎贝尔语法

\<setminus> Isabelle syntax

我只是找不到从集合中删除术语的语法。

我有以下内容:

typedecl STUDENT

definition LeaveHall :: 
"STUDENT set => STUDENT set => STUDENT set => STUDENT set => STUDENT =>
bool"
where
"LeaveHall badminton' badminton hall' hall leaver == 
(
(leaver \<in> hall) \<and> (hall' = hall \<setminus> {(leaver)})   
<and>
(badminton' = badminton)
)"

我不喜欢表达式“(hall' = hall \ {(leaver)}) “

我想说的是 set hall' 是 set hall 减去 leaver 一词。 但它就是不喜欢它。我试过放括号之类的东西 还是不行。

虽然 符号以名称 \<setminus> 存在于 Isabelle 中,但目前未使用。 set difference 的正确语法非常简单 -,所以这是可行的:

definition LeaveHall :: "STUDENT set ⇒ STUDENT set ⇒ STUDENT set ⇒ STUDENT set ⇒ STUDENT ⇒ bool"
  where "LeaveHall badminton' badminton hall' hall leaver ⟷
             leaver ∈ hall ∧ hall' = hall - {leaver} ∧ badminton' = badminton"

如果你想使用\<setminus>,你当然可以用这种语法定义一个缩写:

abbreviation setminus (infixl "∖" 65) where "setminus ≡ op -"

或者,只允许它输入术语而不在打印术语时使用它:

abbreviation (input) setminus (infixl "∖" 65) where "setminus ≡ op -"

关于一个不相关的说明:由多个单词组成的标识符通常在 Isabelle 中用下划线书写,而不是 Camel Case。当然,您可以随意调用您的标识符,但约定是使用下划线而不是驼峰式大小写。

另外,请注意,我在上面 LeaveHall 的定义中使用了 ,而不是元等式 (如您所用)或常规等式 =。不鼓励在定义中使用元相等运算符 (尽管它没有真正的缺点)。

布尔等价运算符 只是布尔相等性的缩写(因此它与写作 = 完全相同)。那么为什么要使用 呢?因为它的优先级低于 =,这意味着您通常需要较少的括号:P a = Q a ∧ R a 被解析为 (P a = Q a) ∧ R a,而 P a ⟷ Q a ∧ R a 被解析为 P a = (Q a ∧ R a)