Lecture5 Slides

Post on 10-May-2015

368 views 2 download

Transcript of Lecture5 Slides

תנאי נכונות

אנו רוצים למצוא תנאי נכונות למודל עלמנת לספק את הספציפיקציה.

:שפת המודל L(Model):שפת הספציפיקציהL(Spec) :אנו רוציםL(Model) L(Spec)

נכונות

כל הרצפים

רצף סיפוקים של הספציפיקציה

ביצועים של התוכנית

אי-נכונות

כל הרצפים

רצף סיפוקים של הספציפיקציה

ביצועים של התוכנית

CounterExamples

אימות אוטומטי

(6)בספר: פרק מס'

כיצד אנו יכולים לבדוק את המודל?

.המודל הוא גרף.הספציפיקציה אמורה להפנות לייצוג הגרף.יישום אלגוריתמי גרפים תיאורטיים

אילו תכונות אנו יכולים לבדוק?

: Invariant תכונה האמורה להישמר בכלמצב.

Deadlock detection בדיקה- האם :אנו יכולים להגיע למצב כשהתוכנית

חסומה?:Dead code האם לתוכנה יש חלקים

שמעולם לא מבוצעים?

כיצד לבצע את הבדיקה?

להחיל אסטרטגיית חיפוש( Depth first search, Breadth first

search.)

.לבדוק מצבים/מעברים בזמן החיפוש

אם התכונה לא נשמרת דווח על !counter example

אם זה כל כך טוב, למה ללמוד שיטות אימות דדוקטיביות?

בדיקת מודלים עובדת רק עבור מערכותמצבים סופיות. היא אינה תעבוד עם:

.מספרים שלמים שהם לא מאולצים.תור הודעות בלתי מוגבל:מבני נתונים כלליים כמו

תוריםעציםמחסניות

מערכות ואלגוריתמיים פרמטריים.

התפוצצות מרחב המצבים

יש צורך לייצג את מרחב המצבים שלהתוכנה בזיכרון המחשב.

!כל מצב יכול להיות גדול כגודל הזיכרון כולו:הרבה מצבים

אפשרויות. 2^32לכל משתנה שהוא מספר שלם יש אפשרויות.2^64לשני משתנים כאלה יש

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

אם זה כל כך מוגבל, האם יש בזה שימוש?

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

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

לפעמים זה אפשרי לפרק תוכנית ולהוכיח חלקאחד ממנה בעזרת מודל, וחלק אחר בעזרת

הוכחה באמצעות משפט. יש הרבה טכניקות המפחיתות את אפשרות

התפוצצות מרחב המצבים.

Depth First Search

Program DFSFor each s such that

Init(s) dfs(s)end DFS

Procedure dfs(s)for each s’ such

that R(s,s’) do

If new(s’) then dfs(s’)

end dfs.

התחל ממצב התחלתי

q3

q4

q2

q1

q5

q1

q1

המחסנית:

:HASHטבלת

המשך עם הבא אחריו

q3

q4

q2

q1

q5

q1 q2

q1

q2

:HASHטבלת

המחסנית:

.q2המשך עם הבן של

q3

q4

q2

q1

q5

q1 q2 q4

q1

q2

q4

:HASHטבלת

המחסנית:

.q2 , חזור חזרה ל q4כיוון שאין בנים ל

q3

q4

q2

q1

q5

q1 q2 q4

q1

q2

:HASHטבלת

המחסנית:

q1 חזור חזרה ל

q3

q4

q2

q1

q5

q1 q2 q4

q1

:HASHטבלת

המחסנית:

q1לך לבן השני של

q3

q4

q2

q1

q5

q1 q2 q4 q3

q1

q3

:HASHטבלת

המחסנית:

q1חזור חזרה שוב ל

q3

q4

q2

q1

q5

q1 q2 q4 q3

q1

:HASHטבלת

המחסנית:

?DFSכיצד אנו יכולים לבדוק תכונות בעזרת

:Invariants בדוק את כל המצבים הנשיגים . אחרת – invariantכדי לספק את תכונת ה

הראה נתיב מהמצב ההתחלתי למצב ה"פגום".:Deadlocks בדוק האם ניתן להגיע למצב בו

תהליך לא יכול להמשיך.Dead code במהלך התקדמות ה :DFS סמן ,

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

גרף המצבים: יחס של ירושה בין מצבים.

Turn=0L0,L1

Turn=0L0,NC1

Turn=0NC0,L1

Turn=0CR0,NC1

Turn=0NC0,NC1

Turn=0CR0,L1

Turn=1L0,CR1

Turn=1NC0,CR1

Turn=1L0,NC1

Turn=1NC0,NC1

Turn=1NC0,L1

Turn=1L0,L1

¬(PC0=CR0/\PC1=CR1)!Invariantהוא

Turn=0L0,L1

Turn=0L0,NC1

Turn=0NC0,L1

Turn=0CR0,NC1

Turn=0NC0,NC1

Turn=0CR0,L1

Turn=1L0,CR1

Turn=1NC0,CR1

Turn=1L0,NC1

Turn=1NC0,NC1

Turn=1NC0,L1

Turn=1L0,L1

רוצה לעשות עוד!

.רוצה לבדוק עוד תכונות רוצה שיהיו לי אלגוריתמיים ייחודים על מנת

לטפל בכל סוגי התכונות. זה נעשה ע"י כתיבת ספציפיקציה

בפורמליקה יותר מורכבת..נראה זאת בהרצאה הבאה

[](Turn=0 <>Turn=1)

Turn=0L0,L1

Turn=0L0,NC1

Turn=0NC0,L1

Turn=0CR0,NC1

Turn=0NC0,NC1

Turn=0CR0,L1

Turn=1L0,CR1

Turn=1NC0,CR1

Turn=1L0,NC1

Turn=1NC0,NC1

Turn=1NC0,L1

Turn=1L0,L1

Turn=0L0,L1

Turn=1L0,L1

init

היגדים מצורפים לצמתים נכנסים•

כל הצמתים מקבלים•

Turn=1L0,L1

Turn=0L0,L1

תנאי נכונות

אנו רוצים למצוא תנאי נכונות למודל עלמנת לספק את הספציפיקציה.

:שפת המודל L(Model):שפת הספציפיקציהL(Spec) :אנו רוציםL(Model) L(Spec)

נכונות

כל הרצפים

רצף סיפוקים של הספציפיקציה

ביצועים של התוכנית

איך נוכיח נכונות?

נראה שL(Model) L(Spec) :בשקילות______

L(Model) L(Spec) = Øנראה ש בנוסף: ניתן לקבל אתL(Spec) ע"י תרגום

!LTLמ

מה אנו צריכים לדעת?

?כיצד לבצע חיתוך של שני אוטומטים?כיצד לקבל משלים של אוטומט כיצד לתרגם מLTL?לאוטומט

M1=(S1,,T1,I1,A1) חיתוך M2=(S2,,T2,I2,S2) ו

האוטומטים במקביל2להריץ את :כל מצב הוא זוג של מצביםS1 x S2

תנאים התחלתיים הם זוגות של תנאיםI1 x I2התחלתיים:

קבלה תלויה ברכיב הראשוןA1 x S2

:תואם את היחס הטרנזיטיבי(x1,y1-)a->)x2,y2( כאשר

x1-a->x2 4ו - y1-a->y2

)כל המצבים של האוטומט השני דוגמה מקבלים!(

a

bct0 t1

a

a

b,c

b,cs0 s1

(s0,t0( ,)s0,t1( ,)s1,t0( ,)s1,t1)מצבים:

(s0,t0 )התחלתי: ( s0,t0( ,)s0,t1 )מקבלים:

a

bct0 t1

a

a

b,c

b,cs0 s1

s0,t0

s0,t1

s1,t1

s1,t0b

b

a

c

a

c

A2S2 מורכב יותר כאשר

a

b

ct0 t1

a

a

b,cb,cs0 s1

האם אמורה להיות לנו קבלה כאשר שני הרכיבים ?({s0,t1})מקבלים? לדוגמה

(ba)לא, ניקח

הוא אמור לקבל, אך לעולם לא עובר למצב המקבל.

s0,t0

s0,t1

s1,t1

b

a

c

a

c

A2S2 מורכב יותר כאשר

a

b

ct0 t1

a

a

b,cb,cs0 s1

האם אמורה להיות לנו קבלה כאשר לפחות רכיב אחד ?({s0,t0(,)s0,t1(,)s1,t1})מקבל? לדוגמה,

b cלא, ניקח

(s1,t1)הוא לא אמור לקבל, אך במקרה זה יבצע לולאה על

s0,t0

s0,t1

s1,t1

b

c

a

c

a

חיתוך – מקרה כללי

q0 q2

q3q1

q0,q3 q1,q3q1,q2

a a, c

c

c, bb

c

c

b

a

q0: לתפוס את 0גירסה

q1: לתפוס את 1גירסה

q0,q3 q1,q3q1,q2

q0,q3 q1,q3q1,q2

(q0עובר כאשר רואה קבלה של השמאלי ) (q2עובר כאשר רואה קבלה של הימני )

0גירסה

1גירסה

c

c

c

c

b

a

b

a

q0: לתפוס את 0גירסה

q1: לתפוס את 1גירסה

q0,q3 q1,q3q1,q2

q0,q3 q1,q3q1,q2

(q0עובר כאשר רואה קבלה של השמאלי ) (q2עובר כאשר רואה קבלה של הימני )

0גירסה

1גירסה

c

c

c

c

b

a

b

a

צור מצב מקבל באחת הגירסאות על פי מצב מקבל של הרכיב

q0,q3,0 q1,q3,0q1,q2,0

q0,q3,1 q1,q3 ,1q1,q2 ,1

c

c

c

c

b

ab

a

0גירסה

1גירסה

(?emptinessכיצד נבדוק ריקנות )

s0,t0

s0,t1

s1,t1

b

a

c

a

c

(...emptinessריקנות )

צריך לבדוק האם קיימת ריצה מקבלת )עוברת על מצב מקבל אינסוף פעמים(

(SCC)רכיב קשיר חזק

קבוצת מצבים בעלי מסלול בין כל זוג מהם.

כדי Tarjan של DFSניתן להשתמש באלג' המקסימלי.SCCלמצוא את ה

מציאת ריצות מקבלות

אם קיימת ריצה מקבלת, אז לפחות על מצב מקבל אחד נחזור לעד.

נתבונן על הסיומת של הריצה הזו, היכן שכל המצבים נראים עבירים אינסוף פעמים.

מצבים אלו יוצרים רכיב קשיר חזק על גרף האוטומט, כולל מצב מקבל.

נמצא רכיב כזה היוצר מעגל מקבל הכולל מצב מקבל.

בשקילות…

רכיב קשיר חזק: קבוצת צמתים בה כל צומתנגיש ע"י מסלול מכל צומת אחר. נמצא רכיב

קשיר חזק נגיש בעל מצב מקבל.

כיצד להשלים?

!השלמה היא קשה ניתן לשאול מה השלילה של המאפיין

)הרצפים שלא אמורים להתרחש לעולם( ניתן לתרגם מנוסחתLTL

לאוטומטואזלהשליםאתאבל:

ישירותלאוטומט¬ניתן לתרגם את

בדיקת מודל תחת הוגנות

.φבטא את ההוגנות כמאפיין תחת הוגנות, בדוק מודל ψכדי להוכיח מאפיין

φψ

Fair (φ)

Bad (¬ψ) Program

דוגמה נגדית

בדיקת מודל תחת הוגנות

נתמקצע בבדיקת מודל. עבור הוגנות תהליך חלשה: נחפש רכיב קשיר חזק נגיש, כך

אוPשעבור כל תהליך שהוא מכיל מופע של מעבר מPאו , שהוא מכיל מצב בוPלא פעיל