Isabelle 显式实例化关于序列的公理
注意:这是对第二个问题的重新提问,结果证明,与第一个问题(此处已回答)的相关性比我想象的要小 考虑以下基于Isabelle Sequents库的最小开发: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
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"} *}
我就是这样想出来的。太棒了,谢谢!看起来我也可以在第一个引理中写
。