Coq 庵 - Coq プログラマのアンカンファレンス in 名古屋 (8/29) 25
ストーリー by reo
こかん 部門より
こかん 部門より
keigoi 曰く、
Coq プログラマーの集会が 2010 年 8 月 28 日に名古屋で開催されます。
証明支援器 Coq はソフトウェア開発における形式的手法の一つである定理証明のためのツールですが、Coq のプログラミング言語としての側面や、Coq でソフトウェアを開発できることは産業界はもとよりインターネットのプログラマ界隈においてもあまり知られていません。 Coq 庵は、Coq を用いたプログラミングや、Coq を用いたソフトウェア設計と安全性の検証にフォーカスし、自由な情報交換を目的としたアンカンファレンスです。 バグのないプログラムの開発、関数型言語や形式手法に興味のある方など ぜひともご参加ください。
- 日時 :2010/08/29 13:00 to 17:30
- 定員: 46 人
- 場所: 名古屋市青少年文化センター(ナディアパーク) 第3研修室 http://www.nadyapark.jp/traffic/
- 参加費: 200 — 300 [円] くらい
- 時間: 13:00 — 17:00
- 申し込み URL: http://atnd.org/events/6022
- twitterハッシュタグ: #CoqUn
yoshihiro503 というプログラマが主催しています。 Coq の普及のため、日本においてブログ投稿や毎月の Coq プログラマの集い等の活動をしているプログラマのようです。面白い Coq プログラミングの例として、Coq による迷路の最短路の自動解答プログラムを正しさの証明付きでブログに投稿しています (「にわとり小屋でのプログラミング日記」の記事) 。彼のブログには他にも Coq の記事が多くあります。興味がある方は是非ご覧になってください。
実用化 (スコア:1)
こういう理論に基づいた言語が普及するためにはなにが必要なのだろう?
C言語で書かれたライブラリを簡単に呼び出せること?
IDEがあること?
GUIが簡単に作れること?
JVM上で動くこと?
ブラウザで動くこと?
Apple,Microsoftが発売する/Googleが使っているとばれること?
Re:実用化 (スコア:2, すばらしい洞察)
適当なアプリケーションを作成するのに理論を理解することが不要であること.
Re:実用化 (スコア:2)
それは普及する原因ではなく普及した結果でしょう。 ML が普及していて、まだ C 言語が普及していない夢の世界では、「ポインター演算の理論が難しい」などと言われていそうな気がします。
Re:実用化 (スコア:1)
そんな高度なことを要求されても困ります.
業務システムでのエンドプログラマのレベルは
という具合で, 抽象的な思考は一切出来ないという前提で評価しないと, 言語の実用性は判断できません. そういう意味ではC言語でさえ実用的には難しすぎて, 今日での業務プログラムでは以前のアセンブリ言語と同じく, 速度やシステムの直接呼び出しが必要となる局面でもなければ使われることは少なくなりました.
Re:実用化 (スコア:2)
興味深いお話、ありがとうございます。 #1795494 [srad.jp] で書いたポインター演算というのが高度過ぎて例として適切でないなら、「ポインター演算の理論が難しい」と書いた部分を「破壊的代入の理論が難しい」とでも置き換えてください。 #1795494 の論旨は変わりません。
Re:実用化 (スコア:1)
そもそも、証明すべき性質を形式的に定義する事自体も、専門的で複雑な作業だから、普及しない。
日本語などの自然言語で仕様書を書いたり、プログラムのテスト仕様を作成する人が、
coqで使われているような理論を理解すれば、自分たちの作業が、理論的な厳密さから
いかにかけ離れているのかということが理解できると思う。
実用的な立場からいえば、多少の不具合やあいまいさがあっても、現実的な作業量で充分役に立つソフトウェアが開発できれば、
それでよいとも考えられる。
Re:実用化 (スコア:1)
自分で書いたプログラムは可能なら部分的にでも証明するようにしてるが、皆はやってないのかな?
もちろん、証明したからといって正しいプログラムが保障されるわけじゃない。
証明命題自体が不適当な場合もあり、正しくても使えない場合もありでテストは必須だけど、試験実行では見つけられないバグを出すことができる。
the.ACount
Re: (スコア:0)
どうしてこう極端なんだろ。
Re:実用化 (スコア:1)
証明しなかった部分は、当然不具合が残る可能性がありますよ。
普通の開発においても、障害が出るのはもともとテストや考慮が不十分だった部分の場合も
多いですし。
Re: (スコア:0)
ありますが、何か問題でも?
それでも従来のプログラミング言語よりはバグは少なくなるでしょう。それで満足できないのですか?
本質的には強い型付けやコントラクトやアサーションとかわるものではありません。あれらはバグを完全になくすためのものではありませんが、十分役に立っていますよね?
Re:実用化 (スコア:1)
他の方法を実践するほうが、より現実的だというのが私の感想です。
たとえば、より強い型付けの強い言語であれば、コンパイルするだけで異常を発見できるでしょうし、
コントラクトやアサーションは適切なテストケースにより、実行時エラーとして異常を発見することができるでしょう。
しかし、定理証明支援システムを部分的にでも導入するのであれば、それが部分的であろうとも、
理論に基づいた厳密な証明が必要とされます。
その厳密さが手間であり、部分的な正しさが検証できれば良いというのではあれば、強い型付けやコントラクトやアサーションの
ほうが、一般的に手軽なのではないかと考えます。
もちろん、すべての状況にあてはまるわけではないでしょうから、
役に立つとお考えであれば、定理証明支援システムをご利用されてはいかがでしょうか。
Re: (スコア:0)
証明主導でプログラムを書くのはたしかに頭の切り替えが必要ですが、(それでも関数型言語へのシフトを考えればもう一歩踏み出す程度でしょう)
依存型をちょっと使うことすら手間だと考えておられるのが不思議でなりません。
Re:実用化 (スコア:2, 興味深い)
依存型主導でのプログラムの導出や証明について、
一部の人たちを除いて、世の中の多くのプログラマが実践できることではないと考えます。
旧世代のプログラミング言語しか利用しない開発者や、
プログラミング言語自体を理解しない方たちがいるこの業界において、
これが手間でないとか、手間と考えるのが不思議でならないというのは、現実的でないと思います。
もちろん、特定の領域においては、実用の余地があると思いますが。
Re: (スコア:0)
Re:実用化 (スコア:2)
依存型を持つプログラミング言語は、勉強してみようと思って Agda のチュートリアル [chalmers.se]を読み始めてはいるものの、まだ自分で触ってみたことはありません。
証明主導でプログラムを書かずに「依存型をちょっと使う」というのが想像できずにいるのですが、特に依存型を使いたい部分だけ使って、大部分は普通に ML や Haskell のようにプログラムを書くというのは可能なのでしょうか。
Re: (スコア:0)
たとえば、行列の行数や列数を型に含めることができますので、行列の乗算などジェネリックな関数を安全に書くことができます。
型推論は処理系がやってくれます。
Agdaはいろいろ面倒なところもありますが、ATSのほうは比較的すぐ使えると思います。
http://www.ats-lang.org/ [ats-lang.org]
逆に、「スタックに値をプッシュしてポップするとスタックと値が元に戻る」という証明を型で書く時は、頭を切り替える必要がありますね。
証明自体は簡単ですが、確かに慣れないと雲をつかむようなところがあると思います。
破壊的代入に慣れた人が、関数的プログラミングをするときは最初は戸惑うと思いますが、それと似た感覚ではないでしょうか。私の場合はそうです。
Re:実用化 (スコア:2)
面白そうな言語の紹介、ありがとうございます。 ATS では
が合法なのですね。 Agda では停止が保証されていない関数は定義できないので、素人目には、根本的に考え方が違うように思いました。 ATS の方が入りやすそうなので、そちらを先に見てみたいと思います。
Re:実用化 (スコア:1)
証明を与えるって, どんな人ならできるんですか? 経理とか生産管理をしている人はできるんですか?
Re: (スコア:0)
8月の月末は名古屋が熱いのか (スコア:1)
INRIAへのリンクに釣られてやってきましたが、月末の名古屋、あれれ?と思ったら、OCaml Meeting 2010 in Nagoya (8/28) [atnd.org]の次の日かな?
面白そうだが、土日に名古屋へ遠征する体力がないぞ(苦笑
バグのないプログラムの開発 (スコア:0)
「絶対儲かる投資のご紹介」とかと同様無条件に引いてしまうんですが...
何だっけ、5年以上前、バグのないソフトが書ける設計手法だかなにか
提唱している人いませんでしたっけ。中堅どころのベンダーかなにかが
採用とか聞いてあちゃーと思ったけど、あれ、どうなったんでしたっけ。
Re:バグのないプログラムの開発 (スコア:1)
ぜひ、議論の続きを。
Re: (スコア:0)
二重否定しているものを否定して3重否定?
> プログラムのバグの方は,もっとずっと簡単で,完全に潰せる問題だと思います
と書いてあるけど つまりは「ソフトウェアのバクは無くせる」ってこと?
実装上のバグが無くなるってかなりすごいことだと思うけど。
Re: (スコア:0)
元の人の発言は、
「仕様記述を間違って実装に落としたバグ」
を考慮して無いなら論外でしょう。
経験上、これが一番多いです。
人為的ミスなので、システムでどうこうするのも困難。
次は (スコア:0)
新言語「Taq」を作って、みんなと一緒にTaq 庵でゴハンを食べるんだ。