Wyzwanie
Napisz program P, nie przyjmując żadnych danych wejściowych, tak aby zdanie „wykonanie P ostatecznie się kończy” było niezależne od arytmetyki Peano .
Zasady formalne
(W przypadku logika matematycznego, który uważa, że powyższy opis jest zbyt nieformalny).
Zasadniczo można konwertować część uniwersalnej maszyny Turinga U (np. Ulubiony język programowania) na wzór arytmetyczny Peano HALT na zmienną p , gdzie HALT ( p ) koduje zdanie „ U kończy się na programie ( kodowane przez Gödela ) p ”. Wyzwanie polega na znalezieniu p takiego, że ani HALT ( p ), ani ¬HALT ( p ) nie mogą być udowodnione w arytmetyce Peano.
Możesz założyć, że twój program działa na idealnej maszynie z nieograniczoną pamięcią i liczbami całkowitymi / wskaźnikami wystarczająco dużymi, aby uzyskać do niej dostęp.
Przykład
Aby zobaczyć, że takie programy istnieją, jednym z przykładów jest program, który wyczerpująco szuka dowodu arytmetycznego Peano na 0 = 1. Arytmetyka Peano dowodzi, że ten program zatrzymuje się wtedy i tylko wtedy, gdy arytmetyka Peano jest niespójna. Ponieważ arytmetyka Peano jest spójna, ale nie może udowodnić własnej spójności , nie może zdecydować, czy ten program się zatrzyma.
Istnieje jednak wiele innych propozycji niezależnych od arytmetyki Peano, na których można oprzeć swój program.
Motywacja
Wyzwanie to zostało zainspirowane nową pracą Yedidii i Aaronsona (2016) przedstawiającą 7918-stanową maszynę Turinga, której nieterminacja jest niezależna od ZFC , znacznie silniejszego systemu niż arytmetyka Peano. Możesz być zainteresowany jego cytatem [22]. Do tego wyzwania możesz oczywiście użyć wybranego języka programowania zamiast rzeczywistych maszyn Turinga.
x = 1.0; while (x) { x = x / 2.0; }
zostanie zatrzymany bardzo szybko.Odpowiedzi:
Haskell, 838 bajtów
„Jeśli chcesz coś zrobić…”
Wyjaśnienie
Ten program bezpośrednio szuka arytmetyki Peano o wartości 0 = 1. Ponieważ PA jest spójny, ten program nigdy się nie kończy; ale ponieważ PA nie może udowodnić swojej spójności, nieterminacja tego programu jest niezależna od PA.
T
jest rodzajem wyrażeń i zdań:A P
reprezentuje twierdzenie ∀ x [ P ( x )].(V 1 :$ P) :$ Q
stanowi propozycję P → Q .V 2 :$ P
oznacza propozycja ¬ P .(V 3 :$ x) :$ y
reprezentuje twierdzenie x = y .(V 4 :$ x) :$ y
reprezentuje naturalne x + y .(V 5 :$ x) :$ y
reprezentuje naturalne x ⋅ y .V 6 :$ x
reprezentuje naturalne S ( x ) = x + 1.V 7
reprezentuje naturalne 0.W środowisku o ı zmiennych wolnych, że koduje wyrażeń propozycji i dowody w postaci 2 x 2 macierzy całkowitych [1, 0; a , b ], jak następuje:
Pozostałe aksjomaty są kodowane numerycznie i uwzględniane w środowisku początkowym Γ :
Dowód z matrycą [1, 0; , b ] można sprawdzić podane jedynie lewy dolny narożnik A (lub dowolną inną wartość przystający do a modulo b ); pozostałe wartości mają na celu umożliwienie zestawienia dowodów.
Na przykład tutaj jest dowód, że dodawanie jest przemienne.
Możesz to zweryfikować za pomocą programu w następujący sposób:
Jeśli dowód byłby nieważny, zamiast tego dostaniesz pustą listę.
źródło