【事件の表示】
　特願２０１１−２４３５０１「ヘテロジニアス黙示的及び明示的プロセッシング要素のコンピュータ的一体化のための方法、プログラムおよびコンピュータプログラム」拒絶査定不服審判事件〔平成２４年　７月１２日出願公開、特開２０１２−１３３７５６、請求項の数（２０）〕について、次のとおり審決する。
【結　論】
　原査定を取り消す。
　本願の発明は、特許すべきものとする。
【理　由】
１　手続の経緯
　本願は、平成２３年１１月７日（パリ優先権主張２０１０年１１月１０日、米国）を出願日とする出願であって、その後の主な手続きは以下のとおりである。
審査請求（提出日）　平成２３年１１月　８日
手続補正（提出日）　平成２４年　２月１３日
拒絶理由（起案日）　平成２５年　７月　３日（同年７月９日発送）
意見書（提出日）　　平成２５年１０月　９日
手続補正（提出日）　平成２５年１０月　９日
拒絶査定（起案日）　平成２６年　２月２７日（同年３月４日発送）
審判請求（提出日）　平成２６年　６月１７日
手続補正（提出日）　平成２６年　６月１７日
前置報告（作成日）　平成２６年　８月　５日
上申書（提出日）　　平成２６年　９月　１日
拒絶理由（起案日）　平成２７年　６月２９日（同年６月３０日発送）
補正書（提出日）　　平成２７年　７月１５日
２　本願発明の認定
　本願の請求項１に係る発明（以下、「本願発明」という。）は平成２７年７月１５日付けの手続補正により補正された特許請求の範囲の請求項１に記載されたとおりの次のものと認める。
「第１プロセッサ及び第２プロセッサを含むヘテロジニアスコンピュータシステムをプログラムする方法であって、
　人間が挿入した命令が付加された第１プロセッサソースコードを生成する段階と、
　コンピュータが、一体化第１プロセッサソースコード及び一体化第２プロセッサソースコードを生成するべく、前記命令が付加された第１プロセッサソースコードを計算的に一体化する段階と
　を備え、
　前記計算的に一体化する段階において、前記コンピュータは、
　前記命令が付加された第１プロセッサソースコードを分析して、複数の一体化命令を収集し、
　前記複数の一体化命令の各々に対して特定の機能を実行すべく、変数及びコード文のセットを含む複数の命令固有コードを生成し、
　前記複数の一体化命令の各々を並べ替えて、一体化命令固有コードを生成し、
　前記命令が付加された第１プロセッサソースコードのうち一体化プロセスによって変換されないコード文を、一体化命令固有コードに結合して、ソースコードファイルを生成し、
　前記ソースコードファイルには前記一体化第１プロセッサソースコードと、前記一体化第２プロセッサソースコードとが含まれる方法。」
３　先行技術
（１）引用文献１
　原審の拒絶査定の理由である前記平成２５年７月３日付けの拒絶理由に引用され、本願の優先日前に既に頒布または電気通信回線を通して公衆に利用可能となった文献である特表２００５−５３４１１４号公報（以下、「引用文献１」という。）には、関連図面とともに、以下の技術的事項が記載されている。（当審注；下線は参考のために当審で付与したものである。）
Ａ　「【００２４】
  第２のステップにおいて、複数の抽象構文木１０１は第１および第２の組に分割される。第１の抽象構文木の組は汎用プロセッサによって実現され、第２の抽象構文木の組はコプロセッサによって実現されるべきである。コプロセッサによって実現されるべき抽象構文木は第２の抽象構文木の組へ移すために選択される。選択された抽象構文木は、関数ｆ、ｇおよびｈを含むソースコード断片内の特定の関数または特定のステートメントに対応する。特定の抽象構文木を複数の抽象構文木１０１から第２の抽象構文木の組へ移すプロセスはアウトライン化と呼ばれる。別の関数によって呼び出されるステートメント及び関数のいずれかに対応した抽象構文木をアウトライン化するとき、その抽象構文木は移されたステートメント及び関数のいずれかを呼び出す関数に対応した第１の組内の新しい抽象構文木によって置換される。移されたステートメントまたは関数が変数を有する場合に、これらの変数は移されたステートメントまたは関数に引数として渡される。
【００２５】
  図１を参照すると、ソースコード断片内の関数ｈに対応し、ノードＦＤ３およびそのブランチを含む抽象構文木は、第２の抽象構文木の組へ移すため選択される。さらに、ソースコード断片内の関数ｇのステートメントｓ４に対応し、リーフｓ４だけを含む抽象構文木は、第２の抽象構文木の組へ移すため選択される。ステートメントｓ４は、ソースコード断片に表されていない変数ｙを使用する。抽象構文木のアウトライン化と置換によって、複数の抽象構文木１０１は第１の抽象構文木の組２０１と第２の抽象構文木の組２０３に分割される。
【００２６】
  図２を参照すると、複数の抽象構文木１０１の分割後に得られた抽象構文木の第１の組２０１および第２の組２０３が表される。複数の抽象構文木１０１の抽象構文木ｓ４のアウトライン化は、ノードＦＤ７およびそのブランチを含む抽象構文木に対応した関数を第２の抽象構文木の組２０３に作成することにより実現される。複数の抽象構文木１０１の抽象構文木ｓ４のアウトライン化の後に続いて、抽象構文木ｓ４は、第２の抽象構文木の組２０３内の抽象構文木ＦＤ７として存在する関数ｋへの関数呼び出しによって置換される。変数ｙは第２の抽象構文木の組２０３に作成された新しい関数ｋへ引数として渡される。第１の抽象構文木の組２０１は、ソースコード断片内の関数ｆに対応し、ノードＦＤ４およびそのブランチを具備した抽象構文木を含む。第１の組はノードＦＤ５を具備した抽象構文木をさらに含み、ノードＦＤ５のブランチのうちの一つに抽象構文木ｋがある。第２の抽象構文木の組２０３は、ソースコード断片内の関数ｈに対応し、ノードＦＤ６およびそのブランチを具備した抽象構文木を含む。第２の組は、ソースコード断片内の関数ｇのステートメントｓ４に対応し、ノードＦＤ７およびそのブランチを具備した抽象構文木をさらに含む。
【００２７】
  
第２の抽象構文木の組２０３に移されるべき抽象構文木は、ソースコード断片内の対応した関数またはステートメントを手動でマーキングすることにより選択可能である。ユーザはコプロセッサへ移されるべき機能を選択しなければならない。この情報はソースコード断片を複数の抽象構文木へ変換するときに複数の抽象構文木に付加され、この情報は続いて分割のため使用される。
【００２８】
  一部の実施形態では、仕様は３組以上の抽象構文木に、たとえば、３組の抽象構文木に分割される。第１の組は汎用プロセッサによって実現され、第２の組および第３の組はそれぞれ第１のコプロセッサおよび第２のコプロセッサによって実現される。本実施形態の効果は、それぞれが仕様の特定の部分を実行するために専用の多数のコプロセッサを定義できることである。」
【００２９】
  さらに別の実施形態において、仕様は少なくとも２組の抽象構文木の組に分割される。少なくとも２組のうちのそれぞれの組はコプロセッサによって実現される。その結果として、アプリケーションを効率的に実行するコプロセッサの組が定義できる。
【００３０】
  有利な一実施形態において、
第１の抽象構文木の組２０１はソースコード言語の第１の部分仕様に変換され、第２の抽象構文木の組２０３はソースコード言語の第２の仕様に変換される。
Ｂ　「【００３４】
  
図３を参照すると、ターゲットシステムを生成する協調設計方法が概略的に表されている。ターゲットシステムは、汎用プロセッサとコプロセッサを含む。
ソースコード言語Ｃによる仕様３０１は、汎用プロセッサによって実現されるべきＣ言語による第１の部分仕様３０９と、コプロセッサによって実現されるべきＣ言語による第２の部分仕様３１１と、に分割される。
【００３５】
  次のステップでは、ユーザは、第１の部分仕様３０９および第２の部分仕様３１１にそれぞれマニュアル変更３０５および３０７を加える。たとえば、必要に応じて、機能が第１の部分仕様から第２の部分仕様へ移される。これらの仕様が原ソースコードであるため、ユーザによるあらゆるマニュアル変更は著しく容易になる。
【００３６】
  次のステップ３１３において、
Ｃ言語による第１の部分仕様３０９は、汎用プロセッサのための特定のコンパイラを使用して実行可能マシンコード３１５に変換される。
第２の部分仕様３１１は特定の設計ツールおよび／またはコンパイラを使用してコプロセッサの仕様３１９に変換される。
（２）引用文献２
　原審の拒絶査定の理由である前記平成２５年７月３日付けの拒絶理由に引用され、本願の優先日前に既に頒布または電気通信回線を通して公衆に利用可能となった文献である特開２０００−２８４９４５号公報（以下、「引用文献２」という。）には、関連図面とともに、以下の技術的事項が記載されている。（当審注；下線は参考のために当審で付与したものである。）
Ｃ　「【００２２】
【発明の実施の形態】以下、本発明の実施の形態を、実施例に基づいて説明する。
図１は、本発明の第１の実施例によるデジタル機器２５のブロック図を示す。この構造においては、ＣＰＵ２６、共有メモリ２７、プログラミング可能なハードウェアとしてＦＰＧＡ２８が、同一のバス２９の上で接続されている。ＣＰＵ２６が使用するソフトウェア・コード２３と、プログラミング可能なハードウェア（ＦＰＧＡ）２８が使用するハードウェア（ＦＰＧＡ）コード２４が、複合コード２２として、１つの共有メモリ２７の中に保存されている（インストールされている）。
４　引用発明の認定
ア　前記Ｂの「図３を参照すると、ターゲットシステムを生成する協調設計方法が概略的に表されている。ターゲットシステムは、汎用プロセッサとコプロセッサを含む。（中略）ソースコード言語Ｃによる仕様３０１は、汎用プロセッサによって実現されるべきＣ言語による第１の部分仕様３０９と、コプロセッサによって実現されるべきＣ言語による第２の部分仕様３１１と、に分割される。（中略）Ｃ言語による第１の部分仕様３０９は、汎用プロセッサのための特定のコンパイラを使用して実行可能マシンコード３１５に変換される」との記載から、引用文献１には「汎用プロセッサとコプロセッサとを含むターゲットシステムを生成する方法であり、ソースコード言語による部分仕様からコンパイルする方法」が記載されているといえる。
イ　前記Ａの「第２の抽象構文木の組２０３に移されるべき抽象構文木は、ソースコード断片内の対応した関数またはステートメントを手動でマーキングすることにより選択可能である。ユーザはコプロセッサへ移されるべき機能を選択しなければならない。この情報はソースコード断片を複数の抽象構文木へ変換するときに複数の抽象構文木に付加され、この情報は続いて分割のため使用される。」との記載から、引用文献１には「ユーザがコプロセスに移す機能を選択した情報を抽象構文木に付加」することが記載されているといえる。
ウ　前記Ａの「第１の抽象構文木の組２０１はソースコード言語の第１の部分仕様に変換され、第２の抽象構文木の組２０３はソースコード言語の第２の仕様に変換される。」との記載から、引用文献１には「第１の抽象構文木からソースコード言語の第１の部分仕様に変換」することが記載されているといえる。
エ　前記Ａの「第１の抽象構文木の組２０１はソースコード言語の第１の部分仕様に変換され、第２の抽象構文木の組２０３はソースコード言語の第２の仕様に変換される。」との記載、前記Ｂの「Ｃ言語による第１の部分仕様３０９は、汎用プロセッサのための特定のコンパイラを使用して実行可能マシンコード３１５に変換される。（中略）第２の部分仕様３１１は特定の設計ツールおよび／またはコンパイラを使用してコプロセッサの仕様３１９に変換される。」との記載から、引用文献１には、「第１の抽象構文木はソースコード言語の第１の部分仕様に変換され、汎用プロセッサのための実行可能マシンコードにコンパイラにより変換し、第２の抽象構文木はソースコード言語の第２の部分仕様に変換され、コプロセッサの仕様にコンパイラにより変換」することが記載されているといえる。
オ　前記ア乃至エに記述したことから、引用文献１には次の発明（以下、「引用発明」という。）が記載されていると認められる。
「汎用プロセッサとコプロセッサとを含むターゲットシステムを生成するソースコード言語による部分仕様からコンパイルする方法であって、
ユーザがコプロセスに移す機能を選択した情報を抽象構文木に付加し、第１の抽象構文木からソースコード言語の第１の部分仕様に変換し、
第１の抽象構文木はソースコード言語の第１の部分仕様に変換され、汎用プロセッサのための実行可能マシンコードにコンパイラにより変換し、
第２の抽象構文木はソースコード言語の第２の部分仕様に変換され、コプロセッサの仕様にコンパイラにより変換する段階が含まれる方法。」
５　対比
（ア）引用発明の「汎用プロセッサとコプロセッサを含むターゲットシステム」は本願発明の「第１プロセッサ及び第２プロセッサを含むヘテロジニアスコンピュータシステム」に対応するので、引用発明における「汎用プロセッサとコプロセッサとを含むターゲットシステムを生成するソースコード言語による部分仕様からコンパイルする方法」は、本願発明における「第１プロセッサ及び第２プロセッサを含むヘテロジニアスコンピュータシステムをプログラムする方法」に相当する。
（イ）引用発明の「ユーザがコプロセスに移す機能を選択した情報を抽象構文木に付加し、第１の抽象構文木からソースコード言語の第１の部分仕様に変換」することは、本願発明における「人間が挿入した命令が付加された第１プロセッサコードを生成」することに相当する。
（ウ）引用発明の「コンパイラにより変換」することは、本願発明の「計算的に一体化」することとは「計算的に変換」するという上位概念で共通しているといえるので、引用発明における「第１の抽象構文木はソースコード言語の第１の部分仕様に変換され、汎用プロセッサのための実行可能マシンコードにコンパイラにより変換し、第２の抽象構文木はソースコード言語の第２の部分仕様に変換され、コプロセッサの仕様にコンパイラにより変換する段階」と本願発明における「コンピュータが、一体化第１プロセッサソースコード及び一体化第２プロセッサソースコードを生成すべく、命令が付加された第１プロセッサコードを計算的に一体化する段階」とは、後記する点で相違するものの、「コンピュータが、一体化第１プロセッサソースコード及び一体化第２プロセッサソースコードを生成すべく、命令が付加された第１プロセッサコードを計算的に変換する段階」という点で一致している。
＜一致点＞
「第１プロセッサ及び第２プロセッサを含むヘテロジニアスコンピュータシステムをプログラムする方法であって、
　人間が挿入した命令が付加された第１プロセッサソースコードを生成する段階と、
　コンピュータが、一体化第１プロセッサソースコード及び一体化第２プロセッサソースコードを生成すべく、命令が付加された第１プロセッサコードを計算的に変換する段階とが含まれる方法。」
＜相違点１＞
　本願発明では「命令が付加された第１プロセッサソースコードを計算的に一体化」しているのに対して、引用発明はその点に特定していない点。
＜相違点２＞
　本願発明では「計算的に一体化する段階において、前記コンピュータは、　前記命令が付加された第１プロセッサソースコードを分析して、複数の一体化命令を収集し、前記複数の一体化命令の各々に対して特定の機能を実行すべく、変数及びコード文のセットを含む複数の命令固有コードを生成し、前記複数の一体化命令の各々を並べ替えて、一体化命令固有コードを生成し、前記命令が付加された第１プロセッサソースコードのうち一体化プロセスによって変換されないコード文を、一体化命令固有コードに結合して、ソースコードファイルを生成」しているの対して、引用発明はその点に特定していない点。
＜相違点３＞
　本願発明では「前記ソースコードファイルには前記一体化第１プロセッサソースコードと、前記一体化第２プロセッサソースコードとが含まれる」としているのに対して、引用発明ではその点に特定していない点。
６　当審の判断
（１）相違点１及び３について
　前記Ｃからすると引用文献２には「ＣＰＵが使用するソフトウェア・コードとＦＰＧＡが使用するハードウェア・コードとを融合して一体化した複合コードとして生成し、複合コードを共有メモリの中に保存する」旨の技術思想が記載されているところ、引用発明において「一体化第１プロセスソースコード及び一体化第２プロセスソースコードとを計算的に変換する」ことを「計算的に一体化」として実行することは、当業者が容易になし得ることである。
（２）相違点２について
　「計算的に一体化する段階」において、「命令が付加された第１プロセッサソースコードを分析」し、「複数の一体化命令を収集」し、「複数の一体化命令の各々に対して特定の機能を実行すべく、変数及びコード文のセットを含む複数の命令固有コードを生成」し、「複数の一体化命令の各々を並べ替えて、一体化命令固有コードを生成」し、「命令が付加された第１プロセッサソースコードのうち一体化プロセスによって変換されないコード文を、一体化命令固有コードに結合して、ソースコードファイルを生成」することは、引用発明及び引用文献２には記載も示唆もされておらず、当該技術分野において容易に想到し得ることとはいえない。
　したがって、本願発明は、引用発明に基づいて、当業者が容易に発明することができたといえない。
　また、本願の請求項８、１０、１２に係る発明と引用発明とは、本願発明と同じ相違点で相違しており、請求項２乃至７に係る発明は請求項１の従属項であり、請求項９に係る発明は請求項８の従属項であり、請求項１１に係る発明は請求項１０の従属項であり、請求項１３乃至２０に係る発明は請求項１２の従属項である。
（３）小括
　以上のとおり、本願の請求項１−２０に係る発明は、原査定の拒絶理由を検討してもその理由によって、拒絶するべきものとすることができない。
７　当審拒絶理由について
（１）当審拒絶理由の概要
　当審は平成２７年６月２９日付け拒絶理由により次の事項を指摘した。
（１−１）理由Ａ
　この出願は、下記の点で特許法第１７条の２第３項の規定を満たしていないので特許を受けることができない。 
『 １．請求項１について 
 　請求項１には「前記一体化第１プロセッサソースコード及び前記一体化第２プロセッサソースコードは、前記第１プロセッサ及び前記第２プロセッサに同様な結果を達成させるコードを含む」と記載されているが、外国語書面の翻訳文に記載した事項の範囲内においてされたものでない。 
 （中略） 
  ２．請求項８、１０、１２について 
 　当該請求項には「同様の結果を達成させるコードを含む」と記載されているが、外国語書面の翻訳文に記載した事項の範囲内においてされたものでない。 』
  
（１−２）理由Ｂ
　この出願は、下記の点で特許法第２９条第１項柱書の要件を満たしていないので、特許を受けることができない。 
 『１．請求項１について 
 　請求項１の「人間が命令を付加する段階」は、プログラマである人間がソースコードを編集するプログラミング行為を含むと解される。そのような編集を行う「段階」とは、コンピュータが能動的に実行する情報処理ではなく、人間がコンピュータを道具として操作できる作業の一工程を意味することになり、当該段階はそれ自体が人間の行為そのものを直接的に意味しており、それは人間の精神活動に基づいて行われることであるから、そのような段階を含む「方法」は、全体としてプログラミングのための人間の作業手順それ自体を対象としていると理解されうるものであり、自然法則を利用したものではない。 
  ２．請求項８について 
 当該請求項の「人間が、黙示的プロセッサソースコードに命令を付加する段階」は、自然法則を利用したものではない。』 
（２）当審の判断
（２−１）理由Ａ
　平成２７年７月１５日付け手続補正によって、請求項１の「前記一体化第１プロセッサソースコード及び前記一体化第２プロセッサソースコードは、前記第１プロセッサ及び前記第２プロセッサに同様な結果を達成させるコードを含む」という外国語書面の翻訳文に記載した事項の範囲内においてされたものでないと指摘した発明特定事項が削除された。このため、特許法第１７条の２第３項の要件を満たすことになった。また、請求項８、１０、１２について同様の補正がなされた。これにより、当審拒絶理由Ａは解消した。
（２−２）理由Ｂ
　平成２７年７月１５日付け手続補正によって、請求項１の「命令が付加された第１プロセッサソースコードを生成するべく、前記第１プロセッサソースコードに、人間が命令を付加する段階」を「人間が挿入した命令が付加された第１プロセッサソースコードを生成する段階」に補正された。この補正により「人間が命令を付加する段階」という発明特定事項が削除されたため、特許法第２９条第１項柱書の要件を満たすことになった。また、請求項８についても同様の補正がなされた。これにより、当審拒絶理由Ｂは解消した。
８　むすび
　以上のとおり、原査定の理由によって、本願を拒絶することができない。　また、他に本願を拒絶する理由を発見しない。
　よって、結論のとおり審決する