Verification_92_Asg_Series1.pdf

‫درﺳﺘﯽﯾﺎﺑﯽ ﺳﯿﺴﺘﻢﻫﺎي واﮐﻨﺸﯽ‬
‫ﺗﻤﺮﯾﻦﻫﺎي ﺳﺮي ‪1‬‬
‫اﯾﻦ ﺳﺮي ﺗﻤﺮﯾﻦ ﺑﺎ اﺳﺘﻔﺎده از اﺑﺰار ‪ NuSMV‬اﻧﺠﺎم ﻣﯽﮔﯿﺮد‪ NuSMV .‬ﯾﮏ اﺑﺰار وارﺳﯽ ﻣﺪل ‪ 1‬ﻣﺒﺘﻨﯽ ﺑﺮ ‪ BDD2‬اﺳﺖ ﮐﻪ ﺑﻪ ﻣﺎ اﺟﺎزه ﻣﯽدﻫﺪ ﯾﮏ ﺳﯿﺴﺘﻢ‬
‫ﺑﺎ ﺣﺎﻟﺖﻫﺎي ﻣﺤﺪود را ﻧﺴﺒﺖ ﺑﻪ وﯾﮋﮔﯽﻫﺎﯾﯽ ﮐﻪ ﺗﻮﺳﻂ ﻣﻨﻄﻖﻫﺎي ‪ LTL‬ﯾﺎ ‪ CTL‬ﺑﯿﺎن ﻣﯽﺷﻮﻧﺪ‪ ،‬وارﺳﯽ ﮐﻨﯿﻢ‪.‬‬
‫‪ NuSMV‬ﯾﮏ اﺑﺰار راﯾﮕﺎن و ﻣﺘﻦﺑﺎز اﺳﺖ ﮐﻪ ﻣﯽﺗﻮاﻧﯿﺪ ﻧﺴﺨﻪي وﯾﻨﺪوز ﯾﺎ ﻟﯿﻨﻮﮐﺲ آن را از ‪ http://nusmv.fbk.eu‬داﻧﻠﻮد ﮐﻨﯿﺪ‪ .‬ﻫﻢﭼﻨﯿﻦ ﺑﺮاي داﻧﻠﻮد‬
‫ﻣﺤﯿﻂ ﮔﺮاﻓﯿﮑﯽ آن ﻣﯽﺗﻮاﻧﯿﺪ ﺑﻪ ‪ http://nusmv.fbk.eu/courses/esslli02/gnusmv/‬ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪.‬‬
‫ﺑﺮاي اﻃﻼﻋﺎت ﺑﯿﺶﺗﺮ ﻣﯽﺗﻮاﻧﯿﺪ ﺑﻪ راﻫﻨﻤﺎي ‪ NuSMV‬ﺑﻪ ﻧﺸﺎﻧﯽ ‪ http://nusmv.fbk.eu/NuSMV/tutorial/v25/tutorial.pdf‬ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪.‬‬
‫ﻧﮑﺘﻪ‪ :‬اﮔﺮ از ‪ NuSMV‬ﻧﺴﺨﻪي ‪ 2,5‬اﺳﺘﻔﺎده ﻣﯽﮐﻨﯿﺪ ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ در اﯾﻦ ﻧﺴﺨﻪ ﺑﺮاي ﻧﻮع ‪ boolean‬اﻣﮑﺎن اﺳﺘﻔﺎده از ‪ 1‬و ‪ 0‬ﻧﯿﺴﺖ و ﺣﺘﻤﺎ ﺑﺎﯾﺪ از‬
‫‪ TRUE‬و ‪ FALSE‬اﺳﺘﻔﺎده ﮔﺮدد‪.‬‬
‫ﺗﻮﺟﻪ‪ :‬ﻧﺎم و ﻧﺎم ﺧﺎﻧﻮادﮔﯽ‪ ،‬ﺷﻤﺎرهي داﻧﺸﺠﻮﯾﯽ‪ ،‬رﺷﺘﻪ و ﮔﺮاﯾﺶ و آدرس اﯾﻤﯿﻞ ﺧﻮد را ﺑﺮاي ارﺗﺒﺎﻃﺎت و اﻃﻼعرﺳﺎﻧﯽﻫﺎي ﺑﻌﺪي ﺑﻪ‬
‫ﻧﺸﺎﻧﯽ ‪ [email protected]‬ﺑﻔﺮﺳﺘﯿﺪ‪.‬‬
‫ﺗﻤﺮﯾﻦ ‪ :1‬ﻣﺎﺷﯿﻦ ﻓﺮوش ﺧﻮدﮐﺎر )‪ (Vending Machine‬زﯾﺮ را درﻧﻈﺮ ﺑﮕﯿﺮﯾﺪ‪ .‬ﺳﯿﺴﺘﻢ ﮔﺬار )‪ (Transition System‬ﻣﺮﺑﻮط ﺑﻪ آن را رﺳﻢ ﮐﺮده و ﺳﭙﺲ‬
‫آن را ﺑﺎ اﺑﺰار ‪ NuSMV‬ﻣﺪل ﮐﻨﯿﺪ‪.‬‬
‫در اﯾﻦ ﺳﯿﺴﺘﻢ ﮐﺎرﺑﺮ ﻣﯽ ﺗﻮاﻧﺪ در ﯾﮑﯽ از ﺣﺎﻻت زﯾﺮ ﻗﺮار ﺑﮕﯿﺮد‪:‬‬
‫}‪{initial, waiting-to-enter, insert-coin, want-money-back , make-choice, waiting-for-drink‬‬
‫ﮐﺎرﺑﺮ در اﺑﺘﺪا در ﺣﺎﻟﺖ ‪ initial‬ﻗﺮار ﮔﺮﻓﺘﻪ و ﺑﻪ ﺻﻮرت ﻏﯿﺮ ﻗﻄﻌﯽ ﻣﯽ ﺗﻮاﻧﺪ در اﯾﻦ ﺣﺎﻟﺖ ﺑﺎﻗﯽ ﺑﻤﺎﻧﺪ و ﯾﺎ ﺑﻪ ﺣﺎﻟﺖ ‪ waiting-to-enter‬ﺑﺮود‪ .‬در ﺣﺎﻟﺖ‬
‫‪ waiting-to-enter‬ﺳﮑﻪ را وارد ﻧﻤﻮده و وارد ﺣﺎﻟﺖ ‪ insert-coin‬ﻣﯽﺷﻮد‪ .‬ﭘﺲ از وارد ﺷﺪن ﺑﻪ ﺣﺎﻟﺖ ‪ ،insert-coin‬ﯾﺎ ﮐﺎﻻي ﺧﻮد را اﻧﺘﺨﺎب ﻧﻤﻮده و ﯾﺎ‬
‫در ﺧﻮاﺳﺖ ﺑﺮﮔﺸﺖ ﭘﻮل ﺧﻮد را ﻣﯽ ﻧﻤﺎﯾﺪ‪.‬‬
‫‪ Vending Machine‬ﻧﯿﺰ ﻣﯽ ﺗﻮاﻧﺪ ﻫﺮﯾﮏ از ﺣﺎﻻت زﯾﺮ را ﺑﺮاﺳﺎس ﻧﻮع ﻓﻌﺎﻟﯿﺖ ﮐﺎرﺑﺮ و ﮐﺎﻻي درﺧﻮاﺳﺘﯽ داﺷﺘﻪ ﺑﺎﺷﺪ‪:‬‬
‫}‪{initial, insert-coin, return-coin, get-choice, dispense‬‬
‫‪Model Checking‬‬
‫‪Binary Decision Diagram‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫ﻣﺎﺷﯿﻦ در آﻏﺎز در ﺣﺎﻟﺖ ‪ initial‬ﻗﺮار دارد‪ .‬در ﺻﻮرﺗﯽ ﮐﻪ ﮐﺎرﺑﺮ ﺳﮑﻪ وارد دﺳﺘﮕﺎه ﮐﻨﺪ )ﺣﺎﻟﺖ ‪ ،(insert-coin‬ﻣﺎﺷﯿﻦ ﻧﯿﺰ در اﯾﻦ ﺣﺎﻟﺖ ﻗﺮار ﻣﯽ ﮔﯿﺮد و ﺳﭙﺲ‬
‫ﺑﺮاﺳﺎس اﻧﺘﺨﺎب ﮐﺎرﺑﺮ ﻣﯽ ﺗﻮاﻧﺪ وارد ﯾﮑﯽ از دو ﺣﺎﻟﺖ ‪ return-coin‬و ﯾﺎ ‪ get-choice‬ﻣﯽﺷﻮد‪ .‬در ﺣﺎﻟﺖ ‪ ،return-coin‬ﭘﻮل ﮐﺎرﺑﺮ را ﭘﺲ داده و ﺑﻪ ﺣﺎﻟﺖ‬
‫‪ initial‬ﺑﺎز ﻣﯽ ﮔﺮدد‪ .‬در ‪ ،get-choice‬ﻣﻨﺘﻈﺮ اﻧﺘﺨﺎب ﮐﺎﻻ ﻣﯽﻣﺎﻧﺪ و ﭘﺲ از اﻧﺘﺨﺎب ﺑﻪ ﺣﺎﻟﺖ ‪ dispense‬ﻣﯽ رود و ﮐﺎﻻ را ﺑﻪ ﮐﺎرﺑﺮ ﺗﺤﻮﯾﻞ ﻣﯽدﻫﺪ‪ .‬ﺳﺮاﻧﺠﺎم‬
‫ﺑﻪ ﺣﺎﻟﺖ ‪ initial‬ﺑﺎز ﻣﯽ ﮔﺮدد‪.‬‬
‫در اﺑﺘﺪا ﮐﺎرﺑﺮ ﻫﯿﭻ ﮐﺎﻻﯾﯽ اﻧﺘﺨﺎب ﻧﮑﺮده اﺳﺖ ﺑﻪ ﻋﺒﺎرت دﯾﮕﺮ اﻧﺘﺨﺎب او ﺑﺮاﺑﺮ ‪ none‬اﺳﺖ و در اﯾﻦ ﺣﺎﻟﺖ اﮔﺮ ﺑﺘﻮاﻧﺪ ﮐﺎﻻﯾﯽ اﻧﺘﺨﺎب ﻧﻤﺎﯾﺪ ﯾﮑﯽ از ﻣﻮارد‬
‫}‪ {beer, soda, coke, diet-coke‬را ﺑﻪ ﺻﻮرت ﻏﯿﺮ ﻗﻄﻌﯽ اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪ‪.‬‬
‫ﺑﺮاي ﺳﯿﺴﺘﻢ ﺗﻮﺻﯿﻒ ﺷﺪه ﻣﻮارد زﯾﺮ را ﺑﺮرﺳﯽ ﻧﻤﺎﯾﯿﺪ‪:‬‬
‫‪‬‬
‫در ﺻﻮرﺗﯽ ﮐﻪ ﻣﺎﺷﯿﻦ در ﺣﺎﻟﺖ ‪ insert-coin‬ﺑﺎﺷﺪ‪ ،‬ﺳﺮاﻧﺠﺎم ﯾﺎ ﻣﺎﺷﯿﻦ ﺑﻪ ﺣﺎﻟﺖ ‪ dispense‬ﻣﯽ رود ﯾﺎ در ﺣﺎﻟﺖ ‪ return-coin‬ﻗﺮار ﻣﯽ ﮔﯿﺮد‪.‬‬
‫‪‬‬
‫ﺗﺎ زﻣﺎﻧﯽ ﮐﻪ ﮐﺎرﺑﺮ ﮐﺎﻻﯾﯽ اﻧﺘﺨﺎب ﻧﮑﻨﺪ ﻣﺎﺷﯿﻦ در ﺣﺎﻟﺖ ‪ insert-coin‬ﺑﺎﻗﯽ ﻣﯽ ﻣﺎﻧﺪ‪.‬‬
‫‪‬‬
‫ﻫﻤﯿﺸﻪ ﻣﺎﺷﯿﻦ ﺑﻪ ﺣﺎﻟﺖ اوﻟﯿﻪ ﺑﺎز ﻣﯽ ﮔﺮدد‪.‬‬
‫ﺗﻤﺮﯾﻦ ‪ :2‬ﺳﯿﺴﺘﻢ زﯾﺮ را در ﻧﻈﺮ ﺑﮕﯿﺮﯾﺪ ﮐﻪ ﻣﺪلﮐﻨﻨﺪهي ﻣﺴﺎﻟﻪ ﻏﺬا ﺧﻮردن ﻓﯿﻠﺴﻮﻓﺎن )‪ (Dining Philosophers‬اﺳﺖ‪:‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﺟﺎن ﻻك‪ 3‬و دﯾﻮﯾﺪ ﻫﯿﻮم‪ 4‬ﺑﻪ دور ﯾﮏ ﻣﯿﺰ ﻏﺬاﺧﻮري ﻧﺸﺴﺘﻪ اﻧﺪ و ﺑﺮاي ﻫﺮﮐﺪام ﯾﮏ ﻇﺮف ﻏﺬا وﺟﻮد دارد‪ .‬اﻣﺎ ﺑﻪ دﻟﯿﻞ ﮐﻤﺒﻮد اﻣﮑﺎﻧﺎت! ﺗﻨﻬﺎ ﯾﮏ‬
‫ﭼﻨﮕﺎل ﺑﺮ روي ﻣﯿﺰ اﺳﺖ‪ ،‬ﺑﻨﺎﺑﺮاﯾﻦ در ﻫﺮ ﻟﺤﻈﻪ ﺗﻨﻬﺎ ﯾﮏ ﻧﻔﺮ از آﻧﻬﺎ ﻣﯽ ﺗﻮاﻧﺪ ﻏﺬا ﺑﺨﻮرد‪ .‬ﺑﻪ ﻣﻨﻈﻮر اﻃﻤﯿﻨﺎن از اﯾﻨﮑﻪ ﻫﺮ دو ﻓﯿﻠﺴﻮف ﺑﺘﻮاﻧﻨﺪ ﻏﺬاي ﺧﻮد را‬
‫ﺑﺨﻮرﻧﺪ ﯾﮏ ﺧﺪﻣﺘﮑﺎر وﺟﻮد دارد ﮐﻪ دﺳﺘﺮﺳﯽ ﺑﻪ ﭼﻨﮕﺎل را ﮐﻨﺘﺮل ﻣﯽ ﮐﻨﺪ‪ .‬ﻫﺮ دوﻓﯿﻠﺴﻮف ﻣﯽ ﺗﻮاﻧﻨﺪ در ﻫﺮ ﻟﺤﻈﻪ ﻣﺘﻘﺎﺿﯽ اﺳﺘﻔﺎده از ﭼﻨﮕﺎل ﺑﺎﺷﻨﺪ و اﮔﺮ‬
‫ﭼﻨﮕﺎل در دﺳﺘﺮس ﺑﻮد ﺷﺨﺺ ﺗﻘﺎﺿﺎ دﻫﻨﺪه آن را ﺑﻪدﺳﺖ ﺧﻮاﻫﺪ آورد‪ .‬اﯾﻦ ﺷﺮاﯾﻂ ﺗﻮﺳﻂ ﮐﺪ زﯾﺮ ﻣﺪل ﻣﯽ ﺷﻮد‪ .‬ﺗﺎﺑﻊ ‪ Main‬ﻧﺸﺎندﻫﻨﺪهي ﺧﺪﻣﺘﮑﺎر اﺳﺖ و‬
‫ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ﺑﺮ اﺳﺎس درﺧﻮاﺳﺖ درﯾﺎﻓﺘﯽ‪ ،‬ﻧﻮﺑﺖ ﭼﻪ ﮐﺴﯽ ﺑﺮاي درﯾﺎﻓﺖ ﭼﻨﮕﺎل اﺳﺖ‪.‬‬
‫)‪MODULE proc(other-person, turn, myname‬‬
‫‪VAR‬‬
‫;}‪status: {no-fork, request-fork, eating‬‬
‫‪ASSIGN‬‬
‫‪init(status) := [...]; -- complete here‬‬
‫=‪next(status) :‬‬
‫‪case‬‬
‫& )‪(status = request-fork‬‬
‫& )‪(other-person = request-fork‬‬
‫;‪(turn = myname) : eating‬‬
‫‪(status = request-fork) & -- Complete here‬‬
‫‪(status = no-fork) -- Complete here‬‬
‫;}‪(status = eating) : {eating, no-fork‬‬
‫;‪1 : status‬‬
‫;‪esac‬‬
‫‪FAIRNESS running‬‬
‫‪MODULE main‬‬
‫‪John Locke‬‬
‫‪David Hume‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪VAR‬‬
‫;)‪Locke : process proc(Hume.status, turn, FALSE‬‬
‫;)‪Hume : process proc(Locke.status, turn, TRUE‬‬
‫;‪turn : boolean‬‬
‫‪ASSIGN‬‬
‫;‪init(turn) := FALSE‬‬
‫‪-- You can leave the evolution (next) empty:‬‬
‫‪-- in this way turn changes randomly.‬‬
‫ﻧﺨﺴﺖ ﺟﺎﻫﺎي ﺧﺎﻟﯽ ﻣﺪل را ﺑﺎ ﮐﺪ ﻣﻨﺎﺳﺐ ﺗﮑﻤﯿﻞ ﮐﺮده و ﺳﭙﺲ آن را در اﺑﺰار ‪ NuSMV‬ﺑﺎر ﻧﻤﺎﯾﯿﺪ‪.‬‬
‫در اداﻣﻪ‪ ،‬اﯾﻦ وﯾﮋﮔﯽﻫﺎ را ﺑﺎ ﺑﻪ ﺻﻮرت رﺳﻤﯽ ﺑﺎ ﻣﻨﻄﻖ ﻣﺪل ﮐﺮده و آنﻫﺎ ﺑﺮرﺳﯽ ﮐﻨﯿﺪ‪.‬‬
‫‪‬‬
‫ﻻك و ﻫﯿﻮم ﻫﺮﮔﺰ ﻧﻤﯽﺗﻮاﻧﻨﺪ ﻫﻢزﻣﺎن ﻏﺬا ﺑﺨﻮرﻧﺪ‪(Safety) .‬‬
‫‪‬‬
‫اﮔﺮ ﻻك )ﻫﯿﻮم( ﻣﺘﻘﺎﺿﯽ ﭼﻨﮕﺎل ﺑﺎﺷﺪ ﺳﺮاﻧﺠﺎم آن را ﺑﺪﺳﺖ ﺧﻮاﻫﺪ آورد‪(Liveness) .‬‬
‫ﻫﻤﺎنﮔﻮﻧﻪ ﮐﻪ در درس دﯾﺪه اﯾﺪ ﯾﮏ ﺷﺮط اﻧﺼﺎف )‪ (fairness‬ﺗﻮﺟﻪ را ﺑﻪ ﻣﺴﯿﺮﻫﺎي اﺟﺮاﯾﯽ ﺑﺎاﻧﺼﺎف )‪ (fair execution paths‬ﻣﺤﺪود ﻣﯽﮐﻨﺪ‪ .‬درج ﺷﺮط‬
‫اﻧﺼﺎف‪ running ‬در ﯾﮏ ﻣﺎژول‪ ،‬ﺗﻮﺟﻪ را ﺑﻪ ﻣﺴﯿﺮﻫﺎﯾﯽ ﻣﺤﺪود ﻣﯽﮐﻨﺪ ﮐﻪ در آنﻫﺎ اﯾﻦ ﻣﺎژول ﻣﮑﺮرا اﺟﺮا ﻣﯽﺷﻮد‪ .‬ﺑﮑﻮﺷﯿﺪ ﺑﺮ روي ﻣﺪل ﺑﺎﻻ ﯾﮏ ﺷﺮط اﻧﺼﺎف‬
‫اﻋﻤﺎل ﻧﻤﺎﯾﯿﺪ ﺗﺎ وﯾﮋﮔﯽ دوم ﺑﺮﻗﺮار ﺷﻮد‪.‬‬
‫درﺑﺎرهي ﮐﻠﯿﺪواژهي ‪ process‬ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ از ﻣﯿﺎن ﻣﺎژولﻫﺎﯾﯽ ﮐﻪ ﺑﺎ آن ﻣﺸﺨﺺ ﺷﺪه اﻧﺪ ﯾﮑﯽ ﺑﻪ ﺻﻮرت ﻏﯿﺮﻗﻄﻌﯽ ‪ 5‬ﺑﺮﮔﺰﯾﺪه ﺷﺪه و اﻧﺘﺴﺎبﻫﺎي آن ﺑﻪ‬
‫ﺻﻮرت ﻣﻮازي اﺟﺮا ﻣﯽﺷﻮﻧﺪ‪ .‬ﺑﺮاي اﻃﻼﻋﺎت ﺑﯿﺶﺗﺮ ﻣﯽﺗﻮاﻧﯿﺪ ﺑﻪ راﻫﻨﻤﺎي ‪ NuSMV‬ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪.‬‬
‫ﺗﻤﺮﯾﻦ ‪ .3‬ﺑﺨﺶ ﻧﺨﺴﺖ‪ :‬در اﯾﻦ ﺑﺨﺶ ﺑﺎﯾﺪ ﯾﮏ ﺳﯿﺴﺘﻢ آﺳﺎﻧﺴﻮر ﺳﺎدهﺷﺪه را ﻣﺪلﺳﺎزي ﮐﻨﯿﺪ‪ .‬آﺳﺎﻧﺴﻮر در ﯾﮏ ﺳﺎﺧﺘﻤﺎن ﺑﺎ ﭼﻬﺎر ﻃﺒﻘﻪ ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ‬
‫ﮐﻪ از ‪ 1‬ﺗﺎ ‪ 4‬ﻧﺎمﮔﺬاري ﺷﺪهاﻧﺪ‪ .‬در ﻫﺮ ﻃﺒﻘﻪ ﯾﮏ دﮐﻤﻪ ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ ﮐﻪ اﻓﺮاد ﺑﺮاي درﺧﻮاﺳﺖ اﺳﺘﻔﺎده از آﺳﺎﻧﺴﻮر از آن اﺳﺘﻔﺎده ﻣﯽﮐﻨﻨﺪ‪ .‬اﮔﺮ ﭘﯿﺶﺗﺮ‬
‫درﺧﻮاﺳﺘﯽ وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ﭘﺲ از ﻓﺸﺮدن دﮐﻤﻪ‪ ،‬آﺳﺎﻧﺴﻮر ﺑﻪ ﺳﻤﺖ ﻃﺒﻘﻪي درﺧﻮاﺳﺘﯽ ﺣﺮﮐﺖ ﻣﯽﮐﻨﺪ‪ .‬اﮔﺮ ﭼﻨﺪ درﺧﻮاﺳﺖ ﻫﻤﺰﻣﺎن وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﻨﺪ‬
‫آﺳﺎﻧﺴﻮر ﺑﻪ ﺳﻤﺖ ﻧﺰدﯾﮏﺗﺮﯾﻦ ﻃﺒﻘﻪ ﺣﺮﮐﺖ ﻣﯽﮐﻨﺪ )ﺟﻬﺖ ﺣﺮﮐﺖ اﻫﻤﯿﺘﯽ ﻧﺪارد(‪.‬‬
‫ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ اﯾﻦ ﻣﺪل ﺳﺎدهﺷﺪهي آﺳﺎﻧﺴﻮر اﺳﺖ و دﮐﻤﻪﻫﺎي دروﻧﯽ آﺳﺎﻧﺴﻮر ﺣﺬف ﺷﺪه اﻧﺪ و ﺗﻨﻬﺎ رﻓﺘﻦ ﺑﻪ ﻃﺒﻘﻪ درﺧﻮاﺳﺘﯽ ﮐﺎﻓﯽ اﺳﺖ‪ .‬ﻫﻢﭼﻨﯿﻦ ﻓﺮض‬
‫ﮐﻨﯿﺪ ﻫﻨﮕﺎﻣﯽ ﮐﻪ دﮐﻤﻪ ﻓﺸﺮده ﻧﺸﺪه اﺳﺖ ﺑﻪ ﺻﻮرت ﻏﯿﺮﻗﻄﻌﯽ ﻣﯽﺗﻮاﻧﺪ در ﻫﺮ زﻣﺎﻧﯽ ﻓﺸﺮده ﺷﻮد‪.‬‬
‫راﻫﻨﻤﺎﯾﯽ‪ :‬از ﻗﺎﺑﻠﯿﺖ ‪ MODULE‬ﺑﻪ ﺻﻮرت زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪:‬‬
‫)‪MODULE Button(reset‬‬
‫‪VAR‬‬
‫‪pressed: boolean‬‬
‫…‬
‫‪nondeterministic‬‬
‫‪3‬‬
‫‪5‬‬
‫)…(‪MODULE Controller‬‬
‫…‬
‫‪MODULE Main‬‬
‫‪VAR‬‬
‫;)‪button1 : Button(controller.reset1‬‬
‫;)‪button2 : Button(controller.reset2‬‬
‫…‬
‫)… ‪controller: Controller(button1.pressed, button2.pressed,‬‬
‫…‬
‫ﻣﻄﻤﺌﻦ ﺷﻮﯾﺪ وﯾﮋﮔﯽﻫﺎي زﯾﺮ در ﻣﺪل ﺷﻤﺎ ﺑﺮﻗﺮار ﻫﺴﺘﻨﺪ )آنﻫﺎ را ﺑﻪ ﺻﻮرت رﺳﻤﯽ ﺑﺎ ﻣﻨﻄﻖ ﺑﯿﺎن ﮐﺮده و در اﺑﺰار وارﺳﯽ ﻧﻤﺎﯾﯿﺪ(‪ .‬اﮔﺮ وﯾﮋﮔﯽﻫﺎي دﯾﮕﺮي را ﻧﯿﺰ‬
‫ﻻزم ﻣﯽداﻧﯿﺪ ﮐﻪ در اﯾﻦﺟﺎ ذﮐﺮ ﻧﺸﺪه اﻧﺪ‪ ،‬آنﻫﺎ را ﺑﯿﺎﻓﺰاﯾﯿﺪ‪.‬‬
‫‪‬‬
‫ﮐﻠﯿﺪ ﭘﯿﺶ از رﺳﯿﺪن آﺳﺎﻧﺴﻮر ﺧﺎﻣﻮش ﻧﻤﯽﺷﻮد )ﻣﻨﻈﻮر از روﺷﻦ )ﻓﺸﺮده( ﺑﻮدن‪ TRUE ،‬ﺑﻮدن ﻣﺘﻐﯿﺮ ‪ pressed‬اﺳﺖ(‪.‬‬
‫‪‬‬
‫آﺳﺎﻧﺴﻮر ﮐﻠﯿﺪ ﺧﺎﻣﻮش را دوﺑﺎره ﺧﺎﻣﻮش ﻧﻤﯽﮐﻨﺪ‪.‬‬
‫‪‬‬
‫آﺳﺎﻧﺴﻮر ﻫﺮﮔﺰ دو ﻃﺒﻘﻪ را در ﯾﮏ ﮔﺎم زﻣﺎﻧﯽ ﻃﯽ ﻧﻤﯽﮐﻨﺪ‪.‬‬
‫‪‬‬
‫اﮔﺮ دﮐﻤﻪاي ﻓﺸﺮده ﻧﺸﺪه‪ ،‬آﺳﺎﻧﺴﻮر ﺑﺎﯾﺪ ﺛﺎﺑﺖ ﺑﻤﺎﻧﺪ‪.‬‬
‫‪‬‬
‫اﮔﺮ دﮐﻤﻪﻫﺎ ﻣﮑﺮرا )‪ (infinitely often‬ﻓﺸﺮده ﺷﻮﻧﺪ‪ ،‬آﺳﺎﻧﺴﻮر ﻫﺮﮔﺰ ﻧﺨﻮاﻫﺪ اﯾﺴﺘﺎد‪.‬‬
‫آﯾﺎ وﯾﮋﮔﯽﻫﺎي زﯾﺮ ﻧﯿﺰ ﺑﺮﻗﺮار ﻫﺴﺘﻨﺪ؟ ﭼﺮا؟‬
‫‪‬‬
‫اﮔﺮ دﮐﻤﻪ ﻃﺒﻘﻪي ‪i‬ام ﻓﺸﺮده ﺷﻮد‪ ،‬آﺳﺎﻧﺴﻮر ﺳﺮاﻧﺠﺎم )‪ (eventually‬ﺑﻪ ﻃﺒﻘﻪي ‪i‬ام ﻣﯽرﺳﺪ‪.‬‬
‫‪‬‬
‫آﺳﺎﻧﺴﻮر ﻫﺮ ﻃﺒﻘﻪ را ﻣﮑﺮرا )‪ (infinitely often‬وﯾﺰﯾﺖ ﻣﯽﮐﻨﺪ‪.‬‬
‫ﺗﻤﺮﯾﻦ ‪ .3‬ﺑﺨﺶ دوم‪ :‬اﮐﻨﻮن ﻓﺮض ﮐﻨﯿﺪ ﺑﻪ دﻟﯿﻞ ﺷﻤﺎر زﯾﺎد درﺧﻮاﺳﺖﻫﺎ‪ ،‬ﺑﻪ ﺟﺎي ﯾﮏ آﺳﺎﻧﺴﻮر‪ ،‬ﺳﻪ آﺳﺎﻧﺴﻮر در ﺳﺎﺧﺘﻤﺎن ﻗﺮار داده اﻧﺪ‪ .‬اﯾﻦ آﺳﺎﻧﺴﻮرﻫﺎ‬
‫ﺑﺎﯾﺪ ﺑﺎ ﻫﻢ ﻫﻤﺎﻫﻨﮓ ﺑﺎﺷﻨﺪ ﺑﻪ اﯾﻦ ﻣﻌﻨﯽ ﮐﻪ ﺑﺎز ﻫﻢ در ﻫﺮ ﻃﺒﻘﻪ ﺗﻨﻬﺎ ﯾﮏ دﮐﻤﻪ دارﯾﻢ و ﭘﺲ از ﻓﺸﺮدن دﮐﻤﻪ ﻧﺰدﯾﮏﺗﺮﯾﻦ آﺳﺎﻧﺴﻮر از ﺳﻪ آﺳﺎﻧﺴﻮر ﺑﺎﯾﺪ ﺑﻪ آن‬
‫ﻃﺒﻘﻪ ﺑﺮود )ﻣﺎﻧﻨﺪ آﺳﺎﻧﺴﻮري ﮐﻪ در داﻧﺸﮑﺪه وﺟﻮد دارد(‪ .‬ﻣﺪل آﺳﺎﻧﺴﻮر ﻣﻄﺮح ﺷﺪه در ﺑﺨﺶ ﭘﯿﺶ را ﻃﻮري ﮔﺴﺘﺮش دﻫﯿﺪ ﺗﺎ اﯾﻦ ﺷﮑﻞ ﺟﺪﯾﺪ را ﭘﺸﺘﯿﺒﺎﻧﯽ ﮐﻨﺪ‬
‫)در اﯾﻦﺟﺎ ﺑﺮاي ﺳﺎدﮔﯽ ﻣﯽﺗﻮاﻧﯿﺪ ﺳﺎﺧﺘﻤﺎن را ﺳﻪ ﻃﺒﻘﻪ ﻓﺮض ﮐﻨﯿﺪ(‪.‬‬
‫وﯾﮋﮔﯽﻫﺎي ﻣﻄﺮح ﺷﺪه در ﺑﺨﺶ ﭘﯿﺶ را ﺑﺮاي اﯾﻦ ﺳﯿﺴﺘﻢ ﺟﺪﯾﺪ ﺑﺮرﺳﯽ ﻧﻤﺎﯾﯿﺪ )در ﺻﻮرت ﻧﯿﺎز آنﻫﺎ را ﻧﯿﺰ ﮔﺴﺘﺮش دﻫﯿﺪ(‪.‬‬
‫ﻧﺤﻮه ارﺳﺎل ﭘﺎﺳﺦ ﺗﻤﺮﯾﻦ‬
‫ﭘﺎﺳﺦ ﺗﻤﺮﯾﻦ را ﺑﻪ ﺻﻮرت اﯾﻤﯿﻞ ارﺳﺎل ﮐﻨﯿﺪ‪ .‬در ﻣﻮﺿﻮع اﯾﻤﯿﻞ از اﯾﻦ اﻟﮕﻮ ﭘﯿﺮوي ﮐﻨﯿﺪ‪:‬‬
‫‪StudentNo_FirstName_LastName_Ex1‬‬
‫ﻫﻢﭼﻨﯿﻦ ﻫﻤﻪي ﻓﺎﯾﻞﻫﺎي ﻣﺮﺑﻮط ﺑﻪ ﭘﺎﺳﺦ ﺗﻤﺮﯾﻦ را در ﯾﮏ ﻓﺎﯾﻞ ﻓﺸﺮده ﻗﺮار داده و ﺑﺎ ﻗﺎﻟﺐ ﺑﺎﻻ ﻧﺎمﮔﺬاري ﮐﺮده و ﺑﻪ اﯾﻤﯿﻞ ﭘﯿﻮﺳﺖ ﮐﻨﯿﺪ و ﺑﻪ ﻧﺸﺎﻧﯽ‬
‫‪ [email protected]‬ﺑﻔﺮﺳﺘﯿﺪ‪ .‬از ﻓﺮﺳﺘﺎدن ﭘﺎﺳﺦ ﺗﻤﺮﯾﻦ در ﻣﺘﻦ اﯾﻤﯿﻞ ﺧﻮدداري ﮐﻨﯿﺪ‪.‬‬
‫‪4‬‬
‫ﺗﺤﻮﯾﻞدادﻧﯽﻫﺎ‪:‬‬
‫‪‬‬
‫ﯾﮏ ﻓﺎﯾﻞ ورد ﯾﺎ ‪ PDF‬ﺷﺎﻣﻞ ﭘﺎﺳﺦ ﺗﻤﺮﯾﻦﻫﺎ )ﭘﺎﺳﺦﻫﺎي ﺗﻮﺿﯿﺤﯽ و ﮐﺪﻫﺎ(‪ ،‬ﻧﺘﯿﺠﻪ ﭼﮏ ﮐﺮدن ﻫﺮﮐﺪام از وﯾﮋﮔﯽﻫﺎ در اﺑﺰار‪ ،‬ﻓﺮضﻫﺎﯾﯽ ﮐﻪ‬
‫داﺷﺘﻪاﯾﺪ و دﯾﮕﺮ ﻣﻮاردي ﮐﻪ ﻻزم ﻣﯽداﻧﯿﺪ‪.‬‬
‫‪‬‬
‫ﻓﺎﯾﻞﻫﺎي ﮐﺪ ‪ smv‬ﺑﺎ ﭘﺴﻮﻧﺪ ‪ .smv‬ﮐﻪ ﺷﺎﻣﻞ ﮐﺪﻫﺎ و وﯾﮋﮔﯽﻫﺎي ﺑﺮرﺳﯽ ﺷﺪه اﺳﺖ )ﺑﺮاي ﻫﺮ ﺗﻤﺮﯾﻦ ﺑﻪ ﺻﻮرت ﺟﺪاﮔﺎﻧﻪ(‪.‬‬
‫ﺗﺎرﯾﺦ ﺳﺮرﺳﯿﺪ )‪ (Deadline‬اﯾﻦ ﺳﺮي ﺗﻤﺮﯾﻦ ﺳﻪﺷﻨﺒﻪ ‪ 27‬ﻓﺮوردﯾﻦ ﻣﺎه ‪ 1392‬ﻣﯽ ﺑﺎﺷﺪ‪.‬‬
‫ﺑﺎرم ﻧﻤﺮات‬
‫ﺗ ﻤ ﺮ ﯾﻦ ‪1‬‬
‫‪ 30‬ﻧﻤﺮه‬
‫ﺗ ﻤ ﺮ ﯾﻦ ‪2‬‬
‫‪ 30‬ﻧﻤﺮه‬
‫ﺗ ﻤ ﺮ ﯾﻦ ‪3‬‬
‫‪ 40‬ﻧﻤﺮه‬
‫‪5‬‬