"古典プログラムを実行可能な古典コンピュータ機能部と量子プログラムを実行可能な量子コンピュータ機能部とを備え、前記量子コンピュータ機能部は、量子部、古典記憶装置及び制御装置を備え、前記古典記憶装置は前記量子部に対する操作命令の列である量子マイクロコードを記憶しており、該量子マイクロコードは、前記量子プログラムと、前記量子部での処理対象となる入力データと前記古典プログラムとに基づいて生成された中間データとから変換されたものであり、前記制御装置により、前記量子マイクロコードに記述されたシーケンスに基づいて前記量子部を制御することを特徴とする量子コンピュータシステム。請求項1において、前記量子部は、少なくとも1個以上のキュービットから構成される量子レジスタと、前記量子レジスタに対して操作を行う制御ゲートと、前記量子レジスタの状態を観測する読出しゲートとを有し、前記古典記憶装置は、前記量子プログラムから変換され、前記制御ゲートないしは前記読出しゲートに対する操作命令の列である前記量子マイクロコードを記憶し、前記制御装置は、前記古典記憶装置から前記量子マイクロコードを読み出して前記制御ゲートないしは前記読出しゲートを制御することを特徴とする量子コンピュータシステム。請求項2において、前記量子プログラムを前記量子マイクロコードに変換する量子コンパイラを有し、前記量子コンパイラは、前記入力データを前記量子マイクロコード内に埋め込んで出力することを特徴とする量子コンピュータシステム。請求項3において、前記古典コンピュータ機能部が前記量子コンパイラを有することを特徴とする量子コンピュータシステム。請求項3において、前記量子コンピュータ機能部が前記量子コンパイラを有することを特徴とする量子コンピュータシステム。請求項3において、前記制御ゲートないしは前記読出しゲートを前記制御装置が制御することで実現可能な操作の種類や制約などの前記量子コンピュータ機能部の機能を定義した、ハードウェア機能情報を有し、前記量子コンパイラは、前記ハードウェア機能情報で定義された制約を満たす前記量子マイクロコードを生成することを特徴とする量子コンピュータシステム。請求項3において、前記量子レジスタを構成する前記キュービットの其々について利用可否及びエラーレート等の情報を記憶するハードウェア制限情報を有し、前記量子コンパイラは、前記ハードウェア制限情報で利用可能なキュービットのみを用いた前記量子マイクロコードを生成することを特徴とする量子コンピュータシステム。請求項7において、前記ハードウェア構成情報は、前記量子レジスタを構成するN個のキュービットの各々に関して、利用可否、ステータス、及び、エラーレートを示す情報を含み、前記エラーレートは前記キュービットの、観測データと期待値とが異なるエラー率を記録したものであり、前記ステータスは前記各キュービットのエラーレートの状態を記録したものであることを特徴とする量子コンピュータシステム。請求項8において、前記キュービットの利用可否の判断ないしはエラーレートの測定を行うトレーニング用量子プログラムを有し、前記トレーニング用量子プログラムを実行して前記ハードウェア制限情報を更新することを特徴とする量子コンピュータシステム。請求項3において、前記量子レジスタ内の前記キュービットは隣接して配置された前記キュービット間のみで操作を行うことが可能なものであり、前記制御ゲートは、前記隣接して配置されたキュービット間の状態を交換するスワップ操作を有し、前記量子コンパイラは、前記量子マイクロコードに前記スワップ操作を挿入することを特徴とする量子コンピュータシステム。請求項3において、前記量子レジスタは、0,1,もしくは0と1の重ね合わせの状態を保持できる前記キュービットを1個以上有することを特徴とする量子コンピュータシステム。請求項3において、前記量子コンピュータシステムの量子アルゴリズムが、前処理フェーズ、本処理準備フェーズ、本処理フェーズ、及び後処理フェーズの少なくとも4段階で構成されており、前記前処理フェーズにおいて、入力データを入力として、古典オブジェクトを実行し、処理結果として中間データを生成し、前記本処理準備フェーズにおいて、前記中間データを入力とし、前記本処理を担う前記量子プログラムを前記量子コンパイラで量子マイクロコードに変換し量子マイクロコードを生成し、前記本処理フェーズにおいて、前記量子マイクロコードを前記量子部で実行行し、処理結果を観測レジスタに取得し、後処理フェーズにおいて、前記観測データを入力データとして前記古典オブジェクトを実行し、実行結果を取得することを特徴とする量子コンピュータシステム。請求項12において、前記量子コンピュータシステムは、常温部、低温部、及び前記常温部と前記低温部間の通信を行うための伝送路で構成されており、前記前処理フェーズ、トレーニングフェーズ、前記本処理準備フェーズ及び前記後処理フェーズを前記常温部で動作する前記古典コンピュータ機能部により実行し、前記トレーニングフェーズにより、前記量子コンピュータシステムを動作させ、前記量子部を構成する素子の動作を検査し不安定な可能性がある素子の使用を制限するハードウェア制限情報を取得し、前記本処理フェーズを、前記低温部で動作する前記量子コンピュータ機能部により実行することを特徴とする量子コンピュータシステム。請求項12において、前記量子コンピュータシステムは、常温部、低温部、及び前記常温部と前記低温部間の通信を行うための伝送路で構成されており、前記前処理フェーズ、及び前記後処理フェーズを前記常温部で動作する前記古典コンピュータ機能部により実行し、トレーニングフェーズ、前記本処理準備フェーズ、及び前記本処理フェーズを、前記低温部で動作する前記量子コンピュータ機能部により実行し、前記トレーニングフェーズにより、前記量子コンピュータシステムを動作させ、前記量子部を構成する素子の動作を検査し不安定な可能性がある素子の使用を制限するハードウェア制限情報を取得することを特徴とする量子コンピュータシステム。量子コンピュータシステムの制御方法であって、前記量子コンピュータシステムは、古典プログラムを実行可能な古典コンピュータ機能部と量子プログラムを実行可能な量子コンピュータ機能部とを備え、前記量子コンピュータ機能部は、量子部、古典記憶装置、及び制御装置を備え、前記量子プログラムと、前記量子部での処理対象となる入力データと前記古典プログラムとに基づいて生成された中間データとを変換して量子マイクロコードを生成し、該量子マイクロコードを前記古典記憶装置に記憶し、前記制御装置により、前記量子マイクロコードに記述されたシーケンスに基づいて前記量子部を制御することを特徴とする量子コンピュータシステムの制御方法。請求項15において、前記量子部は、少なくとも1個以上のキュービットから構成される量子レジスタと、前記量子レジスタに対して操作を行う制御ゲートと、前記量子レジスタの状態を観測する読出しゲートとを有し、前記制御装置により、前記制御ゲートないしは前記読出しゲートに対する操作命令の列である前記量子マイクロコードを前記古典記憶装置から読み出して前記制御ゲートないしは前記読出しゲートを制御することを特徴とする量子コンピュータシステムの制御方法。請求項15において、前記量子プログラムを前記量子マイクロコードに変換する量子コンパイラを有し、前記量子コンパイラは、前記入力データを前記量子マイクロコード内に埋め込んで出力することを特徴とする量子コンピュータシステムの制御方法。古典プログラムと量子プログラムの複合として構成された量子コンピュータシステムのプログラムであって、前記量子コンピュータシステムは、古典コンピュータ機能部と量子コンピュータ機能部とを備え、前記古典コンピュータ機能部は、前記古典プログラムを実行可能なCPUを備え、前記量子コンピュータ機能部は、量子部、古典記憶装置、及び制御装置を備え、前記古典コンピュータ機能部に、前記古典プログラム及び入力データを入力として、前記古典プログラムを実行して中間データを生成させる機能を実現させ、前記量子コンピュータ機能部に、前記量子プログラム及び前記中間データから変換された量子マイクロコードを前記量子部で実行させて観測データを取得する機能と、該観測データを前記古典コンピュータ機能部に転送させる機能とを実現させるためのプログラム。請求項18において、前記量子コンピュータ機能部は、前記量子プログラムを前記量子マイクロコードに変換する量子コンパイラを有し、前記量子部は、前記量子マイクロコードに記述されている処理を実行するリソースとして、少なくとも1個以上のキュービットから構成される量子レジスタと、制御ゲートと、読出しゲートとを備え、前記量子コンピュータシステムに、前記量子コンパイラが、前記量子プログラムと、前記量子プログラムが処理すべき入力データとを入力とし、前記入力データを前記量子マイクロコード内に埋め込んで出力する機能と、前記制御ゲートないしは前記読出しゲートに対する操作命令の列である前記量子マイクロコードを前記古典記憶装置に記憶する機能と、前記古典記憶装置から前記量子マイクロコードを読み出して前記制御ゲートないしは前記読出しゲートを制御する機能とを実現させるためのプログラム。請求項18において、前記量子コンピュータシステムは、前記制御ゲートないしは前記読出しゲートを前記制御装置が制御することで実現可能な操作の種類や制約などの前記量子コンピュータ機能部の機能を定義した、ハードウェア機能情報と、前記量子レジスタを構成する前記キュービットの其々について利用可否及びエラーレート等の情報を記憶するハードウェア制限情報とを有し、前記量子コンピュータシステムに、前記量子コンパイラが、前記ハードウェア機能情報で定義された制約を満たし、かつ、前記ハードウェア制限情報で利用可能なキュービットのみを用いた前記量子マイクロコードを生成する機能を実現させるためのプログラム。量子コンピュータを実用化するためには、汎用性と安定性を確保することが重要である。汎用性の面では、単に一種類の問題に対して効果を発揮するだけでなく、複数種の問題に対して汎用的に用いることができる量子コンピュータであることが望ましい。安定性の面では、量子コンピュータのデバイスを作製する技術はまだ発展途上にあり、量子レジスタの素子等の動作が不安定な可能性がある。そうした中では、素子が安定している期間に処理を終えるために、可能な限り処理に要する時間やステップ数を削減することが望まれる。換言すると、ユーザが処理すべき事項やデータの種類に応じて、量子回路のシーケンスを最適化し、素子が安定している短期間に処理できるようにしたいという汎用性に関する要求がある。また、将来的に大規模なデバイスを実現できるようになった段階では、素子数が莫大になるためシステム全体としては不安定になってしまう可能性がある。さらに、素子の故障に関しても、一時的な故障や恒久的な故障など、様々な故障モードを検討しなければならない。特許文献1の発明は、量子系の相違を踏まえた量子プログラム変換装置に関するものであるが、ユーザが、量子コンピュータを複数種の問題に対して汎用的に駆使することについては、開示されていない。例えば、ユーザが量子コンピュータのアプリケーションプログラムに処理させたいデータを与え、量子レジスタを構成する複数のキュービットの間でスワップを行って特定のキュービットを読み出すような処理に関して、ソフトウェアによる汎用的な処理をどのように行うかについては、開示されていない。また、量子レジスタの動作の安定性についての記載も無い。特許文献2の発明は、量子コンピュータのデバイスに関するものであり、このデバイスを備えた量子コンピュータのソフトウェア、特に、ユーザが使用するにあたっての汎用性や安定性についての記載は無い。特許文献3の発明は、量子コンピュータの複数の超伝導素子プログラム可能デバイスの制御に関するものであり、各超伝導素子の特性を外部から設定プログラムできるようにする技術である。特許文献3には、デバイスの特性を生かしてソフトウェアにより量子コンピュータのシステム全体をどのように制御するかについての開示はない。すなわち、ユーザが量子コンピュータを使用する上での汎用性や安定性についての記載は無い。本発明の主たる課題は、汎用性の高い量子コンピュータシステムを提供することにある。本発明は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、量子コンピュータシステムは、古典プログラムを実行可能な古典コンピュータ機能部と量子プログラムを実行可能な量子コンピュータ機能部とを備え、前記量子コンピュータ機能部は、量子部、古典記憶装置及び制御装置を備え、前記古典記憶装置は前記量子部に対する操作命令の列である量子マイクロコードを記憶しており、該量子マイクロコードは、前記量子プログラムと、前記量子部での処理対象となる入力データと前記古典プログラムとに基づいて生成された中間データとから変換されたものであり、前記制御装置により、前記量子マイクロコードに記述されたシーケンスに基づいて前記量子部を制御することを特徴とする。本発明により、ユーザが量子コンピュータに任意の処理を実行させるプログラムを生成することを可能とし、汎用性の高い量子コンピュータシステムを実現することができる。本発明の実施形態の一例を挙げるならば、量子コンピュータシステムは、少なくとも1個以上のキュービットから構成される量子レジスタと前記量子レジスタに対して操作を行う制御ゲートと前記量子レジスタの状態を観測する読出しゲートとを有する量子部と、古典記憶装置と、前記古典記憶装置にアクセス可能な制御装置とを備え、前記古典記憶装置は前記制御ゲートないしは前記読出しゲートに対する操作命令の列である量子マイクロコードを記憶し、前記制御装置は前記古典記憶装置から前記量子マイクロコードを読み出して前記制御ゲートないしは前記読出しゲートを制御する。これにより、量子コンピュータをプログラム可能とし、それにより本発明の課題の一つである汎用性を実現する。また、プログラム可能であることを利用して、故障等の問題に対してプログラムの動作を変更することで動的に対応し、量子コンピュータの安定性を高めることができる。よって、上記手段により、汎用的かつ安定的に利用することのできる量子コンピュータシステムを提供することができる。以下、本発明の実施例を、図面を用いて説明する。本発明の実施例1に係る量子コンピュータシステムを、図1~図16を用いて説明する。本実施例では、量子コンピュータがプログラム可能であることにより、汎用的かつ安定的に利用することができる量子コンピュータシステム100の例を説明する。図1は、本発明の実施例1に係る量子コンピュータシステム100の構成例を示す図である。後で述べる実施例も含めて、本発明の量子コンピュータシステムは、量子コンピュータと古典コンピュータの両方の機能を具備する。すなわち、量子コンピュータシステム100を、量子コンピュータの機能を具備する量子コンピュータ機能部と古典コンピュータの機能を具備する古典コンピュータ機能部とのハイブリッドシステムとして構成する。一般的に、量子コンピュータ向けのアルゴリズムこれ以降、量子アルゴリズムと呼ぶの構成は、古典コンピュータによる前処理、量子コンピュータによる本処理、古典コンピュータによる後処理の3段階に分類できるものが多い。例えば、有名な量子アルゴリズムであるShorの因数分解アルゴリズム非特許文献1は、前処理で本処理のためのパラメータを生成し、それを用いて本処理を行い、本処理で得られた結果を後処理して因数分解の結果を出す。本処理では因数分解が直接行われているのではなく、位数発見を行っている。前処理では、本処理の位数発見を用いて因数分解を行うために、位数発見のパラメータを生成する。後処理では本処理で発見された位数を元にして因数分解を行う。前処理と後処理を量子コンピュータで行うことも出来るが、量子コンピュータの特徴を生かして高速化することはできない処理である。そのため、前処理と後処理は、一般的には古典コンピュータで行う。このように、量子アルゴリズムは古典-量子のハイブリッド構成となっているものが多い。本実施例においても、古典コンピュータ機能部が前処理及び後処理部を備え、量子コンピュータ機能部が本処理部を備えている。また、量子コンピュータシステム100は、常温部101と低温部102を備えており、常温部101と低温部102の間は、通信を行うための伝送路103で接続される。すなわち、常温部101と低温部102は伝送路103を介して、互いにプログラムやデータを通信で送受することができる。一般的に、量子コンピュータのデバイスは低温の動作環境を要求するものが多い。例えば、量子コンピュータ機能部に、特許文献2に記載のデバイスを採用した場合には、4.2Kという非常に低い温度に冷却して利用する必要がある。このように、現在一般に用いられている古典コンピュータ機能部は常温動作を前提とし、量子コンピュータ機能部は低温動作を前提とて構成されているため、常温部101と低温部102に分離する必要性が理解できるであろう。本実施例でも、概ね、古典コンピュータ機能部が常温部101に、量子コンピュータ機能部が低温部102に対応する。しかしながら、本実施例の低温部102は、量子コンピュータ機能部のみならず古典コンピュータ機能部に相当する制御装置であるマイクロ制御部301を含んでいる。図2は、本実施例の量子コンピュータシステム100における常温部101の構成例を示す図である。常温部101のハードウェア構成は、現在一般的に用いられている古典コンピュータのハードウェア構成と基本的に同一である。常温部101は、主記憶装置201、CPU202、I/Oアダプタ203を具備する。主記憶装置201はアプリケーションプログラム210、システムソフトウェア220、ラインタイム情報230を保持している。CPU202は主記憶装置201が保持しているシステムソフトウェア220、及び、古典オブジェクト231を実行する。I/Oアダプタ203はCPU202の要求に応じて、伝送路103を経由して低温部102と通信を行う。なお、オペレーティングシステム等、現在の古典コンピュータが一般的に備えている構成要素に関しては、本実施例の量子コンピュータシステム100も当然備えているが、説明を省略する。アプリケーションプログラム210は、量子コンピュータシステム100で処理したい問題毎に用意されるプログラムである。前述した通り、量子アルゴリズムは古典コンピュータ機能部で実行する前処理及び後処理部と、量子コンピュータ機能部で実行する本処理部からなる。これに対応してアプリケーションプログラム210は、古典プログラム211と量子プログラム212の複合として構成される。古典プログラム211は、例えばC言語のようなプログラミング言語で記述されたプログラムであり、前処理及び後処理でCPU202が行うべき処理を記述している。量子プログラム212は、本処理で低温部102が行うべき処理を記述している。量子プログラム212は古典プログラム211と同様にプログラミング言語で記述することも可能であるし、ユニタリ行列や量子回路として表現しても良い。システムソフトウェア220は、アプリケーションプログラム210をCPU220及び低温部102上で動作させるために必要な制御や操作をCPU202に行わせるためのソフトウェア群である。システムソフトウェア220は古典コンパイラ221、量子コンパイラ222、及び、実行マネージャ223から構成される。古典コンパイラ221は古典プログラム211をCPU202上で実行可能な形式である古典オブジェクト231に変換するためのソフトウェアである。現在一般的に用いられているプログラミング言語の処理系と同義と考えて良い。量子コンパイラ222は量子プログラム212を低温部102上で実行可能な形式である量子マイクロコード232に変換するためのソフトウェアである。実行マネージャ223はアプリケーションプログラム210に入力データ233を入力して処理結果を得るために、システムソフトウェア220による処理や、常温部101と低温部102の間のデータ転送など、必要となる処理の全体制御を行うソフトウェアである。ランタイム情報230は、アプリケーションプログラム210の実行時に必要となるデータ、ないしは、実行の過程で一時的に生成されるデータやコードである。ランタイム情報230は古典オブジェクト231、量子マイクロコード232、入力データ233、中間データ234、及び、観測データ235から構成される。古典オブジェクト231は前述した通り、古典コンパイラ221によって生成されたCPU202が実行可能なコードである。量子マイクロコード232は前述した通り、量子コンパイラ222によって生成された低温部102が実行可能なコードである。入力データ233は、アプリケーションプログラム210を利用するユーザが用意するデータで、アプリケーションプログラム210に処理させたいデータである。例えば前述した因数分解の例では、因数分解するべき合成数が入力データ233となる。すなわち、入力データ233は、量子コンピュータ機能部の量子部を用いて処理される対象となるデータである。中間データ234は古典プログラム211による前処理で生成されるデータである。観測データ235は本処理で生成されるデータで、本処理を実行する低温部102から常温部101に転送されてきたものである。図3は、本実施例の量子コンピュータシステム100の低温部102の構成図の例である。低温部102は、マイクロ制御部301、観測レジスタ302、I/Oアダプタ303、量子部310、命令バッファ320から構成されている。I/Oアダプタ303は伝送路103と接続され、常温部101が発したデータ転送要求を受け取り、命令バッファ320への量子マイクロコード321の格納、マイクロ制御部301への実行の指令、観測レジスタ302からのデータの取得などを行う。量子部310は量子コンピュータ機能部の中核部分であり、量子マイクロコード321に記述されている処理を実行するリソースを有する。量子部310は制御ゲート311、量子レジスタ312、読出しゲート313から構成されている。量子レジスタ312は、0、1、もしくは0と1の重ね合わせの状態を保持できるキュービットを1個以上有する。キュービットの構成方法に関しては、例えば特許文献2に記載されている。図4に、本実施例における量子レジスタ312を構成するキュービットブロック400の構成の一例を示す。ここでキュービット410は、2個の量子ドット411,412を連結した二重量子ビットとして構成される。また、バリアポテンシャルの高さを制御するために、制御ゲート420,421,422,430,431,432がキュービット410に付随しており、これらを組にしたキュービットブロック400として、ハードウェアの構成要素ビルディングブロックとなる。図5に、本実施例における量子部310の構成の一例を示す。前述した通り、量子部310は制御ゲート311、量子レジスタ312、読出しゲート313から構成される。このうち、量子レジスタ312は図4に示したようなキュービットブロック400を1個以上並べることで実現される。図5の例では、量子レジスタが、キュービットブロック501,502,503,504の4個を並べて構成されている。また、制御ゲート311は各キュービットブロック内に置かれている図4の制御ゲート420,421,422,430,431,432。なお,これ以降、キュービットブロック501,502,503,504内の各キュービット410のことを指し示す場合には、単にキュービット501,502,503,504と呼称する。加えて、量子レジスタ312キュービットブロック501,502,503,504の周囲には、各キュービットの初期化を行うための制御ゲート311として、制御ゲート511,512,521,522も置かれている。読出しゲート313は、量子レジスタ312キュービットブロック501,502の周囲に置かれた単電子トランジスタ531,532として実現される。これ以降、量子レジスタ312はキュービットをN個持つNキュービット量子レジスタであるとする。なお、このNキュービット量子レジスタは000...0000がN個から111...1111がN個までの2N個の状態の重ね合わせを表現する能力を持つ。制御ゲート311は量子レジスタ312の1個ないしは複数個のキュービットに対して操作を行うためのゲートである。例えば量子レジスタとして特許文献2に記載のキュービットを採用した場合には、電圧を印加することで操作を行う。制御ゲート311で行える操作としては、初期化キュービットの状態を0ないしは1に初期化する、アダマール変換、及び、制御NOT等がある。マイクロ制御部301の指示によって、制御ゲートは量子レジスタ312の中の指定されたキュービットに対して、指定された操作を行う。読出しゲート313は、量子レジスタ312の1個ないしは複数個のキュービットの値を観測して読み出すためのゲートである。マイクロ制御部301の指示によって、読出しゲート313は量子レジスタ312の値を観測し、観測結果を観測レジスタ302に格納する。この時、観測対象となるキュービットはマイクロ制御部301から指定される。なお、観測に伴い、観測されたキュービットの状態は0と1の重ね合わせから、0若しくは1の何れかに収束する。命令バッファ320は、量子マイクロコード321を保持している。この量子マイクロコード321は、常温部101の量子マイクロコード232が伝送路103経由で転送されてきたものである。観測レジスタ302は、前述した通り量子レジスタ312の観測結果を保持するレジスタであり、この観測レジスタは古典コンピュータ機能部の記憶素子、すなわち0もしくは1の2値を保持するものである。マイクロ制御部301は、命令バッファ320から量子マイクロコード321を読み出し、量子マイクロコード321に記述されたシーケンスに基づいて制御ゲート311及び読み出しゲート313を制御する。量子マイクロコード321は、制御ゲート311及び読出しゲート313を制御する命令を時系列的に示した動作シーケンスである。命令としては、制御ゲート311を駆動して量子レジスタ312内の指定するキュービットに対して操作を行う操作命令と、読出しゲート313を制御して観測を行い、観測結果を観測レジスタ302に格納する観測命令がある。操作命令と観測命令は同一の時系列上に記述され、各命令間は順序関係が保たれる。これは、観測命令を実行すると重ね合わせの状態を0か1に収束させてしまうという不可逆な効果を持つため、処理の途中で観測を利用するような量子アルゴリズムでは各操作命令と観測命令の実行順序が重要となるためである。操作命令としては、単一のキュービットに作用する操作や、複数のキュービットに作用する操作がある。いずれも、操作対象のキュービットを指定するためにオペランドとしてキュービット番号を持つ。N個のキュービットを持つ量子レジスタ312をQRとした時、例えばQR内のキュービットを指定するためにQR1,QR3ようにキュービット番号を指定するものとする。このとき、操作命令として制御NOT命令はCNOT制御キュービット番号、ターゲットキュービット番号というように表現することができる。キュービット番号1番のキュービットを制御キュービット、キュービット番号3番のキュービットをターゲットキュービットとする場合にはCNOTQR1,QR3の様に記述する。同様にして、アダマール変換のような操作も操作命令として用意される。観測命令に関しても、観測すべきキュービットのキュービット番号をオペランドとした命令である。また、操作命令及び観測命令は制御ゲート311及び読出しゲート313の複数の制御を複合したものでも良い。例えば、2つのキュービット間の状態を交換するスワップ命令はSWAPQRi,QRji,jはキュービット番号のように命令として示せるが、制御ゲート311が直接的にスワップ命令をサポートしていなくても、マイクロ制御部301が制御NOT命令、ないしは、その他の命令の組合せでスワップ命令相当の動作を実現しても良い。図5の例から自明なように、読出しゲート単電子トランジスタ531,532が読出しを行えるのはキュービット501,502だけであり、キュービット503,504の読出しは行えない。そこで、前述したスワップを利用して、制御ゲート311及び読出しゲート313の複数の制御を複合し、キュービット503を読み出す時にはキュービット501,503の間でスワップ、キュービット504を読み出す時にはキュービット502,504の間でスワップするような使い方が必要となる。図6に、キュービット410が保持する状態の例を示す。キュービット410を構成する2つの量子ドット411,412はそれぞれ基底|0>,基底|1>に割当てられている。ここでは、量子ドット411が|0>,量子ドット412が|1>とする。図6の例では、量子ドット411に電子が溜めこまれており、それをもってキュービット410の保持する状態が|0>であるとしている。逆に、量子ドット412の側に電子が溜めこまれていれば、キュービット410の保持する状態は|1>である。図6に示すように、|0>ないしは|1>の状態を持ったキュービットに対して、アダマール変換を作用させることで重ね合わせの状態を作り出し、量子コンピュータ特有の重ね合わせの状態による並列処理を行うことができる。図7に、アダマール変換を行うための制御ゲートの制御方法の例を示す。キュービット410に対する操作は、各制御ゲート420,421,422,430,431,432に対して各々電圧パルスを印加することで行う。各制御ゲートに印加する電圧パルスのパターン振幅,時間,他のパルスとの位相関係によって、実現できる操作が異なる。図7の電圧パルスのパターンの例Vpa,Vpb,Vpc,Vpd,Vpe,Vpfでは、制御ゲート420,430に対してバリアポテンシャルの高さを下げる方向に作用するパルスを印加している。この結果、図8に示すように、2個の量子ドット411,412の間にあるバリアポテンシャルの高さが下がり、|0>の状態と|1>の状態をある確率で行き来するようになる。このとき|0>である確率をα,|1>である確率をβとすると、図8に示すキュービット410は、α|0>β|1>となる重ね合わせの状態を持つことになる。このようにして、制御ゲートに対して電圧パルスを印加することで、様々な種類の操作を行うことができる。また、上記の例では単一のキュービットに対する操作の例だったが、隣接する複数のキュービットは互いにバリアポテンシャルの高さに影響を及ぼし合うので、複数のキュービットの制御ゲートに対して同時に電圧パルスを印加することで、制御NOTやスワップなどの操作を実現することができる。このことから分かるように、複数のキュービットに対する操作は、図5に示した平面上の複数キュービットのうち、隣接して配置されているキュービットの間でのみ行うことが出来る。そのため、読出しゲート単電子トランジスタ531,532による読出しを行う場合と同様に、所望の操作を行うためにはスワップを必要とする場合がある。例えば、キュービット501を制御ビット、キュービット504を操作ビットとした制御NOTを行いたい場合、キュービット502,504をスワップして、キュービット501に隣接するキュービット502に、キュービット504の保持する状態を持ってくる必要がある。図9及び図10は、量子コンピュータシステム100におけるプログラムないしはソフトウェアの関係を示した図である。量子コンピュータシステム100を利用しようとするユーザは、古典プログラム211、量子プログラム212、入力データ233を用意する。量子コンピュータシステム100において、プログラムを実行して結果を得るまでの過程機能は、図9の古典コンパイルフェーズ古典コンパイル機能S400、図9の前処理フェーズ前処理機能S410、図9の本処理準備フェーズ本処理準備機能S420、図10の本処理実行フェーズ本処理実行機能S500、図10の後処理フェーズ後処理機能S510に大別できる。図9の古典コンパイルフェーズS400では、古典プログラム211を古典コンパイラ221でコンパイルし、古典オブジェクト231を得る。このフェーズは古典プログラム211を変更する度に行う必要がある。古典コンパイルフェーズS400は、現在一般的に用いられているコンピュータで、プログラムをコンパイルして実行形式を生成するフェーズと同様のものである。前処理フェーズS410では、古典オブジェクト231を実行することで、量子アルゴリズムの前処理を行う。このとき、処理するべきデータやパラメータは入力データ233として与えられる。入力データ233を入力として、前処理実行S411で古典オブジェクト231を実行し、処理結果として中間データ234を得る。前処理フェーズS410は入力データ233を変更するたびに行う必要がある。例えば、複数のデータやパラメータに対して処理を行う場合には、その都度前処理フェーズS410を実行する必要がある。なお、前処理が必要ない量子アルゴリズムでは、前処理フェーズS410は省略できる。本処理準備フェーズS420では、量子アルゴリズムのうち本処理を担う量子プログラム212を量子コンパイラ222で量子マイクロコード232に変換する。量子マイクロコード232には、量子プログラム212で処理すべきデータも織り込まれる必要があるので、量子コンパイラ222は量子プログラム212の他に、前処理フェーズS410で生成された中間データ234も入力としている。生成された量子マイクロコード232は、低温部転送S421で低温部102に転送される。なお、量子コンパイラ222は後述するようにコンパイル時にハードウェア機能情報707、及び、ハードウェア制限情報708を必要とする。ハードウェア機能情報707は量子部310の設計時に確定する情報であり、予め用意されている。ハードウェア制限情報708は後述するトレーニングフェーズトレーニング機能S490で生成される。トレーニングフェーズS490は、量子部310の経年劣化、製造不良、及び、その時々の利用環境下における動作不良に応じて、それを回避した量子マイクロコード232を生成するために必要となるハードウェア制限情報708を生成するために行われる。そのため、トレーニングフェーズS490は、前述したようなハードウェアの特性を変化させうる変化要因の時間的な特性発生頻度や変化速度より十分に短い間隔で定期的に実行する。また、何らかの処理を実行した結果、その結果が誤っているなどハードウェアの動作不良が疑われる場合には、トレーニングフェーズS490を実行する。図10の本処理実行フェーズS500では、本処理を実行する。本処理準備フェーズS420で低温部102に転送されてきた量子マイクロコード321を量子部実行S501で実行し、処理結果を観測レジスタ302に得る。この観測レジスタ302が保持する情報を本処理の結果として常温部転送S502で常温部101に転送する。後処理フェーズS510では、前処理フェーズS410と同様に古典オブジェクト231を実行することで、量子アルゴリズムの後処理を行う。後処理では本処理実行フェーズS500の実行結果、すなわち常温部転送S502で転送されてきた観測データ235を用いる。そのため、後処理実行S511は観測データ235を入力データとして古典オブジェクト231を実行する。後処理実行S511の実行結果S512が量子アルゴリズムの実行によって最終的に得られる実行結果となる。本実施例によれば、量子コンピュータをプログラム可能とし、それにより汎用性の高い量子コンピュータシステムを実現することができる。すなわち、本実施例の量子コンピュータシステムは、量子コンピュータ機能部と古典コンピュータ機能部とのハイブリッドシステムとして構成されており、量子コンピュータ機能部低温部102が、量子部310、古典記憶装置命令バッファ320及びこの古典記憶装置と量子部310とにアクセス可能な制御装置マイクロ制御部301を備え、量子部310は少なくとも1個のキュービット410で構成される量子レジスタ312と、量子レジスタに対して操作を行う制御ゲート311と、量子レジスタの状態を観測する読出しゲート313とを有している。古典記憶装置は、制御ゲートないしは読出しゲートに対する操作命令の列である量子マイクロコード321を記憶し、制御装置301は、古典記憶装置から量子マイクロコードを読み出して制御ゲートないしは読出しゲートを制御する。一方、古典コンピュータ機能部常温部101は、アプリケーションプログラム210とシステムソフトウェア220を備え、システムソフトウェアには量子プログラム212を量子マイクロコードに変換する量子コンパイラ222を有する。このように、入力データを織り込んだ量子マイクロコード321を生成する量子コンパイラ222を常温部101のハードウェア構成として備えている。そのため、常温部101のみならず低温部102の量子部310の全素子をも使用した一連のシーケンスを実行するプログラムを容易に生成することができる。低温部の量子コンピュータ機能部における量子アルゴリズムの実行によって最終的に得られる実行結果は、観測データとして常温部に出力される。これにより、単に一種類の問題に対して効果を発揮するだけでなく、複数種の問題に対して汎用的に用いることができる、汎用性の高い量子コンピュータシステムを実現することができる。なお、量子コンピュータ機能部と古典コンピュータ機能部は、各々、コンピュータに所定の機能を実現させるためのプログラムを備えており、このプログラムをコンピュータで実行することにより、上記各処理機能がコンピュータ上で実現される。この処理機能を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録することができる。次に、上記のように量子部をプログラム可能としたことを利用して、実行されるトレーニングフェーズS490について述べる。動作が不安定な素子キュービットの使用を制限し、量子コンピュータシステムの安定性を向上させるために、予め、トレーニングフェーズS490で量子コンピュータシステムを動作させ、量子部310を構成する素子の動作を検査し不安定な可能性がある素子の使用を制限するハードウェア制限情報708を取得する。図11は、量子部とトレーニング処理の関係を説明する図である。量子部310は、制御ゲート311の内側に配置されたN個のキュービットキュービット番号0~N-1から構成される量子レジスタ312を備えており、ここではハッチング表示された3個のキュービットが、作製技術の問題などで動作が不安定な素子であると想定する。このトレーニングフェーズS490では、このようなキュービットに関する情報を事前に抽出し、ハードウェア制限情報708として登録する。図12は、ハードウェア制限情報708を更新するためのトレーニング動作を示したフローチャートである。図13は、量子コンピュータシステム内の、トレーニング動作を実行するトレーニングフェーズS490の動作の一例を示す図である。このトレーニング動作は量子レジスタ312の故障状況等を検出して、ハードウェア制限情報708を更新するためのものである。トレーニング動作も、図9及び図10に示した量子プログラムの実行過程と同様にして行うことができる。例えば、図11の番号Xのキュービットのように、量子レジスタ312の内側で読出しゲートから離れた位置にあるキュービットであっても、前述したスワップを利用して、その状態を読み出す。以下では、図12のフローチャートと、図13の動作を対応させながら説明する。図12のステップS491で、トレーニング用の量子マイクロコードを実行する。トレーニング用の量子マイクロコードは種々の動作の形態が考えられるが、例えば、量子レジスタ312に対して特定の状態を生成し、それを読み出して検査する方法がある。例えば、0に初期化すれば、0を観測することが期待できる。0と1の重ね合わせの状態を生成すれば、0及び1各々の確率に応じて、その確率で観測することが期待できる。トレーニングフェーズのステップS491は、図13のトレーニング用マイクロコード4901を低温部転送S4921で低温部102に転送し、量子部実行S4922で実行しているのに対応する。次に、ステップS492で観測を行い、ステップS493で観測データと期待値を比較してそれらの差分を検査する。なお、重ね合わせ状態を用いた検査では、一回の観測だけでは検査が出来ず、ステップS491~S493を何度か繰り返して、観測結果の統計を見ることで判断することになる。図12のステップS492は、図13において、観測レジスタ4902に格納された観測結果を常温部転送S4923で常温部101に転送していることに対応し、ステップS493は観測結果処理S4924に対応する。上記の検査結果を元に、ステップS494でハードウェア制限情報708を生成し、トレーニングを完了する。ステップS494は、図13ではハードウェア制限情報生成S4925でハードウェア制限情報708を生成していることに対応する。図14に、ハードウェア制御情報708の構成の一例を示す。図14のハードウェア構成情報708は表形式のデータ構造であり、利用可否、ステータス、及び、エラーレートを示す列がある。量子レジスタ312がN個のキュービットから構成される時、各キュービットに対するハードウェア制限情報を記憶するために、0~N-1までのN行で構成される。利用可否はトレーニングの結果、当該キュービットを利用可能であるかどうかを示し、例えば0が利用不可、1が利用可能とする。量子コンパイラ222はこの情報を参照してキュービットの利用可否を判断する。ステータス、及び、エラーレートは故障要因の詳細な分析、及び、将来の故障予測を行うためにある。エラーレートはキュービットのエラー率、即ち、観測データと期待値が異なる率を記録するものである。また、ステータスは例えば異常無し000、エラーレート上昇傾向にあるがまだ利用可能001、エラーレートが限界値を超えたので利用不可能010などを記録する。図9及び図10で示した各フェーズS400,S410,S420,S500,S510において、古典コンパイルフェーズS400は、古典プログラム211が変更されない限り、一度実行して古典オブジェクト231を得ておけば済む。古典プログラム211はアルゴリズムの変更やバグフィックスなどの変更要因があるが、いずれも実行毎に行うほど頻繁ではないことが一般的である。それに対して、前処理フェーズS410以降は、入力データ233に依存しているため、入力データ233に変更がある度に再実行する必要がある。そこで、システムソフトウェア220の実行マネージャ223は、図9及び図10で示した各フェーズS410,S420,S500,S510を必要に応じて行い、量子アルゴリズムを正常に実行するためには実行過程全体を管理する。実行マネージャ223は量子アルゴリズムの実行開始を指令するユーザからの指示によって起動する。図15は、実行マネージャ223の動作の一例を示すフローチャートである。ステップS601では、中間データ234の存在、及び、入力データ233に変更があったかを検査する。中間データ234が存在しないということは前処理がまだ行われていないことを意味しており、前処理フェーズS410を実行する必要があるため、ステップS602に進む。また、入力データ233に変更があった場合、中間データ234が存在していたとしても、それは変更前の古い入力データ233に対応するものであるから、前処理フェーズS410を再度実行して中間データ234を更新しなければならない。よって、同様にステップS602に進む。入力データ233に変更がなく、かつ、対応する中間データ234が既に生成されている場合に限り、前処理フェーズS410を省略することができる。よって、この時は前処理フェーズS410を省略してステップS603に進む。ステップS602では、前述した前処理フェーズS410を実行し、ステップS603に進む。ステップS603では、量子マイクロコード232の存在、及び、中間データ234に変更があったかを検査する。量子マイクロコード232が存在していなければ本処理準備フェーズS420を実行して量子マイクロコード232を生成するために、ステップS604に遷移する。また、量子マイクロコード232が存在していても、中間データ234に変更がある場合には、量子マイクロコード232が中間データ234に依存するために、本処理準備フェーズS420を再度実行するために、ステップS604に遷移する。ステップS601と同様の考え方であるが、量子マイクロコード232が既に存在しており、かつ、中間データ234に変更が無い場合には、本処理準備フェーズS604を省略して、本処理実行フェーズS605に進む。ステップS604では、前述した本処理準備フェーズS420を実行し、ステップS604に進む。ステップS605では、前述した本処理実行フェーズS500を実行し、ステップS605に進む。ステップS606では、本処理実行フェーズS500の実行回数が規定された回数に達したかを検査し、満たなければ再度本処理実行フェーズS500を実行するためステップS605に戻る。実行回数を満たしていたら、ステップS607に進む。実行回数は入力データ233ないしは中間データ234で規定される。ステップS607では、前述した後処理フェーズS510を実行し、ステップS608に進む。ステップS608では、後処理フェーズS510で得られた実行結果S512を検査し、処理が成功していれば終了する。もし、間違った実行結果が得られているなど処理が失敗している場合には、再度実行をやりなおすため、図15のフローチャートの先頭まで戻る。なお、このとき必要に応じてステップS609で入力データ233を変更する。入力データ233を変更するのは、ユーザ操作ないしは古典オブジェクト231の実行によって行う。すなわち、古典オブジェクト231は前処理ないしは後処理に加えて、その一環として再実行時に入力データ233を変更する役割も担う。図16は、量子コンパイラ222の動作と入力及び出力の関係を示した図である。量子コンパイラ222は量子プログラム212と中間データ234を入力として、量子マイクロコード232を生成する。この生成機能、すなわち図16の量子コンパイラ222内で行われている処理S701~S706をコンパイルと称する。コンパイルの過程でハードウェア機能情報707とハードウェア制限情報708も入力として用いられる。ハードウェア機能情報707は、量子コンピュータシステム100における量子コンピュータ機能部である低温部102の有する機能を定義する情報である。具体的には、量子マイクロコード232を生成する上での制約として示される。例えば、CNOT命令が利用可能である、といった情報が記録される。また、オペランドに対する制約も指定される。例えば、量子レジスタ312上の隣接するキュービット間でしかCNOT命令が適用できない場合には、量子レジスタQR上のキュービットQRiとQRi1が隣接するキュービットだとすると、CNOT命令のオペランドはQRi,QRi1の関係を満たさなければならないという制約が記述される。量子コンパイラ222は、ハードウェア機能情報707で定義される制約に基づいて量子マイクロコード232を生成する。ハードウェア制限情報708は、量子部310の製造ばらつきや故障に起因する障害を示す情報である。量子部310を構成する構成要素のうち、特に量子レジスタ312は外乱の影響を受けやすく、またキュービット数が増加することで量子レジスタ312全体としての故障確率は増加する。それに対して、背景技術で述べたように量子誤り訂正技術が用いられているが、恒常的に故障しているキュービットがある場合には量子誤り訂正技術を用いるだけでなく、プログラムの段階で当該キュービットを回避して利用することで、より安定して利用可能となることが期待できる。そこで、量子コンパイラ222は、ハードウェア制限情報708で示されている故障キュービットを使わないように、量子マイクロコード232を生成する。なお、ハードウェア機能情報707は低温部102の仕様によって決まるため、設計時に決定できる情報である。一方、ハードウェア制限情報708は量子部310の製造時のばらつきや劣化、動作環境等に影響を受けるため、量子コンピュータシステム100の運用中にその制限は変わってくる。すなわち、運用中にハードウェア制限情報708を更新する手段が必要となるが、このために前述したトレーニングフェーズS490を用いる。量子コンパイラ222で行われるコンパイルのうち、字句解析S701、構文解析S702、及び、意味解析S703に関しては、従来の古典コンピュータで用いられてきたコンパイラと同様であるので、説明を省略する。一般的な従来の古典コンピュータのコンパイラでは、入力されたプログラムソースコードの字句解析、構文解析、及び、意味解析を行った後、コード生成と最適化を行う。これとは異なり量子コンパイラ222では、意味解析S703の後にデータ埋め込みS704という処理を行う。データ埋め込みS704は、意味解析S703の結果得られた量子コンパイラ222内部の中間言語中間形式で、量子プログラム212の入力となっている変数に、中間データ234に示されているデータを当てはめる処理を行う。この処理により、実行時に入力すべき変数を、量子コンパイラ212でのコンパイル時に入力していることになる。コード生成S705では、データ埋め込みS704が完了した後の中間言語から、量子マイクロコードS705を生成する。このとき、ハードウェア機能情報707を参照して、利用可能な命令やオペランドの制約を取得する。中間言語で表現されている処理を、ハードウェア機能情報707に示された利用可能な命令の組み合わせで表現する。また、オペランドの制約を満たすために、量子レジスタ312内の2つのキュービットが保持している状態を交換するスワップ命令などを加える。また、コード生成S705では、ハードウェア機能情報707のみならず、ハードウェア制限情報708に示されている制約も加味して量子マイクロコードS705を生成する。ハードウェア制限情報708には、利用不可能なキュービットが示されているので、このキュービットを回避して処理を行うように、スワップ命令などを加える。最後に、最適化S706でコード生成S705が生成した量子マイクロコードを最適化して、コンパイル結果として量子マイクロコード232を出力する。本実施例によれば、古典コンピュータ機能部と量子コンピュータ機能部とを使用した一連のシーケンスを実行するプログラムを生成することができ、それにより汎用性の高い量子コンピュータシステムを実現することができる。また、プログラム可能であることを利用して、予めトレーニングフェーズを実施し、故障等の問題に対してプログラムの動作を変更することで動的に対応し、安定性を高めることができる。これによって、汎用的かつ安定的に利用することができる量子コンピュータシステムを提供することができる。次に、図17~図20を用いて、本発明の実施例2に係る量子コンピュータシステムを説明する。本実施例では、プログラム可能であることにより、汎用的かつ安定的に利用することができる量子コンピュータシステム100の、別の実施の形態を説明する。実施例2では、古典コンピュータ機能部と量子コンピュータ機能部からなる量子コンピュータシステムの全体の構成は実施例1と同じく図1に示す構成であるが、常温部101と低温部102の構成が異なる。実施例1で説明した図と同一の符号を付された構成と、同一の機能を有する部分については、説明を省略する。量子コンピュータシステム100を構成する上で、伝送路103の両端は著しい温度差を持つことになる。そのため、伝送路103のレイテンシやスループットは必ずしも良好なものではない可能性がある。一方で、量子マイクロコード232は、量子プログラム212の高級な記述内容をより低級な操作命令と観測命令に書き下したものであると言えるため、そのコード長は元のプログラムと比較して長大なものになる。そうした長大な量子マイクロコードの伝送に耐えうる性能を、伝送路103で実現できないときのために、本実施例では、伝送路103に求められる性能要件を軽減する量子コンピュータシステム100の実施の形態を示す。本実施例では、図1の量子コンピュータシステム100において、常温部100を図17に示す常温部1001に、低温部102を図18に示す低温部1101に置き換えた構成を用いる。また、それに伴って、図9で説明した前処理フェーズS410及び本処理準備フェーズS420と、図10で説明した本処理実行フェーズS500の動作がそれぞれ変わる。以下に、それぞれに関して説明する。図17は、実施例2における常温部1001の構成を示す構成図の例である。実施例1の常温部100と比較して、実施例2の常温部1001では量子コンパイラ222を備えないことを特徴とする。また、量子コンパイラ222を備えないため、量子コンパイラ222が生成する量子マイクロコード232も備えていない。図18は、実施例2における低温部1101の構成を示す構成図の例である。実施例1の低温部102と比較して、マイクロ制御部301がCPU1102に置き換わっていることを特徴とする。それに伴い、実施例1でマイクロ制御部301に付随していた命令バッファ320は、実施例2においてCPU1102の主記憶装置1130に変更する。この主記憶装置1130は、中間データ1131、量子プログラム1132、量子コンパイラ1133、及び、量子マイクロコード1134を備える。中間データ1131及び量子プログラム1132は、常温部1001の中間データ234及び量子プログラム212が、伝送路103経由で伝送されたものである。すなわち、実施例1では伝送路103が伝送していたのは量子マイクロコード321であるが、本実施例では伝送路103は中間データ1131及び量子プログラム1132を伝送する。中間データ1131と量子プログラム1132のサイズが量子マイクロコード1134より小さければ、実施例1と比較して伝送路103への負荷を軽減することができる。CPU1102は、量子コンパイラ1133を実行し、中間データ1131及び量子プログラム1132をコンパイラの入力として、量子マイクロコード1134を生成する。また、生成した量子マイクロコード1134を元にして量子部310を制御する。そのため、コンパイルと量子部310の制御をパイプライン動作させることも可能で、量子マイクロコード1134を格納するための主記憶装置1130の容量を削減することができる。図19は、実施例2における前処理Sフェーズ1200の動作の例を示す図である。実施例1では図9の本処理準備フェーズS420で量子マイクロコード232を生成した後、低温部転送S421を行っていた。それに対して、本実施例では図19の前処理フェーズS1200に示すように、中間データ234が生成できた段階で、中間データ234と量子プログラム212を低温部転送S1201で、低温部1101に転送する。図20は、実施例2における本処理準備フェーズS1300及び本処理実行フェーズS1310の動作の例を示す図である。実施例1では本処理準備フェーズS420は常温部101で実行されていたが、実施例2では本処理準備フェーズS1300を低温部1101のCPU1102で実行する。本処理準備フェーズS1300では、量子アルゴリズムのうち本処理を担う量子プログラム1132を量子コンパイラ1133で量子マイクロコード1134に変換する。量子マイクロコード1134には、量子プログラム1132で処理すべきデータも織り込まれる必要があるので、量子コンパイラ1133は量子プログラム1132の他に、中間データ1131も入力としている。量子コンパイラ1133で必要となる中間データ1131及び量子プログラム1132は、前述した前処理フェーズ1200の低温部転送1201で常温部1001から低温部1101に転送されたものである。また、量子コンパイラ1133は、実施例1と同様に、コンパイル時にハードウェア機能情報707及びハードウェア制限情報708を必要とする。ハードウェア制限情報708は、トレーニングフェーズS490で生成されたものである。なお、実施例2では量子コンパイラ1133が低温部102にあることから、図13に示したトレーニングフェーズS490の低温部転送S4921、及び、量子部実行S4922に相当する処理を行わず、図13の観測結果処理S4924及びハードウェア制限情報生成S4925に相当する処理を低温部102内のCPU1102上で行うことが出来る。この場合、トレーニングフェーズS490を実施例1より短い間隔で実行することが可能となるため、ハードウェアの特性変化への追従性を向上させることができる。本実施例によれば、量子コンピュータをプログラム可能とし、それにより汎用性の高い量子コンピュータシステムを実現することができる。すなわち、本実施例の量子コンピュータシステムは、量子コンピュータ機能部と古典コンピュータ機能部とのハイブリッドシステムとして構成されており、量子コンピュータ機能部低温部1101が、量子部310、古典記憶装置主記憶装置1130及びこの古典記憶装置にアクセス可能な制御装置CPU1102を備え、量子部310は少なくとも1個のキュービット410で構成される量子レジスタ312と、量子レジスタに対して操作を行う制御ゲート311と、量子レジスタの状態を観測する読出しゲート313とを有している。古典記憶装置は、量子プログラム1132を量子マイクロコード1134に変換する量子コンパイラ1133、及び、制御ゲートないしは読出しゲートに対する操作命令の列である量子マイクロコード1134を記憶し、制御装置1102は、古典記憶装置から量子マイクロコードを読み出して制御ゲートないしは読出しゲートを制御する。一方、古典コンピュータ機能部常温部1001は、アプリケーションプログラム210とシステムソフトウェア220を備えている。このように、入力データを織り込んだ量子マイクロコード1134を生成する量子コンパイラ1133を低温部1101のハードウェア構成として備えている。そのため、常温部101のみならず低温部102の量子部310の全素子をも使用した一連のシーケンスを実行するプログラムを容易に生成することができる。低温部の量子コンピュータ機能部における量子アルゴリズムの実行によって最終的に得られる実行結果は、観測データとして常温部に出力される。これにより、単に一種類の問題に対して効果を発揮するだけでなく、複数種の問題に対して汎用的に用いることができる、汎用性の高い量子コンピュータシステムを実現することができる。本実施例によれば、古典コンピュータ機能部と量子コンピュータ機能部とを使用した一連のシーケンスを実行するプログラムを生成することができ、それにより汎用性の高い量子コンピュータシステムを実現することができる。また、プログラム可能であることを利用して、予めトレーニングフェーズを実施し、故障等の問題に対してプログラムの動作を変更することで動的に対応し、安定性を高めることができる。これによって、汎用的かつ安定的に利用することができる量子コンピュータシステムを提供することができる。また、ハードウェアの特性変化への追従性を向上させることができる。なお、上記各実施例で述べた量子コンピュータ機能部は、核磁気共鳴、量子光学等、超伝導磁束等の他のハードウェアに基づくもので有っても良い。"