משתמש:אור שחף/עבודה ב"שימושי המתמטיקה ביומיום": הבדלים בין גרסאות בדף

מתוך Math-Wiki
מ (המשך יבוא)
מאין תקציר עריכה
 
(16 גרסאות ביניים של אותו משתמש אינן מוצגות)
שורה 1: שורה 1:
== הבעיה ==
ב[https://en.wikipedia.org/wiki/Knights_and_Knaves חידות אבירים ונוכלים (Knights and Knaves)] מדברים על אי מסוים בו כל התושבים הם או אבירים, הדוברים תמיד אמת, או נוכלים, אשר תמיד משקרים. בחלק מהבעיות מוסיפים סוג נוסף – מרגלים, שעונים אמת או שקר באקראי, אך לא נעסוק בהם. החידות דנות באורח באי המנסה להסיק מספר מסקנות – לרוב את הסוג של כמה מהתושבים על סמך כמה עובדות (שמרביתן מהצורה "תושב <math>X</math> טען ש־<math>P</math>") ו/או על סמך שאלות כן/לא שעליו לשאול.
באי מסוים כל התושבים הם או אבירים, הדוברים תמיד אמת, או נוכלים, אשר תמיד משקרים. בחלק מהבעיות מוסיפים סוג נוסף – מרגלים, שעונים אמת או שקר באקראי. החידות דנות באורח באי המנסה להסיק מספר מסקנות (בדרך כלל את הסוג של כמה מהתושבים) על סמך טענות שהתושבים טענו או על סמך שאלות כן/לא שעליו לשאול, ולפעמים גם על סמך כמה עובדות שידועות לו.


* '''דוגמה 1:''' האורח נתקל בתושבים <math>A,B,C,D</math>. אין מרגלים, וידוע ש־<math>A,C</math> מסוגים שונים. <math>A</math> טוען ש־<math>B,C</math> מאותו סוג, <math>B</math> טוען ש־<math>A</math> נוכל ו־<math>C</math> טוען ש־<math>D</math> מאותו סוג כמוהו (כמו <math>C</math>). יש למצוא את הסוג של כל תושב.
* '''דוגמה 1:''' האורח נתקל בתושבים <math>A,B,C,D</math>. ידוע ש־<math>A,C</math> מסוגים שונים. <math>A</math> טוען ש־<math>B,C</math> מאותו סוג, <math>B</math> טוען ש־<math>A</math> אביר ו־<math>C</math> טוען שהוא מאותו סוג כמו <math>D</math>. מה הסוג של כל תושב?
* '''דוגמה 2:''' האורח נתקל בשלושה תושבים. אחד מהם אביר, אחד נוכל ואחד מרגל. אילו 3 שאלות של כן/לא הוא יכול לשאול על מנת לגלות את הסוג של כל אחד מהם?
* '''דוגמה 2:''' האורח נתקל בשלושה תושבים, והשלישי שבהם טוען שלפחות אחד משני התושבים האחרים הוא אביר. אילו 2 שאלות כן/לא יכול האורח לשאול את התושבים על מנת להסיק את הסוגים שלהם?


נרצה ליצור מודל מתמטי לפתרון בעיות מסוג זה.
ניצור מודל מתמטי לפתרון בעיות מסוג זה.


== סימונים והגדרות ==
__תוכן__
באלגברה בוליאנית מסמנים <math>\mathrm T</math> כפסוק אמת ו־<math>\mathrm F</math> כפסוק שקר. באופן דומה, אם תושב <math>A</math> הוא אביר אז נסמנו כ־<math>\mathrm T</math> ואם נוכל – <math>\mathrm F</math>. אם הוא מרגל נסמן <math>\mathrm S</math>. אם תושב <math>B</math> יכול להיות מרגל אז נסמן את נכונות הטענה ה־<math>i</math> במספר שלו כ־<math>b_i</math>. כלומר, אם הטענה נכונה אז <math>b_i\Leftrightarrow\mathrm T</math> ואחרת <math>b_i\Leftrightarrow\mathrm F</math>. מכך נובע שאם הטענה ה־<math>i</math> של <math>B</math> היא <math>P</math> אז <math>b_i\Leftrightarrow P</math>, ומסיבות שיובנו בהמשך נעדיף את הסימון השקול <math>b_i\leftrightarrow P\Leftrightarrow\mathrm T</math>. מובן שאם <math>B</math> אביר או נוכל אז <math>\forall i:\ b_i\Leftrightarrow B</math>, ולכן אם אנו כבר יודעים שתושב <math>B</math> אינו מרגל אז נסמן את טענותיו פשוט כ־<math>B</math>.
{| class="wikitable" style="direction:ltr; float:left; margin-top:0;"
 
! <math>P</math> !! <math>Q</math> !! <math>P\leftrightarrow Q</math>
=== דוגמה ===
באמצעות סימונים אלו נפתור את דוגמה 1 כמערכת משוואות פשוטה. <math>A</math> טוען ש־<math>B,C</math> מאותו סוג, כלומר הוא טוען <math>B\leftrightarrow C</math>. מכך נובעת משוואה (1) במערכת המשוואות הבאה. מהטענות של <math>B,C</math> נובעות המשוואות (2) ו־(3), ומהעובדה ש־<math>A,C</math> שונים נובעת משוואה (4):
{{left|<math>\begin{array}{llcl}
(1)&A\leftrightarrow B\leftrightarrow C&\Leftrightarrow&\mathrm T\\
(2)&B\leftrightarrow A\leftrightarrow\mathrm F&\Leftrightarrow&\mathrm T\\
(3)&C\leftrightarrow C\leftrightarrow D&\Leftrightarrow&\mathrm T\\
(4)&A\leftrightarrow C&\Leftrightarrow&\mathrm F\end{array}</math>}}
באופן שקול:
{{left|<math>\begin{array}{llcl}
(1)&A\leftrightarrow B\leftrightarrow C&\Leftrightarrow&\mathrm T\\
(2)&A\leftrightarrow B&\Leftrightarrow&\mathrm F\\
(3)&D&\Leftrightarrow&\mathrm T\\
(4)&A\leftrightarrow C&\Leftrightarrow&\mathrm F\end{array}</math>}}
עתה נציב את (2) ב־(1) ונקבל <math>\mathrm F\leftrightarrow C\Leftrightarrow\mathrm T</math>, כלומר <math>C\Leftrightarrow\mathrm F</math>. נציב זאת ב־(4) ונקבל <math>A\Leftrightarrow\mathrm T</math>, ואם נציב את התוצאה ב־(2) נקבל <math>B\Leftrightarrow\mathrm F</math>. לסיכום, <math>A,D</math> אבירים ו־<math>B,C</math> נוכלים.
 
== חידות ללא מרגלים ==
=== חידות לינאריות ===
{| class="wikitable" style="float:left; clear:left; direction:ltr;"
|+ טבלה 1
|-
! <math>x</math> !! <math>y</math> !! <math>\varphi(x+y)</math> !! <math>\varphi(x)\leftrightarrow\varphi(y)</math>
|-
|-
| 0 || 0 || T || T
| 0 || 0 || 1
|-
|-
| 0 || 1 || F || F
| 0 || 1 || 0
|-
|-
| 1 || 0 || F || F
| 1 || 0 || 0
|-
|-
| 1 || 1 || T || T
| 1 || 1 || 1
|}
|}
{| class="wikitable" style="float:left; clear:left; direction:ltr;"
באלגברה בוליאנית מסמנים <math>1</math> כפסוק אמת ו־<math>0</math> כפסוק שקר. נעזר בסימון <math>\leftrightarrow</math> לציון אופרטור שקילות לוגית, המוגדר כמפורט בטבלה שמשמאל. <math>=</math> הוא יחס שקילות בין כל שני פסוקים שקולים לוגית, כלומר אם ידוע ש־<math>P\leftrightarrow Q</math> נותן 1 אז נוכל לסמן <math>P=Q</math>. אם תושב <math>X</math> הוא אביר אז נסמן <math>X=1</math> ואם נוכל – <math>X=0</math>. לפיכך, אם <math>X</math> טוען טענה <math>P</math> אז <math>X=P</math>.
|+ טבלה 2
 
|-
:'''דוגמה 1.1:''' באמצעות סימונים אלו נציג את ''דוגמה 1'' כמערכת משוואות בוליאניות. <math>A</math> טוען ש־<math>B,C</math> מאותו סוג, כלומר הוא טוען <math>B\leftrightarrow C</math>. מכך נובעת משוואה (1) במערכת המשוואות הבאה. מהטענות של <math>B,C</math> נובעות המשוואות (2) ו־(3), ומהעובדה ש־<math>A,C</math> שונים נובעת משוואה (4):
! <math>x</math> !! <math>y</math> !! <math>\varphi(x\cdot y)</math> !! <math>\varphi(x)\or\varphi(y)</math>
{{left|<math>\begin{array}{llcl}
|-
(1)&A\leftrightarrow B\leftrightarrow C&=&1\\
| 0 || 0 || T || T
(2)&B\leftrightarrow A\leftrightarrow1&=&1\\
|-
(3)&C\leftrightarrow C\leftrightarrow D&=&1\\
| 0 || 1 || T || T
(4)&A\leftrightarrow C&=&0\end{array}</math>}}
|-
:באופן שקול:
| 1 || 0 || T || T
{{left|<math>\begin{array}{llcl}
|-
(1)&A\nleftrightarrow B\nleftrightarrow C&=&1\\
| 1 || 1 || F || F
(2)&A\nleftrightarrow B&=&0\\
|}
(3)&D&=&1\\
אלו חידות שניתן לפתור כמערכת משוואות לינאריות. ניצור איזומורפיזם מהשדה <math>(\mathbb Z_2,+,\cdot)</math> ל־<math>(\{\mathrm T,\mathrm F\},\leftrightarrow,\or)</math> ע״י <math>\varphi:x\mapsto\begin{cases}\mathrm T,&x=0\\\mathrm F,&x=1\end{cases}</math>. נראה שזהו אכן איזומורפיזם:
(4)&A\nleftrightarrow C&=&1\end{array}</math>}}
* חח״ע ועל – טריוויאליים.
:כאשר <math>\nleftrightarrow</math> מציין אופרטור XOR, המסומן גם כ־<math>\oplus</math>.
* <math>\varphi(x+y)\Leftrightarrow\varphi(x)\leftrightarrow\varphi(y)</math>: טבלה 1.
 
* <math>\varphi(x\cdot y)\Leftrightarrow\varphi(x)\or\varphi(y)</math>: טבלה 2.
בסימונים אלו נגדיר ''עובדה'' בתור משוואה בוליאנית שנתונה בחידה, כגון <math>A\leftrightarrow C=0</math> מ''דוגמה 1''.
 
=== חידות ללא שאלות ===
==== פתרון כמערכת משוואות ====
ברגע שיש לנו ניסוח מתמטי של החידה כמערכת משוואות אפשר לפתור אותה כפי שעושים באלגברה בוליאנית. נתעמק בחידות שניתן לפתור כמערכת משוואות לינאריות.
 
ניצור איזומורפיזם מהשדה <math>(\mathbb Z_2,+,\cdot)</math> ל־<math>(\{0,1\},\nleftrightarrow,\and)</math> ע״י <math>x\mapsto\begin{cases}0,&x=[0]_2\\1,&x=[1]_2\end{cases}</math>. מכך נובע ש־<math>(\{0,1\},\nleftrightarrow,\and)</math> שדה. סכום <math>\sum_{i=1}^m P_i</math> (כאשר <math>\forall i:\ P_i\in\{0,1\}</math>) יוגדר בתור <math>P_1\nleftrightarrow\dots\nleftrightarrow P_m</math> ומכפלה <math>\prod_{i=1}^m P_i</math> בתור <math>P_1\and\dots\and P_m</math>. גם כפל מטריצות מוגדר בהתאם.
 
כעת, אם התושבים הם <math>X_1,\dots,X_n</math> אז נסמן <math>\mathbf x:=\begin{pmatrix}X_1\\\vdots\\X_n\end{pmatrix}</math>. אם כל <math>P_i</math> מייצג נעלם <math>X_j</math> או קבוע <math>1,0</math> אז נוכל להציג כל <math>P_1\leftrightarrow\dots\leftrightarrow P_n=P_{n+1}</math> בתור סכום של נעלמים שונים השווה לקבוע: לדוגמה, <math>B\leftrightarrow A\leftrightarrow1=1</math> מהניסוח המתמטי של ''דוגמה 1'' שקול ל־<math>A\nleftrightarrow B=0</math>, כלומר ל־<math>\sum_{X_i\in\{A,B\}}X_i=0</math>. לכן נוכל להגדיר מטריצת מקדמים <math>\mathbf A</math> ווקטור מקדמים חופשיים <math>\mathbf b</math> כך ש־<math>\mathbf{Ax}=\mathbf b</math>.
 
:'''דוגמה 1.2:''' ההצגה המטריציונית של ''דוגמה 1'' היא
{{left|<math>\underbrace\begin{pmatrix}1&1&1&0\\1&1&0&0\\0&0&0&1\\1&0&1&0\end{pmatrix}_\mathbf A\underbrace\begin{pmatrix}A\\B\\C\\D\end{pmatrix}_\mathbf x=\underbrace\begin{pmatrix}1\\0\\1\\1\end{pmatrix}_\mathbf b</math>}}
 
הצגה זו מאפשרת לנו למצוא מה הסוג של כל תושב ע״י פתרון מערכת משוואות לינאריות. יתרה מזאת, לפי משפט רושה–קפלי (Rouché–Capelli) יש פתרון ל־<math>\mathbf{Ax}=\mathbf b</math> אם״ם <math>\mathbf b\in\operatorname{span}\left\{\operatorname{Col}_i(\mathbf A)\right\}_{i=1}^n</math> כאשר <math>\operatorname{Col}_i(\mathbf A)</math> העמודה ה־<math>i</math> של <math>\mathbf A</math>, ואם כן אז מרחב הפתרונות הוא ממימד <math>n-\operatorname{rank}(\mathbf A)</math>. מכאן נובע שאנו יכולים לבדוק האם קיים פתרון לחידה, ואם כן לחשב את מספר הפתרונות בתור <math>2^{n-\operatorname{rank}(\mathbf A)}</math>. מובן שבד״כ יש רק פתרון אחד, כלומר <math>\operatorname{rank}(\mathbf A)=n</math> ואז, אם ל־<math>\mathbf A</math> יש <math>n</math> שורות אז היא הפיכה. אם לא אז ניתן למחוק כמה שורות של <math>\mathbf A</math> (וגם את השורות המתאימות ב־<math>\mathbf b</math>) כך שהיא תהיה הפיכה.
 
:'''דוגמה 1.3:''' נפתור את ''דוגמה 1''. חישוב פשוט מראה ש־<math>\mathbf A</math> הפיכה (ומכאן שיש פתרון יחיד) ו־<math>\mathbf A^{-1}=\begin{pmatrix}1&1&0&1\\1&0&0&1\\1&1&0&0\\0&0&1&0\end{pmatrix}</math>. לכן <math>\mathbf x=\mathbf A^{-1}\mathbf b=\begin{pmatrix}0\\0\\1\\1\end{pmatrix}</math> – התושבים <math>A,B</math> נוכלים ו־<math>C,D</math> אבירים.
 
==== פתרון באמצעות ניחוש ====
מנחשים את סוגו של אחד מהתושבים ומציבים במשוואות. אם מגיעים לסתירה אז יש להחליף את הסוג שנבחר ולפתור מחדש, אחרת נקבל מערכת משוואות פשוטה יותר. אם המערכת הזו עוד לא נותנת פתרון יחיד יש להמשיך לנחש עד לפתרון הסופי. אם החלפנו ניחוש ושוב הגענו לסתירה אז אין פתרון.
 
:'''דוגמה 1.4:''' ננחש ש־<math>A</math> מ''דוגמה 1'' הוא אביר. מ־(2) נובע ש־<math>B</math> אביר ומ־(4) ש־<math>C</math> נוכל, אך זה סותר את (1) ולכן <math>A</math> נוכל. הצבה מחדש נותנת ש־<math>B</math> נוכל ו־<math>C,D</math> אבירים, וקיבלנו פתרון יחיד.
 
באופן כללי זו שיטה קלה יותר. אחד מהחסרונות שלה הוא שקשה למצוא באמצעותה את מספר הפתרונות, מה שעושים ע״י בדיקת היתכנות הסוג השני לכל תושב שניחשנו לו סוג.
 
:'''דוגמה 3:''' האורח נתקל בתושבים <math>A,B,C</math>. <math>A</math> טוען ש־<math>B</math> נוכל וגם <math>C</math> אביר, כלומר <math>A\leftrightarrow(\neg B\and C)=1</math>. אם ננחש ש־<math>A</math> אביר נקבל פתרון יחיד, אך אם ננחש שהוא נוכל נקבל ש־<math>\neg B\and C=0</math>. במקרה הזה אפשר לנחש ש־<math>B</math> נוכל (ולקבל פתרון יחיד) או אביר (ולקבל שני פתרונות). מספר הפתרונות הוא אם כן <math>\underbrace1_{A\text{ is a knight}}+\underbrace{\overbrace1^{B\text{ is a knave}}+\overbrace2^{B\text{ is a knight}}}_{A\text{ is a knave}}=4</math>. המערכת אינה לינארית ולכן לא ניתן לחשב את מספר הפתרונות באמצעות משפט רושה–קפלי.
 
חיסרון מהותי יותר הוא ששינוי של <math>\mathbf b</math> דורש פתרון מחדש של הבעיה כולה. כמו כן, אנו נעזר בפתרון באמצעות מערכת משוואות לינאריות בחידות שבהן שואלים שאלות.
 
=== חידות עם שאלות ===
''שאלה'' היא פסוק לוגי שאנחנו יכולים לבחור ותלוי בסוגים של תושבים. למשל, את השאלה "האם <math>X_2</math> אביר?" שמופנת ל־<math>X_1</math> נייצג בתור <math>X_1\leftrightarrow X_2</math>, ואת השאלה "<math>X_1</math>, האם 3=3?" בתור <math>X_1\leftrightarrow1=X_1</math>. נסמן כ־<math>n</math> את מספר התושבים ונניח שמותר לשאול עד <math>m</math> שאלות. נסמן <math>\mathbf q=\begin{pmatrix}Q_1\\\vdots\\Q_m\end{pmatrix}</math> כווקטור השאלות. ''תשובה'' תוגדר כערך בוליאני השקול לוגית לשאלה ששאלנו, ונסמן ב־<math>\mathbf r=\begin{pmatrix}r_1\\\vdots\\r_m\end{pmatrix}</math> את וקטור התשובות. מההגדרות נובע ש־<math>\mathbf q=\mathbf r</math>. <math>\mathbf x</math> מוגדר כמקודם, ואז ניתן לחשוב על <math>\mathbf q</math> כעל פונקציה <math>\mathbf x\mapsto\mathbf r</math>.
 
:'''דוגמה 2.1:''' יש 3 תושבים (<math>n=3</math>), מותר לשאול עד 2 שאלות (<math>m=2</math>) ו־<math>X_3</math> טוען ש־<math>X_1</math> ו/או <math>X_2</math> אבירים, דהיינו <math>X_3\leftrightarrow(X_1\or X_2)=1</math>. וקטור השאלות <math>\mathbf q=\begin{pmatrix}X_1\leftrightarrow X_2\\X_1\end{pmatrix}</math>, לדוגמה, מאפשר לפתור את החידה כי תמיד מתקיים <math>\mathbf x=\begin{pmatrix}r_2\\r_1\leftrightarrow r_2\\r_2\or (r_1\leftrightarrow r_2)\end{pmatrix}=\begin{pmatrix}r_2\\r_1\leftrightarrow r_2\\r_1\rightarrow r_2\end{pmatrix}</math>.
 
בחידות מסוג זה נתונות עובדות, ונסמן כ־<math>S</math> את קבוצת הפתרונות <math>\mathbf x</math> המקיימים אותן. בד״כ המטרה היא למצוא <math>\mathbf q</math> חח״ע מ־<math>S</math>, כלומר למצוא שאלות שעבורן לכל וקטור תשובות <math>\mathbf r=\mathbf q(\mathbf x)</math> ניתן יהיה להסיק את וקטור הסוגים של התושבים, <math>\mathbf x=\mathbf q^{-1}(\mathbf r)</math>.
 
יהי <math>k\in\mathbb N\cup\{0\}</math> המספר המינימלי כך ש־<math>|S|\le2^k</math>. נוכיח ש־<math>k\le m</math>: החידה פתירה, כלומר קיים וקטור שאלות <math>\mathbf q</math> חח״ע מ־<math>S</math>. <math>\mathbf q</math> היא פונקציה על קבוצת וקטורי התשובות ולפיכך יש <math>|S|</math> אפשרויות ל־<math>\mathbf r</math>. מאידך, <math>\mathbf q</math> מורכבת מ־<math>m</math> שאלות ולכל אחת יש עד 2 תשובות אפשריות, לכן יש עד <math>2^m</math> אפשרויות ל־<math>\mathbf r</math>, דהיינו <math>2^{k-1}<|S|\le2^m</math>. נקבל <math>k-1<m</math> ולבסוף <math>k\le m</math> כי <math>k,m\in\mathbb Z</math>. {{משל}}
 
==== מערכת עובדות לינאריות ====
במקרה זה <math>S=\{\mathbf x:\ \mathbf A\mathbf x=\mathbf b\}</math>. אם שורות המטריצה <math>\mathbf A</math> תלויות לינארית ניתן למחוק כמה מהן (וגם את השורות המתאימות ב־<math>\mathbf b</math>) כך ששורותיה יהיו בת״ל ו־<math>S</math> לא תשתנה. לכן נניח בה״כ ששורות <math>\mathbf A</math> בת״ל.
 
:'''דוגמה 4.1:''' <math>n=4</math> ונתון
{{left|<math>\begin{pmatrix}1&1&1&0\\0&0&0&0\\1&1&0&0\\0&0&1&0\end{pmatrix}\mathbf x=\begin{pmatrix}1\\0\\0\\1\end{pmatrix}</math>}}
:השורה השנייה במערכת זו מיותרת והשורה הרביעית היא סכום השורה הראשונה והשלישית. לכן נמחק את שורות 2,4 ונקבל
{{left|<math>\underbrace\begin{pmatrix}1&1&1&0\\1&1&0&0\end{pmatrix}_\mathbf A\mathbf x=\underbrace\begin{pmatrix}1\\0\end{pmatrix}_\mathbf b</math>}}


מכך נובע ש־<math>\{\mathrm T,\mathrm F\}</math> שדה. נגדיר סכום <math>\sum_{i=1}^m P_i</math> (כאשר <math>\forall i:\ P_i\in\{\mathrm T,\mathrm F\}</math>) בתור <math>P_1\leftrightarrow\dots\leftrightarrow P_m</math> ומכפלה <math>\prod_{i=1}^m P_i</math> בתור <math>P_1\or\dots\or P_m</math>. כפל מטריצות מוגדר בהתאם.
נשים לב שלפי משפט רושה–קפלי <math>|S|=2^{n-\operatorname{rank}(\mathbf A)}=2^k</math> ולכן <math>\operatorname{rank}(\mathbf A)=n-k</math>. השורות של <math>\mathbf A</math> בת״ל ולכן יש לה <math>n-k</math> שורות.


כעת, אם התושבים הם <math>X_1,\dots,X_n</math> אז נגדיר <math>\mathbf x:=\begin{pmatrix}X_1\\\vdots\\X_n\end{pmatrix}</math>. אם כל <math>P_i</math> מייצג נעלם <math>X_j</math> או קבוע <math>\mathrm T,\mathrm F</math> אז נוכל להציג כל שרשור <math>P_1\leftrightarrow\dots\leftrightarrow P_n\Leftrightarrow P_{n+1}</math> בתור סכום של נעלמים שונים השווה לקבוע. לדוגמה, <math>B\leftrightarrow A\leftrightarrow\mathrm F\Leftrightarrow\mathrm T</math> מפתרון דוגמה 1 שקול ל־<math>A\leftrightarrow B\Leftrightarrow\mathrm F</math>, ששקול ל־<math>\sum_{X_i\in\{A,B\}}X_i\Leftrightarrow\mathrm F</math>. לכן נוכל להגדיר מטריצת מקדמים <math>\mathbf A</math> ווקטור מקדמים חופשיים <math>\mathbf b</math> כך ש־<math>\mathbf{Ax}\Leftrightarrow\mathbf b</math>. למשל, את דוגמה 1 ניתן להציג באופן הבא:
כדי לפתור את החידה נבחר <math>\mathbf Q\in\{0,1\}^{k\times n}</math> כך ש־<math>\begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}</math> מטריצה הפיכה, ואז <math>\mathbf q=\mathbf Q\mathbf x</math> ו־<math>\mathbf x=\begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}^{-1}\begin{pmatrix}\mathbf b\\\mathbf r\end{pmatrix}</math>. לשם כך צריך להראות שקיימת <math>\mathbf Q</math> כנ״ל, אבל זה די טריוויאלי: השורות של <math>\mathbf A</math> בת״ל ולכן הן בסיס לתת־מרחב של <math>\{0,1\}^{1\times n}</math> ממימד <math>k</math>. נבחר בסיס כלשהו ל[http://en.wikipedia.org/wiki/Orthogonal_complement תת־מרחב המשלים האורתוגונלי] לו ונציב את איבריו כשורות מטריצה <math>\mathbf Q</math>. אזי <math>\begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}\in\{0,1\}^{(n-k+k)\times n}=\{0,1\}^{n\times n}</math> מטריצה ריבועית ששורותיה בת״ל, כלומר היא הפיכה. {{משל}}
{{left|<math>\underbrace\begin{pmatrix}\mathrm F&\mathrm F&\mathrm F&\mathrm T\\\mathrm F&\mathrm F&\mathrm T&\mathrm T\\\mathrm T&\mathrm T&\mathrm T&\mathrm F\\\mathrm F&\mathrm T&\mathrm F&\mathrm T\end{pmatrix}_\mathbf A\underbrace\begin{pmatrix}A\\B\\C\\D\end{pmatrix}_\mathbf x\Leftrightarrow\underbrace\begin{pmatrix}\mathrm T\\\mathrm F\\\mathrm T\\\mathrm F\end{pmatrix}_\mathbf b</math>}}


הצגה זו מאפשרת לנו למצוא מה הסוג של כל תושב ע״י פתרון מערכת משוואות לינאריות. יתרה מזאת, לפי משפט רושה–קפלי (Rouché–Capelli) יש פתרון ל־<math>\mathbf{Ax}=\mathbf b</math> אם״ם <math>\mathbf b\in\operatorname{span}\left\{\operatorname{Col}_i(\mathbf A)\right\}_{i=1}^n</math> כאשר <math>\operatorname{Col}_i(\mathbf A)</math> העמודה ה־<math>i</math> של <math>\mathbf A</math>, ואם כן אז מרחב הפתרונות הוא ממימד <math>n-\operatorname{rank}(\mathbf A)</math>. מכאן נובע שאנו יכולים לבדוק האם קיים פתרון לחידה, ואם כן אז כמה פתרונות יש. מובן שבד״כ יש רק פתרון אחד, כלומר <math>\mathbf A</math> הפיכה.
:'''דוגמה 4.2:''' עלינו למצוא את הסוגים של כל התושבים בדוגמה 4 במינימום שאלות, כלומר ב־<math>k=n-\operatorname{rank}(\mathbf A)=2</math> שאלות (הוכחה ש־<math>k</math> הוא המספר המינימלי הדרוש של שאלות – בהמשך). שני וקטורי שורה שאינם תלויים לינארית ב־<math>\begin{pmatrix}1&1&1&0\end{pmatrix},\begin{pmatrix}1&1&0&0\end{pmatrix}</math> הם לדוגמה <math>\begin{pmatrix}0&0&0&1\end{pmatrix},\begin{pmatrix}1&0&1&0\end{pmatrix}</math> ולכן <math>\mathbf q=\begin{pmatrix}X_4\\X_1\nleftrightarrow X_3\end{pmatrix}</math> וקטור שאלות מתאים. <math>\begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}^{-1}=\begin{pmatrix}1&1&1&0\\1&1&0&0\\0&0&0&1\\1&0&1&0\end{pmatrix}^{-1}=\begin{pmatrix}1&1&0&1\\1&0&0&1\\1&1&0&0\\0&0&1&0\end{pmatrix}</math> והפתרון הכללי הוא <math>\mathbf x=\begin{pmatrix}1&1&0&1\\1&0&0&1\\1&1&0&0\\0&0&1&0\end{pmatrix}\begin{pmatrix}1\\0\\\mathbf r\!\!\!\!\!\begin{matrix}&\\&\end{matrix}\end{pmatrix}</math>.


== ראו גם ==
==== המספר המינימלי של שאלות ====
* [http://en.wikipedia.org/wiki/Knights_and_Knaves Knights and Knaves] בוויקיפדיה האנגלית.
נניח ש־<math>m</math> הוא המספר המינימלי של שאלות הדרוש לפתרון חידת שאלות נתונה ונרצה להוכיח ש־<math>m=k=\lceil\log_2(|S|)\rceil</math>: תהי <math>V=\{\mathbf x:\ \mathbf A\mathbf x=\mathbf 0\}</math> כך ש־<math>\mathbf A\in\{0,1\}^{(n-k)\times n}</math> מטריצה כרצוננו ששורותיה בת״ל. לכן <math>|V|=2^{n-\operatorname{rank}(\mathbf A)}=2^k</math> ובפרט קיימת פונקציה <math>f:S\to V</math> חח״ע. תהי <math>\mathbf Q\in\{0,1\}^{k\times n}</math> מטריצה כך ש־<math>\begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}</math> הפיכה ואז <math>\mathbf q':\mathbf v\mapsto\mathbf Q\mathbf v</math> חח״ע מ־<math>V</math>. נגדיר <math>\mathbf q=\mathbf q'\circ f</math> ולכן <math>\mathbf q</math> חח״ע מ־<math>S</math> והיא מורכבת מ־<math>k</math> שאלות, כלומר <math>k\ge m</math>. בעבר הוכחנו ש־<math>k\le m</math> ולכן <math>m=k</math>. {{משל}}
* [http://en.wikipedia.org/wiki/The_Hardest_Logic_Puzzle_Ever The Hardest Logic Puzzle Ever] בוויקיפדיה האנגלית.

גרסה אחרונה מ־15:23, 6 באוגוסט 2013

בחידות אבירים ונוכלים (Knights and Knaves) מדברים על אי מסוים בו כל התושבים הם או אבירים, הדוברים תמיד אמת, או נוכלים, אשר תמיד משקרים. בחלק מהבעיות מוסיפים סוג נוסף – מרגלים, שעונים אמת או שקר באקראי, אך לא נעסוק בהם. החידות דנות באורח באי המנסה להסיק מספר מסקנות – לרוב את הסוג של כמה מהתושבים – על סמך כמה עובדות (שמרביתן מהצורה "תושב [math]\displaystyle{ X }[/math] טען ש־[math]\displaystyle{ P }[/math]") ו/או על סמך שאלות כן/לא שעליו לשאול.

  • דוגמה 1: האורח נתקל בתושבים [math]\displaystyle{ A,B,C,D }[/math]. ידוע ש־[math]\displaystyle{ A,C }[/math] מסוגים שונים. [math]\displaystyle{ A }[/math] טוען ש־[math]\displaystyle{ B,C }[/math] מאותו סוג, [math]\displaystyle{ B }[/math] טוען ש־[math]\displaystyle{ A }[/math] אביר ו־[math]\displaystyle{ C }[/math] טוען שהוא מאותו סוג כמו [math]\displaystyle{ D }[/math]. מה הסוג של כל תושב?
  • דוגמה 2: האורח נתקל בשלושה תושבים, והשלישי שבהם טוען שלפחות אחד משני התושבים האחרים הוא אביר. אילו 2 שאלות כן/לא יכול האורח לשאול את התושבים על מנת להסיק את הסוגים שלהם?

ניצור מודל מתמטי לפתרון בעיות מסוג זה.

[math]\displaystyle{ P }[/math] [math]\displaystyle{ Q }[/math] [math]\displaystyle{ P\leftrightarrow Q }[/math]
0 0 1
0 1 0
1 0 0
1 1 1

באלגברה בוליאנית מסמנים [math]\displaystyle{ 1 }[/math] כפסוק אמת ו־[math]\displaystyle{ 0 }[/math] כפסוק שקר. נעזר בסימון [math]\displaystyle{ \leftrightarrow }[/math] לציון אופרטור שקילות לוגית, המוגדר כמפורט בטבלה שמשמאל. [math]\displaystyle{ = }[/math] הוא יחס שקילות בין כל שני פסוקים שקולים לוגית, כלומר אם ידוע ש־[math]\displaystyle{ P\leftrightarrow Q }[/math] נותן 1 אז נוכל לסמן [math]\displaystyle{ P=Q }[/math]. אם תושב [math]\displaystyle{ X }[/math] הוא אביר אז נסמן [math]\displaystyle{ X=1 }[/math] ואם נוכל – [math]\displaystyle{ X=0 }[/math]. לפיכך, אם [math]\displaystyle{ X }[/math] טוען טענה [math]\displaystyle{ P }[/math] אז [math]\displaystyle{ X=P }[/math].

דוגמה 1.1: באמצעות סימונים אלו נציג את דוגמה 1 כמערכת משוואות בוליאניות. [math]\displaystyle{ A }[/math] טוען ש־[math]\displaystyle{ B,C }[/math] מאותו סוג, כלומר הוא טוען [math]\displaystyle{ B\leftrightarrow C }[/math]. מכך נובעת משוואה (1) במערכת המשוואות הבאה. מהטענות של [math]\displaystyle{ B,C }[/math] נובעות המשוואות (2) ו־(3), ומהעובדה ש־[math]\displaystyle{ A,C }[/math] שונים נובעת משוואה (4):
[math]\displaystyle{ \begin{array}{llcl} (1)&A\leftrightarrow B\leftrightarrow C&=&1\\ (2)&B\leftrightarrow A\leftrightarrow1&=&1\\ (3)&C\leftrightarrow C\leftrightarrow D&=&1\\ (4)&A\leftrightarrow C&=&0\end{array} }[/math]
באופן שקול:
[math]\displaystyle{ \begin{array}{llcl} (1)&A\nleftrightarrow B\nleftrightarrow C&=&1\\ (2)&A\nleftrightarrow B&=&0\\ (3)&D&=&1\\ (4)&A\nleftrightarrow C&=&1\end{array} }[/math]
כאשר [math]\displaystyle{ \nleftrightarrow }[/math] מציין אופרטור XOR, המסומן גם כ־[math]\displaystyle{ \oplus }[/math].

בסימונים אלו נגדיר עובדה בתור משוואה בוליאנית שנתונה בחידה, כגון [math]\displaystyle{ A\leftrightarrow C=0 }[/math] מדוגמה 1.

חידות ללא שאלות

פתרון כמערכת משוואות

ברגע שיש לנו ניסוח מתמטי של החידה כמערכת משוואות אפשר לפתור אותה כפי שעושים באלגברה בוליאנית. נתעמק בחידות שניתן לפתור כמערכת משוואות לינאריות.

ניצור איזומורפיזם מהשדה [math]\displaystyle{ (\mathbb Z_2,+,\cdot) }[/math] ל־[math]\displaystyle{ (\{0,1\},\nleftrightarrow,\and) }[/math] ע״י [math]\displaystyle{ x\mapsto\begin{cases}0,&x=[0]_2\\1,&x=[1]_2\end{cases} }[/math]. מכך נובע ש־[math]\displaystyle{ (\{0,1\},\nleftrightarrow,\and) }[/math] שדה. סכום [math]\displaystyle{ \sum_{i=1}^m P_i }[/math] (כאשר [math]\displaystyle{ \forall i:\ P_i\in\{0,1\} }[/math]) יוגדר בתור [math]\displaystyle{ P_1\nleftrightarrow\dots\nleftrightarrow P_m }[/math] ומכפלה [math]\displaystyle{ \prod_{i=1}^m P_i }[/math] בתור [math]\displaystyle{ P_1\and\dots\and P_m }[/math]. גם כפל מטריצות מוגדר בהתאם.

כעת, אם התושבים הם [math]\displaystyle{ X_1,\dots,X_n }[/math] אז נסמן [math]\displaystyle{ \mathbf x:=\begin{pmatrix}X_1\\\vdots\\X_n\end{pmatrix} }[/math]. אם כל [math]\displaystyle{ P_i }[/math] מייצג נעלם [math]\displaystyle{ X_j }[/math] או קבוע [math]\displaystyle{ 1,0 }[/math] אז נוכל להציג כל [math]\displaystyle{ P_1\leftrightarrow\dots\leftrightarrow P_n=P_{n+1} }[/math] בתור סכום של נעלמים שונים השווה לקבוע: לדוגמה, [math]\displaystyle{ B\leftrightarrow A\leftrightarrow1=1 }[/math] מהניסוח המתמטי של דוגמה 1 שקול ל־[math]\displaystyle{ A\nleftrightarrow B=0 }[/math], כלומר ל־[math]\displaystyle{ \sum_{X_i\in\{A,B\}}X_i=0 }[/math]. לכן נוכל להגדיר מטריצת מקדמים [math]\displaystyle{ \mathbf A }[/math] ווקטור מקדמים חופשיים [math]\displaystyle{ \mathbf b }[/math] כך ש־[math]\displaystyle{ \mathbf{Ax}=\mathbf b }[/math].

דוגמה 1.2: ההצגה המטריציונית של דוגמה 1 היא
[math]\displaystyle{ \underbrace\begin{pmatrix}1&1&1&0\\1&1&0&0\\0&0&0&1\\1&0&1&0\end{pmatrix}_\mathbf A\underbrace\begin{pmatrix}A\\B\\C\\D\end{pmatrix}_\mathbf x=\underbrace\begin{pmatrix}1\\0\\1\\1\end{pmatrix}_\mathbf b }[/math]

הצגה זו מאפשרת לנו למצוא מה הסוג של כל תושב ע״י פתרון מערכת משוואות לינאריות. יתרה מזאת, לפי משפט רושה–קפלי (Rouché–Capelli) יש פתרון ל־[math]\displaystyle{ \mathbf{Ax}=\mathbf b }[/math] אם״ם [math]\displaystyle{ \mathbf b\in\operatorname{span}\left\{\operatorname{Col}_i(\mathbf A)\right\}_{i=1}^n }[/math] כאשר [math]\displaystyle{ \operatorname{Col}_i(\mathbf A) }[/math] העמודה ה־[math]\displaystyle{ i }[/math] של [math]\displaystyle{ \mathbf A }[/math], ואם כן אז מרחב הפתרונות הוא ממימד [math]\displaystyle{ n-\operatorname{rank}(\mathbf A) }[/math]. מכאן נובע שאנו יכולים לבדוק האם קיים פתרון לחידה, ואם כן לחשב את מספר הפתרונות בתור [math]\displaystyle{ 2^{n-\operatorname{rank}(\mathbf A)} }[/math]. מובן שבד״כ יש רק פתרון אחד, כלומר [math]\displaystyle{ \operatorname{rank}(\mathbf A)=n }[/math] ואז, אם ל־[math]\displaystyle{ \mathbf A }[/math] יש [math]\displaystyle{ n }[/math] שורות אז היא הפיכה. אם לא אז ניתן למחוק כמה שורות של [math]\displaystyle{ \mathbf A }[/math] (וגם את השורות המתאימות ב־[math]\displaystyle{ \mathbf b }[/math]) כך שהיא תהיה הפיכה.

דוגמה 1.3: נפתור את דוגמה 1. חישוב פשוט מראה ש־[math]\displaystyle{ \mathbf A }[/math] הפיכה (ומכאן שיש פתרון יחיד) ו־[math]\displaystyle{ \mathbf A^{-1}=\begin{pmatrix}1&1&0&1\\1&0&0&1\\1&1&0&0\\0&0&1&0\end{pmatrix} }[/math]. לכן [math]\displaystyle{ \mathbf x=\mathbf A^{-1}\mathbf b=\begin{pmatrix}0\\0\\1\\1\end{pmatrix} }[/math] – התושבים [math]\displaystyle{ A,B }[/math] נוכלים ו־[math]\displaystyle{ C,D }[/math] אבירים.

פתרון באמצעות ניחוש

מנחשים את סוגו של אחד מהתושבים ומציבים במשוואות. אם מגיעים לסתירה אז יש להחליף את הסוג שנבחר ולפתור מחדש, אחרת נקבל מערכת משוואות פשוטה יותר. אם המערכת הזו עוד לא נותנת פתרון יחיד יש להמשיך לנחש עד לפתרון הסופי. אם החלפנו ניחוש ושוב הגענו לסתירה אז אין פתרון.

דוגמה 1.4: ננחש ש־[math]\displaystyle{ A }[/math] מדוגמה 1 הוא אביר. מ־(2) נובע ש־[math]\displaystyle{ B }[/math] אביר ומ־(4) ש־[math]\displaystyle{ C }[/math] נוכל, אך זה סותר את (1) ולכן [math]\displaystyle{ A }[/math] נוכל. הצבה מחדש נותנת ש־[math]\displaystyle{ B }[/math] נוכל ו־[math]\displaystyle{ C,D }[/math] אבירים, וקיבלנו פתרון יחיד.

באופן כללי זו שיטה קלה יותר. אחד מהחסרונות שלה הוא שקשה למצוא באמצעותה את מספר הפתרונות, מה שעושים ע״י בדיקת היתכנות הסוג השני לכל תושב שניחשנו לו סוג.

דוגמה 3: האורח נתקל בתושבים [math]\displaystyle{ A,B,C }[/math]. [math]\displaystyle{ A }[/math] טוען ש־[math]\displaystyle{ B }[/math] נוכל וגם [math]\displaystyle{ C }[/math] אביר, כלומר [math]\displaystyle{ A\leftrightarrow(\neg B\and C)=1 }[/math]. אם ננחש ש־[math]\displaystyle{ A }[/math] אביר נקבל פתרון יחיד, אך אם ננחש שהוא נוכל נקבל ש־[math]\displaystyle{ \neg B\and C=0 }[/math]. במקרה הזה אפשר לנחש ש־[math]\displaystyle{ B }[/math] נוכל (ולקבל פתרון יחיד) או אביר (ולקבל שני פתרונות). מספר הפתרונות הוא אם כן [math]\displaystyle{ \underbrace1_{A\text{ is a knight}}+\underbrace{\overbrace1^{B\text{ is a knave}}+\overbrace2^{B\text{ is a knight}}}_{A\text{ is a knave}}=4 }[/math]. המערכת אינה לינארית ולכן לא ניתן לחשב את מספר הפתרונות באמצעות משפט רושה–קפלי.

חיסרון מהותי יותר הוא ששינוי של [math]\displaystyle{ \mathbf b }[/math] דורש פתרון מחדש של הבעיה כולה. כמו כן, אנו נעזר בפתרון באמצעות מערכת משוואות לינאריות בחידות שבהן שואלים שאלות.

חידות עם שאלות

שאלה היא פסוק לוגי שאנחנו יכולים לבחור ותלוי בסוגים של תושבים. למשל, את השאלה "האם [math]\displaystyle{ X_2 }[/math] אביר?" שמופנת ל־[math]\displaystyle{ X_1 }[/math] נייצג בתור [math]\displaystyle{ X_1\leftrightarrow X_2 }[/math], ואת השאלה "[math]\displaystyle{ X_1 }[/math], האם 3=3?" בתור [math]\displaystyle{ X_1\leftrightarrow1=X_1 }[/math]. נסמן כ־[math]\displaystyle{ n }[/math] את מספר התושבים ונניח שמותר לשאול עד [math]\displaystyle{ m }[/math] שאלות. נסמן [math]\displaystyle{ \mathbf q=\begin{pmatrix}Q_1\\\vdots\\Q_m\end{pmatrix} }[/math] כווקטור השאלות. תשובה תוגדר כערך בוליאני השקול לוגית לשאלה ששאלנו, ונסמן ב־[math]\displaystyle{ \mathbf r=\begin{pmatrix}r_1\\\vdots\\r_m\end{pmatrix} }[/math] את וקטור התשובות. מההגדרות נובע ש־[math]\displaystyle{ \mathbf q=\mathbf r }[/math]. [math]\displaystyle{ \mathbf x }[/math] מוגדר כמקודם, ואז ניתן לחשוב על [math]\displaystyle{ \mathbf q }[/math] כעל פונקציה [math]\displaystyle{ \mathbf x\mapsto\mathbf r }[/math].

דוגמה 2.1: יש 3 תושבים ([math]\displaystyle{ n=3 }[/math]), מותר לשאול עד 2 שאלות ([math]\displaystyle{ m=2 }[/math]) ו־[math]\displaystyle{ X_3 }[/math] טוען ש־[math]\displaystyle{ X_1 }[/math] ו/או [math]\displaystyle{ X_2 }[/math] אבירים, דהיינו [math]\displaystyle{ X_3\leftrightarrow(X_1\or X_2)=1 }[/math]. וקטור השאלות [math]\displaystyle{ \mathbf q=\begin{pmatrix}X_1\leftrightarrow X_2\\X_1\end{pmatrix} }[/math], לדוגמה, מאפשר לפתור את החידה כי תמיד מתקיים [math]\displaystyle{ \mathbf x=\begin{pmatrix}r_2\\r_1\leftrightarrow r_2\\r_2\or (r_1\leftrightarrow r_2)\end{pmatrix}=\begin{pmatrix}r_2\\r_1\leftrightarrow r_2\\r_1\rightarrow r_2\end{pmatrix} }[/math].

בחידות מסוג זה נתונות עובדות, ונסמן כ־[math]\displaystyle{ S }[/math] את קבוצת הפתרונות [math]\displaystyle{ \mathbf x }[/math] המקיימים אותן. בד״כ המטרה היא למצוא [math]\displaystyle{ \mathbf q }[/math] חח״ע מ־[math]\displaystyle{ S }[/math], כלומר למצוא שאלות שעבורן לכל וקטור תשובות [math]\displaystyle{ \mathbf r=\mathbf q(\mathbf x) }[/math] ניתן יהיה להסיק את וקטור הסוגים של התושבים, [math]\displaystyle{ \mathbf x=\mathbf q^{-1}(\mathbf r) }[/math].

יהי [math]\displaystyle{ k\in\mathbb N\cup\{0\} }[/math] המספר המינימלי כך ש־[math]\displaystyle{ |S|\le2^k }[/math]. נוכיח ש־[math]\displaystyle{ k\le m }[/math]: החידה פתירה, כלומר קיים וקטור שאלות [math]\displaystyle{ \mathbf q }[/math] חח״ע מ־[math]\displaystyle{ S }[/math]. [math]\displaystyle{ \mathbf q }[/math] היא פונקציה על קבוצת וקטורי התשובות ולפיכך יש [math]\displaystyle{ |S| }[/math] אפשרויות ל־[math]\displaystyle{ \mathbf r }[/math]. מאידך, [math]\displaystyle{ \mathbf q }[/math] מורכבת מ־[math]\displaystyle{ m }[/math] שאלות ולכל אחת יש עד 2 תשובות אפשריות, לכן יש עד [math]\displaystyle{ 2^m }[/math] אפשרויות ל־[math]\displaystyle{ \mathbf r }[/math], דהיינו [math]\displaystyle{ 2^{k-1}\lt |S|\le2^m }[/math]. נקבל [math]\displaystyle{ k-1\lt m }[/math] ולבסוף [math]\displaystyle{ k\le m }[/math] כי [math]\displaystyle{ k,m\in\mathbb Z }[/math]. [math]\displaystyle{ \blacksquare }[/math]

מערכת עובדות לינאריות

במקרה זה [math]\displaystyle{ S=\{\mathbf x:\ \mathbf A\mathbf x=\mathbf b\} }[/math]. אם שורות המטריצה [math]\displaystyle{ \mathbf A }[/math] תלויות לינארית ניתן למחוק כמה מהן (וגם את השורות המתאימות ב־[math]\displaystyle{ \mathbf b }[/math]) כך ששורותיה יהיו בת״ל ו־[math]\displaystyle{ S }[/math] לא תשתנה. לכן נניח בה״כ ששורות [math]\displaystyle{ \mathbf A }[/math] בת״ל.

דוגמה 4.1: [math]\displaystyle{ n=4 }[/math] ונתון
[math]\displaystyle{ \begin{pmatrix}1&1&1&0\\0&0&0&0\\1&1&0&0\\0&0&1&0\end{pmatrix}\mathbf x=\begin{pmatrix}1\\0\\0\\1\end{pmatrix} }[/math]
השורה השנייה במערכת זו מיותרת והשורה הרביעית היא סכום השורה הראשונה והשלישית. לכן נמחק את שורות 2,4 ונקבל
[math]\displaystyle{ \underbrace\begin{pmatrix}1&1&1&0\\1&1&0&0\end{pmatrix}_\mathbf A\mathbf x=\underbrace\begin{pmatrix}1\\0\end{pmatrix}_\mathbf b }[/math]

נשים לב שלפי משפט רושה–קפלי [math]\displaystyle{ |S|=2^{n-\operatorname{rank}(\mathbf A)}=2^k }[/math] ולכן [math]\displaystyle{ \operatorname{rank}(\mathbf A)=n-k }[/math]. השורות של [math]\displaystyle{ \mathbf A }[/math] בת״ל ולכן יש לה [math]\displaystyle{ n-k }[/math] שורות.

כדי לפתור את החידה נבחר [math]\displaystyle{ \mathbf Q\in\{0,1\}^{k\times n} }[/math] כך ש־[math]\displaystyle{ \begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix} }[/math] מטריצה הפיכה, ואז [math]\displaystyle{ \mathbf q=\mathbf Q\mathbf x }[/math] ו־[math]\displaystyle{ \mathbf x=\begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}^{-1}\begin{pmatrix}\mathbf b\\\mathbf r\end{pmatrix} }[/math]. לשם כך צריך להראות שקיימת [math]\displaystyle{ \mathbf Q }[/math] כנ״ל, אבל זה די טריוויאלי: השורות של [math]\displaystyle{ \mathbf A }[/math] בת״ל ולכן הן בסיס לתת־מרחב של [math]\displaystyle{ \{0,1\}^{1\times n} }[/math] ממימד [math]\displaystyle{ k }[/math]. נבחר בסיס כלשהו לתת־מרחב המשלים האורתוגונלי לו ונציב את איבריו כשורות מטריצה [math]\displaystyle{ \mathbf Q }[/math]. אזי [math]\displaystyle{ \begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}\in\{0,1\}^{(n-k+k)\times n}=\{0,1\}^{n\times n} }[/math] מטריצה ריבועית ששורותיה בת״ל, כלומר היא הפיכה. [math]\displaystyle{ \blacksquare }[/math]

דוגמה 4.2: עלינו למצוא את הסוגים של כל התושבים בדוגמה 4 במינימום שאלות, כלומר ב־[math]\displaystyle{ k=n-\operatorname{rank}(\mathbf A)=2 }[/math] שאלות (הוכחה ש־[math]\displaystyle{ k }[/math] הוא המספר המינימלי הדרוש של שאלות – בהמשך). שני וקטורי שורה שאינם תלויים לינארית ב־[math]\displaystyle{ \begin{pmatrix}1&1&1&0\end{pmatrix},\begin{pmatrix}1&1&0&0\end{pmatrix} }[/math] הם לדוגמה [math]\displaystyle{ \begin{pmatrix}0&0&0&1\end{pmatrix},\begin{pmatrix}1&0&1&0\end{pmatrix} }[/math] ולכן [math]\displaystyle{ \mathbf q=\begin{pmatrix}X_4\\X_1\nleftrightarrow X_3\end{pmatrix} }[/math] וקטור שאלות מתאים. [math]\displaystyle{ \begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix}^{-1}=\begin{pmatrix}1&1&1&0\\1&1&0&0\\0&0&0&1\\1&0&1&0\end{pmatrix}^{-1}=\begin{pmatrix}1&1&0&1\\1&0&0&1\\1&1&0&0\\0&0&1&0\end{pmatrix} }[/math] והפתרון הכללי הוא [math]\displaystyle{ \mathbf x=\begin{pmatrix}1&1&0&1\\1&0&0&1\\1&1&0&0\\0&0&1&0\end{pmatrix}\begin{pmatrix}1\\0\\\mathbf r\!\!\!\!\!\begin{matrix}&\\&\end{matrix}\end{pmatrix} }[/math].

המספר המינימלי של שאלות

נניח ש־[math]\displaystyle{ m }[/math] הוא המספר המינימלי של שאלות הדרוש לפתרון חידת שאלות נתונה ונרצה להוכיח ש־[math]\displaystyle{ m=k=\lceil\log_2(|S|)\rceil }[/math]: תהי [math]\displaystyle{ V=\{\mathbf x:\ \mathbf A\mathbf x=\mathbf 0\} }[/math] כך ש־[math]\displaystyle{ \mathbf A\in\{0,1\}^{(n-k)\times n} }[/math] מטריצה כרצוננו ששורותיה בת״ל. לכן [math]\displaystyle{ |V|=2^{n-\operatorname{rank}(\mathbf A)}=2^k }[/math] ובפרט קיימת פונקציה [math]\displaystyle{ f:S\to V }[/math] חח״ע. תהי [math]\displaystyle{ \mathbf Q\in\{0,1\}^{k\times n} }[/math] מטריצה כך ש־[math]\displaystyle{ \begin{pmatrix}\mathbf A\\\mathbf Q\end{pmatrix} }[/math] הפיכה ואז [math]\displaystyle{ \mathbf q':\mathbf v\mapsto\mathbf Q\mathbf v }[/math] חח״ע מ־[math]\displaystyle{ V }[/math]. נגדיר [math]\displaystyle{ \mathbf q=\mathbf q'\circ f }[/math] ולכן [math]\displaystyle{ \mathbf q }[/math] חח״ע מ־[math]\displaystyle{ S }[/math] והיא מורכבת מ־[math]\displaystyle{ k }[/math] שאלות, כלומר [math]\displaystyle{ k\ge m }[/math]. בעבר הוכחנו ש־[math]\displaystyle{ k\le m }[/math] ולכן [math]\displaystyle{ m=k }[/math]. [math]\displaystyle{ \blacksquare }[/math]