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)
≡
还有一个优点:它通常可以保存一对妄想。