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)