パッケージのビルド(失敗)

次のパッケージをトップレベルパッケージ(依存パッケージではなく)git clone でインストールする。

インストールしてすぐ気がつくのは:

  1. ./lean_packages/ というディレクトリがある。./lake-packages/ ではない。
  2. ./lean_packages/manifest.json がある。./lean-manifest.json ではない。
  3. lean-toolcahin は leanprover/lean4:nightly-2022-10-09
  4. lakefile.lean 内の属性が @[defaultTarget]、@[default_target] ではない。
  5. lakeバージョンは、Lake version 4.0.0 (Lean version 4.0.0-nightly-2022-10-09) 。パッケージ指定のツールチェーンのバージョン。

lake -v build すると、

 LeanColls > lake -v build
info: > git fetch origin    # in directory .\lean_packages\std
error: .\lean_packages\std\lakefile.lean:9:2: error: unknown attribute [default_target]
error: .\lean_packages\std\lakefile.lean:12:2: error: unknown attribute [default_target]
error: .\lean_packages\std\lakefile.lean: package configuration has errors

./lean_packages/ の下に、mathlibとstdがコピーされている。

 LeanColls > cat .\lean_packages\mathlib\lean-toolchain
leanprover/lean4:nightly-2022-10-09

 LeanColls > cat .\lean_packages\std\lean-toolchain
leanprover/lean4:nightly-2023-01-10

mathlibはバージョンがあっているが、stdが新しいのでダメだ。古いlakeでは、変更された属性 @[default_target] が解釈できない。


stdのビルドを、./lean_packages/std/ で手動で行う。成功。


LeanColls/ に昇って、lake build(実際は lean-build.ps1)すると、同じ失敗。既にビルド済みなのに、自分でビルドしようとする。拉致が開かない。いや、ビルドするじゃなくて、依存グラフを作ろうと試みて失敗か。lakefile.lean の構文が変わると破綻する。


stdのバージョンは昔のものにすればいけるかも。git log で探して、git checkout ハッシュ値でデタッチトヘッドを作る。

 std > git checkout 6488a2a
Previous HEAD position was 5770b60 feat: support priorities in ext (#84)
HEAD is now at 6488a2a chore: update nightly 09-11 (#7)

 std > git branch
* (HEAD detached at 6488a2a)
  main

lakefile.lean の属性は @[defaultTarget] だ。

LeanColls/ に昇って、lake build(実際は lean-build.ps1)する。gitでリビジョンを戻されてしまった。

 LeanColls > lean-build
info: > git fetch origin    # in directory .\lean_packages\std
info: updating .\lean_packages\std to revision 5770b609aeae209cb80ac74655ee8c750c12aabd
info: > git checkout --detach 5770b609aeae209cb80ac74655ee8c750c12aabd    # in directory .\lean_packages\std
info: stderr:
Previous HEAD position was 6488a2a chore: update nightly 09-11 (#7)
HEAD is now at 5770b60 feat: support priorities in ext (#84)
error: .\lean_packages\std\lakefile.lean:9:2: error: unknown attribute [default_target]
error: .\lean_packages\std\lakefile.lean:12:2: error: unknown attribute [default_target]
error: .\lean_packages\std\lakefile.lean: package configuration has errors
 std > git branch
* (HEAD detached at 5770b60)
  main

(HEAD detached at 5770b60) は最新版のデタッチトヘッド。

もし、lean_packages/manifest.json が効いているなら、

{
  "url": "https://github.com/leanprover/std4",
  "rev": "a7237a4a4a7dd520ba1425295306bc1b4f754577",
  "name": "std",
  "inputRev": "main"
}

以下のコミットがダウンロードされるはず。

commit a7237a4a4a7dd520ba1425295306bc1b4f754577
Author: Mario Carneiro <di.gama@gmail.com>
Date:   Sun Oct 9 08:14:29 2022 -0400

    feat: RBMap.{filter, sdiff}

なんかおかしいが、よくわからん。

ちなみにツールチェーンは:

 LeanColls > elan toolchain list
leanprover-community/lean:3.23.0
leanprover-community/lean:nightly
leanprover-community/lean:stable
leanprover/lean4:nightly
leanprover/lean4:nightly-2022-07-06
leanprover/lean4:nightly-2022-10-09
leanprover/lean4:nightly-2022-11-20
leanprover/lean4:nightly-2022-12-02
leanprover/lean4:nightly-2022-12-16
leanprover/lean4:nightly-2022-12-22
leanprover/lean4:nightly-2022-12-24
leanprover/lean4:nightly-2023-01-10
leanprover/lean4:stable (default)
leanprover/lean4:v4.0.0-m5

ツールチェーンを削除しようとしたら、

 LeanColls > elan toolchain uninstall leanprover/lean4:nightly-2022-10-09
info: uninstalling toolchain 'leanprover/lean4:nightly-2022-10-09'
error: could not remove 'install' directory: 'C:\Users\m-hiyama\.elan\toolchains\leanprover--lean4---nightly-2022-10-09'
info: caused by: アクセスが拒否されました。 (os error 5)

elan のデフォルトを最新のナイトリィビルドにして、新しく作った use-Cli-2/ で作業した。

 use-cli-2 > lean-build
error: dependency Cli of ツォuse-cli-2ツサ not in manifest, use `lake update` to update

 use-cli-2 > lake update
cloning https://github.com/mhuisi/lean4-cli to .\lake-packages\Cli
error: .\.\lake-packages\Cli\lakefile.lean:6:2: error: unknown attribute [defaultTarget]
error: .\.\lake-packages\Cli\lakefile.lean: package configuration has errors

やはり、バージョンのミスマッチでビルドできない。