明确地实例化关于Sequents的公理

时间:2018-06-12 20:37:54

标签: isabelle

注意:这是对第二个问题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的来源中找出这些符号的缩写词的显式语法。

1 个答案:

答案 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必须使用PQ的序列进行实例化,表达式由%s. SeqO'(P, SeqO'(Q, s))表示。符号<<P>><<P, Q>>表示相同并且更可取。

您可以使用Isabelle / ML通过

查看序列的内部表示
ML {* @term{"$A, P, $C ⊢ $D"} *}

这就是我如何弄清楚发生了什么。