【问题标题】:Algebraic simplifications in IsabelleIsabelle 中的代数简化
【发布时间】:2018-11-11 22:25:34
【问题描述】:

我一直在玩 Isabelle 的基本证明示例。

考虑以下简单证明:

lemma
    fixes n::nat
    shows "n*(n+1) = n^2 + n"
    by simp

在我看来,像 Isabelle 这样强大的证明助手应该能够在没有太多指导的情况下证明这个引理。 然而,我惊讶地发现 Isabelle 在这里应用规则 simp 确实失败了(我还尝试了其他“通用”规则,例如 simp_allauto em>, force, blast 但结果是一样的)。

如果我将最后一行替换为以下内容,则可以解决:

by (simp add: power2_eq_square)

我担心的是,我觉得我不应该告诉系统特定规则 power2_eq_square 来完成这个证明。

玩弄类似的琐碎例子,我发现 simp 能够证明

n*(n+2)=n*n+n*2

但失败了

n*(n+3)=n*n+n*3

最后一个例子得到证明

by (simp add: distrib_left)

为什么我需要在第二个示例中指定 distrib_left 而不是在第一个示例中指定(为什么?),这对我来说完全是个谜。

我给出这些例子并不是为了它们本身,而是主要是为了说明我的主要问题:

有没有办法自动验证常规代数身份,例如 Isabelle 中的上述情况?如果没有,那为什么不呢?有哪些技术障碍?

【问题讨论】:

    标签: isabelle


    【解决方案1】:

    日常证明工作确实经常遇到“常规代数恒等式”;但是经过一些实践经验后,人们通常会产生一些直觉,如何有效地解决这些问题。我多年来开发的一种模式,例如:

    context semidom
    begin
    
    lemma "a * (b ^ 2 + c) + 2 = a * b * b + c * a + 2"
    

    典型的探索性证明以

    开头
      apply auto
    

    那么结合性和交换性也被考虑

      apply (auto simp add: ac_simps)
    

    然后应用更多的代数规范化规则

      apply (auto simp add: algebra_simps)
    

    最后一个缺口很容易被大锤填补

      apply (simp add: power2_eq_square)
    

    之后,证明可以紧缩

      by (simp add: algebra_simps power2_eq_square)
    

    【讨论】:

    • 非常感谢(如果我有声望,我会赞成)。你的策略对我很有效,但感觉还是一种解决方法。
    【解决方案2】:

    引理

    lemma power2_eq_square: "a^2 = a * a"
    

    一般而言,这不是一个好的重写规则,因为它很容易破坏术语的大小。因此,预计 simp 这样的术语基于重写的自动化不会在没有您告知的情况下应用。

    你想要的是某种证明搜索,Isabelle 提供了:写完引理后,你可以调用sledgehammer 工具,它会轻松快速地为你找到证明:

    Sledgehammering... 
    Proof found... 
    "z3": Try this: by (simp add: power2_eq_square) (1 ms) 
    "cvc4": Try this: by (simp add: power2_eq_square) (5 ms)
    

    【讨论】:

    • 感谢您的回答,但它并没有真正帮助我。我知道大锤。这就是我知道如何使用 power2_eq_square。不幸的是,Sledgehammer 在稍微复杂一点的代数化简上就失败了。
    • 很遗憾,Isabelle 不是计算机代数系统。它是一个通用的定理证明器,虽然它为代数问题提供了一些专门的自动化,但它距离像 Mathematica 这样的 CAS 的能力还很远。当然,可以改善这种情况,但并不像人们想象的那么容易。
    • @ManuelEberl:是的,我担心是这样。不过,我不明白为什么。为什么不能本着“代数”的精神有具体的证明方法呢?它应该简单地尝试通过扩展所有内容并收集术语来表明身份两侧的差异简化为 0。
    • 有一种叫做“代数”的证明方法可以做类似的事情。我认为它使用 Gröbner 基地。但它不适用于 semidom 类;我想你需要一个戒指。但是,一旦您将除法添加到组合中,事情就会再次变得更加复杂。例如,如果您有类似 a / (b * c * d * e) = … 的内容,其中子项很复杂,而您只是将所有内容相乘,那么识别分母非零会突然变得更加困难。
    • 当您有像cos x ^ 2 + sin x ^ 2 = 1 这样的额外假设时,事情会变得更加棘手。我不是这方面的专家,我相信这些程序可以改进,但归根结底,一个既了解 Isabelle 又熟悉求解此类方程的理论的人必须投入工作并且显然目前没有这样的人或有兴趣这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多