Czy istnieją języki programowania (lub logika), które mogą implementować (lub wyrażać) funkcję tylko i tylko wtedy, gdy jest obliczalną funkcją bijectywną? f
10
Czy istnieją języki programowania (lub logika), które mogą implementować (lub wyrażać) funkcję tylko i tylko wtedy, gdy jest obliczalną funkcją bijectywną? f
Odpowiedzi:
Nie ma takiego języka.
Spójrz jednak na Boomerang . Jest to język do pisania bijectów między łańcuchami. Nie wiem, jak szeroka jest w niej klasa map, ale jestem pewien, że dowiesz się, jeśli trochę poszukasz.
Uzasadnione jest wymaganie od języka programowania, aby zestaw prawidłowych programów był rozpoznawalny przez interpretera lub kompilator, tj. Aby był zestawem obliczalnym obliczalnie. Załóżmy, że mamy język programowania, którego zestaw poprawnych programów można było wyliczyć i który dokładnie zaimplementował wszystkie obliczalne bijections . Oznaczałoby to, że możemy obliczalnie wyliczyć wszystkie obliczalne bijectacje (po prostu wyliczyć wszystkie prawidłowe programy w tym języku programowania), ale nie jest to możliwe w kolejnym twierdzeniu.N→N
Twierdzenie: że to obliczalna sekwencja obliczalnych bijectów. Następnie jest obliczalny bijection, który nie znajduje się w sekwencji.f0,f1,f2,…
Dowód. Konstruujemy bijection w następujący sposób. W celu określenia wartości i , patrzymy na : g ( 2 k ) g ( 2 k + 1 ) f k ( 2 kg:N→N g(2k) g(2k+1) fk(2k)
Oczywiście, dla każdego , różni się od ponieważ . Co więcej, jest obliczalny i jest to bijection, ponieważ jest on własną odwrotnością. CO BYŁO DO OKAZANIA. g f k g ( 2 k ) ≠ f k ( 2 k ) gk∈N g fk g(2k)≠fk(2k) g
źródło