Syntax Isabelle语法翻译:强制eta扩展?
伊莎贝尔的列表理论为Syntax Isabelle语法翻译:强制eta扩展?,syntax,isabelle,Syntax,Isabelle,伊莎贝尔的列表理论为过滤器建立了语法翻译: syntax -- {* Special syntax for filter *} "_filter" :: "[pttrn, 'a list, bool] => 'a list" ("(1[_<-_./ _])") translations "[x<-xs . P]"== "CONST filter (%x. P) xs" 但是如果表达式很简单,例如,ilter(λx.px)l,eta收缩似乎发生了,我得到了显
过滤器
建立了语法翻译:
syntax
-- {* Special syntax for filter *}
"_filter" :: "[pttrn, 'a list, bool] => 'a list" ("(1[_<-_./ _])")
translations
"[x<-xs . P]"== "CONST filter (%x. P) xs"
但是如果表达式很简单,例如,ilter(λx.px)l
,eta收缩似乎发生了,我得到了显示
"filter P l" :: "int list"
我是否可以强制使用漂亮的语法(即
[x)←l.P x]
)也在这里?您可以通过安装适当的
打印翻译来避免eta收缩。HOL源中的绑定和元组有几个示例,例如,HOL.thy
中的the
。它们很容易适应过滤器
,例如:
print_translation {*
[(@{const_syntax filter}, fn _ => fn [Abs abs, xs] =>
let val (x, t) = Syntax_Trans.atomic_abs_tr' abs
in Syntax.const @{syntax_const "_filter"} $ x $ t $ xs end)]
*} -- {* To avoid eta-contraction of body *}
谢谢,好像有用。现在我只需要理解它并应用于我正在创建的语法:-)。您认为这值得输入HOL/List。您的?这似乎会使输出更加一致和可预测。我不确定这是否应该放在HOL
中,可能放在~/src/HOL/Library/optionalsugage
中。我个人更喜欢阅读过滤器pxs
而不是[x]←l、 P x]
。不幸的是,许多Isabelle工具都扩展了此类功能(例如,归纳
和simp
与过滤器
的一致性规则)。因此,将其添加到理论列表中应该首先公开讨论。
print_translation {*
[(@{const_syntax filter}, fn _ => fn [Abs abs, xs] =>
let val (x, t) = Syntax_Trans.atomic_abs_tr' abs
in Syntax.const @{syntax_const "_filter"} $ x $ t $ xs end)]
*} -- {* To avoid eta-contraction of body *}