javascriptでRDFをパースやっぱし、やっている人はいるもんだな。何かに使えそうな気がするのでメモ。(a->r)今日ちょっと混乱したことを元にクイズにしてみた。その手の人にはピンとくる問題。表記はHaskellのものを使ったが、実際には多相ラムダ計算の問題と考えていい。(a->r)」という型を持つ関数を定義せよ。問題の関数はこんな感じで定義できる。middle)を導く証明の計算的な表現だったりする。型はちょっと一般化してあるので、以下のようにより具体的な型にすると分かり易いかも*1。pで、面倒なので詳しい説明は省略するが、例えばNK(自然演繹の体系NJに二重否定除去規則を追加した体系)で排中律を証明すると、この関数の構造を反映した証明図が得られる*2。¬P他の体系での証明は誰かにまかせた。あろはさんはこの証明をCoqで表現してみると良い勉強になるかも。対応するものはcall/ccで実現できる。Haskellにはそれらは存在しないので多少回りくどい表現になっているが、一級継続とcall/ccが存在する言語では直接それらを使って排中律に相当するものを表現することが出来る。Schemeだと以下のような感じだろうか*3。a)))))))しかし、それにしても奇妙な定義と振る舞いである。載っていたお伽噺が面白かったので、引用する。データ構築子を持たない型はGHCの拡張機能なので注意。Absurd」とすればいい。ちなみに、一番上の仮定が左により過ぎているのはRD形式の制約ゆえ。何とかする方法はないものか。19:46)さっぱりわからないので、そろそろ答えを発表していただけるとうれしいです。20:39)りょーかい。01:43)同僚というか先輩が以下のを発見したのですが。01:49)はじめまして、mputさんの同僚(or先輩?)です。型推論させて一致させてみる」<br>ことだけを目的に書いたもんです。08:51)koyama41さん、はじめまして。<br>この定義だとfの再帰呼び出しが停止せず⊥になる点がまずいです。期待した答えでこそなかったですが、これはこれで面白い定義だと思いますし、結構惜しかったんじゃないかと思いますよ。<br>それと、推論した型にforallが出てこない点については、明示的に型を書けば型チェックが通るので問題ないです。GHCではそのような型を使う場合には明示的に書かなくてはならないことになっているので。(はてな版)日記は現代の病です。読み過ぎ書き過ぎはあなたの健康を害する恐れがあります。2.2.10-p489。