NP-completeness :
נאמר ש היא NP-שלמה אם היא -קשה וגם .
משפט: קיימת בעיה שהיא -שלמה הוכחה: נשתמש ב מכונת טיורינג אוניברסלית . נזכיר שמכונת טיורינג אוניברסלית מקבלת כקלט תיאור של מכונת טיורינג וקלט על המכונה ומחזירה .
נגדיר את בעיית ההכרעה הבאה:
כמו כן נשים לב ש זאת מכונת טיורינג שמקבלת 2 קלטים ו
זאת אכן בעיית -שלמה, נוכיח זאת.
- נוכל להגדיר מוודא פולינומי מהצורה כאשר כלומר חסום פולינומית באורך הקלט. והמוודא יעבוד באופן הבא:
הרץ את על לכל היותר צעדים.
אם התקבלה תשובה במהלך הריצה החזר אחרת החזר .
מהגדרה מתקיים כדרוש.
היא שלמה - נראה שלכל קיימת רדוקציית קארפ מ ל . נוכל לבנות את פונקציית המרת הקלטים באופן הבא
כאשר הוא המוודא הפולינומי של . הקלט ל אורכו כלומר פולינומי לאורך הקלט.
יהי הפולינום החוסם את זמן הריצה של כפונקצייה של אורך הקלט שלו. כלומר
כאשר זאת פונקציית זמן הריצה של על קלט באורך מסויים. אכן נקבל ש אמ״מ קיים חסום פולינומית ב כך ש אמ״מ שכן השתמשנו באלגוריתם הוידאו כייצוג של המכונה שלנו. כדרוש.
Cook-Levin
משפט cook-levin אומר שבעית SAT היא -שלמה.
ההוכחה שלו דורשת להסתכל על בעיה אחרת - נתון מעגל בוליאני ויש להכריע האם יש לו השמה מספקת. מעגל בוליאני - הוא גרף ללא מעגלים מכוון שקודקודיו מתחלקים ל3 סוגים
קודקודי קלט- ללא קשתות נכנסות
קודקודי פלט - ללא קשתות יוצאות, קשת נכנסת אחת
שערים- קודקודים עם ו
נשים לב ש - בהינתן השמה בוליאנית אפשר בזמן פולינומי באורך ייצוג המעגל לבדוק שהיא אכן מתקבלת על ידי המעגל. כלומר שהמעגל מחזיר עליה .
CSAT היא NP-שלמה
השלב הראשון של ההוכחה אם כן היא להראות שלכל קיימת חשיבה פולינומית כך ש כאשר
תהי , אזי ל ישנו מוודא פולינומי כך ש וזמן הריצה של חסום על ידי .
נבנה טבלה שמייצגת ריצה של מכונת טיורינג על הקלט לפי הריצה של (אפשר לעשות זאת כי הראנו שכל בעיה ב אפשר ״להמיר״ לבעיית NP-שלמה שהקלט שלה הוא מכונת טיורינג)
פונקציית המעברים הינה
כלומר בהינתן תו מהא״ב ומצב נחזיר מצב חדש התו עליו הסרט יצביע ותזוזה של הסרט ימינה או שמאלה או שנשאר במקום לאחר שיורדים לשורה הבאה. נשים לב שמההתנהגות הנ״ל עולה כי לכל תא בשורה כלשהי ערכו ייקבע לכל היותר משלושת התאים שנמצאים מעליו בידיוק. נוכל לנצל את זה כדי לבנות מעגל בוליאני בגודל קבוע של 4 כאשר הפלט הוא הערך שנקבע מפונקציית המעברים כתוצאה משלושת הערכים שמעליו.
נתבונן בטבלת ריצת המוודא (המכונה הדו מימדית) על קלט נרצה להמיר את טבלת הריצה למעגל לוגי כך ש ואז יתקיים
נשים לב שטבלת ריצת המוודא היא בגודל לכל היותר כאשר בשורה הראשונה רשום הקלט ובשורה האחרונה נמצא הפלט. המכונה תעשה לכל היותר צעדים כי כל צעד של הראש נרד שורה בטבלה.
בשורה הראשונה בכל תא רשומים שני ערכים, הערך הראשון הוא ביט של אינפורמציה מתוך הקלט והערך השני הוא ״-״ או תיאור מצב המכונה. לכל התאים פרט לתא בו נמצא הראש של המכונה יהיה ״-״ בערך השני של התא ורק בתא בו נמצא הראש יהיה ערך השני התואם למצב המכונה. כמו כן, כל צד של טבלת החישוב (מתוך צעדים) מחושב על פי טבלת הצעדים של המכונה (פונקציית המצבים המוגדרת למעלה).
ערך כל תא בטבלת החישוב נקבע רק על-פי שלושת התאים שמעליו. לכן ניתן לבנות מעגל קטן בגודל קבוע שלא תלוי בגודל הקלט אך תלוי בטבלת המצבים של המכונה, הקובע ערך התא על פי שלושת ערכי התאים מעליו.
כעת משהבנו איך תיאור המכונה יעבוד ונראה על הטבלה הנ״ל נוכל לנצל זאת כדי לבנות את המעגל . ניקח את הטבלה ונבנה ממנה מעגל בגודל המורכב מאיחוד של המעגלים הקטנים יותר שקובעים את הערך של כל תא בשורה מסויימת, המשתנים של המעגל יהיו שנמצאים בשורה הראשונה לאחר ההשמה. תוצאת הפלט תהיה accept או true אמ״מ כלומר המכונה מכריעה את הקלט. במצב שבוא נקבל שגם המעגל שלנו לא ספיק ולכן
כדרוש.
קיימת רידוקציית קארפ מ CSAT ל SAT
כעת הוכחנו שבעיית היא -שלמה, כל שנשאר לעשות הוא לבנות רידוקציית קארפ ממנה ל . מטרנזיטיביות הרידוקציית יתקיים שגם היא שלמה. נרצה שבהינתן מעגל בוליאני בנות נוסחה בצורת כך ש .
באופן נאיבי היינו יכולים לבנות טבלת אמת למעגל ולבנות ממנה נוסחה בצורת אך הפתרון הזה אינו פולינומי כי עבור משתנים טבלת האמת תכיל תוצאות בטבלת האמת.
נשים לב להבחנה שאם מספר המשתנים היה קבוע היינו יכולים ב להמיר אותו לנוסחה מהצורה של .
אם כן, האינטואיצייה תהיה ״לפצל״ את המעגל לכמה מעגלים קטנים, מכל אחד נבנה נוסחה בצורת ולבסוף נחזיר נוסחה שתהיה מורכבת מכל הנוסחאות הקטנות.
נסמן את קודקודי הקלט ב ואת השערים ב ונגדיר נוסחה עם משתנים כנגד קודקוד הפלט והשערים ב . למשל עבור המעגל
נקבל נוסחה מהצורה
נשים לב שהוספנו פרדיקט של EQ שהמטרה שלו היא לבדוק שיוויון בין המשתנה לנוסחה שממנה הוא מורכב במעגל. באופן הזה הגרף מבטיח שהפרקדיט EQ יחזיר רק אם המשתנה ב״גרף״ החדש שבנינו יקבל ערך ששקול לערך שהוא מקבל במעגל . תחת ההבנה הזאת נוכל לקחת כל פרדיקט EQ ולבנות טבלת אמת בין שני הגורמים שמרכיבים אותו. אלו יהיו תמיד על מספר משתנים בגודל קבוע כי מתחילים מהנעלמים ומתקדמים לכיוון הפלט. לאחר שנמיר את ה״גרף״ לפסוקיות בצורה נשים בין כולם ונגיע לתוצאה הרצויה (כמעט).
לכל שער במעגל נגדיר נוסחה בצורת נסמנה שתהיה מסופקת אמ״מ הערך שמקבל המשתנה עקבי עם הערך שמקבל השער במעגל . לדוגמה עבור
T
T
T
T
T
T
F
F
T
F
T
F
T
F
F
T
F
T
T
F
F
T
F
T
F
F
T
F
F
F
F
T
נזכיר שכדי להמיר את הפסוקית לצורת לוקחים את כל הפסוקיות שמחזירות ומפעילים not כל כולם ולכן
לאחר שיש לנו את כל הפסוקיות נרצה לבנות פסוקית נוספת מהקודקוד שנכנס לקודקוד הפלט. כלומר כרגע יש לנו את התוצאה של
נרצה לוודא בנוסף שגם הקודקוד שנכנס לקודקוד הפלט הוא ולכן נוסיף פסוקית נוספת במקרה הנ״ל . לבסוף נחזיר
זמן בנייה מספר השערים ב חסום ליניארית באורך הקלט. עבור כל שער ביצענו צעדים (כיוון שמשתמשים לכל היותר ב 3 קודקודים) כדי לבנות נוסחה .
כעת נרצה להוכיח ש : נניח לכן קיימת השמה עבור קודקודי הקלט במעגל שתספק אותו. נסתכל על ההשמה לנוסחה בה כל משתנה מקבל את הערך וכל משתנה מקבל את הערך של השער במעגל ל .
לפי הבנייה כל מסופקת וכן הפסוקית מסופקת כי .
נניח לכן קיימת השמה למשתנים ב שמספקת אותה. נשים לב שההצבה הנ״ל מספקת את המעגל מהבנייה של .
הבחנה
3SAT היא גם כן -שלמה כי ראינו עכשיו שברידוקצייה מ ל בכל פסוקית יש לכל היותר 3 ליטרלים
הבחנה
ראינו ש היא וראינו רדוקציית קארפ מ ל ולכן היא גם כן שייכת ל
נתון גרף ונתון מספר . נרצה לדעת האם גרף ישנם קודקודים שמכסים את כל הקשתות.
נרצה להראות שזאת אכן בעיה שלמה.
ראשית קל להראות שהיא ב כי תמיד אפשר לבדוק בזמן פולינומי שאוסף קודקודים שניתן כעדות, אכן מכסה את הקשתות.
כעת, נראה רדוקציית קארפ מ ל .
לשם הרידקוצייה נוכיח את טענת העזר הבאה:
עבור ו קבוצה בת״ל המקיימת . אזי, היא קבוצה המקיימת . יותר מזה,
הסבר:
אם בלתי תלוי אזי לכל קשת מתקיים ש או ש כי אחרת שניהם ב וזו סתירה לכך ש בת״ל. כלומר בהכרח מתקיים שאחד מהם נמצא ב ולכן זאת תכסה את כל הקשתות.
מצד שני, אם היא ב אזי היא בת״ל תחת אותו הסבר, לא ייתכן שישנה קשת ששני קצותיה נמצאים בתוך .