【事件の表示】
　平成１０年特許願第３５６６６２号「仮想空間システム上におけるスレッド機能のプロセスマッピング方法」拒絶査定不服審判事件〔平成１２年　６月３０日出願公開、特開２０００−１８１７２７〕について、次のとおり審決する。
【結　論】
　本件審判の請求は、成り立たない。
【理　由】
１．手続の経緯・本願発明
　本願は、平成１０年１２月１５日の出願であって、その請求項１に係る発明（以下、「本願発明」という。）は、特許請求の範囲の請求項１に記載された事項により特定される次のとおりのものと認める。
　
　「スレッド機能が実装されていないオペレーションシステムにおいて、
　各プロセスからアクセス可能である共有空間と、プロセス毎にアクセス可能な複数のプロセス個別空間とから構成される仮想空間システム上で、
　プロセスの初期値有りデータ、初期値なしデータ及びスタックを前記共有空間に配置し、
　前記共有空間に、アプリケーション内のスレッドとして割り当てられたプロセスを管理するスレッド管理テーブルを作成し、
　スレッドが起動される毎にスレッドの識別子を前記スレッド管理テーブルに記憶させ、スレッドが消滅する時に前記スレッド管理テーブルから前記識別子を削除し、
　アプリケーションの消滅時に、アプリケーション内の在中スレッドに割り当てられたプロセスを前記スレッド管理テーブルから参照し、システムコールによるプロセス間通信によりアプリケーション内の全スレッドの強制終了を行うことで、
　オペレーションシステムの実行単位であるプロセスにスレッドをマッピングすることを特徴とする仮想空間システム上におけるスレッド機能のプロセスマッピング方法。」
　
２．当審における拒絶理由の概要
　一方、当審において平成１７年５月１７日付けで通知した拒絶の理由の概要は、本願は、明細書及び図面の記載に不備があるから、特許法第３６条第４項並びに第６項第１号及び第２号に規定する要件を満たしておらず、拒絶すべきものである、というものであり、具体的には、以下のとおりである。
　
「　　　　　　　　　　　　　　理　由
　
　本件出願は、明細書及び図面の記載が下記の点で不備のため、特許法第３６条第４項並びに第６項第１号及び第２号に規定する要件を満たしていない。
　　　　　　　　　　　　　　　　記
　
（１）請求項１には、「スレッド機能が実装されていないオペレーションシステムにおいて、…プロセスマッピング方法」と記載されていることから、本願請求項１−３の発明に係る方法は、スレッド機能が実装されていないオペレーションシステム上で行われるものである。ここで、「スレッド機能」とは、どのような機能であるのか具体的に特定していないが、発明の詳細な説明の記載、図面、及び技術常識からして、スレッドの起動、スレッドの消滅、スレッド間通信、メモリに対するアクセス制御など、プログラム中のスレッドに関する記述を解釈し、実行するための機能であると認められる。
　ここで、明細書の段落【００１９】に記載の「インタプリタ時にスレッド２０−１による記述が存在すると、新たなプロセス実行単位（プロセス）５０−１を作成する。それ以降はプロセス１（５０−１）がＪａｖａアプリケーションを読み込み、インタプリタ、実行を行う。」及び図２からすると、「プロセス」は、「オペレーションシステム」上に存在し、かつ、「スレッド機能」を有しているから、当該「オペレーションシステム」も実質的に「スレッド機能」を有していることになるので、請求項１の上記記載「スレッド機構が実装されていないオペレーションシステムにおいて」という前提と矛盾している。
　同様に、請求項１に記載された「オペレーションシステムの実行単位であるプロセス」からして、請求項１−３に係る発明においても、「プロセス」は、「オペレーションシステム」の一部であり、かつ、請求項１に記載された「スレッドとして割り当てられたプロセス」からして、「プロセス」は「スレッド機能」を有しているから、実質的には「オペレーションシステム」も「スレッド機能」を有していると解釈することが合理的であるので、請求項１に記載の「スレッド機能が実装されていないオペレーションシステムにおいて」という前提部分と矛盾している。
（２）請求項１には、「アプリケーション内のスレッドとして割り当てられたプロセス」としか記載がなく、「プロセス」の機能をどのように用いて、「スレッド機能」を実現しているのか不明である。
　発明の詳細な説明及び図面においても、「スレッド機能」を「プロセス」によりどのように実現するのかについて技術的な裏付けがなされていない。例えば、スレッドに特有の制御命令を、従前のプロセス管理に係るＡＰＩにどのようにマッピング（対応付け）するのかについては、周知技術をもってしても自明とはいえない。
…（中略）…
（４）請求項１−３に係る発明において、「アプリケーション」と「プロセス」の定義及び差異が不明である。
　明細書の段落【００１４】の記載「アプリケーション（プロセス）」は、「アプリケーション」と「プロセス」とを同一視していると考えられるが、図２においては、両者を区別して記載しており、一貫していない。さらに、段落【００２２】の記載「同一プロセス（Ｊａｖａアプリケーションにおけるプロセス）内スレッドの管理を行うために…」からすると、「スレッド」は、同一の「プロセス」内にあることを前提としているが、請求項１及び図２において、「スレッド」は直接「アプリケーション」の中に存在するように記載されており、両者は一貫していない。
（５）請求項１−３に係る各処理の主体つまり実現手段が不明である。例えば、請求項１の記載においては、共有空間の配置、スレッド管理テーブルの作成及び管理、スレッドの起動及び消滅の検知、アプリケーションの消滅の検知、システムコール、並びに、プロセス間通信を、何がどのように実行又は制御しているのか不明である。
　よって、請求項１−３に係る発明は、ａ）　人間がオペレーションシステムを手動で操作する方法、ｂ）　オペレーションシステム上におけるプロセス等のソフトウェアによる抽象的なプログラミングモデル、又は、ｃ）　コンピュータがハードウェア資源を具体的に用いて自動的にスレッドを実行する方法、のいずれであるのか不明である。（なお、ａ）又はｂ）を含むことが明確になれば、特許法第２９条第１項柱書違反になることに留意されたい。）
　発明の詳細な説明及び図面においても、「仮想空間システム」という抽象的な空間における、「アプリケーション」、「スレッド」、「プロセス」といった抽象概念による処理内容に終始し、コンピュータ上でどのように実装しているのかについては十分かつ明確に記載していない。（６）請求項１−３に係る発明において、「スレッド管理テーブル」の構成が不明確である。例えば、請求項１において、「プロセスを管理するスレッド管理テーブル」と記載されているが、実際に「スレッド管理テーブル」に記憶されているのは、「スレッドの識別子」のみであるから、どのようにして「プロセスを管理する」のか不明である。　発明の詳細な説明及び図面においても、「スレッド管理テーブル」の構成について十分かつ明確に記載していない。
…（中略）…
（８）請求項１−３の末尾は、「プロセスにスレッドをマッピングすることを特徴とする…プロセスマッピング方法」であるが、請求項１には、「アプリケーション内のスレッドとして割り当てられたプロセス」と記載されているように、既に、「プロセス」が「スレッドとして割り当てられた」状態であることを前提としており、前記末尾に係る「プロセス」に「スレッド」を「マッピング」する具体的な処理については不明である。　よって、請求項１−３に係る発明を「プロセスマッピング方法」として明確に把握することができない。
…（中略）…
（１５）段落【００１９】の記載において、「新たなスレッド２０−２による記述」の存在を検出するのは、「Ｊａｖａ仮想マシン」であるのか、現にＪａｖａアプリケーションを実行しているプロセス１であるのか不明である。つまり、Ｊａｖａアプリケーションの読み込み、インタプリタ及び実行の機能は、「Ｊａｖａ仮想マシン」と各プロセスの両者が有しているが、この両者をどのように使い分けているのか不明である。」
　
３．当審の判断
　以下、上記拒絶理由で指摘した各項目が解消したか否かについて検討する。なお、上記拒絶理由に対し、請求人は、平成１７年７月２５日付けで手続補正をしているが、当該手続補正は、請求項２及び３の誤記を訂正するものであり、本願発明（請求項１）、発明の詳細な説明及び図面を補正するものではない。
　よって、上記拒絶理由が解消したか否かの検討は、前記手続補正と同時に提出された意見書における請求人の主張を元に行うこととする。
　
（１）理由（１）について、
　請求人は、平成１７年７月２５日付けの意見書（以下、単に「意見書」という。）の中で、以下のように述べている。
「まず、（１）に関してですが、請求項１に記載されている「スレッド機能」とは、審判官殿が御認定された「スレッドの起動、スレッドの消滅、スレッド間通信、メモリに対するアクセス制御など、プログラム中のスレッドに関する記述を解釈し、実行するための機能」であります。」
　
　この主張によると、請求項１の記載「スレッド機能が実装されていないオペレーションシステム」は、「オペレーションシステム」が、プログラム中のスレッドに関する記述を解釈し、実行するための機能を有していない、と解釈できる。
　しかしながら、明細書の段落【００１８】及び【００１９】並びに図２の記載から明らかなように、発明の詳細な説明の記載では、スレッドの起動、スレッドの消滅、スレッド間通信、メモリに対するアクセス制御など、スレッドに関する記述はＪａｖａアプリケーションに存在し、当該記述をＪａｖａ仮想マシン（プロセス０）又はプロセス（５０−１、５０−２）が読み取り解釈して実行しているから、オペレーションシステムに実装されたプロセスにより、「スレッド機能」を実現している。
　なお、請求人は、
「一方、明細書の段落［００１９］に記載の「スレッド２０−１」および図２に記載の「スレッド１，スレッド２」は、上記の「スレッド機能」とは異なるものです。具体的には、Ｊａｖａプログラムの一種であるＪａｖａアプリケーション内に記載されている単なるＪａｖａ言語の処理記述としてのスレッド自体を示しています。
　すなわち、図２の記載において、「オペレーションシステム」上に存在しているのは「Ｊａｖａ仮想マシン（プロセス０）」「プロセス１」「プロセス２」までであり、Ｊａｖａアプリケーション内の「スレッド１」「スレッド２」は「オペレーションシステム」上に存在している実行単位とは言えません。」
とも主張しているが、この主張は、オペレーションシステム上に存在している実行単位がスレッドではなくプロセスであることを説明しているにすぎず、当該プロセスが、「スレッド機能」を有していないことを裏付けるものではない。請求人の主張及び発明の詳細な説明の記載によれば、本願は、「スレッドの機能」をオペレーションシステム上のプロセスにマッピングして処理するものであるから、当該オペーションシステムは本質的には「スレッド機能」を実装したものである。
　したがって、本願発明の「スレッド機能が実装されていないオペレーションシステム」は、発明の詳細な説明に記載したものではなく、かつ、当該「オペレーションシステム」の技術的な範囲も不明確といわざるを得ない。
　
（２）理由（２）について、
　請求人は、理由（２）乃至（４）について、以下のように主張している。
「次に、（２）〜（４）に関してですが、「プロセス」としては、図２のＪａｖａ仮想マシン（プロセス０）が動作している状態で「Ｊａｖａアプリケーション内のスレッドに割り当てられた（マッピングされた）プロセス」に限定しており、それが本願発明の前提となっています。これは、図２において、マッピングを示す点線の矢印が「スレッド１からプロセス１」および「スレッド２からプロセス２」のみに限定して（１対１に対応させて）表示されていることからも明らかであり、段落［００１９］にも記載されています。
　従って、「プロセス」の内容は明らかであり、（２）〜（４）の不明点も解消されていると確信致します。」
　
　しかしながら、この主張は、スレッドとプロセスが１対１に対応していることを説明しているにとどまり、スレッドに関する個々の制御命令を、スレッド機能を有しない従前のシステム上のプロセス制御命令にどのようにマッピングしているのかについて具体的な裏付けをなすものではない。
　本願は、スレッド機能を従前のプロセスにマッピングすることを課題解決手段の一つとしており、かつ、本願の出願時において、スレッド機能を従前のプロセスにマッピングできることが技術常識といえないにもかかわらず、その具体的な態様は、発明の詳細な説明及び図面には記載がなく、かつ、意見書においても、請求人は何らの釈明もしていない。
　よって、この点において、本願発明並びに発明の詳細な説明及び図面の記載は依然として不明確である。
　
（３）理由（４）について、
　理由（４）で指摘した「アプリケーション」と「プロセス」の関係の不明点について、上記「（２）理由（２）について」で引用した意見書から明らかなように、請求人は、何ら具体的な釈明をしていない。
　よって、この点において、本願発明並びに発明の詳細な説明及び図面の記載は依然として不明確である。
　
（４）理由（５）について、
　請求人は、意見書において、以下のように主張している。
「次に、（５）に関してですが、「請求項１−３に係る各処理の主体（実現手段）」は、段落［００１８］〜［００１９］および図２の記載から明らかなように「Ｊａｖａ仮想マシン」です。」
　
　この主張は、発明の詳細な説明の記載にのみ基づいたものであり、請求項１の記載に基づいたものではない。つまり、請求項１の記載においては、依然として各処理の主体が特定されておらず、かつ、その記載から自明ともいえない。
　よって、この点において、本願発明は依然として不明確である。
　
（５）理由（６）について、
　請求人は、意見書において、以下のように主張している。
「次に、（６）に関してですが、「スレッド管理テーブル」の構成は段落［００２２］記載の動作説明より明らかなように、Ｊａｖａアプリケーションにおいて起動され実行されるスレッドを識別するための識別子が並んで設定されている構成となっています。そして、上記（２）〜（４）の項目で説明したように、スレッドとプロセスは１対１にマッピングされているので、「スレッドの識別子」のみにより「プロセスを管理する」ことが可能となります。」
　
　この主張によると、「スレッド管理テーブル」には、スレッドを識別する識別子が並んで設定されたものであり、かつ、スレッドとプロセスは１対１にマッピングされていることを前提としている。しかしながら、本願発明、並びに、発明の詳細な説明及び図面の記載においても、スレッドとプロセスの対応付けをどの手段でどのように行っているのか不明であり、かつ、その対応付けは、「スレッド管理テーブル」のみでは実現不可能であることは技術的に見て明らかである。
　よって、「スレッド管理テーブル」により、どのように「プロセスを管理する」のかについて、本願発明並びに発明の詳細な説明及び図面の記載は依然として不明確である。
　
（６）理由（８）について、
　請求人は、意見書において、以下のように主張している。
「次に、（８）に関してですが、請求項１−３の末尾に記載された「プロセスにスレッドをマッピングすることを特徴とする…プロセスマッピング方法」および、請求項１に記載された「アプリケーション内のスレッドとして割り当てられたプロセス」における「スレッド」とは、Ｊａｖａアプリケーション内のスレッドのことであり、図２の「スレッド１」「スレッド２」に相当します。
　従って、上記（２）〜（４）の項目で説明したように、前記末尾に係る「プロセス」に「スレッド」を「マッピング」する具体的な処理について、明確であると確信致します。」
　
　この主張は、請求項１に記載した「スレッド」と、発明の詳細な説明及び図面の記載との対応を説明しているにとどまり、「プロセス」に「スレッド」を「マッピング」する処理をどのように実現しているのかについて何ら釈明するものではない。
　よって、この点において、本願発明並びに発明の詳細な説明及び図面の記載は依然として不明確である。
　
（７）理由（１５）について、
　請求人は、以下のように主張している。
「最後に、（１５）に関してですが、「新たなスレッド２０−２による記述」の存在を検出するのは、上記（５）の項目で説明したように「Ｊａｖａ仮想マシン」です。そして、ＪａｖａアプリケーションのスレッドをマッピングするためにＪａｖａ仮想マシンによって割り当てられたプロセスが、プロセス１となります。ここで、プロセス１は、スレッド管理テーブルに対する動作は行わず、インタプリタ処理のみを行います。
　従って、段落［００１９]の記載は明確であると確信致します。」
　
　この主張によると、「新たなスレッド２０−２による記述」の存在を検出するのは、「Ｊａｖａ仮想マシン」となるが、一方、段落【００１９】には、「それ以降はプロセス２（５０−２）がｊａｖａアプリケーションを読み込み、インタプリタ、実行を行う。」とも記載されているから、「Ｊａｖａアプリケーション」の読み込み及びインタプリタは、「Ｊａｖａ仮想マシン」と、生成された「プロセス」の両者が同時並行的に行うこととなる。つまり、生成された「プロセス」は、読み込み及びインタプリタを行う際に、当然、「新たなスレッドによる記述」を読み込む場合も想定されるが、そのような場合において、「Ｊａｖａ仮想マシン」が、生成された「プロセス」が読み込んだ「新たなスレッドによる記述」の存在をどのように検出するのか不明である。つまり、一つの「Ｊａｖａアプリケーション」に対し、その読み込みとインタプリタの処理を、「Ｊａｖａ仮想マシン」と生成された「プロセス」とがどのように分担または協働して行うのか具体的に想定することができない。
　よって、この点について、発明の詳細な説明及び図面の記載は依然として不明確である。
　
４．むすび
　したがって、本願は、依然として明細書及び図面の記載に不備があるので、特許法第３６条第４項及び第６項第２号の規定により拒絶すべきものである。
　よって、結論のとおり審決する。