在Coq中展开证明术语

时间:2016-11-08 01:09:54

标签: coq

我想知道是否有办法在当前上下文之外的某个级别(或者直到原语)获得证明术语(通过Print序列化)。例如,执行以下

From mathcomp Require Import odd_order.PFsection14.
Print Feit_Thompson.

结果

Feit_Thompson = 
fun (gT : fingroup.FinGroup.type)
  (G : fingroup.group_of (gT:=gT)
         (ssreflect.Phant
            (fingroup.FinGroup.arg_sort
               (fingroup.FinGroup.base gT)))) =>
BGsection7.minSimpleOdd_ind no_minSimple_odd_group (gT:=gT)
  (G:=G)
     : forall (gT : fingroup.FinGroup.type)
         (G : fingroup.group_of (gT:=gT)
                (ssreflect.Phant
                   (fingroup.FinGroup.arg_sort
                      (fingroup.FinGroup.base gT)))),
       is_true
         (ssrnat.odd
            (fintype.CardDef.card
               (T:=fingroup.FinGroup.arg_finType
                     (fingroup.FinGroup.base gT))
               (ssrbool.mem
                  (finset.SetDef.pred_of_set
                     (fingroup.gval G))))) ->
       is_true (nilpotent.solvable (fingroup.gval G))

但我想将证明术语中使用的标识符(定理和定义)(例如no_minSimple_odd_group)展开到其证明条款中。我怀疑定理和引理的不透明性可能会成为这个目的的障碍。

我能想到的天真解决方案是通过Print递归查询每个标识符。或者通过程序提取不那么天真(并且由于代表证明术语的语言的变化而不太理想)解决方案。

1 个答案:

答案 0 :(得分:2)

我不确定是否有直接的方法可以做到这一点,但实现起来并不难,在这个级别上,不透明度只是一个标志,可以被绕过。

但是,我想知道你想要达到什么目标?

请注意,以这种方式获得的大多数证明条款都是无法管理的,特别是展开将很快导致比指数大小爆炸更糟糕。