Isabelle 伊莎贝尔:大锤找到了证据,但失败了

Isabelle 伊莎贝尔:大锤找到了证据,但失败了,isabelle,theorem-proving,Isabelle,Theorem Proving,我经常遇到这样的问题,sledgehammer找到了一个证明,但当我插入它时,它不会终止。我猜《大锤》是《伊莎贝尔》中最重要的部分之一,但如果证明失败,它就会变得很烦人 在, 有一小章是关于“为什么梅蒂斯不能重建证据?” 它列出: 尝试isar\u证明选项以获得逐步isar证明,其中 每个步骤都由metis调整。因为台阶比较小,, metis更有可能重播它们 尝试使用smt证明方法,而不是metis。它通常更强, 但是你需要有Z3来重放证据,相信我 SMT解算器,或使用证书 尝试blast或au

我经常遇到这样的问题,
sledgehammer
找到了一个证明,但当我插入它时,它不会终止。我猜《大锤》是《伊莎贝尔》中最重要的部分之一,但如果证明失败,它就会变得很烦人

在, 有一小章是关于“为什么梅蒂斯不能重建证据?”

它列出:

  • 尝试
    isar\u证明
    选项以获得逐步isar证明,其中 每个步骤都由
    metis
    调整。因为台阶比较小,,
    metis
    更有可能重播它们
  • 尝试使用
    smt
    证明方法,而不是
    metis
    。它通常更强, 但是你需要有Z3来重放证据,相信我 SMT解算器,或使用证书
  • 尝试
    blast
    auto
    证明方法,传递必要的事实 通过
    展开
    使用
    简介:
    elim:
    dest:
    ,或
    simp:
    ,如下所示: 合适
  • 问题是,第一个选项使证明更加冗长,而且还涉及手动干预。 第二种选择很少奏效

    那么第三种选择呢。有什么简单易懂的启发式方法可以应用吗

    展开
    和使用之间有什么区别?对于如何从失败的
    metis
    证明中使用
    intro:
    elim:
    dest:
    ,是否有任何最佳实践

    部分示例

    proof- 
      have "(det (?lm)) = (det (transpose ?lm))" by (smt det_transpose) 
      then have "(det (?lm)) = [...][not shown]"
        unfolding det_transpose transpose_mat_factor_col by auto
      then show ?thesis [...][not shown]
    qed
    

    我想去掉证明的第一行,因为这行似乎很琐碎。如果我删除第一行,
    sledgehammer
    仍会找到证明,但找到的证明失败(不会终止)。

    我可以回答您的子问题“展开
    和使用
    有什么区别?”。粗略地说,它是这样工作的

    假设引理
    foo
    的形式是
    x=a+b+c
    。如果你写信

    unfolding foo
    
    using foo
    
    在您的证明中,所有出现的
    x
    将替换为
    a+b+c
    。另一方面,如果你写

    unfolding foo
    
    using foo
    

    然后,
    x=a+b+c
    将被添加到您的假设列表中。

    您提出了许多问题,但我将把您的标题和第二段作为您主要投诉的实质,在这里我给出了一个冗长的答案,可以用

    • 大锤是三管齐下的武器库的一部分
    • 你变得更有经验,不断的实验,不断的尝试和错误是启发
    • 不使用Sledgehammer返回的许多证明是使用Sledgehammer的一个重要部分,并且
    • minimize
      preplay\u timeout
      选项可以通过自动播放校样节省一些时间和挫折感,这会为您提供计时信息,有时还会显示找到的校样将失败
    从你的第二段开始,你说:

    我经常遇到这样的问题,大锤找到了证据。但是我试过了,但是证据并没有终止。我想大锤是伊莎贝尔最重要的部分之一

    <大锤是很重要的,但我认为它是一个三口径的阿森纳的一部分,其中三个部分是:

  • 使用自然推理的详细证明步骤
  • 自动证明方法,如
    auto
    simp
    rule
    ,等等。其中很大一部分将是创建自己的
    simp
    重写规则,并学习将定理与
    rule
    以及其他无数自动证明方法结合使用
  • 大锤式调用自动定理证明器(ATP)。根据经验,使用步骤1和步骤2设置Sledgehammer。经验很重要。您可以使用
    auto
    来简化事情,使Sledgehammer成功,但您可能不使用
    auto
    ,因为它会将公式扩展到Sledgehammer不可能成功的地方
  • …但如果证明失败,那就很烦人了

    所以在这里,你的期望和我对大锤的期望是不同的。这些天,如果我感到恼火,我会恼火,因为我必须工作30秒以上来证明一个定理。如果说我对一个特别的大锤证明失败感到非常失望,那是因为我已经尝试证明一个定理好几个小时或几天了,但都没有成功

    使用大锤不是为了找到证据,而是为了找到好的证据 自动化有时可以减轻挫折感。点击一个大锤样,却发现它失败了,这将是令人沮丧的。以下是我目前使用Sledgehammer的方式,除非我开始迫切需要证据:

    sledgehammer_params[minimize=smart,preplay_timeout=10,timeout=60,verbose=true,
                        max_relevant=smart,provers="
      remote_vampire  metis  remote_satallax  z3_tptp  remote_e
      remote_e_tofof  spass  remote_e_sine    e        z3       yices
    "]
    
    选项
    minimize=smart
    preplay\u timeout=10
    与大锤找到校样后播放校样相关。不使用Sledgehammer发现的许多证明是使用Sledgehammer的一个重要部分,而证明回放是剔除证明的一个重要部分

    就我自己而言,我不会处理太多没有终止的大锤证明,但这可能是因为我从一开始就有选择性

    我对Sledgehammer证明的第一个标准是它的速度相当快,所以当Sledgehammer报告它发现了一个超过3秒长的证明时,我甚至不尝试使用它,除非我非常想知道一个定理是否可以被证明

    对我来说,大锤的使用通常是这样的:

    • 陈述一个定理,看看我是否能幸运地使用大锤
    • If Sledgehammer给出了一个30毫秒以下的证明,然后我认为这是一个很好的证明,但是我仍然在实验中使用<代码>尝试< /COD>和ISAR.R.PDF第208页第4节第4页的自动证明方法。很多时候,我可以得到5毫秒或更短的证明
    • A
      metis
      总时间超过100ms的证明,我愿意工作