Ich entschuldige mich im Voraus dafür, dass ich zu viele Details weggebe, aber ich bin dabei, Leuten zu widersprechen.
ÜberK(x)≤K′(x)+c
Die Tatsache, dass kommt normalerweise von einem Interpreter der Beschreibungssprache # 2 in die Beschreibungssprache # 1 und nicht von einer Übersetzung von Programmen von # 2 in Programme von # 1.K1(x)≤K2(x)+c
Zum Beispiel und Sie erhalten diese Ungleichung so einfach wie :KC(x)≤KPython(x)+cpy2c
void py_run(char * s) {
// code of your Python interpreter
}
int main(void) {
py_run("Put here your Python program of size Kpython(x)");
}
Dann ist Ihr stetiger etwas sein wie , wo die Anzahl der Bits für diesen Code ist und Bits ist die Größe der offiziellen Python - Interpreter in C geschrieben Natürlich brauchen Sie nur zu interpretieren , was möglich ist , in deiner Beschreibungssprache für Python also kannst du es besser machen als 69 MB :-)cpy2c528+490240688528490240688
Wichtig ist, dass Sie Ihr Python-Programm linear in Ihren C-Code schreiben können . Beispielsweise ist eine Sprache, in der Sie "BANANA" zwischen jedes Zeichen setzen müssen, kein sehr gutes Beschreibungsprogramm, und die Eigenschaft ist dann falsch. (Wenn Sie jedoch aufgrund der Beschreibungssprache berechtigt sind, Daten in eine separate Datei oder in einen Block zu schreiben, verschwindet dieses Problem.)
Warum ist dein fehlerhaft?K1(x)=q
Das Problem bei Ihrer Definition von ist, dass Sie möglicherweise mehr als Bits benötigen , um eine Turing-Maschine mit Zuständen zu beschreiben , da Sie Übergänge codieren müssen.K1qq
Also sind und wahrscheinlich nicht gleichwertig, aber das ist hauptsächlich die Schuld von . Ich denke, wir können beweisen, dass es für alle ein so dass . Natürlich ist jedes genug, um die Tatsache zu widerlegen, dass keine gültige Funktion ist, da dies bedeuten würde, dass wir mehr alle möglichen Zeichenfolgen der Länge in Bit codieren können.K1K2K1a>0caK1(x)≤a|x|+caa<1K12nnan+ca
Aber die Größe ist beim Bau von Turing-Maschinen unglaublich eng. Die Idee ist, dass es in einem Block von Zuständen Möglichkeiten gibt, Übergänge für jeden Zustand zu finden, und das ist besser als die üblichen Möglichkeiten, mit denen Sie Bits füllen können. Dann können Sie in jedem Block Informationsbits speichern . (nicht weil man den Block auf die eine oder andere Weise und verlassen muss)bb2b2bblog2b2log2b
Also ja ... Mit Blöcken der Größe könnten Sie wahrscheinlich beweisen, dass . Aber ich habe bereits viel zu viel darüber geschrieben, warum die Anzahl der Zustände keine gültige Kolmogorov-Komplexitätsfunktion ist. Wenn du willst, dass ich es ausarbeite, werde ich es tun.21/aK1(x)≤a|x|+ca
Nun zuK2
Die naive beschreibende Sprache entspricht in etwa (dh für jeden nächsten Zustand und Einzelheiten zum Schreiben und Beenden).K2(x)=q⋅2⋅(log2q+2)log2q
Wie Sie zu sein scheinen, bin ich davon überzeugt, dass eine bessere / betrügerische Möglichkeit darin besteht, die Codierung von "Daten" in Turing-Maschinen zu autorisieren, indem möglicherweise ein binäres Tag in der Beschreibungssprache hinzugefügt wird, das besagt, ob ein Zustand ein Datenzustand ist ( das schreibt nur ein bisschen und geht zum nächsten Zustand) oder wenn es etwas anderes macht. Auf diese Weise können Sie ein Bit Ihres in einem Bit Ihrer beschreibenden Sprache speichern .x
Wenn Sie jedoch das gleiche , könnten Sie die gleiche Technik verwenden, die ich im vorherigen Teil verwendet habe, um ein paar Bits zu speichern, aber ich scheine bei (für any ) .. vielleicht kleiner als, gerade, aber es scheint schwierig , . (Und ich erwarte, dass es , nicht einmal .)K2K2(x)≤a|x|log|x|+ca>0log|x|O(|x|)|x|O(|x|)