HW3.pdf

‫به نام خدا‬
39-39 ‫تولید برنامه از توصیف رسمی – نیمسال دوم‬
)49 ‫ خرداد‬5 ‫(مهلت ارسال تا‬3 ‫تمرین‬
39 ‫ اردیبهشت‬49
B ‫ تمرین های تئوری‬1
:‫ تعریف شده است‬sequence ‫ماشین زیر برای پردازش‬
.4
MACHINE Stacks (maxbuff, MESSAGE)
VARIABLES
leftbuf, rightbuf
INVARIANT
leftbuf: seq(MESSAGE) &
rightbuf: seq(MESSAGE) &
size(leftbuf)<=maxbuff &
size(rightbuf)<=maxbuff
INITIALISATION
leftbuf :=<> || rightbuf :=<>
OPERATIONS
push(xx)=
PRE xx: MESSAGE &
size(leftbuf)<maxbuff
THEN
leftbuf := [xx]^ leftbuf
END;
Shift=
PRE size(rightbuf)<maxbuff
THEN
LET hd
BE hd=last(leftbuf)
IN
rightbuf := [hd]^rightbuf ||
leftbuf := front(leftbuf)
END
END
END
.‫الف) سازگاری داخلی ماشین را بررسی و در صورت عدم سازگاری تغییرات الزم را اعمال نمایید‬
.‫ اول بازگردانده شود‬sequence ‫ب) عملی تعریف کنید که در آن طول‬
.‫ اول اضافه کرده و نتیجه را برمیگرداند‬sequence ‫ دوم را به انتهای‬sequence ‫پ) عملی تعریف کنید که‬
:‫ماشین زیر برای مدیریت فروش بلیت طراحی شده است‬
.2
MACHINE Ticket
VARIABLES
serve, next
INVARIANT
serve ∈ ℕ ∧ next ∈ ℕ ∧ serve ≤ next
INITIALISATION
serve, next := 0, 0
OPERATIONS
ss ← serve_next ≙
PRE serve<next
THEN
ss, serve := serve+1, serve+1
END
tt ← take_ticket ≙
PRE true
THEN
tt, next := next, next+1
END
END
:‫ ماشین سازگاری دارد‬invariant ‫الف) آیا عملیات زیر با‬
undo_serve ≙ serve := serve+1
.‫ب) ماشین را به گونهای تغییر دهید که بیشتر از یک حد مجاز بلیت صادر نکند‬
-‫ این سیستم باید لیست ماشین‬.‫هدف در این تمرین طراحی یک ماشین مجازی برای مدیریت یک پارکینگ با ظرفیت محدود است‬
.9
:‫هایی که در حال حاضر در پارکینگ هستند را نگهداری کرده و دو عملیات زیر را داشته باشد‬
‫الف) عملیات ثبت ورود و خروج ماشین‬
‫ب) گزارش تعداد ماشینها در پارکینگ‬
:‫ماشین زیر را در نظر بگرید‬
MACHINE Bus
VARIABLES
tickets, passengers
INVARIANT
tickets ∈ ℕ ∧ passengers ∈ ℕ ∧ tickets ≤ passengers+1
INITIALISATION
tickets, passengers:= 0, 0
OPERATIONS
buy(mm) ≙
PRE tickets<passengers ∧ mm ∈ ℕ
THEN
tickets := tickets + mm
END
board(nn) ≙
PRE nn ∈ ℕ
THEN
passengers := passengers+1
END
END
.9
‫توصیفی کوتاه به زبان طبیعی از ماشین بنویسید و مشخص کنید کدام یک از عملیاتها با ‪ invariant‬سازگار نیستند‪ .‬تغییرات الزم را‬
‫برروی عملیاتها را انجام دهید‪.‬‬
‫‪.5‬‬
‫ماشین زیر را در نظر بگیرید‪:‬‬
‫)‪MACHINE Info(ITEM, sample, num‬‬
‫‪CONSTRAINTS‬‬
‫)‪sample ∈ ITEM ∧ num ∈ ℕ ∧ num > card(ITEM‬‬
‫‪CONSTANTS storage‬‬
‫‪PROPERTIES‬‬
‫‪storage ∈ ℕ1 ∧ storage < num‬‬
‫‪VARIABLES‬‬
‫‪current, next, counter‬‬
‫‪INVARIANT‬‬
‫‪current ⊆ ITEM ∧ next ∈ ITEM ∧ next ∉ current‬‬
‫‪∧ counter ∈ ℕ1 ∧ counter ≤ num‬‬
‫‪INITIALISATION‬‬
‫‪current, next, counter := {}, sample, 2‬‬
‫‪OPERATIONS‬‬
‫≙ )‪input(nn‬‬
‫‪PRE nn ∈ ITEM ∧ nn ∉ current‬‬
‫‪THEN‬‬
‫}‪next, current := nn, current ∪ {next‬‬
‫‪END‬‬
‫≙ ‪nn ←output‬‬
‫}{ ≠ ‪PRE current‬‬
‫‪THEN‬‬
‫}‪nn , current := next, current ∪ {next‬‬
‫‪END‬‬
‫≙ ‪increment‬‬
‫‪PRE counter< storage‬‬
‫‪THEN counter:= counter+1‬‬
‫‪END‬‬
‫‪END‬‬
‫قواعد سازگاری را برای این ماشین بررسی و ناسازگاریهای احتمالی را مشخص کنید‪.‬‬
‫‪.6‬‬
‫در این تمرین‪ ،‬هدف طراحی یک ماشین مجازی برای مدیریت یک شرکت کوچک ارسال کاال به مشتریان است‪ .‬این شرکت دارای‬
‫یک اتومبیل برای ارسال کاال به مشتریان است‪ .‬این سیستم باید قابلیت نگهداری آدرسها و کاالهای مربوطه را که باید ارسال آنها‬
‫انجام شود‪ ،‬داشته باشد‪ .‬همچنین ممکن است آدرسهایی وجود داشته باشد که فعال امکان سرویسدهی به آنها مقدور نیست‪ .‬این‬
‫آدرسها در مجموعهای به نام ‪ not_supported‬ذخیره میشوند‪ .‬اگر کاالیی برای برای ارسال ثبت شده باشد که آدرس آن در این‬
‫مجموعه باشد‪ ،‬کاال نمیتواند ارسال شود‪.‬‬
‫در ابتدا ماشین ارسال خالی است و مجموعه ‪ not_supported‬ممکن است هر آدرسی در آن وجود داشته باشد‪.‬‬
‫عملیات زیر برای این ماشین مفروض است‪:‬‬
‫الف) ‪ :load‬اضافه کردن یک آدرس و یک کاال برای ارسال‬
‫ب) ‪ :drop‬رساندن یک کاالی خاص به آدرس مربوطه‬
‫ج) ‪ :return‬برگرداندن کاالهایی که آدرس آنها مقدور نیست‪.‬‬
‫د) ‪ :deliv_unsupport‬اضافه کردن یک آدرس به ‪ not_supported‬که قبال ارسال به آن میتوانست انجام گیرد‪.‬‬
‫موفق باشید‪.‬‬