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).