To jest kolejne pytanie do
Jaka jest różnica między dowodami a programami (lub między propozycjami i typami)?
Jaki program odpowiadałby niekonstruktywnemu (klasycznemu) dowodowi formy ? (Załóżmy, że jest interesującą zależnością rozstrzygalną, np. ta TM nie zatrzymuje się w krokach ).
(ps: Zadaję to pytanie częściowo dlatego, że jestem zainteresowany dowiedzieć się więcej o tym, co Neel rozumie przez „ tłumaczenie Godela-Gentzena jest przemianą kontynuującą” w jego komentarzu ).
Odpowiedzi:
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 twierdzeniei e
(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,f j i i′=i i
(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′= 0 T.( 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.fa fa ja fa ja
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.
źródło
Dość dobrze wiadomo, że arytmetyka klasyczna i intuicyjna są równorzędne.
Jednym ze sposobów wykazania tego jest „negatywne osadzenie” logiki klasycznej w logice intuicyjnej. Załóżmy więc, że są formułami klasycznej arytmetyki pierwszego rzędu. Teraz możemy zdefiniować formułę intuicyjnej logiki w następujący sposób:ϕ
Zauważ, że jest w zasadzie homomorfizmem, który utkwił w dodatkowych nie-nieobecnych wszędzie, z wyjątkiem tego, że w rozbieżnościach i egzystencjalnościach używa dualności de Morgana, aby przekształcić je w koniunkcje i uniwersalia. (Jestem pewien, że nie jest to dokładne tłumaczenie Godela-Gentzena, ponieważ przygotowałem go do tej odpowiedzi - w zasadzie wszystko, co napiszesz za pomocą podwójnej negacji + dualności de Morgana, zadziała. Ta różnorodność okazuje się być ważna dla interpretacyjne obliczenia klasycznej logiki; patrz poniżej.)G(ϕ)
Po pierwsze: oczywiste jest, że to tłumaczenie zachowuje klasyczną prawdę, więc jest prawdziwe, jeśli i tylko jeśli ϕ jest, klasycznie rzecz biorąc.G(ϕ) ϕ
Po drugie: jest to mniej oczywiste, ale nadal tak jest, w przypadku formuł w fragment, sprawdzalność w intuicyjnej i klasycznej logice pokrywają się. Aby to udowodnić, należy najpierw spojrzeć na formuły zaczerpnięte z tej gramatyki:∀,⟹,∧,¬
A następnie możemy udowodnić jako lemat (przez indukcję na ), że G ( A )A można uzyskać intuicyjnie. Możemy więc teraz wykazać równoważność formuł ujemnych, wykonując indukcję nad strukturą dowodu (np. Rachunek sekwencyjny) i wykorzystać poprzedni lemat do symulacji prawa wykluczonego środka.G(A)⟹A
Więc jak powinieneś o tym myśleć intuicyjnie?
Po pierwsze, pogląd teoretyczny. Jeśli spojrzysz na reguły rachunku sekwencyjnego, zobaczysz, że jedyne miejsce, w którym klasyczna i intuicyjna logika poważnie się różni, to reguły rozróżnienia i egzystencji. Wykorzystujemy ten fakt, aby pokazać, że dowody w jednej logice tych formuł można przełożyć na dowody w drugim. To pokazuje, jak myśleć o logice konstruktywnej jako rozszerzeniu logiki klasycznej o dwa nowe łączniki i ∨ . To, co nazywamy „klasycznym istnieniem” i „klasycznym rozłączeniem”, to tylko skróty obejmujące ∀ , koniunkcję i negację, więc aby mówić o faktycznym istnieniu, musieliśmy wprowadzić nowe łączniki.∃ ∨ ∀
Po drugie, jest widok topologiczny. Teraz modelem klasycznej logiki (jako rodziny zestawów) jest algebra boolowska (tj. Rodzina podzbiorów zamkniętych w dowolnych związkach, przecięciach i uzupełnieniach). Okazuje się, że model logiki intuicyjnej jest przestrzenią topologiczną , a zdania interpretowane są jako zbiory otwarte. Ich interpretacja negacji jest wnętrzem dopełniacza, a następnie łatwo jest wykazać, że , co oznacza, że podwójna negacja wysyła nas do najmniejszego klopenu pokrywającego każde otwarcie --- a klopeny tworzą Algebra boolowska.¬¬¬P=¬P
Teraz dzięki Curry-Howard wiemy, jak interpretować dowody w intuicyjnej logice jako programy funkcjonalne. Tak więc, jedna możliwa odpowiedź (ale nie jedyna) na pytanie „jaka jest konstruktywna treść klasycznego dowodu?” jest następujący:
Spójrzmy więc na tłumaczenie . Oznacza to, że konstruktywna treść wykluczonego środka jest tym samym, co stwierdzenie, że ¬ P i ¬ ¬ P nie mają - tzn. Brak sprzeczności. W tym sensie w prawie wykluczonego środka nie ma tak naprawdę dużo treści obliczeniowych.G(A∨¬A)=¬(¬G(A)∧¬¬G(A)) ¬P ¬¬P
Aby zobaczyć, co to konkretnie, pamiętaj, że konstruktywnie, negacja jest zdefiniowana jako . Więc ta formuła jest ( ( G ( A ))¬A==A⟹⊥ . Poniższy bit kodu Ocaml zilustruje:((G(A)⟹⊥)∧((G(A)⟹⊥)⟹⊥))⟹⊥
To znaczy, jeśli dostaniesz nie-A i nie-nie-A, możesz po prostu przekazać pierwszą negację drugiemu, aby uzyskać pożądaną sprzeczność.
Czym są kontynuacje transformacji w stylu przejścia?
Teraz,
Widziałem transformację „a” CPS, ponieważ, jak wspomniałem wcześniej, istnieje wiele negatywnych tłumaczeń, które pozwalają udowodnić to twierdzenie, a każde z nich odpowiada innej transformacji CPS. Pod względem operacyjnym każda transformacja odpowiada innej kolejności oceny . Nie ma więc wyjątkowej interpretacyjnej interpretacji klasycznej logiki, ponieważ masz do wyboru, a wybory różnicowe mają bardzo różne cechy operacyjne.
źródło
Są całe konferencje na temat niekonstruktywnych dowodów jako programów i nie jestem ekspertem w tej dziedzinie. Powyżej Neel Krishnaswami nawiązał do dłuższej odpowiedzi, którą przygotowuje, która, sądząc po jego pracy tutaj, będzie doskonała. To tylko smak odpowiedzi.
podaje kod O'Caml:
Najczystsze wprowadzenie do tego, jakie widziałem, znajduje się w „Teście pojęcia kontroli formułami jako typy” Tima Griffina .
źródło
callcc
do Schematucallcc
. Wtedy możesz faktycznie wypróbować różne rzeczy.