今日は以前に書いた AVL 木の実装を ACL2 に移植してみる。https://github.com/tojoqk/map-avl/blob/master/lib/tokyo/tojo/map/avl.ss
Notices by きゅーけー (tojoqk@mastodon.tojo.tokyo), page 253
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 23:31:33 JST
きゅーけー
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 23:30:56 JST
きゅーけー
たまたま自分は Emacs ユーザーだったのですんなりと ACL2 の実行環境を受け入れているけど人によっては厳しいのでは……。Eclipse と Dracula の環境の出来栄え次第か……。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 23:25:09 JST
きゅーけー
Dracula っていう DrRacket から ACL2 を動かせるやつがあった。これでもよさそう。http://dracula-lang.github.io/
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 23:18:09 JST
きゅーけー
Agda も Emacs から使うことが前提になってるっぽい。https://agda.readthedocs.io/en/latest/getting-started/installation.html#installation-from-hackage
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 23:14:41 JST
きゅーけー
ACL2 を動かす環境の選択肢が Emacs か Eclipse かの二択なのやばい気がする。こういうことが結構あるので、エディタの選択で迷っている人には Emacs をおすすめしたくなる。https://www.cs.utexas.edu/users/moore/acl2/manuals/current/manual/index-seo.php/ACL2____EMACS
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 10:49:48 JST
きゅーけー
用意された例題ではなくて、自分が適当に証明しようとしたものも証明できるのは結構嬉しいな。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 10:40:13 JST
きゅーけー
初めて ACL2 のドキュメントをみたときには、ACL2 に証明させるための補題を与えるとか難しすぎて、たぶん自分でやった方が早いとか思ったんだけど、意外といけるんだよな……。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 10:36:37 JST
きゅーけー
ACL2 は最初の学習コストはめちゃくちゃ高いと思うんだけど、それさえ乗り越えればうまく ACL2 に自動証明させられるようになるので生産性と信頼性のバランスがとても良いのではないかと期待している。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 10:34:29 JST
きゅーけー
初歩的なチュートリアルはだいたい読み終わったので、そろそろ ACL2 を使って何かしてみたいけど特にやることがないので困ってる。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 10:32:41 JST
きゅーけー
リストの最後の要素を取得する関数とリストを逆順に並びかえてから先頭を取り出すのが同じであることの証明をした。key checkpoint を見て、「これは解けないのでは…」とか思ってしまったけどしばらくしたら car-rev-cdr を定義すれば証明できることに気づいた。勉強と経験を重なれば一瞬で証明できるようになるんだろうか…。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 09:18:28 JST
きゅーけー
loop を使いたくないとかいってたけど、むしろ loop は使った方がいいと確信した。https://www.cs.utexas.edu/users/moore/acl2/manuals/current/manual/index-seo.php/ACL2____LOOP_42?path=3603/6919/365/255
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Wednesday, 27-Jan-2021 08:39:46 JST
きゅーけー
Computer-Aided Reasoning: An Approach を買ってしまった……。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 13:03:01 JST
きゅーけー
ACL2 を使っていれば再帰じゃなくて loop マクロで書けと言われることはもうないのだ。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 13:01:27 JST
きゅーけー
ACL2 では末尾再帰ではない普通の再帰関数を書くことが正当化されるだけでも正直嬉しい。再帰で書いた方が証明しやすいので再帰をしようすることにははっきりとした正当性がある。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 12:52:40 JST
きゅーけー
機械が良い感じに簡約したS式を生成して人に見せて、人がS式を読みとって機械にアドバイスをするという循環なんだけど、これはS式でないとかなり厳しいのではないかと思っている。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 12:49:42 JST
きゅーけー
末尾再帰で書いた高速だけどなんかよく分からん関数と普通に再帰で書いた関数が等しいことを証明する手段を手にしたのは、長年の夢を叶えた感がある。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 12:41:23 JST
きゅーけー
ACL2 は定理の証明を自動で探索してくれるんだけど、少し複雑なだけの定理でも普通に失敗する。そこで人間がその定理を ACL2 に解かせるのに必要な補題を考えたり、証明の方向性をミスっているときは ACL2 にヒントを与えてあげたりするのだ。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 12:35:06 JST
きゅーけー
停止性の証明については定理証明手習いで学んだ。厳密には理解してないんだけど、再帰する度に引数がなんらかの尺度(順序数)で小さくなっていくやつは停止性を証明できるという認識でいる。https://www.lambdanote.com/products/littleprover-ebookonly
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 12:27:56 JST
きゅーけー
@tacumi LISP 最高ですね!
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Tuesday, 26-Jan-2021 12:26:10 JST
きゅーけー
ACL2、AI と人間の対話という未来のプログラミング体験をしている気がする。