2012-06-04 16 views
12

Spędziłem tydzień lub dwa programując proste rozwiązanie logiczne. Po zbudowaniu tego zastanawiałem się, czy język, który rozwiązuje, to Turing-complete, czy nie. Tak więc zakodowałem mały zestaw równań, które akceptują dowolną prawidłową ekspresję w rachunku kombinatorycznym SKI i tworzą zestaw wyników, który zawiera normalną formę tego wyrażenia. Ponieważ SKI to Turing-complete, udowodnienie, że mój język może wykonać SKI, zademonstruje jego kompletność Turinga.Czy mój program Turing-complete?

Istnieje jednak usterka. Solver nie redukuje wyrażenia w normalnej kolejności. W rzeczywistości to, co można zrobić, to wypróbować każde możliwe zamówienie redukcji. Co oznacza, że ​​zestaw rozwiązań jest zwykle ogromny. Jeśli istnieje normalna forma, będzie tam gdzieś, ale trudno powiedzieć gdzie.

To prowadzi mnie do dwóch pytań:

  • Czy mój język Turing-zupełny? Czy muszę znaleźć lepszy dowód?

  • Czy liczba rozwiązań jest funkcją obliczalną danych wejściowych?

(Początkowo założono, że wielkość zestawu Roztwór wykładniczy lub silnia w wielkości wejściowej. Ale przy bliższym, to nie jest prawda. Można pisać ogromne wyrażeń, które są już w postaci normalnej, i małe wyrażenia, które nie kończą się, mam wrażenie, że określenie rozmiaru zestawu rozwiązań może być równoznaczne z rozwiązaniem problemu zatrzymania, ale nie jestem całkowicie pewien ...)

+1

Co się stanie, jeśli jedno zlecenie redukcji nie zakończy się, a drugie nie? Czy otrzymujesz zakończenie? – augustss

+2

Aha, a twoja implementacja SKI jest wystarczającym dowodem na to, że Turing jest kompletny. – augustss

+0

@augustss Ostrożnie zaaranżowałem, że kod próbuje normalnej redukcji rzędu _first_. Więc jeśli istnieje normalna forma, znajdzie się ona w skończonej pozycji w zestawie rozwiązań. Jeśli jednak istnieje niekończąca się kolejność redukcji, soler ma gwarancję, że ją znajdzie i wygeneruje nieskończony zestaw rozwiązań.Tworzy nieskończony zestaw, który zawiera prawidłową odpowiedź, wystarczającą do osiągnięcia Turinga? Chodzi mi o to, że wyliczenie wszystkich możliwych wyrażeń SKI mogłoby to zrobić ... – MathematicalOrchid

Odpowiedz

5

A) Jak twierdzi August, Twój system jest wyraźnie kompletny.

B) Masz rację, że określenie rozmiaru rozwiązania jest takie samo, jak problem z zatrzymaniem. Jeśli sekwencja się nie zakończy, otrzymasz nieskończony zestaw rozwiązań. Aby ustalić, czy zbiór jest nieskończony, należy określić, czy sekwencja redukcji kończy się. Ale to jest precyzyjnie problem z zatrzymaniem!

C) Jak pamiętam, system, który, biorąc pod uwagę zestaw instrukcji dla maszyny tnącej, mówi tylko o liczbie kroków, jakie podejmują w celu zakończenia (co jest, jak sądzę, liczności zestawu rozwiązań) lub nie zakończyć, jeśli instrukcje same się nie kończą, to sama w sobie.. To powinno pomóc w intuicji.

+1

Dobra odpowiedź, ale jedno mnie nadal niepokoi: możliwe jest, że wyrażenie ma normalną formę, a mimo to zlecenie redukcji nadal istnieje, co nie kończy się. W takim przypadku zestaw rozwiązań jest nadal nieskończony, nawet jeśli kończy się normalna redukcja zamówienia. Więc liczność zestawu rozwiązań nie jest _precisely_ taka sama jak to, czy redukcja kończy się, czy nie ... Nie jestem pewien, czy to unieważnia twoją argumentację. – MathematicalOrchid

2

W odpowiedzi na moje własne pytanie ... Zauważyłem, że poprzez ulepszenie kodu źródłowego, mogę zrobić tak, że jeśli wejściowe wyrażenie SKI ma normalną formę, ta normalna forma zawsze będzie rozwiązaniem nr 1. Jeśli więc po prostu zignorujesz jakiekolwiek dalsze rozwiązania, program redukuje wszelkie wyrażenia SKI do normalnej formy.

Uważam, że stanowi to "lepszy dowód". ;-)

Powiązane problemy