Syntax 如何在Isabelle中为带有附加参数的活页夹定义语法?

Syntax 如何在Isabelle中为带有附加参数的活页夹定义语法?,syntax,isabelle,Syntax,Isabelle,我想在Isabelle中定义一个语法结构,其形式为c?十,。p其中c和p是值,x是变量。此构造应转换为输入c(λx.p)。这似乎不能通过活页夹注释来实现,因为此构造有一个额外的参数c,而且不能绑定多个变量。如何定义这样的构造?这可以使用低级的语法和翻译工具。假设c属于通道类型,p和输入c(λx.p)属于过程类型,且所需优先级为100,则可按如下定义构造: syntax "_Input" :: "channel ⇒ pttrn ⇒ process ⇒ process" ("(3_ ? _.

我想在Isabelle中定义一个语法结构,其形式为
c?十,。p
其中
c
p
是值,
x
是变量。此构造应转换为
输入c(λx.p)
。这似乎不能通过
活页夹
注释来实现,因为此构造有一个额外的参数
c
,而且不能绑定多个变量。如何定义这样的构造?

这可以使用低级的
语法
翻译
工具。假设
c
属于
通道类型
p
输入c(λx.p)
属于
过程类型
,且所需优先级为100,则可按如下定义构造:

syntax
  "_Input" :: "channel ⇒ pttrn ⇒ process ⇒ process"
  ("(3_ ? _./ _)" [101, 0, 100] 100)
translations
  "c ? x. P" ⇌ "CONST Input c (λx. P)"
Isabelle/Isar参考手册第8.2.1小节描述了此类语法定义。为了理解上述解决方案,还可以查看第8.2.2和8.2.3小节,这两小节部分解释了如何将更高级的
infix
infixl
infixr
binder
构造转换为低级定义。此外,看看
$ISABELLE_HOME/src/HOL/set.thy
中集合理解结构的定义可能会很有用