Syntax 如何在Isabelle中为带有附加参数的活页夹定义语法?
我想在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_ ? _.
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
中集合理解结构的定义可能会很有用