haskell-ja > Archives > 2013/04/11

2013/04/11 14:56:20 UTCcutsea110
#
agdaで data List (A : Set) : Set whereとあるところで
#
data List : (A : Set) -> Set whereというのはダメなのね。
#
なんか型コンストラクタだという風に考えると
#
こう書けてもよさそうなのになんか納得いかないんだけど、どういうことなんだろう
#
あと、Vecとかも
#
Vec (A : Set) : (n : Nat) -> Set where
#
#
data Vec : (A : Set) -> (n : Nat) -> Set where
#
とかダメなのだけどAとnで扱いが違うのナットクいかん。
#
さらにVecのコンストラクタで_::_ : {n : Nat} -> A -> Vec A n -> Vec A (suc n)
#
のところでinplicit argの{n : Nat}が必要っぽいんだけどなんで?
#
data宣言の部分に登場しているのは関係ないの?
#
このあたりがどのチュートリアルも天下り式に書いてあって、きちんとしたルールが見えないので応用がきかない。というか自分で書くとtry&errorになってストレスにしかならん。誰か分かりやすくおねがい!!
2013/04/11 15:02:57 UTCikegami__
#
Agda のはなし、ここでするのは off-topic な感ありますが
2013/04/11 15:03:18 UTCcutsea110
#
ま、そうなんですけどね。
2013/04/11 15:03:25 UTCikegami__
#
それはさておき、寝て起きてから、なにか教えます
2013/04/11 15:03:38 UTCcutsea110
#
わぁ、ありがとうございます!
#
私も寝ますゆえ。
2013/04/11 15:03:53 UTCikegami__
#
教科書的な答を言うと、Agda mailing list に投げれば素早く帰ります
#
notogawa さんは、ここ見てたら、何を読んでそこまで理解できたか、皆さんと共有してください…
#
ぼくは nethack の不思議を知るのにソースコードを grep するのが好きなので、これはとうていお勧めできない
#
Haskell の話なんですよということを言うと、Agda の構文木は src/full/Agda/Syntax/Abstract.hs の data Expr (snip) にあるので、起点はここです
2013/04/11 15:08:36 UTCkonn
#
最後の部分に関しては、Agda のデータ型は基本的に Haskell でいう GADTs で、GADTs は型引数の形をコンストラクタで制御出来るようなデータ型なので、一般に宣言部の型と、データ構築子で導入する型が一致していたら嬉しさがないですよね。
2013/04/11 15:11:01 UTCikegami__
#
???具体例を出せますでしょうか
#
それはともかく、最初の質問の List なり Vec なりの : の前後、なにがちゃうねんというのは
#
http://oxij.org/note/BrutalDepTypes/#more-type-families-and-less-unification
#
がよいと思います(他にもあればご指導ください)
2013/04/11 15:15:35 UTCkonn
#
ん、ああ、すいません、ちょっと勘違いしてました
#
: の左側は型パラメタとして定義全体で共有されるけど、右側は後で受け取られるパラメタなわけですね
#
たとえば、上の Vec の定義の頭の部分は
#
data Vector (A : Set) : Nat → Set where
#
と書いても問題がないのです。 Nat が何かは後で決まるから
#
で、その Nat が何かを知るために、implicit parameter が必要になる……というのは駄目でしょうか
2013/04/11 15:21:25 UTCikegami__
#
かならずしも必要ではない、というのが状況に混乱をもたらします
#
http://www.cs.nott.ac.uk/~txa/g53cfr/l04.html/l04.html
#
たとえば、こうも書けます
2013/04/11 15:25:05 UTCmaoe
#
すいません、ちょうど今僕もAgda書いているんですが、このNatのNはagda-modeでどうやって入力すればいいのでしょうか。チートシートが欲しい。。
2013/04/11 15:25:21 UTCikegami__
#
横道にそれますが、 chaton さんの文字コードなんだろう charset の宣言が見当たらないのでブラウザのデフォルト?
#
Nat の N は agda-mode が利用している agda-input で \bn です
2013/04/11 15:26:12 UTCmaoe
#
ありがとうございます!
2013/04/11 15:26:16 UTCikegami__
#
KANJI FEP ぽい
2013/04/11 15:27:45 UTCnotogawa
#
Agda Wiki上から辿れるpaperと標準ライブラリが情報源ですが,私は後者を眺めてる比率が大きいです.
2013/04/11 15:27:59 UTCikegami__
#
書きかけの agda-input チートシートはこちら : http://wiki.portal.chalmers.se/agda/agda.php?n=Docs.UnicodeInput
#
notogawa さんの Q にたいする DecTotalOrder みんな幸せになりそうですが、公式にマージしませんか(お給料でませんが…
2013/04/11 15:30:20 UTCnotogawa
#
あ,元々パッチ投げるつもりで書いてて
#
今ちょっとリファクタリングしてるとこです.
#
土日くらいには仕上げるハラヅモリで
2013/04/11 15:31:39 UTCmaoe
#
ikegami__: ありがとうございます。\toとかも知らずにATOKで変換してました。
2013/04/11 15:33:51 UTCkonn
#
\-> とか形状から類推しても入れられますよね。\--> とするとほんの僅かだけちょっと長い矢印が入力されたり(群準同型をあらわすのに -Group⟶ とか使ってたりする)
2013/04/11 15:38:25 UTCmaoe
#
おおすごい。これは便利だ。
2013/04/11 15:41:14 UTCikegami__
#
Thierry 先生に『日本語どうやって入力するの?』って聞かれて教えた記憶があるのですが、その後 Agda2 に実装されていて大変おどろきました(Emacs の達人がワザを見せたようだ
2013/04/11 15:48:03 UTCikegami__
#
IRC の freenode #agda も英語で質疑応答がなされており、それなりに active な様子です(僕は join してません
#
ここらへんに IRC のログがあります : http://agda.orangesquash.org.uk/2013/April/
2013/04/11 15:59:12 UTCikegami__
#
Agda の live coding を見つけました。 {n : Nat} を付け忘れて困ったのでやりなおし(11分あたり) とか見れます。そのままでは小さくて見えないので、右下にある拡大ボタンを適宜押してください :
#
URL 書いたら、ここにでてくるんだ…
2013/04/11 16:09:00 UTCmaoe
#
動画良さそうです。ありがとうございます。
2013/04/11 16:09:37 UTCikegami__
#
さかいさんも昔同じようなムービーを作っていた記憶があります
2013/04/11 23:44:24 UTCcutsea110
#
パラメータとインデクスの差ですか。パラメータはコンストラクタの宣言部でも同じものが見えるのですか。
#
入力に関しては私はagda-modeのagda-input.elを見て覚えたりしてます。まだちょくちょく確認しないと…だけど、よく使うものはなれてきました。¥bnとか¥->や¥(¥)とかのカッコ系くらいですけど。
#
パラメタとインデクスはUlfのチュートで順に説明されてたけど、型か値かの違いくらいに思ってていいのかな。
#
¥lambda¥_2¥^2¥allあたりも使うか。