חזור לתיקייה: תרגול

10 - אוטומט סופי לא דטרמיניסטי

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה
  • כללי
  • שקילות בין NFA ל-DFA
  • בנייה פורמלית של אוטומט החזקה
  • איך מוכיחים שפה של NFA?
  • תרגול

10 - אוטומט סופי לא דטרמיניסטי

02340129

מבוא לתורת הקבוצות ואוטומטים למדמח

רשימות תרגול לקריאה בשבת

אוטומט סופי לא דטרמיניסטי

הופק מתוך תקיית התואר של שקד

uni-folder.vercel.app

הגדרה 1 (אוטומט סופי לא דטרמיניסטי(NFANFANFA))

נגדיר אוטומט סופי לא דטרמיניסטי בצורה הבאה:

A=(Q,Σ,I,R,F)A=(Q,\Sigma,I,R,F)A=(Q,Σ,I,R,F)

ישנם שני הבדלים בינו לבין אוטומט סופי דטרמיניסטי:

  1. במקום מצב התחלתי יחיד q0q_{0}q0​, יש לנו קבוצת מצבים התחלתיים III.
  2. במקום פונקצית מעברים δ\deltaδ, יש לנו יחס מעברים R⊆Q×Σ×QR \subseteq Q\times\Sigma \times QR⊆Q×Σ×Q. כאשר אם (q,σ,p)∈R(q,\sigma,p)\in R(q,σ,p)∈R אזי זה אומר כי ניתן לעבור מ-qqq ל-ppp ע"י קריאת σ\sigmaσ ונסמן זאת: q⟶σpq \overset{\sigma}{\longrightarrow}pq⟶σ​p.

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

דוגמה

example1 start q0 q0 start->q0 q1 q1 q0->q1 1 q0->q0 0,1

איך נראה שהאוטומט הזה הוא אוטומט לא דטרמיניסטי? כי אין לכל מצב קשת, נניח, אם נקבל 000 או 111 ב-q1q_{1}q1​ וגם נראה כי יש שני דרכים שבהם נוכל ללכת מ-q0q_{0}q0​ עם 1.
עבור Σ={0,1,2}\Sigma=\left\{ 0,1,2 \right\}Σ={0,1,2} - נשים לב כי לא באמת נוכל לדעת את שפת האוטומט מאוטומט סופי לא דטרמיניסטי בלבד, שכן יכולות להופיע עוד אותיות אשר להן לא יהיו קשתות

הגדרה 2 (ריצה על מילה)

ריצה של אוטומט AAA על מילה w=σ1…σnw=\sigma_{1}\dots\sigma_{n}w=σ1​…σn​ היא סדרה מהצורה:

S0→σ1S1→σ2⋯→σnSnS_{0}\xrightarrow{\sigma_{1}}S_{1}\xrightarrow{\sigma_{2}}\dots \xrightarrow{\sigma_{n}}S_{n}S0​σ1​​S1​σ2​​⋯σn​​Sn​

כך ש-S0∈IS_{0}\in IS0​∈I ולכל 1≤i≤n1\leq i\leq n1≤i≤n מתקיים (Si−1,σi,Si)∈R(S_{i-1},\sigma_{i},S_{i})\in R(Si−1​,σi​,Si​)∈R.
נסמן גם: S0⟶wSnS_{0}\overset{w}{\longrightarrow}S_{n}S0​⟶w​Sn​.

הגדרה 3 (שפה של אוטומט לא דטרמיניסטי)

בהנתן אוטומט סופי לא דטרמיניסטי AAA נגדיר את השפה שלו:

L(A)={w∈Σ∗∣∃q0∈I,∃p∈F:  q0⟶Awp}L(A)=\left\{ w \in\Sigma^*| \exists q_{0}\in I,\exists p \in F:\; q_{0}\overunderset{w}{A}{\longrightarrow}p \right\}L(A)={w∈Σ∗∣∃q0​∈I,∃p∈F:q0​A⟶​w​p}

כלומר, השפה של AAA היא כל המילים www שעבורם קיימת ריצה מקבלת של AAA על www ממצב התחלתי.

דוגמה

בדוגמה שראינו ממקודם מתקיים כי השפה של AAA היא:

L(A)={0,1}∗∘{1}L(A)=\left\{ 0,1 \right\}^* \circ \left\{ 1 \right\}L(A)={0,1}∗∘{1}

נסתכל על אילו מסלולי ריצה יש לנו עבור w=0101w=0101w=0101:

  • נוכל להישאר ב-q0q_{0}q0​ במהלך כל המילה, מה שיתן לנו ריצה לא מקבלת.
  • נוכל לעבור ל-q1q_{1}q1​ בפעם הראשונה שאנו מקבלים 1, מה ישתן לנו ריצה שלא תתקיים. - היא לא נחשבת ריצה
  • נוכל לעבור ל-q1q_{1}q1​ באות האחרונה במילה וזוהי ריצה מקבלת.

מכיוון שקיימת ריצה מקבלת, המילה www בשפה.

שקילות בין NFANFANFA ל-DFADFADFA

בהרצאה ראינו כי שני המודלים שקולים ולכן:

  1. בהנתן אוטומט סופי דטרמיניסטי AAA ניתן לבנות אוטומט סופי לא דטרמיניסטי A′A'A′ כך ש-L(A)=L(A′)L(A)=L(A')L(A)=L(A′), בצורה הבאה:
    A=(Q,Σ,q0,δ,F)A=(Q,\Sigma,q_{0},\delta,F)A=(Q,Σ,q0​,δ,F)
    A′=(Q,Σ,{q0},δ,F)A'=(Q,\Sigma,\left\{ q_{0} \right\},\delta,F)A′=(Q,Σ,{q0​},δ,F)
    נזכור כי פונקציה היא מקרה פרטי של יחס.
  2. בהנתן אוטומט סופי לא דטרמיניסטי AAA, ניתן לבנות אוטומט סופי דטרמיניסטי ADA_{D}AD​ כך ש-L(A)=L(AD)L(A)=L(A_{D})L(A)=L(AD​) באופן הבא:
    נשתמש באוטומט החזרה. הרעיון הוא שאם ב-NFANFANFA היו מספר ריצות אפשריות עבור מילה, נאחד את כל האפשרויות כך שיוצגו ע"י מצב יחיד ב-DFADFADFA.
Full_firstAutomation start q01 q01 start->q01 start2 q02 q02 start2->q02 qf1 qf1 qf2 qf2 qf3 qf3 q01->qf1 w q01->qf2 w q02->qf3 w

לשם כך, נרצה שהמצבים של ה-DFADFADFA יהיו תתי קבוצות של המצבים ב-NFANFANFA. נגדיר את המצבים בדטרמינסיטי להיות קבוצת החזקה של קבוצת המצבים בלא דטרמיניסטי(ומכאן השם אוטומט החזקה)

בנייה פורמלית של אוטומט החזקה

בהנתן אוטומט סופי לא דטרמיניסטי: A=(Q,Σ,I,R,F)A=(Q,\Sigma,I,R,F)A=(Q,Σ,I,R,F) נגדיר AD=(QD,Σ,q0,δ,FD)A_{D}=(Q_{D},\Sigma,q_{0},\delta,F_{D})AD​=(QD​,Σ,q0​,δ,FD​) כאשר:

QD=P(Q)q0=IFD={S⊆Q ∣ S∩F≠∅}Q_{D}=P(Q) \qquad q_{0}=I \qquad F_{D}=\left\{ S \subseteq Q\ |\ S \cap F\neq \emptyset \right\}QD​=P(Q)q0​=IFD​={S⊆Q ∣ S∩F=∅}

לכל Si∈P(Q)S_{i}\in P(Q)Si​∈P(Q) ולכל σ∈Σ\sigma \in \Sigmaσ∈Σ:

δ(Si,σ)={P∈QD∣∃q∈S:  q⟶Aσp}\delta(S_{i},\sigma)=\left\{ P \in Q_{D}|\exists q \in S:\; q \overunderset{\sigma}{A}{\longrightarrow}p \right\}δ(Si​,σ)={P∈QD​∣∃q∈S:qA⟶​σ​p}

כלומר, ממצב S∈P(Q)S \in P(Q)S∈P(Q) עם אות σ\sigmaσ עוברים לכל המצבים ב-QQQ שהיה מעבר ממצב ב-SSS אליהם.

דוגמה

נבנה אוטומט סופי דטרמיניסטי עבור האוטומט הלא דטרמיניסטי שראינו קודם מעל Σ={0,1}\Sigma=\left\{ 0,1 \right\}Σ={0,1}.
כמה מצבים יהיו באוטומט החזקה?

∣P(Q)∣=∣2Q∣=2∣Q∣=22=4|P(Q)|=|2^Q|=2^{|Q|}=2^2=4∣P(Q)∣=∣2Q∣=2∣Q∣=22=4

זה נכון רק אם QQQ סופית. (והיא סופית כי זה NFANFANFA)

example1 start q0 {q0} start->q0 q01 q01 q01->q01 1 q01->q0 0 q1 q1 qe {∅} q1->qe 0,1 q0->q01 1 q0->q0 0 qe->qe 0,1

נשים לב כי יש לנו פה שני מצבים מיותרים {q1}\left\{ q_{1} \right\}{q1​} ו-{∅}\left\{ \emptyset \right\}{∅}.
מה יקרה אם נקח Σ={0,1,2}\Sigma=\left\{ 0,1,2 \right\}Σ={0,1,2} במקום?

example1 start q0 {q0} start->q0 q01 q01 q01->q01 1 q01->q0 0 qe {∅} q01->qe 2 q1 q1 q1->qe 0,1,2 q0->q01 1 q0->q0 0 q0->qe 2 qe->qe 0,1,2

איך מוכיחים שפה של NFANFANFA?

באמצעות הכלה דו כיוונית.
כיוון 1: L⊆L(A)L \subseteq L(A)L⊆L(A). לוקחים מילה מ-LLL ומראים ריצה מקבלת של AAA על המילה.
כיוון 2: L(A)⊆LL(A) \subseteq LL(A)⊆L. מניחים שיש ריצה מקבלת של AAA ועל מילה ובעזרת מבנה AAA מסיקים על מבנה המילה.

תרגול

תרגיל

יהא AAA האוטומט הסופי הלא דטרמיניסטי הבא:

example1 start q0 q0 start->q0 q2 q2 q0->q0 0,1 q1 q1 q0->q1 1 q1->q2 2 q1->q1 0,2

א. מהי השפה של AAA?
ב. הוכיחו שזו אכן שפתו.

פתרון א':

L={0,1}∗∘{1}∘{0,2}∗∘{2}L=\left\{ 0,1 \right\}^*\circ\left\{ 1 \right\}\circ\left\{ 0,2 \right\}^*\circ\left\{ 2 \right\}L={0,1}∗∘{1}∘{0,2}∗∘{2}

הוכחה: (ב')
נוכיח L=L(A)L=L(A)L=L(A) בהכלה דו כיוונית.
כיוון 1, L⊆L(A)L \subseteq L(A)L⊆L(A): תהא w∈Lw \in Lw∈L.
ממבנה LLL מתקיים w=u1v2w=u1v2w=u1v2 עבור u∈{0,1}∗u \in \left\{ 0,1 \right\}^*u∈{0,1}∗ ו-v∈{0,2}∗v \in \left\{ 0,2 \right\}^*v∈{0,2}∗.
ריצה מקבלת של AAA על www היא למשל ריצה שתשאר ב-q0q_{0}q0​ כל עוד קוראים uuu, תעבור ל-q1q_{1}q1​ כשקוראים 111, תשאר ב-q1q_{1}q1​ כל עוד קוראים vvv ותעבור ל-q2q_{2}q2​ כשקוראים 2.

q0→uq0→1q1→vq1→2q2q_{0}\xrightarrow{u}q_{0}\xrightarrow{1}q_{1}\xrightarrow{v}q_{1}\xrightarrow{2}q_{2}q0​u​q0​1​q1​v​q1​2​q2​

זו ריצה מקבלת שכן q0∈Iq_{0} \in Iq0​∈I ו-q2∈Fq_{2}\in Fq2​∈F והמעברים חוקיים ממבנה AAA.
לכן, מהגדרת שפת NFANFANFA מתקיים: w∈L(A)w \in L(A)w∈L(A).
כיוון 2, L(A)⊆LL(A)\subseteq LL(A)⊆L: תהא w∈L(A)w \in L(A)w∈L(A).
מהגדרת שפת אוטומט סופי לא דטרמיניסטי, קיימת ריצה מקבלת של AAA על www. ריצה כזו תתחיל מהמצב ההתחלתי היחיד q0q_{0}q0​ ותסתיים במצב המקבל היחיד q2q_{2}q2​.
כלומר קיימת q0→wq2q_{0} \xrightarrow{w}q_{2}q0​w​q2​.
ממבנה AAA, כדי להגיע מ-q0q_{0}q0​ ל-q2q_{2}q2​ חייבים לעבור דרך q1q_{1}q1​. מ-q2q_{2}q2​ אין קשתות יוצאות ולכן לא יכולנו לעבור ב-q2q_{2}q2​ לפני המצב האחרון.
נסמן w=σ1…σnw=\sigma_{1}\dots\sigma_{n}w=σ1​…σn​ ואז הריצה תראה כך:

q0→σ1S1→σ2S2⋯→σn−1Sn−1→σnq2q_{0}\xrightarrow{\sigma_{1}}S_{1}\xrightarrow{\sigma_{2}}S_{2}\dots \xrightarrow{\sigma_{n-1}}S_{n-1}\xrightarrow{\sigma_{n}}q_{2}q0​σ1​​S1​σ2​​S2​⋯σn−1​​Sn−1​σn​​q2​

ממה שהסברנו קודם, קיים 1≤i≤n−11\leq i\leq n-11≤i≤n−1 מינימאלי כך ש-Si=q1S_{i}=q_{1}Si​=q1​.
ממבנה AAA, עד למצב SiS_{i}Si​ חייבים להשאר ב-q0q_{0}q0​. לכן, לכל 1≤k≤i1\leq k\leq i1≤k≤i מתקיים Sk=q0S_{k}=q_{0}Sk​=q0​. לאחר מכן, כפי שהסברנו, חייבים להישאר ב-q1q_{1}q1​ כי לא ניתן לצאת מ-q2q_{2}q2​. לכן, לכל i<k<ni<k<ni<k<n מתקיים Sk=q1S_{k}=q_{1}Sk​=q1​.
כדי לעבור ל-q2q_{2}q2​ חייבים לקרוא 222 ולכן σn=2\sigma_{n}=2σn​=2.
במעבר מ-q0q_{0}q0​ ל-q1q_{1}q1​ קוראים 111. כל עוד נשארים ב-q0q_{0}q0​ קוראים 0 או 1, ובדומה, נשארים ב-q1q_{1}q1​ כל עוד קוראים 0 או 2.
לכן, www חייבת להיות {0,1}∗∘{1}∘{0,2}∗∘{2}\left\{ 0,1 \right\}^*\circ\left\{ 1 \right\}\circ\left\{ 0,2 \right\}^*\circ\left\{ 2 \right\}{0,1}∗∘{1}∘{0,2}∗∘{2} וזה בדיוק LLL ולכן w∈Lw \in Lw∈L.
∎

תרגיל

יהא Σ\SigmaΣ א"ב כלשהו. בנו אוטומט עבור השפה:

L={uσvσw∣u,v,w∈Σ∗,σ∈Σ}L=\left\{ u\sigma v\sigma w|u,v,w \in\Sigma^*,\sigma \in\Sigma \right\}L={uσvσw∣u,v,w∈Σ∗,σ∈Σ}

במילים: LLL היא שפת כל המילים מעל Σ∗\Sigma^*Σ∗ שיש בהן אות שמופיעה לפחות פעמיים.

רעיון הבניה: ננחש איזו אות σ\sigmaσ תחזור על עצמה פעמיים. (ניחוש ⇐ NFANFANFA)
פתרון:
נסמן Σ={σ1,…,σn}\Sigma=\left\{ \sigma_{1},\dots,\sigma_{n} \right\}Σ={σ1​,…,σn​} (אפשרי כי א"ב היא קבוצה סופית ולא ריקה)
נגדיר אוטומט סופי לא דטרמיניסטי A=(Q,Σ,I,R,F)A=(Q,\Sigma,I,R,F)A=(Q,Σ,I,R,F) כאשר:

Q={qs,qf,qσ∣σ∈Σ}Q=\left\{ q_{s},q_{f},q_{\sigma}|\sigma \in\Sigma \right\}Q={qs​,qf​,qσ​∣σ∈Σ} I={qs}I=\left\{ q_{s} \right\}I={qs​} F={qf}F=\left\{ q_{f} \right\}F={qf​} R={(q,σ,q)∣q∈Q,σ∈Σ}∪{(qs,σ,qσ)∣σ∈Σ}∪{(qσ,σ,qf)∣σ∈Σ}R=\left\{ (q,\sigma,q)|q \in Q,\sigma \in\Sigma \right\} \cup \left\{ (q_{s},\sigma,q_{\sigma})|\sigma \in\Sigma \right\} \cup \left\{ (q_{\sigma,\sigma,q_{f}})|\sigma \in\Sigma \right\}R={(q,σ,q)∣q∈Q,σ∈Σ}∪{(qs​,σ,qσ​)∣σ∈Σ}∪{(qσ,σ,qf​​)∣σ∈Σ}

הקבוצה השמאלית היא לולאות עצמיות אשר מאפשרות לקרוא את u,v,wu,v,wu,v,w. הקבוצה האמצעית מאפשרת לזכור שראינו σ\sigmaσ והקבוצה הימנית מאפשרת לדעת שראינו את אותה σ\sigmaσ פעם שנייה.