このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

Pure構文、ほんとに意味不明

一番上はOK、NGとコメントしてあるのは構文エラー

definition "right_unit_law == (!!n.(n + 0 == n))"

definition "right_unit_law1 == !!n.(n + 0 == n)" (* NG *)
definition "right_unit_law2 == (!!n. n + 0 == n )"
definition "(right_unit_law3) == (!!n.(n + 0 == n))"
definition "(op ==) right_unit_law4 (!!n.(n + 0 == n))" (* NG *)

definitionで使う == は、オペレータではなくて、区切り記号なのだろう。よって、最後がNGは分かる。二番目のNGは分からない。!!n.(n + 0 == n) は式として正しい。だが、定義の右辺になれない。括弧付ける必要がある、って何故?

[追記]==が左結合的だからだろう。だが、最初に出現する == は区切り記号で、オペレータの意味がないのなら、結合性をどうこう言ってもしょうがない、と思う。パーザーの実装上の都合か。

定義の際に、オペレータである==の記号を区切り記号に流用したことが、そもそも変だと思う。[/追記]