Isabelle 在区域设置中使用语法/翻译

Isabelle 在区域设置中使用语法/翻译,isabelle,Isabelle,是否有任何已知的黑客可以使用语法/翻译机制在给定的区域设置中为定义使用自定义语法?我在“明显”解决方案中的所有尝试都会产生类型错误,我相信这是由于语法/翻译尚未被“区域设置感知”造成的。在Isabelle 2016中,使用语法和翻译的原始AST转换不能在区域设置内使用。对于声明不依赖于区域设置参数的常量和类型,有一种变通方法。您只需在语言环境之外为背景理论中的适当常量发出语法声明。以下是概念证明: locale test = fixes a :: nat begin definition foo

是否有任何已知的黑客可以使用语法/翻译机制在给定的区域设置中为定义使用自定义语法?我在“明显”解决方案中的所有尝试都会产生类型错误,我相信这是由于语法/翻译尚未被“区域设置感知”造成的。

在Isabelle 2016中,使用
语法和
翻译的原始AST转换不能在区域设置内使用。对于声明不依赖于区域设置参数的常量和类型,有一种变通方法。您只需在语言环境之外为背景理论中的适当常量发出语法声明。以下是概念证明:

locale test = fixes a :: nat begin
definition foo :: "nat ⇒ nat" where "foo x = x"
end

syntax "_foo" :: "nat ⇒ bool" ("FOO")
translations "FOO" ↽ "CONST test.foo"

context test begin
term foo

此解决方法不适用于依赖于区域设置参数的常量,因为背景理论中的常量将这些参数作为附加参数,区域设置将安装缩写,在启动自定义语法转换之前将其折叠。

OK,谢谢。不幸的是,在我的例子中,我希望为其提供语法转换的定义的类型确实依赖于语言环境参数。我将不得不放弃它的任何语法。类型不能依赖于区域设置参数。因此,如果只是使用相同类型的变量,上述解决方法仍然有效。对不起,是的,你是对的。我想说的是,所讨论的定义的类型取决于语言环境的类型变量,而定义本身也依赖于语言环境的参数。也许,
adhoc_重载
(它仍然有一些怪癖,特别是与语言环境相结合)可以提供一个解决方案(在将来)。(参见Isabelle参考手册,isar-ref.pdf,第11.3节“常量的临时过载”。)