| [ PhilosophyThought ] in KIDS 글 쓴 이(By): yschoe (마술사) 날 짜 (Date): 1998년 6월 20일 토요일 오후 06시 32분 01초 제 목(Title): Re: 질문] Turing Computable Function에 Halting problem은 파라독스와 같은 형태를 띕니다. 먼저 M_h라는 머신이 있어서 입력으로는 코딩이 된 임의의 다른 머신 M을 받고 출력으로는 만일 M이 halt하면 1을, 아니면 0을 출력한다고 합시다. (이게 바로 halting problem이죠. 임의의 turing 머신이 주어졌을때 그것이 halt하나 안하나 결정하는 문제) 이 M_h를 이용해서 새로운 머신 M_o를 만들어봅시다. M_o은 역시 코딩된 다른 머신을 입력으로 받아서 M_h를 사용해서 M_h의 결과가 0 이면 halt를 하고 1 이면 무한루프를 돌게 (즉 halt안하게) 합니다. 즉 M_o == code(M)===> M_h --> if 0 --> halt 1 --> 무한루프 (head를 무한히 계속 이동시킴) 그럼, 이 M_o역시 하나의 합법적인 머신이므로 halt할지 안할지를 M_h에 넣어서 돌려보면 0 또는 1의 값이 반환이 되겠죠. 그러나.. M_o에 code(M_o)를 줄때 아래의 두 경우가 있을 수 있습니다. 1. M_o가 halt안 할 경우 M_h가 code(M_o)를 입력으로 받아 1을 출력 했어야 함. 즉 M_o가 halt함을 의미함, 고로 모순. 2. M_o가 halt할 경우 M_h가 code(M_o)를 입력 받아 0을 출력 했어야 함. 즉 M_o가 halt안 함을 의미함. 고로 모순. 두 경우 모두 모순이므로.. halt할지 안할지 모르는 머신 M_o의 존재를 확인하게 된겁니다. 즉, M_h에 code(M_o)를 주면 M_h가 딱 부러지게 yes/no를 대답할 수 없는 반례가 있음이 입증 된것이죠. (혹시 틀린거 있으면 지적해주세요.. ) |