(57)【要約】【課題】取引対象となる財のトレーサビリティを向上させる。【解決手段】取引データ保管装置１０６は、第１主体から第２主体へ財が販売された場合に、第１主体側の取引記述としての、財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、第２主体側の取引記述としての、財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む取引データを、財のＩＤと対応づけて記憶する。取引管理装置１０８は、或る財のＩＤを指定した監査要求を受け付け、そのＩＤに対応付けられた複数の取引データを取引データ保管装置１０６から取得する。取引管理装置１０８は、上記複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成し、財取引連鎖データに基づいて、監査要求で指定されたＩＤで識別される財の取引に関する監査を支援するデータを生成する。【選択図】図９
2019121220.tif 000002
【特許請求の範囲】
【請求項１】
第１主体から第２主体へ財が販売された場合に、前記第１主体側の取引記述としての、前記財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、前記第２主体側の取引記述としての、前記財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む取引データを、前記財のＩＤと対応づけて記憶する記憶部にアクセス可能であり、
或る財のＩＤを指定した監査要求を受け付ける監査要求受付部と、
前記監査要求で指定されたＩＤに対応付けられた複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成し、前記財取引連鎖データに基づいて、前記監査要求で指定されたＩＤで識別される財の取引に関する監査を支援するデータを生成する監査部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記取引データは、前記財に固有の単位系を用いて前記財の移転を示すものである請求項１に記載の情報処理装置。
【請求項３】
前記監査部は、前記財取引連鎖データを相殺することにより、前記監査を支援するデータとして、前記監査要求で指定されたＩＤで識別される財の取引の唯一性に関するデータを生成することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記取引データは、取引の主体を示すデータを含み、
前記監査部は、前記財取引連鎖データを相殺することにより、前記監査を支援するデータとして、前記監査要求で指定されたＩＤで識別される財を生産した主体、または、当該財の一連の取引を開始した主体に関するデータを生成することを特徴とする請求項１から３のいずれかに記載の情報処理装置。
【請求項５】
前記取引データは、取引の主体を示すデータを含み、
前記監査部は、前記財取引連鎖データを相殺することにより、前記監査要求で指定されたＩＤで識別される財の一連の取引を開始した主体、または、一連の取引の終端の主体を識別し、前記開始した主体または前記終端の主体を含む取引データを起点として当該財の取引を示す他の取引データを辿ることにより、当該財の取引経路に関するデータを前記監査を支援するデータとして生成することを特徴とする請求項１から４のいずれかに記載の情報処理装置。
【請求項６】
財の流通過程において当該財の流通経路が複数に分割された場合、前記記憶部は、流通経路分割前の前記財のＩＤである分割前ＩＤと、分割後の各々の流通経路における前記財のＩＤである複数の分割後ＩＤとの対応関係を示す取引データを記憶し、
前記監査部は、前記監査要求で前記分割前ＩＤまたは前記分割後ＩＤが指定された場合、前記分割前ＩＤに対応付けられた取引データと、前記分割後ＩＤに対応づけられた取引データの両方に基づいて前記財取引連鎖データを生成することを特徴とする請求項１から５のいずれかに記載の情報処理装置。
【請求項７】
前記監査部の機能は、当該機能が実装されたコンピュータプログラムを前記情報処理装置のＣＰＵが実行することにより発揮され、
前記情報処理装置は、正規の前記コンピュータプログラムのハッシュ値である第１ハッシュ値を記憶する記憶部にアクセス可能であり、
前記ＣＰＵが前記コンピュータプログラムを実行する際に、実行対象となるコンピュータプログラムのハッシュ値である第２ハッシュ値を取得し、前記第１ハッシュ値と前記第２ハッシュ値とを照合する照合部をさらに備えることを特徴とする請求項１から６のいずれかに記載の情報処理装置。
【請求項８】
第１主体から第２主体へ財が販売された場合に、前記第１主体側の取引記述としての、前記財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、前記第２主体側の取引記述としての、前記財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む取引データを、前記財のＩＤと対応づけて記憶する記憶装置にアクセス可能なコンピュータが、
或る財のＩＤを指定した監査要求を受け付けるステップと、
前記監査要求で指定されたＩＤに対応付けられた複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成し、前記財取引連鎖データに基づいて、前記監査要求で指定されたＩＤで識別される財の取引に関する監査を支援するデータを生成するステップと、
を実行することを特徴とする監査支援方法。
【請求項９】
第１主体から第２主体へ財が販売された場合に、前記第１主体側の取引記述としての、前記財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、前記第２主体側の取引記述としての、前記財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む取引データを、前記財のＩＤと対応づけて記憶する記憶装置にアクセス可能なコンピュータに、
或る財のＩＤを指定した監査要求を受け付ける機能と、
前記監査要求で指定されたＩＤに対応付けられた複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成し、前記財取引連鎖データに基づいて、前記監査要求で指定されたＩＤで識別される財の取引に関する監査を支援するデータを生成する機能と、
を実現させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理技術に関し、特に情報処理装置、監査支援方法、およびコンピュータプログラムに関する。
【背景技術】
【０００２】
本発明者は、交換代数を適用して実物の取引を記録する手法を提案している（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１７／０７７９２０号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
食品をはじめ多くの分野で、商品の安全性や、消費者の選択権に対する関心が高まっており、商品のトレーサビリティが注目されてきている。本発明者は、交換代数を用いて実物の取引を記録することにより、取引対象となる財のトレーサビリティを向上させることができると考えた。
【０００５】
本発明は本発明者の上記着想に基づきなされたものであり、１つの目的は、取引対象となる財のトレーサビリティを向上させることである。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の情報処理装置は、第１主体から第２主体へ財が販売された場合に、第１主体側の取引記述としての、財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、第２主体側の取引記述としての、財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む取引データを、財のＩＤと対応づけて記憶する記憶部にアクセス可能であり、或る財のＩＤを指定した監査要求を受け付ける監査要求受付部と、監査要求で指定されたＩＤに対応付けられた複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成し、財取引連鎖データに基づいて、監査要求で指定されたＩＤで識別される財の取引に関する監査を支援するデータを生成する監査部と、を備える。
【０００７】
本発明の別の態様は、監査支援方法である。この方法は、第１主体から第２主体へ財が販売された場合に、第１主体側の取引記述としての、財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、第２主体側の取引記述としての、財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む取引データを、財のＩＤと対応づけて記憶する記憶装置にアクセス可能なコンピュータが、或る財のＩＤを指定した監査要求を受け付けるステップと、監査要求で指定されたＩＤに対応付けられた複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成し、財取引連鎖データに基づいて、監査要求で指定されたＩＤで識別される財の取引に関する監査を支援するデータを生成するステップと、を実行する。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明の表現を、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、取引対象となる財のトレーサビリティを向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】売上伝票の例を示す図である。
【図２】前提技術２のデータ編集装置の機能構成を示すブロック図である。
【図３】会計型データを操作するためのユーザコードの一例を示す図である。
【図４（ａ）】図３のユーザコードに対応する実行コードを示す図である。
【図４（ｂ）】図３のユーザコードに対応する実行コードを示す図である。
【図５】レコード型データを操作するためのユーザコードの一例を示す図である。
【図６（ａ）】図５のユーザコードに対応する実行コードを示す図である。
【図６（ｂ）】図５のユーザコードに対応する実行コードを示す図である。
【図７】データ編集装置の動作を示すフローチャートである。
【図８】図８（ａ）と図８（ｂ）は、価格表示による取引記述を示す図である。
【図９】図９（ａ）と図９（ｂ）は、実物簿記を用いた取引記述を示す図である。
【図１０】実施例の取引管理システムの構成を示す図である。
【図１１】図１０の取引者装置の機能構成を示すブロック図である。
【図１２】取引データコンテナの例を示す図である。
【図１３】取引ハッシュコンテナの例を示す図である。
【図１４】図１０の取引管理装置の機能構成を示すブロック図である。
【図１５】取引データコンテナの例を示す図である。
【図１６】取引ハッシュコンテナの例を示す図である。
【図１７】取引経路図の例を示す図である。
【図１８】流通過程で財が分割される取引の例を示す図である。
【図１９】流通過程で新たな財が生産される取引の例を示す図である。
【発明を実施するための形態】
【００１１】
（前提技術１）
本発明の実施の形態の構成を説明する前に、本実施の形態の前提となる交換代数について説明する。
【００１２】
本発明者は、以下に示す２つのデータ構造により、企業等の組織における８〜９割のデータを表現することができると考えた。
１．多分類数値型（以下、「会計型データ」とも呼ぶ。）
データの値とデータの属性（以下、「基底」とも呼ぶ。）の組み合わせであり、データの値として数値が用いられ、データの属性として名称・単位・時間・主体が用いられる。例えば、４０＜現金，円＞＋３０＜ミカン，個＞・・・と表現される。
２．多分類混合型（以下、「レコード型データ」とも呼ぶ。）
データの値と基底の組み合わせであり、データの値および基底には数値や数値以外の様々なリテラルが用いられる。例えば、５５＜年齢＞＋山田太郎＜名前＞＋津軽＜好きな果物＞・・・と表現される。
以下では、主に会計型データについて詳細に説明する。
【００１３】
会計型データは、何らかの分類された項目ごとに与えられた数値データをまとめて表現し、その上で演算を行うための代数系（以下、「交換代数」とも呼ぶ。）に属するものであり、交換代数データとも言える。会計型データにおける基底（すなわち分類項目）は、＜名称，単位，時間，主体＞と４つの項目からなる。データは、１以上の基底に対する値の組み合わせ、言い換えれば、１以上の基底に対する値の和で表現される。
例１：ｘ＝２００＜リンゴ，円，＃，＃＞＋４００＜さんま，円，＃，＃＞
例２：ｙ＝２００＜リンゴ，円，２００６年第１四半期，＃＞＋４００＜リンゴ，円，２００６年第２四半期，＃＞＋７２０＜リンゴ，円，２００６年第３四半期，＃＞
上記の例１では時間と主体が省略されており、例２では主体が省略されている。例２は時系列データが表現されたものとも言える。また基底の主体には企業名等の組織の識別情報が設定されてもよい。
【００１４】
交換代数による表現のメリットとして、様々な基底（分類）を用いてデータを表現できること、またプログラムコードではなく人間に解釈容易な文字で基底を表現できることが挙げられる。さらにまた、後述するように振替という演算による統一的なデータ編集が可能になる。
【００１５】
前提技術の交換代数では、マイナスの数値の代わりに＾（ハット）という記号を用いる。例えばｘ＝２０＾＜リンゴ，＃，＃，＃＞はリンゴが２０減ることを示す。言い換えれば、＾はある項目に対して相殺すべき反対項目を意味する基底を示す。また相殺操作を表す作用素（オペレータ）として「〜（バー）」を導入する。以下例を示す。
ｘ１＝３０＜現金＞＋２０＜リンゴ＞＋５０＜負債＞
ｙ１＝＾ｘ１＝３０＾＜現金＞＋２０＾＜リンゴ＞＋５０＾＜負債＞
〜（ｙ１＋ｘ１）＝（３０＾＜現金＞＋２０＾＜リンゴ＞＋５０＾＜負債＞）＋（３０＜現金＞＋２０＜リンゴ＞＋５０＜負債＞）＝０
【００１６】
次に、交換代数による振替え操作について説明する。簿記では振替という操作がある。これは一種の分類替え（基底変換）の操作と言える。ここでは、図１の（ａ）に示す八百屋の売上伝票を図１の（ｂ）に示す売上伝票へ振替える例を示す。
【００１７】
図１の（ａ）および（ｂ）で示す取引は円表示で以下のように表現できる。
ｘ１＝２００＜現金，円＞＋１００＾＜リンゴ，円＞＋１００＜利益，円＞
ｘ２＝５０＜光熱費，円＞＋５０＾＜現金，円＞
ｘ３＝１００＾＜利益，円＞＋１００＜営業収益，円＞
ｘ４＝５０＾＜営業収益，円＞＋５０＾＜光熱費，円＞
ｙ＝ｘ１＋ｘ２＋ｘ３＋ｘ４＝（２００＜現金，円＞＋１００＾＜リンゴ，円＞＋１００＜利益，円＞）＋（５０＜光熱費，円＞＋５０＾＜現金，円＞）＋（１００＾＜利益，円＞＋１００＜営業収益，円＞）＋（５０＾＜営業収益，円＞＋５０＾＜光熱費，円＞）
〜ｙ＝１５０＜現金，円＞＋１００＾＜リンゴ，円＞＋５０＜営業収益，円＞
【００１８】
次に、振替え操作と見なすアグリゲーション（合併）と按分について説明する。
１．アグリゲーション
３００円の津軽と２００円の富士と１００円の紅玉（いずれもリンゴの１品種）があったとする。これを、ｘ＝３００＜津軽，円＞＋２００＜富士，円＞＋１００＜紅玉，円＞と表現する。この津軽・富士・紅玉を「リンゴ」とまとめて分類する操作も一種の振替であり、アグリゲーションとよぶ。なお前提として｛津軽，富士，紅玉｝-->{リンゴ}という対応関係のマップが与えられている必要がある。
【００１９】
この例では上記の対応関係のマップにしたがって、Ｆ（ｘ）＝３００＾＜津軽，円＞＋２００＾＜富士，円＞＋１００＾＜紅玉，円＞＋３００＜リンゴ，円＞＋２００＜リンゴ，円＞＋１００＜リンゴ，円＞、という元を生成する。基底＜リンゴ＞の値は、集約対象の基底＜津軽＞、＜富士＞、＜紅玉＞のそれぞれに対する値である。言い換えれば、集約対象の基底＜津軽＞、＜富士＞、＜紅玉＞のそれぞれに対する値の集計値が、基底＜リンゴ＞の値として算出される。
【００２０】
アグリゲーションを表す振替Ｇ（ｘ）は、Ｆ（ｘ）を用いて、〜｛ｘ＋Ｆ（ｘ）｝で与えられる。すなわち、Ｇ（ｘ）＝〜｛ｘ＋Ｆ（ｘ）｝＝（３００＜津軽，円＞＋２００＜富士，円＞＋１００＜紅玉，円＞）＋（３００＾＜津軽，円＞＋２００＾＜富士，円＞＋１００＾＜紅玉，円＞＋３００＜リンゴ，円＞＋２００＜リンゴ，円＞＋１００＜リンゴ，円＞）＝６００＜リンゴ，円＞、となる。
【００２１】
２．按分
按分とは、１つの分類項目をさらに細かく複数の分類項目へ分割することである。例えば、アグリゲーションに示した例では基底＜リンゴ＞に対応する値を、津軽・富士・紅玉へ分割することを意味する。なお前提として｛リンゴ｝-->｛津軽，富士，紅玉｝の按分比率が与えられている必要があり、ここでは１：１：１であることとする。
【００２２】
この例では上記の按分比率にしたがって、ｘ＝６００＜リンゴ，円＞に対して、Ｆ（ｘ）＝６００＾＜リンゴ，円＞＋２００＜津軽，円＞＋２００＜富士，円＞＋２００＜紅玉，円＞、という元を生成する。
按分を表す振替えＧ（ｘ）は、Ｆ（ｘ）を用いて、〜｛ｘ＋Ｆ（ｘ）｝で与えられる。すなわち、Ｇ（ｘ）＝〜｛ｘ＋Ｆ（ｘ）｝＝６００＜リンゴ，円＞＋（６００＾＜リンゴ，円＞＋２００＜津軽，円＞＋２００＜富士，円＞＋２００＜紅玉，円＞）＝２００＜津軽，円＞＋２００＜富士，円＞＋２００＜紅玉，円＞、となる。
【００２３】
（前提技術２）
以下、前提技術１の交換代数の考え方を利用してデータ編集処理を実行する情報処理装置（以下、「データ編集装置」と呼ぶ。）について説明する。前提技術２において、ユーザは、対象がその集合に属するための必要十分条件を与えることによって集合を記述する方法である内包的記法を用いて、データの編集内容を記述する。前提技術２のデータ編集装置は、内包的記法により記述された編集内容に基づいて、集合の要素をすべて列挙することで集合を記述する方法である外延的記法で記述されたプログラムコードを出力する。そして、編集対象のデータを、交換代数に対応する形式のデータオブジェクトとしてメモリに読み込み、上記のプログラムコードを実行することによりデータの編集処理を実行する。
【００２４】
図２は、前提技術２のデータ編集装置１０の機能構成を示すブロック図である。データ編集装置１０は、データ保持部１２と、コード対応関係テーブル１４と、集約規則テーブル１６と、按分規則テーブル１８と、コード取得部２０と、コード生成部２２と、編集処理部２４を備える。
【００２５】
本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのＣＰＵをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えば、図２の各機能ブロックは、ソフトウェアとして記録媒体に格納されデータ編集装置１０のハードディスクにインストールされ、データ編集装置１０のメインメモリに適宜読み出されてＣＰＵにて実行されてもよい。
【００２６】
データ保持部１２は、編集対象となる編集前のデータと編集後のデータとを保持する記憶領域である。データ保持部１２は、編集前のデータと編集後のデータのそれぞれについて、データの値と基底とを対応づけたＣＳＶ（Comma Separated Values）ファイルを保持する。例えば、ＣＳＶファイルの一行が「値，ハットの有無，名称，単位，時間，主体」となり、空白行が元（げん）の区切りを示してもよい。なおデータ保持部１２は、データ編集装置１０とは異なる情報処理装置、例えばデータベースサーバ内に設けられてもよいことはもちろんである。この場合、ＬＡＮ・ＷＡＮ・インターネット等の通信網を介して当該データベースサーバとデータ編集装置１０が接続された情報処理システムが構築されてもよい。
【００２７】
コード対応関係テーブル１４は、データの編集内容（編集操作）を内包的記法により記述するためのプログラム言語（以下、「内包的記法言語」とも呼ぶ。）と、データの編集内容を外延的記法により記述するためのプログラム言語（以下、「外延的記法言語」）との対応関係を保持する記憶領域である。前提技術２における外延的記法言語はＪａｖａ（登録商標）言語であることとするが、Ｃ言語等、他のプログラム言語であってもよい。
【００２８】
内包的記法言語と外延的記法言語との対応関係は、例えば、内包的記法言語における編集操作を示すキーワードと、外延的記法言語におけるその編集操作を実現するためのロジックを実装したコード（関数）とを対応づけたものである。より具体的には、内包的記法言語における複数のデータから特定のデータを抽出する条件の記述は、外延的記法言語における複数のデータを逐次列挙するための繰り返し命令の記述と対応づけられる。また例えば、内包的記法言語において入力データを指定するコードと、外延的記法言語においてその入力データをメモリ内に読み込むロジックを実装したコードとを対応づけたものである。なお、対応関係の具体例は図３〜図６において後述する。
【００２９】
集約規則テーブル１６は、アグリゲーション操作時に参照されるべき複数種類の基底の集約関係を定めた集約規則を保持する記憶領域である。集約規則は、例えば上述の｛津軽，富士，紅玉｝-->{リンゴ}という集約関係を定めたものである。複数種類の基底を集約する基底（上記例ではリンゴ）を以下では「集約基底」と呼ぶこととする。按分規則テーブル１８は、按分操作時に参照される複数種類の基底の按分比率を定めた按分規則を保持する記憶領域である。按分規則は、例えば上述の｛リンゴ｝-->｛津軽，富士，紅玉｝という按分関係と、１：１：１という按分比率を定めたものである。
【００３０】
コード取得部２０は、キーボード等の所定の入力装置を介してユーザにより入力されたプログラムコード（以下、「ユーザコード」とも呼ぶ。）を取得する。このユーザコードは、内包的記法言語で記述される。具体的なユーザコード例は後述する。
【００３１】
コード生成部２２は、コード対応関係テーブル１４に保持された対応関係にしたがって、ユーザコードから、ユーザコードに記述されたデータ編集内容が外延的記法言語で記述されたプログラムコード（以下、「実行コード」とも呼ぶ。）を生成する。前提技術２における実行コードはＪａｖａバイトコードであることとする。具体的には、ユーザコードに対応するＪａｖａソースコードを生成し、そのソースコードをコンパイルすることによりＪａｖａバイトコードを生成する。具体的な実行コード例は後述する。
【００３２】
編集処理部２４は、コード生成部２２において生成された実行コードにしたがって、データ保持部１２に保持された編集対象のデータを編集する。編集処理部２４は、データ読込部２６とデータ編集部２８と編集結果出力部３０を含む。なお、実行コードが所定の実行エンジンにおいて実行されることにより、編集処理部２４（データ読込部２６〜編集結果出力部３０）の機能が実現されてもよいことはもちろんである。例えば、実行コードがＪａｖａバイトコードの場合、実行エンジンはＪＶＭ（Java Virtual Machine）となる。
【００３３】
データ読込部２６は、データ保持部１２から編集対象のデータを読み込み、そのデータから、データの値と基底とが対応づけられたデータオブジェクトをメモリ上に生成する。データ編集部２８は、データ読込部２６において生成されたデータオブジェクトに対する操作を実行して編集結果のデータを設定する。編集結果出力部３０は、データ読込部２６において設定された編集結果のデータをＣＳＶファイルとして記録し、データ保持部１２へ格納する。
【００３４】
図３は、会計型データを操作するためのユーザコードの一例を示す。以下のコード例では、左端に行番号を示しており、その行番号によりコードの位置を適宜示す。図３では、編集対象データとして、２００＜現金＞＋１００＜小麦＞という元と、２００＜現金＞＋２００＜大豆＞という元を含む集合Ｃが指定されている。ここでは説明の簡明化のため編集対象データを直接入力しているが、典型的には入力ファイルとしてのＣＳＶファイルの名称や、そのＣＳＶファイルにおける入力データの記述位置が指定されることにより入力データを示すデータオブジェクトが生成される。
【００３５】
図３の４行目では、交換代数のプロジェクション処理、すなわち指定された基底と一致する部分要素を抽出する射影操作が指定されている。具体的には、集合Ｃから基底＜現金＞もしくは＜小麦＞に該当し、かつ、値が設定済という条件を充足する元を抽出して集合ａｓｅｔへ代入する処理が指定されている。そして５行目でａｓｅｔ内の元の加算処理が指定されている。ａｓｅｔは２００＜現金＞、１００＜小麦＞、２００＜現金＞を含むため、加算結果ａｌｐｈａは４００＜現金＞＋１００＜小麦＞となる。ここでは説明の簡明化のため編集結果を標準出力へ出力することとしているが、典型的には出力ファイルとしてのＣＳＶファイルが指定されて、当該ＣＳＶファイルに編集結果（ここでは加算結果ａｌｐｈａの内容）が記録される。
【００３６】
図４（ａ）は、図３のユーザコードに対応する実行コードを示す。具体的には図３の２行目に応じてコード生成部２２が生成する実行コードであり、データ読込部２６の機能に対応する。なお、前提技術２の説明では実行コードとして便宜的にＪａｖａソースプログラムを示す。同図では、集合Ｃに対応するＥｘＡｌｇｅＳｅｔオブジェクトに、２００＜現金＞＋１００＜小麦＞という元に対応するＥｘＡｌｇｅオブジェクト（１５〜２３行目）と、２００＜現金＞＋２００＜大豆＞という元に対応するＥｘＡｌｇｅオブジェクト（２４〜３２行目）が格納されている。
【００３７】
図４（ｂ）は、図３のユーザコードに対応する実行コードを示す。具体的には図３の４行目に応じてコード生成部２２が生成する実行コードであり、データ編集部２８の機能に対応する。同図では、集合Ｃに含まれる複数の元に対応するＥｘＡｌｇｅオブジェクトを列挙するｆｏｒループと、集合Ｄに含まれる複数の基底に対応するＥｘＢａｓｅオブジェクトを列挙するｆｏｒループとの２重ループの中で、プロジェクションメソッドが呼び出され、プロジェクション処理の結果がリストへ追加される。そして、そのリストから集合ａｓｅｔが設定されている。
【００３８】
図５は、レコード型データを操作するためのユーザコードの一例を示す。同図では、山田＜ｎａｍｅ＞＋５＜ｓｃｏｒｅ＞、田中＜ｎａｍｅ＞＋３＜ｓｃｏｒｅ＞、鈴木＜ｎａｍｅ＞＋４＜ｓｃｏｒｅ＞、佐藤＜ｎａｍｅ＞＋２＜ｓｃｏｒｅ＞、本田＜ｎａｍｅ＞＋５＜ｓｃｏｒｅ＞の５つの元を含む集合ｄａｔａｓｅｔが指定されている。
【００３９】
図５の９行目では、基底＜ｓｃｏｒｅ＞に対応づけられた値が４以上の元が存在するたびに、元「１＜４以上，人，＃，＃＞」を集合ａｓｅｔへ代入する処理が指定されている。そして、１１行目でａｓｅｔ内の元の加算処理が指定されている。この結果として、ａｓｅｔには元「１＜４以上，人，＃，＃＞」が３個含まれることになり、ｒｅｔ＝３＜４以上，人，＃，＃＞となる。すなわちこの例は、ｓｃｏｒｅが４以上の人数を集計するものとなる。
【００４０】
図６（ａ）は、図５のユーザコードに対応する実行コードを示す。具体的には図５の２〜７行目に応じてコード生成部２２が生成する実行コードであり、データ読込部２６の機能に対応する。同図では、集合ｄａｔａｓｅｔに対応するＤｔＡｌｇｅＳｅｔオブジェクトに、上記５つのレコード型データの元のそれぞれに対応するＤｔａｌｇｅオブジェクトが格納される。レコード型データは値と基底の両方で様々なデータ型を許容するため、値と基底のそれぞれのデータ型を示す情報もＤｔａｌｇｅオブジェクトに設定される。
【００４１】
図６（ｂ）は、図５のユーザコードに対応する実行コードを示す。具体的には図５の９行目に応じてコード生成部２２が生成する実行コードであり、データ編集部２８の機能に対応する。同図では、集合ｄａｔａｓｅｔに含まれる複数の元に対応するＤｔＡｌｇｅＳｅｔオブジェクトを列挙するｆｏｒループの中で、基底＜ｓｃｏｒｅ＞に対応する値が４以上の場合に、元「１＜４以上，人，＃，＃＞」がリストへ追加される。そして、そのリストから集合ａｓｅｔが設定されている。
【００４２】
なおユーザコードにアグリゲーション命令（関数）が設定された場合、コード生成部２２は、集約規則テーブル１６に保持された集約規則を参照して、まず簿記の記載に対応するオブジェクト（以下、「中間オブジェクト」とも呼ぶ。）を設定する実行コードを生成する。具体的には、集約対象の複数のデータの集計値を算出し、その集計値と集約基底とを対応づけたデータと、集約対象の複数のデータそれぞれの値を差し引くことを示すデータ（すなわち集約対象の複数のオリジナルデータにハット属性を付加したデータ）とを加算する元を示すオブジェクトを、中間オブジェクトとして設定する実行コードを生成する。この中間オブジェクトは、前提技術１のアグリゲーションで示したＦ（ｘ）に対応する。
【００４３】
そしてコード生成部２２は、集約対象の複数のオリジナルデータが加算される元を示すオブジェクトと中間オブジェクトとを加算する、言い換えれば、集約対象の複数のオリジナルデータとそれらのデータにハット属性を付加したデータとを相殺することにより、集約対象の複数のデータの集計値と集約基底とを対応づけたデータを、集計結果のオブジェクトへ格納する実行コードを生成する。この実行コードは、前提技術１のアグリゲーションで示した〜（ｘ＋Ｆ（ｘ））に対応するコードである。なおコード生成部２２は、中間オブジェクトの内容を所定のファイルへ出力する実行コードをさらに生成してもよい。この態様によると、中間オブジェクトの内容をユーザへ提示することにより、効率的なデバッグを支援するとともに、簿記の振替計算に利用可能な情報をユーザへ提供できる。
【００４４】
またユーザコードに按分命令（関数）が設定された場合、コード生成部２２は、按分規則テーブル１８に保持された集約規則を参照して、アグリゲーション時と同様にまず中間オブジェクトを設定する実行コードを生成する。具体的には、按分対象のデータの値を按分比率にしたがって按分し、按分した値と按分先の各基底とを対応づけたデータと、按分対象のオリジナルデータにハット属性を付加したデータとを加算する元を示すオブジェクトを、中間オブジェクトとして設定する実行コードを生成する。この中間オブジェクトは、前提技術１の按分で示したＦ（ｘ）に対応する。
【００４５】
そしてコード生成部２２は、按分対象のオリジナルデータの元を示すオブジェクトと中間オブジェクトとを加算する、言い換えれば、按分対象のオリジナルデータとそのデータにハット属性を付加したデータとを相殺することにより、按分した値と按分先の各基底とを対応づけたデータを、按分結果のオブジェクトへ格納する実行コードを生成する。この実行コードは、前提技術１の按分で示した〜（ｘ＋Ｆ（ｘ））に対応するコードである。なおコード生成部２２は、アグリゲーションと同様に、中間オブジェクトの内容を所定のファイルへ出力する実行コードをさらに生成してもよい。
【００４６】
以上の構成による動作を以下説明する。
図７は、データ編集装置１０の動作を示すフローチャートである。まずユーザは、内包的記法言語を用いてデータの編集内容を内包的記法により記述し、そのプログラムコードを指定したデータの編集指示をデータ編集装置１０へ入力する。データ編集装置１０が所定の入力装置を介してデータの編集指示を受け付けた場合（Ｓ１０のＹ）、データ編集装置１０のコード取得部２０は、ユーザにより入力されたプログラムコードをユーザコードとして取得する（Ｓ１２）。コード生成部２２は、コード対応関係テーブル１４に保持されたユーザコードと実行コード間の対応関係にしたがって、ユーザコードから実行コードの生成処理を開始する（Ｓ１４）。
【００４７】
ユーザコードにアグリゲーション命令や按分命令等の振替え命令が存在する場合（Ｓ１６のＹ）、コード生成部２２はその振替え命令に応じた相殺処理のための中間オブジェクトの出力命令を実行コードへ設定する（Ｓ１８）。ユーザコードに振替え命令がなければ（Ｓ１６のＮ）、Ｓ１８をスキップする。編集処理部２４は、生成された実行コードにしたがって編集対象データに対する編集処理を実行する（Ｓ２０）。例えば、データ読込部２６は、データ保持部１２の入力データ格納用のＣＳＶファイルから、ユーザコードおよびユーザコードから生成された実行コードにおいて指定された編集対象のデータを読み込みデータオブジェクトを生成する。そしてデータ編集部２８は、生成されたデータオブジェクトに対して実行コードにて指定された編集操作（基底に基づく射影操作・アグリゲーション操作・按分操作等）を実行し、編集結果を示すデータオブジェクトを生成する。編集結果出力部３０は、編集処理部２４による編集結果、例えばデータ編集部２８により生成された編集結果を示すデータオブジェクトの内容（属性値等）を、データ保持部１２の編集結果格納用のＣＳＶファイルへ出力する（Ｓ２２）。データ編集装置１０がデータの編集指示を受け付けなければ（Ｓ１０のＮ）、Ｓ１２以降はスキップされる。
【００４８】
前提技術２のデータ編集装置１０によれば、従来ＲＤＢで扱われていたデータを、会計型データに対応するデータオブジェクト、もしくは、レコード型データに対応するデータオブジェクトとして表現することができる。これにより、コンピュータ上におけるデータオブジェクト表現の標準化を支援することができる。また、編集対象のデータの蓄積においてＲＤＢのような複雑な仕組みを必要とせず、可視性の高いＣＳＶファイルで蓄積することができる。
【００４９】
またデータ編集装置１０によれば、ユーザはデータの編集内容を内包的記法言語で記述できるため、データの編集内容を正しく理解しているユーザであれば、実際にコンピュータを動作させるための外延的記法言語について理解していなくても、正しいデータ編集を実現させることができる。またデータ編集装置１０では編集対象のデータが値と基底との組み合わせとして保持されるため、ユーザは内包的記法を用いることで、規定に基づく編集内容を容易に記述することができる。また内包的記法はコンピュータに依存せず、データ編集の仕様を反映するものであるため、ユーザは正しい仕様記述を行えば、正しいデータ編集を実現させることができる。例えば、ｆｏｒループ等を意識せずに、ユーザはデータの編集内容を仕様通りに記載すればよい。したがって、ユーザコードへのバグの混入を低減させることができ、言い換えれば、バグの発生箇所をデータそのもののバグに限定させやすくなる。例えば、会計型データの操作においては、アグリゲーションや按分等、様々な振替処理をロバストに記述することができる。
【００５０】
またデータ編集装置１０によれば、データの基底に基づいて値の編集処理が行われることにより、データの形式（スキーマ）に変更があった場合でも、その影響範囲を限定することができる。例えば、編集対象のデータを格納したテーブルにおいてカラムの入れ替えが発生しても、ユーザコードにおける編集ロジックへの影響を排除することができる。
【００５１】
またデータ編集装置１０によれば、アグリゲーションや按分等の振替処理の規則がプログラムコード外のテーブルに保持されるため、規則に変更が生じてもテーブルのデータを変更すればよく、プログラムコードへの影響を排除できる。
【００５２】
変形例として、データ編集装置１０は振替規則テーブルをさらに備えてもよい。振替規則テーブルは、振替操作（ここではアグリゲーションや按分を伴わない基底の変換操作であることとする）において参照されるべき振替規則を保持する記憶領域である。振替規則は、振替元の基底と振替先の基底とを対応づけたデータである。コード生成部２２は、ユーザコードに振替命令が設定された場合、振替規則テーブルに保持された振替規則を参照して、中間オブジェクトＦ（ｘ）を設定する実行コードを生成する。例えば、ｘ＝数値Ａ＜振替元の基底＞の場合、Ｆ（ｘ）＝数値Ａ＾＜振替元の基底＞＋数値Ａ＜振替先の基底＞となる。そしてコード生成部２２は、〜（ｘ＋Ｆ（ｘ））に対応した実行コードを生成する。当該コードの実行結果として、上記の例では、数値Ａ＜振替元の基底＞が、数値Ａ＜振替先の基底＞に変換されることになる。
【００５３】
（実施例の概要説明）
実施例では、ユニークなＩＤが付与された財が主体間で取引され、その取引が連鎖していく場合に、取引または財に関するトレーサビリティ（追跡可能性）を向上する技術を提案する。具体的には、上記のトレーサビリティに関する監査を支援するシステムおよび装置（後述の取引管理システム１００、取引管理装置１０８）を提案する。「財」は、物質的または精神的に何らかの効用を持つものであり、取引の対象となる有形財、無形財（サービス等）、知的財産を含む。実施例における「財」はリンゴ等の商品とする。また、実施例における「監査」は、取引の内容または取引の主体に関する認証・検証を含む。取引の主体は、様々な企業、団体、個人を含む。
【００５４】
２主体間での取引を複式簿記で記述する場合、一般的には価格表示が用いられる。例えば、主体Ａが主体Ｂに１つ以上のリンゴを８００円で販売したとすると、この取引は図８（ａ）、図８（ｂ）のように記述される。図８（ａ）は、主体Ａ側の取引記述を示し、図８（ｂ）は、主体Ｂ側の取引記述を示している。価格表示の場合、主体Ａ側の取引記述と、主体Ｂ側の取引記述は対称ではない。主体Ａは、図８（ａ）に示すリンゴの原価を含む情報を主体Ｂに知られたくない。これは売上勘定を用いても同様である。したがって、図８（ａ）、図８（ｂ）の情報を主体Ａ、主体Ｂ間で共有することはできない。
【００５５】
実施例では、簿記の抽象化である交換代数を用い、代数表現を用いて複式簿記を拡張した多元簿記を用いて、実物の取引を記録する。具体的には、取引記述において、財ごとに固有の計量の単位系（例えばリンゴであればＫｇでその量を評価する）を許す複式簿記記述（以下「実物簿記」とも呼ぶ。）を用いる。
【００５６】
図９（ａ）と図９（ｂ）は、主体Ａが主体Ｂにリンゴ２Ｋｇを８００円で販売した場合の、実物簿記を用いた取引記述を示す。図９（ａ）は、主体Ａ側の取引記述を示し、図９（ｂ）は、主体Ｂ側の取引記述を示している。実物簿記では、主体Ａ側の取引記述と、主体Ｂ側の取引記述とが対称な形になる。また、実物簿記による取引記述は、販売側の原価情報を含まない。したがって、取引を行った主体間で、実物簿記を用いた取引記述の内容を共有することができる。
【００５７】
実施例のシステムでは、２主体間での財の取引を基本的な単位として、その取引を、実物簿記を用いた取引記述のデータ（仕訳のデータとも言える）として記録する。そして、当該財が転々流通する都度、取引記述のデータを蓄積していく。実施例のシステムは、当該財に関する複数の取引記述のデータを合成して、当該財の取引の連鎖を示すデータ（「取引チェイン」とも呼ぶ。）を生成し、取引チェインに基づいて、当該財のトレーサビリティを確保する。また、実施例のシステムは、取引チェインに対して種々の監査計算（言い換えれば認証計算）を実行し、その結果として、種々の監査情報（言い換えれば認証情報）を提供する。
【００５８】
監査情報の提供先の特別なケースとして国の統計局が考えられる。現在、国の国民経済計算作成の基盤となっている「コモディティーフロー法」は、企業間の財の流れを調査票で把握しようとするものである。このコモディティーフロー法には、調査の精度や時間遅れなど大きな課題がある。企業間の取引のトレーサビリティチェーンが、信用ある取引に必須なものであると認識されて広がったならば、この取引チェインの情報から、個々の企業の情報としてではなく、品目単位で商品の流れの状況を日単位、週単位、月単位で捕捉できる。これにより、経済という取引のネットワークの動的プロセスの状態を観察することができ、また、従来の社会統計を刷新するものとして、国の政策立案のみならず企業自体の経営計画の策定に大きく寄与することができる。さらに、金融統計でも、例えばＣＤＳ(クレジットディフォルトスワップ）の生成や波及の取引を、同様なトレーサビリティチェーンとしてトレースすることができれば、金融リスクそのものも動的プロセスとして観察し評価することが可能となり政策的意義が大きいと考えられる。
【００５９】
実施例のシステムでは、前提技術に記載の交換代数に基づく実物簿記を用いて取引を記録する。以下の式１は、図９（ａ）に示した仕訳の内容を表し、式２は、図９（ｂ）に示した仕訳の内容を表している。
x1 = 2^<Apple, Kg, apple_243, id_A> + 800<Cash, Yen, *, id_A>  ・・（式１）
y1 = 2<Apple, Kg, apple_243, id_B> + 800^<Cash, Yen, *, id_B>  ・・（式２）
式１と式２の「apple_243」は、取引対象財（リンゴ）のユニークなＩＤである。また、「id_A」と「id_B」は、取引当事者である主体Ａと主体ＢのＩＤである。
【００６０】
前提技術において一部既述したように、実施例における複式簿記データや交換代数データは、実際には、オブジェクト指向言語におけるオブジェクトデータとしてストレージおよびメモリに記憶されてもよく、ＣＳＶファイルのデータとして永続的に記憶されてもよい。複式簿記データや交換代数データを処理する各装置のＣＰＵは、上記のオブジェクトデータを、論理的に複式簿記データや交換代数データとして取り扱い、基底に基づく各種演算処理を実行してもよい。
【００６１】
（第１実施例）
図１０は、実施例の取引管理システム１００の構成を示す。取引管理システム１００は、複数の取引者装置１０２（例えば取引者装置１０２ａ、取引者装置１０２ｂ、取引者装置１０２ｃ）と、監査者装置１０４と、取引データ保管装置１０６と、取引管理装置１０８を備える。これらの装置は、ＬＡＮ、ＷＡＮ、インターネット等を含む通信網１１０を介して接続される。
【００６２】
複数の取引者装置１０２は、商品の取引の当事者（主体Ａ、主体Ｂ等、実際には企業の従業員等）により操作される情報処理装置である。監査者装置１０４は、商品の取引を監査する監査者により操作される情報処理装置である。監査者は、企業または個人（最終消費者等）であってもよい。また、監査者は取引の当事者であってもよく、その場合、監査者装置１０４と取引者装置１０２は同一であってもよい。取引者装置１０２と監査者装置１０４は、例えば、ＰＣ、タブレット端末、スマートフォンであってもよい。
【００６３】
取引データ保管装置１０６は、第１主体から第２主体へ財が販売された場合に、その取引の内容を示す取引データを、取引対象の財のＩＤと対応づけて記憶する記憶装置である。取引データは、第１主体側の取引記述としての、財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、第２主体側の取引記述としての、財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む。実施例の取引データ保管装置１０６は、複数の取引者装置１０２から登録された複数の取引データコンテナ（後述）を記憶する。取引データ保管装置１０６は、ストレージ装置であってもよく、また、データベースサーバであってもよい。
【００６４】
取引管理装置１０８は、商品の取引を示す取引データのハッシュ値（実施例では後述する取引ハッシュコンテナ）を記憶し、商品の取引に関する監査（または認証）を支援する情報処理装置である。実施例の取引管理装置１０８は、取引に関する監査および認証を支援する機関（「認証局」とも呼ぶ。）に設置される。
【００６５】
図１１は、図１０の取引者装置１０２の機能構成を示すブロック図である。取引者装置１０２は、取引実績取得部１２０、取引データコンテナ生成部１２２、取引データコンテナ登録部１２４、取引ハッシュコンテナ生成部１２６、取引ハッシュコンテナ登録部１２８を備える。これら複数の機能ブロックに対応する複数のモジュールを含むコンピュータプログラムが、ＤＶＤ等の記録媒体に格納されて、または、ネットワーク経由でダウンロードされて、取引者装置１０２のストレージへインストールされてもよい。取引者装置１０２のＣＰＵは、上記コンピュータプログラムをメインメモリへ読み出して実行することにより、各機能ブロックの機能を発揮してもよい。
【００６６】
取引実績取得部１２０は、キーボードから入力された取引実績データを取得する。または、取引実績取得部１２０は、不図示の他装置から送信された取引実績データを取得する。実施例の取引実績データは、取引者のＩＤ（例えば販売者のＩＤと購入者のＩＤ）、取引対象の財のＩＤと財の種類、取引日時、取引量（財の販売量、販売価格（対価の量））を含む。販売実績データの内容を総称して取引内容とも呼ぶ。
【００６７】
取引データコンテナ生成部１２２は、取引実績データに基づいて、実物簿記による取引記述を含む、取引データコンテナを生成する。図１２は、取引データコンテナの例を示す。実施例の取引データコンテナは、キーバリュー型である。また、取引データコンテナは、ＪＳＯＮ（JavaScript（登録商標） Object Notation、）形式であってもよい。後述の取引ハッシュコンテナも同様である。
【００６８】
取引データコンテナ生成部１２２は、予め定められた変換規則にしたがって、取引実績データから、２主体間の取引記述（例えば上記の式１および式２）を生成する。例えば、取引データコンテナ生成部１２２は、取引実績データの各項目の値と、上記生成した取引記述を、取引データコンテナにおける対応する項目へ設定する。
【００６９】
変換規則は、取引対象となりうる複数種類の財のそれぞれに対して付与すべき基底に関するデータを含んでもよい。例えば、財の種類と基底のデータ（例えばリンゴと「<Apple, Kg, 財のＩＤ, 取引主体のＩＤ>」を対応付けたデータを含んでもよい。また、変換規則は、各基底が、複式簿記における貸方科目に該当するか、借方科目に該当するか、を定めたデータを含んでもよい。また、変換規則は、販売元主体のデータおよび販売先主体のデータに対する「＾」（ハット）を付与有無を定めたデータを含んでもよい。
【００７０】
取引データコンテナ生成部１２２は、取引データコンテナにおける取引データの値に、２主体間の取引記述（図１２では上記の式１と式２）を、認証局から予め提供された認証局の公開鍵（P_key1）で暗号化したデータ「Encode[P_key1]({x1, y1}）」を設定する。また、取引データコンテナ生成部１２２は、取引データコンテナにおける取引日時の値に、取引実績データが示す取引日時を設定する。また、取引データコンテナ生成部１２２は、取引データコンテナにおける取引者ＩＤの値に、取引当事者である２主体のＩＤを設定する。実施例では、「｛財の販売者，財の購入者｝」の順に設定する。また、取引データコンテナ生成部１２２は、取引データコンテナにおける財ＩＤの値に、取引対象商品のＩＤを設定する。
【００７１】
図１１に戻り、取引データコンテナ登録部１２４は、取引データコンテナ生成部１２２により生成された取引データコンテナを取引データ保管装置１０６に登録する。例えば、取引データコンテナ登録部１２４は、取引データコンテナを含む登録要求を取引データ保管装置１０６へ送信し、取引データ保管装置１０６に取引データコンテナを記憶させる。
【００７２】
取引ハッシュコンテナ生成部１２６は、取引実績データに基づいて、実物簿記による取引記述のハッシュ値を含む、取引ハッシュコンテナを生成する。取引ハッシュコンテナ生成部１２６は、２主体間の取引記述（図１２では上記の式１と式２）を、認証局から予め提供された認証局の公開鍵（P_key1）で暗号化し、その暗号化データを所定のハッシュ関数に入力してハッシュ値「Hash(encode[P_key1]({x1, y1}）)」を取得する。言い換えれば、取引ハッシュコンテナ生成部１２６は、取引データコンテナに設定された取引データのハッシュ値を取得する。使用するハッシュ関数は、ＭＤ５やＳＨＡ−２等、公知のものでよい。
【００７３】
図１３は、取引ハッシュコンテナの例を示す。取引ハッシュコンテナ生成部１２６は、取引ハッシュコンテナにおける取引ハッシュデータの値に、取引データのハッシュ値を設定する。他の項目は、取引データコンテナと同様である。
【００７４】
図１１に戻り、取引ハッシュコンテナ登録部１２８は、取引ハッシュコンテナ生成部１２６により生成された取引ハッシュコンテナを取引管理装置１０８に登録する。例えば、取引ハッシュコンテナ登録部１２８は、取引ハッシュコンテナを含む登録要求を取引管理装置１０８へ送信し、取引管理装置１０８に取引ハッシュコンテナを記憶させる。
【００７５】
なお、既述したように、実物簿記を適用した或る取引に関する取引データは、取引の当事者である２主体間で共有可能である。そのため、取引データコンテナと取引ハッシュコンテナの登録主体は、２主体（例えば上記の主体Ａ、主体Ｂ）のいずれであってもよい。
【００７６】
図１４は、図１０の取引管理装置１０８の機能構成を示すブロック図である。取引管理装置１０８は、取引ハッシュコンテナ記憶部１３０、取引ハッシュコンテナ受付部１３２、監査要求受付部１３４、取引データコンテナ抽出部１３６、取引ハッシュコンテナ抽出部１３８、監査部１４０、監査データ送信部１４２を備える。これら複数の機能ブロックに対応する複数のモジュールを含むコンピュータプログラムが、ＤＶＤ等の記録媒体に格納されて、または、ネットワーク経由でダウンロードされて、取引管理装置１０８のストレージへインストールされてもよい。取引管理装置１０８のＣＰＵは、上記コンピュータプログラムをメインメモリへ読み出して実行することにより、各機能ブロックの機能を発揮してもよい。
【００７７】
なお、取引管理装置１０８は、取引データ保管装置１０６の機能を含む構成でもよい。すなわち、取引管理装置１０８は、取引データコンテナを記憶する記憶部と、取引者装置１０２から送信された登録要求データを受け付けて、上記記憶部に取引データコンテナを格納する取引データコンテナ受付部とをさらに備えてもよい。
【００７８】
取引ハッシュコンテナ記憶部１３０は、第１主体から第２主体へ財が販売された場合に、その取引の内容を示す取引データのハッシュ値を、取引対象の財のＩＤと対応づけて記憶する。既述したように、取引データは、第１主体側の取引記述としての、財の移転と対価の獲得を交換代数を用いて示す複式簿記データと、第２主体側の取引記述としての、財の獲得と対価の移転を交換代数を用いて示す複式簿記データとを含む。実施例では、取引ハッシュコンテナ記憶部１３０は、複数の取引者装置１０２から登録された複数の取引ハッシュコンテナを記憶する。
【００７９】
取引ハッシュコンテナ受付部１３２は、複数の取引者装置１０２のそれぞれから送信された登録要求データを受け付け、登録要求データに含まれる取引ハッシュコンテナを取引ハッシュコンテナ記憶部１３０に格納する。
【００８０】
監査要求受付部１３４は、監査者装置１０４から送信された、監査対象となる特定の財のＩＤ（商品ＩＤとも言え、例えば上記の「apple_243」）を指定した監査要求を受け付ける。監査要求は、監査処理の実行を取引管理装置１０８に指示するデータと言え、また、監査支援情報の提供を要求するデータとも言える。
【００８１】
取引データコンテナ抽出部１３６は、監査要求受付部１３４が受け付けた監査要求で指定された財ＩＤをキーとして、その財ＩＤを含む取引データコンテナを取引データ保管装置１０６から取得する。取引データコンテナ抽出部１３６は、取得した１つ以上の取引データコンテナを監査部１４０に渡す。
【００８２】
取引ハッシュコンテナ抽出部１３８は、監査要求受付部１３４が受け付けた監査要求で指定された財ＩＤをキーとして、その財ＩＤを含む取引ハッシュコンテナを取引ハッシュコンテナ記憶部１３０から取得する。取引ハッシュコンテナ抽出部１３８は、取引データコンテナ抽出部１３６により取得された取引データコンテナに対応する取引ハッシュコンテナを取得し、言い換えれば、取引データコンテナ抽出部１３６により取得された取引データコンテナと同一の取引に関する取引ハッシュコンテナを取得する。取引ハッシュコンテナ抽出部１３８は、取得した１つ以上の取引ハッシュコンテナを監査部１４０に渡す。
【００８３】
監査部１４０は、取引データコンテナ抽出部１３６から入力された複数の取引データコンテナそれぞれが改ざんされていないことを確認する。具体的には、監査部１４０は、互いに対応する取引データコンテナと取引ハッシュコンテナについて、取引データコンテナに含まれる取引データのハッシュ値を求め、求めたハッシュ値が、取引ハッシュコンテナに含まれる取引ハッシュデータの値と一致するか否かを判定する。互いに対応する取引データコンテナと取引ハッシュコンテナは、同じ取引に基づいて記録されたデータである。監査部１４０は、取引日時、取引者ＩＤ、財ＩＤがいずれも一致する取引データコンテナと取引ハッシュコンテナを対応するものとして識別する。
【００８４】
監査部１４０は、両者のハッシュ値が一致する場合、取引データコンテナの取引データに改ざんがないと判定し、両者のハッシュ値が不一致の場合、取引データコンテナの取引データに改ざんがあると判定する。監査部１４０は、取引データコンテナの取引データに改ざんがあると判定した場合、監査要求に基づく監査支援処理をスキップする。この場合、監査部１４０は、取引データに改ざんがある旨のアラート情報を所定のログへ記録し、または、所定の外部装置へ通知してもよい。
【００８５】
監査部１４０は、取引データコンテナの取引データに改ざんがないと判定した場合、監査要求に基づく監査支援処理を継続する。監査部１４０は、監査要求で指定された財ＩＤに対応付けられた複数の取引データの和から、財の取引に関する要素を射影したデータである財取引連鎖データを生成する。監査部１４０は、財取引連鎖データに基づいて、監査要求で指定された財ＩＤで識別される財の取引に関する監査を支援するデータ（以下「監査支援データ」とも呼ぶ。）を生成する。
【００８６】
監査データ送信部１４２は、監査部１４０により生成された監査支援データを監査者装置１０４へ送信する。または、監査データ送信部１４２は、監査支援データを監査ログとして所定の記憶装置に記憶させてもよい。
【００８７】
監査部１４０は、唯一性監査部１４４、生産者監査部１４６、取引経路監査部１４８を含む。唯一性監査部１４４は、財取引連鎖データを相殺することにより、監査要求で指定された財ＩＤで識別される財の取引の唯一性に関するデータを監査支援データとして生成する。財の取引の唯一性に関するデータは、財の二重売買（重複した売買）の有無を示すデータであってもよい。
【００８８】
生産者監査部１４６は、財取引連鎖データを相殺することにより、監査要求で指定された財ＩＤで識別される財を生産した主体（「生産主体」とも呼ぶ。）、または、当該財の一連の取引を開始した主体（「取引開始主体」とも呼ぶ。）に関するデータを監査支援データとして生成する。
【００８９】
取引経路監査部１４８は、財取引連鎖データを相殺することにより、監査要求で指定された財ＩＤで識別される財の一連の取引の取引開始主体、または、一連の取引の終端の主体（「取引終端主体」とも呼ぶ。）を識別する。取引経路監査部１４８は、取引開始主体または取引終端主体を含む取引データを起点として当該財の取引を示す他の取引データを辿ることにより、当該財の取引経路に関するデータを監査支援データとして生成する。
【００９０】
以上の構成による取引管理システム１００の動作を説明する。
ここでは、主体Ａから主体Ｂへ販売され、さらに主体Ｂから主体Ｃへ販売された財に対して、監査者Ｄが監査を行うこととする。監査者Ｄは、例えば、主体Ｃから上記財の購入を検討している者でもよい。
【００９１】
具体的には、主体Ａが主体Ｂへリンゴ２Ｋｇ（ロットのＩＤは「apple_243」）を８００円で販売した。この取引は、上記の式１（x1）、式２（x2）の取引記述で表される。また、主体Ｂが主体Ｃへリンゴ２Ｋｇ（ロットのＩＤは「apple_243」）を１０００円で販売した。この取引は、以下の式３、式４で表される。式３は、主体Ｂ側の取引記述であり、式４は、主体Ｃ側の取引記述である。
x2 = 2^<Apple, Kg, apple_243, id_B> + 1000<Cash, Yen, *, id_B>  ・・（式３）
y2 = 2<Apple, Kg, apple_243, id_C> + 1000^<Cash, Yen, *, id_C>  ・・（式４）
【００９２】
式１と式２の取引データは、実物簿記であり、販売側の原価情報を含まないため、取引当事者のＡとＢ間で共有可能である。同様に、式３と式４の取引データも、実物簿記であり、販売側の原価情報を含まないため、取引当事者のＢとＣ間で共有可能である。
【００９３】
主体Ａまたは主体Ｂは、自社の取引者装置１０２に取引実績データを入力する。取引者装置１０２の取引データコンテナ生成部１２２は、取引実績データに基づいて、図１２で示した取引データコンテナを生成する。取引者装置１０２の取引データコンテナ登録部１２４は、その取引データコンテナを取引データ保管装置１０６に登録する。また、取引者装置１０２の取引ハッシュコンテナ生成部１２６は、取引実績データに基づいて、図１３で示した取引ハッシュコンテナを生成する。取引者装置１０２の取引ハッシュコンテナ登録部１２８は、その取引ハッシュコンテナを取引管理装置１０８に登録する。
【００９４】
主体Ｂまたは主体Ｃは、自社の取引者装置１０２に取引実績データを入力する。取引者装置１０２の取引データコンテナ生成部１２２は、取引データコンテナを生成し、取引データコンテナ登録部１２４は、その取引データコンテナを取引データ保管装置１０６に登録する。また、取引者装置１０２の取引ハッシュコンテナ生成部１２６は、取引ハッシュコンテナを生成し、取引ハッシュコンテナ登録部１２８は、その取引ハッシュコンテナを取引管理装置１０８に登録する。ここでの取引データコンテナの例を図１５に示し、取引ハッシュコンテナの例を図１６に示す。
【００９５】
監査者Ｄは、財ＩＤ「apple_243」を指定した監査要求を監査者装置１０４から取引管理装置１０８へ送信させる。取引管理装置１０８の監査要求受付部１３４は、監査者装置１０４から送信された監査要求を受け付ける。実施例での監査要求は、（１）取引の唯一性の監査要求、（２）財生産者に関する監査要求、（３）取引経路の監査要求を含みうる。
【００９６】
取引管理装置１０８の取引データコンテナ抽出部１３６は、取引データ保管装置１０６に記憶された複数の取引データコンテナの中から、監査要求で指定された財ＩＤに対応づけられた取引データコンテナを検索し、この例では２つの取引データコンテナ（図１２、図１５）を取得する。また、取引ハッシュコンテナ抽出部１３８は、取引ハッシュコンテナ記憶部１３０に記憶された複数の取引ハッシュコンテナの中から、監査要求で指定された財ＩＤに対応づけられた取引ハッシュコンテナを検索し、この例では２つの取引ハッシュコンテナ（図１３、図１６）を取得する。
【００９７】
監査部１４０は、取引データコンテナ抽出部１３６により取得された各取引データコンテナの取引データの改ざん有無を、対応する取引ハッシュコンテナの取引ハッシュデータに基づいて判定する。複数の取引データコンテナのいずれも改ざんされていない場合、監査部１４０は、複数の取引データコンテナの取引データを、予め記憶された取引管理装置１０８の秘密鍵を用いて復号する。例えば、監査部１４０は、図１２の取引データコンテナの取引データから取引記述ｘ１とｙ１を取得し、図１５の取引データコンテナの取引データから取引記述ｘ２とｙ２を取得する。以下、ｘ１、ｙ１、ｘ２、ｙ２を単に取引データとも呼ぶ。
【００９８】
監査部１４０は、監査要求で指定された財ＩＤ「apple_243」についての取引連鎖データ（交換代数チェインとも言え、以下「ExalgeChain」とも呼ぶ。）を生成する。取引連鎖データは、監査要求で指定された財ＩＤを持つ取引データコンテナから抽出した取引データの和をとったものとなる。一般に、ある財の取引連鎖データを「ExalgeChain[財のＩＤ]」と表現する。ここでの例では、監査部１４０は、取引連鎖データとして以下の式（５）を生成する。
【００９９】
ExalgeChain[apple_243] = Σ{x|x∈{x1, y1}∪{x2, y2}}
= 2^<Apple, Kg, apple_243, id_A> + 800<Cash, Yen, *, id_A>
+ 2<Apple, Kg, apple_243, id_B> + 800^<Cash, Yen, *, id_B>
+ 2^<Apple, Kg, apple_243, id_B> + 1000<Cash, Yen, *, id_B>
+ 2<Apple, Kg, apple_243, id_C> + 1000^<Cash, Yen, *, id_C>  ・・（式５）
【０１００】
監査部１４０は、取引連鎖データから財の取引に関する要素のみを射影した交換代数データを、財取引連鎖データ（交換代数プロダクトチェインとも言え、以下「ExalgeProductChain」とも呼ぶ。）として生成する。財取引連鎖データは、取引対象の財の最初の販売者（例えば財の生産者）から最後の購入者（例えば最終消費者）までの、財の売買の連鎖を表すデータである。ここでの例では、監査部１４０は、財取引連鎖データとして以下の式６を生成する。
【０１０１】
w1 = Projection[<Apple, *, apple_243, *>](ExalgeChain[apple_243])
= 2<Apple, Kg, apple_243, id_B> + 2<Apple, Kg, apple_243, id_C>
w2 = Projection[^<Apple, *, apple_243, *>](ExalgeChain[apple_243])
= 2^<Apple, Kg, apple_243, id_A> + 2^<Apple, Kg, apple_243, id_B>
ExalgeProductChain[apple_243] = w1 + w2
= 2<Apple, Kg, apple_243, id_B> + 2<Apple, Kg, apple_243, id_C> + 2^<Apple, Kg, apple_243, id_A> +  2^<Apple, Kg, apple_243, id_B>  ・・（式６）
実施例の監査部１４０は、この財取引連鎖データに基づいて、種々の監査支援データを生成する。
【０１０２】
（１）取引の唯一性の監査要求を受け付けた場合：
唯一性監査部１４４は、財取引連鎖データに相殺オペレーションを施す。ここでの例では、唯一性監査部１４４は、相殺結果として、以下の式７を生成する。
~(ExalgeProductChain[apple_243]) = 2<Apple, Kg, apple_243, id_C> + 2^<Apple, Kg, apple_243, id_A>  ・・（式７）
財取引連鎖データに相殺オペレーションを施すことにより、中間売買としての主体Ｂによる売買が相殺され、最初の販売者（ここでは主体Ａ）と、最後の購入者（ここでは主体Ｃ）が抽出される。また、最初の販売者から最後の購入者までの間に何段階の売買が存在しても、実物簿記であるため価格の変化に関係なく中間の売買は相殺される。
【０１０３】
財取引連鎖データの相殺結果において、最初の販売者による販売量は、「^」有りの項の取引量となり、「^」有りの項が複数存在すれば、それら複数の項の取引量の合計となる。また、最後の購入者による購入量は、「^」なしの項の取引量となり、「^」なしの項が複数存在すれば、それら複数の項の取引量の合計となる。取引の唯一性が維持されている場合、財取引連鎖データの相殺結果では、最初の販売者による販売量（この例では「^」付きのリンゴ２Ｋｇ）と、最後の購入者による購入量（この例では「^」なしのリンゴ２Ｋｇ）は等しくなる。一方、取引に唯一性がない場合、例えば主体Ｂが主体Ｃとは別の主体Ｅに「apple_243」と偽ってリンゴを販売していた場合、最初の販売者による販売量と、最後の購入者による購入量が不一致となる。
【０１０４】
唯一性監査部１４４は、財取引連鎖データの相殺結果において、最初の販売者による販売量と、最後の購入者による購入量とが一致する場合、財ＩＤ「apple_243」の取引に唯一性がある旨の監査支援データを生成する。一方、唯一性監査部１４４は、最初の販売者による販売量と、最後の購入者による購入量とが不一致の場合、財ＩＤ「apple_243」の取引に唯一性がない旨の監査支援データを生成する。この監査支援データは、取引の唯一性の認証結果データとも言える。この態様によると、監査者により指定された財の取引の唯一性の有無を効率的に検出し、監査者へ提示することができる。
【０１０５】
（２）財生産者に関する監査要求を受け付けた場合：
生産者監査部１４６は、唯一性監査部１４４と同様に、財取引連鎖データに相殺オペレーションを施す。ここでの例では、生産者監査部１４６は、相殺結果として、上記の式７を生成する。
【０１０６】
生産者監査部１４６は、財取引連鎖データの相殺結果において、「^」有りの項の取引者（すなわち基底の４番目のデータ）を、財の最初の販売者または財の生産者として示す監査支援データを生成する。ここでの監査支援データは、生産者の認証結果データとも言える。この態様によると、監査者により指定された財の生産者または取引開始者を効率的に検出し、監査者へ提示することができる。
【０１０７】
（３）取引経路の監査要求を受け付けた場合：
取引経路監査部１４８は、唯一性監査部１４４と同様に、財取引連鎖データに相殺オペレーションを施す。ここでの例では、取引経路監査部１４８は、相殺結果として、上記の式７を生成する。取引経路監査部１４８は、財取引連鎖データの相殺結果において、「^」有りの項の取引者（すなわち基底の４番目のデータ）を、財の最初の販売者として識別する。財の最初の販売者は、財の一連の取引における最上流の取引者であり、以下「取引開始者」と呼ぶ。
【０１０８】
取引経路監査部１４８は、取引データコンテナ抽出部１３６に、監査要求で指定された財ＩＤに対応付けられた取引データコンテナであり、かつ、取引者ＩＤの販売者側の値が取引開始者のＩＤに一致する取引データコンテナを取引データ保管装置１０６から取得させる。取引経路監査部１４８は、取得された取引データコンテナにおける取引者ＩＤの購入者側の値を、２番目の取引者として識別する。また、取引経路監査部１４８は、取引データコンテナ抽出部１３６に、監査要求で指定された財ＩＤに対応付けられた取引データコンテナであり、かつ、取引者ＩＤの販売者側の値が２番目の取引者のＩＤに一致する取引データコンテナを取引データ保管装置１０６から取得させる。
【０１０９】
取引経路監査部１４８は、取得された取引データコンテナにおける取引者ＩＤの購入者側の値を、３番目の取引者として識別する。これを繰り返してＮ番目の取引者を識別する。取引経路監査部１４８は、監査要求で指定された財ＩＤに対応付けられた取引データコンテナであり、かつ、取引者ＩＤの販売者側の値がＮ番目の取引者のＩＤに一致する取引データコンテナが、取引データ保管装置１０６に存在しない場合、Ｎ番目の取引者を最後の購入者として識別する。
【０１１０】
このように、取引経路監査部１４８は、取引開始者の取引データコンテナを起点として、同じ財の取引を示す他の取引データコンテナを辿ることにより、最後の購入者まで識別する。例えば、監査要求で財ＩＤ「apple_243」が指定された場合、取引経路監査部１４８は、図１２および図１５の取引データコンテナを順次取得し、最初の販売者「主体Ａ」、中間の取引者「主体Ｂ」、最後の購入者「主体Ｃ」を識別する。
【０１１１】
取引経路監査部１４８は、最初の販売者から、中間の取引者を挟み、最後の購入者までを並べて示す取引経路図を監査支援データとして生成する。図１７は、取引経路図の例を示す。取引経路監査部１４８は、取引開始者の取引データコンテナと、当該コンテナを起点として順次辿った他の取引データコンテナそれぞれの取引データを参照して、各取引者間での財の取引量を識別し、取引量を取引経路図に設定する。この態様によると、財が生産されてから現在まで、どのような経路で販売されてきたかの監査を支援することができる。
【０１１２】
なお、ここでは、財の流通を、最初の販売者から下流方向へ辿ったが、変形例として、財の流通を、最後の購入者から上流方向へ遡って、中間の取引者、最初の販売者を順次識別してもよい。例えば、取引経路監査部１４８は、財取引連鎖データの相殺結果において、「^」なしの項の取引者を、財の最後の購入者として識別してもよい。取引経路監査部１４８は、当該購入者に対応する取引データコンテナを起点として、同じ財の取引に関する他の取引データコンテナを順次取得してもよい。
【０１１３】
別の変形例として、取引経路監査部１４８は、取引データコンテナ抽出部１３６に、監査要求で指定された財ＩＤに対応付けられた１つ以上の取引データコンテナを取引データ保管装置１０６から取得させてもよい。取引経路監査部１４８は、取得された１つ以上の取引データコンテナを取引日時の順（言い換えれば取引の時系列）に並べ、取引日時が最も早い取引データコンテナから、取引日時が後の取引データコンテナへ順次辿っていくことにより、最初の販売者、中間の取引者、最後の購入者を識別してもよい。
【０１１４】
（第２実施例）
第１実施例における取引経路は、途中で分割されず、また、途中で合成がないこととした。しかし、実際のビジネスでは、購入したリンゴ２Ｋｇを、１Ｋｇずつ異なる主体へ販売する分割が行われることがあり、この場合、取引経路の分割が発生する。また、リンゴと砂糖を原料としてジャムを生産し、そのジャムを別途購入したガラス瓶に入れて販売する場合、取引経路の合成が発生する。第２実施例では、取引経路が分割され、もしくは合成される場合のトレーサビリティを向上させる技術を提案する。
【０１１５】
第２実施例の取引管理システム１００の構成、および、取引管理システム１００の各装置の機能は、第１実施例と同様である。以下、第１実施例で説明済みの内容は適宜省略し、主に、第１実施例と異なる点を説明する。
【０１１６】
１．取引経路が分割を含む場合（言い換えれば流通過程で財が分割される取引）：
取引データ保管装置１０６は、財の流通過程において当該財の流通経路が複数に分割された場合、流通経路分割前の財のＩＤである分割前ＩＤと、分割後の各々の流通経路における財のＩＤである複数の分割後ＩＤとの対応関係を示す取引データを記憶する。取引管理装置１０８の監査部１４０は、監査要求で分割前ＩＤまたは分割後ＩＤ（例えば複数の分割後ＩＤのいずれか）が指定された場合、分割前ＩＤに対応付けられた取引データと、分割後ＩＤ（例えば複数の分割後ＩＤのそれぞれ）に対応づけられた取引データの両方に基づいて財取引連鎖データを生成する。
【０１１７】
例として、食品の流通では、始点となる生産者から出荷された商品が、卸売から小売になる段階で小分けされ、販売されることがある。図１８は、流通過程で財が分割される取引の例を示す。この例では、主体Ｂが、リンゴのＩＤの付け替えを行う。この場合、主体Ｂの所でも新たなＩＤのリンゴが生産されたこととして、この生産を主体Ｂの内部取引として記述することで、分割前の取引と分割後の取引を接続することができる。
【０１１８】
この例では、主体Ａから主体Ｂへリンゴ２Ｋｇが８００円で販売されたとする。この取引は以下の式８、式９で表される。
x1 = 2^<Apple, Kg, apple_243, id_A> + 800<Cash, Yen, *, id_A>  ・・（式８）
y1 = 2<Apple, Kg, apple_243, id_B> + 800^<Cash, Yen, *, id_B>  ・・（式９）
主体Ａまたは主体Ｂの取引者装置１０２は、式８と式９の取引記述を格納した取引データコンテナを取引データ保管装置１０６に登録する。
【０１１９】
また、主体Ｂは、リンゴ２Ｋｇのロットから、リンゴ１Ｋｇのロット２つを生産し、各ロットに新たなロット番号（財ＩＤ）を付与する。このことは以下の式１０で表される。なお、新たな財ＩＤを「apple_243_1」、「apple_243_2」とする。
x2 = 2^<Apple, Kg, apple_243, id_B> + 1<Apple, Kg, apple_243_1, id_B> + 1<Apple, Kg, apple_243_2, id_B>  ・・（式１０）
【０１２０】
主体Ｂの取引者装置１０２は、式１０の取引記述を格納した取引データコンテナを取引データ保管装置１０６に登録する。取引データコンテナの財ＩＤには、オリジナルの財ＩＤ「apple_243」と、分割後の新たな財ＩＤ「apple_243_1」「apple_243_2」の両方が設定される。さらに、取引データコンテナには、財の分割を示す取引データ（交換代数データ）を含むことを示すフラグ（以下「分割定義フラグ」とも呼ぶ。）が付加される。
【０１２１】
続いて、主体Ｂから主体Ｃへリンゴ１Ｋｇが５００円で販売され、主体Ｂから主体Ｄへリンゴ１Ｋｇが５００円で販売されたこととする。前者の取引は、以下の式１１、式１２で表され、後者の取引は、以下の式１３、式１４で表される。
x3 = 1^<Apple, Kg, apple_243_1, id_B> + 500<Cash, Yen, *, id_B>  ・・（式１０）
y2 = 1<Apple, Kg, apple_243_1, id_C> + 500^<Cash, Yen, *, id_C>  ・・（式１１）
x4 = 1^<Apple, Kg, apple_243_2, id_B> + 500<Cash, Yen, *, id_B>  ・・（式１２）
y3 = 1<Apple, Kg, apple_243_2, id_D> + 500^<Cash, Yen, *, id_D>  ・・（式１３）
【０１２２】
主体Ｂまたは主体Ｃの取引者装置１０２は、式１０と式１１の取引記述を格納した取引データコンテナを取引データ保管装置１０６に登録する。また、主体Ｂまたは主体Ｄの取引者装置１０２は、式１２と式１３の取引記述を格納した取引データコンテナを取引データ保管装置１０６に登録する。
【０１２３】
監査要求では、財ＩＤ「apple_243」が指定されたとする。取引管理装置１０８の取引データコンテナ抽出部１３６は、財ＩＤ「apple_243」に対応付けられた取引データコンテナを取引データ保管装置１０６から取得する。また、取引データコンテナ抽出部１３６は、取得した取引データコンテナのうち分割定義フラグが付加された取引データコンテナの取引データに基づいて、ＩＤ「apple_243」の財が、ＩＤ「apple_243_1」の財と「apple_243_2」の財に分割されたことを検出する。取引データコンテナ抽出部１３６は、財ＩＤ「apple_243_1」または「apple_243_2」に対応付けられた取引データコンテナを取引データ保管装置１０６からさらに取得する。
【０１２４】
なお、第１実施例と同様に、取引ハッシュコンテナ抽出部１３８は、取引データコンテナに対応する取引ハッシュコンテナを取引ハッシュコンテナ記憶部１３０から取得する。監査部１４０は、取引データコンテナから生成したハッシュ値と、取引ハッシュコンテナに予め格納されたハッシュ値とを比較することにより、取引データコンテナの改ざん有無を検出する。
【０１２５】
監査部１４０は、財ＩＤ「apple_243」に対応付けられた取引データコンテナに含まれる取引データと、財ＩＤ「apple_243_1」または「apple_243_2」に対応付けられた取引データコンテナに含まれる取引データとの和を取引連鎖データとして生成する（以下の式１４）。
ExalgeChain[apple_243] = Σ{x|x∈{x1, y1}∪{x2}∪{x3, y2}∪{x4, y3}}
= 2^<Apple, Kg, apple_243, id_A> + 800<Cash, Yen, *, id_A>
+ 2<Apple, Kg, apple_243, id_B> + 800^<Cash, Yen, *, id_B>
+ 2^<Apple, Kg, apple_243, id_B> + 1<Apple, Kg, apple_243_1, id_B> + 1<Apple, Kg, apple_243_2, id_B>
+ 1^<Apple, Kg, apple_243_1, id_B> + 500<Cash, Yen, *, id_B>
+ 1<Apple, Kg, apple_243_1, id_C> + 500^<Cash, Yen, *, id_C>
+ 1^<Apple, Kg, apple_243_2, id_B> + 500<Cash, Yen, *, id_B>
+ 1<Apple, Kg, apple_243_2, id_D> + 500^<Cash, Yen, *, id_D>  ・・（式１４）
【０１２６】
監査部１４０は、上記の取引連鎖データに対して、「apple_243」「apple_243_1」「apple_243_2」を含めて射影操作を行い財取引連鎖データを得る（以下の式１５）。
ExalgeProductChain[apple_243]
= Projection[<Apple, *, apple_243, *>](ExalgeChain[apple_243])
+ Projection[^<Apple, *, apple_243, *>](ExalgeChain[apple_243])
+ Projection[<Apple, *, apple_243_1, *>](ExalgeChain[apple_243])
+ Projection[^<Apple, *, apple_243_1, *>](ExalgeChain[apple_243])
+ Projection[<Apple, *, apple_243_2, *>](ExalgeChain[apple_243])
+ Projection[^<Apple, *, apple_243_2, *>](ExalgeChain[apple_243])
= 2^<Apple, Kg, apple_243, id_A> + 2<Apple, Kg, apple_243, id_B> + 2^<Apple, Kg, apple_243, id_B> + 1<Apple, Kg, apple_243_1, id_B> + 1<Apple, Kg, apple_243_2, id_B> + 1^<Apple, Kg, apple_243_1, id_B> + 1<Apple, Kg, apple_243_1, id_C> + 1^<Apple, Kg, apple_243_2, id_B> + 1<Apple, Kg, apple_243_2, id_D>  ・・（式１５）
【０１２７】
監査部１４０は、第１実施例と同様に、財取引連鎖データに基づいて、種々の監査支援データを生成可能である。例えば、式１５の財取引連鎖データに相殺オペレーションを施すと以下の式１６が得られる。
~(ExalgeProductChain[apple_243]) = 2^<Apple, Kg, apple_243, id_A> + 1<Apple, Kg, apple_243_1, id_C> + 1<Apple, Kg, apple_243_2, id_D>  ・・（式１６）
唯一性監査部１４４、生産者監査部１４６、取引経路監査部１４８は、式１６に示す財取引連鎖データの相殺結果に基づいて、第１実施例と同様の手順により監査支援データを生成することができる。
【０１２８】
上記の監査要求では、流通経路分割前の財ＩＤ（「apple_243」）が指定されたが、流通経路分割後の財ＩＤ（「apple_243_1」または「apple_243_2」）が指定されてもよい。監査要求で通経路分割後の財ＩＤ（ここでは「apple_243_1」とする）が指定された場合、取引データコンテナ抽出部１３６は、財ＩＤ「apple_243_1」に対応付けられた取引データコンテナを取引データ保管装置１０６から取得する。
【０１２９】
取引データコンテナ抽出部１３６は、取得した取引データコンテナのうち分割定義フラグが付加された取引データコンテナの取引データに基づいて、ＩＤ「apple_243」の財が、ＩＤ「apple_243_1」の財と「apple_243_2」の財に分割されたことを検出する。取引データコンテナ抽出部１３６は、財ＩＤ「apple_243」または「apple_243_2」に対応付けられた取引データコンテナを取引データ保管装置１０６からさらに取得する。以降、上記例と同様に、財ＩＤ「apple_243」、「apple_243_1」、または「apple_243_2」に対応付けられた取引データコンテナに基づいて、各種監査支援データを生成可能になる。
【０１３０】
２．取引経路が合成を含む場合（言い換えれば流通過程で新たな財が生産される取引）：
取引データ保管装置１０６は、財の流通過程において複数の流通経路が１つの流通経路に合成された場合、流通経路合成前の各々の流通経路における財のＩＤである複数の合成前ＩＤと、合成後の流通経路における財のＩＤである合成後ＩＤとの対応関係を示す取引データを記憶する。取引管理装置１０８の監査部１４０は、監査要求で合成前ＩＤ（例えば複数の合成前ＩＤのいずれか）または合成後ＩＤが指定された場合、合成前ＩＤ（例えば複数の合成前ＩＤのそれぞれ）に対応付けられた取引データと、合成後ＩＤに対応づけられた取引データの両方に基づいて財取引連鎖データを生成する。
【０１３１】
図１９は、流通過程で新たな財が生産される取引の例を示す。この例では、主体Ｃが、主体Ａから購入したリンゴ２Ｋｇ、主体Ｂから購入した砂糖６００ｇ、主体Ｃから購入したガラス瓶１０個をもとに（瓶入りの）ジャム１０個を生産し、そのジャム１０個を主体Ｅへ販売する。
【０１３２】
主体Ａから主体Ｄへのリンゴ２Ｋｇの販売は次のような取引記述となる。
x1 = 2^<Apple, Kg, apple_243, id_A> + 800<Cash, Yen, *, id_A>  ・・（式１７）
y1 = 2<Apple, Kg, apple_243, id_D> + 800^<Cash, Yen, *, id_D>  ・・（式１８）
主体Ｂから主体Ｄへの砂糖６００ｇの販売は次のような取引記述となる。
x2 = 600^<Sugar, g, sugar_111, id_B> + 300<Cash, Yen, *, id_B>  ・・（式１９）
y2 = 600<Sugar, g, sugar_111, id_D> + 300^<Cash, Yen, *, id_D>  ・・（式２０）
主体Ｃから主体Ｄへのガラス瓶１０個の販売は次のような取引記述となる。
x3 = 10^<Jar,個, jar_222, id_C> + 100<Cash, Yen, *, id_C>  ・・（式２１）
y3 = 10<Jar,個, jar_222, id_D> + 100^<Cash, Yen, *, id_D>  ・・（式２２）
【０１３３】
主体Ｄによるジャムの生産は、主体Ｄ内の取引として次のような取引記述となる。
x4 = 2^<Apple, Kg, apple_243, id_D> + 600^<Sugar, g, sugar_111, id_D> + 10^<Jar,個, jar_222, id_D> + 10<Jam,個, jam_333, id_D>  ・・（式２３）
式２３の取引記述を含む取引データコンテナの財ＩＤには、合成前の財ＩＤである「apple_243」「sugar_111」「jar_222」と、合成後の財ＩＤである「jam_333」の両方が設定される。また、当該取引データコンテナには、財の合成（言い換えれば新たな財の生産）を示す取引データを含むことを示すフラグ（以下「合成定義フラグ」とも呼ぶ。生産定義フラグとも言える。）が付加される。
【０１３４】
主体Ｄから主体Ｅへの（瓶入りの）ジャム１０個の販売は次のような取引記述となる。
x1 = 10^<Jam,個, jam_333, id_D> + 2000<Cash, Yen, *, id_D>  ・・（式２４）
y1 = 10<Jam,個, jam_333, id_E> + 2000^<Cash, Yen, *, id_E>  ・・（式２５）
【０１３５】
このように、財の流通過程で流通経路の合成が生じる場合、言い換えれば、財の流通過程で新たな財が生産される場合であっても、式２３に示す合成定義により、ＩＤ「apple_243」「 sugar_111」「jar_222」の財が、ＩＤ「jam_333」の財に合成されたことを検出可能になる。これにより、監査要求で「apple_243」「 sugar_111」「jar_222」「jam_333」のいずれが指定された場合でも、式１７〜式２５を合成した取引連鎖データ（さらに財取引連鎖データ）を生成可能になり、原料も含めたジャムの取引に関する各種監査情報を提供できる。例えば、ジャムの購入者（主体Ｅ）による、（１）原料も含めた取引の唯一性、（２）原料の生産者、（３）原料も含めた取引経路、の認証および監査を支援することができる。
【０１３６】
以上、本発明を第１実施例、第２実施例をもとに説明した。これらの実施例は例示であり、各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【０１３７】
第１変形例を説明する。第１実施例および第２実施例において、２主体間での取引が連鎖していき商品が流通する場合、取引データコンテナと取引ハッシュコンテナの登録時、および、監査支援データの生成時に、２主体間での取引情報が当事者以外の第三者へ漏洩せず、認証または監査に関連する情報だけが抽出される一種の「秘密保持計算」が行われる必要がある。
【０１３８】
一般的に、秘密計算（Secure Computation）と呼ばれる計算は、データを暗号化した状態のまま、暗号化された対象に対して加減乗除等の計算処理を直接行う。しかし、秘密計算は、しばしば多くの計算量を必要とし、大がかりな処理となる一方で、可能な計算は限られている。そのため、秘密計算は、取引チェイン全体に亘る多くの取引データを対象とした認証および監査に向いているとは言えない。
【０１３９】
本変形例では、「非開示計算」（Non-Disclosure Computation）の仕組みを導入する。非開示計算では、計算対象のデータを外部に漏らすことがないアルゴリズムが実装されていることが事前に認証（確認）された計算モジュールについて、その計算モジュールが改ざんされていないことを計算実行の都度検証する。
【０１４０】
具体的には、交換代数の計算を行うことができる関数計算型の言語で定義された関数（言い換えればフィルタ）に対して、その定義上の安全性をまず検証する。関数計算型の言語で実装された関数であれば、例えばそのソースコードを確認することにより、定義上の安全性を検証すること、具体的には、目的の計算以外の、情報流出に関する処理が関数の定義に含まれていないかを検証することは容易である。
【０１４１】
こうして検証された関数（ソースコード）をコンパイルしたオブジェクトコード（または実行形式）のハッシュ値をリストに登録する。このリストをホワイトリストと呼び、安全であることが検証された関数をホワイトな関数と呼ぶ。ホワイトな関数を連結してできる合成関数もホワイトな関数となる。ホワイトリストには、関数（機能ブロック）の識別名称と、正当なハッシュ値との組み合わせが複数記録されてもよい。
【０１４２】
関数の実行に際して、実行対象の関数のオブジェクトコード（または実行形式）のハッシュ値を動的に取得し、そのハッシュ値を予め記憶されたホワイトリストにおけるハッシュ値と比較する。そして、両者のハッシュ値が一致した場合にのみ、実行対象の関数を実行する。一方、両者のハッシュ値が不一致の場合、実行対象の関数の実行を抑制する。これにより、交換代数に関する計算処理において外部へ情報が漏洩することを抑制できる。
【０１４３】
この非開示計算の仕組みは、交換代数の計算を行う情報処理装置である取引者装置１０２および取引管理装置１０８に導入してもよい。具体的には、取引者装置１０２の取引データコンテナ生成部１２２、取引ハッシュコンテナ生成部１２６、取引管理装置１０８の監査部１４０に適用してもよく、これらの機能ブロックの実行開始時に、当該機能ブロックの機能を発揮する計算モジュール（オブジェクトコード）のハッシュ値を取得し、ホワイトリストのハッシュ値と比較してもよい。また、非開示計算の仕組みは、秘密情報を処理する種々の情報処理装置に有用であり、例えば、医療情報を取り扱う情報処理装置に有用である。
【０１４４】
なお、ホワイトリストは、取引者装置１０２と取引管理装置１０８のそれぞれに記憶されてもよい。また、ホワイトリストは、取引管理装置１０８（すなわち認証局の装置）に記憶され、取引者装置１０２は、ホワイトリストのデータを取引管理装置１０８に問い合わせてもよい。また、ホワイトリストは、図１０に不図示の装置に記憶され、取引者装置１０２および取引管理装置１０８は、ホワイトリストのデータを上記不図示の装置に問い合わせてもよい。なお、実行環境の同一を担保するためには、コンテナ型仮想化（Ｄｏｃｋｅｒ等）による仮想サーバ（言い換えればコンテナ）上で、関数が実行されることが望ましい。
【０１４５】
第１変形例の構成例を説明する。ここでは非開示計算の仕組みを取引管理装置１０８に導入する例を示す。取引管理装置１０８の監査部１４０の機能は、当該機能が実装されたコンピュータプログラム（ここでは「監査部命令セット」とも呼ぶ。）を取引管理装置１０８のＣＰＵが実行することにより発揮されてもよい。取引管理装置１０８は、正規の監査部命令セットのハッシュ値である第１ハッシュ値を記憶する記憶部にアクセス可能である。例えば、第１ハッシュ値を記憶する記憶部は、取引管理装置１０８に設けられてもよく、通信網を介して取引管理装置１０８に接続された他装置に設けられてもよい。
【０１４６】
取引管理装置１０８は照合部をさらに備えてもよい。照合部は、取引管理装置１０８のＣＰＵが監査部命令セットを実行する際（言い換えれば、監査部命令セットの実行開始時であり、すなわち監査部１４０の機能を発揮すべき際）に、実行対象となる監査部命令セットのハッシュ値である第２ハッシュ値を動的に取得する。照合部は、上記の記憶部から第１ハッシュ値を取得し、第１ハッシュ値と第２ハッシュ値とを照合する。取引管理装置１０８のＣＰＵは、照合部により第１ハッシュ値と第２ハッシュ値とが一致すると判定された場合に監査部命令セットを実行し、第１ハッシュ値と第２ハッシュ値とが不一致と判定された場合、監査部命令セットの実行を抑制する（中止する）。
【０１４７】
第２変形例を説明する。上記実施例では、取引管理装置１０８は、監査要求を受け付けたことを契機として、その監査要求で指定された財ＩＤに対応する複数の取引データを合算した取引連鎖データ（例えば「ExalgeChain[apple_243]」）を生成した。変形例として、取引管理装置１０８は、取引データ保管装置１０６に取引データコンテナが登録された財ＩＤのそれぞれについて、取引データコンテナが登録される都度、取引連鎖データを更新してもよい。取引管理装置１０８は、監査要求を受け付けるか否かに関わらず、複数の財ＩＤに対応する複数の取引連鎖データを更新し、最新の複数の取引連鎖データを暗号化して所定の記憶部に記憶してもよい。この態様によると、監査要求受付時における取引データの取得処理と、取引連鎖データの生成処理をスキップでき、認証または監査のための計算を効率化することができる。
【０１４８】
第３変形例を説明する。取引データコンテナは、財の生産、販売、環境負荷、生産者、取引者に関する追加情報または補完情報を含んでもよい。また、これらの追加情報を取得可能なリソース位置（ＵＲＬ）を含んでもよい。取引ハッシュコンテナも同様である。
【０１４９】
第４変形例を説明する。取引管理システム１００は、複数の認証局を備えてもよく、それら複数の認証局の装置として、複数の取引データ保管装置１０６および複数の取引管理装置１０８を備えてもよい。この場合、複数の取引データ保管装置１０６および複数の取引管理装置１０８は、それぞれが保持するデータ（取引データコンテナ等）、および、それぞれによる計算結果（財取引連鎖データの相殺結果等）を互いに参照可能なように構成される。また、認証または監査のための計算処理を互いに委託可能に構成される。これにより、取引者がどの認証局を利用しても問題が生じず、認証局間の競争を促すことができる。
【０１５０】
上述した実施の形態、変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施の形態、変形例それぞれの効果をあわせもつ。請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【符号の説明】
【０１５１】
１００  取引管理システム、  １０６  取引データ保管装置、  １０８  取引管理装置、  １３４  監査要求受付部、  １４０  監査部、  １４２  監査データ送信部、  １４４  唯一性監査部、  １４６  生産者監査部、  １４８  取引経路監査部。
【図１】
2019121220.tif 000003
【図２】
2019121220.tif 000004
【図３】
2019121220.tif 000005
【図４（ａ）】
2019121220.tif 000006
【図４（ｂ）】
2019121220.tif 000007
【図５】
2019121220.tif 000008
【図６（ａ）】
2019121220.tif 000009
【図６（ｂ）】
2019121220.tif 000010
【図７】
2019121220.tif 000011
【図８】
2019121220.tif 000012
【図９】
2019121220.tif 000013
【図１０】
2019121220.tif 000014
【図１１】
2019121220.tif 000015
【図１２】
2019121220.tif 000016
【図１３】
2019121220.tif 000017
【図１４】
2019121220.tif 000018
【図１５】
2019121220.tif 000019
【図１６】
2019121220.tif 000020
【図１７】
2019121220.tif 000021
【図１８】
2019121220.tif 000022
【図１９】
2019121220.tif 000023