[英]Diffent versions of same library in Coq
是否可以在Coq中安裝同一庫的多個版本? 如果是,如何選擇要使用的版本?
我在Windows中工作,因此不幸的是,任何使用OPAM的解決方案都不會對我有幫助。
最好的解決方案是使用coq_makefile
的正確DESTDIR
變量將庫實際安裝在單獨的目錄中,然后將COQPATH
設置為包括正確的目錄。 這是Nix和OPAM風格的作品。
Makefile
來自coq_makefile
測試的示例:
$ ( cd lib-v1 && DESTDIR=~/coqlib/lib-v1 make install )
$ ( cd lib-v2 && DESTDIR=~/coqlib/lib-v2 make install )
$ export COQPATH=~/coqlib/lib-v1:$COQPATH
$ coqtop
您可以使用-R
告訴coq某個目錄對應於某個名稱空間。 (請注意, -R
需要兩個參數,即目錄和名稱空間!)
讓我們創建兩個目錄,並編譯兩個版本。 請注意,我們必須在編譯時已經告訴coqc
該目錄中的文件應該在MyLib
命名空間中,而不是在默認的名稱空間中。
D1=~/Desktop/libv1
D2=~/Desktop/libv2
mkdir $D1; echo "Definition a:=1." > $D1/MyLib.v
(cd $D1; coqc -R . MyLib MyLib.v)
mkdir $D2; echo "Definition a:=2." > $D2/MyLib.v
(cd $D2; coqc -R . MyLib MyLib.v)
現在為MyLib
使用libv1
echo "Require Import MyLib. Print a." | \
coqtop -R $D1 MyLib
(將a := 1.
)並將libv2
用於MyLib
echo "Require Import MyLib. Print a." | \
coqtop -R $D2 MyLib
(將a := 2.
)
您還可以將-R
標志及其參數放在_CoqProject
文件中,這樣就不必_CoqProject
將其放在命令行上。 一般證明也可以理解。
編輯:使用COQPATH變量而不是-R
標志:
(cd $D1; coqc MyLib.v) # compile without -R
(cd $D2; coqc MyLib.v)
# specify the dir using COQPATH
echo "Require Import MyLib. Print a." | COQPATH=$D1 coqtop
# or add it to the LoadPath when you're in coqtop interactively
echo "Add LoadPath \"$D1\". Require Import MyLib. Print a." | coqtop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.