To interesujące pytanie. Oczywiście nie można oczekiwać, aby mieć program, który decyduje za każdym czy ∀ k T ( e , k ) posiada lub nie, jak będzie to decydować o powstrzymanie problem. Jak już wspomniano, istnieje kilka sposobów interpretacji dowodów obliczeniowych: rozszerzenia Curry-Howarda, wykonalność, dialektyka i tak dalej. Ale wszystkie interpretowałyby obliczeniowo twierdzenie, o którym wspomniałeś mniej więcej w następujący sposób.e∀kT(e,k)
Dla uproszczenia rozważ równoważne klasyczne twierdzenie
(1) ∃i∀j(¬T(e,j)→¬T(e,i))
Jest to (konstruktywnie) równoważne do wspomnianego, ponieważ biorąc pod uwagę , możemy zdecydować, czy ∀ k T ( e , k ) utrzymuje się, czy nie, po prostu sprawdzając wartość ¬ T ( e , i ) . Jeśli ¬ T ( e , i ) utrzymuje, to ∃ i ¬ T ( e , i ), a zatem ¬ ∀ i T ( e , i ) . Jeśli z drugiej stronyi∀kT(e,k)¬T(e,i)¬T(e,i)∃i¬T(e,i)¬∀iT(e,i) nie obejmuje wtedy (1) mamy ∀ j ( ¬ T ( e , j ) → ⊥ ), co oznacza ∀ j T ( e , j ) .¬T(e,i)∀j(¬T(e,j)→⊥)∀jT(e,j)
Teraz znowu nie możemy obliczyć w (1) dla każdego podanego e, ponieważ ponownie rozwiązalibyśmy problem zatrzymania. Wszystkie powyższe interpretacje zrobiłyby, patrząc na równoważne twierdzenieie
(2) ∀f∃i′(¬T(e,f(i′))→¬T(e,i′))
Funkcja nazywa się funkcją Herbranda. Próbuje obliczyć kontrprzykład j dla każdego potencjalnego świadka i . Oczywiste jest, że (1) i (2) są równoważne. Od lewej do prawej jest to konstruktywne, wystarczy wziąć i ′ = i w (2), gdzie i jest założonym świadkiem (1). Od prawej do lewej trzeba klasycznie rozumować. Załóżmy, że (1) nie było prawdą. Następnie,fjii′=ii
(3) ∀ i ∃ j ¬ ( ¬ T( e , j ) → ¬ T( e , i ) )
Niech będzie funkcją świadczącą o tym, tjfa′
(4) ∀ i ¬ ( ¬ T(e,f′(i))→¬T(e,i))
Teraz weźmy w (2) i mamy ( ¬ T ( e , f ′ ( i ′ ) ) → ¬ T ( e , i ′ ) ) , dla niektórych i ′ . Ale przyjmując i = i ′ w (4) otrzymujemy negację tego, sprzeczność. Stąd (2) implikuje (1).f=f′(¬T(e,f′(i′))→¬T(e,i′))i′i=i′
Mamy więc, że (1) i (2) są klasycznie równoważne. Ale interesujące jest to, że (2) ma teraz bardzo prostego konstruktywnego świadka. Po prostu weź jeśli T ( e , f ( 0 ) ) się nie utrzymuje, ponieważ wtedy wniosek (2) jest prawdziwy; albo weźmy i ′ = 0, jeśli T ( e , f ( 0 ) ) utrzymuje się, ponieważ wtedy ¬ T ( e , f ( 0 )i′=f(0)T(e,f(0))ja′= 0T.( e , f( 0 ) ) nie obowiązuje, a przesłanka (2) jest fałszywa, co czyni ją ponownie prawdą.¬ T( e , f( 0 ) )
Stąd sposobem na obliczeniową interpretację klasycznego twierdzenia, takiego jak (1), jest przyjrzenie się (klasycznie) równoważnemu sformułowaniu, które można konstruktywnie udowodnić, w naszym przypadku (2).
Różne wspomniane powyżej interpretacje różnią się jedynie sposobem wyskakiwania funkcji . W przypadku wykonalności i interpretacji dialektycznej jest to wyraźnie podane przez interpretację, w połączeniu z pewną formą tłumaczenia negatywnego (jak Goedel-Gentzen). W przypadku rozszerzeń Curry-Howard z operatorami call-cc i kontynuującymi funkcja f wynika z faktu, że program może „wiedzieć”, w jaki sposób zostanie użyta określona wartość (w naszym przypadku i ), więc f jest kontynuacją programu wokół punktu, gdzie I jest obliczany.fafajafaja
Inną ważną kwestią jest to, że chcesz, aby przejście z (1) do (2) było „modułowe”, tj. Jeśli (1) zostanie użyte do udowodnienia (1 '), to jego interpretacja (2) powinna być użyta w podobny sposób aby udowodnić interpretację (1 '), powiedz (2'). Robią to wszystkie wspomniane powyżej interpretacje, w tym negatywne tłumaczenie Goedel-Gentzen.