2006-08-19
λ. [desktop-architect:83] 文字 「〜」 問題
本質的には、日本語の波ダッシュをUnicodeの WAVE DASH として符号化するか FULLWIDTH TILDE として符号化するかという、Unicodeの運用の問題*1。そして、日本語の波線をダイアクリティカルマークであるチルダとして符号化するのは、日本語の表記として明らかな誤り。似たような誤りとして、例えば長音「ー」をダッシュ「—」として符号化することがある。
で、フォントの問題やWindowsとの互換性の問題に対処するために、波ダッシュを正しい符号である WAVE DASH から誤った符号である FULLWIDTH TILDE に置換する必要があるとしたら、その置換はどのレベルで行われるべきか。もし、IMレベルで置換を行うとしたら、そのような置換を必要としないアプリケーションにも誤ったデータを渡すことになり、誤ったデータが色々な場所で蓄積され続けることになる。そうやって考えていくと、結局そのような置換を必要とした箇所に出来るだけ近いところで置換を行うのが正しいように思える。フォントの問題で正しく描画できない問題については、フォントを書き換えるか、それが不可能ならフォントのレンダラやウィンドウシステムのレベルで置換を行い描画するか、それさえも不可能ならそれらにデータを渡す際にアプリケーション側で置換するのが望ましい。Windowsとの互換性の問題についてはWindows向けにデータを保存する際にアプリケーションが置換を行うのが望ましい。
結局、[desktop-architect:116]で、scim-anthyはデフォルトでは波ダッシュを FULLWIDTH TILDE でアプリケーションに渡すようになったようなので、今後もしscim-anthyを使う機会があったら気をつけようと思った。
2006-08-22 追記
Bottom Note (2006-08-22)に反応が。私も以前は文字コードに興味を持っていたので、この世界に問題が山のようにあることは知ってますし、私も正直あまり近づきたくないと思ってます。今回のは、よしおかさんの[desktop-architect:104]にちとムッとしたことからの気まぐれです。そもそも、真面目に首を突っ込むつもりなら、日記ではなくこのメーリングリストに書きますしね。
それはそうと、小熊さんには是非世界皇帝になってもらって、始皇帝ばりに(以下略)
2006-09-04 追記
Emacsで問題が出たそうな。
*1 たまたまIM側が内部ではEUCで処理を行ってるからレガシーエンコーディングの問題に見えるけど、IM側がUnicodeで処理を行っていても問題になる。
2008-08-19
λ. QMLで量子テレポーテーション
先日の圏論勉強会での量子テレポーテーションの話について、みんな色々書いているようだ。
参考:
- ベル状態、少し分かった、がやっぱりよくは分からん - 檜山正幸のキマイラ飼育記
- ベル状態について。 - hiroki_fの日記
- 勉強会その後:量子テレポーテーション - たけをの日記@天竺から帰ってきたよ
私もご多分にもれず悩んでいて、それで、ふと「プログラミング言語で書いてみたら分かり易くなるんじゃ」と思ってQML(c.f. 20080630#p01)で書こうとしたら、コンパイラのサンプルとして既に用意されていた。teleport.qml
記法
記法は論文「A functional quantum programming language」のときには
Qnot : qb -o qb Qnot x = ifo x then qfalse else qtrue
だったのが、
Qnot (b,qb) |- ifo b then qfalse else qtrue :: qb;
という形式に変更になっている。 判定(judgement)そのものに名前をつけた感じか。 ただ、文脈部分では (変数, 型) よりも (変数 :: 型) と書けるといいのにと思った。
ここで、ifo は観測を伴わないを伴わない分岐で、then式とelse式がstrictな項*1でかつ直交している必要がある。ifoを使うと、制御NotやEPRペアの生成は以下のように定義できる。
-- A quantum CNOT operation CNot (s,qb) (t,qb) |- ifo s then (qtrue,Qnot (t)) else (qfalse,t) :: qb*qb; -- The constant EPR pair Epr |- hF * (qtrue,qtrue) + hF * (qfalse,qfalse) :: qb*qb;
また、普通の if もあって、こちらは条件が不要で、代わりに decoherence を引き起こすようになっている。これを使うとqubitに対する観測は以下のように定義できる。
-- The measurement operator, using "if" Meas (x,qb) |- if x then qtrue else qfalse :: qb;
ifやcaseが観測に対応するというのは、遅延評価を行う関数型言語を使ったことがある人にとっては馴染み深いのではないかと思う。それらの言語でも、遅延評価されたサンクはある意味では値が確定していない状態であって、それに対してifやcaseによる分岐を適用することで評価が駆動されて値が確定するので。もちろん普通の関数型言語のサンクは干渉したりはしないけど。
teleport.qml
で、このteleport.qmlを読むと、量子テレポーテーションはまさに、たけをさんの日記に貼ってあった以下の図そのものなのね。
図の |00〉 + |11〉 の部分に相当するのが上で定義した Epr 。 そして、図の MBell に相当する以下の Bmeas では (Had ⊗ id)∘CNot を適用した結果に観測を行って 2bit の古典情報を得ている。QMLには古典情報用のデータ型といったものは特に用意されていないので、データ型としては qb*qb のままだけど。
-- The Bell-measurement operation Bmeas (x,qb) (y,qb) |- let (xa,ya) = CNot (x,y) in (Meas (Had (xa)),Meas (ya)) :: qb*qb; Bnmeas (x,qb) (y,qb) |- let (xa,ya) = CNot (x,y) in (Had (xa),ya) :: qb*qb;
そして、量子テレポーテーションの過程全体を表したのが、以下の Tele で、U では 2bit の古典情報をもとに4つのユニタリー変換のどれかを適用して、もとの状態を復元している。
Tele (a,qb) |- let (b,c) = Epr () in let f = Bnmeas (a,b) in U (c,f) :: qb;
Bmeas ではなく、観測を伴わない Bnmeas の方を用いているのは何故か結構悩んでしまったのだけど、たけをさんと話したら「U内部のifでdecoherenceは起こるのでプログラム的には変わらないから」ということのよう*2。
2009-08-19
λ. GabaでLevel 6のLPAを受けた
今日はgabaで Level 6 のLPA(Learning Progress Assessment)というのを受けてきた。わたしは、どうも間接話法(reported speach)が苦手のようだが、他には特に問題なし。 終了後にインストラクタの人と記念撮影もしたのだけど、記念撮影するなら、初めてのインストラクタじゃなくて、いつも受講しているインストラクタを選択して、LPAを受ければよかったな。