مقدمة في علوم الحاسوب النظرية › نمذجة الاحتساب العشوائي 22 / 26 السابق التالي

نمذجة الحساب الاحتمالي { #chapmodelrand }

نمذجة الحساب الاحتمالي

  • تعريفٌ رسميٌّ لزمنٍ متعدّد الحدود احتماليّ (probabilistic polynomial time): الصنف BPP\mathbf{BPP}. \
  • برهانُ أنّ كلَّ دالةٍ في BPP\mathbf{BPP} يمكن حسابُها ببرامجِ/دوائرَ NAND-CIRC ذاتِ حجم poly(n)poly(n). \
  • العلاقاتُ بين BPP\mathbf{BPP} وNP\mathbf{NP}. \
  • المولِّداتُ شبه العشوائية (pseudorandom generators)

"أيُّ شخصٍ يفكّر في طرقٍ حسابيةٍ لإنتاج الأرقام العشوائية، هو بالطبع في حالةِ خطيئة." جون فون نيومان، 1951.

حتى الآن وصفنا الخوارزميات العشوائية بأسلوبٍ غير رسميّ، بافتراض أنّ عمليةً مثل «اختيار سلسلة x∈{0,1}nx\in \{0,1\}^n» يمكن إنجازُها بكفاءة. لكنّنا أهملنا معالجة سؤالين:

  1. كيف نحصل فعلًا وبكفاءة على السلاسل العشوائية في العالم الفيزيائي؟

  2. ما هو النموذجُ الرياضيُّ للحسابات العشوائية، وهل هو أقوى من الحساب الحتميّ؟

السؤالُ الأول ذو أهميةٍ عمليةٍ ونظريةٍ معًا، لكنّنا سنكتفي الآن بالقول إنّ هناك مصادرَ فيزيائيةَ متنوّعةً لبيانات «عشوائية» أو «غير قابلةٍ للتنبّؤ». حركةُ فأرة المستخدم وأنماطُ كتابته، وكماليّةُ (latency) القرص الصلب (غير ذي الحالة الصلبة) والشبكة، والضجيجُ الحراري، والانحلالُ الإشعاعي، قد جُميعًا استُعملت مصادرَ للعشوائية (انظر المناقشة في ملاحظاتٌ مرجعية). مثلًا، تأتي كثيرٌ من رقاقات Intel مدمجًا فيها مولِّدُ أرقامٍ عشوائية. بل ويمكن حتى بناءُ آلاتٍ ميكانيكيةٍ لقذف العملات (انظر الشكل التوضيحي).

/images/introtcs/lec_17_model_rand-1.webp

في هذا الفصل نركّز على السؤال الثاني، أي: نمذجةُ الحساب الاحتماليّ رسميًّا ودراسةُ قوّته. وسنبيّن أنّ:

  1. يمكننا تعريفُ الصنف BPP\mathbf{BPP} الذي يضمّ كلَّ الدوالّ البوليانية (Boolean) التي يمكن حسابُها في زمنٍ متعدّد الحدود بخوارزميةٍ عشوائية. والأهمّ من ذلك أنّ BPP\mathbf{BPP} لا يزال إلى حدٍّ بعيد صنفَ حسابٍ في الحالة الأسوأ: فالاحتمالُ لا يُؤخذ إلّا على اختيار عملات الخوارزمية العشوائية، لا على اختيار المدخل.

  2. يمكننا تكبيرَ احتمال نجاح الخوارزميات العشوائية، وبذلك يصبح تعريفُ الصنف BPP\mathbf{BPP} مكافئًا سواء أطلبنا نجاحًا بنسبة 2/32/3 أم 0.510.51 أم نجاحًا بنسبة 1−2−n1-2^{-n}.

  3. ولو أنّ الكثير ممّا لا نعرفه عن الصنف BPP\mathbf{BPP}، كما الحالُ مع P\mathbf{P} وNP\mathbf{NP}، يمكننا إثباتُ بعض العلاقات بين BPP\mathbf{BPP} وبقية أصناف التعقيد التي رأيناها من قبل. وسنبيّن على وجه التحديد أنّ P⊆BPP⊆EXP\mathbf{P} \subseteq \mathbf{BPP} \subseteq \mathbf{EXP} وأنّ BPP⊆P/poly\mathbf{BPP} \subseteq \mathbf{P_{/poly}}.

  4. ولو كانت العلاقةُ بين BPP\mathbf{BPP} وNP\mathbf{NP} غيرَ معروفة، يمكننا أن نبيّن أنّه إذا كان P=NP\mathbf{P}=\mathbf{NP} فإنّ BPP=P\mathbf{BPP}=\mathbf{P}.

  5. كما سنبيّن أنّ مفهومَ اكتمالِ NP\mathbf{NP} (NP-completeness) ينطبق على الخوارزميات العشوائية تمامًا كما ينطبق على غيرها، إذا استعملناها بوصفها نموذجنا لـ«الحساب الفعّال». أي أنّه إذا وُجدت مسألةٌ واحدةٌ مكتملةٌ في NP\mathbf{NP} لها خوارزميةٌ عشوائيةٌ بزمنٍ متعدّد الحدود، فإنّ NP\mathbf{NP} كلَّه يمكن حسابُه في زمنٍ متعدّد الحدود بخوارزميات عشوائية.

  6. وأخيرًا سنناقش سؤالَ ما إذا كان BPP=P\mathbf{BPP} = \mathbf{P}، وسنعرض بعضَ الأدلّة المُثيرِة للاهتمام التي توحي بأنّ الإجابة قد تكون في الواقع «نعم»، وذلك باستعمال مفهوم المولِّدات شبه العشوائية.

نمذجةُ الحساب الاحتمالي

نمذجةُ الحساب الاحتماليّ سهلةٌ في الواقع. يمكننا إضافةُ العمليات التالية إلى أيّ لغةِ برمجةٍ مثل NAND-TM وNAND-RAM وNAND-CIRC وغيرها:

foo = RAND()

حيث foo متغيّر. نتيجةُ تطبيق هذه العملية أنّ foo يُسنَد إليه بتٌ عشوائيٌّ في {0,1}\{0,1\}. (وفي كلِّ مرّةٍ تُستدعى فيها العمليةُ RAND تُعيد بتًا عشوائيًّا جديدًا ومستقلًّا.) ونسمّي لغاتِ البرمجةِ المُزوَّدة بهذه العملية الإضافية، على الترتيب، RNAND-TM وRNAND-RAM وRNAND-CIRC.

وبالمثل، يمكننا بسهولةٍ تعريفُ آلاتِ تورينج العشوائية بأنّها آلاتُ تورينج التي تأخذ فيها دالّةُ الانتقال δ\delta مدخلًا إضافيًّا (إضافةً إلى الحالة الحالية والرمز المقروء من الشريط) هو بتٌ bb يُختار في كلِّ خطوةٍ عشوائيًّا من {0,1}\{0,1\}. بالطبع يمكن لدالّة الانتقال أن تتجاهل هذا البتّ (وتُعطي النتيجةَ نفسها سواء كان b=0b=0 أو b=1b=1)، ومن ثمّ فإنّ آلاتِ تورينج العشوائية تعمّم آلاتِ تورينج الحتمية.

يمكننا استعمالُ العملية RAND() لتعريف فكرة أنّ دالةً ما يُحسبها خوارزميةٌ عشوائيةٌ في زمن T(n)T(n)، لكلِّ حدٍّ زمنيّ حسنٍ T:N→NT:\N \rightarrow \N، وكذلك فكرة أنّ دالةً على مُدخَلاتٍ محدودةٍ (finite) يُحسبها برنامجُ NAND-CIRC عشوائيٌّ بحجم SS (أو بما يكافئ ذلك، دارةً عشوائيةً ذات SS بوابةٍ تُقابِل إمّا عمليات NAND وإمّا عمليات قذف العملات). لكنّنا، لأجل البساطة، لن نعرّف الحسابَ الاحتماليَّ بكلِّ عموميتِه، بل سنركّز ببساطةٍ على صنف الدوالّ التي يمكن حسابُها بخوارزمياتٍ عشوائيةٍ تعمل في زمنٍ متعدّد الحدود، وهو ما تُسمّيه، بحسب العُرف التاريخيّ، BPP\mathbf{BPP}:

تعريف — الصنف BPP\mathbf{BPP}

ليكن F:{0,1}∗→{0,1}F: \{0,1\}^*\rightarrow \{0,1\}. نقول إنّ F∈BPPF\in \mathbf{BPP} إذا وُجدت ثابتات a,b∈Na,b\in \N وبرنامجُ RNAND-TM مدعوٌّ PP بحيث لكلِّ x∈{0,1}∗x\in \{0,1\}^*، عند مدخل xx، يتوقّف البرنامجُ PP خلال a∣x∣ba|x|^b خطوةٍ على الأكثر، ويكون Pr⁡[P(x)=F(x)]≥23 \Pr[ P(x)= F(x)] \geq \tfrac{2}{3} حيث يُؤخذ هذا الاحتمالُ على نتائج عمليات RAND في PP.

لاحظ أنّ الاحتمالَ في المعادلة يُؤخذ فقط على الاختيارات العشوائية في تنفيذ PP، و_ليس_ على اختيار المدخل xx. وبخاصةٍ، كما ناقشنا في randomworstcaseidea، لا يزال BPP\mathbf{BPP} صنفَ تعقيدٍ في الحالة الأسوأ، بالمعنى أنّه إذا كان FF في BPP\mathbf{BPP} فإنّ هناك خوارزميةً عشوائيةً بزمنٍ متعدّد الحدود تحسب FF باحتمالٍ لا يقلّ عن 2/32/3 على كلِّ مدخلٍ محتمل (لا على المدخلات العشوائية فحسب).

المحاكاةُ ذاتُها التي تُجري برامجَ NAND-RAM ببرامجِ NAND-TM وبعبءٍ متعدّد الحدود، والتي رأيناها في مبرهنة — الربط بين RAM وآلات تورينج، تمتدّ كذلك إلى البرامجِ العشوائية. ومن ثمّ فإنّ الصنف BPP\mathbf{BPP} واحدٌ سواء عُرِّف ببرامج RNAND-TM أم ببرامج RNAND-RAM. وبالمثل، كان بإمكاننا أن نعرّف BPP\mathbf{BPP} باستعمال آلاتِ تورينج العشوائية بالقدر نفسه تمامًا.

وبفضل هذه التكافؤات، سنستعمل فيما يلي الاسمَ «الخوارزمية العشوائية بزمنٍ متعدّد الحدود» للدلالة على حسابٍ يمكن نمذجتُه ببرنامج RNAND-TM بزمنٍ متعدّد الحدود، أو ببرنامج RNAND-RAM، أو بآلةِ تورينج عشوائية (أو بأيّ لغةِ برمجةٍ تتضمّن عمليةَ قذف عملات). وبما أنّ كلَّ هذه النماذج متكافئةٌ حتى مضاعفاتٍ متعدّدة الحدود، فيمكنك استعمالُ النموذج الذي تفضّله لالتقاط الخوارزميات العشوائية بزمنٍ متعدّد الحدود دون أيّ خسارةٍ في العمومية.

تمرين محلول — الاختيار من مجموعة

تحمل لغاتُ البرمجة الحديثة، في الغالب، لا القدرةَ على قذف عملةٍ عشوائيةٍ في {0,1}\{0,1\} فحسب، بل أيضًا القدرةَ على اختيار عنصرٍ عشوائيًّا من مجموعة SS. أثبت أنّ بإمكانك محاكاةَ هذه الأوليّة (primitive) باستعمال قذف العملات. وبالتحديد، بيّن أنّ هناك خوارزميةً عشوائية AA تُعطى مجموعةً SS من mm سلسلةً طولُ كلٍّ منها nn، تعمل في زمن poly(n,m)poly(n,m)، وتُخرج إمّا عنصرًا x∈Sx\in S وإمّا «fail»، بحيث

  1. إذا كان pp هو احتمالَ أن تُخرج AA القيمةَ «fail»، فإنّ p<2−np < 2^{-n} (عددٌ صغيرٌ جدًّا بحيث يمكن تجاهله).

  2. لكلِّ x∈Sx \in S، فإنّ احتمالَ أن تُخرج AA القيمةَ xx هو بالضبط 1−pm\tfrac{1-p}{m} (وعليه فإنّ الخرجَ منتظمٌ فوق SS إذا تجاهلنا احتمالَ الفشل الضئيل)

الحل

إذا كان حجمُ SS قوةً للعدد اثنين، أي m=2ℓm=2^\ell لبعض ℓ∈N\ell\in N، فيمكننا اختيارُ عنصرٍ عشوائيٍّ في SS بأن نقذف ℓ\ell عملةً للحصول على سلسلة w∈{0,1}ℓw \in \{0,1\}^\ell، ثمّ نُخرج العنصرَ ذو الترتيب ii في SS، حيث ii هو العدد الذي تمثيلُه الثنائيُّ هو ww.

أمّا إذا لم تكن SS قوةً للعدد اثنين، فإنّ محاولتَنا الأولى ستكون أن نضع ℓ=⌈log⁡m⌉\ell = \ceil{\log m} ونفعل الشيءَ نفسه، لكنّنا عندئذٍ نُخرج العنصرَ ذو الترتيب ii في SS إذا كان i∈[m]i \in [m]، ونُخرج «fail» وإلّا. بشرط ألّا نُخرج «fail»، فإنّ هذا العنصرَ موزَّعٌ بانتظامٍ في SS. لكنّ في الحالة الأسوأ قد يكون 2ℓ2^\ell قريبًا من 2m2m، ومن ثمّ قد يقترب احتمالُ الفشل من النصف. ولتقليل احتمال الفشل، يمكننا تكرارُ التجربة أعلاه nn مرة. وبالتحديد، سنستعمل الخوارزميةَ التالية

خوارزمية — Sample from set

INPUT: Set $S = \{ x_0,\ldots, x_{m-1} \}$ with $x_i\in \{0,1\}^n$ -for all $i\in [m]$.
OUTPUT: Either $x\in S$ or "fail"

Let $\ell \leftarrow \lceil \log m \rceil$
For{$j = 0,1,\ldots,n-1$}
   Pick $w \sim \{0,1\}^\ell$
   Let $i\in [2^\ell]$ be number whose binary representation is $w$.
   If{$i<m$}
     return $x_i$
   Endif
Endfor
Return "fail"

بشرط ألّا تفشل، فإنّ خرجَ خوارزمية — Sample from set موزَّعٌ بانتظامٍ في SS. لكنّ بما أنّ 2ℓ<2m2^\ell < 2m فإنّ احتمالَ الفشل في كلِّ دورةٍ أقلُّ من 1/21/2، ومن ثمّ فإنّ احتمالَ الفشل في جميعها لا يتجاوز (1/2)n=2−n(1/2)^{n}= 2^{-n}.

منظورٌ بديل: العملاتُ العشوائية بوصفها «مدخلًا إضافيًّا»

بينما عرضنا الحسابَ الاحتماليَّ كإضافةِ عمليةٍ «قذفِ عملات» إضافيةٍ إلى برامجنا، يمكننا أيضًا نمذجتَ هذا بأنّنا نتلقّى مدخلًا إضافيًّا. أي أنّنا يمكننا أن نفكّر في خوارزميةٍ عشوائية AA على أنّها خوارزميةٌ حتميةٌ A′A' تأخذ مدخلَين xx وrr، حيث المدخلُ الثاني rr يُختار عشوائيًّا من {0,1}m\{0,1\}^m لبعض m∈Nm\in \N (انظر الشكل التوضيحي). والتكافؤُ مع تعريف — الصنف BPP مبيَّنٌ في المبرهنة التالية:

/images/introtcs/lec_17_model_rand-2.webp

مبرهنة — توصيفٌ بديل للصنف BPP\mathbf{BPP}

ليكن F:{0,1}∗→{0,1}F:\{0,1\}^* \rightarrow \{0,1\}. عندئذٍ F∈BPPF\in \mathbf{BPP} إذا وإلّا فقط إذا وُجدت a,b∈Na,b\in \N ودالّةُ G:{0,1}∗→{0,1}G:\{0,1\}^* \rightarrow \{0,1\} بحيث GG في P\mathbf{P}، ولكلِّ x∈{0,1}∗x\in \{0,1\}^*, Pr⁡r∼{0,1}a∣x∣b[G(xr)=F(x)]≥23  . \Pr_{r\sim \{0,1\}^{a|x|^b}} [ G(xr)=F(x)] \geq \tfrac{2}{3} \;.

فكرةُ البرهان هي أنّنا، كما هو مبيَّن في الشكل التوضيحي، يمكننا ببساطةٍ استبدالَ سحبِ عملةٍ عشوائيةٍ بقراءةِ بتٍ من «المدخل العشوائي» الإضافيّ rr، وبالعكس. ولإثبات ذلك بدقّةٍ سنحتاج إلى العمل باصطلاحٍ رسميٍّ مرهقٍ نوعًا ما. ولعلّ هذا من تلك البراهين التي يسهُل استخراجُها بنفسك أكثرَ من قراءتها.

برهان

نبدأُ بإثبات اتجاه «إذا فقط». ليكن F∈BPPF\in \mathbf{BPP}، وليكن PP برنامجَ RNAND-TM يحسب FF وفقًا لـ تعريف — الصنف BPP، وليكن a,b∈Na,b\in \N بحيث إنّ البرنامجَ PP يتوقّف عند كلِّ مدخلٍ طولُه nn خلال anban^b خطوةٍ على الأكثر. سنبني خوارزميةً بزمنٍ متعدّد الحدود P′P' بحيث لكلِّ x∈{0,1}nx\in \{0,1\}^n، إذا وضعنا m=anbm=an^b، فإنّ Pr⁡r∼{0,1}m[P′(xr)=1]=Pr⁡[P(x)=1]  , \Pr_{r \sim \{0,1\}^{m}}[ P'(xr) = 1] = \Pr[ P(x) = 1 ] \;, حيث يُؤخذ الاحتمالُ في الطرف الأيمن على عمليات RAND() في PP. وبخاصةٍ فإنّ هذا يعني أنّه إذا عرّفنا G(xr)=P′(xr)G(xr) = P'(xr) فإنّ الدالّةَ GG تستوفي شروطَ المعادلة.

ستكون الخوارزميةُ P′P' بسيطةً جدًّا: فهي تحاكي البرنامجَ PP مع الاحتفاظ بعدّاد ii مُهيَّأً بالقيمة 0. وفي كلِّ مرّةٍ تُجري فيها PP عمليةَ RAND()، يزوّد البرنامجُ P′P' بالنتيجة المأخوذة من rir_i ويزيد ii بمقدار واحد. لن «نفد» من البتّات أبدًا، إذ إنّ زمنَ تنفيذ PP لا يتجاوز anban^b، ومن ثمّ فإنّه لا يمكنه أن يُجري أكثرَ من هذا العدد من استدعاءات RAND(). وسيكون خرجُ P′(xr)P'(xr) مع r∼{0,1}mr\sim \{0,1\}^m عشوائيًّا موزَّعًا بالتوزيع نفسِه الذي يوزَّع عليه خرجُ P(x)P(x).

أمّا في الاتجاه الآخر، فبالإعطاء على دالّةٍ G∈PG\in \mathbf{P} تستوفي الشرطَ المعادلة، وعلى برنامج NAND-TM مدعوٍّ P′P' يحسب GG في زمنٍ متعدّد الحدود، يمكننا بناءُ برنامج RNAND-TM PP يحسب FF في زمنٍ متعدّد الحدود. عند مدخل x∈{0,1}nx\in \{0,1\}^n، يستعمل البرنامجُ PP ببساطةٍ التعليمةَ RAND() anban^b مرّةً لملء مصفوفة R[00] ، …\ldots، R[anb−1an^b-1]، ثمّ ينفّذ البرنامجَ الأصليَّ P′P' على المدخل xrxr حيث rir_i هو العنصرُ ذو الترتيب ii في المصفوفة R. ومرّةً أخرى، من الواضح أنّه إذا كان P′P' ينفّذ في زمنٍ متعدّد الحدود فإنّ PP كذلك، وأنّه لكلِّ مدخل xx ولكلِّ r∈{0,1}anbr\in \{0,1\}^{an^b}، يكون خرجُ PP على المدخل xx حين تكون نتيجةُ قذف العملات هي rr مساويًا لـ P′(xr)P'(xr).

ملاحظة — تعريفا BPP\mathbf{BPP} وNP\mathbf{NP}

يوحي التوصيفُ للصنف BPP\mathbf{BPP} في مبرهنة — توصيفٌ بديل للصنف BPP بتوصيفِ الصنف NP\mathbf{NP} في تعريف — NP، حيث تؤدّي العشوائيةُ في حالة BPP\mathbf{BPP} دورَ الحلِّ في حالة NP\mathbf{NP}. لكنّ هناك فروقًا جوهرية بين الاثنين:

  • تعريفُ NP\mathbf{NP} «أحاديُّ الجانب» (one sided): F(x)=1F(x)=1 إذا كان هناك حلٌّ ww بحيث G(xw)=1G(xw)=1، و F(x)=0F(x)=0 إذا لكلِّ سلسلة ww بالطول المناسب كان G(xw)=0G(xw)=0. وفي المقابل فإنّ توصيفَ BPP\mathbf{BPP} متناظرٌ بالنسبة للحالتين F(x)=0F(x)=0 وF(x)=1F(x)=1.

  • العلاقةُ بين NP\mathbf{NP} وBPP\mathbf{BPP} ليست واضحةً على الفوري. فليس معروفًا ما إذا كان BPP⊆NP\mathbf{BPP} \subseteq \mathbf{NP} أم NP⊆BPP\mathbf{NP} \subseteq \mathbf{BPP} أم أنّ الصنفين غيرَ قابلين للمقارنة. لكنّه معروف (ببرهانٍ غير تافه) أنّه إذا كان P=NP\mathbf{P}=\mathbf{NP} فإنّ BPP=P\mathbf{BPP}=\mathbf{P} (انظر مبرهنة — مبرهنةُ سيبسر–غاكس (Sipser–Gács)).

  • والأهمّ من ذلك أنّ تعريفَ NP\mathbf{NP} «غيرُ فعّال» (ineffective)، لأنّه لا يمتحن طريقةً لإيجاد ما إذا كان هناك حلٌّ فعلًا في الاحتمالاتِ الأُسّيّة العدد. وفي المقابل فإنّ تعريفَ BPP\mathbf{BPP} يعطينا طريقةً لحساب الدالّةِ عمليًّا بمجرّد اختيار المدخل الثاني عشوائيًّا.

«الأشرطةُ العشوائية» (random tapes). مبرهنة — توصيفٌ بديل للصنف BPP يدفعنا أحيانًا إلى اعتبار عشوائية برنامج RNAND-TM (أو RNAND-RAM) مدخلًا إضافيًّا. ومن ثمّ، إذا كانت AA خوارزميةً عشوائية تُجري عند مداخلَ طولُها nn ما لا يزيد على mm قذفةِ عملة، فسنستعمل عادةً الترميزَ A(x;r)A(x;r) (حيث x∈{0,1}nx\in \{0,1\}^n و r∈{0,1}mr\in \{0,1\}^{m}) للإشارة إلى نتيجة تنفيذ xx حين تقابل قذفاتُ عملات AA إحداثيّاتِ rr. ويُشار أحيانًا إلى هذا المدخل الثاني، أو «المساعِد»، بأنّه «الشريطُ العشوائي» (random tape). ومصدرُ هذه المصطلحية هو نموذجُ آلاتِ تورينج العشوائية.

تكبيرُ نجاح خوارزميات الخطأ ثنائي الجانب

قد يبدو العددُ 2/32/3 اعتباطيًّا، لكنّه، كما رأينا في الحساب الاحتمالي، يمكن تكبيرُه إلى مقدارٍ نشاء:

مبرهنة — التكبير

ليكن F:{0,1}∗→{0,1}F:\{0,1\}^* \rightarrow \{0,1\} دالّةً بوليانية بحيث إنّ هناك متعدّدَ حدودٍ p:N→Np:\N \rightarrow \N وخوارزميةَ عشوائية AA بزمنٍ متعدّد الحدود تستوفي أنّه لكلِّ x∈{0,1}nx\in \{0,1\}^n، Pr⁡[A(x)=F(x)]≥12+1p(n)  . \Pr[A(x) = F(x)] \geq \frac{1}{2} + \frac{1}{p(n)} \;. عندئذٍ فلكلِّ متعدّدِ حدودٍ q:N→Nq:\N \rightarrow \N هناك خوارزميةٌ عشوائية BB بزمنٍ متعدّد الحدود تستوفي أنّه لكلِّ x∈{0,1}nx\in \{0,1\}^n، Pr⁡[B(x)=F(x)]≥1−2−q(n)  . \Pr[B(x) = F(x)] \geq 1 - 2^{-q(n)} \;.

يمكننا تكبيرَ نجاحِ الخوارزميات العشوائية إلى قيمةٍ تقترب من 11 بما نشاء.

البرهانُ هو نفسه الذي رأيناه من قبل في حالة القطع الأقصى (maximum cut) وفي أمثلةٍ أخرى. فنستعمل حدَّ تشرنوف (Chernoff bound) لنبيّن أنّه إذا كانت AA تحسب FF باحتمالٍ لا يقلّ عن 12+ϵ\tfrac{1}{2} + \epsilon، وشغّلناها O(k/ϵ2)O(k/\epsilon^2) مرّة، مستعملين في كلِّ مرّة عملاتٍ عشوائيةً جديدة ومستقلّة، فإنّ احتمالَ أن تكون أكثرُ الأجوبة خطأً سيكون أقلّ من 2−k2^{-k}. ويمكن اعتبارُ التكبير نوعًا من «استطلاع» (polling) لاختياراتِ العشوائية التي تستعملها الخوارزمية (انظر الشكل التوضيحي).

برهان

ليكن AA خوارزميةً تستوفي المعادلة. نضع ϵ=1p(n)\epsilon = \tfrac{1}{p(n)} و k=q(n)k = q(n) حيث p,qp,q هما المتعدّدان في نصّ المبرهنة. يمكننا تشغيلُ PP على المدخل xx عددَ t=10k/ϵ2t=10k/\epsilon^2 من المرّات، باستعمال عشوائيةٍ جديدة في كلِّ تنفيذ، ثمّ نحسب المخارجَ y0,…,yt−1y_0,\ldots,y_{t-1}. ونُخرج القيمةَ yy التي ظهرت أكبرَ عددٍ من المرّات. ليكن XiX_i المتغيّرَ العشوائيَّ الذي يساوي 11 إذا كان yi=F(x)y_i = F(x)، ويساوي 00 وإلّا. المتغيّراتُ العشوائيةُ X0,…,Xt−1X_0,\ldots,X_{t-1} مستقلّةٌ ومتطابقةُ التوزيع (i.i.d.) وتستوفي E[Xi]=Pr⁡[Xi=1]≥1/2+ϵ\E [X_i] = \Pr[ X_i = 1] \geq 1/2 + \epsilon، ومن ثمّ فبحسب خطّية التوقّع فإنّ E[∑i=0t−1Xi]≥t(1/2+ϵ)\mathbb{E}[\sum_{i=0}^{t-1} X_i] \geq t(1/2 + \epsilon). لكي تكون القيمةُ الأكثر تكرارًا خاطئة، لا بدّ من أن يتحقّق ∑i=0t−1Xi≤t/2\sum_{i=0}^{t-1} X_i \leq t/2، وهذا يعني أنّ ∑i=0t−1Xi\sum_{i=0}^{t-1}X_i يبتعد عن توقّعه بمقدارٍ لا يقلّ عن ϵt\epsilon t. ومن ثمّ فبحسب حدّ تشرنوف (مبرهنة — حدّ تشرنوف/هويفدينغ) فإنّ احتمالَ أن تكون القيمةُ الأكثر تكرارًا غيرَ صحيحة لا يتجاوز 2e−ϵ2t2e^{-\epsilon^2 t}، وهو أصغرُ من 2−k2^{-k} لاختيارنا للقيمة tt.

/images/introtcs/lec_17_model_rand-3.webp

BPP\mathbf{BPP} واكتمالُ NP\mathbf{NP}

لأنّ «العمليات الصاخبة» (noisy processes) وفيرةٌ في الطبيعة، يمكن تنفيذُ الخوارزميات العشوائية فيزيائيًّا، ومن المعقولِ أن نقترح BPP\mathbf{BPP} بدلًا من P\mathbf{P} بوصفه نموذجنا الرياضيَّ للحساب «المُنال» (feasible) أو «السهلِ المعالجة» (tractable). قد يتساءلُ المرءُ ما إذا كان هذا يجعلُ الفصولَ السابقةَ كلَّها بلا فائدة، وعلى وجه التحديد ما إذا كانت نظريّةُ اكتمال NP\mathbf{NP} ما تزال تنطبقُ على الخوارزميات الاحتمالية. ولحسن الحظّ فالإجابةُ هي نعم:

مبرهنة — NP\mathbf{NP}-الصعوبة و BPP\mathbf{BPP}

لنفترض أنّ FF هي NP\mathbf{NP}-صعبة و F∈BPPF\in \mathbf{BPP}. عندئذٍ NP⊆BPP\mathbf{NP} \subseteq \mathbf{BPP}.

قبل الاطلاع على البرهان، لاحظ أنّ مبرهنة — NP-الصعوبة و BPP يفيد أنّه إذا وُجدت خوارزميةٌ عشوائيةٌ بزمنٍ متعدّد الحدود لأيِّ مسألةٍ NP\mathbf{NP}-مكتملةٍ مثل 3SAT3SAT أو ISETISET وغيرها، فإنّه ستوجد خوارزميةٌ من هذا النوع لكلِّ مسألةٍ في NP\mathbf{NP}. وعليه، سواء كان نموذجُ الحساب لدينا حتميًّا أم خوارزمياتٍ عشوائية، تحتفظُ المسائلُ الـNP\mathbf{NP}-مكتملةُ بصفتها «أصعب المسائل في NP\mathbf{NP}».

الفكرةُ هي تشغيلُ الاختزال (reduction) كالمعتاد، وتمريره إلى الخوارزمية العشوائية بدلًا من خوارزميةٍ حتمية. وكان استخراجُ هذا البرهان بنفسك تمرينًا ممتازًا، وسيلةً لتثبيت تعريفي NP\mathbf{NP}-الصعوبة والخوارزميات العشوائية. لكنّنا، من أجل الاستيفاء، نُدرج هذا البرهان أدناه.

برهان

لنفترض أنّ FF هي NP\mathbf{NP}-صعبة و F∈BPPF\in \mathbf{BPP}. وسنبيّن الآن أنّ هذا يعني أنّ NP⊆BPP\mathbf{NP} \subseteq \mathbf{BPP}. ليكن G∈NPG \in \mathbf{NP}. بحكم تعريف NP\mathbf{NP}-الصعوبة، فإنّه ينتج أنّ G≤pFG \leq_p F، أي بعبارةٍ أخرى إنّ هناك دالّةً R:{0,1}∗→{0,1}∗R:\{0,1\}^* \rightarrow \{0,1\}^* قابلةَ للحساب في زمنٍ متعدّد الحدود بحيث G(x)=F(R(x))G(x)=F(R(x)) لكلِّ x∈{0,1}∗x\in \{0,1\}^*. والآن إذا كانت FF في BPP\mathbf{BPP} فإنّ هناك برنامجَ RNAND-TM بزمنٍ متعدّد الحدود مدعوًّا PP بحيث Pr⁡[P(y)=F(y)]≥2/3 \Pr[ P(y)= F(y) ] \geq 2/3 لكلِّ y∈{0,1}∗y\in \{0,1\}^* (حيث يُؤخذ الاحتمالُ على قذف العملات العشوائية في PP). ومن ثمّ يمكننا الحصول على برنامج RNAND-TM بزمنٍ متعدّد الحدود P′P' يحسب GG بوضع P′(x)=P(R(x))P'(x)=P(R(x)). وبحسب المعادلة فإنّ Pr⁡[P′(x)=F(R(x))]≥2/3\Pr[ P'(x) = F(R(x))] \geq 2/3، وبما أنّ F(R(x))=G(x)F(R(x))=G(x) فإنّ هذا يعني أنّ Pr⁡[P′(x)=G(x)]≥2/3\Pr[ P'(x) = G(x)] \geq 2/3، وهو ما يُثبت أنّ G∈BPPG \in \mathbf{BPP}.

معظمُ النتائج التي رأيناها حول NP\mathbf{NP}-الصعوبة، بما فيها اختزالُ البحثِ إلى القرار في مبرهنة — البحث مقابل الحسم، واختزالُ القرارِ إلى التحسين في مبرهنة — التحسين انطلاقًا من P=NP، ونتيجةُ حذفِ الكمّيات (quantifier elimination) في مبرهنة — انهيار تسلسل متعدّد الحدود المتدرّج، تنطبق كلُّها بالطريقة نفسِه إذا استبدلنا P\mathbf{P} بـ BPP\mathbf{BPP} بوصفه نموذجنا للحساب الفعّال. وعليه، إذا كان NP⊆BPP\mathbf{NP} \subseteq \mathbf{BPP} فإنّنا نحصلُ جوهريًّا على كلِّ النتائج الغريبةِ والخلّابةِ المترتبة على P=NP\mathbf{P}=\mathbf{NP}. وليس مُفاجئًا ألّا نتمكّنَ من استبعاد هذا الاحتمال. وفعلًا، بخلاف P=EXP\mathbf{P}=\mathbf{EXP} الذي يُستبعد ببرهانية تدرّج الزمن (time hierarchy theorem)، فإنّنا لا نعرف حتى كيف نستبعد احتمالَ أنّ BPP=EXP\mathbf{BPP}=\mathbf{EXP}! وعليه، من حيث المبدأ، ممكنٌ (لكنّه يبدو بعيدَ الاحتمال جدًّا) أن تكون العشوائيةُ أداةً سحرية تسمحُ بتسريع أيّ حسابٍ بزمنٍ أُسّيّ.[1] ومع ذلك، كما سنناقش أدناه، يُعتقد أنّ قوةَ العشوائية أضعفُ بكثير، وأنّ BPP\mathbf{BPP} يقع في منطقةٍ «أكثر عاديّة» بكثير.

قوةُ العشوائية

السؤالُ الكبير هو ما إذا كانت العشوائيةُ تستطيع إضافةَ قوّةٍ إلى الحساب. ويمكننا صياغتُه رياضيًّا على النحو التالي: هل BPP=P\mathbf{BPP}=\mathbf{P}؟ بالنظر إلى ما رأيناه حتى الآن عن علاقاتِ أصنافِ التعقيد الأخرى مثل P\mathbf{P} وNP\mathbf{NP}، أو NP\mathbf{NP} وEXP\mathbf{EXP}، قد يخطرُ لأحدٍ أن يخمّن أنّ:

  1. لا نعرف الإجابةَ عن هذا السؤال.

  2. لكنّنا نخمّن أنّ BPP\mathbf{BPP} مختلفٌ عن P\mathbf{P}.

وسكونَ المتحدّثُ محقًّا في الأولى، ومخطئًا في الثانية. وكما سنرى، فإنّ لدينا فعلًا أسبابًا تجعلُنا نؤمن بأنّ BPP=P\mathbf{BPP}=\mathbf{P}. ويمكن اعتبارُ هذا مؤيِّدًا لـ_أطروحة تورينج-تشرش المُوسَّعة_ (extended Church-Turing thesis) التي تنصّ على أنّ آلاتِ تورينج الحتميةَ بزمنٍ متعدّد الحدود تلتقط ما يمكن حسابُه في العالم الفيزيائي على نحوٍ مُنالٍ.

ولنستعرض الآن بعضَ العلاقات المعروفة بين BPP\mathbf{BPP} وبقية أصناف التعقيد التي صادفناها. (وانظر أيضًا الشكل التوضيحي.)

/images/introtcs/lec_17_model_rand-4.webp

حلُّ BPP\mathbf{BPP} في زمنٍ أُسّيّ

ليس صعبًا أن نرى أنّه إذا كانت FF في BPP\mathbf{BPP} فإنّها يمكن حسابُها في زمنٍ أُسّيّ.

مبرهنة — محاكاةُ الخوارزميات العشوائية في زمنٍ أُسّيّ

BPP⊆EXP\mathbf{BPP} \subseteq \mathbf{EXP}

توقّف وتأمّل

برهانُ مبرهنة — محاكاةُ الخوارزميات العشوائية في زمنٍ أُسّيّ ينتج بسهولةٍ بالعدّ على كلِّ الخيارات (الأُسّيّة العدد) للعملات العشوائية. ونُغفل البرهانَ الرسميّ، لأنّ إتمامَه بنفسك طريقةٌ ممتازةٌ للتأقلم مع تعريف — الصنف BPP.

محاكاةُ الخوارزميات العشوائية بالدوائر

رأينا في مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم أنّه إذا كانت FF في P\mathbf{P}، فإنّ هناك متعدّدَ حدودٍ p:N→Np:\N \rightarrow \N بحيث لكلِّ nn يكون تقييدُ F↾nF_{\upharpoonright n} لـ FF على المداخل {0,1}n\{0,1\}^n في SIZE(p(n))SIZE(p(n)). (بعبارةٍ أخرى، أنّ P⊆P/poly\mathbf{P} \subseteq \mathbf{P_{/poly}}.) من حيث المبدأ ليس واضحًا البتّةَ أنّ الأمرَ نفسه ينطبق على دالّةٍ في BPP\mathbf{BPP}، لكنّه يتبيّن أنّ هذا هو الحال.

الضمانات الممكنة لخوارزمية عشوائية  تحسب دالةً معيّنة . في الجداول أعلاه، الأعمدة تقابل مداخلٍ مختلفة والصفوف تقابل اختياراتٍ مختلفة لشريط العشوائية. خليةٌ في الموضع  ملوَّنةٌ بالأخضر إذا كان  (أي تُخرج الخوارزمية الجواب الصحيح) وبالأحمر وإلّا. والضمانة القياسية  تقابل الشكل الأوسط، حيث لكلّ مدخلٍ  ثلثَا الاختيارات على الأقلّ لـ كشريط عشوائية تُسبب  أن تحسب القيمة الصحيحة. أيّ أنّ كلّ عمودٍ ملوَّنٌ بالأخضر في ثلثيه على الأقلّ. وفي الشكل الأيسر لدينا ضمانة «متوسّطة الحالة» تُنجَز فيها الخوارزمية الجواب الصحيح باحتمال ثلثَين على مدخلٍ عشوائي فقط (أي أنّ ثلث المداخل في الجدول كحدٍّ أقصى ملوَّنٌ بالأحمر، لكن قد يكون هناك عمودٌ أحمر بالكامل). ويقابل الشكل الأيمن حالة « دون اتصال» (offline)، حيث باحتمال ثلثَين على الاختيار العشوائي ، يكون  جيّدًا لكلّ مدخل. أيّ أنّ ثلثَي الصفوف على الأقلّ خضراء بالكامل. وتُثبت rnandthm () بتضخيم نجاح خوارزمية  حتى نحصل على ضمانة « دون اتصال»، ثمّ تثبيت اختيار العشوائية  مسبقًا للحصول على خوارزمية حتمية غير موحّدة.

مبرهنة — العشوائيةُ لا تساعد في الحساب غير المنتظم

BPP⊆P/poly\mathbf{BPP} \subseteq \mathbf{P_{/poly}}.

أي أنّه لكلِّ F∈BPPF\in \mathbf{BPP} توجد a,b∈Na,b\in \N بحيث لكلِّ n>0n>0 يكون F↾n∈SIZE(anb)F_{\upharpoonright n} \in SIZE(an^b)، حيث F↾nF_{\upharpoonright n} هو تقييدُ FF على المداخل في {0,1}n\{0,1\}^n.

الفكرةُ وراء البرهان هي أنّنا يمكننا أوّلًا تكبيرَ احتمال النجاح بالتكرار من 2/32/3 إلى 1−0.1⋅2−n1-0.1 \cdot 2^{-n}. وسيتيح لنا ذلك أن نبيّن أنّه لكلِّ n∈Nn\in\N هناك اختيارٌ واحدٌ ثابت لـ«العملات الملائمة»، وهو سلسلة rr طولُها متعدّدُ الحدود في nn، بحيث إذا استُعملت rr بوصفها العشوائيةَ فإنّنا نُخرج الإجابةَ الصحيحة على كلِّ المداخل المحتملة الـ2n2^n. عندئذٍ يمكننا استعمالُ تقنية «فكّ الحلقة» (unravelling the loop) المعتادة لتحويل برنامج RNAND-TM إلى برنامج RNAND-CIRC، و«تثبيت» اختيار العملات الملائم داخلَ البرنامج لتحويل برنامج RNAND-CIRC إلى برنامج NAND-CIRC حتميٍّ عاديًّا.

برهان

لنفترض أنّ F∈BPPF\in \mathbf{BPP}. وليكن PP برنامجَ RNAND-TM بزمنٍ متعدّد الحدود يحسب FF وفقًا لـ تعريف — الصنف BPP. باستعمال مبرهنة — التكبير يمكننا تكبيرَ احتمال نجاح PP للحصول على برنامج RNAND-TM P′P' لا يبطؤ إلّا بمعامل O(n)O(n) على الأكثر (ومن ثمّ فهو ما زال بزمنٍ متعدّد الحدود) بحيث لكلِّ x∈{0,1}nx\in \{0,1\}^n

Pr⁡r∼{0,1}m[P′(x;r)=F(x)]≥1−0.1⋅2−n  , \Pr_{r \sim \{0,1\}^{m}}[ P'(x;r)=F(x)] \geq 1 - 0.1\cdot 2^{-n} \;,

حيث mm هو عددُ قذفات العملات التي تستعملها P′P' عند المداخل طولُها nn. ونستعمل الترميزَ P′(x;r)P'(x;r) للدلالة على تنفيذ P′P' على المدخل xx وحين تقابل نتيجةُ قذف العملات السلسلةَ rr.

لكلِّ x∈{0,1}nx\in \{0,1\}^n، عرِّف الحدثَ «السيّئ» BxB_x بأنّه يتحقّق إذا كان P′(x)≠F(x)P'(x) \neq F(x)، حيث فضاءُ العيّناتِ لهذا الحدث مكوّنٌ من عملات P′P'. عندئذٍ فبحسب المعادلة يكون Pr⁡[Bx]≤0.1⋅2−n\Pr[B_x] \leq 0.1\cdot 2^{-n} لكلِّ x∈{0,1}nx \in \{0,1\}^n. ولأنّ هناك 2n2^n من هذه xx، فبحسب حدّ الاتحاد (union bound) نرى أنّ احتمالَ اتحاد الأحداث {Bx}x∈{0,1}n\{ B_x \}_{x\in \{0,1\}^n} لا يتجاوز 0.10.1. وهذا يعني أنّه إذا اخترنا r∼{0,1}mr \sim \{0,1\}^m، فباحتمالٍ لا يقلّ عن 0.90.9 يتحقّق أنّه لكلِّ x∈{0,1}nx\in \{0,1\}^n لدينا F(x)=P′(x;r)F(x)=P'(x;r). (وفعلًا، وإلّا فإنّ الحدثَ BxB_x سيتحقّق لبعض xx.) وبخاصةٍ، لمجرّد أنّ احتمالَ ∪x∈{0,1}nBx\cup_{x \in \{0,1\}^n} B_x أصغرُ من 11، فإنّ هذا يعني أنّه يوجد r∗r^* معيّنٌ في {0,1}m\{0,1\}^m بحيث

P′(x;r∗)=F(x)P'(x;r^*)=F(x)

لكلِّ x∈{0,1}nx\in \{0,1\}^n.

والآن لنستعمل تقنية «فكّ الحلقة» المعتادة لنحوّل P′P' إلى برنامج NAND-CIRC QQ حجمُه متعدّدُ الحدود في nn، بحيث Q(xr)=P′(x;r)Q(xr)=P'(x;r) لكلِّ x∈{0,1}nx\in \{0,1\}^n و r∈{0,1}mr \in \{0,1\}^m. ثمّ، بـ«تثبيت» القيم r0∗,…,rm−1∗r^*_0,\ldots,r^*_{m-1} بدلًا من آخر mm مدخلَ لـ QQ، نحصل على برنامج NAND-CIRC جديدٍ Qr∗Q_{r^*} يستوفي، بحسب المعادلة، أنّ Qr∗(x)=F(x)Q_{r^*}(x)=F(x) لكلِّ x∈{0,1}nx\in \{0,1\}^n. وهذا يبيّن أنّ F↾nF_{\upharpoonright n} له برنامجُ NAND-CIRC حجمُه متعدّدُ الحدود في nn، ومن ثمّ يكتمل برهانُ مبرهنة — العشوائيةُ لا تساعد في الحساب غير المنتظم.

نزعُ العشوائية (derandomization)

يمكن تلخيصُ برهان مبرهنة — العشوائيةُ لا تساعد في الحساب غير المنتظم فيما يلي: يمكننا استبدالَ خوارزميةٍ تعمل في زمن poly(n)poly(n) وتُقذف العملات أثناء تنفيذها بخوارزميةٍ تستعمل مجموعةً واحدةً من قذفات العملات r∗∈{0,1}poly(n)r^* \in \{0,1\}^{poly(n)} تكون كافيةً لكلِّ المداخل ذات الحجم nn. وبعبارةٍ أخرى، إنّنا لأغراض حساب الدوالّ لا نحتاج إلى وصولٍ «على الخطّ» (online) إلى العملات العشوائية، ويمكننا توليدُ مجموعةٍ من العملات «دون الخطّ» (offline) مسبقًا، قبل أن نرى المدخلَ الفعليّ.

لكنّ هذا لا يساعدنا حقًّا في الإجابة عن سؤال ما إذا كان BPP\mathbf{BPP} مساويًا لـ P\mathbf{P}، إذ لا نزال بحاجة إلى إيجاد طريقةٍ لتوليد هذه العملات «دون الخطّ» من الأساس. ولنزع العشوائية عن برنامج RNAND-TM سنحتاج إلى إيجاد خوارزميةٍ حتميةٍ واحدة تعمل لكلِّ أطوال المداخل. أي أنّه، بخلاف حالة برامج RNAND-CIRC، لا يمكننا أن نختار لكلِّ طولِ مدخل nn سلسلةً r∗∈{0,1}poly(n)r^* \in \{0,1\}^{poly(n)} ونستعملها عملاتٍ عشوائيةً لنا.

هل يمكننا نزعَ العشوائية عن الخوارزميات العشوائية، أم أنّ للعشائية قوّةً جوهريةً إضافية تُضاف إلى الحساب؟ هذا سؤالٌ مثيرٌ للاهتمام من حيث الأصل، لكنّه ذو أهميةٍ عملية أيضًا. منذ أن بدأ الناسُ استعمالَ الخوارزميات العشوائية أثناء مشروع مانهاتن، وهم يحاولون إزالةَ الحاجة إلى العشوائية واستبدالَها بأعدادٍ تُختار عبر عمليّةٍ ما حتمية. وعلى مدى السنين نجح هذا الأسلوبُ مرارًا، وإن كان هناك عددٌ من حالات الإخفاق أيضًا.[2]

كان أحدُ الأساليب الشائعة التي استعملها الناس على مدى السنين هو استبدالُ عملات الخوارزمية العشوائية بسلسلةٍ «ذات مظهرٍ شبه عشوائي» يولّدونها عبر تقدّمٍ ما حسابيّ. مثلًا، يمكن استعمالُ أرقامِ π\pi بوصفها الشريطَ العشوائيّ. استعمالُ هذا النوع من الأساليب يماثل ما أسماه فون نيومان «بحالةِ خطيئة». (مع أنّ هذه خطيئةٌ كان هو نفسه يرتكبها كثيرًا، لأنّ توليدَ عشوائيةٍ حقيقيّةٍ بالكميات الكافية كان ولا يزال مكلفًا في الغالب.) السببُ في اعتبارِ هذا «خطيئة» هو أنّ مثلَ هذه الإجراءات لن ينفع في العموم. مثلًا، من السهل تعديلُ أيّ خوارزميةٍ احتمالية AA مثل التي رأيناها في #randomizedalgchap، لتصبح خوارزميةً A′A' مضمونٌ أن تفشل إذا صادف أن كان الشريطُ العشوائي مساويًا لأرقام π\pi. وهذا يعني أنّ الإجراءَ «استبدل الشريطَ العشوائيَّ بأرقام π\pi» لا ينتج طريقةً عامّةً لتحويل خوارزميةٍ احتمالية إلى خوارزميةٍ حتمية تحلُّ المسألةَ نفسها. بالطبع، لا يفشل هذا الإجراءُ دائمًا، لكنّنا لا نملك طريقةً جيّدةً لتحديد متى يفشل ومتى ينجح. وهذا الاستدلالُ ليس خاصًّا بـ π\pi وينطبق على كلِّ سلسلةٍ منتَجةٍ حتميًا، سواء أنشأتها π\pi أو ee أو متتاليةُ فيبوناتشي أو أيُّ شيءٍ آخر.

قد تبدو الخوارزميةُ التي تتحقّق ممّا إذا كان شريطُها العشوائي مساويًا لـ π\pi ثمّ تفشل سخيفةً جدًّا، لكنّ هذا ليس إلّا «قمةَ الجليد» في مسألةٍ بالغةِ الخطورة. وقد تعلّم الناسُ مرارًا وتكرارًا، بالطريقة الصعبة، أنّ إنتاجَ البتّات العشوائية بوسائلَ حتمية يتطلّب حذرًا شديدًا. وكما سنرى عند مناقشة التعمية (cryptography)، فإنّ كثيرًا من إخفاقاتِ الأمنِ المذهلة والاختراقات كانت نتيجةَ استعمال عملاتٍ «غيرِ عشوائيةٍ بما يكفي».

المولِّداتُ شبه العشوائية

وعليه، لا يمكننا استعمالَ أيِّ سلسلةٍ واحدةٍ لـ«نزع العشوائية» عن خوارزميةٍ احتمالية. لكنّه يتبيّن أنّ بإمكاننا استعمالَ مجموعةٍ من السلاسل لفعل ذلك. وبعبارةٍ أخرى، بدلًا من محاولة التخلّص من الحاجة إلى العشوائية، نبدأ بالتركيز على تقليل مقدار العشوائية المطلوب. (مع أنّنا سنرى أنّنا إذا قلّلنا العشوائية بما يكفي فسنتمكّن في النهاية من التخلّص منها كلّيًّا.)

نُعطي التعريفَ التالي:

تعريف — المولِّدُ شبه العشوائي

دالّةُ G:{0,1}ℓ→{0,1}mG:\{0,1\}^\ell \rightarrow \{0,1\}^m هي مولِّدًا شبه عشوائيًّا بمعاملات (T,ϵ)(T,\epsilon) إذا كان لكلِّ دارةٍ CC ذات mm مدخلًا ومخرجٍ واحدٍ وعددٍ من البوابات لا يتجاوز TT، ∣Pr⁡s∼{0,1}ℓ[C(G(s))=1]−Pr⁡r∼{0,1}m[C(r)=1]∣<ϵ \left| \Pr_{s\sim \{0,1\}^\ell}[C(G(s))=1] - \Pr_{r \sim \{0,1\}^m}[C(r)=1] \right| < \epsilon

/images/introtcs/lec_17_model_rand-5.webp

توقّف وتأمّل

هذا تعريفٌ يستحق القراءةَ أكثرَ من مرّة، مع تخصيصِ بعض الوقت لاستيعابه. لاحظ أنّه يتضمّن عدةَ معاملات:

  • TT هو الحدُّ الأعلى لعدد بوابات الدارةِ CC التي يحتاج المولِّدُ إلى «خداعها». وكلّما كان TT أكبرَ كان المولِّدُ أقوى.

  • ϵ\epsilon هو مقدارُ تقاربِ خرج المولِّدِ شبه العشوائي من التوزيع المنتظم الحقيقيّ فوق {0,1}m\{0,1\}^m. وكلّما كان ϵ\epsilon أصغرَ كان المولِّدُ أقوى.

  • ℓ\ell هو طولُ المدخل وmm هو طولُ الخرج. إذا كان ℓ≥m\ell \geq m فالأمرُ هو إيجادُ مثل هذا المولِّد مباشرةً: على المدخل s∈{0,1}ℓs\in \{0,1\}^\ell يمكننا إخراجُ s0,…,sm−1s_0,\ldots,s_{m-1}. عندئذٍ سيكون Pr⁡s∼{0,1}ℓ[P(G(s))=1]\Pr_{s\sim \{0,1\}^\ell}[ P(G(s))=1] مساويًا ببساطةٍ لـ Pr⁡r∼{0,1}m[P(r)=1]\Pr_{r\sim \{0,1\}^m}[ P(r)=1]، مهما كان عددُ أسطر PP. إذًا كلّما كان ℓ\ell أصغرَ وmm أكبرَ كان المولِّدُ أقوى، ولكي نحصل على أيّ شيءٍ غير تافهٍ نحتاج إلى m>ℓm>\ell.

ولاحظ كذلك أنّه رغم أنّ هدفَنا النهائيّ هو خداعُ الخوارزميات العشوائية الاحتمالية التي تأخذ عددًا غير محدودٍ من المداخل، فإنّ تعريف — المولِّدُ شبه العشوائي يتعلّق ببرامج NAND-CIRC محدودة و_حتمية_.

يمكننا التفكيرُ في المولِّدِ شبه العشوائي على أنّه «مكبِّرَ عشوائية». فهو يأخذ مدخلًا ss من ℓ\ell بتًا يُختار عشوائيًّا، ويوسّع هذه الـℓ\ell بتًّا إلى خرجٍ rr مكوّنٍ من m>ℓm>\ell بتًّا شبه عشوائي. وإذا كان ϵ\epsilon صغيرًا بما يكفي فإنّ البتّات شبه العشوائية «ستبدو عشوائية» لأيِّ برنامج NAND-CIRC ليس كبيرًا أكثرَ من اللازم. ومع ذلك، فهناك سؤالان لم نُجب عنهما:

  • ما السببُ الذي يجعلنا نعتقد بوجود مولِّداتٍ شبه عشوائية ذاتِ معاملاتٍ غير تافهة؟

  • حتى لو وُجدت، فلماذا تكون هذه المولِّداتُ مفيدةً لنزع العشوائية عن الخوارزميات العشوائية؟ فبعدَ كلِّ شيء، لا يتعلّق تعريف — المولِّدُ شبه العشوائي ببرامج RNAND-TM أو RNAND-RAM، بل ببرامج NAND-CIRC حتميةٍ بلا عشوائيةٍ وبلا حلقات.

سنجيب الآن (جزئيًّا) عن كلا السؤالين. أمّا السؤالُ الأوّل، فلنُصرّح بصراحة بأنّنا لا نعرف كيف نُبرهن على وجود مولِّداتٍ شبه عشوائية مثيرٍ للاهتمام. والمقصودُ بـ«مثيرٍ للاهتمام» هو مولِّداتٌ شبه عشوائية تستوفي أنّ ϵ\epsilon ثابتٌ صغيرٌ (لنقل ϵ<1/3\epsilon<1/3)، وأنّ m>ℓm>\ell، وأنّ الدالّةَ GG نفسها يمكن حسابُها في زمن poly(m)poly(m). ومع ذلك، فإنّ لمّة — وجودُ مولِّداتٍ شبه عشوائية غيرِ فعّالة (يُرجى الرجوعُ إلى نصّها وبرهانها في نهاية هذا الفصل) تُبيّن أنّه إذا أسقطنا الشرطَ الأخير (قابليةَ الحساب في زمنٍ متعدّد الحدود) فإنّ هناك مولِّداتٍ شبه عشوائية يكون فيها mm أكبرَ أُسّيًّا من ℓ\ell.

توقّف وتأمّل

في هذه المرحلة قد ترغب في تخطّي ما هو قادم والنظر إلى نصّ العبارةِ لمّة — وجودُ مولِّداتٍ شبه عشوائية غيرِ فعّالة. لكنّ بما أنّ برهانَه دقيقٌ بعض الشيء، فإنّي أنصحك بتأجيل قراءته حتى تُتمّ قراءة بقية هذا الفصل.

من الوجود إلى الإنشائية (constructivity)

إنّ حقيقةَ أنّه يوجد مولِّدٌ شبه عشوائيّ لا تعني أنّ هناك مولِّدًا يمكن حسابُه بكفاءة. لكنّه يتبيّن أنّنا نستطيع قلبَ التعقيد «على رأسه» (turn it on its head) واستعمالَ عدمِ وجودِ خوارزمياتٍ سريعةٍ — كما هو مفترَض — لمسائلَ مثل 3SAT للحصول على مولِّداتٍ شبه عشوائية يمكن بعدئذٍ استعمالُها لتحويل الخوارزميات العشوائية إلى خوارزمياتٍ حتمية. ويُعرفُ هذا بـ_نمط_ «الصعوبة مقابل العشوائية» (Hardness vs Randomness paradigm). وأدّت نتائجٌ كثيرةٌ في هذا الاتجاه، معظمُها خارجَ نطاق هذه الدورة، الباحثينَ إلى الاعتقاد بالتخمين التالي:

اقتباس

تخمينُ PRG الأمثل: هناك دالّةٌ PRG:{0,1}∗→{0,1}PRG:\{0,1\}^* \rightarrow \{0,1\} قابلةٌ للحساب في زمنٍ متعدّد الحدود تُنتج مولِّدًا شبه عشوائيًّا ذا أمانٍ أُسّيّ.

وبالتحديد، يوجد ثابتُ δ>0\delta >0 بحيث لكلِّ ℓ\ell ولكلِّ m<2δℓm < 2^{\delta \ell}، إذا عرّفنا G:{0,1}ℓ→{0,1}mG:\{0,1\}^\ell \rightarrow \{0,1\}^m بأنّ G(s)i=PRG(s,i)G(s)_i = PRG(s,i) لكلِّ s∈{0,1}ℓs\in \{0,1\}^\ell و i∈[m]i \in [m]، فإنّ GG يكون مولِّدًا شبه عشوائيًّا بمعاملات (2δℓ,2−δℓ)(2^{\delta \ell},2^{-\delta \ell}).

توقّف وتأمّل

«تخمينُ PRG الأمثل» يستحق القراءةَ أكثرَ من مرّة. وهو يفترض أنّنا نستطيع الحصولَ على مولِّدٍ شبه عشوائيّ GG بمعاملات (T,ϵ)(T,\epsilon) بحيث يمكن حسابُ كلِّ بتٍ من أخرج GG في زمنٍ متعدّد الحدود في طولِ المدخل ℓ\ell، حيث يكون TT أُسّيَّ الحجم في ℓ\ell ويكون ϵ\epsilon أُسّيَّ الصغر في ℓ\ell. (لاحظ أنّنا لا نأمل أن يكون الخرجُ كلُّه قابلًا للحساب في ℓ\ell، لأنّ مجردَ كتابةِ الخرج تستغرق وقتًا طويلًا.)

لفهم سبب تسميتنا هذا المولِّدَ شبه العشوائيّ بـ«الأمثل»، من تمرينٍ جيّدٍ أن تُقنع نفسك بأنّه، مثلًا، لا يوجد مولِّدٌ شبه عشوائيّ بمعاملات (21.1ℓ,2−1.1ℓ)(2^{1.1\ell},2^{-1.1\ell}) (وفي الحقيقة لا بدّ أن يكون العددُ δ\delta في التخمين أصغرَ من 11). ولرؤية أنّنا لا يمكن أن يكون T≫2ℓT \gg 2^{\ell}، لاحظ أنّه إذا سمحنا لبرنامج NAND-CIRC بعددِ أسطرٍ أكبرَ بكثير من 2ℓ2^\ell فبإمكان هذا البرنامج أن «يثبّت» داخليًّا كلَّ مخارجَ GG على كلِّ مداخلِه الـ2ℓ2^\ell، وأن يستعملَ ذلك للتمييز بين سلسلةٍ من الشكل G(s)G(s) وسلسلةٍ مختارةٍ بانتظامٍ في {0,1}m\{0,1\}^m. ولرؤية أنّنا لا يمكن أن يكون ϵ≪2−ℓ\epsilon \ll 2^{-\ell}، لاحظ أنّنا بالتخمين على المدخل ss (وهو ما ينجح باحتمال 2−ℓ2^{-\ell}) نستطيع الحصولَ على برنامج NAND-CIRC صغير (أي ذا O(ℓ)O(\ell) سطرًا) يحقّق ميزّةَ 2−ℓ2^{-\ell} في التمييز بين مدخلٍ شبه عشوائيّ ومدخلٍ منتظم. وتفصيلُ هذه التفاصيل تمرينٌ موصى به بشدّة.

ونؤكّد مرّةً أخرى أنّ تخمينَ PRG الأمثل، كما يدلّ اسمه، تخمينٌ، ولا نعرف حتى الآن كيف نُبرهن عليه. وبخاصةٍ فإنّه أقوى من تخمين P≠NP\mathbf{P} \neq \mathbf{NP}. لكنّ لدينا بعضَ الأدلّة على صحّته. هناك طيفٌ من الأنواع المختلفة للمولِّدات شبه العشوائية، وهناك افتراضاتٌ أضعفُ من تخمين PRG الأمثل تكفي لإثبات أنّ BPP=P\mathbf{BPP}=\mathbf{P}. وبخاصةٍ فمعروفٌ أنّ هذا يتحقّق تحت افتراض وجود دالّةٍ F∈TIME(2O(n))F\in \mathbf{TIME}(2^{O(n)}) و ϵ>0\epsilon >0 بحيث لكلِّ nn كبيرٍ بما يكفي لا يكون F↾nF_{\upharpoonright n} في SIZE(2ϵn)SIZE(2^{\epsilon n}). اسمُ «تخمين PRG الأمثل» غيرُ قياسيّ. ويُعرف هذا التخمينُ أحيانًا في الأدبيات بأنّه وجودُ دوالّ شبه عشوائيةٍ قويّةٍ أُسّيًّا.[3]

فائدةُ المولِّدات شبه العشوائية

وسنبيّن الآن أنّ المولِّدات شبه العشوائية الأمثل مفيدةٌ في الواقع، عبر البرهان التالي:

مبرهنة — نزعُ عشوائية BPP\mathbf{BPP}

لنفترض أنّ تخمينَ PRG الأمثل صحيح. عندئذٍ BPP=P\mathbf{BPP}=\mathbf{P}.

يخبرنا تخمينُ PRG الأمثل أنّنا نستطيع تحقيقَ توسيعٍ أُسّيّ لـ ℓ\ell عملاتٍ عشوائيةً حققيقية إلى ما يصل إلى 2δℓ2^{\delta \ell} «عملةً شبه عشوائية». وبالنظرِ من الاتجاه الآخر، يسمحُ لنا بتقليل الحاجة إلى العشوائية، بأن نأخذ خوارزميةً تستعمل mm عملةً ونحوّلها إلى خوارزميةٍ لا تستعمل إلّا O(log⁡m)O(\log m) عملة. والخوارزميةُ من هذا النوع الثاني يمكن جعلُها حتميةً تمامًا بالعدّ على كلِّ الاحتمالاتِ الـ2O(log⁡m)2^{O(\log m)} (وهي متعدّدةُ الحدود في mm) لاختياراتِها العشوائية.

ولنتقدّم الآن في تفاصيل البرهان.

برهان

ليكن F∈BPPF\in \mathbf{BPP}، وليكن PP برنامجَ NAND-TM، وليكن a,b,c,da,b,c,d ثوابت، بحيث لكلِّ x∈{0,1}nx\in \{0,1\}^n ينفّذ P(x)P(x) في c⋅ndc \cdot n^d خطوةٍ على الأكثر، و Pr⁡r∼{0,1}m[P(x;r)=F(x)]≥2/3\Pr_{r\sim \{0,1\}^m}[ P(x;r) = F(x) ] \geq 2/3. بـ«فكّ الحلقة» (unrolling the loop) و«تثبيت» المدخل xx، يمكننا الحصولَ لكلِّ مدخل x∈{0,1}nx\in \{0,1\}^n على برنامج NAND-CIRC QxQ_x بعددٍ من الأسطر لا يتجاوز، مثلًا، T=10c⋅ndT=10c \cdot n^d، يأخذ mm بتًّا من المدخلات بحيث Q(r)=P(x;r)Q(r)=P(x;r).

والآن نفترض أنّ G:{0,1}ℓ→{0,1}G:\{0,1\}^\ell \rightarrow \{0,1\} مولِّدٌ شبه عشوائيّ بمعاملات (T,0.1)(T,0.1). عندئذٍ يمكننا، بشكلٍ حتميّ، تقديرَ الاحتمالِ p(x)=Pr⁡r∼{0,1}m[Qx(r)=1]p(x)= \Pr_{r\sim \{0,1\}^m}[ Q_x(r) = 1 ] بدقّة 0.10.1 في زمن O(T⋅2ℓ⋅m⋅cost(G))O(T \cdot 2^\ell \cdot m \cdot cost(G))، حيث cost(G)cost(G) هو الزمنُ اللازم لحساب بتٍ واحدٍ من أخرج GG.

والسببُ في ذلك أنّنا نعرف أنّ p~(x)=Pr⁡s∼{0,1}ℓ[Qx(G(s))=1]\tilde{p}(x)= \Pr_{s \sim \{0,1\}^\ell}[ Q_x(G(s)) = 1] سيعطينا مثلَ هذا التقدير لـ p(x)p(x)، ويمكننا حسابُ الاحتمال p~(x)\tilde{p}(x) بمجرّد تجريبِ كلِّ الاحتمالاتِ الـ2ℓ2^\ell الممكنة لـ ss. والآن، تحت تخمين PRG الأمثل يمكننا وضعَ T=2δℓT = 2^{\delta \ell} أو بما يكافئ ذلك ℓ=1δlog⁡T\ell = \tfrac{1}{\delta}\log T، ويكون زمنُ حسابنا الكلّي متعدّدَ الحدود في 2ℓ=T1/δ2^\ell = T^{1/\delta}. وبما أنّ T≤10c⋅ndT \leq 10c \cdot n^d فإنّ زمنَ التنفيذ هذا سيكون متعدّدَ الحدود في nn.

وهذا يُكمل البرهان، إذ إنّنا مضمونُون أنّ Pr⁡r∼{0,1}m[Qx(r)=F(x)]≥2/3\Pr_{r\sim \{0,1\}^m}[ Q_x(r) = F(x) ] \geq 2/3، ومن ثمّ فإنّ تقديرَ الاحتمال p(x)p(x) بدقّة 0.10.1 يكفي لحساب F(x)F(x).

P=NP\mathbf{P}=\mathbf{NP} و BPP\mathbf{BPP} مقابل P\mathbf{P}

هناك سؤالان في التعقيد الحسابي لا نستطيع حسمَهما:

  • هل P=NP\mathbf{P}=\mathbf{NP}؟ وهو ما نعتقد أنّ الإجابةَ عليه لا.

  • هل BPP=P\mathbf{BPP}=\mathbf{P}؟ وهو ما نعتقد أنّ الإجابةَ عليه بنعم.

لكنّنا نستطيع القول إنّ «الحكمةَ المتداولة» تصيبُ في أحدِ هذين السؤالين على الأقلّ. أي أنّه إذا أخطأنا في الأوّل فإنّنا نصيبُ في الثاني:

مبرهنة — مبرهنةُ سيبسر–غاكس (Sipser–Gács)

إذا كان P=NP\mathbf{P}=\mathbf{NP} فإنّ BPP=P\mathbf{BPP}=\mathbf{P}.

توقّف وتأمّل

قبل قراءة البرهان، من المفيد أن تفكّر في سبب أنّ هذه النتيجةَ ليست «واضحة». إذا كان P=NP\mathbf{P}=\mathbf{NP}، فبالإعطاء على أيِّ خوارزميةٍ عشوائية AA ومدخل xx، يمكننا أن نحدّد في زمنٍ متعدّد الحدود ما إذا كانت هناك سلسلة r∈{0,1}mr\in \{0,1\}^m من عملات AA العشوائية بحيث A(xr)=1A(xr)=1. المشكلةُ أنّه حتى لو كان Pr⁡r∼{0,1}m[A(xr)=F(x)]≥0.9999\Pr_{r\sim \{0,1\}^m}[A(xr)=F(x)] \geq 0.9999، فقد يبقى الحالُ كذلك أنّه حتى حين F(x)=0F(x)=0 توجد سلسلة rr بحيث A(xr)=1A(xr)=1.

البرهانُ دقيقٌ نوعًا ما. والأهمُّ بكثير أن تفهمَ نصَّ المبرهنة من أن تتتبّع كلَّ تفاصيلِ البرهان.

يتبع هذا البناءُ فكرةَ «حذف الكمّيات» (quantifier elimination) التي رأيناها في مبرهنة — انهيار تسلسل متعدّد الحدود المتدرّج. سنبيّن أنّه لكلِّ F∈BPPF \in \mathbf{BPP} يمكننا اختزالَ مسألة هل يحقّق مدخلٌ ما xx الشرطَ F(x)=1F(x)=1 على مسألة هل صادقت صيغةٌ من الشكل ∃u∈{0,1}m∀v∈{0,1}kP(u,v)\exists_{u\in \{0,1\}^m} \forall_{v \in \{0,1\}^k} P(u,v)، حيث m,km,k متعدّدان في طول xx و PP قابلةٌ للحساب في زمنٍ متعدّد الحدود. وبحسب مبرهنة — انهيار تسلسل متعدّد الحدود المتدرّج، إذا كان P=NP\mathbf{P}=\mathbf{NP} يمكننا البتَّ في زمنٍ متعدّد الحدود ما إذا كانت هذه الصيغةُ صادقةً أم كاذبة.

الفكرةُ وراء هذا البناء أنّه بالتكبير يمكننا الحصولَ على خوارزميةٍ عشوائية AA لحساب FF تستعمل mm عملةً بحيث لكلِّ x∈{0,1}nx\in \{0,1\}^n، إذا كان F(x)=0F(x)=0 فإنّ المجموعةَ S⊆{0,1}mS \subseteq \{0,1\}^m من العملات التي تجعل AA تُخرج 11 ضئيلةً جدًّا (أي أصغرُ أُسّيًّا بالنسبة إلى 2m2^m)، وإذا كان F(x)=1F(x)=1 فإنّ SS كبيرةٌ جدًّا (بحجمٍ قريبٍ من 2m2^m). عندئذٍ ننظرُ في «إزاحات» (shifts) المجموعة SS: مجموعاتٍ من الشكل S⊕sS \oplus s حيث s∈{0,1}ms\in \{0,1\}^m سلسلةٌ ما، على أنْ S⊕sS \oplus s معرَّفةٌ بـ{r⊕s  ∣  r∈S}\{ r \oplus s \;|\; r \in S \}. ولاحظ أنّه لكلِّ إزاحةٍ ss من هذا النوع، فإنّ عددَ عناصرِ S⊕sS \oplus s يساوي عددَ عناصرِ SS. ومن ثمّ، إذا كان F(x)=0F(x)=0، وبالتالي كانت SS «ضئيلة»، فإنّ اتحادَ المجموعات S⊕siS \oplus s_i لن يغطّي {0,1}m\{0,1\}^m مهما كان العددُ متعدّدَ الحدود من الإزاحات s0,…,sk∈{0,1}ms_0,\ldots,s_k \in \{0,1\}^m. ومن جهةٍ أخرى، سنبيّن أنّه إذا كانت SS كبيرةً جدًّا فإنّ هناك عددًا متعدّدَ الحدود من هذه الإزاحات بحيث ∪i=0k−1(S⊕si)={0,1}m\cup_{i=0}^{k-1} (S \oplus s_i) = \{0,1\}^m.

يمكننا التعبيرُ عن الشرط الذي يفيد وجودَ s0,…,sk−1s_0,\ldots,s_{k-1} بحيث ∪i∈[k](S⊕si)={0,1}m\cup_{i\in [k]} (S \oplus s_i) = \{0,1\}^m على هيئة عبارةٍ بعددٍ ثابتٍ من الكمّيات. (وبالتحديد، فإنّ هذا الشرط يتحقّق إذا كان لكلِّ y∈{0,1}my\in \{0,1\}^m يوجد s∈Ss \in S و i∈{0,…,k−1}i\in \{0,\ldots,k-1\} بحيث y=s⊕siy=s\oplus s_i.)

إذا كان  فبالتضخيم يمكننا ضمان وجود خوارزمية  تحسب  على مداخل طولها  باستعمال  عملةً كي يكون . وبالتالي إذا كان  فإنّ كلّ اختيارات  تقريبًا من الـ ستُسبب  تُخرج ، وإذا كان  فإنّ  لكلّ العملات  تقريبًا. ولإثبات مبرهنة سيبسر-غاتش (Sipser–Gács) نَعتبر «إزاحات» (shifts) عدّة للمجموعة  من العملات  التي تُحقّق . وإذا كان  فيمكننا إيجاد مجموعة من  إزاحات  تُحقّق . وإذا كان  فإنّ لكلّ مجموعةٍ كهذه . ويمكننا صياغة سؤال ما إذا كانت هناك مجموعةٌ كهذه من الإزاحات باستعمال عددٍ ثابتٍ من الكمّيات، ومن ثمّ حلّها في زمنٍ متعدد الحدود إذا كان .

برهان

ليكن F∈BPPF \in \mathbf{BPP}. باستعمال مبرهنة — التكبير، توجد خوارزميةٌ AA بزمنٍ متعدّد الحدود بحيث لكلِّ x∈{0,1}nx\in \{0,1\}^n، Pr⁡r∈{0,1}m[A(xr)=F(x)]≥1−2−n\Pr_{r \in \{0,1\}^m}[ A(xr)=F(x)] \geq 1 - 2^{-n}، حيث mm متعدّدةُ الحدود في nn. وبخاصةٍ (لأنّ الأُسّيّ يغلُب متعدّدَ الحدود، ويمكننا دائمًا افتراضُ أنّ nn كبيرٌ بما يكفي)، فإنّ Pr⁡r∈{0,1}m[A(xr)=F(x)]≥1−110m2  . \Pr_{r \in \{0,1\}^m}[ A(xr)=F(x)] \geq 1 - \tfrac{1}{10m^2} \;.

ليكن x∈{0,1}nx\in \{0,1\}^n، وليكن Sx⊆{0,1}mS_x \subseteq \{0,1\}^m المجموعةَ {r∈{0,1}m  :  A(xr)=1}\{ r\in \{0,1\}^m \;:\; A(xr)=1 \}. وبافتراضنا، إذا كان F(x)=0F(x)=0 فإنّ ∣Sx∣≤110m22m|S_x| \leq \tfrac{1}{10m^2}2^{m}، وإذا كان F(x)=1F(x)=1 فإنّ ∣Sx∣≥(1−110m2)2m|S_x| \geq (1-\tfrac{1}{10m^2})2^m.

لمجموعةٍ S⊆{0,1}mS \subseteq \{0,1\}^m وسلسلةٍ s∈{0,1}ms\in \{0,1\}^m، نعرّف المجموعةَ S⊕sS \oplus s بأنّها {r⊕s  :  r∈S}\{ r \oplus s \;:\; r\in S \}، حيث ⊕\oplus تدلّ على عملية XOR. أي أنّ S⊕sS \oplus s هي المجموعة SS «مُزاحةً» بمقدار ss. لاحظ أنّ ∣S⊕s∣=∣S∣|S \oplus s| = |S|. (من فضلك تأكّد من أنّك ترى سببَ صحّة ذلك.)

جوهرُ البرهان هو المُدّعَان التاليان:

المُدّعَ الأوّل: لكلِّ مجموعةٍ جزئية S⊆{0,1}mS \subseteq \{0,1\}^m، إذا كان ∣S∣≤11000m2m|S| \leq \tfrac{1}{1000m}2^m، فإنّ لكلِّ s0,…,s100m−1∈{0,1}ms_0,\ldots,s_{100m-1} \in \{0,1\}^m يكون ∪i∈[100m](S⊕si)⊊{0,1}m\cup_{i\in [100m]} (S \oplus s_i) \subsetneq \{0,1\}^m.

المُدّعَ الثاني: لكلِّ مجموعةٍ جزئية S⊆{0,1}mS \subseteq \{0,1\}^m، إذا كان ∣S∣≥122m|S| \geq \tfrac{1}{2}2^m، فإنّ هناك مجموعةَ سلاسل s0,…,s100m−1s_0,\ldots,s_{100m-1} بحيث ∪i∈[100m](S⊕si)={0,1}m\cup_{i\in [100m]} (S \oplus s_i) = \{0,1\}^m.

المُدّعَان الأوّلُ والثاني معًا يُلزمان المبرهنة. فهما يعنيان أنّه تحت افتراضاتنا، لكلِّ x∈{0,1}nx\in \{0,1\}^n، لدينا F(x)=1F(x)=1 إذا وإلّا فقط إذا

∃s0,…,s100m−1∈{0,1}m∪i∈[100m](Sx⊕si)={0,1}m \exists_{s_0,\ldots, s_{100m-1} \in \{0,1\}^m} \cup_{i\in [100m]} (S_x \oplus s_i) = \{0,1\}^m

وهي عبارةٌ يمكننا إعادةُ صياغتها على النحو التالي:

∃s0,…,s100m−1∈{0,1}m∀w∈{0,1}m(w∈(Sx⊕s0)∨w∈(Sx⊕s1)∨⋯w∈(Sx⊕s100m−1)) \exists_{s_0,\ldots, s_{100m-1} \in \{0,1\}^m} \forall_{w\in \{0,1\}^m} \Bigl( w \in (S_x \oplus s_0) \vee w \in (S_x \oplus s_1) \vee \cdots w \in (S_x \oplus s_{100m-1}) \Bigr)

أو بما يكافئ ذلك:

∃s0,…,s100m−1∈{0,1}m∀w∈{0,1}m(A(x(w⊕s0))=1∨A(x(w⊕s1))=1∨⋯∨A(x(w⊕s100m−1))=1) \exists_{s_0,\ldots, s_{100m-1} \in \{0,1\}^m} \forall_{w\in \{0,1\}^m} \Bigl( A(x(w\oplus s_0))=1 \vee A(x(w\oplus s_1))=1 \vee \cdots \vee A(x(w\oplus s_{100m-1}))=1 \Bigr)

وهي (لأنّ AA قابلةٌ للحساب في زمنٍ متعدّد الحدود) بالضبط من النوع الذي بيّن مبرهنة — انهيار تسلسل متعدّد الحدود المتدرّج أنّه يمكن البتُّ فيه في زمنٍ متعدّد الحدود إذا كان P=NP\mathbf{P}=\mathbf{NP}.

نرى أنّ كلَّ ما تبقّى هو إثباتُ المُدّعَ الأوّل و__المُدّعَ الثاني__. و__المُدّعَ الأوّل__ ينتج مباشرةً من الحقيقة التالية:

∣∪i∈[100m−1]Sx⊕si∣≤∑i=0100m−1∣Sx⊕si∣=∑i=0100m−1∣Sx∣=100m∣Sx∣  . \left| \cup_{i \in [100m-1]} S_x \oplus s_i \right| \leq \sum_{i=0}^{100m-1} |S_x \oplus s_i| = \sum_{i=0}^{100m -1} |S_x| = 100m|S_x| \;.

ولإثبات المُدّعَ الثاني، سنستعمل تقنيةً تُعرف بـ_الطريقة الاحتمالية_ (probabilistic method) (انظر برهانَ لمّة — وجودُ مولِّداتٍ شبه عشوائية غيرِ فعّالة لمناقشةٍ أوسع). ولاحظ أنّ هذا استعمالٌ مختلفٌ تمامًا للاحتمال عمّا في نصّ المبرهنة، فنحن لا نستعمل إلّا أدواتِ الاحتمال لإثبات عبارةٍ وجودية (existential).

برهانُ المُدّعَ الثاني: ليكن S⊆{0,1}mS \subseteq \{0,1\}^m مع ∣S∣≥0.5⋅2m|S| \geq 0.5 \cdot 2^m كما في نصّ المُدّعَ. ننظر في التجربة الاحتمالية التالية: نختار 100m100m إزاحةً عشوائية s0,…,s100m−1s_0,\ldots,s_{100m-1} مستقلّةً وعشوائيًّا في {0,1}m\{0,1\}^m، وننظر في الحدث GOODGOOD الذي يفيد أنّ ∪i∈[100m](S⊕si)={0,1}m\cup_{i\in [100m]}(S \oplus s_i) = \{0,1\}^m. ولإثبات المُدّعَ الثاني يكفي أن نبيّن أنّ Pr⁡[GOOD]>0\Pr[ GOOD ] > 0، لأنّ ذلك يعني، على وجه الخصوص، أنّه يوجد إزاحاتُ s0,…,s100m−1s_0,\ldots,s_{100m-1} تستوفي هذا الشرط.

لكلِّ z∈{0,1}mz \in \{0,1\}^m، عرِّف الحدثَ BADzBAD_z بأنّه يتحقّق إذا كان z∉∪i∈[100m−1](S⊕si)z \not\in \cup_{i\in [100m-1]}(S \oplus s_i). والحدثُ GOODGOOD يتحقّق إذا أخفق الحدثُ BADzBAD_z لكلِّ z∈{0,1}mz\in \{0,1\}^m، ومن ثمّ فإنّ هدفَنا هو إثبات أنّ Pr⁡[∪z∈{0,1}mBADz]<1\Pr[ \cup_{z\in \{0,1\}^m} BAD_z ] <1. وبحسب حدّ الاتحاد، يكفي لإثبات ذلك أن نبيّن أنّ Pr⁡[BADz]<2−m\Pr[ BAD_z ] < 2^{-m} لكلِّ z∈{0,1}mz\in \{0,1\}^m. عرِّف الحدثَ BADziBAD_z^i بأنّه يتحقّق إذا كان z∉S⊕siz\not\in S \oplus s_i. وبما أنّ كلَّ إزاحة sis_i تُختار باستقلال، فإنّ لكلِّ zz ثابتةٍ تكون الأحداثُ BADz0,…,BADz100m−1BAD_z^0,\ldots,BAD_z^{100m-1} مستقلّةً تبادليًّا،[4] ومن ثمّ

Pr⁡[BADz]=Pr⁡[∩i∈[100m−1]BADzi]=∏i=0100m−1Pr⁡[BADzi]  .\Pr[ BAD_z ] = \Pr[ \cap_{i\in [100m-1]} BAD_z^i ] = \prod_{i=0}^{100m-1} \Pr[BAD_z^i] \;.

وهذا يعني أنّ النتيجةَ ستنتج إذا بيّنا أنّ Pr⁡[BADzi]≤12\Pr[ BAD_z^i ] \leq \tfrac{1}{2} لكلِّ z∈{0,1}mz\in \{0,1\}^m و i∈[100m]i\in [100m] (فذلك يسمحُ بتحديد الطرف الأيمن في المعادلة بالحدّ 2−100m2^{-100m}). بعبارةٍ أخرى، نحتاج أن نبيّن أنّه لكلِّ z∈{0,1}mz\in \{0,1\}^m ولكلِّ مجموعةٍ S⊆{0,1}mS \subseteq \{0,1\}^m مع ∣S∣≥122m|S| \geq \tfrac{1}{2} 2^m،

Pr⁡s∼{0,1}m[z∈S⊕s]≥12  .\Pr_{s \sim \{0,1\}^m}[ z \in S \oplus s ] \geq \tfrac{1}{2}\; .

ولإثبات ذلك، نلاحظ أنّ z∈S⊕sz \in S \oplus s إذا وإلّا فقط إذا كان s∈S⊕zs \in S \oplus z (هل ترى لماذا). ومن ثمّ يمكننا إعادةُ كتابة الاحتمال في الطرف الأيسر من المعادلة على هيئة Pr⁡s∼{0,1}m[s∈S⊕z]\Pr_{s\sim \{0,1\}^m}[ s\in S \oplus z]، وهو يساوي ببساطةٍ ∣S⊕z∣/2m=∣S∣/2m≥1/2|S \oplus z|/2^m = |S|/2^m \geq 1/2! وهذا يُنهي برهانَ المُدّعَ الثاني ومن ثمّ برهانَ مبرهنة — مبرهنةُ سيبسر–غاكس (Sipser–Gács).

الوجودُ غير الإنشائي للمولِّدات شبه العشوائية (متقدّم، اختياري)

وسنبيّن الآن أنّه إذا لم نُصرْ على الإنشائية (constructivity) للمولِّدات شبه العشوائية، بإمكاننا إثباتُ وجود مولِّداتٍ شبه عشوائية يكون خرجُها أكبرَ أُسّيًّا في طول المدخل.

لمّة — وجودُ مولِّداتٍ شبه عشوائية غيرِ فعّالة

هناك ثابتٌ مطلقٌ CC بحيث لكلِّ ϵ,T\epsilon,T، إذا كان ℓ>C(log⁡T+log⁡(1/ϵ))\ell > C (\log T + \log (1/\epsilon)) و m≤Tm \leq T، فإنّ هناك مولِّدًا شبه عشوائيًّا بمعاملات (T,ϵ)(T,\epsilon) مدعوًّا G:{0,1}ℓ→{0,1}mG: \{0,1\}^\ell \rightarrow \{0,1\}^m.

يستخدم البرهانُ تقنيةً بالغةَ النفع تُعرف بـ«الطريقة الاحتمالية»، وهي ليست صعبةً رياضيًّا جدًّا لكنّها قد تكون مُربكةً في البداية.[5] الفكرةُ هي تقديمُ برهانٍ «غير إنشائيّ» لوجود المولِّدِ شبه العشوائيّ GG، بإظهار أنّه إذا اختير GG عشوائيًّا فإنّ احتمالَ أن يكون مولِّدًا شبه عشوائيًّا صالحًا بمعاملات (T,ϵ)(T,\epsilon) يكون موجبًا. وبخاصةٍ فإنّ هذا يعني أنّه يوجد GG واحدٌ صالحٌ كمولِّدٍ شبه عشوائيّ بمعاملات (T,ϵ)(T,\epsilon). والطريقةُ الاحتماليةُ ليست إلّا تقنيةَ برهانٍ لإثبات وجود دالّةٍ كهذه. وهدفُنا في النهاية هو إثباتُ وجود دالّةٍ حتميةٍ GG تستوفي الشرط.

قد تكون المناقشةُ أعلاه مجرّدةً نوعًا ما في هذه المرحلة، لكنّها ستتّضح بعد الاطلاع على البرهان.

برهان

ليكن ϵ,T,ℓ,m\epsilon,T,\ell,m كما في نصّ المُلزَم. نحتاج إلى إثبات أنّه توجد دالّةٌ G:{0,1}ℓ→{0,1}mG:\{0,1\}^\ell \rightarrow \{0,1\}^m «تخدع» كلَّ برنامجٍ PP من TT سطرًا بالمعنى المبيَّن في المعادلة. وسنبيّن أنّ هذا ينتج عن المُدّعَ التالي:

المُدّعَ الأوّل: لكلِّ برنامج NAND-CIRC ثابتٍ PP، إذا اخترنا G:{0,1}ℓ→{0,1}mG:\{0,1\}^\ell \rightarrow \{0,1\}^m عشوائيًّا فإنّ احتمالَ خرقِ المعادلة لا يتجاوز 2−T22^{-T^2}.

قبل إثبات المُدّعَ الأوّل، لنرَ لماذا يستلزم ذلك لمّة — وجودُ مولِّداتٍ شبه عشوائية غيرِ فعّالة. يمكننا تعريفُ دالّةٍ G:{0,1}ℓ→{0,1}mG:\{0,1\}^\ell \rightarrow \{0,1\}^m بجدولِ حقائقِها (truth table)، أو ببساطةٍ بقائمةِ قيمِها على كلِّ مداخلِها الممكنة الـ2ℓ2^\ell. وبما أنّ كلَّ خرجٍ سلسلةٌ من mm بتًّا، فبإمكاننا أيضًا اعتبارُ GG سلسلةً في {0,1}m⋅2ℓ\{0,1\}^{m\cdot 2^\ell}. ونعرّف Fℓm\mathcal{F}^m_\ell بأنّها مجموعةُ كلِّ الدوالّ من {0,1}ℓ\{0,1\}^\ell إلى {0,1}m\{0,1\}^m. وكما ناقشنا أعلاه يمكننا تعريفَ Fℓm\mathcal{F}_\ell^m بـ{0,1}m⋅2ℓ\{0,1\}^{m\cdot 2^\ell}، واختيارُ دالّةٍ عشوائية G∼FℓmG \sim \mathcal{F}_\ell^m يوافق اختيارَ سلسلةٍ عشوائيةٍ من m⋅2ℓm\cdot 2^\ell بتًّا.

لكلِّ برنامج NAND-CIRC PP، ليكن BPB_P هو الحدثَ الذي يفيد أنّه إذا اخترنا GG عشوائيًّا من Fℓm\mathcal{F}_\ell^m فإنّ المعادلة يُنتهك بالنسبة إلى البرنامج PP. ومن المهمّ فهم ما هو فضاءُ العيّناتِ الذي يُعرَّف فوقه الحدثُ BPB_P، إذ إنّ هذا الحدثَ يعتمد على اختيار GG، ومن ثمّ فإنّ BPB_P مجموعةٌ جزئيةٌ من Fℓm\mathcal{F}_\ell^m. والطريقةُ المكافئةُ لتعريف الحدث BPB_P هي أنّه مجموعةُ الدوالّ كلِّها التي تُرسِل {0,1}ℓ\{0,1\}^\ell إلى {0,1}m\{0,1\}^m وتُنتهِك المعادلة، أو بعبارةٍ أخرى:

BP={G∈Fℓm  ∣  ∣12ℓ∑s∈{0,1}ℓP(G(s))−12m∑r∈{0,1}mP(r)∣>ϵ}     B_P = \left\{ G \in \mathcal{F}_\ell^m \; \big| \; \left| \tfrac{1}{2^\ell}\sum_{s\in \{0,1\}^\ell} P(G(s)) - \tfrac{1}{2^m}\sum_{r \in \{0,1\}^m}P(r) \right| > \epsilon \right\} \;\;

(استبدلنا هنا عباراتِ الاحتمال في المعادلة بمجاميعَ مكافئة، بقصد تقليلِ الالتباس بشأن فضاءِ العيّناتِ الذي يُعرَّف فوقه BPB_P.)

لفهم هذا البرهان، من الضروري أن تتوقّف هنا وترى كيف يقابل تعريفُ BPB_P أعلاه المعادلةَ المعادلة. وقد يستدعي الأمرُ إعادةَ قراءة النصّ أعلاه مرّةً أو مرّتين، لكنّه تمرينٌ جيّدٌ في تحليل العبارات الاحتمالية وتعلّم كيفية تحديد فضاءِ العيّنات الذي تقابله هذه العبارات.

والآن، بيّنا في مبرهنة — عدِّ البرامج أنّه، بعد إعادة تسمية المتغيّرات (وهو ما لا يُغيّر عملَ البرنامج)، هناك 2O(Tlog⁡T)2^{O(T\log T)} برنامجَ NAND-CIRC بعددٍ من الأسطر لا يتجاوز TT. وبما أنّ Tlog⁡T<T2T\log T < T^2 من أجل TT كبيرٍ بما يكفي، فإنّ هذا يعني أنّه إذا كان المُدّعَ الأوّل صحيحًا، فبحسب حدّ الاتحاد يكون احتمالُ اتحادِ BPB_P على جميع برامج NAND-CIRC التي لا يتجاوز عددُ أسطرِها TT لا يتجاوز 2O(Tlog⁡T)2−T2<0.12^{O(T\log T)}2^{-T^2} < 0.1 من أجل TT كبيرٍ بما يكفي. والأهمُّ عندنا في العدد 0.10.1 هو أنّه أصغرُ من 11. وبخاصةٍ فإنّ هذا يعني أنّه يوجد G∗∈FℓmG^* \in \mathcal{F}_\ell^m واحدٌ بحيث إنّ G∗G^* لا تنتهك المعادلة بالنسبة إلى أيِّ برنامج NAND-CIRC بعددِ أسطرٍ لا يتجاوز TT، وهو ما يعني بالضبط أنّ G∗G^* مولِّدٌ شبه عشوائيّ بمعاملات (T,ϵ)(T,\epsilon).

وعليه، يكفي لإتمام برهان لمّة — وجودُ مولِّداتٍ شبه عشوائية غيرِ فعّالة إثباتُ المُدّعَ الأوّل. اختيارُ G:{0,1}ℓ→{0,1}mG: \{0,1\}^\ell \rightarrow \{0,1\}^m عشوائيًّا يعني اختيارَ L=2ℓL=2^\ell سلسلةً عشوائية y0,…,yL−1∈{0,1}my_0,\ldots,y_{L-1} \in \{0,1\}^m وتركَ G(x)=yxG(x)=y_x (بتحديد {0,1}ℓ\{0,1\}^\ell و [L][L] عبر التمثيل الثنائيّ). وهذا يعني أنّ إثبات المُدّعَ يكفي أن نبيّن أنّه لكلِّ دالّةٍ ثابتةٍ P:{0,1}m→{0,1}P:\{0,1\}^m \rightarrow \{0,1\}، إذا كان L>2C(log⁡T+log⁡ϵ)L > 2^{C (\log T + \log \epsilon)} (وهو ما يمكننا ضمانُّه بأنّه أكبرَ من 10T2/ϵ210 T^2/\epsilon^2 بوضع C>4C>4)، فإنّ احتمالَ أنّ ∣1L∑i=0L−1P(yi)−Pr⁡s∼{0,1}m[P(s)=1]∣>ϵ \left| \tfrac{1}{L}\sum_{i=0}^{L-1} P(y_i) - \Pr_{s \sim \{0,1\}^m}[P(s)=1] \right| > \epsilon لا يتجاوز 2−T22^{-T^2}.

ينتج المعادلة مباشرةً من حدّ تشرنوف. وفعلًا، إذا جعلنا لكلِّ i∈[L]i\in [L] المتغيّرَ العشوائيَّ XiX_i يساوي P(yi)P(y_i)، فإنّ y0,…,yL−1y_0,\ldots,y_{L-1} يُختار باستقلالٍ وعشوائيًّا، وبذلك تكون هذه متغيّراتٍ عشوائيةً مستقلّةً ومتطابقةَ التوزيع ذاتِ متوسّطٍ Ey∼{0,1}m[P(y)]=Pr⁡y∼{0,1}m[P(y)=1]\E_{y \sim \{0,1\}^m}[P(y)]= \Pr_{y\sim \{0,1\}^m}[ P(y)=1]، ومن ثمّ فإنّ احتمالَ انحرافها عن توقّعها بمقدار ϵ\epsilon لا يتجاوز 2⋅2−ϵ2L/22\cdot 2^{-\epsilon^2 L/2}.

/images/introtcs/lec_17_model_rand-6.webp

خلاصة

  • يمكننا نمذجةُ الخوارزميات العشوائية إمّا بإضافة عمليةِ «قذفِ عملات» خاصّة، أو بافتراض مدخلٍ إضافيٍّ يُختار عشوائيًّا.

  • الصنفُ BPP\mathbf{BPP} يضمّ مجموعةَ الدوالّ البوليانية التي يمكن حسابُها بخوارزمياتٍ عشوائيةٍ بزمنٍ متعدّد الحدود.

  • BPP\mathbf{BPP} صنفُ حسابٍ في الحالة الأسوأ: فالخوارزميةُ العشوائيةُ لحساب دالّةٍ ما يجب أن تحسبَها صحّةً باحتمالٍ عالٍ على كلِّ مدخل.

  • يمكننا تكبيرَ احتمال نجاح الخوارزمية العشوائية من أيِّ قيمةٍ أكبرُ تمامًا من 1/21/2 إلى احتمالِ نجاحٍ أُسّيِّ القربِ من 11.

  • نعرف أنّ P⊆BPP⊆EXP\mathbf{P} \subseteq \mathbf{BPP} \subseteq \mathbf{EXP}.

  • ونعرف أيضًا أنّ BPP⊆P/poly\mathbf{BPP} \subseteq \mathbf{P_{/poly}}.

  • العلاقةُ بين BPP\mathbf{BPP} وNP\mathbf{NP} غيرُ معروفة، لكنّنا نعرف أنّه إذا كان P=NP\mathbf{P}=\mathbf{NP} فإنّ BPP=P\mathbf{BPP}=\mathbf{P}.

  • المولِّداتُ شبه العشوائية كائناتٌ تأخذ «بذرة» (seed) عشوائيةً قصيرة وتوسّعها إلى خرجٍ أطولَ بكثير «يبدو عشوائيًا» في نظر الخوارزميات الفعّالة. ونخمّن أنّ مولِّداتٍ شبه عشوائية قويّةً أُسّيًّا موجودة. وتحت هذا التخمين، BPP=P\mathbf{BPP}=\mathbf{P}.

التمارين

ملاحظاتٌ مرجعية

في هذا الفصل نتجاهل مسألةَ كيف نحصل على البتّات العشوائية عمليًّا. يمكن اعتبارُ خرجِ كثيرٍ من العمليات الفيزيائية، سواء كانت حرارةً حرارية، أو كماليّةً للشبكة والقرص الصلب، أو نمطَ كتابة المستخدم وحركةَ فأرته، وغيرها، سلسلةً ثنائيةَ البتّات مأخوذةً عيّنةً من توزيعٍ ما μ\mu قد تكون له صعوبةُ توقّعٍ (أو إنتروبيا) كبيرة، لكنّه ليس بالضرورة التوزيعَ المنتظمَ فوقِ {0,1}n\{0,1\}^n. وفعلًا، كما تُظهر هذه الورقة، فإنّ حتى قذفَ العملات (في العالم الحقيقي) لا يملك بالضبط توزيعَ سلسلةٍ عشوائيةٍ منتظمة. وعليه، لاستعمال القياساتِ الناتجة في الخوارزميات العشوائية، عادةً ما يلزم تطبيقُ عمليةِ «تقطير» أو استخلاصِ العشوائية على القياسات الخام لتحويلها إلى التوزيع المنتظم. كتابُ فادان [@vadhan2012pseudorandomness] مصدرٌ ممتازٌ لمزيدٍ من المناقشة حول كلٍّ من مستخلِصاتِ العشوائية ومولِّداتِ العشوائية شبه العشوائية.

الاسمُ BPP\mathbf{BPP} اختصارٌ لعبارة «bounded probability polynomial time» (زمنٍ متعدّد الحدود باحتمالٍ مقيَّد). وهذا حادثٌ تاريخيّ: فلربّما كان ينبغي تسميةُ هذا الصنف RP\mathbf{RP} أو PP\mathbf{PP}، لكنّ أسماءً أخرى كانت قد احتلَّتها أصنافٌ أخرى.

برهانُ مبرهنة — العشوائيةُ لا تساعد في الحساب غير المنتظم ينتج في الواقع أكثرَ ممّا يقوله. فبإمكاننا استعمالُ حجج «فكّ الحلقة» (unrolling the loop) ذاتها التي استعملناها من قبل لبيان أنّ تقييدَ كلِّ دالّةٍ في BPP\mathbf{BPP} على {0,1}n\{0,1\}^n يمكن حسابُه أيضًا ببرنامج RNAND-CIRC متعدّدِ الحجم في nn (أي برنامج NAND-CIRC مع عملية RAND). وكما في حالة P\mathbf{P} مقابل SIZE(poly(n))SIZE(poly(n))، هناك أيضًا دوالّ خارج BPP\mathbf{BPP} يمكن حسابُ قيودِها ببرامجِ RNAND-CIRC متعدّدةِ الحجم في nn. ومع ذلك، فإنّ برهانَ مبرهنة — العشوائيةُ لا تساعد في الحساب غير المنتظم يُبيّن أنّ حتى هذه الدوالّ يمكن حسابُها ببرامجِ NAND-CIRC متعدّدةِ الحجم في nn دون استعمال عمليات rand. ويمكن صياغةُ ذلك بأنّ BPSIZE(T(n))⊆SIZE(O(nT(n)))BPSIZE(T(n)) \subseteq SIZE(O(n T(n))) (حيث تُعرَّف BPSIZEBPSIZE بالطريقة الطبيعية باستعمال برامج RNAND). والنسخةُ الأقوى من مبرهنة — العشوائيةُ لا تساعد في الحساب غير المنتظم التي ذكرناها يمكن صياغتُها بأنّ BPP/poly=P/poly\mathbf{BPP_{/poly}} = \mathbf{P_{/poly}}.


  1. في وقت كتابة هذا الكتاب، كان أكبرُ صنفِ تعقيدٍ «طبيعيّ» لا نستطيع استبعادَ احتوائه في BPP\mathbf{BPP} هو الصنفَ NEXP\mathbf{NEXP}، وهو صنفٌ لم نعرّفه في هذه الدورة، ويقابل الزمنَ الأُسّيَّ غيرَ الحتميّ. انظر هذه الورقة لمناقشة هذا السؤال. ↩︎

  2. من القصصِ الطريفة حالةٌ حديثة تمكّن فيها المحتالون من توقّع «مولِّد الأرقام شبه العشوائية» الناقص المستعمَل في آلات القمار لخداع الكازينوهات. وللأسف لا نعرف تفاصيلَ كيف فعلوا ذلك، لأنّ القضية أُغلقت. ↩︎

  3. يُعرف المولِّدُ شبه العشوائيُّ من النوع الذي نفترضه، حيث يمكن حسابُ كلِّ بتٍ من أخرجه على حدةٍ في زمنٍ متعدّد الطول في طولِ البذرة، عادةً باسم مولِّدِ الدوالّ شبه العشوائية (pseudorandom function generator). ولمزيدٍ من النتائج والروابط المثيرةِ للاهتمام في دراسة شبه العشوائية (pseudorandomness)، انظر هذا الكتاب لأون ساليل فادان (Salil Vadhan). ↩︎

  4. شرطُ الاستقلالية هنا دقيق. فليس بالضرورة أن تكون جميعَ الأحداثِ الـ2m×100m2^m \times 100m من الشكل {BADzi}z∈{0,1}m,i∈[100m]\{ BAD_z^i \}_{z\in \{0,1\}^m,i\in [100m]} مستقلّةً تبادليًّا. إنّما لدى z∈{0,1}mz \in \{0,1\}^m ثابتةٍ تكون الأحداثُ الـ100m100m من الشكل BADziBAD_z^i مستقلّةً تبادليًّا. ↩︎

  5. وهناك كتابٌ كاملٌ (وموصى به بشدّة) من تأليف ألون وسبنسر (Alon and Spencer) مخصَّصٌّ لهذه الطريقة. ↩︎