Z góry przepraszam za to, że podam zbyt wiele szczegółów, ale mam zamiar zaprzeczyć ludziom.
OK(x)≤K′(x)+c
Fakt, że zwykle pochodzi z tłumacza języka opisu nr 2 na język opisu nr 1, a nie z tłumaczenia z programów nr 2 na programy nr 1.K1(x)≤K2(x)+c
Na przykład i otrzymujesz tę nierówność tak prosto jak to: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)");
}
Wtedy twoja stała będzie wynosić coś w rodzaju gdzie to liczba bitów dla tego kodu, a bitów to rozmiar, jaki oficjalny interpreter napisał w języku C. Oczywiście musisz tylko zinterpretować, co jest możliwe w języku opisu dla Pythona, dzięki czemu możesz zrobić lepiej niż 69 MB :-)cpy2c528+490240688528490240688
Ważne jest, abyś mógł pisać program Python liniowo w kodzie C. Na przykład język, w którym należy wstawić „BANANA” między każdą ze znaków, nie jest bardzo dobrym programem opisu, a właściwość jest wówczas fałszywa. (Ale jeśli język opisu upoważnia do zapisywania danych w osobnym pliku lub bloku, problem ten znika)
Dlaczego twój jest wadliwyK1(x)=q
Problem z twoją definicją polega na tym, że możesz potrzebować więcej niż bitów, aby opisać maszynę Turinga ze stanami , ponieważ musisz zakodować przejścia.K1qq
Więc żadne i prawdopodobnie nie są równoważne, ale to głównie wina . Myślę, że możemy udowodnić, że dla wszystkich istnieje takie, że . Oczywiście każdy wystarcza, aby obalić fakt, że nie jest prawidłową funkcją, ponieważ oznaczałoby to, że możemy zakodować więcej wszystkich możliwych ciągów długości do bitów .K1K2K1a>0caK1(x)≤a|x|+caa<1K12nnan+ca
Ale rozmiar jest niezwykle ciasno związany przy budowie maszyn Turinga. Chodzi o to, że w bloku stwierdza istnieją sposobów na znalezienie przejścia dla każdego stanu i tak lepiej niż zwykłe sposobów można wypełnić bitów. Następnie możesz przechowywać w każdym bloku bity informacji. (nie ponieważ musisz wejść i wyjść z bloku w taki czy inny sposób)bb2b2bblog2b2log2b
Więc tak ... Przy blokach wielkości prawdopodobnie możesz udowodnić . Ale już napisałem zbyt wiele o tym, dlaczego liczba stanów nie jest prawidłową funkcją złożoności Kołmogorowa. Jeśli chcesz, żebym to rozwinął, zrobię to.21/aK1(x)≤a|x|+ca
Teraz oK2
Naiwny język opisowy odpowiada mniej więcej (tzn. dla każdego następnego stanu i szczegółów dotyczących zapisu i zakończenia).K2(x)=q⋅2⋅(log2q+2)log2q
Jak się wydaje, jestem przekonany, że lepszym / oszukańczym sposobem byłoby upoważnienie do kodowania „danych” na maszynie Turinga, być może poprzez dodanie binarnego znacznika w języku opisu, który mówi, czy stan jest stanem danych ( to po prostu pisze i przechodzi do następnego stanu) lub jeśli robi coś innego. W ten sposób możesz przechowywać jeden bit w jednym bicie twojego języka opisowego.x
Jeśli jednak ten sam możesz użyć tej samej techniki, której użyłem w poprzedniej części, aby zapisać kilka bitów, ale wydaje mi się, że utknąłem na (dla dowolne ) .. może mniej niż, nawet, ale uzyskanie wydaje się trudne. (I spodziewam się, że powinien to być , nawet .)K2K2(x)≤a|x|log|x|+ca>0log|x|O(|x|)|x|O(|x|)