(57)【要約】  コンピュータソフトウェア開発は、コンピュータサイエンスにおいて、また、現代社会の殆どの態様において多くの進化をもたらしてきた。現代の品質管理においても、バグの発見およびその他のコード検査用途において、コンピュータソフトウェアは理想には程遠いことが多い。開発者は、機能的には正確であるが、セキュリティ、ドキュメンテーション、速度、記憶、再利用可能性またはその他の要素が欠けたコードを書くことがあり、それが、ソフトウェアコードのセグメントを理想に程遠くしている。等価コードを識別し、識別された場合に、その等価コードを審査される等価物と置換することは、より堅牢で、安全で利用および再利用可能、および／または性能を満たす、またはその他の目的のソフトウェアの開発を促進する。
2018505506.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
候補機能を有し人間に可読な第１の機械命令を備えた候補ソースコードを、プロセッサによりデータリポジトリから取り出し、
人間に可読な第２の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、前記プロセッサによりデータリポジトリからアクセスし、
前記プロセッサにより、前記候補機能と前記好ましい機能の間の等価性を自動的に判断し、
等価性が判断されると、前記プロセッサによって、前記候補機能と前記好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
前記インディシアが供給されると、前記候補機能を前記好ましい機能と置換することを含めて、前記プロセッサによって候補ソースコードを自動的に変換し、
前記変換された前記候補ソースコードを出力する、
ことを含む方法。
【請求項２】
前記インディシアを供給するステップは、変換および出力ステップを含む、請求項１に記載の方法。
【請求項３】
前記好ましい機能は、人間に可読な第２の機械命令とは関連しない人間に可読な要素を含む、請求項１に記載の方法。
【請求項４】
前記等価性を判断するステップは、前記候補機能と前記好ましい機能の間でいくつかの入力／出力パラメータが異なると判断した場合に不良となる、請求項１に記載の方法。
【請求項５】
前記等価性を判断するステップは、
前記候補機能と前記好ましい機能の間で少なくとも１つの入力／出力パラメータが異なると判断し、また、
差異が等価クラスの差異を含む場合に不良となる、
請求項１に記載の方法。
【請求項６】
前記候補機能の第１の機械可読変換を提供し、
前記好ましい機能の第２の機械可読変換を提供し、
入力の有限セットのうち１つで、前記第１の機械可読変換と前記第２の機械可読変換の両方を実行し、
前記第１の機械可読変換と前記第２の機械可読変換の両方を実行するステップがそれぞれ、前記候補機能の第１の機械可読変換および第２の機械可読変換各々から等価値を出力したことを受けて等価性を判断する、
請求項１に記載の方法。
【請求項７】
等価性を判断するステップがさらに、
候補機能の論理方程式を導出し、
好ましい機能の論理方程式にアクセスすることを含み、
前記候補機能の論理方程式が、前記好ましい機能の論理方程式とは異なると判断された場合に等価性が判断できない、
請求項１に記載の方法。
【請求項８】
前記候補機能の論理方程式が前記好ましい機能の論理方程式と等価であると判断されるかどうかの判断はさらに、
前記候補機能の論理方程式と前記好ましい機能の論理方程式を自動定理証明器に供給し、
等価性を示すインディシアを前記自動定理証明器から受け取る、ことを含む、
請求項７に記載の方法。
【請求項９】
前記好ましい機能は、機械コードに変換された場合に、事前に識別された最適な方式で前記好ましい機能を機械に実行させる命令のセットを含む、
請求項１に記載の方法。
【請求項１０】
前記事前に識別された最適な方式は、少なくとも１つのセキュリティ目的に準拠する識別された方式を含む、請求項９に記載の方法。
【請求項１１】
前記機械はプロセッサを含み、前記事前に識別された最適な方式は、識別されたプロセッサ動作の個数を含む、請求項９に記載の方法。
【請求項１２】
前記機械はメモリを含み、前記事前に識別された最適な方式は、機械コードを記憶するために必要なメモリの識別されたサイズを含む、請求項９に記載の方法。
【請求項１３】
前記好ましい機能は、事前に簡潔なソースコードとして識別された命令のセットを含む、請求項１に記載の方法。
【請求項１４】
等価性を判断するステップがさらに、
前記候補機能から、前記候補機能の等価クラスのセットを生成することを含み、前記等価クラスは、等価機能のセットを含み、前記セットの各要素は機能からソースへのマッピングを有する、請求項１に記載の方法。
【請求項１５】
前記好ましい機能は、前記候補機能と前記好ましい機能の間の等価性に関する抽象構文構造判断に従って選択された最も簡潔なメンバを含む、請求項１に記載の方法。
【請求項１６】
前記抽象構文構造は抽象構文ツリー（ＡＳＴ）を含む、請求項１に記載の方法。
【請求項１７】
前記好ましい機能と候補機能のうち一方は第１の記号で表され、
前記プロセッサによって、前記候補機能と好ましい機能の間の等価性を自動的に判断することはさらに、前記候補機能と好ましい機能のうち他方と前記第１の記号との等価性を判断することを含む、
請求項１に記載の方法。
【請求項１８】
前記好ましい機能と候補機能のうち他方は第２の記号で表され、
前記プロセッサによって、前記候補機能と好ましい機能の間の等価性を自動的に判断することはさらに、前記第１の記号と前記第２の記号の間の等価性を判断することを含む、
請求項１７に記載の方法。
【請求項１９】
前記好ましい機能と前記候補機能のうち少なくとも１つが、サブルーチンを含む、請求項１に記載の方法。
【請求項２０】
前記好ましい機能と前記候補機能のうち少なくとも１つが、方法を含む、請求項１に記載の方法。
【請求項２１】
前記好ましい機能と前記候補機能のうち少なくとも１つが、手順を含む、請求項１に記載の方法。
【請求項２２】
前記好ましい機能と前記候補機能のうち少なくとも１つが、述語を含む、請求項１に記載の方法。
【請求項２３】
前記好ましい機能と前記候補機能のうち少なくとも１つが、命令のシーケンスまたは大規模コンピュータプログラム内のルールを含む、請求項１に記載の方法。
【請求項２４】
前記好ましい機能と前記候補機能のうち少なくとも１つが、前記ルールによる単一の出力への入力に関する関係を含む、請求項１に記載の方法。
【請求項２５】
システムであって、
データリポジトリと、
プロセッサを備え、
前記プロセッサは、
候補機能を有し、人間に可読な第１の機械命令を備えた候補ソースコードを、データリポジトリから取り出し、
データデポジトリから好ましい機能にアクセスし、前記好ましい機能は、人間に可読な第２の機械命令を備え、認定ソースコードとして事前に識別されており、
前記候補機能と好ましい機能の間の等価性を自動的に判断し、
等価性が判断されると、前記候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
前記インディシアが供給されると、前記候補機能を前記好ましい機能と置換することを含めて、前記候補ソースコードを自動的に変換し、
前記変換された候補ソースコードを出力する、
システム。
【請求項２６】
前記プロセッサがインディシアを供給することは、前記候補機能を、前記候補ソースコード内の好ましい機能と置換して、その結果を好ましいソースコードとしてセーブすることを含む、請求項２５に記載のシステム。
【請求項２７】
前記プロセッサは、（ａ）候補機能と好ましい機能の間でいくつかの入力／出力パラメータに差異があると判断した場合、および、（ｂ）候補機能と好ましい機能の間で少なくとも１つの入力／出力パラメータに差異があると判断した場合の少なくとも一方であって、差異が等価クラスの差異を含む場合に等価性を判断できない、請求項２５に記載のシステム。
【請求項２８】
前記プロセッサが前記候補機能と好ましい機能の間の等価性を判断することは、前記候補機能と好ましい機能のうち一方を表す第１の記号と、前記候補機能と好ましい機能のうち他方との間の等価性を判断することを含む、請求項２５に記載のシステム。
【請求項２９】
前記プロセッサが前記候補機能と好ましい機能の間の等価性を判断することは、前記候補機能と好ましい機能のうち一方を表す第１の記号と、前記候補機能と好ましい機能のうち他方を表す第２の記号との間の等価性を判断することを含む、請求項２８に記載のシステム。
【請求項３０】
前記好ましい機能と前記候補機能のうち少なくとも１つがサブルーチンを含む、請求項２５に記載のシステム。
【請求項３１】
前記好ましい機能と前記候補機能のうち少なくとも１つが方法を含む、請求項２５に記載のシステム。
【請求項３２】
前記好ましい機能と前記候補機能のうち少なくとも１つが手順を含む、請求項２５に記載のシステム。
【請求項３３】
前記好ましい機能と前記候補機能のうち少なくとも１つが述語を含む、請求項２５に記載のシステム。
【請求項３４】
前記好ましい機能と前記候補機能のうち少なくとも１つが、命令のシーケンスまたは大規模コンピュータプログラム内のルールを含む、請求項２５に記載のシステム。
【請求項３５】
前記好ましい機能と前記候補機能のうち少なくとも１つが、前記ルールによる単一の出力への入力に関する関係を含む、請求項２５に記載のシステム。
【請求項３６】
命令を自動編集するシステムであって、
機能を有し、人間に可読な第１の機械命令を備えた候補ソースコードを、データリポジトリから取り出す手段と、
データデポジトリから、人間に可読な第２の機械命令を備えた好ましい機能にアクセスする手段を備え、人間に可読な第２の機械命令は認定ソースコードとして事前に識別されており、
さらに、候補機能と好ましい機能の間の等価性を自動的に判断する手段と、
等価性が判断されると、前記候補機能と前記好ましい機能に関連付けられた等価のインディシアを自動的に供給する手段と、
前記インディシアが供給されると、前記候補機能を前記好ましい機能と置換することを含めて、前記候補ソースコードをプロセッサによって自動的に変換する手段と、
前記変換された候補ソースコードを出力する手段と、
を備えたシステム。
【請求項３７】
前記インディシアを供給するシステムは、変換および出力手段を含む、請求項３６に記載のシステム。
【請求項３８】
前記候補機能と好ましい機能の間の等価性を自動的に判断する手段はさらに、前記候補機能と好ましい機能のうちの一方と、前記候補機能と好ましい機能のうちの他方を表す前記第１の記号との間の等価性を判断する手段を含む、請求項３６に記載のシステム。
【請求項３９】
前記候補機能と好ましい機能の間の等価性を自動的に判断する手段はさらに、前記候補機能と好ましい機能のうちの一方を表す第２の記号と、前記第１の記号との間の等価性を判断する手段を含む、請求項３８に記載のシステム。
【請求項４０】
前記好ましい機能と前記候補機能のうち少なくとも１つがサブルーチンを含む、請求項３６に記載のシステム。
【請求項４１】
前記好ましい機能と前記候補機能のうち少なくとも１つが方法を含む、請求項３６に記載のシステム。
【請求項４２】
前記好ましい機能と前記候補機能のうち少なくとも１つが手順を含む、請求項３６に記載のシステム。
【請求項４３】
前記好ましい機能と前記候補機能のうち少なくとも１つが述語を含む、請求項３６に記載のシステム。
【請求項４４】
前記好ましい機能と前記候補機能のうち少なくとも１つが命令のシーケンスまたは大規模コンピュータプログラム内のルールを含む、請求項３６に記載のシステム。
【請求項４５】
前記好ましい機能と前記候補機能のうち少なくとも１つが、前記ルールによる単一の出力への入力に関する関係を含む、請求項３６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般に、機械ベースのパターン認識および選択的編集を対象とする。
【０００２】
関連出願の相互参照
本出願は、２０１５年２月９日に出願された、タイトルが「Ｉｎｔｒｏｄｕｃｔｉｏｎ： Ｊｕｍｐｉｎｇ ｔｈｅ Ｔａｒ Ｐｉｔ」の米国特許仮出願第６２／１１３，６２３号、２０１５年２月９日に出願された、タイトルが「Ｓｏｆｔｗａｒｅ  Ｅｎｇｉｎｅｅｒｉｎｇ，Ｓｏｆｔｗａｒｅ−Ａｓ−Ｄａｔａ：Ａｔ  Ｇｒｏｕｎｄ  Ｚｅｒｏ」の米国特許仮出願第６２／１１３，６２７号、２０１６年１月１２日に出願された、タイトルが「Ｔｈｅ Ｐｈａｓｅ Ｃｈａｎｇｅ Ｔｈｅｓｉｓ」の米国特許仮出願第６２／２７７，７６９号、および２０１６年１月２０日に出願された、タイトルが「Ｓｏｆｔｗａｒｅ  ａｓ  Ｄａｔａ，Ｓｏｆｔｗａｒｅ  ａｓ  Ｄａｔａｂａｓｅ，Ｓｏｆｔｗａｒｅ  ａｓ  Ｐｒｏｇｒａｍｍｉｎｇ  ＡＩ，Ｓｏｆｔｗａｒｅ  ａｓ  Ｍｏｄｅｌｉｎｇ  ＡＩ」の米国特許仮出願第６２／２８０，９６５号の利益を主張し、これらはそれぞれ全体の参照により本明細書に組み込まれる。
【背景技術】
【０００３】
プログラマブルマシンは、ソフトウェアとソフトウェア書き込みツールが発達するにつれ進化し続ける。しかしながら、プログラマーは依然として、既存のソフトウェアを見つけてレビューするには時間がかかること、個人的な好み、既存ソフトウェアの存在に関する知識の欠如またはその他の理由により、既に書かれているソフトウェアを書き込むことがある。その結果、ソフトウェアは、機能的に等価であるとしても、理想とは程遠いコード部分を含むことが多い。従来の解決策は、本明細書に参照により組み込まれる、「Ｓｏｆｔｗａｒｅ  Ｅｑｕｉｖａｌｅｎｃｅ Ｃｈｅｃｋｉｎｇ」（特許文献１）を含む。
【０００４】
コンパイラおよびインタープリタは、人間に可読なソースコードを実行のために機械可読コード（例えば、オブジェクトコード、実行コード等）に変換する。コンパイラは多くのコード化の問題を無効化できるが、すべてを無効化、また、常に完全に無効化できるわけではない。例えば、アレイの各要素の横断を含む１つのソフトウェアコードは、コーダーがアレイを行要素毎に横断して次に列を増分する、または列要素毎に横断して行を増分した場合には、異なるパフォーマンス特性を有し得る。アセンブラ等のオブジェクトコードは、値を別様式で記憶し、最終結果が同じだとしても、他とは異なる技法を用いたより多くの処理ステップを要する可能性がある。同様に、特定のソート方法の選択は、ソートされるデータに基づいてパフォーマンスに大きな影響を与え得る。例えば、バブルソートは、比較的少数の要素をソートする場合、またはソートオーダーにない要素を少数のみ有する多数の要素をソートする場合には有効である。しかしながら、バブルソートは、多くの他のアプリケーションにおいて満足でない選択となりがちである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１１／０１３８３６２号明細書
【非特許文献】
【０００６】
【非特許文献１】「Ｄｅｃｉｓｉｏｎ Ｐｒｏｃｅｄｕｒｅｓ，Ａｎ Ａｌｇｏｒｉｔｈｍｉｃ Ｐｏｉｎｔ ｏｆ Ｖｉｅｗ」， クローニングおよびストリヒマン，２００８，ＩＳＢＮ： ９７８−３−５４０−７４１０４−６
【発明の概要】
【発明が解決しようとする課題】
【０００７】
２組のソフトウェアがそれぞれ同じ結果をもたらしたとしても、全てのソフトウェアが、１つのアプリケーション内で、または１つのソフトウェア管理システム内等で同じ効果を有するわけではない。ソフトウェアは、不十分さまたはその他の望ましくない問題を有し得る。結果として、コンピュータまたは、ソフトウェアを実行するその他の機械は、理想的能力未満で作動することがある。
【課題を解決するための手段】
【０００８】
開示される特定の実施形態は、ＳＭＴソルバを用いてもよく、非特許文献１によってより容易に理解され得るが、同文献はその全体を参照することによって、その全開示が本明細書に組み込まれる。
【０００９】
ソフトウェアまたは「コード」は、コードが機械で可読な形式にされたときに、マイクロプロセッサ（またはより一般的に「プロセッサ」）等の機械によって使用されるために、人間によって書き込まれる命令を指す。ソフトウェアは、書かれた目的の機能性またはそれがもたらす結果を凌駕する多くの属性を有する。例えば、ソフトウェアはスペースを要し、マシンサイクルを要し、そのソフトウェアの作成者であるかも知れない人やそれ以外の人によって読まれ、セキュリティ上の脆弱性を有し、更新を要する可能性があり、異なるプラットフォームへのポーティング、および／またはその他の側面を要する可能性がある。多くの場合、前述でレビューし、審査し、好ましいと識別された理想的または好ましい機能は利用可能である。一般的な導入として、また、一実施形態では、候補機能ソースコードを自動識別し、候補機能が、以前に審査されて認定ソースコードとして識別された好ましい機能ソースコードと機能的に等価である（例えば、同じ結果をもたらす）かどうかを判断し、等価であれば、好ましい機能を候補機能に置換することによって候補ソースコードを好ましいソースコードに変換してセーブするか、またはその他の方式で、変換されたソースコードを将来のアクセスおよび／または処理向けに利用可能にするために、機械ベースの命令が提供される。
【００１０】
本明細書で用いられる「機能」は、ソフトウェア機能、サブルーチン、手順（機械で実行可能な）方法、述語、より大きなコンピュータプログラム内の命令またはルールのシーケンス、ルールに従って入力を単一の出力に関連付ける関係を含む。単一の出力は、プリミティブデータ型を含んでもよいし、または、複合または抽象データ型等のより複雑なデータ型を含み得る。
【００１１】
一実施形態では、ソースコードの２つの部分、候補機能と好ましい機能が考慮される。本明細書でより詳細に論じられるように、候補機能と好ましい機能が同一の結果をもたらすという判断が行われる。例えば、提供された全ての入力にわたり、候補機能と好ましい機能からの出力は等価である。別の実施形態では、候補機能と好ましい機能に関して論理方程式が決定されて、次に、有限セットの入力にわたり機能の等価性を判断するように動作可能な充足可能性モジュロ理論（ＳＭＴ）ソルバ等の自動定理証明器に提供される。しかしながら、依然として差異が存在し得る。候補機能は、記憶効率、実行性能、可読性、維持性、セキュリティおよび／またはその他の機能的に不可知な差異等の１つ以上の要因に関して審査されていてもよい。一実施形態では、差異はプログラミング言語を含む。別の実施形態では、差異はコードのコンパクトさを含む。例えば、「Ｃ＝２Ａ＋２Ｂ」は、「Ｃ＝Ａ＋Ａ＋Ｂ＋Ｂ」よりも好まれ、Ｃ＝２＊（Ａ＋Ｂ）は、「Ｃ＝２Ａ＋２Ｂ」よりも好まれ得る。別の実施形態では、差異は可読性を含む。例えば、「長方形の周長＝２（辺Ａ＋辺Ｂ）」は、「Ｘ＝２Ａ＋２Ｂ」より好まれ得る。別の実施形態では、差異はリソース効率を含んでもよい。例えば、必要なフィールドのみを取り出すためにリモートデータベースに繰り返しアクセスすることに比べて、レコード内の全フィールドが必要でなかったとしても、リモートデータベースからレコード全体にアクセスしてレコードをメモリに保持するほうがより高効率であり得る。前記の事項は、候補機能と好ましい機能の間に存在し得る機能的に不可知な差異への導入を提供するものであり、網羅的なリストとして意図されるものではない。
【００１２】
別の実施形態では、候補機能は好ましい機能とは異なるが、差異は同じ等価クラス内のメンバ（例えば入力および／または出力）間に限定されている。例えば、１つの等価クラスは２進値ペアであっても（例えば、｛（１，０）、（ＴＲＵＥ，ＦＡＬＳＥ）、（ＯＮ，ＯＦＦ）｝）、または等価値（例えば、｛（“．１”，“０．１”，“０．１０００”）｝であってもよい。
【００１３】
同じ入力（複数）を与えられた候補機能と好ましい機能が、異なる出力を生成するが、異なる出力がそれぞれ同じ等価クラスにある場合、好ましい機能と候補機能は機能的に等価であると判断される。例えば、同じ入力が好ましい機能と候補機能に供給されて、好ましい機能が「ＴＲＵＥ」を出力し候補機能が「１」（２進データタイプの）を生成する場合、非同一の出力でも機能的等価がもたらされる。別法として、同じ入力を与えられて、好ましい機能が「ＯＮ」を生成し候補機能が「０」を生成する場合、等価は反証されたことになる。
【００１４】
本明細書で開示された特定の実施形態に関して、従来技術のコンピュータシステムおよびソフトウェア開発によって生じた問題が軽減され得る。コンピュータ プログラミング産業は、有限な処理、帯域幅および記憶能力に関する多くの問題を無視することができていた。ハードウェアはより安価且つ小型になり続けた。適切なソフトウェアコードの作成、開発の目的である機能を実行するコードを有効なコードにするために必要な投資は、多くの場合ハードウェアで解決された。ソフトウェアを、その機能性を超えたところまで改良することは、適切な機能性の開発を優先して概ね諦められ、一度それが達成されると、次のタスクに移っており、従来技術の開発の慣行では、トレードオフが容易に受け入れられた。
【００１５】
プログラミングの初期では、簡潔なプログラミングは言語の人為産物であった。アセンブリのような言語は、プロセッサが要求される機能性を提供するために必須である以上の機会を殆ど残さないものであった。今日、プログラマーが彼らのプログラミングとドキュメンテーションを潤色することを可能にする多くの機能性およびオブジェクト指向言語が存在する。しかしながら、プログラムがその機能性タスクを実行する場合、それ以上のものがもたらされることは稀である。
【００１６】
要求される機能を実行するだけのソフトウェアを提供することはもはや十分ではない。特定のコンピュータ実装は依然として、コード記憶要求、処理時間および電力要求に対して高度にセンシティブである。デスクトップおよびその他の固定位置コンピュータシステムは多くの場合、追加ハードウェアで処理または記憶上の制約を解決するが、モバイルコンピューティングは記憶、処理および電力要求に対して特にセンシティブであり続ける。記憶、処理および電力のうちいずれか１つにおいて非常に僅かにせよ改良があれば、一大突破口となり得、それにより、従来は非実用的なデバイスが今や実行可能な製品となる。加えて、再利用可能性等の要因が常に謳われたが、実際問題としてはそれらが配備されることは稀であり、実際に配備された場合は、人間のプログラマーによる、機能的等価性を保証するための相当の投資を必要とする。しかしながら、本明細書で提供される開示により、コンピュータサイエンスは、より堅牢で、安全で、再利用可能なコードを提供するための、ソフトウェアの機械が提供する編集の利益を得ることができる。
【００１７】
本明細書で開示された実施形態のさらなる利点として、機能的等価性が保証されるため、検査と検証が低減される、それどころか排除され得る。従来技術を用いるいずれのソフトウェア開発プロジェクトの大部分は、機能的目的がプログラムによって満たされることを確認することを包含する。しかしながら、本明細書の開示によれば、一度機能が承認されると、遭遇される任意の機能的に等価な後続コードは、承認されたコードと置換されることができ、機能的等価性は、承認されたコードに後続の検査を実行する必要なく保証される。
【００１８】
「少なくとも１つの」、「１つ以上の」および「および／または」という語句は、運用上接続語でもあり離接語でもある制限のない表現である。例えば、「Ａ、ＢおよびＣのうち少なくとも１つ」、「Ａ、ＢまたはＣのうち少なくとも１つ」、「Ａ、ＢおよびＣのうち１つ以上」、「Ａ、ＢまたはＣのうち１つ以上」および「Ａ、Ｂおよび／またはＣ」は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢ両方、ＡとＣ両方、ＢとＣ両方、またはＡ、ＢおよびＣが一緒、を意味する。
【００１９】
「１つの（ａ）」または「１つの（ａｎ）」実体という用語は、その実体のうち１つ以上を指す。故に、本明細書では、「１つの（ａ）（または「１つの（ａｎ）」、「１つ以上の」および「少なくとも１つの」という用語は、互換的に用いられ得る。「備える」、「含む」および「有する」という用語が互換的に用いられ得ることにも留意すべきである。
【００２０】
用語「自動」またはその変形は、本明細書で使用する場合、プロセスまたは操作が実行される場合に実質的な人間による入力なしで行われる任意のプロセスまたは操作を指す。しかしながら、プロセスまたは操作は、プロセスまたは操作の実行前に入力が受け取られていた場合、プロセスまたは操作の実行が実質的または非実質的な人間による入力を用いたとしても自動であり得る。人間による入力は、そのような入力が、プロセスまたは操作がどのように実行されるかに影響する場合に実質的であると見なされる。プロセスまたは操作の実行に合致する人間による入力は「実質的」とは見なされない。
【００２１】
用語「コンピュータ可読媒体」は、本明細書で使用する場合、プロセッサに実行する命令を提供することに加担する任意の実体のある記録媒体を指す。そのような媒体は、不揮発媒体、揮発性媒体および伝送媒体を含むがそれらに限定されない任意の形態をとってもよい。不揮発性媒体は、例えば、ＮＶＲＡＭまたは磁気もしくは光ディスクを含む。揮発性媒体は、メインメモリ等のダイナミックメモリを含む。コンピュータ可読媒体の一般的形態は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意のその他の磁気媒体、光磁気媒体、ＣＤ−ＲＯＭ、任意のその他の光学的媒体、パンチカード、紙テープ、穴のパターンを有する任意のその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、メモリカード、任意のその他のメモリチップもしくはカートリッジのような固体媒体、またはコンピュータがそこから読み取れる任意のその他の媒体を含む。コンピュータ可読媒体がデータベースとして構成される場合、データベースは、関係データベース、階層型データベース、オブジェクト指向、および／または同等物等の任意のタイプのデータベースであり得ることが理解されるべきである。したがって、本開示は、本開示のソフトウェア実装が記憶される、実体のある記憶媒体と、従来技術で認められた等価および後続媒体を含むものと考えられる。
【００２２】
機械で実行可能な命令は、特定の機械（例えばパーソナルコンピュータ、モバイルコンピューティングデバイス、ラップトップ等）にローカルに記憶され実行されてもよいが、データおよび／もしくは命令の記憶および／または命令の少なくとも一部分の実行は、一般に「クラウド」として知られるリモートデータ記憶および／もしくは処理デバイスまたはデバイスの集合への接続性によって提供されてもよいが、それは、公共、私的、専用、共有および／もしくはその他のサービス局、コンピューティングサービス、および／または「サーバファーム」を含み得ることを理解すべきである。
【００２３】
用語「判断する」、「計算する」「算定する」およびその変形は、本明細書で用いられる場合、互換的に用いられ、任意のタイプの方法、プロセス、数学的演算または技法を含む。
【００２４】
用語「モジュール」は、本明細書で用いられる場合、任意の周知のもしくは後事に開発されたハードウェア、ソフトウェア、ファームウェア、人工知能、ファジー論理または、その要素に関連する機能性を実行することができるハードウェアと ソフトウェアの組み合わせを指す。さらに、本開示は例示的実施形態に関して説明されるが、本開示の別の態様は別途クレームされ得ることを理解すべきである。
【００２５】
ソースコード、コード、ソフトウェアまたは等価物に適用される用語「人間に可読な」は、本明細書で用いられる場合、命令実行のために機械によって読み取られるために、解釈またはコンパイリングなしで利用できない、人間に可読なフォーマットを用いるコンピュータ命令を指す。ソースコードは、話し言葉での表現（例えば、「の場合」、「戻る」、「取得する」、「フェッチ」等）および、「予約語」として知られ得る話し言葉文字表現（例えば「＝」、「．」、「、」（「、」）等）を含み得る、命名された変数、機能（例えば変動支払い（原則的に変動利子）等の記号による表現を含み得る。人間に可読なソースコードを具現化するための用いられるプログラミング言語は、どれが予約語または等価記号であってどれが予約語または等価記号でないかに関して特定のルールを有してもよい。一般に、ソースコードは、開発されたプログラミング命令の人間の出力であり、ソースコード 言語（例えば、パイソン、Ｃ、Ｃ＋＋、フォートラン、ベーシック等）によって一般に知られている。
【００２６】
機械コード、コード、ソフトウェアまたは等価物に適用される用語「機械可読」は、人間に可読なソースコードの、機械で読み取り可能且つ実行可能な形式を含むようにコンパイラまたはインタープリタを介して処理された人間に可読なコードを指す。一実施形態では、機械可読コードはアセンブラである。別の実施形態では、機械可読コードは機械コード（例えば２進）である。機械可読コードは、異なるソースコード言語によって提供される同じ機能性間の差異を完全にまたは部分的に排除するために、また、プロセッサまたはプロセッサファミリー向けに命令セットを適合させるためにハードウェアプラットフォーム（例えば Ｉｎｔｅｌ（登録商標） ｘ８６、Ｍｏｔｏｒｏｌａ（登録商標） ８０００ｘ、ＣＩＳＣ、ＲＩＳＣ等）に対してさらに特定的になり得るように、人間に可読な ソースコード（例えば「元本」と「利子」が「＄０１」と「＄０２」となり、「売り上げ」と「税」が「＄０３」と「＄０４」になる等）の記号による表現の、標準識別子名前付け変換を利用してもよい。機械可読コードは、マイクロプロセッサ等の機械によって可読となるためのさらなる処理を必要としない場合があるが、機械によって実行可能となるための付加的な処理（例えばリンキング）を要し得る。熟練したプログラマーならば、機械コードを「読み取る」ことができるであろうが、そのようなソフトウェアの形態は、言語ベースの記号を省略し、そのような機械コードは人間に可読な範囲外であると考えられる。
【００２７】
本明細書で使用される用語「データリポジトリ」は、デバイス、媒体、構成要素、構成要素の一部、構成要素の集合および／または、プロセッサにアクセス可能なデータを記憶できるその他の構造のうち任意の１つ以上である。本明細書で想定されるデータリポジトリの例は、限定はしないが、プロセッサレジスタ、オンチップ記憶装置、オンボード記憶装置、ハードドライブ、固体デバイス、固定媒体デバイス、着脱式媒体デバイス、論理接続記憶装置、ネットワーク記憶装置、分散型ローカルおよび／もしくはリモート記憶装置（例えば、サーバファーム、「クラウド」記憶装置等）、媒体（例えば、固体、光学、磁気等）および／またはそれらの組み合わせを含む。データリポジトリは少なくとも１つのプロセッサにアクセス可能であるが、いずれのプロセッサも現在アクセスの必要がない時間中には、プロセッサから論理的および／または物理的に遮断されていてもよい。データリポジトリは直接アクセスできてもよいし、または１つ以上の介在構成要素を介してアクセスできてもよく、介在構成要素は、限定はしないが、キャッシュおよび／またはバッファを含む。特定の実施形態では、データリポジトリはデータベース、ファイル、レコードまたはその他の論理記憶装置構造および／またはそれらの一部または集合に組織化されてもよい。
【図面の簡単な説明】
【００２８】
【図１】本開示の実施形態による第１のシステムの図である。
【図２】本開示の実施形態による第２のシステムの図である。
【図３】本開示の実施形態による第３のシステムの図である。
【図４】本開示の実施形態による第４のシステムの図である。
【図５】本開示の実施形態によるプロセスの図である。
【図６】本開示の実施形態による第５のシステムの図である。
【図７】本開示の実施形態によるソリューションの図である。
【図８】本開示の実施形態によるソリューションの図である。
【図９】本開示の実施形態によるソリューションの図である。
【図１０】本開示の実施形態によるソリューションの図である。
【図１１】本開示の実施形態によるソリューションの図である。
【図１２】本開示の実施形態によるソリューションの図である。
【図１３】本開示の実施形態によるソリューションの図である。
【図１４】本開示の実施形態によるソリューションの図である。
【図１５】本開示の実施形態によるソリューションの図である。
【図１６】本開示の実施形態によるソリューションの図である。
【図１７】本開示の実施形態によるソリューションの図である。
【図１８】本開示の実施形態によるソリューションの図である。
【図１９】本開示の実施形態によるソリューションの図である。
【図２０】本開示の実施形態によるソリューションの図である。
【図２１】本開示の実施形態によるソリューションの図である。
【図２２】本開示の実施形態によるソリューションの図である。
【図２３】本開示の実施形態によるソリューションの図である。
【図２４】本開示の実施形態によるソリューションの図である。
【図２５】本開示の実施形態によるソリューションの図である。
【図２６】本開示の実施形態によるソリューションの図である。
【図２７】本開示の実施形態によるソリューションの図である。
【図２８】本開示の実施形態によるソリューションの図である。
【図２９】本開示の実施形態によるソリューションの図である。
【図３０】本開示の実施形態によるソリューションの図である。
【図３１】本開示の実施形態によるソリューションの図である。
【図３２】本開示の実施形態によるソリューションの図である。
【図３３】本開示の実施形態によるソリューションの図である。
【図３４】本開示の実施形態によるソリューションの図である。
【図３５】本開示の実施形態によるソリューションの図である。
【図３６】本開示の実施形態によるソリューションの図である。
【図３７】本開示の実施形態によるソリューションの図である。
【図３８】本開示の実施形態によるソリューションの図である。
【図３９】本開示の実施形態によるソリューションの図である。
【図４０】本開示の実施形態によるソリューションの図である。
【図４１】本開示の実施形態によるソリューションの図である。
【図４２】本開示の実施形態によるソリューションの図である。
【図４３】本開示の実施形態によるソリューションの図である。
【図４４】本開示の実施形態によるソリューションの図である。
【図４５】本開示の実施形態によるソリューションの図である。
【図４６】本開示の実施形態によるソリューションの図である。
【図４７】本開示の実施形態によるソリューションの図である。
【図４８】本開示の実施形態によるソリューションの図である。
【図４９】本開示の実施形態によるソリューションの図である。
【図５０】本開示の実施形態によるソリューションの図である。
【図５１】本開示の実施形態によるソリューションの図である。
【図５２】本開示の実施形態によるソリューションの図である。
【図５３】本開示の実施形態によるソリューションの図である。
【図５４】本開示の実施形態によるソリューションの図である。
【図５５】本開示の実施形態によるソリューションの図である。
【図５６】本開示の実施形態によるソリューションの図である。
【図５７】本開示の実施形態によるソリューションの図である。
【図５８】本開示の実施形態によるソリューションの図である。
【図５９】本開示の実施形態によるソリューションの図である。
【図６０】本開示の実施形態によるソリューションの図である。
【図６１】本開示の実施形態によるソリューションの図である。
【図６２】本開示の実施形態によるソリューションの図である。
【図６３】本開示の実施形態によるソリューションの図である。
【図６４】本開示の実施形態によるソリューションの図である。
【図６５】本開示の実施形態によるソリューションの図である。
【図６６】本開示の実施形態によるソリューションの図である。
【図６７】本開示の実施形態によるソリューションの図である。
【図６８】本開示の実施形態によるソリューションの図である。
【図６９】本開示の実施形態によるソリューションの図である。
【図７０】本開示の実施形態によるソリューションの図である。
【図７１】本開示の実施形態によるソリューションの図である。
【図７２】本開示の実施形態によるソリューションの図である。
【図７３】本開示の実施形態によるソリューションの図である。
【発明を実施するための形態】
【００２９】
本発明を、添付の図面と併せて説明する。以下の説明は、実施形態を提供するのみであり、請求項の範囲、適用性または構成を限定する意図はない。寧ろ、以下の説明は、当業者に、実施形態を実装する実現的説明を提供する。添付の特許請求の範囲の趣旨と範囲から逸脱せずに、要素の機能と配置に種々の変更を施してもよいことが理解される。
【００３０】
図面に副要素識別子が存在する場合で、副要素識別子がない、要素の個数を含む説明の参照は、複数で用いられた場合、同じ要素の番号を有する任意の２つ以上の要素を指すことを意図している。そのような指示が単数形でなされた場合、要素のうち特定の１つに限定することなく、同様な要素数を有する要素のうち１つを指すことが意図される。本明細書において、任意の逆の明示的な用法または、さらなる資格または識別を提供することは、手順を踏むことになる。
【００３１】
本開示の例示的システムおよび方法はさらに、分析ソフトウェア、モジュールおよび関連する分析ハードウェアに関連しても説明される。しかしながら、不要に本開示を不明瞭にすることを避けるために、以下の説明は、ブロック図の形式で示すことができて周知であるか、または別途要約される周知の構造、構成要素およびデバイスを省略する。
【００３２】
説明のため、本開示の完全な理解を提供するために、数々の詳細が規定される。しかしながら、本開示は、本明細書に規定される特定の詳細を超えた様々な方式で実行され得ることを理解すべきである。
【００３３】
図１は、本開示の実施形態によるシステム１００を示している。システム１００は、候補機能１０４Ａ−１０４Ｄを内蔵するソースコード１０２にアクセスするプロセッサ１０６を備える。一実施形態では、候補機能１０４のうち少なくとも１つは、少なくとも１つの入力を受け取って少なくとも１つの出力を生成する機能を備える。別の実施形態では、入力と出力のうち少なくとも１つは、機能 パラメータ、人力入力デバイスからの入力、メモリアドレス、レジスタ、ポートまたはその他のデータソースであってよい。別の実施形態では、出力は、アドレスに書き込まれ、出力デバイスに提示され、メモリアドレスまたはレジスタに書き込まれ、ポートおよび／または電子コンピューティング技術で周知の任意のその他の入力および／または出力手段で出力される機能出力であってよい。
【００３４】
一実施形態では、ソースコード１０２は、統合開発環境またはその他のソフトウェアオーサリングツールを用いる等でプログラマーによって書き込まれた候補機能１０４を含み得る。ソースコード１０２は、一実施形態では複数の機能１０４を備えて示されている。別の実施形態では、ソースコード１０２は１０４Ａ等の単一の機能１０４を備えていてもよい。
【００３５】
プロセッサ１０６はソースコード１０２と機能１０４にアクセスして、候補機能１０４のうち１つを、データリポジトリ１１４内に保持されていた好ましい機能１０８Ａ−１０８ｎのうち１つと比較する。プロセッサ１０６は次に、好ましい機能１０８のうちの機能と置換されるべき候補機能１０４のうちの機能を識別し、次にプロセッサ１０６はレコードを作成するが、それは、候補機能識別子１１６Ａ−１１６Ｄのうちの１つと、置換インディシア１１８Ａ−１１８Ｄのうちの１つと間の関連性を提供するための、インディシア１１２に関連する機能識別子１１０を備えたレコード等である。例えば、特定の機能である候補機能１（１０４Ａ）を識別する機能識別子１１６Ａ（「候補機能１」）が、好ましい機能１０８Ｃ（「好ましい機能Ｃ」として識別される）による置換を示す機能インディシア１１８Ａと関連付けられる。別の実施形態では、機能識別子１１６Ｂと関連付けられた置換インディシア１１８Ｂは、関連する機能の候補機能２（１０４Ｂ）が保持されるべきであることを示し得る。例えば、候補機能２（１０４Ｂ）は、カウンターパートまたはデータリポジトリ１１４内の識別できるカウンターパートを有していない、または、好ましい機能１０８のうちいずれとも機能的に等価ではない場合がある。別の実施形態では、置換の実行に加えて、または置換の実行の代わりに、推奨または教示が実行され得る。例えば、プログラマーに対して、プログラマーが書いた機能（例えば、「候補機能１」）が、別の機能（例えば、「好ましい機能Ｃ」）に近づくように改善される可能性があることを示し、またオプションとして改善基準を提示するために、プログラマーにメッセージが提示されてもよい。
【００３６】
インディシア１１２は、説明上の明瞭さのためからも選択された１つの実施形態としての、人間に可読な英語のデータエントリーを備えて示されている。本明細書で想定される別の実施形態は、データ要素（例えば、２進、模倣データタイプ、データ構造等）内のエントリー等のデータ値および／または、揮発性メモリ、不揮発性メモリ、媒体、データリポジトリ１１４、その他のデータリポジトリ、媒体、および／またはその他のデータ記憶構成要素、構成要素の集合もしくはその一部内に保持されたデータ要素（例えば、フラグ／フラグなし、レコード／レコードなし、オブジェクト／オブジェクトなし、等）の存在を含み、本開示の範囲から逸脱せずに、本明細書で開示された実施形態で実行されてもよい。
【００３７】
図２は、本開示の実施形態によるシステム２００を示す。一実施形態では、図２は、機能インディシア１１２を利用してソースコード１０２（図１参照）を好ましいソースコード２０２に変換するシステム２００を示す。プロセッサ１０６は、エントリー１１８を含み、エントリー１１６を含む対応する機能識別子１１０と関連付けられた機能インディシア１１２にアクセスする。次にプロセッサ１０６はソースコード１０２にアクセスして、好ましいソースコード２０２を生成し、それは、置換が行われているにしても、ソースコード１０２と機能的に等価であり、そこで少なくとも１つの候補機能１０４は機能的に等価である好ましい機能１０８と置換される。プロセッサ１０６は、データリポジトリ１１４からの機能インディシア１１２で示された好ましい機能１０８にアクセスし、自動置換を提供して好ましいソースコード２０２を生成する。
【００３８】
一実施形態では、候補機能１（１０４Ａ）は好ましい機能Ｃ（１０８Ｃ）で置換され、候補機能２（１０４Ｂ）は保持され、候補機能３（１０４Ｃ）は好ましい機能Ａ（１０８Ａ）で置換され、候補機能４（１０４Ｄ）は好ましい機能Ｘ（１０８Ｘ）で置換される。次に好ましいソースコード２０２は、セーブされて好ましいソースコードとして識別されて、さらなる開発、コンパイリング、解釈、リンク付け、実行および／または将来の時点でアクセス可能となるような保存に、さらに備えてもよい。
【００３９】
図３は、本開示の実施形態によるシステム３００を示す。一実施形態では、システム３００は好ましいソースコード２０２に変換するソースコード１０２を示し、機能的等価のインディシアはプロセッサ１０６のみによって保持されて、プロセッサ１０６が好ましいソースコード２０２を直接出力することを可能にしている。例えば、プロセッサ１０６はアクセスソースコード１０２にアクセスして、候補機能１（１０４Ａ）、３（１０４Ｃ）、４（１０４Ｄ）が、データリポジトリ１１４内に維持されている好ましい機能１０８（図１参照）と置換されるべきであることを判断する。結果として、プロセッサ１０６は、好ましい機能Ｃ（１０８Ｃ）、候補機能２（１０４Ｂ）、好ましい機能Ａ（１０８Ａ）および好ましい機能Ｘ（１０８Ｘ）により構成される好ましいソースコード２０２を直接出力する。
【００４０】
図４は、本開示の実施形態によるシステム４００を示す。一実施形態では、２つの機能が等価であるかどうか、例えば、候補機能１（１０４Ａ）が好ましい機能Ｃ（１０８Ｃ）と機能的に等価であるかどうかの判断は、論理の適用による。論理は、種々に実現される。一実施形態では、論理は一次論理を備え、別の実施形態では、論理方程式は二次論理を備える。一実施形態では、単一の候補機能４０２が、単一の好ましい機能４０４に対する等価を決定すると考えられる。別の実施形態では、候補機能４０２は、複数の候補機能１０４等の複数の機能を備えてもよく、および／または好ましい機能４０４は、複数の好ましい機能１０８のような複数の機能を備えていてもよい。論理方程式は、等価の値を有する等価、例えば「Ａ  ｏｒ  Ｂ」が「Ａ  ｏｒ  Ｂ」と同一であること、したがって等価であることを実証し得る。しかしながら、非等価であるが機能的に等価である表現も、等価を示す可能性があり、例えば、「Ａ  ｏｒ  Ｂ」は「Ｂ  ｏｒ  Ａ」と同一ではないが、機能的に等価である。加えて、記号による表現は、方程式の少なくとも一部、例えば、「Ａ  ｏｒ  Ｂ」は、「Ｂ」が「Ｘ  ａｎｄ  Ｙ  ｎｏｒ  Ｚ」を表す場合、「Ａ  ｏｒ（Ｘ  ａｎｄ  Ｙ  ｎｏｒ  Ｚ）」と非同一であるが、機能的に等価である。
【００４１】
別の実施形態では、機能的等価は、候補機能４０２が既知のメンバである列挙セットの１つ以外の全てのメンバの非等価によって決定される。例えば、候補機能４０２は、基本数学関数、加算、減算、乗算および除算のうち１つを実行することが知られるとする。好ましい機能４０４が４つの基本数学関数セットの１つであり、他の３つについて非等価が決定されており、それが非等価が決定されるための唯一の機能としての好ましい機能４０４に導くのであれば、好ましい機能４０４は、候補機能４０２と機能的に等価であると判断され得る。
【００４２】
候補機能４０２は、構文解析機能Ｉ／Ｏ４０６によって構文解析された入力／出力シグナチャを有する。同様に、好ましい機能４０４は、構文解析機能Ｉ／Ｏ４０８によって構文解析された入力／出力シグナチャを有する。表１は、候補機能４０２の一例を提供する。
【表１】
2018505506.tif 000003
表１
【００４３】
表２は、好ましい機能４０４の一例の機能を提供する。
【表２】
2018505506.tif 000004
表２
【００４４】
一実施形態では、好ましい機能４０４は、内蔵された人間に可読なコードの簡潔さ等により審査され好ましいと識別された。簡潔さは、抽象構文ツリー（ＡＳＴ）等の抽象構文構造によって提供されてもよい。例えば、より少ないノード、より少ない葉ノード、ノードの深さ、ノードの幅が、簡潔さの尺度を提供し得る。機能的等価サービス４１０は次に、等価性が正しいかどうかを判断する。一実施形態では、機能的等価サービスは構文解析された候補機能４０２の一次論理４１２と、構文解析された好ましい機能４０４の一次論理４１４を導出して一次論理を導出し、それは、一実施形態では、ＳＭＴクエリー４１６を含む。
【００４５】
表３は、論理、入力および出力に分解された機能の一例を示す。
【表３】
2018505506.tif 000005
表３
【００４６】
表４は、論理、入力および出力に分解された機能の別例を示す。
【表４】
2018505506.tif 000006
表４
【００４７】
表５は、ＳＭＴクエリーの一例を示す。
【表５】
2018505506.tif 000007
表５
【００４８】
別の実施形態では、ＳＭＴクエリー４１６がＳＭＴソルバ４２０に提供されて、満足な（「ＳＡＴ」）非等価性結果もしくはＮＯの結果４２２、または不満足な（「ＵＮＳＡＴ」）等価性結果もしくはＹＥＳの結果４２４を示す。
【００４９】
図５は、本開示の実施形態によるプロセス５００を示す。一実施形態では、プロセス５００は、プロセッサ１０６等で実施される。プロセス５００は、ステップ５０２、５０４のうち一方または両方で開始してもよく、ステップ５０２は、複数の機能１０４を含み得る候補ソースコード１０２等からの候補機能にアクセスする。ステップ５０４は、好ましいソースコード２０２からの１つ以上の好ましい機能１０８を備える等の好ましい機能にアクセスする。
【００５０】
次に、ステップ５０６は、機能が機能的に等価であるかどうか（例えば、同じ入力を与えられた場合に同じ結果をもたらすか）を判断し、等価である場合、プロセス５００はオプションのステップ５０８に進んで、置換のインディシアを提供するか、または、ステップ５０８が実施されない場合、プロセス５００に外部からインディシアを提供する。または、処理はステップ５１０に進む。ステップ５１０は候補機能５０２を好ましい機能５０４と置換する。ステップ５０６で非等価であると判断された場合、置換は必要なく、プロセス５００は終了してよい。任意選択的に、ステップ５１０の後に、今や置換された好ましい機能５０４を備えたソースコードが媒体にセーブされるか、あるいは、付加的なまたは後事の処理および／または参照のために保持されてもよい。
【００５１】
本明細書で提供される場合、１つ以上の好ましい機能１０８を備えるような好ましいソースコードは、機能的に等価であるが好ましくない１つ以上の候補機能１０４を備える等の候補ソースコードを自動的に置換することによってもたらされてもよい。好ましいソースコードは、好ましいソースコードが使用を認可される事前審査に基づいて好ましいと判断されてもよい。好ましいソースコードは、人間に可読な形式および／あるいは機械可読形式の必要メモリ、性能測定基準、セキュリティ、内部ドキュメンテーションの存在、内部ドキュメンテーションの特定のボリュームの存在、冗長変数名の使用、命令の簡潔さ、エラーハンドリング、および／またはその他の属性によって好ましいと判断され得る。別の実施形態では、ソースコードは事前審査によって好まれる。別の実施形態では、候補ソースコードは事前審査の対象ではなかった。さらに別の実施形態では、好ましいソースコードは、候補ソースコードの開発者等の下位の権限者によって審査された候補ソースに比べてより高位の権限者によって審査される。さらに別の実施形態では、好ましいソースコードの判断は、コードの行が少ない１つ以上のコード、より少ない手順のコール、より多くのコメント、より長い変数名等の基準に従って決定され得る。
【００５２】
図６は、本開示の実施形態によるシステム６００を示す。システム６００は、候補機能６０２を備えた候補ソースコード１０２にアクセスしているプロセッサ１０６を示す。一実施形態では、プロセッサ１０６は、候補機能６０２が、データリポジトリ１１４に保持されている少なくとも１つの好ましい機能６０６Ａ−６０６ｎと機能的に等価であるであることを判断する。
【００５３】
一実施形態では、プロセッサ１０６は、候補ソースコードを好ましいソースコード６０４Ａ−６０６Ｅのうち１つに変換する。別の実施形態では、プロセッサ１０６は、候補ソースコードを好ましいソースコード６０４Ａ−６０４Ｅのうち２つ以上に変換する。プロセッサ１０６は、ソースコード１０２を、好ましいソースコード６０４Ａ−６０４Ｅのうち１つ以上に変換して、少なくとも１つの好ましい態様を満たす１つのソースコードファイル等のソースコードを出力する。好ましいソースコードは、機械または機械の構成要素のより最適な操作をもたらすが、それは、より少ない操作を行う、より迅速な操作を行う、必要メモリがより少ない、より少ないリソース要求で操作を実行する、より低費用（例えば、電力、応答等）のリソースを利用する、より安全な操作を実行する等による。好ましい態様は多様に具現化され、限定はしないが、セキュリティ、ＣＰＵ効率、帯域幅効率、必要メモリ、コードの簡潔さ、データベースアクセス、またはそれら２つ以上の組み合わせを含む。
【００５４】
一実施形態では、プロセッサ１０６は、候補機能６０２が、ＣＰＵ使用（例えば、クロックサイクル、操作等）に関して好ましいと識別された好ましい機能６０６Ａと機能的に等価であると判断する。したがって、プロセッサ１０６は、ソースコード１０２を、候補機能６０２の代わりに好ましい機能６０６Ａを含む好ましいソースコード６０４Ａに変換する。結果として、ソースコード１０２はソースコード６０４Ａに変換される。
【００５５】
別の実施形態では、プロセッサ１０６は、候補機能６０２が、セキュリティに関して好ましいと識別された好ましい機能６０６Ｂと機能的に等価であると判断する。例えば、機能６０６Ｂは、事前承認された通信暗号化プロトコル、承認された通信ポート、承認されたエラーハンドリングルーチン等を利用してもよい。
【００５６】
別の実施形態では、プロセッサ１０６は、候補機能６０２が、コードの簡潔さに関して好ましいと識別された好ましい機能６０６Ｃと機能的に等価であると判断する。例えば、機能６０６Ｃは、可読性を促進し、オプションとして機械効率を促進する等で、より簡潔であると判断された人間に可読なソースコードを利用してもよい。例えば、「Ｘ＝Ｘ＋１」よりは、「Ｘ＋＋」等の、より少ない演算子を用いるソースコードを利用することがより好ましくあり得る。
【００５７】
別の実施形態では、プロセッサ１０６は、候補機能６０２が、記憶に関して好ましいと識別された好ましい機能６０６Ｄと機能的に等価であると判断する。現代のデータ記憶技術をもってしても、データ記憶には問題があり、特に、チップとボードの「フットプリント」がより重要になる、埋設されたシステムおよびモバイル技術では問題となる。例えば、機能６０６Ｄは、より冗長な「ｉｎｔｅｒｅｓｔ＝ｒａｔｅ＊ｂａｌａｎｃｅ」よりも、「ｉ＝ｒ＊ｂ」といった、より少ない記憶スペースを要するソースコードを利用する可能性がある。
【００５８】
別の実施形態では、プロセッサ１０６は、候補機能６０２が、帯域幅とセキュリティの両方に関して好ましいと識別された好ましい機能６０６Ｅと機能的に等価であると判断する。例えば、好ましい機能６０６Ｅは、より少ないネットワーク依存操作と、好ましいポートおよび／またはセキュリティプロトコルを利用し得る。
【００５９】
図７−７４は、本開示の実施形態によるソリューションを示す。
【００６０】
例示的態様は、以下のうち任意の１つ以上を対象としてもよい：候補機能を有し人間に可読な第１の機械命令を備えた候補ソースコードを、プロセッサによりデータリポジトリから取り出し、人間に可読な第２の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、プロセッサによりデータリポジトリからアクセスし、プロセッサにより、候補機能と好ましい機能の間の等価性を自動的に判断し、等価性が判断されると、プロセッサによって、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、プロセッサによって候補ソースコードを自動的に変換し、変換された候補ソースコードを出力することを含む方法。
上記態様のうち任意の１つ以上において、インディシアを供給するステップは、変換および出力ステップを含む。
上記態様のうち任意の１つ以上において、好ましい機能は、第２の人間に可読な機械命令とは関連しない人間に可読な要素を含む。
上記態様のうち任意の１つ以上において、等価性を判断するステップは、候補機能と好ましい機能の間でいくつかの入力／出力パラメータが異なると判断した場合に不良となる。
上記態様のうち任意の１つ以上において、等価性を判断するステップは、
候補機能と好ましい機能の間で少なくとも１つの入力／出力パラメータが異なると判断し、また、差異が等価クラスの差異を含む場合に不良となる。
上記態様のうち任意の１つ以上において、さらに、
候補機能の第１の機械可読変換を提供し、
好ましい機能の第２の機械可読変換を提供し、
入力の有限セットのうち１つで、第１の機械可読変換と第２の機械可読変換の両方を実行し、
第１の機械可読変換と第２の機械可読変換の両方を実行するステップがそれぞれ、候補機能の第１の機械可読変換および第２の機械可読変換各々から等価値を出力したことを受けて等価性を判断することを含む。
上記態様のうち任意の１つ以上において、等価性を判断するステップがさらに、
候補機能の論理方程式を導出し、
好ましい機能の論理方程式にアクセスし、
候補機能の論理方程式が、好ましい機能の論理方程式とは異なると判断された場合に等価の判断は不良となる。
候補機能の論理方程式が好ましい機能の論理方程式と等価であると判断されるかどうかの判断はさらに、
候補機能の論理方程式と好ましい機能の論理方程式を自動定理証明器に供給し、
等価を示すインディシアを自動定理証明器から受け取る、ことを含む。
上記態様のうち任意の１つ以上において、好ましい機能は、機械コードに変換された場合に、事前に識別された最適な方式で好ましい機能を機械に実行させる命令のセットを含む。
上記態様のうち任意の１つ以上において、事前に識別された最適な方式は、少なくとも１つのセキュリティ目的に準拠する識別された方式を含む。
上記態様のうち任意の１つ以上において、機械はプロセッサを含み、事前に識別された最適な方式は、識別されたプロセッサ動作の個数を含む。
上記態様のうち任意の１つ以上において、機械はメモリを含み、事前に識別された最適な方式は、機械コードを記憶するために必要なメモリの識別されたサイズを含む。
上記態様のうち任意の１つ以上において、好ましい機能は、簡潔なソースコードとして事前識別された命令のセットを含む。
上記態様のうち任意の１つ以上において、等価性を判断するステップがさらに、
候補機能から、候補機能の等価クラスのセットを生成し、等価クラスは、等価機能のセットを含み、セットの各要素は機能からソースへのマッピングを有する。
上記態様のうち任意の１つ以上において、好ましい機能は、候補機能と好ましい機能の間の等価性を判断する抽象構文ツリー（ＡＳＴ）判断に従って選択された最も簡潔なメンバを含む。
システムであって、そのシステムは、
データリポジトリと、
プロセッサを備え、
プロセッサは、
候補機能を有し、人間に可読な第１の機械命令を備えた候補ソースコードを、データリポジトリから取り出し、
人間に可読な第２の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、データリポジトリからアクセスし、
候補機能と好ましい機能の間の等価性を自動的に判断し、等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、候補ソースコードを自動的に変換し、変換された候補ソースコードを出力する。
上記態様のうち任意の１つ以上において、プロセッサがインディシアを供給することは、候補機能を、候補ソースコード内の好ましい機能と置換して、その結果を好ましいソースコードとしてセーブすることを含む。
上記態様のうち任意の１つ以上において、プロセッサは、（ａ）候補機能と好ましい機能の間でいくつかの入力／出力パラメータに差異があると判断した場合、および、（ｂ）候補機能と好ましい機能の間で少なくとも１つの入力／出力パラメータに差異があると判断した場合の少なくとも一方であって、差異が等価クラスの差異を含む場合に等価性を判断できない。
命令を自動編集するシステムであって、
機能を有し、人間に可読な第１の機械命令を備えた候補ソースコードを、データリポジトリから取り出す手段と、
人間に可読な第２の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、データリポジトリからアクセスする手段と、
候補機能と好ましい機能の間の等価性を自動的に判断する手段と、
等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアをプロセッサによって自動的に供給する手段と、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、候補ソースコードをプロセッサによって自動的に変換する手段と、
変換された候補ソースコードを出力する手段と、
を備えている。
上記態様のうち任意の１つ以上において、インディシアを供給するシステムは、変換および出力手段を含む。
候補機能を有し、人間に可読な第１の機械命令を備えた候補コードを、プロセッサによりデータリポジトリから取り出し、人間に可読な第２の機械命令を備え、認定コードとして事前に識別されている好ましい機能に、プロセッサによりデータリポジトリからアクセスし、プロセッサにより、候補機能と好ましい機能の間の等価性を自動的に判断し、等価性が判断されると、プロセッサによって、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、プロセッサによって候補コードを自動的に変換し、変換された候補コードを出力することを含む方法。
上記態様のうち任意の１つ以上において、好ましい機能は、機械コードに変換された場合に、事前に識別された最適な方式で好ましい機能を機械に実行させる命令のセットを含む。
上記態様のうち任意の１つ以上において、機械はメモリを含み、事前に識別された最適な方式は、機械コードを記憶するために必要なメモリの識別されたサイズを含む。
上記態様のうち任意の１つ以上において、好ましい機能は、簡潔なコードとして事前に識別された命令のセットを含む。
上記態様のうち任意の１つ以上において、好ましい機能は、候補機能と好ましい機能の間の等価性に関する抽象構文ツリー（ＡＳＴ）判断に従って選択された最も簡潔なメンバを含む。
システムであって、
データリポジトリと、
プロセッサを備え、
プロセッサは、
候補機能を有し、人間に可読な第１の機械命令を備えた候補コードを、データリポジトリから取り出し、
人間に可読な第２の機械命令を備え、認定コードとして事前に識別されている好ましい機能に、データリポジトリからアクセスし、
候補機能と好ましい機能の間の等価性を自動的に判断し、
等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、候補コードを自動的に変換し、
変換された候補コードを出力するシステム。
上記態様のうち任意の１つ以上において、プロセッサがインディシアを供給することは、候補機能を、候補コード内の好ましい機能と置換して、その結果を好ましいコードとしてセーブすることを含むシステム。
命令を自動編集するシステムであって、
機能を有し、人間に可読な第１の機械命令を備えた候補コードを、データリポジトリから取り出す手段と、
人間に可読な第２の機械命令を備えた好ましい機能にデータリポジトリからアクセスする手段を備え、人間に可読な第２の機械命令は認定コードとして事前に識別されており、さらに、
候補機能と好ましい機能の間の等価性を自動的に判断する手段と、
等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアをプロセッサより自動的に供給する手段と、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、プロセッサによって候補コードを自動的に変換する手段と、
変換された候補コードを出力する手段を含むシステム。
上記態様のうち任意の１つ以上において、さらに、候補ソースコード、非ソースコード、機械コードまたは回路実装命令のうち１つ以上が、同様なまたは異なる候補ソースコード、非ソースコード、または回路実装命令と比較されることを含む。
上記態様のうち任意の１つ以上において、さらに、いくつかのプロセッサが、候補機能にアクセスして、好ましい機能に対する機能的等価性を判断し、機能的等価性が判断された場合、候補機能および／または好ましい機能を用いて、識別し、置換し、将来置換がなされるべきであることを示唆する、またはプログラムもしくはシステム内の好ましくない機能を示唆する。システムが候補機能および／または好ましい機能を利用していることを示唆することを含む。
上記態様のうち任意の１つ以上において、さらに、インスタンスユニーク、システムユニーク、グローバリーユニーク、また一時的または無期限にユニークな要素であり得る論理方程式の要素、操作、部分または全体を現す１つ以上の記号の利用を含む。
上記態様のうち任意の１つ以上において、さらに、等価が、抽象構文構造、抽象構文ツリー（ＡＳＴ）、論理方程式、一次論理、二次論理等で判断されることを含む。
上記態様のうち任意の１つ以上において、さらに、好ましい機能と候補機能のうち少なくとも１つが、サブルーチン、方法、手順、述語、命令のシーケンスもしくは大規模コンピュータプログラム内のルール、またはそのルールによる単一の出力への入力に関する関係、のうち少なくとも１つを含む。
【００６１】
上記に加えて、本明細書で開示される実施形態により、その他の実施形態も想定される。例えば、機能は、コメント（例えば内部ドキュメンテーション）に基づく好ましい機能であってもよい。別の実施形態では、機能は好ましくは、審査されない、および／または承認されない、従って未知の機能と対照的に、審査され承認された、従って既知の機能であり得る。
【００６２】
上記の説明において、例証のため、方法は特定の順に説明された。別の実施形態では、方法は、説明したのとは異なる順に実行されてもよいことを理解すべきである。上記に説明した方法は、ハードウェア構成要素で実行されてもよいし、汎用または専用プロセッサ（ＧＰＵまたはＣＰＵ）、または命令でプログラムされた論理回路等の機械に方法（ＦＰＧＡ）を実行させるために用いられ得る、機械で実行可能な命令のシーケンスで具現化されてもよいことも理解すべきである。これらの機械で実行可能な命令は、ＣＤ−ＲＯＭまたはその他のタイプの光ディスク、フロッピーディスケット、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気または光学カード、フラッシュメモリ、または、電子的命令を記憶するのに適したその他のタイプの機械可読媒体等の１つ以上の機械可読媒体に記憶されてもよい。別法として、方法は、ハードウェアとソフトウェアの組み合わせによって実行されてもよい。
【００６３】
実施形態の完全な理解を提供するために、説明において特定の詳細が挙げられた。しかしながら、当業者ならば、実施形態は、これらの特定の詳細なしで実施され得ることを理解するであろう。例えば、回路は、実施形態を不要な詳細で不明瞭にしないように、ブロック図で示され得る。その他の例では、実施形態を不明瞭にすることを避けるために、よく知られた回路、工程、アルゴリズム、構造および教示は不要な詳細なしで示され得る。
【００６４】
さらに、実施形態は、フローチャート、流れ図、データ流れ図、構造図またはブロック図として描写されるプロセスとして説明されたことにも留意すべきである。フローチャートは、操作を逐次プロセスとして説明する場合があるが、操作の多くは並列または同時に実行され得る。加えて、操作の順は再編成されてもよい。プロセスは、その操作が完了した時に終了するが、図に含まれない付加的なステップを有し得る。プロセスは、方法、機能、手順、サブルーチン、サブプログラム等に対応し得る。プロセスが機能に対応する場合、その終了は、その機能が呼び出し機能または主機能に回帰することに対応する。
【００６５】
加えて、システム、方法およびプロトコルは、専用コンピュータ、プログラムされたマイクロプロセッサまたはマイクロコントローラおよび周辺集積回路（複数）、ＡＳＩＣまたはその他の集積回路、デジタル信号プロセッサ、離散型要素回路等のハードワイヤード電子または論理回路、ＰＬＤ、ＰＬＡ、ＦＰＧＡ、ＰＡＬ、モデム、送信機／受信機等のプログラマブル論理デバイス、任意の同等の手段等のうち１つ以上を改良するために実装され得る。一般に、本明細書に例証された方法を実装することができるステートマシンを実装することが可能な任意のデバイスは、本明細書で提供される開示による種々の通信方法、プロトコルおよび技術を利用できる。
【００６６】
本明細書に記載されるプロセッサの例は、限定はしないが、４Ｇ  ＬＴＥインテグレーションおよび６４ビットコンピューティングを備えたＱｕａｌｃｏｍｍ（登録商標）Ｓｎａｐｄｒａｇｏｎ（登録商標）８００および８０１、Ｑｕａｌｃｏｍｍ（登録商標）Ｓｎａｐｄｒａｇｏｎ（登録商標）６１０および６１５、６４ビットアーキテクチャを備えたＡｐｐｌｅ（登録商標）Ａ７プロセッサ、Ａｐｐｌｅ（登録商標）Ｍ７モーションコプロセッサ、Ｓａｍｓｕｎｇ（登録商標）Ｅｘｙｎｏｓ（登録商標）シリーズ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）ファミリーのプロセッサ、Ｉｎｔｅｌ（登録商標）Ｘｅｏｎ（登録商標）ファミリーのプロセッサ、Ｉｎｔｅｌ（登録商標）Ａｔｏｍ（登録商標） ファミリーのプロセッサ、Ｉｎｔｅｌ（登録商標）  Ｉｔａｎｉｕｍ（登録商標）ファミリーのプロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）ｉ５−４６７０Ｋおよびｉ７−４７７０Ｋ  ２２ｎｍ  Ｈａｓｗｅｌｌ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）ｉ５−３５７０Ｋ２２ｎｍ  Ｉｖｙ Ｂｒｉｄｇｅ、ＡＭＤ（登録商標）ＦＸ（登録商標）ファミリーのプロセッサ、ＡＭＤ（登録商標）ＦＸ−４３００、ＦＸ−６３００およびＦＸ−８３５０  ３２ｎｍＶｉｓｈｅｒａ、ＡＭＤ（登録商標） Ｋａｖｅｒｉプロセッサ、Ｔｅｘａｓ Ｉｎｓｔｒｕｍｅｎｔｓ（登録商標）  Ｊａｃｉｎｔｏ  Ｃ６０００（登録商標） オートモーティブインフォテイメントプロセッサ、Ｔｅｘａｓ Ｉｎｓｔｒｕｍｅｎｔｓ（登録商標） ＯＭＡＰ（登録商標）オートモーティブグレードモバイルプロセッサ、ＡＲＭ（登録商標） Ｃｏｒｔｅｘ（登録商標）−Ｍプロセッサ、ＡＲＭ（登録商標） Ｃｏｒｔｅｘ−ＡおよびＡＲＭ９２６ＥＪ−Ｓ（登録商標）プロセッサ、Ｂｒｏａｄｃｏｍ（登録商標） ＡｉｒＦｏｒｃｅ ＢＣＭ４７０４／ＢＣＭ４７０３ワイヤレスネットワーキングプロセッサ、ＡＲ７１００ワイヤレスネットワークプロセッシングユニット、その他の産業で同等のプロセッサのうち少なくとも１つを含んでもよく、任意の既知のまたは将来開発される基準、命令セット、ライブラリおよび／またはアーキテクチャを用いてコンピュータ機能を実行してもよい。
【００６７】
さらに、開示される方法は、種々のコンピュータまたはワークステーションプラットフォームで使用され得るポータブルソースコードを提供するオブジェクト指向ソフトウェア言語のオブジェクトを用いてソフトウェアで容易に実装され得る。別法として、開示されるシステムは、標準論理回路またはＶＬＳＩ設計を用いたハードウェアで部分的または完全に実装され得る。実施形態によるシステムを実装するためにソフトウェアが用いられるかハードウェアが用いられるかは、システムの速度および／または効率要求、特定の機能、および利用される特定のソフトウェアまたはハードウェアシステムまたはマイクロプロセッサまたはマイクロコンピュータシステムに依存する。本明細書に例証される通信システム、方法およびプロトコルは、任意の既知の、または、適用技術の当業者により、本明細書に提示された機能の説明から、また、コンピュータおよびテレコミュニケーション技術の一般的基礎知識をもって、後事に開発されたシステムまたは構造、デバイスおよび／またはソフトウェアで容易に実装され得る。
【００６８】
さらに、開示された方法は、コントローラおよびメモリ、専用コンピュータ、 マイクロプロセッサ等と連携したプログラムされた汎用コンピュータの性能を改善するために記憶媒体に記憶され得るソフトウェアおよび／またはファームウェアで容易に実装され得る。これらの例では、システムおよび方法は、アプレット、ＪＡＶＡ（登録商標）．ＲＴＭ．またはＣＧＩスクリプトとして、サーバまたはコンピュータワークステーションにあるリソースとして、専用通信システムまたはシステム構成要素に埋め込まれたルーチンとして、等の、パーソナルコンピュータに埋め込まれたプログラムとして実装され得る。システムはさらに、システムおよび／または方法を、通信送受信機のハードウェアおよびソフトウェアシステム等のハードウェアおよび／またはソフトウェアシステムに物理的に組み込むことによって実装されてもよい。
【００６９】
種々の実施形態がさらに、または別法として、ソフトウェアおよび／またはファームウェアで完全にまたは部分的に実装されてもよい。このソフトウェアおよび／またはファームウェアは、非一時的コンピュータ可読記憶媒体内または非一時的コンピュータ可読記憶媒体上に含まれる命令の形式をとってもよい。するとこれらの命令は、本明細書に説明された操作の実行を可能にするために１つ以上のプロセッサによって読み出されて実行され得る。命令は、限定はしないが、ソースコード、コンパイルドコード、解釈されたコード、実行コード、統計コード、動的コード等の任意の適切な形式であってよい。そのようなコンピュータ可読媒体は、限定はしないが、リードオンリーメモリー（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ等の、１つ以上のコンピュータによって可読な形式で情報を記憶するための任意の実体のある非一時的媒体を含み得る。
【００７０】
本明細書では、通信環境における空間的再利用のための例示的システムおよび方法を提示した。実施形態は、いくつかの実施形態に関連して説明されたが、適用技術の当業者には、多くの別例、変更例および変形例が明らかであり得る、または明らかであることは自明である。よって本開示は、本開示の趣旨と範囲内のそのような別例、変形例、等価物および変形例を全て包含することを意図している。
【図１】
2018505506.tif 000008
【図２】
2018505506.tif 000009
【図３】
2018505506.tif 000010
【図４】
2018505506.tif 000011
【図５】
2018505506.tif 000012
【図６】
2018505506.tif 000013
【図７】
2018505506.tif 000014
【図８】
2018505506.tif 000015
【図９】
2018505506.tif 000016
【図１０】
2018505506.tif 000017
【図１１】
2018505506.tif 000018
【図１２】
2018505506.tif 000019
【図１３】
2018505506.tif 000020
【図１４】
2018505506.tif 000021
【図１５】
2018505506.tif 000022
【図１６】
2018505506.tif 000023
【図１７】
2018505506.tif 000024
【図１８】
2018505506.tif 000025
【図１９】
2018505506.tif 000026
【図２０】
2018505506.tif 000027
【図２１】
2018505506.tif 000028
【図２２】
2018505506.tif 000029
【図２３】
2018505506.tif 000030
【図２４】
2018505506.tif 000031
【図２５】
2018505506.tif 000032
【図２６】
2018505506.tif 000033
【図２７】
2018505506.tif 000034
【図２８】
2018505506.tif 000035
【図２９】
2018505506.tif 000036
【図３０】
2018505506.tif 000037
【図３１】
2018505506.tif 000038
【図３２】
2018505506.tif 000039
【図３３】
2018505506.tif 000040
【図３４】
2018505506.tif 000041
【図３５】
2018505506.tif 000042
【図３６】
2018505506.tif 000043
【図３７】
2018505506.tif 000044
【図３８】
2018505506.tif 000045
【図３９】
2018505506.tif 000046
【図４０】
2018505506.tif 000047
【図４１】
2018505506.tif 000048
【図４２】
2018505506.tif 000049
【図４３】
2018505506.tif 000050
【図４４】
2018505506.tif 000051
【図４５】
2018505506.tif 000052
【図４６】
2018505506.tif 000053
【図４７】
2018505506.tif 000054
【図４８】
2018505506.tif 000055
【図４９】
2018505506.tif 000056
【図５０】
2018505506.tif 000057
【図５１】
2018505506.tif 000058
【図５２】
2018505506.tif 000059
【図５３】
2018505506.tif 000060
【図５４】
2018505506.tif 000061
【図５５】
2018505506.tif 000062
【図５６】
2018505506.tif 000063
【図５７】
2018505506.tif 000064
【図５８】
2018505506.tif 000065
【図５９】
2018505506.tif 000066
【図６０】
2018505506.tif 000067
【図６１】
2018505506.tif 000068
【図６２】
2018505506.tif 000069
【図６３】
2018505506.tif 000070
【図６４】
2018505506.tif 000071
【図６５】
2018505506.tif 000072
【図６６】
2018505506.tif 000073
【図６７】
2018505506.tif 000074
【図６８】
2018505506.tif 000075
【図６９】
2018505506.tif 000076
【図７０】
2018505506.tif 000077
【図７１】
2018505506.tif 000078
【図７２】
2018505506.tif 000079
【図７３】
2018505506.tif 000080
【国際調査報告】
2018505506.tif 000081
2018505506.tif 000082