Syntax \<;设置负数>;伊莎贝尔语法

Syntax \<;设置负数>;伊莎贝尔语法,syntax,set,isabelle,Syntax,Set,Isabelle,我就是找不到从集合中删除术语的语法 我有以下资料: typedecl STUDENT definition LeaveHall :: "STUDENT set => STUDENT set => STUDENT set => STUDENT set => STUDENT => bool" where "LeaveHall badminton' badminton hall' hall leaver == ( (leaver \<in> hall)

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

我有以下资料:

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)
)"
typedecl学生
定义如下:
“学生集=>STUDENT set=>STUDENT set=>STUDENT set=>STUDENT=>
“布尔”
哪里
“LeaveHall羽毛球‘羽毛球馆’hall leaver==
(
(离开者\大厅)\(大厅'=大厅\{(离开者)})
(羽毛球‘=羽毛球)
)"
它不喜欢的是我的表达“(霍尔’=霍尔\{(离开者)}) "

我想说的是集合大厅,是集合大厅减去离开者这个词。 但它就是不喜欢。我试着把括号和东西放进去
仍然不起作用。

符号存在于Isabelle中,名称为
\
,目前未使用。设置差异的正确语法非常简单
-
,因此它可以工作:

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"
如果要使用
\
,当然可以使用该语法定义缩写:

abbreviation setminus (infixl "∖" 65) where "setminus ≡ op -"
或者,仅允许输入术语,但在打印术语时不使用:

abbreviation (input) setminus (infixl "∖" 65) where "setminus ≡ op -"
另一个不相关的注意事项是:由多个单词组成的标识符通常在Isabelle中使用下划线,而不是驼峰大小写。当然,您可以随意调用标识符,但惯例是使用下划线而不是驼峰大小写

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


布尔等价运算符
只是布尔式等式的缩写(因此它与编写
=
完全相同)。那么为什么要使用
?因为它的优先级低于
=
,这意味着您通常需要更少的括号:
pa=qa∧ rA
被解析为
(pA=qA)∧ R a
,而P a⟷ 问题a∧ rA
被解析为
pA=(qA∧ R a)

还有一个优点:它通常可以保存一对妄想。