Agda始めました
Agdaを始めました。Windows 10でWindows版EmacsとWindows版のGHCupのCabalで入れたHaskellでやっています。最初にCygwin版のEmacsとWindows版のHaskellでやろうとしてできませんでした。前者の方法なら引っかかるところはなかったはずです。
Emacs以外にもVSCodeやNeovimでできるみたいです。でも、元々はEmacsで作られたみたいで、安定していそうなのでこれにしました。
「どこから手をつけるか?」ですがAgda公式ページのチュートリアルが一番丁寧そうです。でも、"Agda"でぐぐっても公式ページすら最初のほうに出てこないんですよね。本当に公式ページなのかもよくわかりませんし。"Agda tutorial"だと古いバージョンが引っかかる始末。なぜ、こんなことになっているのか?
公式ページの頭から読んでいくと"A Taste of Agda"がけっこう難しかったです。なので、ここは飛ばして次の"A List of Tutorials"の"Books on Agda"にある、"Programming Languages Foundations in Agda"をやるのが良い気がします。日本語のページだと違う気がしますが、英語のサイトだとBooksにあるやつはだいたいただでHTMLで読めますよね。どういうことなんでしょう?読めるならいいんですけど。
最初は自然数の定義からです。
data ℕ : Set where
zero : ℕ
suc : ℕ → ℕ
で定義できます。
ℕは黒板太字というやつで、数学の世界では自然数を表わすことが多いようです。黒板太字を使えない環境ではNat
と書くことが多いようです。他にはℤで整数、ℚで有理数、ℝで実数、ℂで複素数みたいです。EmacsのAgdaだと\bN
で出せます。\bn
だと小文字が出てきます。\->
で→が出せます。でも、ここらへんはバージョン依存かも。他にもたくさんの記号があって、Agda Emacs Symbolsに書いてあります。ここは公式ページではなさそうなのですけど。詳しくは公式ページのHow can I write Unicode characters using Emacs?に書いてあります。
自然数の定義ですが、これらはHaskellに似た記法になっています。data
はデータ型を宣言する命令です。ℕを定義しています。Setはまだよくわかりませんが、zeroとsucの集合みたいなことでしょう。zeroはデータコンストラクタで型はℕです。sucはsuccessorの略でℕを引数にとってℕを返す関数になります。
自然数の定義の後に
{-# BUILTIN NATURAL ℕ #-}
を書いておくと2
などの数字がsuc (suc zero)
の代わりに使えるようになります。
チュートリアルでは次のコードでインポートすることになっています。
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl)
open Eq.≡-Reasoning using (begin_; _≡⟨⟩_; _∎)
しかし、標準ライブラリがインストールされていないとエラーになります。
D:\home\sakura\docs\comp\lang\agda\test.agda:1,8-51
Failed to find source of module
Relation.Binary.PropositionalEquality in any of the following
locations:
D:\home\sakura\docs\comp\lang\agda\Relation\Binary\PropositionalEquality.agda
D:\home\sakura\docs\comp\lang\agda\Relation\Binary\PropositionalEquality.lagda
C:\cabal\store\ghc-8.10.7\Agda-2.6.2.2-44283e0a92e767b3a6754f539efccb0afbc41964\share\lib\prim\Relation\Binary\PropositionalEquality.agda
C:\cabal\store\ghc-8.10.7\Agda-2.6.2.2-44283e0a92e767b3a6754f539efccb0afbc41964\share\lib\prim\Relation\Binary\PropositionalEquality.lagda
when scope checking the declaration
import Relation.Binary.PropositionalEquality as Eq
Agdaの公式ページには標準ライブラリへのリンクしかありませんが、書いてあるとおりでインストールできます。
まず、ダウンロードして展開します。そして展開したディレクトリでcabal install
です。
kurok@DESKTOP-55E88RD /cygdrive/d/app/agda-stdlib-1.7.1
$ cabal install
Wrote tarball sdist to
D:\app\agda-stdlib-1.7.1\dist-newstyle\sdist\agda-stdlib-utils-1.7.1.tar.
gz
Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
- unix-compat-0.7 (lib) (requires download & build)
- filemanip-0.3.6.3 (lib:filemanip) (requires download & build)
- agda-stdlib-utils-1.7.1 (exe:GenerateEverything) (requires build)
- agda-stdlib-utils-1.7.1 (exe:AllNonAsciiChars) (requires build)
Downloading unix-compat-0.7
Downloaded unix-compat-0.7
Downloading filemanip-0.3.6.3
Starting unix-compat-0.7 (lib)
Downloaded filemanip-0.3.6.3
Building unix-compat-0.7 (lib)
Installing unix-compat-0.7 (lib)
Completed unix-compat-0.7 (lib)
Starting filemanip-0.3.6.3 (all, legacy fallback)
Building filemanip-0.3.6.3 (all, legacy fallback)
Installing filemanip-0.3.6.3 (all, legacy fallback)
Completed filemanip-0.3.6.3 (all, legacy fallback)
Starting agda-stdlib-utils-1.7.1 (exe:AllNonAsciiChars)
Starting agda-stdlib-utils-1.7.1 (exe:GenerateEverything)
Building agda-stdlib-utils-1.7.1 (exe:GenerateEverything)
Building agda-stdlib-utils-1.7.1 (exe:AllNonAsciiChars)
Installing agda-stdlib-utils-1.7.1 (exe:GenerateEverything)
Completed agda-stdlib-utils-1.7.1 (exe:GenerateEverything)
Installing agda-stdlib-utils-1.7.1 (exe:AllNonAsciiChars)
Completed agda-stdlib-utils-1.7.1 (exe:AllNonAsciiChars)
Copying 'AllNonAsciiChars.exe' to 'C:\cabal\bin\AllNonAsciiChars.exe'
Copying 'GenerateEverything.exe' to 'C:\cabal\bin\GenerateEverything.exe'
AGDA_DIRはWindows版ではC:\Users\kurok\AppData\Roaming\agda
になります。agda
の前にドットは必要ありません。AGDA_DIRにlibraries
というファイル名で先程展開したstandard-library.agda-libへのパスを書きます。もう一つ、defaults
というファイル名でstandard-library
と書きます。これで標準ライブラリが動くはずです。
もしかしたら正常に表示されないフォントがあるかもしれません。その場合は"DejaVu Sans Mono"か"Noto Sans Math"を指定すれば表示されるはずです。"Noto Sans Math"はインストールが必要です。
ここまで環境を作って、基礎が理解できれば、あとはチュートリアルを読んでいくだけのはずです。さあ、どんどん行きましょう。
コメント
コメントを投稿