Und es wurde Licht.
Es braucht etwa 100 Zeilen Python-Code, um die Geschichte aller möglichen berechenbaren Universen zu berechnen. 100 Zeilen, um alles zu berechnen, was je berechnet werden kann. Die Physik unseres Universums ist möglicherweise berechenbar.
-
I, L, R, S = 0, 1, 2, 3
-
ENCODING = [
-
# ("111110", ","),
-
("11110" , "S"),
-
("1110" , "L"),
-
("110" , "R"),
-
("10" , "1"),
-
# ("0" , "0"),
-
]
-
-
def to_binary(n):
-
return n == 0 and "0" or to_binary(n>>1).lstrip("0") + str(n&1)
-
-
def to_decimal(x):
-
return sum([(int(n) and 2**pos or 0) for (pos, n) in enumerate(x[::-1])])
-
-
-
class HashableIntegerList(list):
-
-
def __init__(self, sequence):
-
list.__init__(self, [int(b) for b in sequence])
-
-
def __str__(self):
-
return "".join([str(n) for n in self])
-
-
def __hash__(self):
-
return self.__str__().__hash__()
-
-
-
class TuringMachine:
-
-
def __init__(self, rules, tape):
-
self.tape = HashableIntegerList(tape)
-
self.state = HashableIntegerList("0")
-
self.rules = rules
-
self.stopped = False
-
self.invalid = False
-
self.pos = 0
-
-
def move(self, direction):
-
if direction == S:
-
self.stopped = True
-
elif direction == L:
-
if self.pos == 0:
-
self.tape.insert(0, 0)
-
else:
-
self.pos -= 1
-
elif direction == R:
-
if self.pos == len(self.tape)-1:
-
self.tape.append(0)
-
self.pos += 1
-
-
def step(self):
-
try:
-
self.state, self.tape[self.pos], dir = self.rules[(self.state, self.tape[self.pos])]
-
except KeyError:
-
self.invalid = True
-
else:
-
self.move(dir)
-
-
def run(self):
-
while not self.stopped and not self.invalid:
-
self.step()
-
-
-
class UniversalTuringMachine(TuringMachine):
-
-
def __init__(self, tape):
-
if tape.count("111110") != 1: self.invalid = True; return
-
binary_machine_no, data_tape = tape.split("111110")
-
rules = self.get_rules(binary_machine_no)
-
TuringMachine.__init__(self, rules, data_tape)
-
-
def get_rules(self, binary_machine_no):
-
binary_rules = "110%s110" % binary_machine_no
-
for (k, v) in ENCODING:
-
binary_rules = binary_rules.replace(k, v)
-
rules = {}
-
cur_rule_num = 0
-
tape_state = 0
-
cur_rule_parts = []
-
for bin in binary_rules:
-
if bin in "LRS":
-
rule = "".join(cur_rule_parts)
-
if rule == "": rule = "00"
-
if rule == "1": rule = "01"
-
int_state = HashableIntegerList(to_binary(cur_rule_num))
-
rules[(int_state, tape_state)] = (HashableIntegerList(rule[:-1]), int(rule[-1:]), eval(bin))
-
cur_rule_parts = []
-
if tape_state == 0: tape_state = 1
-
elif tape_state == 1: tape_state = 0; cur_rule_num += 1
-
else:
-
cur_rule_parts.append(bin)
-
return rules
-
-
-
def universal_dovetailer():
-
machines = []
-
num_steps = 0
-
while True:
-
for machine in machines:
-
if machine.invalid or machine.stopped:
-
machines.remove(machine)
-
else:
-
machine.step()
-
new_machine = UniversalTuringMachine(to_binary(num_steps) + "1")
-
machines.append(new_machine)
-
num_steps += 1
-
-
-
if __name__ == "__main__":
-
universal_dovetailer()
Was, wenn sich erweist, dass die am besten mit der Realität übereinstimmenden physikalischen Theorien die sind, die berechenbar sind? Wir können simulieren, wie Billardkugeln zusammenstoßen und welche sich wohin bewegt. Ein simulierter Zusammenstoß ist kein echter Zusammenstoß. Für uns. Für ein simuliertes Wesen? Führt die Simulation eines bewussten physikalischen Systems zu Bewusstsein?
Die Individualität einer Person ist vom Muster des Zusammenspiels der Materie abhängig, nicht von der Materie selbst. Die Atome jeder Zelle werden nach der Geburt eines Menschen viele Male ausgetauscht. Quantenphysikalisch gesehen sind zwei Teilchen einer Art sowieso nicht nur nicht unterscheidbar, sondern identisch. Wenn alle Protonen eines Körpers durch "andere" Protonen ersetzt werden, so hat das den Zustand nicht verändert. Teilchen haben keine Identität.
Wenn die Physik unseres Universums berechenbar ist oder es keinen subjektiven Unterschied zwischen Bewusstsein und der Simulation von Bewusstsein gibt, so resultiert die Ausführung eines solchen Programms (ein "Universal Dovetailer") in allen bewussten Erfahrungen, die je ein Wesen haben kann. Unabhängig davon, wie man "Wesen" oder "bewusste Erfahrung" definiert.
Aber: Ist die Erfahrung von Bewusstsein auch unabhängig davon, ob bei der Ausführung des Programms, die — wie die Ausführung jedes Programms — in diskreten Schritten abläuft, ein Rechenschritt pro Nanosekunde oder ein Rechenschritt pro Jahr ausgeführt wird? Auch dann, wenn während des Jahres der Computer, auf dem das Programm ausgeführt wird, ausgetauscht und nach Tokio verfrachtet wird? Auch dann, wenn das Ergebnis des Rechenschritts ein Jahr später nicht direkt berechnet wird, sondern bei der Berechnung aller Permutationen der Sequenz von 0en und 1en auftaucht, die die Länge des erwarteten Rechenergebnisses hat?
Stathis Papaiaonnou schreibt an die Singularity-Mailingliste:
If you look at it the right way, anything could be a computation. This has been given by John Searle as a reductio ad absurdum against computationalism, and explored by several other authors (eg. Hilary Putnam, David Chalmers, Greg Egan). The usual counterargument is that in order to map a computation onto an arbitrary physical process, the mapping function must contain the computation already, but this is only significant for an external observer. The inhabitants of a virtual environment will not suddenly cease being conscious if all the manuals showing how an external observer might interpret what is going on in the computation are lost; it matters only that there is some such possible interpretation. Moreover, it is possible to map many computations to the one physical process. In the limiting case, a single state, perhaps the null state, can be mapped onto all computations.
Welche Art von Kontinuität ist für bewusste Erfahrungen nötig?

one comment
The Prize Is Won; The Simplest Universal Turing Machine Is Proved
http://blog.wolfram.com/2007/10/the_prize_is_won_the_simplest.html