Come funzionano le "tattiche" negli assistenti di prova?


44

Domanda: Come funzionano le "tattiche" negli assistenti di prova? Sembrano essere modi per specificare come riscrivere un termine in un termine equivalente (per alcune definizioni di "equivalente"). Presumibilmente ci sono regole formali per questo, come posso imparare cosa sono e come funzionano? Coinvolgono più della scelta dell'ordine per la riduzione beta?

Informazioni sul mio interesse: diversi mesi fa, ho deciso di voler imparare la matematica formale. Ho deciso di seguire la teoria dei tipi perché dalla ricerca preliminare sembra The Right Way To Do Things (tm) e perché sembra unificare la programmazione e la matematica che è affascinante . Penso che il mio obiettivo finale sia quello di essere in grado di usare e comprendere un assistente di prova come Coq (penso soprattutto di essere in grado di usare tipi dipendenti poiché sono curioso di cose come rappresentare i tipi di matrici). Ho iniziato a conoscere pochissimo, nemmeno una rudimentale programmazione funzionale, ma sto facendo progressi lenti. Ho letto e compreso grossi pezzi di tipi e linguaggi di programmazione (Pierce) e ho imparato un po 'di Haskell e ML.


1
Questa è una pubblicità spudorata per i miei tutorial video Coq, math.andrej.com/2011/02/22/…
Andrej Bauer

Risposte:


36

ABABABABcon le stesse ipotesi), applicare un lemma (~ funzione application), suddividere un lemma su un tipo induttivo in un caso per ciascun costruttore, e così via. Le tattiche di base possono avere successo o fallire a seconda del contesto in cui vengono applicate. Le tattiche più avanzate sono come piccoli programmi funzionali che eseguono le tattiche di base, eseguono la corrispondenza del modello sui termini dell'obiettivo e / o delle ipotesi, fanno scelte basate sul successo o sul fallimento della tattica e così via. Le tattiche più avanzate riguardano l'aritmetica e altri tipi specifici di teorie. Il documento chiave sul linguaggio tattico di Coq è il seguente:

  • D. Delahaye. Un linguaggio tattico per il sistema Coq . In Proceedings of Logic for Programming and Automated Reasoning (LPAR), Isola della Reunion, volume 1955 di Lecture Notes in Computer Science, pagine 85–95. Springer-Verlag, novembre 2000.

Le regole formali che costituiscono l'essenza delle tattiche di base sono definite nella guida per gli utenti di Coq qui o nel capitolo 4 del pdf .

Un documento abbastanza istruttivo sull'implementazione di tattiche e tattiche (essenzialmente tattiche che prendono altre tattiche come argomenti) è:

Il linguaggio tattico di Coq ha il limite che le prove scritte usando a malapena assomigliano alle prove che si fanno a mano. Sono stati fatti diversi tentativi per abilitare prove più chiare. Questi includono Isar (per Isabelle / HOL) e il linguaggio di prova di Mizar .

A parte: sapevi anche che il linguaggio di programmazione ML era stato originariamente progettato per implementare tattiche per il proveratore di teoremi LCF ? Molte idee sviluppate per ML, come l'inferenza del tipo, hanno influenzato i moderni linguaggi di programmazione.


3
Bella risposta. La programmazione certificata di Adam Chlipala con tipi dipendenti ( adam.chlipala.net/cpdt ) è un'altra buona risorsa sull'uso della tattica in Coq.
jbapple

16

LCF è davvero il nonno di tutti questi sistemi: Coq, Isabelle, HOLs, incluso il linguaggio di programmazione ML (che oggi vediamo come OCaml, SML, anche F #). Sì, includo Coq come membro della famiglia LCF più grande. Rispetto agli assistenti di correzione americano-americano (in particolare ACL2) o al Mizar totalmente indipendente, Coq è culturalmente abbastanza vicino a Isabelle e agli HOL, principalmente a causa dell'idea condivisa della tattica .

Quindi quali sono le tattiche, spogliate dalle osservazioni accidentali sulla riscrittura, le conversioni, l'introduzione o l'eliminazione dei connettivi?

Il principio di stratificazione principale qui è ereditato dalla LCF di Milner:

  • Inferenze di base (ragionamento in avanti), sia come tipo thmdi dati astratto nell'approccio LCF originale, sia con verifica separata dei termini di prova nel ramo della teoria del tipo della famiglia (Coq, Matita). Questo ti dà una certa base logica per i risultati che il prover considera come teoremi. Quindi potresti avere un'inferenza primitiva che prende ⊢ A e ⊢ B e ti dà ⊢ A ∧ B. Un'altra inferenza primitiva potrebbe darti ⊢ t = u, dove u è la forma beta-normale di t. Nessuno di questi meccanismi è tattico, tuttavia, sono regole di inferenza come nella logica standard.

  • Prova diretta all'obiettivo (ragionamento all'indietro). L'idea è di operare su una nozione di "stato obiettivo" perfezionandolo, suddividendolo in sempre più sotto-oggetti, chiudendo sotto-oggetti, fino a quando non sarà tutto risolto. Terminare lo stato obiettivo, farà uscire un certo teorema dal processo. LCF ha introdotto alcune infrastrutture extra-logiche per gli obiettivi, che sono ancora presenti negli HOL: una tattica è una funzione ML che raffina un obiettivo e produce una giustificazione per il raffinamento. Alla fine della dimostrazione, le giustizie vengono riprodotte in ordine inverso per produrre una dimostrazione in avanti secondo le inferenze primitive delineate sopra.

Coq e Matita sono ancora abbastanza vicini a questo principio LCF. Isabelle è diversa qui: già nel 1989, Larry Paulson ha riformato le nozioni di obiettivo e tattica per renderle più vicine alla logica, che è la struttura logica "Pura" di Isabelle qui. Isabelle / Pure fornisce una logica minima di ordine superiore con implicazioni ==> e quantificatore !! che indicano sia la struttura delle regole di deduzione naturale sia gli stati obiettivo.

Ad esempio, ⊢ A ==> B ==> A ∧ B è la regola di introduzione congiunta (della logica dell'oggetto) come teorema del framework logico.

Anche gli stati obiettivo sono solo teoremi, a partire da ⊢ C ==> C per la rivendicazione iniziale C, che viene perfezionata in ⊢ X ==> Y ==> Z ==> C negli stati intermedi, dove X, Y, Z sono i subgoal attuali e il processo termina con ⊢ C (no subgoals).

Ora torniamo alle tattiche, che sono più uniformi per tutti questi dimostratori: data una nozione di stato obiettivo (ad esempio Isabelle sopra), una tattica è una funzione che mappa uno stato obiettivo a (0, 1 o più) follow-up stati dell'obiettivo. Inoltre, una tattica è un combinatore di tali funzioni tattiche, ad esempio per esprimere composizione sequenziale, scelta, ripetizione ecc. In effetti, il linguaggio delle tattiche e delle tattiche è correlato all'approccio "elenco dei successi" dei combinatori di parser.

La tattica consente di descrivere sistematicamente determinate strategie di affinamento degli obiettivi. Si sono rivelati abbastanza riusciti dalla loro invenzione in LCF negli anni '70 / '80, ma producono script di prove notoriamente illeggibili.

Una recente panoramica di alcuni aspetti dei linguaggi tattici è fornita dall'articolo di A. Asperti et al, PLMMS 2009, vedi gli atti del seminario a pagina 22.

Mizar e Isabelle / Isar sono stati citati come approcci alternativi al ragionamento strutturato leggibile dall'uomo , e non sono basati su tattiche in quel senso. Mizar non è correlato alla famiglia LCF, quindi non conosce questa terminologia tattica. Isabelle / Isar incorpora la tradizione tattica in una certa misura, ma la sua nozione di metodo di dimostrazione è un po 'più strutturata (con esplicito contesto di prova Isar, indicazione esplicita di fatti concatenati ed evitamento di un goal-hacking interno nel corso del ragionamento).

Molte altre riforme e riconsiderazioni delle lingue tattiche sono avvenute negli ultimi decenni. Ad esempio, un recente ramo della comunità Coq favorisce SSReflect (di G. Gonthier) invece del tradizionale Ltac.


12

Come funzionano le "tattiche" negli assistenti di prova?

Sospetto che questa risposta sarà un po 'sconclusionata.

In primo luogo, non è sufficiente chiedere "come funzionano le tattiche negli assistenti di prova" perché lavorano in modo diverso in assistenti di prova diversi. Esistono oggi due principali classi di assistente: quelle derivate dall'LCF originale, come Isabelle, HOL e HOL light, e assistenti di correzione basati sulla teoria dei tipi come Coq e Matita. In queste due diverse classi di assistente di prova le tattiche funzionano in modi diversi, una riflessione che ciò che sta accadendo sotto il cofano, ad esempio Isabelle, è molto diverso da quello che sta accadendo sotto il cofano, ad esempio Matita.

Chiediti: cosa sta succedendo quando proviamo a dimostrare una proposizione P in Matita? Introduciamo una X metavariabile con il tipo P. Quindi facciamo un gioco, per così dire, in cui perfezioniamo X, aggiungendo sempre più struttura al termine incompleto, fino a quando non otteniamo un termine lambda completo (cioè non contiene più metavariabili). Una volta che siamo in possesso di un termine lambda completo, digitiamo controllarlo rispetto a P, assicurandoci che risieda nel tipo richiesto. Vediamo quindi che in Coq e Matita, una tattica è semplicemente una funzione da termini di prova incompleti a termini di prova incompleti, che si spera aggiungano un po 'di struttura al termine dopo l'applicazione (questa osservazione ha motivato un po' di lavoro recente di es. Jojgov , Pientka e altri).

Ad esempio, la tattica "introduzione" di Matita introduce un'astrazione lambda rispetto al termine esistente, "casi" introduce un'espressione di corrispondenza nel termine e "applica" introduce un'applicazione di un termine all'altro. Queste tattiche di base possono essere messe insieme, usando funzioni di ordine superiore, per crearne di più complesse. L'idea di base è sempre la stessa: una tattica mira sempre ad aggiungere un po 'di struttura a un termine di prova incompleto.

Si noti che, gli implementatori mirano a restituire un termine che controlla nuovamente dopo ogni applicazione tattica. A rigor di termini, non è necessario che lo facciano, poiché tutto ciò che conta per gli assistenti di prova basati sulla teoria dei tipi è che, quando l'utente arriva a Qed la prova, siamo in possesso di un termine di prova che abita nella proposizione P. Come arrivato a questo termine di prova è in gran parte irrilevante. Tuttavia, sia Coq che Matita mirano a restituire all'utente un termine di prova (possibilmente incompleto) che controlla dopo ogni applicazione tattica. Tuttavia, questo invariante può (e spesso fallisce), soprattutto per quanto riguarda i due controlli sintattici che gli assistenti di prova basati su CIC devono implementare.

In particolare, possiamo realizzare quella che sembra essere una prova valida, applicando una serie di tattiche fino a quando non rimangono più obiettivi aperti. Veniamo quindi a Qed la supposta prova, solo per scoprire che il controllore di terminazione di Matita, o il suo rigoroso controllo di positività, si lamenta, poiché il termine di prova che è stato generato dalla tattica ha invalidato uno di questi controlli sintattici (vale a dire un metavariabile in posizione argomento a una chiamata ricorsiva è stata istanziata con un termine che non è sintatticamente più piccolo dell'argomento originale). Questo è un riflesso del fatto che la teoria dei tipi CIC non è, in un certo senso, non "abbastanza forte" e non riflette i requisiti sintattici di positività o dimensione nei suoi tipi (un'osservazione che motiva i tipi di dimensioni di Abel e alcuni recenti lavori sui tipi di positività ).

D'altra parte, gli assistenti di prova in stile LCF sono piuttosto diversi. Qui, il kernel è costituito da un modulo (solitamente implementato in una variante di ML), contenente un tipo astratto "thm", e funzioni che implementano le regole di inferenza della logica dell'assistente prove, mappando "thm" su "thm", e così via. Facciamo affidamento sulla disciplina tipografica di ML per garantire che l'unico modo per costruire un valore di tipo "thm" sia tramite queste regole di inferenza (tattiche di base). Il kernel di Isabelle è qui .

Le prove consistono quindi in una serie di applicazioni di queste tattiche di base (o tattiche più complesse e più grandi, che sono di nuovo realizzate mettendo insieme tattiche più semplici usando funzioni di ordine superiore --- in Isabelle, le funzioni di ordine superiore, chiamate tattiche, possono essere visto qui ). A differenza degli assistenti di correzione basati sulla teoria dei tipi, in un assistente in stile LCF non è necessario tenere un termine esplicito come testimone. La correttezza della dimostrazione è garantita dalla costruzione e la nostra fiducia nella disciplina tipografica di ML (molti assistenti, ad esempio Isabelle, generano tuttavia termini di prova per le loro prove).

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.