計算可能性理論において、停止問題とは、任意のコンピュータ プログラムと入力が与えられたときに、そのプログラムが最終的に実行を終えて停止するか、永遠に実行し続けるかを判定する決定問題である。 [ 1 ] [ 2 ] [ 3 ]アラン チューリングは1937 年に、停止問題は決定不能であることを証明した。つまり、考えられるすべてのプログラムと入力の組み合わせに対して問題を正しく解決できる一般的なアルゴリズムは存在しないということである。 [ 4 ]この問題は、一部の関数は数学的に定義可能だが計算可能ではないことを示しているため、計算可能性の議論でよく取り上げられる。
問題の正式な記述の重要な部分は、通常はチューリングマシンを用いたコンピュータとプログラムの数学的定義である。証明では、プログラムが停止するかどうかを判定する可能性のある任意のプログラムfに対して、 fが誤った判定を下す「病的な」プログラムgが存在することを示す。具体的には、 gは、何らかの入力とともに呼び出されたときに、自身のソースと入力をfに渡し、 fがgに対して予測する動作とは正反対の動作をするプログラムである。gに対するfの動作は決定不能性を示しており、これは、あらゆる場合において停止問題を解決できるプログラムfは存在しないことを意味する。
停止問題とは、固定されたチューリング完全計算モデルにおけるコンピュータプログラムの特性に関する決定問題である。この計算モデルには、チューリング等価なプログラミング言語で記述されたすべてのプログラムが含まれる。プログラムと入力が与えられたとき、そのプログラムが特定の入力で実行されたときに最終的に停止するかどうかが問題となる。この抽象的な枠組みでは、プログラムの実行に必要なメモリや時間に制限はない。プログラムは停止するまでに任意の長さで実行され、任意の量の記憶容量を消費する可能性がある。
例えば、擬似コードでは、プログラムは
while (true) continue決して止まることなく、無限ループで永遠に続く。対照的に、
印刷後すぐに停止します。
このような単純なケースは判断しやすいが、より複雑なプログラムはそうではない。チューリングは、任意のプログラムと入力に対して、その入力でプログラムを実行したときにプログラムが停止するかどうかを常に正しく判定できるアルゴリズムは存在しないことを証明した。チューリングの証明の本質は、そのようなアルゴリズムは矛盾する出力を生成する可能性があり、したがって正しくないということである。
無限ループの中には非常に便利なものもあります。例えば、イベントループは通常、無限ループとしてコーディングされます。[ 5 ]しかし、ほとんどのサブルーチンは終了するように設計されています。[ 6 ]
ハードリアルタイムコンピューティングでは、サブルーチンは終了するだけでなく、指定された期限前に終了する必要があります。[ 7 ]これらの要件を満たすために、プログラマは最小電力のルールを適用し、完全なチューリング完全ではないものの、結果として得られるサブルーチンが指定された期限前に終了することを容易に証明できる制限付きスタイルを使用します。これには、MISRA C、SPARK、Rocqなどの言語が含まれます。
停止問題では、すべてのプログラムと入力に対して機能する判定手順が必要です。しかし、特定のプログラムと入力に対しては、答えは単に「停止する」か「停止しない」のどちらかです。常に「停止する」と答える単純な判定手順と、常に「停止しない」と答える単純な判定手順の2つを考えてみましょう。いずれの場合も、これらのアルゴリズムのうちどちらか一方が正しく答えますが、どちらのアルゴリズムも停止問題を解決しません。
インタプリタは、与えられたソースコードに関わらず、プログラムの実行をシミュレートするプログラムです。このようなプログラムは、プログラムを一定回数実行することで、プログラムが停止することを証明できます。しかし、入力プログラムが停止しない場合、インタプリタも停止しないため、このアプローチでは、前述の停止問題を解決することはできません。つまり、停止しないプログラムに対して「停止しない」という問いに適切に答えることも、プログラムが最終的に停止するか、あるいは永久に実行され続けるかを判断することもできません。
停止問題は、線形限定オートマトン(LBA)または有限メモリを持つ決定性マシンに対して決定可能です。このようなマシンは有限個の可能な構成を持つため、その上で実行される決定性プログラムは最終的に停止するか、以前の構成を繰り返す必要があります。[ 8 ]
有限状態機械は、完全に放置しておくと、最終的には完全に周期的な繰り返しパターンに陥る。この繰り返しパターンの持続時間は、機械の内部状態の数を超えることはできない。
しかし、ミンスキーは次のように指摘している。[ 9 ]
...関係する規模を考えると、状態図の単なる有限性に基づく定理や議論は、あまり意味を持たないのではないかと疑うべきである。
例えば、100万個の2状態コンポーネントを持つコンピュータには、少なくとも21,000,000個の可能な状態があります。[ 9 ]
これは1の後に約30万個のゼロが続く数字です...たとえそのような機械が宇宙線の周波数で動作したとしても、銀河進化の何億年もの歳月は、そのようなサイクルを旅する時間に比べれば何でもないでしょう。
非決定性有限メモリマシンにおいては、各決定後の状態を列挙することで、マシンが非決定性決定の可能なシーケンスのいずれにおいても停止しないか、一部において停止するか、あるいはすべてにおいて停止するかを判定することも可能です。
1936年4月、アロンゾ・チャーチはラムダ計算におけるある問題の決定不能性の証明を発表した。チューリングの証明はその後、1937年1月に発表された。それ以来、1950年代に登場した停止問題をはじめ、他にも多くの決定不能な問題が報告されている。
多くの論文や教科書は、停止問題の不確定性の定義と証明をチューリングの1936年の論文に帰している。しかし、これは正しくない。[ 23 ] [ 27 ]チューリングは、1936年の論文を含め、彼の発表した著作のいずれにも「停止」や「停止」という用語を使用していない。[ 28 ] 1936年から1958年までの学術文献を調べたところ、「停止問題」という用語を使用した最初の出版物はロジャース(1957)であることがわかった。しかし、ロジャースはデイビス(1958)の草稿を入手できたと述べており、[ 23 ]マーティン・デイビスは序文で「専門家はトピックの構成と扱いに何らかの目新しさを見出すかもしれない」と述べているため、[ 29 ]この用語はデイビスに帰属するはずである。[ 23 ] [ 27 ]デイビスは手紙の中で、1952年から停止問題について言及してきたと述べている。[ 26 ]デイビスの著書での使用例は以下のとおりである。[ 30 ]
"[...] 我々は、チューリングマシン Z が与えられた初期状態に置かれた場合に、最終的に停止するかどうかを判定したい。この問題を Z の停止問題と呼ぶ。[...]
定理2.2再帰的に解けない停止問題を持つチューリングマシンが存在する。
関連する問題として、単純なチューリングマシン Z の記号 S i "に関する印刷問題があります。
デイビスの定式化の先駆けとなりうるのは、クリーネの1952年の声明で、表現が異なるだけである。[ 23 ] [ 24 ]
特定の状況から起動された機械が最終的に停止するかどうかを判定するアルゴリズムは存在しない。
停止問題は、デイビスの印刷問題(「チューリングマシンは、与えられた状態から始めて、与えられた記号を印刷するか?」)とチューリングの 1936 年の論文で検討された印刷問題(「チューリングマシンは、空白のテープから始めて、与えられた記号を印刷するか?」)の両方とチューリング等価である。しかし、チューリング等価性はかなり緩く、2 つの問題が同じであることを意味するものではない。印刷するが停止しないマシンと、停止するが印刷しないマシンが存在する。印刷問題と停止問題は異なる問題を扱っており、重要な概念的および技術的な違いを示している。したがって、デイビスが次のように言ったのは単に謙遜していただけである。[ 23 ]
また、これらの問題の本質的な解決不可能性を最初に明らかにしたのはチューリングであったことも付け加えておくべきだろう。
理論計算機科学において、決定問題とは、数学的対象に関するイエス・ノーの質問として表現できるあらゆる問題を指す。形式的には、停止問題は決定問題である。
意思決定問題の従来の表現は、問題となっている特性を持つオブジェクトの集合である。停止集合
これは停止問題を表す。
この集合は再帰的に列挙可能であり、これは、この集合に含まれるすべてのペア ( i , x ) を列挙する計算可能な関数が存在することを意味します。ただし、この集合の補集合は再帰的に列挙可能ではありません。[ 31 ]
決定問題は、常に正しい答えで停止するアルゴリズムが存在する場合に決定可能であり、そのようなアルゴリズムが存在しない場合は決定不能であると言われます。チューリングは、オリジナルの証明において、チューリングマシンを導入することでアルゴリズムの概念を形式化しました。しかし、この結果はチューリングマシンに特有のものではなく、マルコフアルゴリズム、ラムダ計算、ポストシステム、レジスタマシン、タグシステムなど、チューリングマシンと同等の計算能力を持つ他のあらゆる計算モデルにも同様に適用されます。
重要なのは、形式化によって、アルゴリズムが操作可能なデータ型へのアルゴリズムの直接的なマッピングが可能になることです。例えば、形式化によってアルゴリズムが文字列に対する関数を定義できる場合(チューリングマシンなど)、これらのアルゴリズムを文字列にマッピングする必要があります。また、形式化によってアルゴリズムが自然数に対する関数を定義できる場合(計算可能な関数など)、アルゴリズムを自然数にマッピングする必要があります。文字列へのマッピングは通常最も簡単ですが、n文字のアルファベット上の文字列は、 n進数体系の数値として解釈することで数値にマッピングすることもできます。
決定不能な問題は数多く存在する。停止問題のチューリング次数に等しいチューリング次数を持つ集合はすべて、そのような定式化である。停止問題の他に、そのような集合の例としては以下のようなものがある。
クリストファー・ストラッチーは、停止問題が解けないことを背理法で証明した。 [ 32 ] [ 33 ]証明は次のように進む。サブルーチンf が(入力なしで実行されたときに)停止する場合は true を返し、そうでない場合は false を返す、全計算可能な関数halts(f)が存在すると仮定する。ここで、次のサブルーチンを考える。
def g () -> None : if halts ( g ): loop_forever ()halts(g)は、haltsが全計算関数であると想定されていたため、必ずtrueまたはfalseを返します。halts ( g)がtrueを返すと、gはloop_foreverを呼び出し、決して停止しないため、矛盾が生じます。halts (g)がfalseを返すと、gはloop_foreverを呼び出さないため停止します。これもまた矛盾です。全体として、gはhaltsがgに期待する動作とは正反対の動作をするため、halts(g)はgが停止するかどうかと矛盾しない真偽値を返すことができません。したがって、 haltsが全計算関数であるという当初の想定は誤りであるに違いありません。
上記の概念は証明の一般的な方法を示していますが、計算可能な関数halts はサブルーチンを直接引数として受け取るのではなく、プログラムのソースコードを受け取ります。さらに、gの定義は自己参照的です。厳密な証明ではこれらの問題に対処します。全体的な目標は、任意のプログラムi が任意の入力xに対して停止するかどうかを決定する完全な計算可能な関数が存在しないことを示すことです。つまり、次の関数h (「halts」用) は計算可能ではありません。[ 34 ]
ここでプログラム i は、固定されたチューリング完全な計算モデルのすべてのプログラムを列挙したリストにおけるi番目のプログラムを指します。
計算可能な関数fの可能な値を2 次元配列に配置した図。オレンジ色のセルは対角線です。f ( i , i ) と g ( i ) の値は下部に表示されています。Uは、特定の入力値に対して関数gが定義されていないことを示します。
証明は、2 つの引数を持つ全計算可能関数が要求される関数hにはなり得ないことを直接的に証明することによって進められる。概念の概略と同様に、任意の全計算可能二項関数fが与えられた場合、次の部分関数gも何らかのプログラムeによって計算可能である。
gが計算可能であることの検証は、以下の構成要素(またはそれらに相当するもの)に基づいています。
eの以下の擬似コードは、 gを計算する簡単な方法を示しています。
手順e ( i ) : f ( i , i ) == 0の場合、0を返す。それ以外の場合は、無限ループする。gは部分的に計算可能であるため、計算モデルがチューリング完全であるという仮定により、gを計算するプログラムeが存在するはずです。このプログラムは、停止関数hが定義されているすべてのプログラムのうちの 1 つです。証明の次のステップでは、h ( e , e ) がf ( e , e )と同じ値にならないことを示します。
gの定義から、以下の2つのケースのうち、いずれか1つが必ず成り立つことがわかる。
いずれの場合も、f はhと同じ関数にはなり得ません。fは2 つの引数を持つ任意の全計算可能関数であったため、そのような関数はすべてhと異なる必要があります。
この証明はカントールの対角線論法に類似しています。上の表に示すように、各自然数に対応する 1 列と 1 行を持つ 2 次元配列を視覚化できます。f ( i , j )の値は、列i、行jに配置されます。fは全計算可能関数であると仮定されているため、配列の任意の要素はfを使用して計算できます。関数gの構成は、この配列の主対角線を使用して視覚化できます。配列の位置 ( i , i ) に 0 がある場合、g ( i ) は 0 です。そうでない場合、g ( i ) は未定義です。矛盾は、配列の列eがg自体に対応するという事実から生じます。ここで、f が停止関数hであったと仮定します。g ( e )が定義されている場合(この場合はg ( e )=0)、プログラムeは入力eで停止するため、f ( e,e )=1となります。しかし、g ( e )=0となるのはf ( e,e )=0の場合のみであり、 f ( e,e )=1と矛盾します。同様に、 g ( e )が定義されていない場合、プログラムeは入力eで停止しないため、f ( e,e )=0となり、gの構成の下ではg ( e )=0となります。これはg ( e )が定義されていないという仮定と矛盾します。どちらの場合も矛盾が生じます。したがって、任意の計算可能な関数fは停止関数hにはなり得ません。
問題を証明する典型的な方法決定不能であるということは、停止問題を以下のように縮小することである。例えば、自然数に関するある命題が真か偽かを判定する一般的なアルゴリズムは存在しません。その理由は、ある入力に対して特定のプログラムが停止するという命題は、自然数に関する同等の命題に変換できるからです。もしアルゴリズムが自然数に関するあらゆる命題の真偽値を求めることができれば、この命題の真偽値も求めることができます。しかし、それでは元のプログラムが停止するかどうかが決定されてしまいます。
ライスの定理は、停止問題が解決不可能であるという定理を一般化したものです。この定理は、任意の非自明な性質について、入力プログラムによって実装された部分関数がその性質を持つかどうかを、すべてのプログラムに対して判定する一般的な決定手順は存在しないと述べています。(部分関数とは、必ずしも結果を生成するとは限らない関数であり、結果を生成するか停止に失敗するかのいずれかであるプログラムをモデル化するために使用されます。)たとえば、「入力0に対して停止する」という性質は決定不可能です。ここで「非自明」とは、その性質を満たす部分関数の集合が、空集合でもすべての部分関数の集合でもないことを意味します。たとえば、「入力0に対して停止するか停止に失敗する」は、すべての部分関数に対して明らかに真であるため、自明な性質であり、「真」と報告するだけのアルゴリズムで判定できます。また、この定理は、プログラムによって実装された部分関数の性質にのみ適用され、プログラム自体の性質には適用されません。例えば、「100ステップ以内に入力0で停止する」という条件は、プログラムによって実装される部分関数の特性ではなく、部分関数を実装するプログラムの特性であり、十分に決定可能です。
グレゴリー・チャイティンは、記号Ωで表される停止確率を定義しました。これは、非公式には、ランダムに生成されたプログラムが停止する確率を表す実数の一種です。これらの数値は、停止問題と同じチューリング次数を持ちます。これは、定義はできるものの、完全に計算することができない、通常の超越数です。つまり、 Ωの桁を生成するアルゴリズムは存在しないことを証明できますが、単純なケースでは最初の数桁を計算することができます。
停止問題に対する否定的な答えは、チューリングマシンでは解決できない問題が存在することを示しているため、チャーチ=チューリングのテーゼは、有効な方法を実装するあらゆる機械で達成できることを制限します。しかし、人間の想像力で考えられるすべての機械がチャーチ=チューリングのテーゼの対象となるわけではありません(例えば、オラクルマシン)。チューリングマシンによるシミュレーションを長期的に回避する実際の決定論的な物理プロセスが存在するかどうか、特に、そのような仮説的なプロセスが、チューリングマシンの停止問題を解決できる計算機(ハイパーコンピュータ)の形で有効に活用できるかどうかは未解決の問題です。また、そのような未知の物理プロセスが人間の脳の働きに関わっているかどうか、そして人間が停止問題を解決できるかどうかも未解決の問題です。 [ 35 ]
チューリングの証明は、アルゴリズムが停止するかどうかを判定する機械的で一般的な方法(つまり、チューリングマシンや、それと同等の計算モデルにおけるプログラム)は存在しないことを示している。しかし、停止問題の個々の事例には明確な答えがあり、それは実際に計算可能かどうかは別問題である。特定のアルゴリズムと入力が与えられれば、停止するかしないかを示すことができる場合が多く、実際、コンピュータ科学者は正当性証明の一部としてまさにそれを行っている。証明を構築するために自動的に使用できるヒューリスティックがいくつかあり、それらは典型的なプログラムに対してしばしば成功する。この研究分野は、自動停止解析として知られている。
停止問題ヒューリスティックの理論的性能、特に再帰アルゴリズムによって正しく分類できる特定のサイズのプログラムの割合については、いくつかの結果が確立されている。これらの結果は、割合が計算不可能であり、「サイズ」を決定するために使用されるプログラムエンコーディングの選択に大きく依存するため、正確な数値を与えるものではない。たとえば、状態数によってプログラムを分類し、プログラムがテープの左端を超えた場合に(停止せずに)エラーとなる特定の「チューリング半無限テープ」計算モデルを使用することを考える。プログラムについて状態の数によって均等に選択される。しかし、この結果は、これらの決定可能なプログラムは単にテープから外れたものにすぎず、ヒューリスティックは単にエラーによる停止がないと予測することであるため、ある意味で「自明」である。したがって、一見無関係な詳細、すなわちエラーのあるプログラムの扱いが、プログラムの割合を決定する決定的な要因となる可能性がある。[ 36 ]
これらの問題を回避するために、プログラムの「サイズ」に関するいくつかの制限された概念が開発されてきた。密なゲーデル番号付けは、各計算可能な関数が 1 から n までのインデックスの各シーケンスで正の分数で出現するようにプログラムに番号を割り当てる。つまり、ゲーデル化 φ は、すべての に対して が成り立つ場合に限り密である。存在するそのため例えば、インデックスを割り当てる番号付け非自明なプログラムおよび他のすべてのインデックスに対して、エラー状態は密ではありませんが、構文的に正しいBrainfuckプログラムの密なゲーデル番号付けが存在します。[ 37 ]密なゲーデル番号付けは、他の任意のゲーデル番号付けに対して、最適であると言われます。1対1の全再帰関数が存在するそして一定のすべての、そしてこの条件により、すべてのプログラムのインデックスが他のどのゲーデル番号付けにおけるインデックスよりも大幅に大きくならないことが保証されます。最適なゲーデル番号付けは、ユニバーサルチューリングマシンの入力に番号を付けることによって構築されます。[ 38 ]サイズの3つ目の概念は、バイナリ文字列上で動作するユニバーサルマシンを使用し、入力プログラムを記述するために必要な文字列の長さを測定します。ユニバーサルマシンUは、他のすべてのマシンVに対して、以下の条件を満たす全計算可能関数hが存在するマシンです。最適マシンとは、コルモゴロフ複雑性不変性限界を達成するユニバーサルマシンである。すなわち、任意のマシンVに対して、あるcが存在し、すべての出力xに対して、長さnのVプログラムが出力xである場合、最大で長さ n のUプログラムが存在する。xを出力します。[ 39 ]
我々は部分計算可能な関数(アルゴリズム)を考察する.各分数を考慮するサイズメトリックのすべてのプログラムにおけるエラーの最大各プログラムを数えるそのために終了に失敗し、「わからない」という回答を生成するか、間違った回答を生成する、つまり停止して出力DOES_NOT_HALT、または停止せず、出力HALTS。密なゲーデル化と最適マシンについては、その動作は次のように記述できます。[ 37 ] [ 39 ]
これらの境界の複雑な性質は、振動的な挙動によるものです。まれに発生する新しい種類のプログラムが任意に大きな「ブロック」で出現し、繰り返しの割合が絶えず増加している。新しい種類のブロックを完全に含めると、エラー率は少なくともしかし、ブロック間では、正しく分類された繰り返しの割合は任意に高くなる可能性があります。特に、最初の N 個の入力を単純に記憶し、それらの同等物を認識する「集計」ヒューリスティックを使用すると、任意に低いエラー率を無限に達成できます。[ 37 ]
ゲーデルの不完全性定理によって提起される概念は、停止問題によって提起される概念と非常によく似ており、証明もかなり似ています。実際、第一不完全性定理の弱い形式は、停止問題の決定不能性から容易に導かれる帰結です。この弱い形式は、完全かつ健全な自然数の有効な公理化は不可能であると主張する点で、不完全性定理の標準的な記述とは異なります。「健全」の部分が弱化の理由です。つまり、問題となっている公理系は、自然数に関する真の命題のみを証明する必要があるということです。健全性は一貫性を意味するため、この弱い形式は強い形式の系と見なすことができます。ゲーデルの第一不完全性定理の標準的な記述は、命題の真偽値には全く関心がなく、数学的証明によってそれを見つけることが可能かどうかという問題のみに関心があることに注意することが重要です。
定理の弱い形式は、停止問題の決定不能性から次のように証明できます。[ 40 ]自然数に関するすべての真の1階論理ステートメントの健全(したがって一貫性のある)かつ完全な有効な公理化があると仮定します。すると、これらのステートメントをすべて列挙するアルゴリズムを構築できます。これは、自然数nが与えられたときに、自然数に関する真の1階論理ステートメントを計算するアルゴリズムN ( n ) が存在し、すべての真のステートメントに対して、 N ( n ) がそのステートメントを生成するようなnが少なくとも 1 つ存在することを意味します。ここで、表現aを持つアルゴリズムが入力iで停止するかどうかを決定したいとします。このステートメントは、 H ( a , i )のような1階論理ステートメントで表現できることがわかっています。公理化が完全であることから、 N ( n ) = H ( a , i )となるnが存在するか、 N ( n ′ ) = ¬H ( a , i )となるn ′が存在するかのいずれかであることがわかります。したがって、H ( a , i )またはその否定が見つかるまですべてのnについて反復すると、必ず停止し、さらに、その結果得られる答えは(健全性により)真となります。これは、停止問題を判定するアルゴリズムが得られることを意味します。このようなアルゴリズムは存在しないことがわかっているので、自然数に関するすべての真の一階述語論理の命題について、健全かつ完全な有効な公理化が存在するという仮定は偽でなければなりません。
停止問題の多くの変種は、計算可能性の教科書に見られる。[ 41 ]通常、これらの問題はRE完全であり、複雑性の集合を記述する。算術階層では、標準停止問題と同じです。したがって、変種は決定不能であり、標準停止問題は各変種に帰着し、その逆もまた同様です。ただし、一部の変種は解決不能度が高く、標準停止問題に帰着できません。次の 2 つの例はよく知られています。
普遍停止問題(再帰理論では全体性とも呼ばれる)は、与えられたコンピュータプログラムがすべての入力に対して停止するかどうかを判定する問題である(全体性という名前は、計算された関数が全体であるかどうかという同等の質問に由来する)。この問題は、停止問題と同様に決定不能であるだけでなく、非常に決定不能である。算術階層の観点から言えば、-完了。[ 42 ]
これは特に、停止問題に対するオラクルを用いても決定できないことを意味する。
入力によっては停止問題に正しい答えを返すプログラムが多数存在するが、他の入力では答えを全く返さないものもある。しかし、「プログラムpが与えられたとき、それは部分停止ソルバーであるか」(ここで説明した意味で)という問題は、停止問題と少なくとも同程度に難しい。これを確認するには、PHSR(「部分停止ソルバー認識器」)というアルゴリズムが存在すると仮定する。すると、次のように停止問題を解決するために使用できる。入力プログラムx がyで停止するかどうかをテストするには、入力 ( x , y )でtrueを報告し、他のすべての入力で発散するプログラムpを構築する。次に、PHSR を使用してp をテストする。
上記の議論は停止問題をPHS認識に還元したものであり、同様に、すべての入力で停止するなどのより困難な問題も還元できるため、PHS認識は決定不能であるだけでなく、算術階層の上位に位置することを示唆している。具体的には-完了。
損失のあるチューリングマシンとは、テープの一部が非決定的に消失する可能性があるチューリングマシンのことである。損失のあるチューリングマシンでは停止問題は決定可能であるが、非原始的な再帰性を持つ。[ 43 ]
停止問題に関するオラクルを備えた機械は、特定のチューリングマシンが特定の入力に対して停止するかどうかを判定できるが、一般に、自分と同等の機械が停止するかどうかを判定することはできない。
... プログラムが特定のループで停止した場合、... 何が問題なのかを突き止めます。
したがって、ハードリアルタイムシステムでは、常に同じ時間で実行されるサブルーチン、または明確に識別可能な最悪ケースを持つサブルーチンを作成することが重要です。