【问题标题】:Prove a match statement证明匹配语句
【发布时间】:2015-02-13 16:42:25
【问题描述】:

为了解决一个练习,我有以下表示整数的定义:

Inductive bin : Type :=
| Zero : bin
| Twice : bin -> bin
| TwiceOne : bin -> bin.

这个想法是:

  1. x2*x 的两倍。
  2. TwiceOne x2*x +1

但是,这种表示有一个问题:数字0有几种表示。

因此,我需要实现一个函数来规范化bin 中写入的数字。

为此,我声明了以下函数:

Fixpoint normalize_bin (b:bin) : bin :=
  match b with
    | Zero => Zero
    | TwiceOne x => TwiceOne (normalize_bin x)
    | Twice x => match normalize_bin x with
                   | Zero => Zero
                   | x => Twice x
                 end
  end.

现在,我想表明,如果一个 b 类型为 bin,我将 b 翻译成 nat 然后我回到 bin 我得到 b',即标准化b。这是以下定理:

Theorem bin_to_nat_to_bin : forall (b:bin),
                              nat_to_bin (bin_to_nat b) = normalize_bin2 b.

为了证明这个定理,我对b 进行了归纳。但我被困在行业里了

ctive case,因为我需要证明:

   nat_to_bin (bin_to_nat Tb + bin_to_nat Tb) =
   match normalize_bin2 Tb with
   | Zero => Zero
   | Twice b => Twice (Twice b)
   | TwiceOne b => Twice (TwiceOne b)
   end

使用战术simpl之后。

但是,我不知道如何处理目标中的这场比赛。我可以从这里做什么?

由于这个练习来自一本书,我不必使用 Coq 的一些高级东西。我只知道一些战术,比如reflexivitysimplrewritedestructassert

可能的第二个规范化只是声明这一点:

Definition normalize_bin (b:bin) : bin :=
  nat_to_bin (bin_to_nat b).

但在这种情况下,这是微不足道的,我认为这不是预期的答案。

【问题讨论】:

    标签: pattern-matching coq


    【解决方案1】:

    由于这是来自 Software Foundations 的一个练习,我不会给出完整的答案,而是给出一个提示。

    这个证明确实很棘手。当您遇到这样一个复杂的证明时,尝试将其分解为较小的引理通常是个好主意。这反过来可能需要重新组织您的定义,以便这些引理的陈述变得更简单。

    在您的情况下,您对normalize_bin 的定义有一个内部match,看起来有点过于复杂,一旦您进入证明的这一点,这一点就会变得很明显。您能否将内部 match 分解为一个单独的定义,以便您可以陈述有关该定义的引理并在稍后的主要证明中使用这些引理?

    【讨论】:

    • 确实是软件基金会的一个练习,我不知道给出一个答案是否正确(由于我对规范化的定义)。但是,感谢您的回答,我会尝试考虑一下。所以,如果下次我想出这样的目标,我应该分解定义并使用引理? “总是”有可能吗?
    • 嗯,这就是为什么机械化定理证明很难!当证明变得越来越复杂时,实际上并没有办法通过暴力破解它们来完成它们,而当有人能够完成它们时,那​​是因为他们能够组织他们的定义以使证明变得可行。随着您获得更多经验,您将学习如何更有效地组织您的开发,以便您的证明更好地工作。
    • 我明白了。我花了一个小时,但最后我得到了它。这并不难,事实上,使用引理非常有用。
    • 我被困在了完全相同的地方。拉出内部匹配的提示,以便您可以证明它的引理正是我所需要的,谢谢!
    猜你喜欢
    • 2022-06-19
    • 2020-05-08
    • 2021-04-26
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多