Apprendimento del teorema automatizzato


44

Sto imparando il teorema automatizzato Proving / risolutori SMT / Proof Assistants da solo e postando una serie di domande sul processo, a partire da qui.

Si noti che questi argomenti non sono facilmente digeribili senza uno sfondo in logiche (matematiche). In caso di problemi con i termini di base, si prega di leggere su quelli, ad esempio Logics in Computer Science di M. Huth e M. Ryan (in particolare i capitoli uno, due e quattro) o Introduzione alla logica matematica e alla teoria dei tipi di P. Andrews.
Per una breve introduzione alla logica di ordine superiore (HOL) vedere qui .

Ho guardato Coq e ho letto il primo capitolo dell'introduzione a Isabelle, tra gli altri; Tipi di provider di teoremi automatizzati

Conosco Prolog da alcuni decenni e ora sto imparando F #, quindi ML, O'Caml e LISP sono un vantaggio. Haskell è una bestia diversa.

Ho i seguenti libri

"Manuale di ragionamento automatico" a cura di Alan Robinson e Andrei Vornkov

"Manuale di logica pratica e ragionamento automatico" di John Harrison

"Term Rewriting and All That" di Franz Baader e Tobias Nipkow

  1. Quali sono le differenze tra Coq e Isabelle?

  2. Dovrei imparare Isabelle o Coq o entrambi?

  3. C'è un vantaggio nell'apprendere Isabelle o Coq per primo?

Trova la prossima domanda della serie qui .


7
È importante notare che gli strumenti citati non sono tester automatici ma assistenti di prova (sebbene possano dimostrare cose semplici da soli).
Raffaello

@DaveClarke Duplicate?
Raffaello

@Raphael: Sì (tranne adesso la mia risposta contiene nuovi dati).
Dave Clarke,

@DaveClarke Pensi che dovremmo chiudere questo e unire i due?
Raffaello

@Raphael: Sì. Ho appena copiato il testo della risposta qui nella mia risposta per l'altra domanda.
Dave Clarke,

Risposte:


25

La mia preferenza è per Coq, ma immagino che altri preferiscano Isabelle. Una delle strane cose che ho scoperto su Isabelle è che esiste una sintassi a due livelli, in cui alcune delle tue definizioni devono essere racchiuse tra virgolette doppie. Nessuna assurdità è presente in Coq.

In definitiva, quello più adatto a te potrebbe dipendere da ciò che vuoi dimostrare. Entrambe le lingue hanno molto supporto bibliotecario e comunità attive che fanno ogni sorta di sviluppo e teorie di esempio. Se una lingua fornisce un adeguato supporto di libreria (o altro) per i tipi di teoria che desideri sviluppare, allora selezionerei quella lingua.

Una strategia è quella di fare un semplice tutorial in entrambe le lingue e seguire quello che si sente meglio. Per esempio,

Ecco un post sul blog che confronta brevemente i due da qualcuno che alla fine preferisce Isabelle.

Assicurati di utilizzare un IDE corretto (come ProofGeneral ), anziché fare cose sulla riga di comando.

Un altro modo per entrare in Coq è provare il libro online Software Foundations di Benjamin Pierce et al. Fornisce un eccellente tutorial con molti dettagli forniti. L'attenzione si concentra principalmente sulla semantica del linguaggio di programmazione, ma molte delle basi (e oltre) di Coq e dimostrazione di teoremi semiautomatici sono coperte lungo la strada.


4
ProofGeneral è fantastico, una volta domato! Riguardo alla sintassi di Isabelle: iirc, le cose tra virgolette sono le cose di cui parli, le formule. Tutto il resto è controllo di prova. Ho pensato che la chiara distinzione fosse buona, ma le doppie virgolette (e la conseguente mancanza di evidenziazione della sintassi all'interno delle virgolette) non è probabilmente il modo migliore per implementarlo.
Raffaello

4
L' anno scorso abbiamo creato un wiki Isabelle / HOL per un corso; ha delle belle panoramiche difficili da trovare altrimenti.
Raffaello

18

Una cosa che penso che troverai interessante è che il termine "dimostrazione del teorema" varia notevolmente a seconda del campo in cui ti trovi. Mentre sono - in astratto - un po 'correlato, prova teorema pratica (come il tipo che tu vedere elaborato nel Manuale di ragionamento automatico) ha meno a che fare con Coq o Isabelle di quanto si pensi.

Quando ho iniziato a conoscere il teorema dimostrando cose correlate, il primo libro che ho letto (anche se ora è piuttosto datato?) È stato l'eccellente logica del primo ordine di Melvin Fitting e il teorema automatizzato. Questo libro è stato davvero eccellente e ha trattato i tipi di argomenti che vedrai relativi alle logiche di ordine inferiore, dove puoi effettivamente ottenere una buona quantità di automazione. Il tipo di logica che impari dovrebbe essere dettato da ciò su cui vuoi ragionare e non tanto teorema che provi per il gusto di farlo. Ad esempio, mentre la logica del primo ordine ti dà una buona dose di espressività e capacità di ragionamento, la maggior parte della comunità dei linguaggi di programmazione (dove sono finito in questi giorni) è partita dalla dimostrazione del teorema e dal controllo del modello (che vanno in il secchio di cose che sono più decidibili ma meno espressive).

Non dare per scontato che ciò significhi, tuttavia, che cose come il ragionamento del primo ordine e il controllo del modello non sono stati estremamente utili nella pratica. Sono stati! Puoi vedere ACL2 come un esempio di un prover costruito sulla base della logica del primo ordine che ha avuto un incredibile successo nel regno industriale. Insieme a questo, c'è stato anche un notevole sviluppo nella risoluzione di SMT. I moderni solutori SMT sono costruiti su potenti solutori SAT (principalmente attraverso scoperte negli ultimi vent'anni per miglioramenti su DPLL) e hanno visto un grande uso in cose come l'esecuzione simbolica.

Tuttavia, come ho detto, mentre il più tradizionale "dimostrazione del teorema" è divertente, c'è molto altro da imparare. Learning Coq - per esempio - ha poco a che fare con l'apprendimento degli strumenti di automazione che ti offre e ha molto più a che fare con l'apprendimento della teoria dei tipi su cui si basa (il calcolo predicativo delle costruzioni coinduttive). Se non sei abituato alla logica costruttiva, al curry howard isomorfismo o alla teoria dei tipi, ti divertirai molto ad apprendere questi strumenti, ma non riesco quasi a pensare che siano troppo legati alle cose che vedi nel primo volume del manuale.

Quindi decidi cosa vuoi fare: verifica modelli e teoremi nella logica del primo ordine o usa una potente teoria dei tipi per ragionare sulla correttezza dei tuoi programmi (o teoremi nella logica costruttiva). Se è il primo, scopri le tecniche di deduzione più automatizzate, se è il secondo, scopri di più su Coq, HOL, ecc ... A proposito, se vuoi imparare Coq, mentre i riferimenti sopra sono buoni, penso che ci sono due riferimenti davvero fondamentali per l'apprendimento di Coq:

Il libro sulle fondazioni del software di Benjamin Pierce (il Dr. Pierce è un eccellente scrittore, e ti consiglio di dare un'occhiata anche al suo più popolare "libro di mattoni", se non l'hai ancora fatto).

Programmazione certificata con tipi dipendenti (Adam Chlipala scrive anche abbastanza bene, anche se i suoi libri assumono un po 'più di maturità e intelligenza rispetto all'introduzione forse più semplice di Pierce.)


15

Esiste una varietà di sistemi per Interactive Teorem Proving (ITP) - vedi anche la conferenza con quel nome - Coq, Isabelle, HOLs, ACL2, PVS ecc.

Tutti sono relativamente difficili da imparare e ognuno ha la sua cultura specifica. È come imparare una lingua straniera: diciamo che conosci già l'inglese, e quindi puoi scegliere tra francese, tedesco, italiano, spagnolo, portoghese. Tutti sono in qualche modo collegati - questo non è cinese - ma pochissime persone gestiscono tutto ciò contemporaneamente. Quindi dovresti provare ad avere un assaggio per ciascuna delle culture e delle comunità, e quindi prendere un impegno.

Potrebbe esserci anche la "caratteristica killer" di cui hai veramente bisogno per il tuo lavoro.

Aiuta anche ad avere colleghi esperti su uno di questi sistemi in giro.

  • Quali sono le differenze tra Coq e Isabelle?

Entrambi sono discendenti del sistema LCF da Stanford / Edinburgh / Cambridge. Nel 1985, G. Huet e L. Paulson stavano lavorando insieme sull'ultima versione di Cambridge LCF. Quindi la divisione è avvenuta verso Coc / CIC / COQ (ora Coq) in Francia e Isabelle a Cambridge e Monaco. Si noti che HOL4, HOL-Light, HOL-XYZ sono altri discendenti correlati di LCF.

Più di 20 anni fa, la distinzione tra Coq e Isabelle sarebbe stata fatta in base a basi logiche: qui la logica costruttiva tipicamente dipendente, la logica classica tipicamente semplice lì. Oggi, nella pratica, si ha un impatto sorprendentemente scarso, dato che sempre più livelli sono stati aggiunti in cima a ciascun sistema formale, inclusi strumenti aggiuntivi e librerie.

  • Dovrei imparare Isabelle o Coq o entrambi?

Dovresti guardare entrambi e provare ad avere una sensazione se ti piace più vino e formaggio, o Bratwurst e crauti. (Come uno dei ragazzi dietro Isabelle, ma attualmente in Francia, sono sorpreso da quanti francesi amano davvero i crauti quando sono in casa privatamente e nessuno guarda :-)

  • C'è un vantaggio nell'apprendere Isabelle o Coq per primo?

Io non la penso così. Potrebbe esserci il pericolo che rimani bloccato con quello che provi per primo e non provi il secondo, o che tu sia deluso troppo presto con il primo e lo scarti troppo presto. In ogni caso, avrai bisogno di tempo e costanza per diventare produttivo con entrambi i sistemi.

Da quando Proof General come "IDE" è già stato menzionato: Proof General / Emacs era l'interfaccia standard unificante sia per Coq che per Isabelle per molti anni, ma non l'avrei mai chiamato IDE. C'è anche CoqIDE con "IDE" nel suo nome, ma è un editor relativamente semplice in cima ai widget di Gtk. Isabelle attuale include Isabelle / jEdit, che non ha "IDE" nel suo nome, ma ha lo scopo di approssimare le cose che vedi abitualmente in Netbeans o IntelliJ IDEA --- per testi di prova anziché codice Java.


10

Ecco alcuni tutorial video di Coq di Andrej Bauer. Non è affatto completo, ma penso che sia una buona introduzione.


1
Grande! Nota una frase centrale in "Una prima prova con Coq": "Pensa a come lo faresti sulla carta". Il miglior consiglio di sempre.
Raffaello

4

Questa introduzione a Isabelle è piuttosto esaustiva.

Vedi anche questa introduzione a Isabelle

In generale, Isabelle è relativamente facile da iniziare, poiché ci sono molti esempi disponibili. Ad esempio, nel sito ufficiale

PS - Non sono in alcun modo affiliato con Isabelle, sono un teorico dei metodi formali, ma so che Isabelle viene spesso come punto di partenza predefinito.


1
"So che Isabelle viene spesso come punto di partenza predefinito.": Preferirei dire che l'HOL viene spesso come punto di partenza predefinito e come assistente di prova, è piuttosto Coq che spesso viene come predefinito. Pensandoci, è divertente ... la logica più famosa (HOL più famosa di CoC) e l'assistente prove più famosa (Coq più famosa di Isabelle), non corrispondono (Coq si basa su CoC e Isabelle su HOL).
Hibou57,

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.