注意:这是对第二个问题here的再次询问,结果与第一个问题(在那里回答)的关系不如我想象的那样。< / p>
考虑以下基于Isabelle Sequents库的最小开发:
theory Test
imports Pure Sequents.Sequents
begin
syntax "_Trueprop" :: "two_seqe" ("((_)/ ⊢ (_))" [6,6] 5)
consts Trueprop :: two_seqi
parse_translation ‹[ (@{syntax_const "_Trueprop"}, K (two_seq_tr @{const_syntax Trueprop})) ]›
print_translation ‹[ (@{const_syntax Trueprop}, K (two_seq_tr' @{syntax_const "_Trueprop"})) ]›
axiomatization where
xch : "⋀A B C D. $A, $B, $C ⊢ $D ⟹ $C, $B, $A ⊢ $D"
lemma xch0 : "$A, $C ⊢ $D ⟹ $C, $A ⊢ $D"
apply (rule xch[of A _ C D] ; assumption) done
lemma xch1 : "$A, P, $C ⊢ $D ⟹ $C, P, $A ⊢ $D"
apply (rule xch[of A _ C D] ; assumption) done
lemma xch2 : "$A, P, Q, $C ⊢ $D ⟹ $C, P, Q, $A ⊢ $D"
apply (rule xch[of A _ C D] ; assumption) done
这些证明有效(事实上,即使没有of
注释,它们也能正常工作)。但是,我想知道我能用什么来代替_
来最大限度地显示。也就是说,如何编写“空序列”或“仅包含P
的序列”或“仅包含P, Q
的序列”?为""
编写xch0
,为P
编写"P"
或xch1
,为"P, Q"
编写xch2
无效,我无法从Sequents
的来源中找出这些符号的缩写词的显式语法。
答案 0 :(得分:0)
⊢
左侧的序列在内部表示为函数应用程序。这确保了高阶统一可以在具有任意多个连续元素的定理中实例化示意性变量。因此,$A, $B, $C ⊢ $D
通常表示为Trueprop (%s. A (B (C s))) (%s. D s)
。
因此,在您的第一个引理中,B
由身份函数%x. x
实例化。
使用在o
理论开头声明的常量SeqO'
和Seq1'
,将对象类型Sequents
的各个元素转换为此应用格式。
$
标记表示解析器不应插入此类常量。
因此,在您的第二个引理中,B
将使用SeqO'(P)
进行实例化。在第三个引理中,B
必须使用P
和Q
的序列进行实例化,表达式由%s. SeqO'(P, SeqO'(Q, s))
表示。符号<<P>>
和<<P, Q>>
表示相同并且更可取。
您可以使用Isabelle / ML通过
查看序列的内部表示ML {* @term{"$A, P, $C ⊢ $D"} *}
这就是我如何弄清楚发生了什么。