sto cercando di imparare Coq lavorando attraverso la linea libro Software Foundation: http://www.cis.upenn.edu/~bcpierce/sf/errore coq quando si tenta di utilizzare Case. Esempio da Software Foundation libro
sto usando la linea di comando interattivo Coq interprete coqtop
.
Nel capitolo di induzione (http://www.cis.upenn.edu/~bcpierce/sf/Induction.html), sto seguendo esattamente le istruzioni. Compilare Basics.v utilizzando coqc Basics.v
. Ho poi comincio coqtop
e digitare esattamente:
Require Export Basics.
Theorem andb_true_elim1 : forall b c : bool,
andb b c = true -> b = true.
Proof.
intros b c H.
destruct b.
Case "b = true".
Tutto funziona fino a quella ultima riga, a quel punto ho il seguente errore:
Toplevel input, characters 5-15:
> Case "b = true".
> ^^^^^^^^^^
Error: No interpretation for string "b = true".
Sono troppo nuova per Coq per iniziare a disfare perché questo non funziona Ho trovato qualcosa online che suggeriva di aver bisogno di fare Require String.
prima, tuttavia, questo non ha funzionato neanche. Qualcuno ha lavorato a questo libro o ha riscontrato questo problema? Come faccio a far funzionare correttamente il codice?
Questa parola chiave Caso (tattica?) Sembra dipendere da qualcos'altro che il libro SF non sta rendendo chiaro è necessario, ma non riesco a capire cosa.
Cool, grazie, che funziona perfettamente. Indicarmi il file induction.v è davvero utile, non mi era venuto in mente che ci sarebbe stato codice nella v non nel html. Quindi immagino che questo significhi che Case non è qualcosa di costruito nella lingua, ma qualcosa aggiunto dagli autori di SF per annotare una dimostrazione? È una pratica comune o qualcosa di peculiare del modo in cui SF fa le cose? Inoltre, non sono sicuro di capire perché il "caso" sia meglio di un semplice commento come (* case b = true *). – jcb
@quadelirus Il materiale 'Case' genererà un errore e quindi faciliterà il debug se qualcosa cambia. Esempio: se induction su 'nat's e le tue tattiche di base (' O') non risolvono più quella parte dopo una modifica, genereranno un errore su 'Case 'n = S n'" 'invece di andare avanti e applicando il materiale del caso 'S' sul caso 'O' (ancora incompiuto). – nobody
@quadelirus Questi marcatori 'Case' possono essere trovati in sviluppi diversi dalle basi del software, ma ci sono anche altri stili. Personalmente, preferisco la dimostrazione in stile "Chlipala" (cioè l'automazione al punto in cui le dimostrazioni sono abbastanza brevi da non aver bisogno di alcun marcatore 'Case'.) - vedi http://adam.chlipala.net/cpdt/ per l'ennesimo libro di Coq. – nobody