🙏

Lean4, lakeでのプロジェクト作成がうまく行かなかったのでChatGPTに聞く→解決

に公開

公式ドキュメント

https://leanprover-community.github.io/install/project.html
https://aconite-ac.github.io/how_to_install_lean/lake-package-manager/how-to-create-project.html

に従ってelan,lakeを実行しても必要な*.leanファイルが作成されなかったのでChatGPT o3にきいた。
結果として

elan self update
elan update stable   

の実行が必要だった。

https://chatgpt.com/s/t_686f1272d8588191871f5e93a1cc2cc0

lake init でBasic.leanしか生成されないことは何が原因でしょうか
lake init が正常に動くと、次の 3 ファイル(+ lakefile.leanlean-toolchain)が必ず出来上がるはずです。

Main.lean                 -- 実行用(std/exe テンプレートのとき)
«Foo».lean                -- ライブラリのルート
Foo/Basic.lean            -- 雛形モジュール

ここで Foo はディレクトリ名(= パッケージ名)を UpperCamelCase に直したものです。
公式ドキュメントにもこの構成が載っています。(docs.lean-lang.org)


Basic.lean だけになる典型的な理由

症状 よくある原因 確認ポイント/対策
Main.lean がない - lake init … lib / もしくは環境変数 LAKE_TEMPLATE=lib を設定している
- lake init する前に同名の Main.lean が既にあったので上書きされなかった
① コマンド履歴や echo $LAKE_TEMPLATE を確認
lake init … std あるいは lake init … exe で作り直す
ルートファイル(Foo.lean など)が見当たらない - 大文字小文字を変えたファイルを見落としている(Foo.leanfoo.lean は別)
- パッケージ名にハイフンや数字が入り、ファイル名が «foo-bar».lean のようにフランス語引用符付きになったが、シェルのグロブで引っ掛けていない
ls -a や VS Code で再チェック。
特殊文字を含む場合は import «foo-bar».Basic の形になるので、ファイルも «foo-bar».lean で生成されます。
そもそも最初から Basic.lean だけ Lean/Lake が古く、生成テンプレートのバグに当たっている elan self updateelan update stable でツールチェーンを最新版 (>= 4.22) にしてから再実行

テンプレート指定の一覧はマニュアルにも明記されています(std がデフォルト): (lean-lang.org)


すぐ出来る確認手順

# 1. まずツールチェーンを最新化
elan self update
elan update stable      # または elan default leanprover/lean4:stable

# 2. クリーンな場所で手を動かしてみる
mkdir Hello && cd Hello
lake init .             # (= lake init Hello std)

# 3. 生成物を確認
tree -a -L 2

ここで

Main.lean
Hello.lean
Hello/Basic.lean

の 3 ファイルが揃えば OK です。欠けている場合は上記の表をヒントに原因を絞り込んでみてください。


補足 — テンプレートを意図的に変える場合

目的 コマンド例 生成される Lean ファイル
ライブラリ + 実行ファイル(既定) lake init Foo Main.lean, Foo.lean, Foo/Basic.lean
ライブラリのみ lake init Foo lib Foo.lean, Foo/Basic.lean
実行ファイルのみ lake init Foo exe Main.lean
mathlib 依存プロジェクト lake init Foo math Foo.lean, Foo/Basic.lean + mathlib 依存設定

それでも解決しないときは…

  • lake --versionelan toolchain list の結果
  • 実行した正確なコマンド
  • 生成されたディレクトリ構成(tree 1 段)

を添えてもらえると、さらに絞り込みやすくなります。

Discussion