\<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)
。
我只是找不到从集合中删除术语的语法。
我有以下内容:
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)
。