Ho un progetto Coq con le sue librerie organizzati in sottodirectory, qualcosa di simile:Coq: gestire LoadPath in progetto con le sottodirectory
…/MyProj/Auxiliary/Aux.v
…/MyProj/Main/Main.v (imports Auxiliary/Aux.v)
Quando compilo i file, mi aspetto di farlo dal directory di lavoro MyProj
(via un makefile). Ma voglio anche lavorare sui file usando Proof General/Coqtop, nel qual caso la directory di lavoro è di default la directory in cui il file vive.
Ma ciò significa che il LoadPath è diverso tra i due contesti e pertanto il percorso logico necessario per l'importazione della libreria è diverso. Come si imposta la chiamata coqc, il LoadPath e le dichiarazioni di importazione in modo che funzionino in entrambi i contesti?
Ogni approccio che ho provato, qualcosa va storto. Per esempio, se compilo Aux.v
invocando
coqc -R "." "MyProj" Auxiliary/Aux.v
e importarlo in Main.v
come
Require Import MyProj.Auxiliary.Aux.
allora questo funziona quando compilo Main.v
con
coqc -R "." "MyProj" Main/Main.v
ma non riesce a Coqtop, con Error: Cannot find library MyProj.Auxiliary.Aux in loadpath
. D'altra parte, se prima della Require Import
aggiungo
Add LoadPath ".." as MyProj.
allora questo funziona in Coqtop, ma non riesce sotto coqc -R "." "MyProj" Main/Main.v
, con
Error: The file […]/MyProj/Auxiliary/Aux.vo contains library
MyProj.Auxiliary.Aux e MyProj.MyProj.Auxiliary non biblioteca .
Sto cercando una soluzione che sia solida per una libreria condivisa con i collaboratori (e si spera eventualmente con gli utenti), quindi in particolare non può utilizzare percorsi di file assoluti. Il migliore che ho trovato per ora è quello di aggiungere emacs variabili locali per impostare la LoadPath quando invoca Prova Generale Coqtop:
((coq-mode . ((coq-prog-args . ("-R" ".." "MyProj" "-emacs")))))
ma questo (a) sembra un po 'hacky, e (b) funziona solo per prova generale , non in Coqide o semplice Coqtop. C'è una soluzione migliore?