什么算法的正式证明 return
Formal proof for what algorithm return
我需要正式证明下面的算法 return 1 for n = 1 and 0 in other cases。
function K( n: word): word;
begin
if (n < 2) then K := n
else K := K(n − 1) * K(n − 2);
end;
有人能帮忙吗?谢谢
对于 n=1
,通过调用算法,答案是 K=n=1
,所以我们已经完成了这种情况。
对于 n=0
,根据定义,K(0) = 0
。
对于n>1
的情况,我们可以归纳求解:
基础:对于n=2
,我们得到:K(2) = K(1)*K(0) = 1*0 = 0
对于 n=3
,我们得到: K(3) = K(2)*K(1) = 0*1 = 0
注意 K(2)=0
因为我们只显示了一行。
声明:对于任何1<k<n
,我们得到K(k) = 0
对于任何 n>3 的证明:K(n) = K(n-1)*K(n-2) =(1) 0*0 = 0
(1):归纳假设,因为K(n-1),K(n-2)都适用,因为n-1,n-2>1
P.S。请注意,声明对于非负数是正确的,例如,如果您允许 n=-5
,您将得到 K(-5)=-5
- 这是声明的反例。
说 n = 0
。由于 0 < 2
我们得到 0
作为结果。
说 n = 1
。由于 1 < 2
我们得到 1
作为结果。
说 n = 2. K(2) = K(1)*K(0)
。由于 K(0) = 0
我们得到 0
作为结果。
对于 n > 2
现在我们假设关于算法的陈述是正确的,即 K(n) = 0
。
现在证明对于 n + 1
:
也是如此
K(n + 1) = K(n)*K(n - 1)
。由于 K(n) = 0
很明显 K(n)*K(n - 1) = 0
.
这可以通过归纳法证明,但正如之前的发帖人所展示的那样,在证明中直接引用 K
时很难在形式上正确。
这是我的建议:让 P(n) 成为我们要显示的 属性:
P(n) 持有当且仅当 K(n) 对 n = 1 产生 1,对 n ≠ 1 产生 0.
现在我们可以清楚的表达我们想要展示的内容了:Ɐn.P(n)
基本情况: n ≤ 2
案例分析的简单检查:
P(0) 没问题,因为 K(0) = 0
P(1) 没问题,因为 K(1) = 1
归纳假设:
P(n) 对所有 2 ≤ n < c.
归纳步:证明P(c)成立
- 根据 K 的定义,我们有 K(c) = K(c-1) × K(c-2)
- 由归纳假设,我们知道P(c-1)和P(c-2)等一下。
- 因为最多 K(c-1) 和 K(c-2)可以为1(另一个必须为0)乘积为0.
- 这意味着 P(c) 成立
Qed.
我需要正式证明下面的算法 return 1 for n = 1 and 0 in other cases。
function K( n: word): word;
begin
if (n < 2) then K := n
else K := K(n − 1) * K(n − 2);
end;
有人能帮忙吗?谢谢
对于 n=1
,通过调用算法,答案是 K=n=1
,所以我们已经完成了这种情况。
对于 n=0
,根据定义,K(0) = 0
。
对于n>1
的情况,我们可以归纳求解:
基础:对于n=2
,我们得到:K(2) = K(1)*K(0) = 1*0 = 0
对于 n=3
,我们得到: K(3) = K(2)*K(1) = 0*1 = 0
注意 K(2)=0
因为我们只显示了一行。
声明:对于任何1<k<n
,我们得到K(k) = 0
对于任何 n>3 的证明:K(n) = K(n-1)*K(n-2) =(1) 0*0 = 0
(1):归纳假设,因为K(n-1),K(n-2)都适用,因为n-1,n-2>1
P.S。请注意,声明对于非负数是正确的,例如,如果您允许 n=-5
,您将得到 K(-5)=-5
- 这是声明的反例。
说 n = 0
。由于 0 < 2
我们得到 0
作为结果。
说 n = 1
。由于 1 < 2
我们得到 1
作为结果。
说 n = 2. K(2) = K(1)*K(0)
。由于 K(0) = 0
我们得到 0
作为结果。
对于 n > 2
现在我们假设关于算法的陈述是正确的,即 K(n) = 0
。
现在证明对于 n + 1
:
K(n + 1) = K(n)*K(n - 1)
。由于 K(n) = 0
很明显 K(n)*K(n - 1) = 0
.
这可以通过归纳法证明,但正如之前的发帖人所展示的那样,在证明中直接引用 K
时很难在形式上正确。
这是我的建议:让 P(n) 成为我们要显示的 属性:
P(n) 持有当且仅当 K(n) 对 n = 1 产生 1,对 n ≠ 1 产生 0.
现在我们可以清楚的表达我们想要展示的内容了:Ɐn.P(n)
基本情况: n ≤ 2
案例分析的简单检查:
P(0) 没问题,因为 K(0) = 0
P(1) 没问题,因为 K(1) = 1归纳假设:
P(n) 对所有 2 ≤ n < c.
归纳步:证明P(c)成立
- 根据 K 的定义,我们有 K(c) = K(c-1) × K(c-2)
- 由归纳假设,我们知道P(c-1)和P(c-2)等一下。
- 因为最多 K(c-1) 和 K(c-2)可以为1(另一个必须为0)乘积为0.
- 这意味着 P(c) 成立
Qed.