JP2018505506A - 機械ベースの命令編集 - Google Patents

機械ベースの命令編集 Download PDF

Info

Publication number
JP2018505506A
JP2018505506A JP2017560472A JP2017560472A JP2018505506A JP 2018505506 A JP2018505506 A JP 2018505506A JP 2017560472 A JP2017560472 A JP 2017560472A JP 2017560472 A JP2017560472 A JP 2017560472A JP 2018505506 A JP2018505506 A JP 2018505506A
Authority
JP
Japan
Prior art keywords
function
candidate
preferred
equivalence
preferred function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017560472A
Other languages
English (en)
Other versions
JP2018505506A5 (ja
Inventor
スティーブン ブクヴァラス
スティーブン ブクヴァラス
ケビン セルカー
ケビン セルカー
Original Assignee
フェイズ チェンジ ソフトウェア エルエルシー
フェイズ チェンジ ソフトウェア エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by フェイズ チェンジ ソフトウェア エルエルシー, フェイズ チェンジ ソフトウェア エルエルシー filed Critical フェイズ チェンジ ソフトウェア エルエルシー
Publication of JP2018505506A publication Critical patent/JP2018505506A/ja
Publication of JP2018505506A5 publication Critical patent/JP2018505506A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

コンピュータソフトウェア開発は、コンピュータサイエンスにおいて、また、現代社会の殆どの態様において多くの進化をもたらしてきた。現代の品質管理においても、バグの発見およびその他のコード検査用途において、コンピュータソフトウェアは理想には程遠いことが多い。開発者は、機能的には正確であるが、セキュリティ、ドキュメンテーション、速度、記憶、再利用可能性またはその他の要素が欠けたコードを書くことがあり、それが、ソフトウェアコードのセグメントを理想に程遠くしている。等価コードを識別し、識別された場合に、その等価コードを審査される等価物と置換することは、より堅牢で、安全で利用および再利用可能、および/または性能を満たす、またはその他の目的のソフトウェアの開発を促進する。

Description

本開示は一般に、機械ベースのパターン認識および選択的編集を対象とする。
関連出願の相互参照
本出願は、2015年2月9日に出願された、タイトルが「Introduction: Jumping the Tar Pit」の米国特許仮出願第62/113,623号、2015年2月9日に出願された、タイトルが「Software Engineering,Software−As−Data:At Ground Zero」の米国特許仮出願第62/113,627号、2016年1月12日に出願された、タイトルが「The Phase Change Thesis」の米国特許仮出願第62/277,769号、および2016年1月20日に出願された、タイトルが「Software as Data,Software as Database,Software as Programming AI,Software as Modeling AI」の米国特許仮出願第62/280,965号の利益を主張し、これらはそれぞれ全体の参照により本明細書に組み込まれる。
プログラマブルマシンは、ソフトウェアとソフトウェア書き込みツールが発達するにつれ進化し続ける。しかしながら、プログラマーは依然として、既存のソフトウェアを見つけてレビューするには時間がかかること、個人的な好み、既存ソフトウェアの存在に関する知識の欠如またはその他の理由により、既に書かれているソフトウェアを書き込むことがある。その結果、ソフトウェアは、機能的に等価であるとしても、理想とは程遠いコード部分を含むことが多い。従来の解決策は、本明細書に参照により組み込まれる、「Software Equivalence Checking」(特許文献1)を含む。
コンパイラおよびインタープリタは、人間に可読なソースコードを実行のために機械可読コード(例えば、オブジェクトコード、実行コード等)に変換する。コンパイラは多くのコード化の問題を無効化できるが、すべてを無効化、また、常に完全に無効化できるわけではない。例えば、アレイの各要素の横断を含む1つのソフトウェアコードは、コーダーがアレイを行要素毎に横断して次に列を増分する、または列要素毎に横断して行を増分した場合には、異なるパフォーマンス特性を有し得る。アセンブラ等のオブジェクトコードは、値を別様式で記憶し、最終結果が同じだとしても、他とは異なる技法を用いたより多くの処理ステップを要する可能性がある。同様に、特定のソート方法の選択は、ソートされるデータに基づいてパフォーマンスに大きな影響を与え得る。例えば、バブルソートは、比較的少数の要素をソートする場合、またはソートオーダーにない要素を少数のみ有する多数の要素をソートする場合には有効である。しかしながら、バブルソートは、多くの他のアプリケーションにおいて満足でない選択となりがちである。
米国特許出願公開第2011/0138362号明細書
「Decision Procedures,An Algorithmic Point of View」, クローニングおよびストリヒマン,2008,ISBN: 978−3−540−74104−6
2組のソフトウェアがそれぞれ同じ結果をもたらしたとしても、全てのソフトウェアが、1つのアプリケーション内で、または1つのソフトウェア管理システム内等で同じ効果を有するわけではない。ソフトウェアは、不十分さまたはその他の望ましくない問題を有し得る。結果として、コンピュータまたは、ソフトウェアを実行するその他の機械は、理想的能力未満で作動することがある。
開示される特定の実施形態は、SMTソルバを用いてもよく、非特許文献1によってより容易に理解され得るが、同文献はその全体を参照することによって、その全開示が本明細書に組み込まれる。
ソフトウェアまたは「コード」は、コードが機械で可読な形式にされたときに、マイクロプロセッサ(またはより一般的に「プロセッサ」)等の機械によって使用されるために、人間によって書き込まれる命令を指す。ソフトウェアは、書かれた目的の機能性またはそれがもたらす結果を凌駕する多くの属性を有する。例えば、ソフトウェアはスペースを要し、マシンサイクルを要し、そのソフトウェアの作成者であるかも知れない人やそれ以外の人によって読まれ、セキュリティ上の脆弱性を有し、更新を要する可能性があり、異なるプラットフォームへのポーティング、および/またはその他の側面を要する可能性がある。多くの場合、前述でレビューし、審査し、好ましいと識別された理想的または好ましい機能は利用可能である。一般的な導入として、また、一実施形態では、候補機能ソースコードを自動識別し、候補機能が、以前に審査されて認定ソースコードとして識別された好ましい機能ソースコードと機能的に等価である(例えば、同じ結果をもたらす)かどうかを判断し、等価であれば、好ましい機能を候補機能に置換することによって候補ソースコードを好ましいソースコードに変換してセーブするか、またはその他の方式で、変換されたソースコードを将来のアクセスおよび/または処理向けに利用可能にするために、機械ベースの命令が提供される。
本明細書で用いられる「機能」は、ソフトウェア機能、サブルーチン、手順(機械で実行可能な)方法、述語、より大きなコンピュータプログラム内の命令またはルールのシーケンス、ルールに従って入力を単一の出力に関連付ける関係を含む。単一の出力は、プリミティブデータ型を含んでもよいし、または、複合または抽象データ型等のより複雑なデータ型を含み得る。
一実施形態では、ソースコードの2つの部分、候補機能と好ましい機能が考慮される。本明細書でより詳細に論じられるように、候補機能と好ましい機能が同一の結果をもたらすという判断が行われる。例えば、提供された全ての入力にわたり、候補機能と好ましい機能からの出力は等価である。別の実施形態では、候補機能と好ましい機能に関して論理方程式が決定されて、次に、有限セットの入力にわたり機能の等価性を判断するように動作可能な充足可能性モジュロ理論(SMT)ソルバ等の自動定理証明器に提供される。しかしながら、依然として差異が存在し得る。候補機能は、記憶効率、実行性能、可読性、維持性、セキュリティおよび/またはその他の機能的に不可知な差異等の1つ以上の要因に関して審査されていてもよい。一実施形態では、差異はプログラミング言語を含む。別の実施形態では、差異はコードのコンパクトさを含む。例えば、「C=2A+2B」は、「C=A+A+B+B」よりも好まれ、C=2*(A+B)は、「C=2A+2B」よりも好まれ得る。別の実施形態では、差異は可読性を含む。例えば、「長方形の周長=2(辺A+辺B)」は、「X=2A+2B」より好まれ得る。別の実施形態では、差異はリソース効率を含んでもよい。例えば、必要なフィールドのみを取り出すためにリモートデータベースに繰り返しアクセスすることに比べて、レコード内の全フィールドが必要でなかったとしても、リモートデータベースからレコード全体にアクセスしてレコードをメモリに保持するほうがより高効率であり得る。前記の事項は、候補機能と好ましい機能の間に存在し得る機能的に不可知な差異への導入を提供するものであり、網羅的なリストとして意図されるものではない。
別の実施形態では、候補機能は好ましい機能とは異なるが、差異は同じ等価クラス内のメンバ(例えば入力および/または出力)間に限定されている。例えば、1つの等価クラスは2進値ペアであっても(例えば、{(1,0)、(TRUE,FALSE)、(ON,OFF)})、または等価値(例えば、{(“.1”,“0.1”,“0.1000”)}であってもよい。
同じ入力(複数)を与えられた候補機能と好ましい機能が、異なる出力を生成するが、異なる出力がそれぞれ同じ等価クラスにある場合、好ましい機能と候補機能は機能的に等価であると判断される。例えば、同じ入力が好ましい機能と候補機能に供給されて、好ましい機能が「TRUE」を出力し候補機能が「1」(2進データタイプの)を生成する場合、非同一の出力でも機能的等価がもたらされる。別法として、同じ入力を与えられて、好ましい機能が「ON」を生成し候補機能が「0」を生成する場合、等価は反証されたことになる。
本明細書で開示された特定の実施形態に関して、従来技術のコンピュータシステムおよびソフトウェア開発によって生じた問題が軽減され得る。コンピュータ プログラミング産業は、有限な処理、帯域幅および記憶能力に関する多くの問題を無視することができていた。ハードウェアはより安価且つ小型になり続けた。適切なソフトウェアコードの作成、開発の目的である機能を実行するコードを有効なコードにするために必要な投資は、多くの場合ハードウェアで解決された。ソフトウェアを、その機能性を超えたところまで改良することは、適切な機能性の開発を優先して概ね諦められ、一度それが達成されると、次のタスクに移っており、従来技術の開発の慣行では、トレードオフが容易に受け入れられた。
プログラミングの初期では、簡潔なプログラミングは言語の人為産物であった。アセンブリのような言語は、プロセッサが要求される機能性を提供するために必須である以上の機会を殆ど残さないものであった。今日、プログラマーが彼らのプログラミングとドキュメンテーションを潤色することを可能にする多くの機能性およびオブジェクト指向言語が存在する。しかしながら、プログラムがその機能性タスクを実行する場合、それ以上のものがもたらされることは稀である。
要求される機能を実行するだけのソフトウェアを提供することはもはや十分ではない。特定のコンピュータ実装は依然として、コード記憶要求、処理時間および電力要求に対して高度にセンシティブである。デスクトップおよびその他の固定位置コンピュータシステムは多くの場合、追加ハードウェアで処理または記憶上の制約を解決するが、モバイルコンピューティングは記憶、処理および電力要求に対して特にセンシティブであり続ける。記憶、処理および電力のうちいずれか1つにおいて非常に僅かにせよ改良があれば、一大突破口となり得、それにより、従来は非実用的なデバイスが今や実行可能な製品となる。加えて、再利用可能性等の要因が常に謳われたが、実際問題としてはそれらが配備されることは稀であり、実際に配備された場合は、人間のプログラマーによる、機能的等価性を保証するための相当の投資を必要とする。しかしながら、本明細書で提供される開示により、コンピュータサイエンスは、より堅牢で、安全で、再利用可能なコードを提供するための、ソフトウェアの機械が提供する編集の利益を得ることができる。
本明細書で開示された実施形態のさらなる利点として、機能的等価性が保証されるため、検査と検証が低減される、それどころか排除され得る。従来技術を用いるいずれのソフトウェア開発プロジェクトの大部分は、機能的目的がプログラムによって満たされることを確認することを包含する。しかしながら、本明細書の開示によれば、一度機能が承認されると、遭遇される任意の機能的に等価な後続コードは、承認されたコードと置換されることができ、機能的等価性は、承認されたコードに後続の検査を実行する必要なく保証される。
「少なくとも1つの」、「1つ以上の」および「および/または」という語句は、運用上接続語でもあり離接語でもある制限のない表現である。例えば、「A、BおよびCのうち少なくとも1つ」、「A、BまたはCのうち少なくとも1つ」、「A、BおよびCのうち1つ以上」、「A、BまたはCのうち1つ以上」および「A、Bおよび/またはC」は、Aのみ、Bのみ、Cのみ、AとB両方、AとC両方、BとC両方、またはA、BおよびCが一緒、を意味する。
「1つの(a)」または「1つの(an)」実体という用語は、その実体のうち1つ以上を指す。故に、本明細書では、「1つの(a)(または「1つの(an)」、「1つ以上の」および「少なくとも1つの」という用語は、互換的に用いられ得る。「備える」、「含む」および「有する」という用語が互換的に用いられ得ることにも留意すべきである。
用語「自動」またはその変形は、本明細書で使用する場合、プロセスまたは操作が実行される場合に実質的な人間による入力なしで行われる任意のプロセスまたは操作を指す。しかしながら、プロセスまたは操作は、プロセスまたは操作の実行前に入力が受け取られていた場合、プロセスまたは操作の実行が実質的または非実質的な人間による入力を用いたとしても自動であり得る。人間による入力は、そのような入力が、プロセスまたは操作がどのように実行されるかに影響する場合に実質的であると見なされる。プロセスまたは操作の実行に合致する人間による入力は「実質的」とは見なされない。
用語「コンピュータ可読媒体」は、本明細書で使用する場合、プロセッサに実行する命令を提供することに加担する任意の実体のある記録媒体を指す。そのような媒体は、不揮発媒体、揮発性媒体および伝送媒体を含むがそれらに限定されない任意の形態をとってもよい。不揮発性媒体は、例えば、NVRAMまたは磁気もしくは光ディスクを含む。揮発性媒体は、メインメモリ等のダイナミックメモリを含む。コンピュータ可読媒体の一般的形態は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意のその他の磁気媒体、光磁気媒体、CD−ROM、任意のその他の光学的媒体、パンチカード、紙テープ、穴のパターンを有する任意のその他の物理的媒体、RAM、PROM、EPROM、フラッシュEPROM、メモリカード、任意のその他のメモリチップもしくはカートリッジのような固体媒体、またはコンピュータがそこから読み取れる任意のその他の媒体を含む。コンピュータ可読媒体がデータベースとして構成される場合、データベースは、関係データベース、階層型データベース、オブジェクト指向、および/または同等物等の任意のタイプのデータベースであり得ることが理解されるべきである。したがって、本開示は、本開示のソフトウェア実装が記憶される、実体のある記憶媒体と、従来技術で認められた等価および後続媒体を含むものと考えられる。
機械で実行可能な命令は、特定の機械(例えばパーソナルコンピュータ、モバイルコンピューティングデバイス、ラップトップ等)にローカルに記憶され実行されてもよいが、データおよび/もしくは命令の記憶および/または命令の少なくとも一部分の実行は、一般に「クラウド」として知られるリモートデータ記憶および/もしくは処理デバイスまたはデバイスの集合への接続性によって提供されてもよいが、それは、公共、私的、専用、共有および/もしくはその他のサービス局、コンピューティングサービス、および/または「サーバファーム」を含み得ることを理解すべきである。
用語「判断する」、「計算する」「算定する」およびその変形は、本明細書で用いられる場合、互換的に用いられ、任意のタイプの方法、プロセス、数学的演算または技法を含む。
用語「モジュール」は、本明細書で用いられる場合、任意の周知のもしくは後事に開発されたハードウェア、ソフトウェア、ファームウェア、人工知能、ファジー論理または、その要素に関連する機能性を実行することができるハードウェアと ソフトウェアの組み合わせを指す。さらに、本開示は例示的実施形態に関して説明されるが、本開示の別の態様は別途クレームされ得ることを理解すべきである。
ソースコード、コード、ソフトウェアまたは等価物に適用される用語「人間に可読な」は、本明細書で用いられる場合、命令実行のために機械によって読み取られるために、解釈またはコンパイリングなしで利用できない、人間に可読なフォーマットを用いるコンピュータ命令を指す。ソースコードは、話し言葉での表現(例えば、「の場合」、「戻る」、「取得する」、「フェッチ」等)および、「予約語」として知られ得る話し言葉文字表現(例えば「=」、「.」、「、」(「、」)等)を含み得る、命名された変数、機能(例えば変動支払い(原則的に変動利子)等の記号による表現を含み得る。人間に可読なソースコードを具現化するための用いられるプログラミング言語は、どれが予約語または等価記号であってどれが予約語または等価記号でないかに関して特定のルールを有してもよい。一般に、ソースコードは、開発されたプログラミング命令の人間の出力であり、ソースコード 言語(例えば、パイソン、C、C++、フォートラン、ベーシック等)によって一般に知られている。
機械コード、コード、ソフトウェアまたは等価物に適用される用語「機械可読」は、人間に可読なソースコードの、機械で読み取り可能且つ実行可能な形式を含むようにコンパイラまたはインタープリタを介して処理された人間に可読なコードを指す。一実施形態では、機械可読コードはアセンブラである。別の実施形態では、機械可読コードは機械コード(例えば2進)である。機械可読コードは、異なるソースコード言語によって提供される同じ機能性間の差異を完全にまたは部分的に排除するために、また、プロセッサまたはプロセッサファミリー向けに命令セットを適合させるためにハードウェアプラットフォーム(例えば Intel(登録商標) x86、Motorola(登録商標) 8000x、CISC、RISC等)に対してさらに特定的になり得るように、人間に可読な ソースコード(例えば「元本」と「利子」が「$01」と「$02」となり、「売り上げ」と「税」が「$03」と「$04」になる等)の記号による表現の、標準識別子名前付け変換を利用してもよい。機械可読コードは、マイクロプロセッサ等の機械によって可読となるためのさらなる処理を必要としない場合があるが、機械によって実行可能となるための付加的な処理(例えばリンキング)を要し得る。熟練したプログラマーならば、機械コードを「読み取る」ことができるであろうが、そのようなソフトウェアの形態は、言語ベースの記号を省略し、そのような機械コードは人間に可読な範囲外であると考えられる。
本明細書で使用される用語「データリポジトリ」は、デバイス、媒体、構成要素、構成要素の一部、構成要素の集合および/または、プロセッサにアクセス可能なデータを記憶できるその他の構造のうち任意の1つ以上である。本明細書で想定されるデータリポジトリの例は、限定はしないが、プロセッサレジスタ、オンチップ記憶装置、オンボード記憶装置、ハードドライブ、固体デバイス、固定媒体デバイス、着脱式媒体デバイス、論理接続記憶装置、ネットワーク記憶装置、分散型ローカルおよび/もしくはリモート記憶装置(例えば、サーバファーム、「クラウド」記憶装置等)、媒体(例えば、固体、光学、磁気等)および/またはそれらの組み合わせを含む。データリポジトリは少なくとも1つのプロセッサにアクセス可能であるが、いずれのプロセッサも現在アクセスの必要がない時間中には、プロセッサから論理的および/または物理的に遮断されていてもよい。データリポジトリは直接アクセスできてもよいし、または1つ以上の介在構成要素を介してアクセスできてもよく、介在構成要素は、限定はしないが、キャッシュおよび/またはバッファを含む。特定の実施形態では、データリポジトリはデータベース、ファイル、レコードまたはその他の論理記憶装置構造および/またはそれらの一部または集合に組織化されてもよい。
本開示の実施形態による第1のシステムの図である。 本開示の実施形態による第2のシステムの図である。 本開示の実施形態による第3のシステムの図である。 本開示の実施形態による第4のシステムの図である。 本開示の実施形態によるプロセスの図である。 本開示の実施形態による第5のシステムの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。 本開示の実施形態によるソリューションの図である。
本発明を、添付の図面と併せて説明する。以下の説明は、実施形態を提供するのみであり、請求項の範囲、適用性または構成を限定する意図はない。寧ろ、以下の説明は、当業者に、実施形態を実装する実現的説明を提供する。添付の特許請求の範囲の趣旨と範囲から逸脱せずに、要素の機能と配置に種々の変更を施してもよいことが理解される。
図面に副要素識別子が存在する場合で、副要素識別子がない、要素の個数を含む説明の参照は、複数で用いられた場合、同じ要素の番号を有する任意の2つ以上の要素を指すことを意図している。そのような指示が単数形でなされた場合、要素のうち特定の1つに限定することなく、同様な要素数を有する要素のうち1つを指すことが意図される。本明細書において、任意の逆の明示的な用法または、さらなる資格または識別を提供することは、手順を踏むことになる。
本開示の例示的システムおよび方法はさらに、分析ソフトウェア、モジュールおよび関連する分析ハードウェアに関連しても説明される。しかしながら、不要に本開示を不明瞭にすることを避けるために、以下の説明は、ブロック図の形式で示すことができて周知であるか、または別途要約される周知の構造、構成要素およびデバイスを省略する。
説明のため、本開示の完全な理解を提供するために、数々の詳細が規定される。しかしながら、本開示は、本明細書に規定される特定の詳細を超えた様々な方式で実行され得ることを理解すべきである。
図1は、本開示の実施形態によるシステム100を示している。システム100は、候補機能104A−104Dを内蔵するソースコード102にアクセスするプロセッサ106を備える。一実施形態では、候補機能104のうち少なくとも1つは、少なくとも1つの入力を受け取って少なくとも1つの出力を生成する機能を備える。別の実施形態では、入力と出力のうち少なくとも1つは、機能 パラメータ、人力入力デバイスからの入力、メモリアドレス、レジスタ、ポートまたはその他のデータソースであってよい。別の実施形態では、出力は、アドレスに書き込まれ、出力デバイスに提示され、メモリアドレスまたはレジスタに書き込まれ、ポートおよび/または電子コンピューティング技術で周知の任意のその他の入力および/または出力手段で出力される機能出力であってよい。
一実施形態では、ソースコード102は、統合開発環境またはその他のソフトウェアオーサリングツールを用いる等でプログラマーによって書き込まれた候補機能104を含み得る。ソースコード102は、一実施形態では複数の機能104を備えて示されている。別の実施形態では、ソースコード102は104A等の単一の機能104を備えていてもよい。
プロセッサ106はソースコード102と機能104にアクセスして、候補機能104のうち1つを、データリポジトリ114内に保持されていた好ましい機能108A−108nのうち1つと比較する。プロセッサ106は次に、好ましい機能108のうちの機能と置換されるべき候補機能104のうちの機能を識別し、次にプロセッサ106はレコードを作成するが、それは、候補機能識別子116A−116Dのうちの1つと、置換インディシア118A−118Dのうちの1つと間の関連性を提供するための、インディシア112に関連する機能識別子110を備えたレコード等である。例えば、特定の機能である候補機能1(104A)を識別する機能識別子116A(「候補機能1」)が、好ましい機能108C(「好ましい機能C」として識別される)による置換を示す機能インディシア118Aと関連付けられる。別の実施形態では、機能識別子116Bと関連付けられた置換インディシア118Bは、関連する機能の候補機能2(104B)が保持されるべきであることを示し得る。例えば、候補機能2(104B)は、カウンターパートまたはデータリポジトリ114内の識別できるカウンターパートを有していない、または、好ましい機能108のうちいずれとも機能的に等価ではない場合がある。別の実施形態では、置換の実行に加えて、または置換の実行の代わりに、推奨または教示が実行され得る。例えば、プログラマーに対して、プログラマーが書いた機能(例えば、「候補機能1」)が、別の機能(例えば、「好ましい機能C」)に近づくように改善される可能性があることを示し、またオプションとして改善基準を提示するために、プログラマーにメッセージが提示されてもよい。
インディシア112は、説明上の明瞭さのためからも選択された1つの実施形態としての、人間に可読な英語のデータエントリーを備えて示されている。本明細書で想定される別の実施形態は、データ要素(例えば、2進、模倣データタイプ、データ構造等)内のエントリー等のデータ値および/または、揮発性メモリ、不揮発性メモリ、媒体、データリポジトリ114、その他のデータリポジトリ、媒体、および/またはその他のデータ記憶構成要素、構成要素の集合もしくはその一部内に保持されたデータ要素(例えば、フラグ/フラグなし、レコード/レコードなし、オブジェクト/オブジェクトなし、等)の存在を含み、本開示の範囲から逸脱せずに、本明細書で開示された実施形態で実行されてもよい。
図2は、本開示の実施形態によるシステム200を示す。一実施形態では、図2は、機能インディシア112を利用してソースコード102(図1参照)を好ましいソースコード202に変換するシステム200を示す。プロセッサ106は、エントリー118を含み、エントリー116を含む対応する機能識別子110と関連付けられた機能インディシア112にアクセスする。次にプロセッサ106はソースコード102にアクセスして、好ましいソースコード202を生成し、それは、置換が行われているにしても、ソースコード102と機能的に等価であり、そこで少なくとも1つの候補機能104は機能的に等価である好ましい機能108と置換される。プロセッサ106は、データリポジトリ114からの機能インディシア112で示された好ましい機能108にアクセスし、自動置換を提供して好ましいソースコード202を生成する。
一実施形態では、候補機能1(104A)は好ましい機能C(108C)で置換され、候補機能2(104B)は保持され、候補機能3(104C)は好ましい機能A(108A)で置換され、候補機能4(104D)は好ましい機能X(108X)で置換される。次に好ましいソースコード202は、セーブされて好ましいソースコードとして識別されて、さらなる開発、コンパイリング、解釈、リンク付け、実行および/または将来の時点でアクセス可能となるような保存に、さらに備えてもよい。
図3は、本開示の実施形態によるシステム300を示す。一実施形態では、システム300は好ましいソースコード202に変換するソースコード102を示し、機能的等価のインディシアはプロセッサ106のみによって保持されて、プロセッサ106が好ましいソースコード202を直接出力することを可能にしている。例えば、プロセッサ106はアクセスソースコード102にアクセスして、候補機能1(104A)、3(104C)、4(104D)が、データリポジトリ114内に維持されている好ましい機能108(図1参照)と置換されるべきであることを判断する。結果として、プロセッサ106は、好ましい機能C(108C)、候補機能2(104B)、好ましい機能A(108A)および好ましい機能X(108X)により構成される好ましいソースコード202を直接出力する。
図4は、本開示の実施形態によるシステム400を示す。一実施形態では、2つの機能が等価であるかどうか、例えば、候補機能1(104A)が好ましい機能C(108C)と機能的に等価であるかどうかの判断は、論理の適用による。論理は、種々に実現される。一実施形態では、論理は一次論理を備え、別の実施形態では、論理方程式は二次論理を備える。一実施形態では、単一の候補機能402が、単一の好ましい機能404に対する等価を決定すると考えられる。別の実施形態では、候補機能402は、複数の候補機能104等の複数の機能を備えてもよく、および/または好ましい機能404は、複数の好ましい機能108のような複数の機能を備えていてもよい。論理方程式は、等価の値を有する等価、例えば「A or B」が「A or B」と同一であること、したがって等価であることを実証し得る。しかしながら、非等価であるが機能的に等価である表現も、等価を示す可能性があり、例えば、「A or B」は「B or A」と同一ではないが、機能的に等価である。加えて、記号による表現は、方程式の少なくとも一部、例えば、「A or B」は、「B」が「X and Y nor Z」を表す場合、「A or(X and Y nor Z)」と非同一であるが、機能的に等価である。
別の実施形態では、機能的等価は、候補機能402が既知のメンバである列挙セットの1つ以外の全てのメンバの非等価によって決定される。例えば、候補機能402は、基本数学関数、加算、減算、乗算および除算のうち1つを実行することが知られるとする。好ましい機能404が4つの基本数学関数セットの1つであり、他の3つについて非等価が決定されており、それが非等価が決定されるための唯一の機能としての好ましい機能404に導くのであれば、好ましい機能404は、候補機能402と機能的に等価であると判断され得る。
候補機能402は、構文解析機能I/O406によって構文解析された入力/出力シグナチャを有する。同様に、好ましい機能404は、構文解析機能I/O408によって構文解析された入力/出力シグナチャを有する。表1は、候補機能402の一例を提供する。
表1
表2は、好ましい機能404の一例の機能を提供する。
表2
一実施形態では、好ましい機能404は、内蔵された人間に可読なコードの簡潔さ等により審査され好ましいと識別された。簡潔さは、抽象構文ツリー(AST)等の抽象構文構造によって提供されてもよい。例えば、より少ないノード、より少ない葉ノード、ノードの深さ、ノードの幅が、簡潔さの尺度を提供し得る。機能的等価サービス410は次に、等価性が正しいかどうかを判断する。一実施形態では、機能的等価サービスは構文解析された候補機能402の一次論理412と、構文解析された好ましい機能404の一次論理414を導出して一次論理を導出し、それは、一実施形態では、SMTクエリー416を含む。
表3は、論理、入力および出力に分解された機能の一例を示す。
表3
表4は、論理、入力および出力に分解された機能の別例を示す。
表4
表5は、SMTクエリーの一例を示す。
表5
別の実施形態では、SMTクエリー416がSMTソルバ420に提供されて、満足な(「SAT」)非等価性結果もしくはNOの結果422、または不満足な(「UNSAT」)等価性結果もしくはYESの結果424を示す。
図5は、本開示の実施形態によるプロセス500を示す。一実施形態では、プロセス500は、プロセッサ106等で実施される。プロセス500は、ステップ502、504のうち一方または両方で開始してもよく、ステップ502は、複数の機能104を含み得る候補ソースコード102等からの候補機能にアクセスする。ステップ504は、好ましいソースコード202からの1つ以上の好ましい機能108を備える等の好ましい機能にアクセスする。
次に、ステップ506は、機能が機能的に等価であるかどうか(例えば、同じ入力を与えられた場合に同じ結果をもたらすか)を判断し、等価である場合、プロセス500はオプションのステップ508に進んで、置換のインディシアを提供するか、または、ステップ508が実施されない場合、プロセス500に外部からインディシアを提供する。または、処理はステップ510に進む。ステップ510は候補機能502を好ましい機能504と置換する。ステップ506で非等価であると判断された場合、置換は必要なく、プロセス500は終了してよい。任意選択的に、ステップ510の後に、今や置換された好ましい機能504を備えたソースコードが媒体にセーブされるか、あるいは、付加的なまたは後事の処理および/または参照のために保持されてもよい。
本明細書で提供される場合、1つ以上の好ましい機能108を備えるような好ましいソースコードは、機能的に等価であるが好ましくない1つ以上の候補機能104を備える等の候補ソースコードを自動的に置換することによってもたらされてもよい。好ましいソースコードは、好ましいソースコードが使用を認可される事前審査に基づいて好ましいと判断されてもよい。好ましいソースコードは、人間に可読な形式および/あるいは機械可読形式の必要メモリ、性能測定基準、セキュリティ、内部ドキュメンテーションの存在、内部ドキュメンテーションの特定のボリュームの存在、冗長変数名の使用、命令の簡潔さ、エラーハンドリング、および/またはその他の属性によって好ましいと判断され得る。別の実施形態では、ソースコードは事前審査によって好まれる。別の実施形態では、候補ソースコードは事前審査の対象ではなかった。さらに別の実施形態では、好ましいソースコードは、候補ソースコードの開発者等の下位の権限者によって審査された候補ソースに比べてより高位の権限者によって審査される。さらに別の実施形態では、好ましいソースコードの判断は、コードの行が少ない1つ以上のコード、より少ない手順のコール、より多くのコメント、より長い変数名等の基準に従って決定され得る。
図6は、本開示の実施形態によるシステム600を示す。システム600は、候補機能602を備えた候補ソースコード102にアクセスしているプロセッサ106を示す。一実施形態では、プロセッサ106は、候補機能602が、データリポジトリ114に保持されている少なくとも1つの好ましい機能606A−606nと機能的に等価であるであることを判断する。
一実施形態では、プロセッサ106は、候補ソースコードを好ましいソースコード604A−606Eのうち1つに変換する。別の実施形態では、プロセッサ106は、候補ソースコードを好ましいソースコード604A−604Eのうち2つ以上に変換する。プロセッサ106は、ソースコード102を、好ましいソースコード604A−604Eのうち1つ以上に変換して、少なくとも1つの好ましい態様を満たす1つのソースコードファイル等のソースコードを出力する。好ましいソースコードは、機械または機械の構成要素のより最適な操作をもたらすが、それは、より少ない操作を行う、より迅速な操作を行う、必要メモリがより少ない、より少ないリソース要求で操作を実行する、より低費用(例えば、電力、応答等)のリソースを利用する、より安全な操作を実行する等による。好ましい態様は多様に具現化され、限定はしないが、セキュリティ、CPU効率、帯域幅効率、必要メモリ、コードの簡潔さ、データベースアクセス、またはそれら2つ以上の組み合わせを含む。
一実施形態では、プロセッサ106は、候補機能602が、CPU使用(例えば、クロックサイクル、操作等)に関して好ましいと識別された好ましい機能606Aと機能的に等価であると判断する。したがって、プロセッサ106は、ソースコード102を、候補機能602の代わりに好ましい機能606Aを含む好ましいソースコード604Aに変換する。結果として、ソースコード102はソースコード604Aに変換される。
別の実施形態では、プロセッサ106は、候補機能602が、セキュリティに関して好ましいと識別された好ましい機能606Bと機能的に等価であると判断する。例えば、機能606Bは、事前承認された通信暗号化プロトコル、承認された通信ポート、承認されたエラーハンドリングルーチン等を利用してもよい。
別の実施形態では、プロセッサ106は、候補機能602が、コードの簡潔さに関して好ましいと識別された好ましい機能606Cと機能的に等価であると判断する。例えば、機能606Cは、可読性を促進し、オプションとして機械効率を促進する等で、より簡潔であると判断された人間に可読なソースコードを利用してもよい。例えば、「X=X+1」よりは、「X++」等の、より少ない演算子を用いるソースコードを利用することがより好ましくあり得る。
別の実施形態では、プロセッサ106は、候補機能602が、記憶に関して好ましいと識別された好ましい機能606Dと機能的に等価であると判断する。現代のデータ記憶技術をもってしても、データ記憶には問題があり、特に、チップとボードの「フットプリント」がより重要になる、埋設されたシステムおよびモバイル技術では問題となる。例えば、機能606Dは、より冗長な「interest=rate*balance」よりも、「i=r*b」といった、より少ない記憶スペースを要するソースコードを利用する可能性がある。
別の実施形態では、プロセッサ106は、候補機能602が、帯域幅とセキュリティの両方に関して好ましいと識別された好ましい機能606Eと機能的に等価であると判断する。例えば、好ましい機能606Eは、より少ないネットワーク依存操作と、好ましいポートおよび/またはセキュリティプロトコルを利用し得る。
図7−74は、本開示の実施形態によるソリューションを示す。
例示的態様は、以下のうち任意の1つ以上を対象としてもよい:候補機能を有し人間に可読な第1の機械命令を備えた候補ソースコードを、プロセッサによりデータリポジトリから取り出し、人間に可読な第2の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、プロセッサによりデータリポジトリからアクセスし、プロセッサにより、候補機能と好ましい機能の間の等価性を自動的に判断し、等価性が判断されると、プロセッサによって、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、プロセッサによって候補ソースコードを自動的に変換し、変換された候補ソースコードを出力することを含む方法。
上記態様のうち任意の1つ以上において、インディシアを供給するステップは、変換および出力ステップを含む。
上記態様のうち任意の1つ以上において、好ましい機能は、第2の人間に可読な機械命令とは関連しない人間に可読な要素を含む。
上記態様のうち任意の1つ以上において、等価性を判断するステップは、候補機能と好ましい機能の間でいくつかの入力/出力パラメータが異なると判断した場合に不良となる。
上記態様のうち任意の1つ以上において、等価性を判断するステップは、
候補機能と好ましい機能の間で少なくとも1つの入力/出力パラメータが異なると判断し、また、差異が等価クラスの差異を含む場合に不良となる。
上記態様のうち任意の1つ以上において、さらに、
候補機能の第1の機械可読変換を提供し、
好ましい機能の第2の機械可読変換を提供し、
入力の有限セットのうち1つで、第1の機械可読変換と第2の機械可読変換の両方を実行し、
第1の機械可読変換と第2の機械可読変換の両方を実行するステップがそれぞれ、候補機能の第1の機械可読変換および第2の機械可読変換各々から等価値を出力したことを受けて等価性を判断することを含む。
上記態様のうち任意の1つ以上において、等価性を判断するステップがさらに、
候補機能の論理方程式を導出し、
好ましい機能の論理方程式にアクセスし、
候補機能の論理方程式が、好ましい機能の論理方程式とは異なると判断された場合に等価の判断は不良となる。
候補機能の論理方程式が好ましい機能の論理方程式と等価であると判断されるかどうかの判断はさらに、
候補機能の論理方程式と好ましい機能の論理方程式を自動定理証明器に供給し、
等価を示すインディシアを自動定理証明器から受け取る、ことを含む。
上記態様のうち任意の1つ以上において、好ましい機能は、機械コードに変換された場合に、事前に識別された最適な方式で好ましい機能を機械に実行させる命令のセットを含む。
上記態様のうち任意の1つ以上において、事前に識別された最適な方式は、少なくとも1つのセキュリティ目的に準拠する識別された方式を含む。
上記態様のうち任意の1つ以上において、機械はプロセッサを含み、事前に識別された最適な方式は、識別されたプロセッサ動作の個数を含む。
上記態様のうち任意の1つ以上において、機械はメモリを含み、事前に識別された最適な方式は、機械コードを記憶するために必要なメモリの識別されたサイズを含む。
上記態様のうち任意の1つ以上において、好ましい機能は、簡潔なソースコードとして事前識別された命令のセットを含む。
上記態様のうち任意の1つ以上において、等価性を判断するステップがさらに、
候補機能から、候補機能の等価クラスのセットを生成し、等価クラスは、等価機能のセットを含み、セットの各要素は機能からソースへのマッピングを有する。
上記態様のうち任意の1つ以上において、好ましい機能は、候補機能と好ましい機能の間の等価性を判断する抽象構文ツリー(AST)判断に従って選択された最も簡潔なメンバを含む。
システムであって、そのシステムは、
データリポジトリと、
プロセッサを備え、
プロセッサは、
候補機能を有し、人間に可読な第1の機械命令を備えた候補ソースコードを、データリポジトリから取り出し、
人間に可読な第2の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、データリポジトリからアクセスし、
候補機能と好ましい機能の間の等価性を自動的に判断し、等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、候補ソースコードを自動的に変換し、変換された候補ソースコードを出力する。
上記態様のうち任意の1つ以上において、プロセッサがインディシアを供給することは、候補機能を、候補ソースコード内の好ましい機能と置換して、その結果を好ましいソースコードとしてセーブすることを含む。
上記態様のうち任意の1つ以上において、プロセッサは、(a)候補機能と好ましい機能の間でいくつかの入力/出力パラメータに差異があると判断した場合、および、(b)候補機能と好ましい機能の間で少なくとも1つの入力/出力パラメータに差異があると判断した場合の少なくとも一方であって、差異が等価クラスの差異を含む場合に等価性を判断できない。
命令を自動編集するシステムであって、
機能を有し、人間に可読な第1の機械命令を備えた候補ソースコードを、データリポジトリから取り出す手段と、
人間に可読な第2の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、データリポジトリからアクセスする手段と、
候補機能と好ましい機能の間の等価性を自動的に判断する手段と、
等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアをプロセッサによって自動的に供給する手段と、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、候補ソースコードをプロセッサによって自動的に変換する手段と、
変換された候補ソースコードを出力する手段と、
を備えている。
上記態様のうち任意の1つ以上において、インディシアを供給するシステムは、変換および出力手段を含む。
候補機能を有し、人間に可読な第1の機械命令を備えた候補コードを、プロセッサによりデータリポジトリから取り出し、人間に可読な第2の機械命令を備え、認定コードとして事前に識別されている好ましい機能に、プロセッサによりデータリポジトリからアクセスし、プロセッサにより、候補機能と好ましい機能の間の等価性を自動的に判断し、等価性が判断されると、プロセッサによって、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、プロセッサによって候補コードを自動的に変換し、変換された候補コードを出力することを含む方法。
上記態様のうち任意の1つ以上において、好ましい機能は、機械コードに変換された場合に、事前に識別された最適な方式で好ましい機能を機械に実行させる命令のセットを含む。
上記態様のうち任意の1つ以上において、機械はメモリを含み、事前に識別された最適な方式は、機械コードを記憶するために必要なメモリの識別されたサイズを含む。
上記態様のうち任意の1つ以上において、好ましい機能は、簡潔なコードとして事前に識別された命令のセットを含む。
上記態様のうち任意の1つ以上において、好ましい機能は、候補機能と好ましい機能の間の等価性に関する抽象構文ツリー(AST)判断に従って選択された最も簡潔なメンバを含む。
システムであって、
データリポジトリと、
プロセッサを備え、
プロセッサは、
候補機能を有し、人間に可読な第1の機械命令を備えた候補コードを、データリポジトリから取り出し、
人間に可読な第2の機械命令を備え、認定コードとして事前に識別されている好ましい機能に、データリポジトリからアクセスし、
候補機能と好ましい機能の間の等価性を自動的に判断し、
等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、候補コードを自動的に変換し、
変換された候補コードを出力するシステム。
上記態様のうち任意の1つ以上において、プロセッサがインディシアを供給することは、候補機能を、候補コード内の好ましい機能と置換して、その結果を好ましいコードとしてセーブすることを含むシステム。
命令を自動編集するシステムであって、
機能を有し、人間に可読な第1の機械命令を備えた候補コードを、データリポジトリから取り出す手段と、
人間に可読な第2の機械命令を備えた好ましい機能にデータリポジトリからアクセスする手段を備え、人間に可読な第2の機械命令は認定コードとして事前に識別されており、さらに、
候補機能と好ましい機能の間の等価性を自動的に判断する手段と、
等価性が判断されると、候補機能と好ましい機能に関連付けられた等価のインディシアをプロセッサより自動的に供給する手段と、
インディシアが供給されると、候補機能を好ましい機能と置換することを含めて、プロセッサによって候補コードを自動的に変換する手段と、
変換された候補コードを出力する手段を含むシステム。
上記態様のうち任意の1つ以上において、さらに、候補ソースコード、非ソースコード、機械コードまたは回路実装命令のうち1つ以上が、同様なまたは異なる候補ソースコード、非ソースコード、または回路実装命令と比較されることを含む。
上記態様のうち任意の1つ以上において、さらに、いくつかのプロセッサが、候補機能にアクセスして、好ましい機能に対する機能的等価性を判断し、機能的等価性が判断された場合、候補機能および/または好ましい機能を用いて、識別し、置換し、将来置換がなされるべきであることを示唆する、またはプログラムもしくはシステム内の好ましくない機能を示唆する。システムが候補機能および/または好ましい機能を利用していることを示唆することを含む。
上記態様のうち任意の1つ以上において、さらに、インスタンスユニーク、システムユニーク、グローバリーユニーク、また一時的または無期限にユニークな要素であり得る論理方程式の要素、操作、部分または全体を現す1つ以上の記号の利用を含む。
上記態様のうち任意の1つ以上において、さらに、等価が、抽象構文構造、抽象構文ツリー(AST)、論理方程式、一次論理、二次論理等で判断されることを含む。
上記態様のうち任意の1つ以上において、さらに、好ましい機能と候補機能のうち少なくとも1つが、サブルーチン、方法、手順、述語、命令のシーケンスもしくは大規模コンピュータプログラム内のルール、またはそのルールによる単一の出力への入力に関する関係、のうち少なくとも1つを含む。
上記に加えて、本明細書で開示される実施形態により、その他の実施形態も想定される。例えば、機能は、コメント(例えば内部ドキュメンテーション)に基づく好ましい機能であってもよい。別の実施形態では、機能は好ましくは、審査されない、および/または承認されない、従って未知の機能と対照的に、審査され承認された、従って既知の機能であり得る。
上記の説明において、例証のため、方法は特定の順に説明された。別の実施形態では、方法は、説明したのとは異なる順に実行されてもよいことを理解すべきである。上記に説明した方法は、ハードウェア構成要素で実行されてもよいし、汎用または専用プロセッサ(GPUまたはCPU)、または命令でプログラムされた論理回路等の機械に方法(FPGA)を実行させるために用いられ得る、機械で実行可能な命令のシーケンスで具現化されてもよいことも理解すべきである。これらの機械で実行可能な命令は、CD−ROMまたはその他のタイプの光ディスク、フロッピーディスケット、ROM、RAM、EPROM、EEPROM、磁気または光学カード、フラッシュメモリ、または、電子的命令を記憶するのに適したその他のタイプの機械可読媒体等の1つ以上の機械可読媒体に記憶されてもよい。別法として、方法は、ハードウェアとソフトウェアの組み合わせによって実行されてもよい。
実施形態の完全な理解を提供するために、説明において特定の詳細が挙げられた。しかしながら、当業者ならば、実施形態は、これらの特定の詳細なしで実施され得ることを理解するであろう。例えば、回路は、実施形態を不要な詳細で不明瞭にしないように、ブロック図で示され得る。その他の例では、実施形態を不明瞭にすることを避けるために、よく知られた回路、工程、アルゴリズム、構造および教示は不要な詳細なしで示され得る。
さらに、実施形態は、フローチャート、流れ図、データ流れ図、構造図またはブロック図として描写されるプロセスとして説明されたことにも留意すべきである。フローチャートは、操作を逐次プロセスとして説明する場合があるが、操作の多くは並列または同時に実行され得る。加えて、操作の順は再編成されてもよい。プロセスは、その操作が完了した時に終了するが、図に含まれない付加的なステップを有し得る。プロセスは、方法、機能、手順、サブルーチン、サブプログラム等に対応し得る。プロセスが機能に対応する場合、その終了は、その機能が呼び出し機能または主機能に回帰することに対応する。
加えて、システム、方法およびプロトコルは、専用コンピュータ、プログラムされたマイクロプロセッサまたはマイクロコントローラおよび周辺集積回路(複数)、ASICまたはその他の集積回路、デジタル信号プロセッサ、離散型要素回路等のハードワイヤード電子または論理回路、PLD、PLA、FPGA、PAL、モデム、送信機/受信機等のプログラマブル論理デバイス、任意の同等の手段等のうち1つ以上を改良するために実装され得る。一般に、本明細書に例証された方法を実装することができるステートマシンを実装することが可能な任意のデバイスは、本明細書で提供される開示による種々の通信方法、プロトコルおよび技術を利用できる。
本明細書に記載されるプロセッサの例は、限定はしないが、4G LTEインテグレーションおよび64ビットコンピューティングを備えたQualcomm(登録商標)Snapdragon(登録商標)800および801、Qualcomm(登録商標)Snapdragon(登録商標)610および615、64ビットアーキテクチャを備えたApple(登録商標)A7プロセッサ、Apple(登録商標)M7モーションコプロセッサ、Samsung(登録商標)Exynos(登録商標)シリーズ、Intel(登録商標)Core(登録商標)ファミリーのプロセッサ、Intel(登録商標)Xeon(登録商標)ファミリーのプロセッサ、Intel(登録商標)Atom(登録商標) ファミリーのプロセッサ、Intel(登録商標) Itanium(登録商標)ファミリーのプロセッサ、Intel(登録商標)Core(登録商標)i5−4670Kおよびi7−4770K 22nm Haswell、Intel(登録商標)Core(登録商標)i5−3570K22nm Ivy Bridge、AMD(登録商標)FX(登録商標)ファミリーのプロセッサ、AMD(登録商標)FX−4300、FX−6300およびFX−8350 32nmVishera、AMD(登録商標) Kaveriプロセッサ、Texas Instruments(登録商標) Jacinto C6000(登録商標) オートモーティブインフォテイメントプロセッサ、Texas Instruments(登録商標) OMAP(登録商標)オートモーティブグレードモバイルプロセッサ、ARM(登録商標) Cortex(登録商標)−Mプロセッサ、ARM(登録商標) Cortex−AおよびARM926EJ−S(登録商標)プロセッサ、Broadcom(登録商標) AirForce BCM4704/BCM4703ワイヤレスネットワーキングプロセッサ、AR7100ワイヤレスネットワークプロセッシングユニット、その他の産業で同等のプロセッサのうち少なくとも1つを含んでもよく、任意の既知のまたは将来開発される基準、命令セット、ライブラリおよび/またはアーキテクチャを用いてコンピュータ機能を実行してもよい。
さらに、開示される方法は、種々のコンピュータまたはワークステーションプラットフォームで使用され得るポータブルソースコードを提供するオブジェクト指向ソフトウェア言語のオブジェクトを用いてソフトウェアで容易に実装され得る。別法として、開示されるシステムは、標準論理回路またはVLSI設計を用いたハードウェアで部分的または完全に実装され得る。実施形態によるシステムを実装するためにソフトウェアが用いられるかハードウェアが用いられるかは、システムの速度および/または効率要求、特定の機能、および利用される特定のソフトウェアまたはハードウェアシステムまたはマイクロプロセッサまたはマイクロコンピュータシステムに依存する。本明細書に例証される通信システム、方法およびプロトコルは、任意の既知の、または、適用技術の当業者により、本明細書に提示された機能の説明から、また、コンピュータおよびテレコミュニケーション技術の一般的基礎知識をもって、後事に開発されたシステムまたは構造、デバイスおよび/またはソフトウェアで容易に実装され得る。
さらに、開示された方法は、コントローラおよびメモリ、専用コンピュータ、 マイクロプロセッサ等と連携したプログラムされた汎用コンピュータの性能を改善するために記憶媒体に記憶され得るソフトウェアおよび/またはファームウェアで容易に実装され得る。これらの例では、システムおよび方法は、アプレット、JAVA(登録商標).RTM.またはCGIスクリプトとして、サーバまたはコンピュータワークステーションにあるリソースとして、専用通信システムまたはシステム構成要素に埋め込まれたルーチンとして、等の、パーソナルコンピュータに埋め込まれたプログラムとして実装され得る。システムはさらに、システムおよび/または方法を、通信送受信機のハードウェアおよびソフトウェアシステム等のハードウェアおよび/またはソフトウェアシステムに物理的に組み込むことによって実装されてもよい。
種々の実施形態がさらに、または別法として、ソフトウェアおよび/またはファームウェアで完全にまたは部分的に実装されてもよい。このソフトウェアおよび/またはファームウェアは、非一時的コンピュータ可読記憶媒体内または非一時的コンピュータ可読記憶媒体上に含まれる命令の形式をとってもよい。するとこれらの命令は、本明細書に説明された操作の実行を可能にするために1つ以上のプロセッサによって読み出されて実行され得る。命令は、限定はしないが、ソースコード、コンパイルドコード、解釈されたコード、実行コード、統計コード、動的コード等の任意の適切な形式であってよい。そのようなコンピュータ可読媒体は、限定はしないが、リードオンリーメモリー(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ等の、1つ以上のコンピュータによって可読な形式で情報を記憶するための任意の実体のある非一時的媒体を含み得る。
本明細書では、通信環境における空間的再利用のための例示的システムおよび方法を提示した。実施形態は、いくつかの実施形態に関連して説明されたが、適用技術の当業者には、多くの別例、変更例および変形例が明らかであり得る、または明らかであることは自明である。よって本開示は、本開示の趣旨と範囲内のそのような別例、変形例、等価物および変形例を全て包含することを意図している。

Claims (45)

  1. 方法であって、
    候補機能を有し人間に可読な第1の機械命令を備えた候補ソースコードを、プロセッサによりデータリポジトリから取り出し、
    人間に可読な第2の機械命令を備え、認定ソースコードとして事前に識別されている好ましい機能に、前記プロセッサによりデータリポジトリからアクセスし、
    前記プロセッサにより、前記候補機能と前記好ましい機能の間の等価性を自動的に判断し、
    等価性が判断されると、前記プロセッサによって、前記候補機能と前記好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
    前記インディシアが供給されると、前記候補機能を前記好ましい機能と置換することを含めて、前記プロセッサによって候補ソースコードを自動的に変換し、
    前記変換された前記候補ソースコードを出力する、
    ことを含む方法。
  2. 前記インディシアを供給するステップは、変換および出力ステップを含む、請求項1に記載の方法。
  3. 前記好ましい機能は、人間に可読な第2の機械命令とは関連しない人間に可読な要素を含む、請求項1に記載の方法。
  4. 前記等価性を判断するステップは、前記候補機能と前記好ましい機能の間でいくつかの入力/出力パラメータが異なると判断した場合に不良となる、請求項1に記載の方法。
  5. 前記等価性を判断するステップは、
    前記候補機能と前記好ましい機能の間で少なくとも1つの入力/出力パラメータが異なると判断し、また、
    差異が等価クラスの差異を含む場合に不良となる、
    請求項1に記載の方法。
  6. 前記候補機能の第1の機械可読変換を提供し、
    前記好ましい機能の第2の機械可読変換を提供し、
    入力の有限セットのうち1つで、前記第1の機械可読変換と前記第2の機械可読変換の両方を実行し、
    前記第1の機械可読変換と前記第2の機械可読変換の両方を実行するステップがそれぞれ、前記候補機能の第1の機械可読変換および第2の機械可読変換各々から等価値を出力したことを受けて等価性を判断する、
    請求項1に記載の方法。
  7. 等価性を判断するステップがさらに、
    候補機能の論理方程式を導出し、
    好ましい機能の論理方程式にアクセスすることを含み、
    前記候補機能の論理方程式が、前記好ましい機能の論理方程式とは異なると判断された場合に等価性が判断できない、
    請求項1に記載の方法。
  8. 前記候補機能の論理方程式が前記好ましい機能の論理方程式と等価であると判断されるかどうかの判断はさらに、
    前記候補機能の論理方程式と前記好ましい機能の論理方程式を自動定理証明器に供給し、
    等価性を示すインディシアを前記自動定理証明器から受け取る、ことを含む、
    請求項7に記載の方法。
  9. 前記好ましい機能は、機械コードに変換された場合に、事前に識別された最適な方式で前記好ましい機能を機械に実行させる命令のセットを含む、
    請求項1に記載の方法。
  10. 前記事前に識別された最適な方式は、少なくとも1つのセキュリティ目的に準拠する識別された方式を含む、請求項9に記載の方法。
  11. 前記機械はプロセッサを含み、前記事前に識別された最適な方式は、識別されたプロセッサ動作の個数を含む、請求項9に記載の方法。
  12. 前記機械はメモリを含み、前記事前に識別された最適な方式は、機械コードを記憶するために必要なメモリの識別されたサイズを含む、請求項9に記載の方法。
  13. 前記好ましい機能は、事前に簡潔なソースコードとして識別された命令のセットを含む、請求項1に記載の方法。
  14. 等価性を判断するステップがさらに、
    前記候補機能から、前記候補機能の等価クラスのセットを生成することを含み、前記等価クラスは、等価機能のセットを含み、前記セットの各要素は機能からソースへのマッピングを有する、請求項1に記載の方法。
  15. 前記好ましい機能は、前記候補機能と前記好ましい機能の間の等価性に関する抽象構文構造判断に従って選択された最も簡潔なメンバを含む、請求項1に記載の方法。
  16. 前記抽象構文構造は抽象構文ツリー(AST)を含む、請求項1に記載の方法。
  17. 前記好ましい機能と候補機能のうち一方は第1の記号で表され、
    前記プロセッサによって、前記候補機能と好ましい機能の間の等価性を自動的に判断することはさらに、前記候補機能と好ましい機能のうち他方と前記第1の記号との等価性を判断することを含む、
    請求項1に記載の方法。
  18. 前記好ましい機能と候補機能のうち他方は第2の記号で表され、
    前記プロセッサによって、前記候補機能と好ましい機能の間の等価性を自動的に判断することはさらに、前記第1の記号と前記第2の記号の間の等価性を判断することを含む、
    請求項17に記載の方法。
  19. 前記好ましい機能と前記候補機能のうち少なくとも1つが、サブルーチンを含む、請求項1に記載の方法。
  20. 前記好ましい機能と前記候補機能のうち少なくとも1つが、方法を含む、請求項1に記載の方法。
  21. 前記好ましい機能と前記候補機能のうち少なくとも1つが、手順を含む、請求項1に記載の方法。
  22. 前記好ましい機能と前記候補機能のうち少なくとも1つが、述語を含む、請求項1に記載の方法。
  23. 前記好ましい機能と前記候補機能のうち少なくとも1つが、命令のシーケンスまたは大規模コンピュータプログラム内のルールを含む、請求項1に記載の方法。
  24. 前記好ましい機能と前記候補機能のうち少なくとも1つが、前記ルールによる単一の出力への入力に関する関係を含む、請求項1に記載の方法。
  25. システムであって、
    データリポジトリと、
    プロセッサを備え、
    前記プロセッサは、
    候補機能を有し、人間に可読な第1の機械命令を備えた候補ソースコードを、データリポジトリから取り出し、
    データデポジトリから好ましい機能にアクセスし、前記好ましい機能は、人間に可読な第2の機械命令を備え、認定ソースコードとして事前に識別されており、
    前記候補機能と好ましい機能の間の等価性を自動的に判断し、
    等価性が判断されると、前記候補機能と好ましい機能に関連付けられた等価のインディシアを自動的に供給し、
    前記インディシアが供給されると、前記候補機能を前記好ましい機能と置換することを含めて、前記候補ソースコードを自動的に変換し、
    前記変換された候補ソースコードを出力する、
    システム。
  26. 前記プロセッサがインディシアを供給することは、前記候補機能を、前記候補ソースコード内の好ましい機能と置換して、その結果を好ましいソースコードとしてセーブすることを含む、請求項25に記載のシステム。
  27. 前記プロセッサは、(a)候補機能と好ましい機能の間でいくつかの入力/出力パラメータに差異があると判断した場合、および、(b)候補機能と好ましい機能の間で少なくとも1つの入力/出力パラメータに差異があると判断した場合の少なくとも一方であって、差異が等価クラスの差異を含む場合に等価性を判断できない、請求項25に記載のシステム。
  28. 前記プロセッサが前記候補機能と好ましい機能の間の等価性を判断することは、前記候補機能と好ましい機能のうち一方を表す第1の記号と、前記候補機能と好ましい機能のうち他方との間の等価性を判断することを含む、請求項25に記載のシステム。
  29. 前記プロセッサが前記候補機能と好ましい機能の間の等価性を判断することは、前記候補機能と好ましい機能のうち一方を表す第1の記号と、前記候補機能と好ましい機能のうち他方を表す第2の記号との間の等価性を判断することを含む、請求項28に記載のシステム。
  30. 前記好ましい機能と前記候補機能のうち少なくとも1つがサブルーチンを含む、請求項25に記載のシステム。
  31. 前記好ましい機能と前記候補機能のうち少なくとも1つが方法を含む、請求項25に記載のシステム。
  32. 前記好ましい機能と前記候補機能のうち少なくとも1つが手順を含む、請求項25に記載のシステム。
  33. 前記好ましい機能と前記候補機能のうち少なくとも1つが述語を含む、請求項25に記載のシステム。
  34. 前記好ましい機能と前記候補機能のうち少なくとも1つが、命令のシーケンスまたは大規模コンピュータプログラム内のルールを含む、請求項25に記載のシステム。
  35. 前記好ましい機能と前記候補機能のうち少なくとも1つが、前記ルールによる単一の出力への入力に関する関係を含む、請求項25に記載のシステム。
  36. 命令を自動編集するシステムであって、
    機能を有し、人間に可読な第1の機械命令を備えた候補ソースコードを、データリポジトリから取り出す手段と、
    データデポジトリから、人間に可読な第2の機械命令を備えた好ましい機能にアクセスする手段を備え、人間に可読な第2の機械命令は認定ソースコードとして事前に識別されており、
    さらに、候補機能と好ましい機能の間の等価性を自動的に判断する手段と、
    等価性が判断されると、前記候補機能と前記好ましい機能に関連付けられた等価のインディシアを自動的に供給する手段と、
    前記インディシアが供給されると、前記候補機能を前記好ましい機能と置換することを含めて、前記候補ソースコードをプロセッサによって自動的に変換する手段と、
    前記変換された候補ソースコードを出力する手段と、
    を備えたシステム。
  37. 前記インディシアを供給するシステムは、変換および出力手段を含む、請求項36に記載のシステム。
  38. 前記候補機能と好ましい機能の間の等価性を自動的に判断する手段はさらに、前記候補機能と好ましい機能のうちの一方と、前記候補機能と好ましい機能のうちの他方を表す前記第1の記号との間の等価性を判断する手段を含む、請求項36に記載のシステム。
  39. 前記候補機能と好ましい機能の間の等価性を自動的に判断する手段はさらに、前記候補機能と好ましい機能のうちの一方を表す第2の記号と、前記第1の記号との間の等価性を判断する手段を含む、請求項38に記載のシステム。
  40. 前記好ましい機能と前記候補機能のうち少なくとも1つがサブルーチンを含む、請求項36に記載のシステム。
  41. 前記好ましい機能と前記候補機能のうち少なくとも1つが方法を含む、請求項36に記載のシステム。
  42. 前記好ましい機能と前記候補機能のうち少なくとも1つが手順を含む、請求項36に記載のシステム。
  43. 前記好ましい機能と前記候補機能のうち少なくとも1つが述語を含む、請求項36に記載のシステム。
  44. 前記好ましい機能と前記候補機能のうち少なくとも1つが命令のシーケンスまたは大規模コンピュータプログラム内のルールを含む、請求項36に記載のシステム。
  45. 前記好ましい機能と前記候補機能のうち少なくとも1つが、前記ルールによる単一の出力への入力に関する関係を含む、請求項36に記載のシステム。
JP2017560472A 2015-02-09 2016-02-09 機械ベースの命令編集 Pending JP2018505506A (ja)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201562113627P 2015-02-09 2015-02-09
US201562113623P 2015-02-09 2015-02-09
US62/113,627 2015-02-09
US62/113,623 2015-02-09
US201662277769P 2016-01-12 2016-01-12
US62/277,769 2016-01-12
US201662280965P 2016-01-20 2016-01-20
US62/280,965 2016-01-20
PCT/US2016/017160 WO2016130551A1 (en) 2015-02-09 2016-02-09 Machine-based instruction editing

Publications (2)

Publication Number Publication Date
JP2018505506A true JP2018505506A (ja) 2018-02-22
JP2018505506A5 JP2018505506A5 (ja) 2019-02-28

Family

ID=55527624

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017560472A Pending JP2018505506A (ja) 2015-02-09 2016-02-09 機械ベースの命令編集

Country Status (6)

Country Link
US (3) US10296330B2 (ja)
EP (1) EP3238050A1 (ja)
JP (1) JP2018505506A (ja)
CA (1) CA2975305C (ja)
IL (2) IL253424B (ja)
WO (1) WO2016130551A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8694947B1 (en) 2009-12-09 2014-04-08 The Mathworks, Inc. Resource sharing workflows within executable graphical models
JP2018505506A (ja) 2015-02-09 2018-02-22 フェイズ チェンジ ソフトウェア エルエルシー 機械ベースの命令編集
US10423733B1 (en) * 2015-12-03 2019-09-24 The Mathworks, Inc. Systems and methods for sharing resources having different data types
WO2018190799A1 (en) * 2017-04-11 2018-10-18 Siemens Product Lifecycle Management Software Inc. Systems and methods to semantically compare product configuration models
US10564939B2 (en) * 2017-06-05 2020-02-18 Devfactory Fz-Llc Method and system for arbitrary-granularity execution clone detection
US10732966B2 (en) 2017-09-08 2020-08-04 Devfactory Innovations Fz-Llc Library model addition
US10114624B1 (en) * 2017-10-12 2018-10-30 Devfactory Fz-Llc Blackbox matching engine
US11157250B2 (en) 2017-12-05 2021-10-26 Phase Change Software Llc Inductive equivalence in machine-based instruction editing
DE202017007536U1 (de) 2017-12-05 2022-07-05 Phase Change Software Llc Induktive Äquivalenz bei der maschinellen Bearbeitung von Anweisungen

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1029633A (en) 1911-05-06 1912-06-18 William W Revell Vehicle-wheel.
US1045239A (en) 1911-10-02 1912-11-26 Waterloo Gasolene Engine Company Device for turning crank-pins on engine-shafts.
US3205369A (en) * 1960-05-09 1965-09-07 Honeywell Inc Electro-mechanical plugboard sequencing apparatus
US8683441B2 (en) 2006-01-11 2014-03-25 International Business Machines Corporation Software equivalence checking
US8739144B2 (en) 2008-12-17 2014-05-27 Freescale Semiconductor, Inc. Compiler optimisation like idiom recognition through pattern matching using value numbering
US8434059B2 (en) * 2009-05-01 2013-04-30 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code
US20110126179A1 (en) * 2009-11-24 2011-05-26 Thomas Hartman Method and System for Dynamic Patching Software Using Source Code
US9864583B2 (en) * 2014-11-14 2018-01-09 Cavium, Inc. Algorithm to derive logic expression to select execution blocks for programmable network devices
JP2018505506A (ja) 2015-02-09 2018-02-22 フェイズ チェンジ ソフトウェア エルエルシー 機械ベースの命令編集
WO2016130542A1 (en) 2015-02-10 2016-08-18 The Trustees Of Columbia University In The City Of New York Code relatives detection
US10048945B1 (en) * 2017-05-25 2018-08-14 Devfactory Fz-Llc Library suggestion engine
US11157250B2 (en) 2017-12-05 2021-10-26 Phase Change Software Llc Inductive equivalence in machine-based instruction editing

Also Published As

Publication number Publication date
US10296330B2 (en) 2019-05-21
CA2975305C (en) 2023-02-28
CA2975305A1 (en) 2016-08-18
US20180011706A1 (en) 2018-01-11
US20200050449A1 (en) 2020-02-13
IL284340A (en) 2021-07-29
US10452390B2 (en) 2019-10-22
IL284340B (en) 2022-01-01
US20190258480A1 (en) 2019-08-22
EP3238050A1 (en) 2017-11-01
US10877748B2 (en) 2020-12-29
IL253424A0 (en) 2017-08-31
WO2016130551A1 (en) 2016-08-18
IL253424B (en) 2021-07-29

Similar Documents

Publication Publication Date Title
US10452390B2 (en) Machine-based instruction editing
US11899818B2 (en) System and method for code-based protection of sensitive data
CN106528165B (zh) 代码生成方法及代码生成***
US11720334B2 (en) Inductive equivalence in machine-based instruction editing
CA2779087C (en) Managing record format information
US10387236B2 (en) Processing data errors for a data processing system
JP2017519300A (ja) ソフトウェアアナリティクスのためのシステム及び方法
EP3623948B1 (en) Method and system for code analysis to identify causes of code smells
US11307975B2 (en) Machine code analysis for identifying software defects
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
Stephan et al. MuMonDE: A framework for evaluating model clone detectors using model mutation analysis
CN112230963A (zh) 安全漏洞修复的方法、装置、计算机设备和存储介质
CN113672233B (zh) 一种基于Redfish的服务器带外管理方法、装置及设备
US8819645B2 (en) Application analysis device
CN115795059A (zh) 一种面向敏捷开发的威胁建模方法及***
US11144287B2 (en) Compile time validation of programming code

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190117

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190117

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191017

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191119

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20200117

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20200714