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 *}