Isabelle 显式实例化关于序列的公理

Isabelle 显式实例化关于序列的公理,isabelle,Isabelle,注意:这是对第二个问题的重新提问,结果证明,与第一个问题(此处已回答)的相关性比我想象的要小 考虑以下基于Isabelle Sequents库的最小开发: theory Test imports Pure Sequents.Sequents begin syntax "_Trueprop" :: "two_seqe" ("((_)/ ⊢ (_))" [6,6] 5) consts Trueprop :: two_seqi parse_translation ‹[ (@{syntax

注意:这是对第二个问题的重新提问,结果证明,与第一个问题(此处已回答)的相关性比我想象的要小

考虑以下基于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

这些证明有效(事实上,即使没有注释的
,它们也有效)。然而,我想知道我可以写些什么来代替
s,使其最大程度地明确。也就是说,如何编写“空序列”或“仅包含
P
的序列”或“仅包含
P,Q
的序列”?为
xch0
编写
”,为
xch1
编写
P
P
,为
xch2
编写
“P,Q”
,都是行不通的,我无法从
序列的源代码中看出这些符号是什么明确的语法缩写。

在内部表示为函数应用程序。这确保了高阶统一可以在具有任意多个连续元素的定理中实例化原理图变量。所以<代码>$A,$B,$C⊢ $D
内部表示为
Trueprop(%s.A(B(cs))(%s.ds)

因此,在第一个引理中,
B
由标识函数
%x实例化。x

对象类型
o
的单个元素使用
序列开始时声明的常量
SeqO'
Seq1'
转换为该应用格式。
$
标记表示解析器不应该插入这样的常量

所以在第二个引理中,
B
SeqO'(p)
实例化。在第三个引理中,
B
必须以
P
Q
的顺序实例化,其表示为
%s。SeqO'(P,SeqO'(Q,s))
。符号

表示相同且更可取

您可以通过via使用Isabelle/ML查看序列的内部表示

ML {* @term{"$A, P, $C ⊢ $D"} *}

我就是这样想出来的。

太棒了,谢谢!看起来我也可以在第一个引理中写