パズル的な問題を知識論理で書いてみた
こんな問題見かけました。
2≦m≦n なる自然数(m,n)に対し,Aはm*nの値のみを知っている,Bはm+nの値のみを知っている.A「m+nの値は分からない」B「君がそう言うことは分かっていた」A「まだm+nの値は分からない」B「m+nは14未満だ」A「mとnが分かった」B「私も分かった」さてm,nは?
http://twitter.com/#!/kakenman/status/139943992283496448
こういうのを一度きちんと知識論理使って書いてみたかったのでやってみた。
- iff
- iff
として, に対して を「 ならば 」であることと定義しましょう。 も同様に定義します。このとき
とすると,これは A「m+nの値は分からない」B「君がそう言うことは分かっていた」 のやりとりが発生しうる (m, n) の全体となります。以下同様に
がそれぞれ A「まだm+nの値は分からない」B「m+nは14未満だ」A「mとnが分かった」B「私も分かった」 に対応して,最終的に に入っているものが解となります。
たぶん。
MLG meeting
MLG meeting に参加していたので,感想みたいなもの。
前から思っていたことではあるけど,もっといろんな本や論文を読んで,論理のいろんな見え方を知りたい。多値論理と直観主義論理とか,僕が知らないだけで,もっと密接に関係しているんじゃないか,とか思った。
多値論理については,単にそういうものが存在するという事実とか,形式的な定義だけは本を読んでなんとなく知っていたりするけど,それだけじゃあまり意味がないんだと思う。もっと気持ちの部分まで自分なりに理解しておきたい。そうすることで視野が広がりそう。
GCJ Japan 2011 予選
参加しました。夕方までバイトしてたので空き時間に問題だけ見て,終わってからコード書きました。
A は,カットの回数が少ないのでシミュレーションでできるんだろうと思ったらできました。けどちょっとめんどくさかったです。こういう手続きを書くのは苦手なので,まず紙に擬似コード書いてからと思ったんですが,紙にうっかり OCaml のコードを書いてしまったので OCaml で実装することになりました。space separated list of integers な入力の読み方がしばらくわからなくて困りました。
B は問題文全体の雰囲気から DP かなあと思ったけど実際に問題文読んでみたらそうでもない感じで,じゃあなんとなく LP だろうかと思ったりしつつ放置しました。他の問題を解いた後でよく考えてみたら貪欲でできるみたいです。日付の後ろのほうから満足度が大きいものを取っていきます。実装終わらなかったのですけど,たぶん。
C は少し考えてもよくわからなかったので,これはたぶん人の手ではなく宇宙の神秘により解けるんだろうと予想して,とりあえず bruteforce しました。そうするとやっぱり規則性がありそうなので,たぶんそういうことなんだろうと思って submit したら通りました。
skk-comp + auto-complete のようなもの
skk の補完機能,補完候補一覧が出てほしいなと思っていて,探したけどみつからなかったのでなんとなくそれっぽく書いてみた。
(defun mylib-ac-source-skk-comp-candidates () (when skk-henkan-mode (skk-comp-get-all-candidates (buffer-substring-no-properties skk-henkan-start-point (point)) nil skk-completion-prog-list))) (add-to-list 'ac-trigger-commands 'skk-insert) (defvar ac-source-skk-comp '((candidates . mylib-ac-source-skk-comp-candidates) (prefix . "▽\\(.+\\)"))) (setq-default ac-sources (cons 'ac-source-skk-comp ac-sources))
suspend/hibernate から復帰後にマウスポインタ消える
という現象が起きていたので直し方を探しました。
/etc/pm/sleep.d/99mousecursorworkaround (ファイル名は先頭の 99 以外は適当) に
#!/bin/sh case "${1}" in hibernate) #nothing ;; resume|thaw) chvt 1 chvt 7 ;; esac
みたいなのを置いて chmod +x してやるとよいらしいです。どこかに転がってたのほとんどそのままですが。
復帰後に modprobe appletouch してもよいみたいなんですけど sleep.d の下に置くとうまくいきませんでした。99 だとタイミングが早すぎるとかだろうか,よくわからないのですが。
Ubuntu 10.04 で stumpWM の続き
http://d.hatena.ne.jp/lkozima/20110212/1297478453 に書いたやり方だと /usr/bin/stumpwm を書き換えてたんだけど,そんなことしなくてもよかったのでしない版。
/usr/share/xsessions/stumpwm.desktop を
[Desktop Entry] Name=StumpWM Comment=This session logs you into stumpWM Exec=env LISP=sbcl stumpwm Icon= Type=Application
のようにすると,それだけでよいらしいです。Exec のところを直しました。環境変数 LISP に使う処理系を入れておくとそれが優先されます。
Ubuntu インストール後にとりあえず入れたものたち
新しい PC に Ubuntu インストールしてからとりあえず使えるようになるまでに入れたものメモ。
- lv: なんか常用してるけど入ってなかったので。
- stumpwm: ウィンドウマネージャ。clisp と sbcl が黙ってても一緒にインストールされました。
- emacs23: これがないといろいろなことができない人です。
- emacs23-el: よくソースを見たくなるので。
- ddskk: ないと日本語の入力に困る人です。
- libnotify-bin: たまに emacs から notify-send を呼びます。
- cl-clx-sbcl: clisp が cl-ppcre のロード中にこけるので stumpwm を sbcl で使おうとしたら要求されました。
- ccrypt: ファイルの暗号化をします。emacs 経由で使ってます。