我想知道是否有一种方法可以在当前上下文之外的某个级别(或仅到原语)获得证明项(是否通过 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 递归查询每个标识符。或者通过程序提取的不那么幼稚(并且由于表示证明项的语言发生变化而不太理想)的解决方案。

最佳答案

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

但是,我想知道您想实现什么目标?

请注意,以这种方式获得的大多数证明项都将是难以管理的,特别是展开将很快导致比指数规模膨胀更糟糕的情况。

关于coq - 在 Coq 中展开证明项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40477368/

10-15 14:21