−Table of Contents
Formale Spezifikation und Verifikation
Formal = Mittels Logik
Propositionallogik
Syntax
Propositionale Variablen | A,B,C,… |
---|---|
Junktoren | ¬,∧,∨,⇒,⇔ |
Formel | ϕ,ψ,… |
Konstanten | ⊤,⊥ |
Semantik
Belegung | η |
---|---|
Foo | ⟦ϕ⟧η |
Bar | &,∣∣ |
Tautologie | ∀η:⟦ϕ⟧η |
---|---|
Erfüllbar | ∃η:⟦ϕ⟧η |
Unerfüllbar | ∀η:¬⟦ϕ⟧η |
Äquivalent | ∀η:⟦ϕ⟧η=⟦ψ⟧η |
Erfüllbarkeitsäuivalenz | (ϕ und ψ sind erfüllbar)∨(ϕ und ψ sind unerfüllbar) |
Normierung
Literal | A und ¬A |
---|---|
Minterm | Konjunktion: …∧…∧…∧… (Die wenigsten Belegungen sind ⊤) |
Maxterm / Klausel | Disjunktion: …∨…∨…∨… (Die meisten Belegungen sind ⊤) |
KNF | (…∨…∨…∨…)∧(…∨…∨…∨…) |
DNF | (…∧…∧…∧…)∨(…∧…∧…∧…) |
- ⋀∅=⊤
- ⋁∅=⊥
ϕ … KNF | Größe | Zeit |
---|---|---|
Äquivalent | exponentiell | ? |
Erfüllungsäuivalent | linear | polynomiell |
Tseitin Übersetzung
Nur erfüllungsäquivalent
- Rekursive Funktion KNF
- Rein
- (Nicht-Normalisierte) Formel
- Raus
- Neuster (frischer) Variablenname
- KNF
- C ist frische Variable
- Regel: C⇔ϕ als KNF
- Tabelle Erstellen
- Bei 0: Veroderung (Disjunktion) erstellen (A=0⇒A / A=1⇒¬A)
- Verodrungen verunden (Konjunktion)
KNF(A)=(A,⊤) |
KNF(¬ϕ)=let (B,Γ)=KNF(ϕ) in(C,Γ∧(C∨B)∧(¬C∨¬B)) |
KNF(ϕ1∨ϕ2)=let (B1,Γ1)=KNF(ϕ1) inlet (B2,Γ2)=KNF(ϕ2) in(C,Γ1∧Γ2∧(¬C∨B1∨B2)∧(C∨¬B1)∧(C∨¬B2)) |
SAT-Solver
SAT
- “ist ϕ erfüllbar?”
- Entscheidungsproblem (NP-Hart)
- Nur für KNF
- Erweiterung auf nicht KNF: Tseitin Übersetzung
- Erweiterung auf Äquivalenz von ϕ und ψ: ¬(ϕ⇔ψ) unerfüllbar?
DPLL-Algorithmus
- Rekursive Funktion DPLL
- Rein
- (Teil) Besetzung
- (Rest) KNF
- Raus
- Bessere Belegung
Hier gibt es mehr. Aber das halte ich für Klausurirrelevant
Gleichheit von Schaltkreisen
Wenn gezeigt werden soll, das die Schaltungen f und f′ bezüglich ihrer Eingänge x… das selbe liefern, dann darf ¬((f1(x…)⇔f′1(x…))∧(f2(x…)⇔f′2(x…))) keine Lösung liefern.
Nebenläufige Systeme
Zeit | |||||
---|---|---|---|---|---|
0 | 1 | … | n-1 | ||
Zustand | z1 | xzt | |||
z2 | |||||
… |
⋀t⋀z∈Z⋀z′≠z¬(xzt∧xz′t) | Zu jeder Zeit ist nur ein zustand gesetzt |
⋁z∈Ixz0 | Einer der Startzustände |
⋀n−2t=0⋁z→z′xzt∧xz′(t+1) | Zu jeder Zeit führt ein Zustand in einen Folgezustand |
⋁n−1t=0⋁z∈Vxzt | Zu einer Zeit ist ein verbotener Zustand erreicht |
Dieses System darf keine Lösung haben.
BDD
nichtreduzierter BDDs
- Gerichtet
- Azyklisch
- Knoten auf Pfad mit fixer Ordnung (es dürfen welche fehlen)
reduzierte BDDs (zusätzlich)
- Keine Kanten mit identischen Start und Ziel (gleich ist OK)
- Keine Redundanz (isomarphen Teilgraphen)
- Nur True und False als Blätter (jeweils max. 1x)
nichtreduziert → reduziert
- Knoten mit identischen Nachfolgern entfernen
- Knoten: Name gleich & Nachfolger gleich ⇒ verschmelzen
- True/False verschmelzen.
BDDs sind eindeutig: Gleiche Funktion ⇒ isomorphe BDDs
Shannon-Zerlegung: f=(x∧f[x:=⊤])∨(¬x∧f[x:=⊥])
Negation: True und False vertauschen
Variable setzen:
- ersetzen/umlenken
- reduzieren
Zweistellige Operationen: Rekursiv (x∧(f[x:=⊤]⊕g[x:=⊤]))∨(¬x(∧f[X:=⊥]⊕g[x:=⊥])) (Gehe die Variablen der reihe nach durch. Ersetze die Nachfolger durch ⊕ aus den True-Zweigen und durch ⊕ aus den False-Zweigen.)
Alle möglichkeiten einer Variablen probieren: ∃x:f:=f[x:=⊤]∨f[x:=⊥]
Optiomierungen
- Umordnen (extremfall: explonential)
- Teilographen wiederverwenden (Hash-Funktion zum finden)
Es fehlen nebenläufige Systeme!!!
Model checking
Arten
- Bounded (Beschränkt durch die Symulationszeit)
- SAT Solver
- Symbolic
- BDDs
Dinge die Interessieren
- Safty: Keine verbotenen Zustände erreichbar
- Liveness: Reset-Zustand immer erreichbar? Kein verklemmen AG(EF⋀pqp,sleep)
- Fairness: “Gute Eigenschaft” gilt für alle fairen Abläufe
CTL
Propositionale Variablen | p,q,… | Jedes Aussgenlogische Formel ist CTL! |
---|---|---|
Junktoren | ¬,∧,∨,⇒,⇔ | |
Formel | ϕ,ψ,… | |
Konstanten | ⊤,⊥ | |
Foo | AX,EX,A[ϕUψ],E[ϕUψ],AGϕ,AFϕ,EGϕ,EFϕ |
AG⇔¬EF(¬ϕ)
A | Auf allen Pfaden gilt … |
---|---|
E | Auf (mindestens) einem Pfad gilt … |
…in…
X | Next | … (mindestens) einem unmittelbar folgenden Zustand |
---|---|---|
F | Final | … (mindestens) einem folgenden/selben Zustand |
G | Globaly | … allen folgenden/selben Zuständen |
U | Until | … allen folgenden/selben Zuständen ϕ, bis ψ gilt. ψ kann bereits im selben gelten |
Transitinssystem
(S,→)
- Zustandsmenge: {(False,True),(True,False),(True,True)}
- Transitionsrealtion: {((Fals,True),(True,False)),…}
Interpretationen
Tr(I) | (S,→) | Transitionsystem | Durch I festgelegt |
---|---|---|---|
I(p) | ⊆S | Zustände in denen p gilt | |
s⊨Ip | {True,False} | Aussage: p ist in Zustand s gesetzt | |
I(ϕ) | ⊆S | Zustände in denen ϕ gilt | Ableitbar |
s⊨Iϕ | {True,False} | Aussage: ϕ ist in Zustand s gesetzt |
Interpretation enthält keine Formel.
Äquivalenz
- (AE)(GF) vertauschen und 2xnegieren
- AG(ϕ)⟺¬EF(¬ϕ)
- AF(ϕ)⟺¬EG(¬ϕ)
- EF(ϕ)⟺¬AG(¬ϕ)
- EG(ϕ)⟺¬AF(¬ϕ)
- AG(ϕ∧ψ)⟺AG(ϕ)∧AG(ψ)
- AF(ϕ)⟺A[⊤Uϕ]
- EF(ϕ)⟺E[⊤Uϕ]
- A\[ϕUψ\]⟺¬(E[¬ϕU(¬ϕ∧¬ψ)]∨EG(¬ϕ))
Labeling Algorithmus
- Formel umformen (nur noch ¬,∧,⊥,AF,E[⋅U⋅])
- Teilformeln bis auf Variablen-Ebene finden
- Teilformeln Bottom-up durchgehen, bis nichts mehr geht
- Graph mit geltenden Teilformeln markieren, bis nichts mehr geht (dabei auf bereits markiertes berufen)
Markiere mit ..
- AF(ϕ), wo ..
- ϕ
- Alle Nachfolger sind AF(ϕ)
- E[ϕUψ], wo ..
- ψ
- ϕ und Folgezustand mit E[ϕUψ]
Effizienter: EG(ϕ) anstatt AF(ϕ)
- ¬ϕ für Ausblenden/Ignorieren/Streichen
- Starke Zusammenhangskomponenten markieren (Ring-Pfad durch Knoten)
- Markiere Knoten, die in eine echte starke Zusammenhangskomponenten zeigen
Zeitkomplexität: Linear zu Transitionen
Aber state-explosion-problem: Exponentiell mit Anzahl zu modelierender Prozesse
⇒ BDDs verhindern das (es kann optimiert werden)
Fairnes
Alle interessierenden Zustände können immer unendlich offt erreicht werden.
- D.h. für
E?
, es Existiert ein fairer Pfad in dem … - D.h. für
A?
, in allen fairen Pfaden gild …
Abwandlung des Labeling Algorithmuses:
- Starke Zusammenhangskomponente ist fair, wenn ein Zustand Fairnesbedingung erfüllt
- Zustand ist fair, wenn ein (längerer) Pfad zu fairen starken Zusamenhangskomponente existiert
Encoding of CTL in BDD
BDD ist ein Bitvektor und daher kann ich ein Transitionsystem eincodieren, sowie ein ϕ.
http://nicta.com.au/__data/assets/pdf_file/0018/14814/lecture4-mc2.pdf
ToDo
LTL
Propositionale Variablen | p,q,… | eingeschränktes CTL! |
---|---|---|
Junktoren | ¬,∧ | |
Formel | ϕ,ψ,… | |
Konstanten | ⊤ | |
Foo | Xϕ,Fϕ,Gϕ,ϕUψ |
- Fairness direkt angebbar:
(GF p1.state=running) ⇒ …
- CTL ist ausdrucksstärker
- Für alle Pfade muss … gelten
Büchi Automat
(Σ,T,I,E,δ)
Σ | Menge | Alphabet |
Z | Menge | Zustände |
I | Menge | Anfangszustände |
E | Menge | Endzustände |
δ | Relation | Zustandsübergänge |
- Nichtdeterministisch
- Unendliche Wörter
- Akzeptiert: Wenn mindestens ein Lauf existiert, der immer zu einem Endzustand kommen (unendlich offt)
L=(b∗a)ω (wenn a
immer wieder vorkommen muss)
ω | FG | Unendlich offt vorkommen |
∗ | GF | Endlich offt vorkommen |
Typanalyse
While Programm
while […] do …
if […] then … else …
true
false
not …
… := …
- Aritmetische Ausdrücke
- Boolsche Ausdrücke
Datenflussgleichung
“Erreichbare Definitionen” (Reachable Definitions)
- RDentry(ℓ)=⋃ℓ′:ℓ′→ℓRDexit(ℓ′)
- RDexit(ℓ)=(RDentry(ℓ)∖"Entwertete Zuweisungen")∪ "Neue Zuweisungen"
- Zu beginn werden alle Variablen mit “(X,ℓ)” initialisiert.
“Verfügbare Ausdrücke” (Available Expressions)
- AEentry(ℓ)=⋂ℓ′:ℓ′→ℓAEexit(ℓ′)
- AEexit(ℓ)=(AEentry(ℓ)∖killAE(Bℓ))∪genAE(Bℓ)
- killAE([x:=a]ℓ)={Formeln, die x enthalten}
- genAE([x:=a])={Teilausdrücke von a ohne x}
- genAE([bool exp])={Teilausdrücke von bool exp}
- Zu beginn werden alle Variablen mit “∅” initialisiert.
- Nur Arithmetische Ausdrücke
“Lebendige Variablen” (Live Variables)
- LVexit(ℓ)=⋃ℓ′:ℓ→ℓ′LVentry(ℓ′)
- LVentry(ℓ)=(LVexit(ℓ)∖killLV(Bℓ))∪genLV(Bℓ)
- killLV([x:=a]ℓ)={x}
- genLV([x:=a])={Variablen in a}
- genLV([bool exp])={Variablen in bool exp}
- Zu beginn werden alle Variablen mit “∅” initialisiert.
ℓ | RDentry(ℓ) | RDexit(ℓ) |
---|---|---|
1 | (x, ?), (y, ?) | … |
2 | … | … |
3 | … | … |
So lange ausfüllen, bis nichts mehr geht.
Das geht, weil Fixpunkte und Knaster-Tarski-Theorem
SMV
Teile
- MODULE
- VAR
- ASSIGN
- INIT
- TRANS
- SPEC
- JUSTICE/FAIRNESS
- Case sensitive
- Wenn uterspezifiziert: Deterministisch
- Wenn Block mehrfach: Konjunktion
- Nur einzelnes Zeichen:
&
bzw.|
- Nur Einfacher Strich:
->
für ⇒ - Negieren, um Lösung als Gegenbeispiel zu bekommen
MODULE
MODULE main
– oder –
MODULE p(x, y, z)
- Keine Typ angaben
VAR
VAR a : boolean; b : {foo, bar}; c : process otherModule(foo, bar);
… : … ;
boolean
- Set:
{}
ASSIGN
ASSIGN init(b) := foo; next(b) := {foo, bar}; next(b) := case foo : bar; TRUE : {foo, bar}; esac; c := !b
… := …;
init()
next()
- Invarianten
case … esac
- Ersetzt
INIT
,TRANS
undINVAR
Bei case
: Boolscher Test: Wert/Set;
INIT
INIT b = foo;
… = … ;
TRANS
TRANS b = foo & next(b) = bar | b = bar & next(b) = foo | b = bar & next(b) = bar
- Transition, wenn Formel erfüllt
INVAR
INVAR Ziege.pos = Wolf.pos -> Bauer.pos = Ziege.pos
- Invariante
SPEC
SPEC AG(a -> AF b = foo)
DEFINE
DEFINE foo := myVar = foo & myOtherVAr = bar;
… := … ;
JUSTICE/FAIRNESS
JUSTICE/FAIRNESS p1.status = running
Beweise
Vollständiger Verband
Verband (L,⊑)
- reflexiv
∀x∈L:x⊑x - transitiv
∀x,y,z∈L:x⊑y∧y⊑z⇒x⊑z - antisymetrisch
∀x,y∈L:x⊑y∧y⊑x⇒x=y - Jede Teilmenge hat ein Supremum
Jedes U⊆L hat ein ⨆U
Supremum
s=⨆U
- Ist obere Schranke
∀x∈U:x⊑s - Ist kleinste obere Schranke
s′ ist obere Schranke ⇒s⊑s′
Monotonie
- x⊑y⇒F(x)⊑F(y)
Fixpunkt
- ∃x:F(x)=x
Dazu muss F(x) monoton sein.
Probleme
Semaphor
Alternating Bit Protocol
- Zwei Kommunikationspartner
- Bidirektionaler Kanal
- Nachricht: OK/Defekt
- So lange wiederholen bis es klapt
OK
Kontrollbit: 0 | Nachricht | → | OK | |
---|---|---|---|---|
← | 0 | |||
Kontrollbit: 1 | Nachricht | → | OK | |
← | 1 |
Fehler
Kontrollbit: 0 | Nachricht | → | ✘ | Fehler beim Empfänger ⇒ Unerwartetes Kontrollbit zurück senden |
---|---|---|---|---|
← | 1 | |||
Kontrollbit: 0 | Nachricht | → | Fehler beim Sender | |
✘ | ← | 0 | ||
Kontrollbit: 0 | Nachricht | → | OK | |
← | 0 | |||
Kontrollbit: 1 | Nachricht | → | ✘ | Fehler beim Empfänger ⇒ Unerwartetes Kontrollbit zurück senden |
← | 0 | |||
Kontrollbit: 1 | Nachricht | → | Fehler beim Sender | |
✘ | ← | 1 | ||
Kontrollbit: 1 | Nachricht | → | OK | |
← | 1 |