对角化原理和停机问题

对角化原理

有人说,使用数学归纳法反证法可以演绎整个数学。不管说法对不对,但至少反映了这两种方法的常用和强大;即使有的时候 me 们没有意识到使用了这两种方法,比如证明: 10 个苹果分给 9 个小盆友,肯定有一个小盆友分了至少 2 个苹果

对角化原理的细节不多说,那说神马 ? O__O"… 说对角化原理的三个问题: 罗素悖论、[0,1) 集合不可数和停机问题。

  1. 罗素悖论 : S = { s | s ∉ s},试问 S ∈ S 还是 S ∉ S ?
  2. [0,1) 区间的实数不可数 : 也就是不能一个一个滴全部枚举出来,N 是可以的;N × N 也是可以的;但是 R 是不可以的;
  3. 不存在一个计算机程序可以正确地判定其他所有的程序是否停机,或是说是否会死循环。

罗素悖论

罗素悖论可以说是一个趣事,因为描述很简单,但是结论却让人很崩溃,O__O"… S = { s | s ∉ s},试问 S ∈ S 还是 S ∉ S ?

  1. 如果 S ∈ S , 那么 S 应该满足集合的条件 s∉s 也就是 S ∉ S ;
  2. 如果 S ∉ S , 那么 S 满足条件 s∉s ,所以 S ∈ S ;

这是一个两难的问题,出于集合的概念+逻辑,如果说逻辑没有问题,那只能说集合的概念有问题, S 这个集合实际上不是一个集合,O__O"…(到底是不是集合 ? )

R 不可数

假设 [0,1) 区间的小数可以一个一个滴数出来;现在反证,如果一一地数下去,总会有那么一个小数数不到,O__O"…;这都可以 ?

  1. 假设 [0,1) 区间的小数, me 们这样一一地去数: a1 a2 a3 ... ak ...
  2. 对于 ak 来说,比如 a4 = 0.123456....,me 们看小数点后第 4 位,发现是 4,那么 me 们取一个数字 0;a1 = 0.01234,小数点后第 1 位是 0,那么 me 们取 1;也就是对于 ak 看小数点后第 k 位,如果是 0 取数字 1;如果非 0 取数字 0
  3. 对于 a1 a2 a3 ... ak ... 取了很多 0 和 1,现在将其拼成一个小数 α = 0.1' 2' 3' 4' 5' ... k' ..., k' 即 ak 对应取出的 0 或是 1;
  4. α != ak, 为嘛 ? 因为 α 的第 k 个数字总是和 ak 的第 k 个数字不同,一个为 0 另外一个非 0;一个为 1 另外一个为 0;
  5. 也就是说,[0,1) 之间的实数,不管 me 们怎么去枚举,总是会有一些小数数不到,即不可数。

停机问题

第一个是脑筋急转弯问题,第二个是数学问题,这第三个算是计算机问题。停机问题是说 : 不存在一个程序可以正确滴判定其他所有的程序对于所有的输入是否停机(或是说是否死循环)。当然 me 们可以写一个程序判定其他一些程序,但是这里说的是要判定其他所有的程序对于所有的输入;而这样的判定程序,被反证出来“是不可能存在的”。

  1. 假设存在一个程序 halt 可以准确滴判断其他所有程序的停机问题,函数原型: halt(P, I) : 如果 P 对于 I 是停机的,halt 返回 "halt";否则返回 "loop";
  2. 现在在 halt 的基础上构造一个 halt-x 程序,该程序的意思是: 使用 halt 去判定程序 P 对于 P 输入的停机问题,如果停机了("halt"),halt-x 死循环掉;如果是死循环("loop"),halt-x 停机:
    halt-x(P)
    {
        if halt(P, P) == "loop" 
            return "halt"
        else    // halt(P, P) == "halt"
            while(1);
    }
    
  3. 现在问题是 : 程序 halt-x 对于 halt-x 的输入(任何一个程序都可以编码,然后作为其他程序的输入)到底是停机还是死循环呢?
    • 假设 halt-x 对于 halt-x 的输入停机,也就是 halt-x(halt-x) 是会结束的;me 们进入函数体内,halt(halt-x, halt-x) 应该等于 "halt" ,那么 halt-x(halt-x) 进入了 else 部分,是死循环;O__O"…;
    • 假设 halt-x 对于 halt-x 的输入不停机,也就是 halt-x(halt-x) 是不会结束的;me 们进入函数体内,halt(halt-x, halt-x) 应该等于 "loop" ,那么 halt-x(halt-x) 进入了 if 部分,函数返回了,结束了;O__O"…;
    • 也就是说 halt-x 对于 halt-x 的输入,me 们已经么法给出停机还是死循环的正确回答了;这不科学,O__O"…;好吧,那只能承认否定 halt 程序是存在的,否则从逻辑上就么法解释 halt-x 程序了。

结束语

有些东西赶脚有点绕,绕就绕吧,暂时就这样了,O__O"…

你可能感兴趣的:(对角化原理和停机问题)