Rocq و بستههای rocq
توجه داشته باشید که "The Rocq Prover" (به اختصار Rocq) نام جدید دستیار اثبات است که قبلاً با نام Coq شناخته میشد. درایویشنهای coq و coqPackages در حال حاضر هم برای نسخههای قدیمیتر Coq و هم برای برخی از نسخههای Rocq در طول دورهٔ گذار تغییر نام باقی میمانند. در حالت
coq.withPackages (
ps: with ps; [
mathcomp
bignums
]
) اگر سرور vsrocq-language-server یا rocq-lsp را نصب میکنید، در صورتی که میخواهید بستههای Coq/Rocq شما را پیدا کنند، حتماً آنها را بهجای نصب جداگانه، به عنوان بخشی از عبارت coq.withPackages بالا فهرست کنید.
مجموعههای ویژگی بستههای Rocq: rocqPackages
روش توصیهشده برای تعریف یک derivation برای یک کتابخانه Rocq، استفاده از تابع rocqPackages.mkRocqDerivation
pname(اجباری) نام بسته است،version(اختیاری، با مقدار پیشفرضnull)، نسخهای است که باید دریافت و ساخته شود؛ این صفت بسته به نوع و الگوی آن به چند روش تفسیر میشود:- اگر یک رشتهٔ نسخهٔ منتشرشدهٔ شناختهشده باشد (مثلاً از صفت
releaseدر زیر)، انتشار مربوطه انتخاب میشود و صفتversionدر derivation حاصل روی این رشتهٔ انتشار تنظیم میشود، - اگر یک پیشوند majorMinor به صورت
"x.y"از یک نسخهٔ منتشرشدهٔ شناختهشده باشد (طبق تعریف بالا)، آخرین نسخهٔ منتشرشدهٔ شناختهشده با الگوی"x.y.z"انتخاب میشود (بر اساس ترتیب تعیینشده توسطversionAtLeast)، - اگر یک مسیر یا رشتهای نمایندهٔ یک مسیر مطلق باشد (یعنی با
"/"شروع
- اگر یک رشتهٔ نسخهٔ منتشرشدهٔ شناختهشده باشد (مثلاً از صفت
همچنین صفات استاندارد دیگر mkDerivation را دریافت میکند، آنها به همان شکل اضافه میشوند، به جز meta که meta محاسبهشده به صورت خودکار را گسترش میدهد (که در آن platform همانند rocq-core است و صفحه خانگی به صورت خودکار محاسبه میشود).
در اینجا یک نمونه بسته ساده آورده شده است. این یک کتابخانه خالص Rocq است، در نتیجه به Rocq وابسته است. این کتابخانه بر پایه کتابخانه Mathematical Components ساخته میشود، بنابراین برخی درایویشنهای mathcomp را نیز به عنوان extraBuildInputs دریافت میکند.
{
lib,
mkRocqDerivation,
version ? null,
rocq-core,
mathcomp,
mathcomp-finmap,
mathcomp-bigenough,
}:
mkRocqDerivation {
# namePrefix leads to e.g. `name = rocq-core9.1-mathcomp2.5.0-multinomials-2.4.0`
namePrefix = [
"rocq-core"
"mathcomp"
];
pname = "multinomials";
owner = "math-comp";
inherit version;
defaultVersion =
let
case = rocq: mc: out: {
cases = [
rocq-core
mc
];
inherit out;
};
in
with lib.versions;
lib.switch
[ rocq-core.rocq-version mathcomp.version ]
[
(case (range "8.18" "9.1") (range "2.1.0" "2.5.0") "2.4.0")
(case (range "8.17" "9.0") (range "2.1.0" "2.3.0") "2.3.0")
]
null;
release = {
"2.4.0".sha256 = "sha256-7zfIddRH+Sl4nhEPtS/lMZwRUZI45AVFpcC/UC8Z0Yo=";
"2.3.0".sha256 = "sha256-usIcxHOAuN+f/j3WjVbPrjz8Hl9ac8R6kYeAKi3CEts=";
};
propagatedBuildInputs = [
mathcomp.boot
mathcomp.algebra
mathcomp-finmap
mathcomp.fingroup
mathcomp-bigenough
];
meta = {
description = "Coq/SSReflect Library for Monoidal Rings and Multinomials";
license = lib.licenses.cecill-c;
};
} سه روش برای بازنشانی بستههای Rocq
سه روش متمایز برای تغییر یک بسته Rocq با بازنشانی یکی از مقادیر آن وجود دارد: .override ،overrideRocqDerivation و .overrideAttrs. این بخش توضیح میدهد چه نوع مقادیری را میتوان با هر یک از این روشها بازنشانی کرد.
.override
روش .override به شما امکان میدهد آرگومانهای یک derivation مربوط به Rocq را تغییر دهید. در مورد بسته multinomials در بالا، .override به شما اجازه میدهد آرگومانهایی مانند mkRocqDerivation
multinomials.override { mathcomp = my-special-mathcomp; } در Nixpkgs، تمامی درایویشنهای Rocq یک آرگومان version میگیرند. این آرگومان را میتوان بازنشانی کرد تا بهراحتی از نسخه دیگری استفاده شود:
rocqPackages.multinomials.override { version = "1.5.1"; } برای مشاهده تمام قالبهای مختلفی که احتمالاً میتوانید به version پاس دهید و همچنین محدودیتهای آن، به مراجعه کنید.
overrideRocqDerivation
تابع overrideRocqDerivation به شما امکان میدهد آرگومانهای دادهشده به mkRocqDerivation را بهراحتی تغییر دهید. این آرگومانها در توصیف شدهاند.
برای نمونه، در ادامه نحوه افزودن محلی انتشار جدیدی از کتابخانه multinomials و تنظیم defaultVersion برای استفاده از این انتشار آمده است:
rocqPackages.lib.overrideRocqDerivation {
defaultVersion = "2.0";
release."2.0".hash = "sha256-czoP11rtrIM7+OLdMisv2EF7n/IbGuwFxHiPtg3qCNM=";
} rocqPackages.multinomials .overrideAttrs
.overrideAttrs به شما امکان میدهد آرگومانهای فراخوانی زیرین stdenv.mkDerivation را بازنویسی کنید. به صورت
rocqPackages.multinomials.overrideAttrs (oldAttrs: {
postInstall = oldAttrs.postInstall or "" + ''
echo "you can do anything you want here"
'';
})