Je m'excuse à l'avance d'avoir donné trop de détails, mais je suis sur le point de contredire les gens.
À propos deK(x)≤K′(x)+c
Le fait que provient généralement d'un interprète du langage de description # 2 dans le langage de description # 1 et non d'une traduction de programmes de # 2 en programmes de # 1.K1(x)≤K2(x)+c
Par exemple et vous obtenez cette inégalité aussi simplement que ceci: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)");
}
Ensuite, votre constante sera quelque chose comme 528 + 490240688 où 528 est le nombre de bits pour ce code et 490240688 bits est la taille de l'interpréteur Python officiel écrit en C.Bien sûr, vous n'avez besoin que d'interpréter ce qui est possible dans votre langage de description pour Python afin que vous puissiez faire mieux que 69 Mo :-)cpy2c528+490240688528490240688
Ce qui est important, c'est que vous pouvez écrire votre programme Python de façon linéaire dans votre code C. Par exemple, une langue où vous devez mettre "BANANA" entre chaque caractère n'est pas un très bon programme de description et la propriété est alors fausse. (Mais si le langage de description vous autorise à écrire des données dans un fichier séparé ou dans un bloc, ce problème disparaît)
Pourquoi votre est défectueuxK1(x)=q
Le problème avec votre définition de est que vous pouvez avoir besoin de plus de bits pour décrire une machine de Turing avec états car vous devez coder des transitions.K1qqq
Donc aucun et K 2 ne sont probablement pas équivalents, mais c'est principalement la faute de K 1 . Je pense que nous pouvons prouver que pour tout un > 0 il y a une c une telle que K 1 ( x ) ≤ a | x | + c a . Bien sûr, tout a < 1 suffit pour réfuter le fait que K 1 n'est pas une fonction valide, car cela signifierait que nous pouvons coder plus toutes les 2 n chaînes de longueur possiblesK1K2K1a>0caK1(x)≤a|x|+caa<1K12n dans un n + c a des bits.nan+ca
Mais la taille est une limite incroyablement serrée lors de la construction de machines Turing. L'idée est que dans un bloc de états, il existe b 2 b façons de trouver des transitions pour chaque état et c'est mieux que les 2 b façons habituelles de remplir b bits. Ensuite, vous pouvez stocker dans chaque journal de bloc 2 b bits d'informations. (pas 2 log 2 b car vous devez entrer et sortir du bloc d'une manière ou d'une autre)bb2b2bblog2b2log2b
Alors oui ... Avec des blocs de taille vous pourriez probablement prouver K 1 ( x ) ≤ a | x | + c a . Mais j'ai déjà trop écrit sur les raisons pour lesquelles le nombre d'états n'est pas une fonction de complexité de Kolmogorov valide. Si vous voulez que j'élabore, je le ferai.21/aK1(x)≤a|x|+ca
Maintenant sur K2
Le langage descriptif naïf correspond approximativement à (c'est-à-dire log 2 q pour chaque état suivant et détails sur l'écriture et la terminaison).K2(x)=q⋅2⋅(log2q+2)log2q
Comme vous semblez l'être, je suis convaincu qu'une meilleure façon / tricherie serait d'autoriser à encoder des "données" dans la machine Turing, peut-être en ajoutant une balise binaire dans le langage de description qui indique si un état est un état de données ( qui écrit juste un peu et passe à l'état suivant) ou s'il fait autre chose. De cette façon, vous pouvez stocker un bit de votre dans un bit de votre langage descriptif.x
Cependant, si vous gardez le même vous pouvez utiliser la même technique que j'ai utilisée dans la partie précédente pour enregistrer quelques bits, mais il me semble que je suis bloqué à K 2 ( x ) ≤ a | x | journal | x | + c (pour tout a > 0 ) .. peut-être moins que log | x | , même, mais obtenir O ( | x | ) semble difficile. (Et je m'attends à ce que ce soit | x | , pas même O ( |K2K2(x)≤a|x|log|x|+ca>0log|x|O(|x|)|x| .)O(|x|)