可逆計算

可逆計算（かぎゃくけいさん、英: reversible computing）とは、可逆な、すなわち計算過程において常に直前と直後の状態が一意に定まる計算。可逆計算は、計算過程において情報が消失しないため非破壊的計算（non-destructive computing）としても知られている。 この目的のために特に重要な、密接に関連する2つの主要な可逆性のタイプがある。それは、物理的可逆性と論理的可逆性である。 あるプロセスが物理的に可逆であると言われるのは、それが物理的エントロピーの増加をもたらさない場合である。これは等エントロピーであることを意味する。この特性を理想的に示す回路設計のスタイルは、チャージリカバリ論理、断熱回路、または断熱計算と呼ばれる（断熱過程を参照）。実際には、どんな非定常な物理プロセスも完全に物理的に可逆または等エントロピーにすることはできないが、システムの進化を記述する物理法則が正確に知られており、未知の外部環境との相互作用から十分に隔離されたシステムでは、完全な可逆性にどこまで近づくことができるかの限界は知られていない。 可逆計算を実現する技術の研究の動機の一つは、それがコンピュータの計算エネルギー効率（つまり、消費される単位エネルギーあたりに行われる有用な演算）を、不可逆ビット演算ごとに散逸するkT ln(2)のエネルギーというフォン・ノイマン＝ランダウアー限界を超えて向上させる唯一の潜在的な方法であると予測されていることである。ランダウアー限界は2000年代のコンピュータのエネルギー消費量の何百万分の一、2010年代のコンピュータのエネルギー消費量の何千分の一であったにもかかわらず、可逆計算の支持者は、これが実際の回路設計においてランダウアー限界の影響を大きく拡大するアーキテクチャ上のオーバーヘッドによるものが大きく、可逆計算の原理を使用しない限り、実用的な技術が現在のエネルギー効率レベルを大幅に超えることは困難である可能性があると主張している。 可逆ハードウェア 量子計算 可逆論理ゲート NOTゲート 制御NOT（CN）ゲート トフォリゲート（CCNゲート） フレドキンゲート 可逆計算模型 ビリヤードボール・コンピュータ 遷移函数が一対一である決定的チューリングマシンは可逆的である（可逆チューリングマシン）。 可逆セル・オートマトン 可逆命令セットアーキテクチャ Pendulum 可逆プログラミング言語 Janus Conservation 可逆難解プログラミング言語 難解プログラミング言語には実行する計算そのものは単純なものも多いため、可逆になるように修正するのが簡単なものもある。#外部リンク参照。 可逆アプリケーションソフトウェア エディタ（テキストエディタに限らず、ペイントソフトなども含む）の編集操作を、ドキュメントを状態 d1 から状態 d2 に変化させる関数 e(d1) → d2 だと見れば、アンドゥ（Undo）機能のあるエディタにおけるその操作の undo は e-1(d2) → d1 という逆関数とみなすことができ、全体として見て一種の可逆計算になっている（ただし、この場合は正確にはドキュメント本体以外に、アプリケーションが内部で持っている undo のための情報も関数の引数に含める必要がある）。 エンコーダとデコーダ: 通常、データをエンコードするエンコーダ、エンコードされたデータを元に戻すデコーダはそれぞれ別々に実装するが、非可逆圧縮などでなければ、可逆プログラミング言語で実装すると、エンコーダを逆に動かせばデコーダになる。 可逆計算、特にその原理とハードウェアに対する初期の興味は、計算のために必要なエネルギーはどれくらいか？ という計算理論と物理学が重なった問題と繋がっている。スーパーコンピュータから電卓まで、さらにはそろばんの珠を動かすのに必要なエネルギーまで、計算のためには何らかの最低限必要なエネルギーというものがありそうに現実的には思える。 しかし、チャールズ・ベネットが明らかにしたところでは、フォン・ノイマン＝ランダウアーの限界に従ってエネルギーが消費されるのは、情報が失われる時であると結論された（マクスウェルの悪魔も参照）。このことから、可逆計算はエネルギーを消費することなく（正確には、必要なだけゆっくりと過程を進めることにより、いくらでも少ないエネルギーで）行うことができる。 もちろん、現実の物理法則に従って、どうやればそのようなコンピュータを作ることができるか、は別の問題であり、我々が現在使っているパーソナルコンピュータや携帯情報端末の消費電力を、明日にでもどうこうできる、といったものではないし、ランダウアーの限界は我々が通常使っている集積回路の動作するエネルギーとは桁が違うものだが、理論では以上のように示されている。 近年の可逆計算に対する興味は、検証など様々な分野からのものがあるが、そのうちの一つに量子計算が挙げられる。量子計算は量子過程によって計算を行うものであり、量子物理学の法則は時間について可逆である。そのため、量子系にさせる計算に関して、そのモデルは可逆でなければならない。 IBMで働いていたロルフ・ランダウアーが最初に主張したように、計算過程が物理的に可逆的であるためには、論理的にも可逆でなければならない。ランダウアーの原理とは、nビットの既知の情報を忘却的に消去するためには、熱力学的エントロピーにおいて常にnkT ln(2)のコストが発生するという見解である。離散的で決定論的な計算過程は、古い計算状態を新しい計算状態にマップする遷移関数が 1 対 1 の関数である場合、すなわち、出力論理状態が計算演算の入力論理状態を一意に決定する場合、論理的に可逆的であるという。 非決定論的(確率的またはランダム的であるという意味で)の計算過程の場合、古い状態と新しい状態の間の関係は一価関数ではなく、物理的可逆性を得るために必要な条件は、わずかに弱い条件、すなわち、計算が進むにつれて、可能な初期計算状態の特定のアンサンブルのサイズが平均して減少しないという条件になる。 ファインマン, R. P. 著, ヘイ, A., アレン, R. 編, 原康夫他訳 (1999) 『ファインマン計算機科学』 岩波書店, ISBN 4-00-005941-6, 第5章 「可逆計算と計算の熱力学」. 森田憲一『可逆計算』（計算モデルが中心） ^ The Reversible and Quantum Computing Group (Revcomp) ^ Landauer, Rolf (1961), “Irreversibility and heat generation in the computing process”, IBM Journal of Research and Development 5 (3): 183–191, doi:10.1147/rd.53.0183, http://worrydream.com/refs/Landauer%20-%20Irreversibility%20and%20Heat%20Generation%20in%20the%20Computing%20Process.pdf 2015年2月18日閲覧, "The entropy of a closed system, e.g., a computer with its own batteries, cannot decrease; hence this entropy must appear elsewhere as a heating effect, supplying 0.6931 kT per restored bit to the surroundings."  ^ Vieri, Carlin James (1995). Pendulum:a reversible computer architecture (Thesis). ^ a b 「逆方向実行可能言語によるエンコーダとデコーダの同時実装」（ http://www.a-k-r.org/pub/2014-01-14-ipsj-pro97-akr.pdf , http://www.a-k-r.org/pub/2014-01-14-ipsj-pro97-presen-akr.pdf 2024年9月7日閲覧。） ^ 準静的過程のこと ^ ファインマンが「計算に必要な最小のエネルギー」という問題について調査を依頼されたのはカーバー・ミードからであった（『ファインマン計算機科学』 p. 123） ^ Landauer, R. (July 1961). “Irreversibility and Heat Generation in the Computing Process”. IBM Journal of Research and Development 5 (3): 183–191. doi:10.1147/rd.53.0183.  プロジェクト 数学 ポータル 数学 MicroPower: Towards Low-Power Microprocessors with Reversible Computing 2024年9月7日閲覧。計算の全てのレイヤを可逆にする、という「fundamental challenge」について、最後に述べられている。「Tower of reversible computing system」という概念を示すものとして言及されることがある。 Design of Reversible Computing Systems Logic, Languages, and Circuits (PDF) http://esolangs.org/wiki/Category:Reversible_computing Esolang（難解言語Wiki）の可逆計算カテゴリ