Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Isabelle 是否可以重载分配给bool和list的运算符的符号?_Isabelle - Fatal编程技术网

Isabelle 是否可以重载分配给bool和list的运算符的符号?

Isabelle 是否可以重载分配给bool和list的运算符的符号?,isabelle,Isabelle,(注意:如果我能摆脱下面的警告,那么我会说一些无关的话。作为提问的一部分,我也会发表一些意见。我想这有点像是在问一个问题:“我说的为什么不对?”) 似乎用于bool运算符的符号中有6个应该分配给语法类型类,并且为这些类型类实例化了bool。特别是: ~, &, |, \<not>, \<and>, \<or>. 我能摆脱这些警告吗?看来既然有一个类型正确的术语,就不会有问题了 实际上,我还需要其他符号,例如,用于列表: term "[1,

(注意:如果我能摆脱下面的警告,那么我会说一些无关的话。作为提问的一部分,我也会发表一些意见。我想这有点像是在问一个问题:“我说的为什么不对?”)

似乎用于
bool
运算符的符号中有6个应该分配给语法类型类,并且为这些类型类实例化了
bool
。特别是:

~, &, |, \<not>, \<and>, \<or>. 
我能摆脱这些警告吗?看来既然有一个类型正确的术语,就不会有问题了

实际上,我还需要其他符号,例如
,用于
列表

term "[1,2,3] ! 1"
这是我想要符号的应用程序:

更新 根据Brian Huffman的回答,我取消了
&
,并将
&
切换到一个语法类型类。它会解决,或者它不会,实际上,二进制逻辑,如此多样的适用性。我的一般规则是“不要惹默认的伊莎贝尔/霍尔”

您可以使用
no_notation
命令“取消声明”特殊语法,例如

no_notation conj (infixr "\<and>" 35)
无符号连接(infixr“\”35)
该中缀运算符可用于您自己的函数:

notation myconj (infixr "\<and>" 35)
符号myconj(infixr“\”35)
从这里开始,
\
指的是常量
myconj
,而不是HOL库中用于类型
bool
的标准连接运算符。您应该没有关于不明确语法的警告。原始的HOL布尔运算符仍然可以通过名称(
conj
)访问,或者,如果需要,可以使用另一个
符号
命令为其指定不同的语法

要使
no_notation
命令起作用,模式和固定性必须与最初声明的完全相同。有关您感兴趣的运算符的声明,请参见
src/HOL/HOL.thy


我应该警告一个潜在的陷阱:随后的理论合并可能会将原始语法带回到范围内,再次导致语法歧义。例如,假设您的理论
A.thy
导入
Main
并重新声明
\
语法。然后你的理论
B.thy
导入了
A
和另一个库理论,比如说
Complex\u Main
。那么在理论上,
B
\
将是模棱两可的。为了防止这种情况,请确保将所有外部理论导入放在一个理论文件中,在该文件中更改语法;然后让你所有的其他理论都导入这个。

Brian,毕竟有一个可能不错的解决方案。我期待着更糟的情况,比如“接受它。”谢谢你的一般性回答,以及提醒我们不要让其他理论改变现状。我想投上一票,但我现在是一分,所以我不能。
no_notation conj (infixr "\<and>" 35)
notation myconj (infixr "\<and>" 35)