Quando (o dovrebbe) il CS teorico si preoccupa delle prove intuitive?


23

Da quello che ho capito (che è molto poco, quindi per favore correggimi dove sbaglio!), La teoria dei linguaggi di programmazione si occupa spesso di prove "intuizioniste". Secondo la mia interpretazione, l'approccio richiede che prendiamo sul serio le conseguenze del calcolo sulla logica e sulla dimostrabilità. Una prova non può esistere a meno che non esista un algoritmo che costruisca le conseguenze delle ipotesi. Potremmo rifiutare come assioma il principio del mezzo escluso, ad esempio, perché esibisce un oggetto, che è o ¬ X , in modo non costruttivo.X¬X

La filosofia di cui sopra potrebbe portarci a preferire prove intuizionisticamente valide rispetto a prove che non lo sono. Tuttavia, non ho riscontrato alcuna preoccupazione riguardo all'utilizzo effettivo della logica intuizionistica negli articoli in altre aree del CS teorico. Sembriamo felici di dimostrare i nostri risultati usando la logica classica. Ad esempio, si potrebbe immaginare di utilizzare il principio del punto escluso per dimostrare che un algoritmo è corretto. In altre parole, ci preoccupiamo e prendiamo sul serio un universo computazionalmente limitato nei nostri risultati, ma non necessariamente nelle nostre prove di questi risultati.

1. I ricercatori in CS teorici sono mai preoccupati di scrivere prove intuizionisticamente valide? Potrei facilmente immaginare un sottocampo dell'informatica teorica che cerca di capire quando i risultati del TCS, in particolare quelli algoritmici, mantengono una logica intuizionistica (o, più interessante, quando non lo fanno). Ma non ne ho ancora trovato nessuno.

2. C'è qualche argomento filosofico che dovrebbero? Sembra che si possa affermare che i risultati dell'informatica dovrebbero essere dimostrati in modo intuitivo quando possibile, e dovremmo sapere quali risultati richiedono, ad esempio, la PEM. Qualcuno ha provato a fare una simile discussione? O forse c'è un consenso sul fatto che questa domanda non è molto importante?

3. Come domanda secondaria, sono curioso di conoscere esempi di casi in cui questo è realmente importante: esistono risultati TCS importanti noti nella logica classica ma non nella logica intuizionistica? O sospettato di non mantenere la logica intuizionista.

Ci scusiamo per la morbidezza della domanda! Potrebbe essere necessario riformulare o reinterpretare dopo aver sentito gli esperti.


3
Un aspetto di questa domanda è stato studiato "fino alla morte". Il nome per la connessione tra prove e programmi intuitivi è la corrispondenza Curry-Howard . In breve, programmi = prove intuizionistiche, tipi = proposizioni, doppia negazione == salti.
Martin Berger,

Un risultato TCS importante noto per non reggere nella logica intuizionistica ma lo fa nella logica classica: ogni programma termina o funziona per un periodo di tempo illimitato. :)
cody

1
@MartinBerger - sì, ma per esprimere la mia domanda in un altro modo, ci interessa davvero se le prove che scriviamo sono intuizioniste o siamo interessati a studiare tali prove solo in modo astratto?
usul

1
@cody, alias Principio di Markov . + usul, penso che ciò che hai in mente non sia la logica intuizionista ma la matematica costruttiva . Non puoi fare molto nella sola logica intuizionista e mi sembra che la tua enfasi sull'intuizionismo provenga dal non distinguerlo dalla matematica costruttiva.
Kaveh,

@usul Sì, ci interessa, perché secondo la corrispondenza Curry-Howard, le dimostrazioni intuizionistiche sono programmi in linguaggi di programmazione "simpatici" (ad es. nessun costrutto di controllo funky), mentre le prove autenticamente classiche sono programmi in linguaggi più complicati.
Martin Berger,

Risposte:


6

Come ho detto nei commenti, la logica intuizionista non è il punto principale. Il punto più importante è avere una prova costruttiva. Penso che la teoria dei tipi di Martin-Löf sia molto più rilevante per la teoria del linguaggio di programmazione che per la logica intuizionistica e ci sono esperti che hanno sostenuto che il lavoro di Martin-Löf è la ragione principale per il rilancio dell'interesse generale per la matematica costruttiva.

L'interpretazione della calcolabilità della costruttività è una possibile prospettiva, ma non è l'unica. Dovremmo stare attenti qui quando vogliamo confrontare prove costruttive con prove classiche. Sebbene entrambi possano usare gli stessi simboli, il loro significato è diverso.

È sempre bene ricordare che le prove classiche possono essere tradotte in prove intuizionistiche. In altre parole, in un certo senso, la logica classica è un sottosistema di logica intuizionista. Quindi puoi realizzare (diciamo usando funzioni calcolabili) prove classiche in un certo senso. D'altra parte, possiamo pensare alla matematica costruttiva come a qualche sistema matematico in ambiente classico.

Alla fine, i formalismi, sia classici che costruttivi, sono strumenti per noi per esprimere dichiarazioni. Prendere un teorema classico e provare a dimostrarlo in modo costruttivo senza questa prospettiva non ha molto senso IMHO. Quando dico classico intendo qualcosa di diverso da quello che dico A B in modo costruttivo. Puoi argomentare quale "dovrebbe" essere il vero significato di " ", ma penso che non sia interessante se non stiamo discutendo ciò che vogliamo esprimere in primo luogo. Intendiamo (almeno) uno di loro e sappiamo quale? O intendiamo semplicemente uno di loro?ABAB

Ora, con questa prospettiva, se vogliamo dimostrare un'affermazione come e vogliamo collegarla a una mappatura da x a qualche y soddisfacente φ ( x , y ), allora il modo migliore per express può essere il modo costruttivo. D'altra parte, se ci preoccupassimo solo dell'esistenza di ye non ci importasse di come trovarli, allora il modo classico avrebbe probabilmente più senso. Quando provi l'affermazione in modo costruttivo, stai anche implicitamente costruendo un algoritmo per trovare y da xx y φ(x,y)xyφ(x,y)yyx. Puoi fare la stessa cosa esplicitamente con una formula più complicata come "l'algoritmo ha la proprietà che per tutti x , φ ( x , A ( x ) ) " dove A è un algoritmo dato esplicitamente. Se non è chiaro il motivo per cui uno potrebbe preferire il modo costruttivo di esprimerlo, pensa ai linguaggi di programmazione come un'analogia: puoi scrivere un programma per l'algoritmo MST di Kruskal in linguaggio assembly x86 in cui devi preoccuparti di molti problemi collaterali o tu può scrivere un programma in Python.Axφ(x,A(x))A

Ora perché non usiamo la logica intuizionista nella pratica? Ci sono diverse ragioni. Ad esempio, molti di noi non sono addestrati con quell'impostazione mentale. Anche trovare una prova classica di un'affermazione potrebbe essere molto più facile che trovarne una costruttiva. Oppure potremmo preoccuparci di dettagli di basso livello che sono nascosti e non accessibili in un ambiente costruttivo (vedi anche logica lineare ). Oppure potremmo semplicemente non essere interessati a ottenere le cose extra fornite con una prova costruttiva. E sebbene esistano strumenti per estrarre programmi dalle prove, questi strumenti generalmente necessitano di prove molto dettagliate e non sono stati abbastanza facili da usare per il teorico generale. In breve, troppo dolore per troppo poco beneficio.

Π20PAPAPA

Ricordo che Douglas S. Bridges nell'introduzione al suo libro di teoria della computabilità sosteneva che dovremmo dimostrare i nostri risultati in modo costruttivo. Dà un esempio che IIRC è essenzialmente il seguente:

Supponi di lavorare per una grande azienda di software e che il tuo manager ti chieda un programma per risolvere un problema. Sarebbe accettabile tornare con due programmi e dire correttamente al tuo manager una di queste due soluzioni, ma non so quale?

Alla fine, dovremmo tenere presente che sebbene usiamo gli stessi simboli per le logiche classiche e intuizionistiche, questi simboli hanno significati diversi e quello da usare dipende da ciò che vogliamo esprimere.

Per la tua ultima domanda, penso che il teorema di Robertson-Seymour sarebbe un esempio di un teorema che sappiamo che è vero classicamente ma non ne abbiamo alcuna prova costruttiva. Guarda anche


Che cos'è la "teoria A" e perché dovrei occuparmi specificamente delle prove al suo interno?
Stella Biderman,


7

Vale la pena pensare al PERCHÉ la logica intuistionistica è la logica naturale per il calcolo, dal momento che troppo spesso le persone si perdono nei dettagli tecnici e non riescono a cogliere l'essenza del problema.

Molto semplicemente, la logica classica è una logica di informazione perfetta: si presume che tutte le affermazioni all'interno del sistema siano conosciute o conoscibili come inequivocabilmente vere o false.

La logica intuitiva, d'altra parte, ha spazio per affermazioni con valori di verità sconosciuti e inconoscibili. Questo è essenziale per il calcolo, poiché, grazie all'indecidibilità della risoluzione nel caso generale, non sarà sempre certo quale sarà il valore di verità di alcune affermazioni, o anche se un valore di verità potrà mai essere assegnato a determinate affermazioni .

¬¬PP

A mio avviso, queste ragioni "semantiche" sono una motivazione molto più importante per l'uso della logica intuistionistica per il calcolo rispetto a qualsiasi altra ragione tecnica che si possa incastrare.


3

Le funzioni hash crittografiche del mondo reale come MD5 e SHA sono prive di chiavi. Come tale, rende abbastanza difficile applicare le tecniche dalla crittografia teorica alla ragione della loro sicurezza. Il semplice motivo per cui: per qualsiasi funzione hash senza chiave, esiste un programma / avversario molto piccolo che genera una collisione sotto quella funzione hash; vale a dire, un programma che ha una tale collisione - che deve esistere! - hardcoded.

Il documento di Phil Rogaway Formalizza l'ignoranza umana: l'hashing resistente alle collisioni senza le chiavi affronta questo problema. In esso mostra che alcuni teoremi molto standard per le funzioni hash con chiave (come la costruzione di Merkle-Damgård e il paradigma hash-then-sign) possono essere adattati e riprovati con affermazioni teoremiche "intuizioniste" che si applicano a funzioni hash non chiave.


0

ecco un bel capitolo sulla logica intuitiva da un libro online completo Logica per l'informatica , 300 p. [1] sec 9.5, p210, riepilogo su p220:

La logica intuitiva è nata dal movimento costruttivista in matematica che ha respinto le prove dell'esistenza non costruttiva o quelle basate sulla legge del mezzo escluso. Di recente, dall'osservazione è emersa una connessione tra matematica intuizionista e programmazione secondo cui proposizioni e tipi (nel senso della programmazione) sono equivalenti. Lo sviluppo dell'algoritmo in questo sistema formale, che si basa sulla deduzione naturale, consiste nello scrivere una specifica nella notazione logica e quindi, considerandola come un tipo, dimostrando che non è vuota. Poiché la logica sottostante è costruttiva la prova, se può essere eseguita,

un'altra prospettiva vicina viene dal TCSist Andrej Bauer che scrive su "Matematica e computazione; matematica per computer" [2] che propone sostanzialmente che "la matematica intuizionista fa bene alla fisica". la presentazione è principalmente in termini di fisica, ma per coloro che considerano CS strettamente accoppiata con la fisica l'ideologia generalmente porterà al TCS.

Interpretazione computazionale. Questa è l'interpretazione della logica intuizionista comunemente presentata in informatica. Consideriamo tutti gli insiemi rappresentati da adeguate strutture dati - un punto di vista ragionevole per un informatico. Quindi una dichiarazione è considerata vera se esiste un programma (prove computazionali) che testimonia la sua verità.

[1] Logica per informatica, Reeves e Clark

[2] Matematica intuitiva per la fisica Bauer

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.