(22년도 12월에 제 페이스북에 작성했던 글입니다)
halting problem(정지 문제)은 컴퓨터과학에서 튜링머신과 함께 자주 등장하는 단골 소재로, "어떤 프로그램을 실행했을 때 그 프로그램이 유한한 시간 내에 종료될지 아니면 영원히 계속 돌지 판별할 수 있는 프로그램을 만들 수 있는가" 라는 문제인데, 이러한 프로그램을 만드는 것은 수학적으로 불가능하다는 것이 증명되어있다.
갑자기 호기심이 발동해서 ChatGPT한테 코드가 영원히 도는지 판별할 수 있는 코드를 짜보라고 하면 어떻게 될까 실험해봤다.
1. 코드를 짜보라고 하니, 프로그램을 실제로 돌려보고, 500ms 타이머를 건 다음, 500ms 안에 종료되면 false(not running forever)를 리턴하고, 500ms를 넘으면 그냥 true(running forever)를 리턴하는 코드를 짰다.
2. 그래서 내가 500ms보다 오래 돌아가는데 결국에 멈추는 코드가 있으면, 너의 함수는 true를 리턴할 텐데, 그럼 안되지 않느냐라고 하니, 틀렸다는 것을 인정하고 코드를 수정했다. 그랬더니 500ms 안에 종료되지 않았으면 다시 500ms 타이머를 시작하는 식으로 영원히 타이머를 돌리게끔 수정했다.
3. 그래서 내가 그러면 영원히 도는 코드가 있을 때, 너의 코드도 영원히 타이머가 돌아가서, 결국 유한한 시간 내에 판별할 수가 없다고 지적하니, 인정하고 다시 코드를 수정했다. 그랬더니 이제는 maxIterations라는 변수를 둬서 타이머를 연장하는 횟수를 제한하는 식으로 수정했다. (타이머 연장 횟수가 10번 넘으면 그냥 무한히 도는 것으로 판정)
4. 그래서 내가 만약 오래 돌아가다가 멈추는 코드가 있어서 maxIterations를 넘어가면 너의 코드는 true로 리턴할 텐데, 그럼 안되지 않느냐라고 다시 지적하니, 다시 실수를 인정하고 코드를 수정했다.
5. 애초에 풀 수 없는 문제였기 때문에 당연히 틀린 답변이었고, 그래서 지적하고 수정하고를 몇 번 반복해봤다. 그러더니 어느 순간 멈추고 맛이 갔다.
더 똑똑했으면 그건 풀 수 없는 문제야! 라고 답변하거나 아니면 최소한 중간에 모르겠다고 했어야 할텐데, 계속 비슷한 이유로 틀린 답변을 내놓는걸 보면, 사고 수준은 그리 높지는 않은 것 같다. 하지만, 어쨌든 계속 내가 지적한걸 보완하려는 시도를 했다는건 어느 정도의 사고력은 있다는 것이다. 그동안의 다른 챗봇들이 사고 능력이 거의 없었던 것을 생각하면 정말 놀라운 발전이다.