📜  证明阿姆斯特朗公理的正确性(1)

📅  最后修改于: 2023-12-03 15:12:09.120000             🧑  作者: Mango

证明阿姆斯特朗公理的正确性

简介

阿姆斯特朗公理是计算机科学中的一种基础原理,它被广泛应用于程序分析、程序验证等领域。本文将介绍阿姆斯特朗公理的定义以及如何证明它的正确性。

定义

阿姆斯特朗公理是说证明任何性质都可以通过归纳法来实现。它可以形式化为以下公理:

  1. 基本归纳法:如果$n_0$是自然数,且$P(n_0)$成立,而且对于任意自然数$n\geq n_0$,如果$P(n)$成立,则$P(n+1)$也成立。
  2. 强归纳法:如果$P(n)$是一个谓词,且满足以下条件:
  • $P(n_0)$成立,其中$n_0$是自然数。
  • 对于任意自然数$n\geq n_0$,如果$P(m)$对于$m$满足$n_0\leq m< n$的所有自然数$m$都成立,那么$P(n)$也成立。 则$P(n)$对于任何$n\geq n_0$都成立。
证明

我们将分别证明基本归纳法和强归纳法。

基本归纳法

我们使用约束归纳法来证明基本归纳法。具体来说,我们考虑一个约束系统$C={(n+1,n)|n\in\mathbb{N}}$,其中$(n+1,n)$表示约束$n+1>n$。显然,$C$是有限的。我们可以将$C$看作是由$n_0$开始的一个有向图,它包含了所有的节点和从一个节点到另一个节点的所有边。

我们现在定义$p_n$表示$n$满足$P(n)$的最小自然数。如果这样的$n$不存在,则$p_n$未定义。我们还定义$q_n$表示$n$满足非$P(n)$的最小自然数。如果这样的$n$不存在,则$q_n$未定义。我们注意到,$p_n$的定义式是从$q_n$推导而来,因此我们需要证明的是$q_n$。

我们证明$q_n=n$,也就是说,$n$是满足非$P(n)$的最小自然数。证明$q_n\geq n$是容易的,因为如果$n$不满足$P(n)$,那么$n$本身就是满足非$P(n)$的最小自然数。

我们现在证明$q_n\leq n$。假设不是这样,也就是说,$q_n>n$,因此$p_{q_n}$已经被定义了。我们考虑从$p_{q_n}$指向$q_n$的边。既然$p_{q_n}$被定义了,那么$p_{q_n}-1$也被定义了(因为$p_{q_n}$是某个$n'$满足$P(n')$的最小自然数,因此$p_{q_n}-1$将是第一个不满足$P(n)$的自然数)。而由假设可知,$q_n>n\geq p_{q_n}-1$,因此,我们可以得到$P(p_{q_n}-1)\implies P(q_n)$,因此$P(q_n)$不成立,这和$q_n$是$n$满足非$P(n)$的最小自然数矛盾。

综上所述,我们知道$q_n=n$,因此基本归纳法成立。

强归纳法

我们将强归纳法转化为基本归纳法来证明它的正确性。具体来说,假设我们需要证明$p_n$成立。我们定义一个新的谓词$Q(k)$,其中$k$是一个自然数,表示如下:

$$ Q(k):\text{$p_n$对于所有$n\leq k$都成立} $$

我们现在用基本归纳法来证明$Q(n)$对于任何$n$都成立。

首先,$p_{n_0}$是成立的,因为$n_0$是最小的使得$P(n_0)$成立的自然数。

假设$Q(k)$成立,即$p_n$对于所有$n\leq k$都成立。我们现在需要证明$p_{k+1}$成立。我们考虑约束归纳法的约束系统$C={(k+1,n)|(n\leq k)\vee (n=k+1\wedge p_{k+1}\wedge P(k+1))}$。显然,$C$是有限的。

我们现在证明了在$C$约束下$p_i$对于所有$i\leq k+1$都成立。我们需要证明$p_{k+1}$成立。

由$Q(k)$的定义,我们知道$p_i$对于所有$i\leq k$都成立。由基本归纳法的定义知道,$p_{k+1}$在$C$约束下也成立,因此$p_{k+1}$最终也会成立。

综上所述,我们证明了$Q(k+1)$,因此强归纳法成立。

结论

我们证明了阿姆斯特朗公理的正确性。这个公理基于自然数的归纳性质,可以用于证明许多重要的数学定理和计算机科学中的算法和数据结构。