1+2と1+1

森毅さんが書いていたのだったかな？ 「1+2はできるが、1+1はできない子」の話を読んだことがあります。ちゃんとは憶えてないのですけど、だいたい次のようなことだったかと：

大人：まず1があるだろう。

子供：うん。

大人：そこに2を持ってきて。

子供：うん。

大人：一緒にしたらいくつだ？

子供：3

と、1+2=3はOK。

大人：まず1があるだろう。

子供：うん。

大人：そこにまた1を持ってきて。

子供：えっ、1はさっき持ってきちゃったから、もうないじゃん。

大人：別な1を持ってくる。

子供：別のだったら、1じゃないでしょ。

僕も似た感覚を持ったことがあるので、この子の発想は理解できます。計算結果を出す前に、計算式を組み立てるとして、そのとき、□+□ のようなテンプレートを考えましょう。また、このテンプレートとは別に、（一桁の数に限定して）1から9の数が書いてあるカードがそれぞれ1枚ずつ準備されているとします。

テンプレート □+□ がある。 カード[1]を持ってきて、最初の四角にはめ込んで 1+□。 カード[2]を持ってきて、次の四角にはめ込んで 1+2。

この手順はOK。しかし、

□+□ がある。 カード[1]を持ってきて、最初の四角にはめ込んで 1+□。 カード[1]を持ってきて、ってもう使っちゃってるから、できない。

カード[1]はすでに消費しちゃっているから、2回は使えないってわけです。

タプルの片一方を取り出す

今度はタプル（特にペアの場合ですけど）のテンプレート (□, □) を考えます。四角には、やはりカードをはめ込むとして、(1, 2)、(2, 1) などを作れます。各数値ごとのカードが1枚ずつだと (1, 1) は作れません。（同じ数のカードがイッパイあることにすれば、(1, 1)も作れます。）

さて、タプル（ペア）(1, 2)の一番目を取り外すと (□, 2)です。手元には数値のカード[1]があります。この操作は、タプルの第1成分を取り出す射影（projection）と呼ばれるものです。ここで問題は、残っている(□, 2)のほうです。これにはカード[2]が1枚はめ込まれたままになっていますが、どうしたものでしょう？ 普通は気にしない、つまり、残ったカードとテンプレートを捨ててしまいます。最終結果は手元のカード[1]だけです。

もし、「空っぽのテンプレートは捨ててもいいが、カードが1枚でも入っているテンプレートは捨ててはいけない」という規則があると、(1, 2)を[1]と(□, 2)に分けることはできても、[1]だけを単独で取り出すことはできません。

リソースに敏感になる

いま問題にしているのは、

数値のカードを素材にして、式1+2とかタプル(1, 2)を作ること 逆に、組み立てた式やタプルから素材を取り出すこと

です。通常は意識してないのですが、式やタプルを自由に組み立てるには素材のカードを複製（コピー、クローン）する必要があります。そうでないと、1+1も(1, 1)も作れません。それと、式やタプルの一部にだけ注目して取り出すには、取り出した部分以外を捨てる操作（破棄）も潜在的に行われています。

複製や破棄を明確に意識することは、数値や記号を物体のように扱うことです。物体の複製や破棄にはかならずコストが伴います。場合によっては、完全な複製を作ることや、迷惑をかけずに捨てる／破壊することは不可能かもしれません。

冒頭の「1+1ができない子」は、数値や記号を物体扱いするセンスを持っていたわけです。このようなセンスを、リソースに敏感（resource sensitive/aware）と呼びます。ここでリソースとは、数値や記号のような抽象的なモノを物体扱いした概念と思ってください。

コンピュータによる記憶や計算では、メモリ、ディスク、CPUなどの“リソース”が使用され、複製も破棄（ゴミ管理）もコストがかかるので、リソースに敏感な態度はコンピューティング・サイエンスでは自然ともいえます。

奇妙な論理と現象の世界

前節のタプル（ペア）の計算／処理では、次の図式で示される A → (A, A)、(A, B) → A という操作が（暗黙的である明示的であれ）使われていました。

A 素材 ----------------[重複タプルを作る] (A, A) タプル (A, B) タプル ----------------[第1成分を抜き出す] A 素材

論理の世界で似た操作は、次のものでしょう。ただし、AやBは数値や記号ではなくて、命題（論理式）です。

A 仮定 ---------- A∧A （AかつA） A∧B 仮定（AかつB） ----------- A

これは、「正しいことを（しつこくも）二度言っても正しい」、「2つとも正しいなら、そのうちの一方は正しい」ことなので、あきれるくらいに当たり前です。

にもかかわらず、リソースに敏感な態度をとると、命題（論理的な主張）もリソースと考えることになります。正しいことを言って、その影響が他に及んでしまうと二度目は言えないかもしれません。また、A∧B が正しいのは、あくまでも組み合わせとして正しくて、A, B単独で正しいことは保証されないかもしれません。

と、こう述べてみると、論理にリソースに敏感な態度を持ち込むのは異常なことに思えます。リソースに敏感な論理は線形論理（linear logic）と呼ぶので、この言葉を使えば、「線形論理は異常だ、奇妙だ、変態だ」というわけです。実際僕はそう思っていました。

しかし、先日の「ボブ・クックの『物理系実務者のための圏論入門』」で紹介した圏論的量子力学／量子情報学の基礎的前提を眺めていると、量子情報（量子的真偽値、量子的命題と言ってもいい）は完全に複製することも、破棄することも許されていません。これは、人為的な仮定ではなくて、物理的な法則がそうなっているようです。

となると、人間の論理（古典論理*1や直観論理）から見ていくら奇妙でも、自然現象の論理は線形論理になっていると認めざるをえないようです。

そして、計算現象の論理もどうも線形論理みたいなのです。その理由のひとつは、コンピュータによる計算が実際にリソースに敏感だとういうこと。また別な理由として、計算も結局は自然現象（物理現象）に支えられているという事実があるでしょう。手作業で行う計算でも、紙がなくなったり鉛筆が折れたら中断しちゃうし、やってる人間が疲労して間違ったりと、確かにリソースに敏感ですものね :-)

とまー、そんな事情で、線形論理を毛嫌いしているわけにもいかないのかなー、と思っているこの頃…