youtube의 TMItalk. 튜링 머신의 이해 를 보고 정리한 글 입니다.
- 힐베르트의 꿈, 즉 모든 수학적 명제를 도출하는 만능기계의 생각은 괴델의 불완전성 정리에 의해 불가능함이 증명되었으며, 이어서 튜링이 정지 문제를 제기하여 '모든 수학적 명제를 도출하는 기계'가 가능하지 않음을 더욱 강조하였습니다.
- 이러한 과정을 통해 '모든 수학적 명제를 도출하는 기계'는 발전하여 튜링머신을 완성하였고, 이 튜링머신은 현재의 컴퓨터 발전의 기반이 되었습니다.
- 튜링머신은 테이프, 헤드, 기호 집합, 상태 집합의 네 가지 구조로 이루어져 있으며, 이를 Python으로 간단하게 구현한 예제도 제시되었습니다.
다비트 힐베르트 (20세기 수학자)가 낸 힐베르트 문제 중 하나
제1정리. 페아노 공리계를 포함하는 어떠한 공리계도 무모순인 동시에 완전할 수 없다. 즉 자연수 체계를 포함하는 어떤 체계가 무모순이라면, 그 체계에서는 참이면서도 증명할 수 없는 명제가 적어도 하나 이상 존재한다.
제2정리. 페아노 공리계가 포함된 어떠한 공리계가 무모순일 경우, 그 공리계로부터 그 공리계 자신의 무모순성을 도출할 수 없다.
모든 수학적 명제를 도출하는 기계를 설계한 뒤 풀 수 있는 모든 문제를 푼다.모든 수학적 명제를 도출하는 기계 ⇒ 튜링머신 ⇒ 컴퓨터 의 순서로 발전하게 된 것
Run Python in the browser - glot.io 에서 돌려보시면 편리합니다.
class Tape:
def __init__(self, *, debug: bool=False):
self._tape = [0 for _ in range(2**4)] # 테이프의 길이는 무한하다고 가정
self._idx = 2**4 // 2 # 인덱스
self._status = 0
self._debug = debug
def __str__(self) -> None:
return str(self._tape)
def read(self) -> int:
return self._status, self._tape[self._idx]
def set_tape(self, n: int, move_idx: int, status: int) -> None:
self._tape[self._idx] = n
self._idx += move_idx
self._status = status
if self._debug:
print(str(self._tape))
class Head:
def __init__(self, tape: Tape, lines: list):
self._tape = tape
self._commands = [list(map(int, line.split(","))) for line in lines]
def action(self) -> bool:
status, value = self._tape.read()
if status == -1:
return False
for idx, command in enumerate(self._commands):
if command[0] == status and command[1] == value:
break
command = self._commands[idx]
self._tape.set_tape(command[2], command[3], command[4])
if command[4] == -1:
return False
return True
if __name__ == "__main__":
lines = list()
for _ in range(int(input())):
lines.append(input())
tape = Tape(debug=True)
head = Head(tape, lines)
c = True
while c:
c = head.action()
print(f"result: {tape}")

4
0,0,1,1,1
0,1,1,-1,1
1,0,1,-1,0
1,1,1,1,-1
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
result: [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]