Grundläggande logik och modellteori Modellprövning och NuSMV Jonas Hägglund Department of mathematics Umeå university Våren 2010 Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 1 / 23
Dagens föreläsning 1 Modellprövning för LTL Specifikation Modell 2 NuSMV Ett exempel Kort om OU5 Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 2 / 23
Förra föreläsningen Intro till temporallogik LTL Syntax Semantik Exempel Uttrycksfullhet hos LTL Några ekvivalenser för LTL Introduktion till modellprövning Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 3 / 23
Dagens föreläsning 1 Modellprövning för LTL Specifikation Modell 2 NuSMV Ett exempel Kort om OU5 Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 4 / 23
Modellprövning abstraktion System Matematisk modell M Specifikation representation Formell specifikation φ Modellprövning: M = φ? Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 5 / 23
Specifikation i LTL LTL är en logik för att specificera de egenskaper vi vill att ett system ska ha. Exempel på detta är: Säkerhet - Något dåligt får inte inträffa. Vanligtvis en formel på formen G (... ). t.ex. G (landing_gear_up (altitude = 0)) eller G (x = 0 F(z = y/x)) Livfullhet - Något bra kommer att inträffa. Vanligtvis en formel på formen F(... ). t.ex. F (klarar_tentan) eller G(start F(avsluta)). Rättvisa - Om något begärs oändligt ofta kommer det att inträffa oändligt ofta. T.ex. GF(ready) GF(run). Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 6 / 23
En viktig egenskap som ej går att uttrycka i LTL En egenskap som är mer problematisk i LTL är nåbarhet (reachability), dvs att vi kan nå ett visst tillstånd. LTL kan inte uttrycka existensen av en stig. Vi kan dock uttrycka komplementet i LTL: vi kan inte nå ett visst tillstånd. Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 7 / 23
Modellering av ett system De system vi är intresserade av här är främst reaktiva och samverkande system: Reaktiva - System som vanligtvis reagerar med sin omgivning och inte terminerar (t.ex. hårdvarukretsar, kommunikationsprotokoll och styrsystem). Samverkande - System som består av flera komponenter som körs tillsammans (de kan t.ex. dela på en gemensam resurs). Här skiljer vi vanligtvis mellan asynkrona system (endast en komponent ändrar sitt tillstånd i varje tidssteg) och synkrona system (alla komponenter tar ett steg samtidigt). Den abstrakta modell som vi använder för att beskriva ett system är, som tidigare sagts, ett transitionssystem (kallas ofta Kripke-strukturer i litteraturen). Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 8 / 23
Modellering av ett system forts... Transitionssystem kan modellera ett brett spektrum av olika system. Observera att vi får problem med oändliga strukturer. Antalet tillstånd kan även vara väldigt stort (state explosion). Tag t.ex. ett system med två 64-bitars variabler (t.ex. 64-bitars Integers). Om vi inte sätter någon begränsning på dessa får systemet 2 128 10 39 möjliga tillstånd. Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 9 / 23
Modellering av ett system forts... Ett transitionssystem beskrivs sällan explicit direkt från definitionen. Istället används vanligtvis något modelleringsspråk (ett enkelt specialanpassat programmeringsspråk). Exempel på sådana språk är VHDL, SDL och SMV (mer om detta strax). Dessa system beskriver vanligtvis: Tillstånden - Alla möjliga värden variablerna i systemet kan anta De initiala tillstånden - Initialvärdena för variablerna Transitioner - Hur systemet går mellan olika tillstånd Atomiska utsagor - Utsagor om variablerna i systemet Labeling - Vilka atomiska utsagor som är sanna i ett tillstånd Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 10 / 23
NuSMV NuSMV står för New Symbolic Model Verifier och är baserad på öppen källkod. Den är en nyimplementation av SMV som utvecklades av McMillan 1993. NuSMV ger dels ett språk (SMV) där användaren kan specificera ett transitionssystem M samt ett system för att testa om M = φ där φ är en specifikation i antingen CTL eller LTL. Den använder effektiva metoder för att testa detta (bl.a. s.k. Binary Decision Diagrams och SAT-lösare). Den stöder även bounded model checking. Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 11 / 23
Exempel från boken MODULE main VAR request : boolean; status : {ready,busy}; ASSIGN init(status) := ready; next(status) := case request : busy; 1 : {ready,busy}; esac; LTLSPEC G(request -> F status=busy) Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 12 / 23
Logiska symboler i NuSMV Standard LTL NuSMV &! F F G G U U X X Notera att NuSMV inte har symboler för R och W så dessa måste definieras m.h.a. de andra symbolerna (se ekvivalenserna från förra föreläsningen). Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 13 / 23
Mer om NuSMV De enda datatyperna i NuSMV är skalärer, boolska variabler samt fixa arrayer. Statiska datastrukturer kan också konstrueras. Eftersom de transitionssystem som studeras är ändliga är givetvis även datatyperna ändliga. NuSMV hanterar även moduler, vilket gör det enklare att dela upp modellen i delar, samt ökar läsbarheten. Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 14 / 23
LTL för förfluten tid NuSMV har även symboler för att beskriva förfluten tid. Dessa är: Op - Utläses Once p. Säger att p har gällt någon gång i historien. Hp - Utläses History p. Säger att p har gällt i alla tidigare tillstånd. psq - Utläses p Since q, p har gällt sen ett föregående tillstånd då q gällt. Yp - Utläses Yesterday p, p gällde i föregående tillstånd. Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 15 / 23
Ömsesidig uteslutning igen MODULE main VAR pr1: process prc(pr2.st, turn, 0); pr2: process prc(pr1.st, turn, 1); turn: boolean; ASSIGN init(turn) := 0; -- safety LTLSPEC G!((pr1.st = c) & (pr2.st = c)) -- liveness LTLSPEC G((pr1.st = t) -> F (pr1.st = c)) LTLSPEC G((pr2.st = t) -> F (pr2.st = c)) -- negation of strict sequencing (desired to be false) LTLSPEC G(pr1.st=c -> ( G pr1.st=c (pr1.st=c U (!pr1.st=c & G!pr1.st=c ((!pr1.st=c) U pr2.st=c))))) Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 16 / 23
Ömsesidig uteslutning forts... MODULE prc(other-st, turn, myturn) VAR st: {n, t, c}; ASSIGN init(st) := n; next(st) := case (st = n) : {t,n}; (st = t) & (other-st = n) : c; (st = t) & (other-st = t) & (turn = myturn): c; (st = c) : {c,n}; 1 : st; esac; next(turn) := case turn = myturn & st = c :!turn; 1 : turn; esac; FAIRNESS running FAIRNESS!(st = c) Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 17 / 23
NuSMV som pussel-lösare Pussel: Färjekarln En man som sköter en färja över en liten flod står inför följande problem. Han ska transportera över en get, ett salladshuvud och en varg över en flod. Det ryms dock endast en av dessa förutom honom själv i hans mycket lilla färja och om han lämnar vargen och geten ensamma så äter vargen upp geten. Samma sak gäller med geten och salladshuvudet. Hur ska han göra för att transportera över alla utan att någon blir uppäten? Planeringsproblem Hur lösa i NuSMV? Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 18 / 23
NuSMV som pussel-lösare forts... MODULE main VAR ferryman : boolean; goat : boolean; cabbage : boolean; wolf : boolean; carry : {g,c,w,0}; ASSIGN init(ferryman) := 0; init(goat) := 0; init(cabbage) := 0; init(wolf) := 0; init(carry) := 0; Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 19 / 23
NuSMV som pussel-lösare forts... next(ferryman) := {0,1}; next(carry) := case ferryman=goat : g; 1 : 0; esac union case ferryman=cabbage : c; 1 : 0; esac union case ferryman=wolf : w; 1 : 0; esac union 0; next(goat) := case ferryman=goat & next(carry)=g : next(ferryman); 1 : goat; esac; next(cabbage) := case ferryman=cabbage & next(carry)=c : next(ferryman); 1 : cabbage; esac; next(wolf) := case ferryman=wolf & next(carry)=w : next(ferryman); 1 : wolf; esac; LTLSPEC!(( (goat=cabbage goat=wolf) -> goat=ferryman) U (cabbage & goat & wolf & ferryman)) Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 20 / 23
Kort om OU5 Tre delar Ett schack-problem En binär adderare Ett eget problem Läs manualen till NuSMV! Skall helst lösas två och två Sista delen är mycket fri. Inget krav att systemet uppfyller specifikationen (men försök göra ett system som gör det innan ni kör modelltestning). Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 21 / 23
Dagens föreläsning Modellprövning NuSMV Kort om labben Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 22 / 23
Nästa föreläsning Förgrenad-tids-temporallogik CTL Jonas Hägglund (Umeå university) Grundläggande logik och modellteori VT 2010 23 / 23