NP ביניים

בתורת הסיבוכיות, NP ביניים היא מחלקת כל בעיות ההכרעה במחלקה NP שאינן נמצאות ב-P וגם אינן NP-שלמות (NPC). המחלקה של בעיות אלו נקראת NPI. נשים לב שאם P=NP, אזי NPI היא ריקה. הכיוון השני גם כן נכון, כלומר אם P ≠ N P {\displaystyle P\neq NP} , אזי NPI אינה ריקה. תוצאה לא טריוויאלית זו נובעת ממשפט לדנר, שהוכח בשנת 1975 על ידי ריצ'רד לדנר. משפט לדנר קובע שאם P ≠ N P {\displaystyle P\neq NP} , אזי NPI אינה ריקה. אמנם משפט לדנר בונה שפה מלאכותית לצורך ההוכחה, אך בעיות מפורסמות רבות, כגון בעיית הפירוק לגורמים והלוג הדיסקרטי נחשדות להיות ב-NPI. משפט לדנר קובע שאם המחלקות P ו-NP שונות אחת מהשנייה, אזי קיימת שפה שאינה NP-שלימה ואינה ב-P. נוכיח את המשפט בשתי דרכים שונות. שתי הדרכים משתמשות בשיטת הוכחה בלכסון. תהיינה { M i } i = 1 ∞ {\displaystyle \{M_{i}\}_{i=1}^{\infty }} כל המכונות הפולינומיות אשר רצות לכל היותר בזמן | x | i {\displaystyle |x|^{i}} כל אחת, ותהיינה באופן דומה { f i } i = 1 ∞ {\displaystyle \{f_{i}\}_{i=1}^{\infty }} כל הפונקציות הפולינומיות שרצות בזמן לכל היותר | x | i {\displaystyle |x|^{i}} . נשים לב שכל המכונות הפולינומיות וכל הפונקציות הפולינומיות נמצאות כאן. נגדיר שפה - A = { x | x ∈ S A T     and  f ( | x | )  is even } {\displaystyle A=\{x|x\in SAT\ \ {\text{and }}f(|x|){\text{ is even}}\}} ברור שאם הפונקציה f חשיבה בזמן פולינומי אזי A ∈ N P {\displaystyle A\in NP} . נגדיר את הפונקציה f כך: f ( 0 ) = f ( 1 ) = 2 {\displaystyle f(0)=f(1)=2} . עבור n ≥ 1 {\displaystyle n\geq 1} נגדיר את f ( n + 1 ) {\displaystyle f(n+1)} : אם l o g f ( n ) ( n ) ≥ n {\displaystyle log^{f(n)}(n)\geq n} אז נשאיר את f ( n + 1 ) = f ( n ) {\displaystyle f(n+1)=f(n)} אחרת יש לנו שני מקרים: f ( n ) = 2 i {\displaystyle f(n)=2i} (כלומר ערך זוגי), נבדוק האם קיים קלט x, | x | ≤ l o g ( n ) {\displaystyle |x|\leq log(n)} כך ש- M i ( x ) {\displaystyle M_{i}(x)} מקבלת את x וגם f ( | x | ) {\displaystyle f(|x|)} אי-זוגי או x ∉ S A T {\displaystyle x\notin SAT} , או M i ( x ) {\displaystyle M_{i}(x)} דוחה את x וגם f ( | x | ) {\displaystyle f(|x|)} זוגי או x ∈ S A T {\displaystyle x\in SAT} אם קיים כזה x, אזי f ( n + 1 ) = f ( n ) + 1 {\displaystyle f(n+1)=f(n)+1} . אחרת f ( n + 1 ) = f ( n ) {\displaystyle f(n+1)=f(n)} . f ( n ) = 2 i + 1 {\displaystyle f(n)=2i+1} (כלומר ערך אי זוגי), נבדוק האם קיים קלט x, | x | ≤ l o g ( n ) {\displaystyle |x|\leq log(n)} כך ש- x ∈ S A T {\displaystyle x\in SAT} וגם מתקיים f ( | f i ( x ) | ) {\displaystyle f(|f_{i}(x)|)} אי-זוגי או f i ( x ) ∉ S A T {\displaystyle f_{i}(x)\notin SAT} x ∉ S A T {\displaystyle x\notin SAT} וגם f ( | f i ( x ) | ) {\displaystyle f(|f_{i}(x)|)} זוגי וגם f i ( x ) ∉ S A T {\displaystyle f_{i}(x)\notin SAT} אם קיים כזה x, אזי בדומה למקודם, f ( n + 1 ) = f ( n ) + 1 {\displaystyle f(n+1)=f(n)+1} . אחרת f ( n + 1 ) = f ( n ) {\displaystyle f(n+1)=f(n)} . עכשיו נסביר מדוע זה עובד. ראשית כל נשים לב שאין קשר בין הפונקציות f i {\displaystyle f_{i}} לפונקציה f {\displaystyle f} מתקיים שהסדרה של המכונות הפולינומיות שלנו לא יכולות לפתור את SAT, מכיוון שהנחנו ש- P ≠ N P {\displaystyle P\neq NP} , ולכן יש גם אינסוף xים שהמכונה נכשלת עליהם, כלומר לכל מספר טבעי n קיים x באורך גדול או שווה ל-n שהמכונה נכשלת עליו. לכן אם המכונה מקבלת את x אבל x בכלל לא ב-SAT, אז מתקיים שהמכונה הזאת כבר לא תוכל להכריע את השפה שהגדרנו A, מכיוון ש-x יהיה בשפה A (שהרי f ( n ) {\displaystyle f(n)} זוגי וגם x לא ב-SAT). באופן אנלוגי נותנים את התנאי השני. אם המכונה לא מקבלת את x אבל x כן ב-SAT, אז מצאנו שוב x שהמכונה M i {\displaystyle M_{i}} נכשלת עליו. אחרי שהבנו איך הבניה מפרידה את SAT מכל מכונה פולינומית, נסביר בקצרה את העניין עם הפונקציה f {\displaystyle f} . השימוש בפונקציה הזו נועד כדי שנוכל לסנן עוד מילים מהשפה, כדי שהיא לא תהיה NPC (שלמה). לכן בכל תנאי, במקום לדרוש המילה תהיה או לא תהיה ב-SAT, אנחנו דורשים שהמילה תהיה או לא תהיה ב-A, כלומר מוסיפים את הדרישה ש- f ( | x | ) {\displaystyle f(|x|)} זוגי. ברור שנמצא x כזה, כי הנחנו ש- P ≠ N P {\displaystyle P\neq NP} , אז אין לכל מכונה פולינומית יש קלט x עבורו היא מחזירה תשובה לא נכונה. עתה סיימנו להוכיח רעיונית שהשפה A אינה נמצאת ב-P. נרצה להוכיח שהשפה גם אינה NPC, כלומר לא קיימת רדוקציה פולינומית מ-SAT אל A. כמו שהגדרנו מקודם, יש לנו רשימה של כל הפונקציות הפולינומיות הקיימות. אם השפה A היא אכן NPC אזי אחת מהפונקציות היא רדוקציה פולינומית מ-SAT אל A. לכן אנחנו מחפשים עבור כל פונקציה f i {\displaystyle f_{i}} קלט x עבורו הפונקציה לא מהווה רדוקציה ל-A (וכתוב למעלה איך עושים את זה פורמלית בדיוק). כעת נותר להוכיח שהתנאים לבסוף מתקיימים, כלומר שאין איזה i עבורו f i {\displaystyle f_{i}} כן מהווה רדוקציה ל-SAT. לכל פונקציה f i {\displaystyle f_{i}} שהיא רדוקציה ל-SAT, מההנחה ש P ≠ N P {\displaystyle P\neq NP} אורך הפלט של הפונקציה f i {\displaystyle f_{i}} גדל, ולכן בסופו של דבר נגיע ל- | f i ( x ) | {\displaystyle |f_{i}(x)|} מספיק גדול שיהיה אי-זוגי ונגרום לכך ש- f i {\displaystyle f_{i}} לא תהיה רדוקציה טובה. הדרישה שאם l o g f ( n ) ( n ) ≥ n {\displaystyle log^{f(n)}(n)\geq n} אז f ( n + 1 ) = f ( n ) {\displaystyle f(n+1)=f(n)} נועדה כדי שבכל שלב נוכל להשתמש בפונקציות f ( | f i ( x ) | ) {\displaystyle f(|f_{i}(x)|)} בסך הכל הוכחנו בחלק הראשון ש-A לא ב-P, ובחלק השני שאין רדוקציה פולינומית מ-SAT ל-A, ולכן הפונקציה A נמצאת ב-NPI, כדרוש. נגדיר את { M i } i = 1 ∞ , { f i } i = 1 ∞ {\displaystyle \{M_{i}\}_{i=1}^{\infty },\{f_{i}\}_{i=1}^{\infty }} כמקודם. נגדיר שפה L = { ϕ 01 f ( n ) − | n | − 1 | ϕ ∈ S A T ∧ | ϕ | = n } {\displaystyle L=\{\phi 01^{f(n)-|n|-1}|\phi \in SAT\land |\phi |=n\}} אנחנו נשאיר את f ( n ) = n i {\displaystyle f(n)=n^{i}} עד שנקיים את התנאי ה-i, ואז נקדם את f ( n ) {\displaystyle f(n)} להיות f ( n ) = n i + 1 {\displaystyle f(n)=n^{i+1}} כעת נתאר אלגוריתם לחישוב f ( n ) {\displaystyle f(n)} . נתחיל עם i = 1 {\displaystyle i=1} . לכל n נבצע את הפעולות הבאות: f ( n ) = n i {\displaystyle f(n)=n^{i}} . נבדוק האם קיים קלט | x | ≤ l o g ( n ) {\displaystyle |x|\leq log(n)} , כך שמתקיים: M i ( x ) {\displaystyle M_{i}(x)} מקבל את x, אבל x ∉ L {\displaystyle x\notin L} M i ( x ) {\displaystyle M_{i}(x)} דוחה את x, אבל x ∈ L {\displaystyle x\in L} במידה ויש כזה x, נגדיר i = i + 1 {\displaystyle i=i+1} . אחרת לא נשנה את i ונעבור ל-n הבא. מכיוון שאנחנו בודקים רק עבור | x | ≤ l o g ( n ) {\displaystyle |x|\leq log(n)} ניתן לחשב את f בזמן פולינומי ברור שהבנייה לא נתקעת על i מסוים, מכיוון שבמקרה כזה הייתה רדוקציה טריוויאלית מ-SAT ל-L, אבל המכונות M i {\displaystyle M_{i}} הן פולינומיות, וזה סותר את ההנחה P ≠ N P {\displaystyle P\neq NP} . לכן מילאנו את התנאי שהשפה L אינה פולינומית. כעת נניח שיש פונקציה f j ( ⋅ ) {\displaystyle f_{j}(\cdot )} עושה רדוקציה פולינומית מ-SAT ל-L. נרצה להראות שזה גורר ש-SAT פתירה בזמן פולינומי (וכנגד ההנחה שלנו, כמובן) הוכחה. מאחר ש f j ( x ) {\displaystyle f_{j}(x)} רצה לכל היותר בזמן | x | j {\displaystyle |x|^{j}} , מתקיים | f j ( ϕ ) | ≤ | ϕ | j {\displaystyle |f_{j}(\phi )|\leq |\phi |^{j}} . חייב להיות n 0 {\displaystyle n_{0}} כך שלכל n ≥ n 0 {\displaystyle n\geq n_{0}} מתקיים f ( n ) = n k , k > j {\displaystyle f(n)=n^{k},k>j} . מכיוון ש- n 0 {\displaystyle n_{0}} קבוע, אפשר פשוט לפתור את כל הבעיות מאורך קטן או שווה לו בזמן אקספוננציאלי. עכשיו נניח שיש לנו נוסחה ϕ {\displaystyle \phi } כך ש | ϕ | ≥ n 0 {\displaystyle |\phi |\geq n_{0}} . אם f j ( ϕ ) {\displaystyle f_{j}(\phi )} לא בטווח של f {\displaystyle f} , אז f j ( ϕ ) ∉ L ⟹ ϕ ∉ S A T {\displaystyle f_{j}(\phi )\notin L\implies \phi \notin SAT} . אחרת, f j ( ϕ ) = ψ 01 f ( m ) − m − 1 {\displaystyle f_{j}(\phi )=\psi 01^{f(m)-m-1}} כש- m = | ψ | {\displaystyle m=|\psi |} ו ϕ ∈ S A T {\displaystyle \phi \in SAT} אם ורק אם ψ ∈ S A T {\displaystyle \psi \in SAT} . עד כה השגנו ש f ( m ) ≤ f j ( ϕ ) < | ϕ | j {\displaystyle f(m)\leq f_{j}(\phi )<|\phi |^{j}} . אז | ψ | = m ≤ | ϕ | j / k {\displaystyle |\psi |=m\leq |\phi |^{j/k}} אם f ( m ) = m k {\displaystyle f(m)=m^{k}} . מאחר ש | ϕ | > n 0 {\displaystyle |\phi |>n_{0}} מתקיים k > j {\displaystyle {\ce {k>j}}} אז | ψ | < | ϕ | {\displaystyle |\psi |<|\phi |} . אם | ψ | ≤ n 0 {\displaystyle |\psi |\leq n_{0}} אז אפשר לבדוק אם ψ {\displaystyle \psi } ב-SAT ולכן גם אפשר לבדוק אם ϕ {\displaystyle \phi } ב-SAT. אחרת נריץ את האלגוריתם רקורסיבית (לא יותר מ-n פעמים) מכיוון שגודל הפלט גדל בין הרצה להרצה, וכל ריצה מתבצעת בזמן פולינומי. בעיית הפירוק לגורמים בעיית הלוג הדיסקרטי בעיית איזומורפיזם בין גרפים וחוגים מציאת המנצח במשחק זוגיות בעיית איזומורפיזם בין גרפים מציאת מימד VC של בעיה Michael Sipser, Introduction to the Theory of Computation, Thompson, 1996 אם היה נשאר קבוע אז היה פותר את SAT בזמן פולינומי לא הגדלנו את הפונקציה כל הזמן הזה הפלט של f i ( x ) {\displaystyle f_{i}(x)} הוא לכל היותר באורך | x | i {\displaystyle |x|^{i}} , ומדרך הפעולה ברור ש- i < n {\displaystyle i<n} מכיוון שאי אפשר לכתוב אורך יותר מהזמן המוקצב למכונה שמחשבת את הפונקציה