ローカルでテスト可能なコードは、文字列の小さなビット数 (多くの場合は一定) を調べることで、文字列がそのコード内の単語であるかどうかを判断できるエラー訂正コードの一種です。状況によっては、データ全体をデコードしなくてもデータが破損しているかどうかを知ることができれば、適切な対応を取ることができます。たとえば、通信では、受信側が破損したコードに遭遇した場合、データの再送信を要求できるため、そのデータの精度を高めることができます。同様に、データ ストレージでは、これらのコードにより、破損したデータを回復して適切に書き直すことができます。
対照的に、ローカルにデコード可能なコードは、コードワードの少数のビットを使用して、元の情報を確率的に復元します。エラーの割合によって、デコーダが元のビットを正しく復元する可能性が決まりますが、すべてのローカルにデコード可能なコードがローカルにテスト可能であるわけではありません。[1]
明らかに、有効なコードワードはコードワードとして受け入れられるべきですが、コードワードではない文字列は 1 ビットだけずれている可能性があり、その場合は多くの (定数以上) プローブが必要になります。これを考慮して、文字列が少なくとも設定されたビット数ずれている場合にのみ、テストの失敗が定義されます。これは、冗長性を追加することで、コードのワードが入力文字列よりも長くなければならないことを意味します。
意味
2つの文字列間の距離を測定するには、ハミング距離が使用されます。
文字列とコードの距離は次のように計算されます。
相対距離はビット数の割合として計算されます
入力にランダムアクセスし、最大で非適応的なクエリを実行し、次の条件を満たすチューリングマシンMが存在する場合、コードは-local- testableと呼ばれます。 [2]
- 任意のおよびに対して、。言い換えれば、M は C の任意のコードワードへのアクセスを受け入れます。
- となる場合、 M は少なくとも半分の時間、C から遠い文字列を拒否する必要があります。
また、コードのレートは、メッセージの長さとコードワードの長さの比率です。
制限
線形サイズの局所的にテスト可能なコードが存在するかどうかは未解決の問題であるが、「ほぼ線形」であると考えられる構造がいくつかある: [3]
- 多項式は任意に線形に近い。任意のに対して。
- 形式の関数。ここで は0 に向かう関数です。これにより、k が増加するにつれて n は線形に近づきます。例:
- 一部の人にとって
- のために
これらは両方とも、クエリの複雑さが一定で、任意のに対して のようなバイナリアルファベットであっても達成されています。次のほぼ線形の目標は、多重対数係数まで線形です。この制約を満たす線形テスト可能なコードをまだ誰も思いついていません。[3]
2021年11月に2つのプレプリントで、定数レート、定数距離、定数局所性を持つ局所的にテスト可能なコードである「-LTC」の最初の多項式時間構築が報告されました[4 ] [ 5] [6 ] [7]。
確率的に検証可能な証明との関連
ローカルにテスト可能なコードは、確率的にチェック可能な証明(PCP)と多くの共通点があります。これは、その構成の類似性から明らかです。どちらも、大きな文字列へのランダムな非適応クエリが与えられ、受け入れる場合は確率 1 で受け入れる必要があり、そうでない場合は半分以上の確率で受け入れる必要があります。主な違いは、PCP は が存在する場合に受け入れることに関心があるということです。一方、ローカルにテスト可能なコードは、がコードの一部である場合に受け入れます。PCP 証明がローカルにテスト可能なコードをエンコードすると想定すると、多くの問題が発生する可能性があります。たとえば、PCP 定義では無効な証明については何も述べられておらず、無効な入力についてのみ述べられています。
この違いにもかかわらず、ローカルテスト可能なコードとPCPは十分に類似しているため、証明者は一方を構築する過程で他方を構築することがよくあります。[8]
例
アダマールコード
最も有名な誤り訂正符号の 1 つであるアダマール符号は、局所的にテスト可能な符号です。符号語 x は、線形関数(mod 2) としてアダマール符号にエンコードされます。これには、この関数の結果をすべての可能な y に対してリストアップする必要があり、入力よりも指数的に多くのビットが必要になります。文字列 w がアダマール符号の符号語であるかどうかをテストするには、エンコードされた関数が線形かどうかをテストするだけです。これは、x と y が一様ランダムベクトルであるかどうかを確認するだけです (ここで、 はビット単位の XORを表します) 。
任意の有効なエンコード に対して、この式が真であることは簡単にわかります。これは線形関数の定義だからです。しかし、やや難しいのは、C から遠い文字列が に関してその誤差の上限を持つことを示すことです。1 つの上限は、3 つのプローブのうち 1 つが誤った結果を出す確率を近似するという直接的なアプローチによって見つかります。 A、B、C を、、が誤っているイベントとします。E を、これらのうち 1 つが発生するイベントとします。これは次のようになります。
これは では機能しますが、その直後には になります。さらに作業を進めると、誤差が で制限されることがわかります。
任意の に対して、偽陽性の確率は一定であるため、確率を1/2未満にするには、単純に一定回数チェックすればよい。[3]
ロングコード
ロングコードは、非常に大きな爆発を伴う別のコードですが、ローカルでテスト可能です。入力が与えられると(これは ビットで表すことに注意)、入力の ビットを返す関数 がすべての可能なビット入力で評価され、コードワードはこれらの連結(長さ)になります。これをエラーありでローカルにテストする方法は、一様ランダム入力を選び、各ビットを反転する小さな可能性 で を設定することです。 の場合、関数をコードワードとして受け入れます。 がコードワードの場合、 が変更されない限り、これは の確率で受け入れられます。これは、コードワードが常に受け入れられるという要件に違反しますが、いくつかのニーズには十分かもしれません。[9]
その他のローカルにテスト可能なコードには、リード・ミュラー コード(デコード アルゴリズムについてはローカルにデコード可能なコードを参照)、リード・ソロモン コード、ショート コードなどがあります。
参照
参考文献
- ^ Kaufman, Tali ; Viderman, Michael. 「ローカルでテスト可能なコードとローカルでデコード可能なコード」。
- ^ Ben-Sasson, Eli; Sudan, Madhu. 「堅牢なローカルテスト可能なコードとコードの積」(PDF)。
- ^ abc Goldreich, Oded (2005). 「短い局所的にテスト可能なコードと証明(調査)」. CiteSeerX 10.1.1.110.2530 .
- ^ Panteleev, Pavel; Kalachev, Gleb (2021-11-05). 「漸近的に良好な量子および局所的にテスト可能な古典 LDPC コード」. arXiv : 2111.03654 [cs.IT].
- ^ Dinur, Irit ; Evra, Shai ; Livne, Ron ; Lubotzky, Alexander ; Mozes, Shahar (2021-11-08). 「一定の速度、距離、局所性を持つ局所的にテスト可能なコード」. arXiv : 2111.04808 [cs.IT].
- ^ Rorvig, Mordechai (2021-11-24). 「研究者がランダム性を克服して理想的なコードを作成」. Quanta Magazine . 2021-11-24閲覧。
- ^ Rorvig, Mordechai (2022-01-06). 「量子ビットはビットと同じくらい安全であると研究者が示す」Quanta Magazine . 2022-02-02閲覧。
- ^ Cheraghchi, Mahdi. 「ローカルでテスト可能なコード」。
- ^ Kol, Gillat; Raz, Ran. 「一意のテストによる局所的にテスト可能なコードの境界」(PDF)。
外部リンク
- 「ブレークスルー — 一定の速度、距離、局所性を備えたローカルでテスト可能なコード | Simons Institute for the Theory of Computing」. simons.berkeley.edu . 2021年10月6日。
