一.逻辑和证明,集合,函数
1.逻辑难题
http://www.2144.cn/html/88/6426/
二.算法,整数和矩阵
三.数学推理,归纳与递归
停机问题
现在描述计算机科学里的一个最著名定理的证明,证明存在不能用任何过程来解决的问题,即证明存在不可解的问题。研究的这个问题是停机问题,问是否存在这样做的过程:以计算机程序和程序的输入作为输入,确定当程序依据是这个输入运行是否最终停止。可以以此帮助测试程序是否进入死循环,当编写和调试程序时肯定会有帮助。图灵证明了不存在这样的过程。
在给出停机问题是不可解的证明之前先要注意,运行程序并观察程序做什么,仅仅如此并不能确定当程序在给定输入上运行时是否终止。如果程序停止,就得到了答案,但如果经过任何固定长度的时间之后程序仍然在运行,就不知道就是永不停机,还是没有等到足够长的停机时间。毕竟运算10亿年之后才停止的程序是不难设计出来的。
证(归谬证明,严格证明需要用图灵机的概念解说):假定停机问题有解,即存在所谓的H(P,I)的过程。过程H(P,I)有两个输入,一个是程序P,另一个是程序P的输入I。如果H确定当给定的I作为输入时P停止,则H(P,I)产生字符串“停机”作为输出,否则,H(P,I)产生字符串“死循环”作为输出。从而导出矛盾。
过程在编码时表示成字符串,把这个字符串解释成比特序列。这意味着程序本身可用作数据。因此可认为程序是另一个程序的输入,甚至是自身的输入。因此,H可用程序P作为两个输入,即程序和这个程序的输入。H应当能够确定当P给定自身的拷贝作为输入时是否停机。
要证明不存在解决停机问题的过程H,就构造简单过程K(P),K(P)利用H(P,P)的输出来这样工作:如果H(P,P)的输出是“死循环”,这意味着当P给定自身拷贝作为输入时死循环,则K(P)停机,如果H(P,P)的输出是“停机”,这意味着当P给定自身拷贝作为输入时停机,则K(P)死循环。
现在假定把K作为K的输入。注意,如果H(K,K)的输出是“死循环”,则根据K的定义可知K(K)停机,否则,如果H(K,K)的输出是“停机”,则根据K的定义可知K(K)死循环,与H所说的相悖。在两种情形之下都存在矛盾。
因此H不能总是给出正确答案,所以不存在解决停机问题的过程。
数学归纳法
1.良序性 每个非空的非负整数集都有最小元
例:在一种主客场循环赛中,每个选手与其他选手恰好比赛一次并且每次比赛分出胜负。所谓选手p1,p2,p3....,pm形成回路,就是p1战胜p2,p2战胜p3,... ,pm战胜p1.用良序原理证明:如果在主客场循环赛中的选手存在长度为m的回路(m>=3),则必定存在这些选手中的三个选手的回路。
证:假设不存在三个选手的回路,因为主客场中至少存在一个回路,所以存在长度为n的回路的所有正整数n的集合是非空的。根据良序集,这个正整数集合有最小元k,根据假设k必定大于3,因此,存在选手回路p1,p2,...pk并且不存在更短的回路。
现在假设不存在这些选手中三个选手的回路,所以这里k>3.考虑这个回路的前三个元素是p1,p2,p3.在p1与p3之间的比赛有两种可能的结果。如果p3战胜p1,那么p1,p2,p3就是长度为3的回路,与不存在三个选手的回路的假设相矛盾。因此,必定是p1战胜p3,这意味着可以从回路p1,p2,p3..,pk中忽略p2来获得长度为k-1的回路p1,p2,p3...,pk,与最短回路长度为k的假设相矛盾。因此结论是必然存在长度为3的回路。
2.无穷下降法
无穷下降法通常用来证明命题函数P(n),对于所有正整数k来说,P(k)都为假。如果对于至少一个整数k来说,P(k)为真,那么良序性就蕴含着存在最小的正整数s,使得P(s)为真。这个方法继续寻找满足s’