Formal = Mittels Logik
| Propositionale Variablen | $A, B, C, \ldots$ |
|---|---|
| Junktoren | $\neg, \wedge, \vee, \Rightarrow, \Leftrightarrow$ |
| Formel | $\phi, \psi, \ldots$ |
| Konstanten | $\top, \perp$ |
| Belegung | $\eta$ |
|---|---|
| Foo | $⟦\phi⟧\eta$ |
| Bar | $\&, \mid\mid$ |
| Tautologie | $\forall \eta:⟦\phi⟧\eta$ |
|---|---|
| Erfüllbar | $\exists \eta:⟦\phi⟧\eta$ |
| Unerfüllbar | $\forall \eta:\neg⟦\phi⟧\eta$ |
| Äquivalent | $\forall \eta:⟦\phi⟧\eta = ⟦\psi⟧\eta$ |
| Erfüllbarkeitsäuivalenz | $(\phi \text{ und } \psi \text{ sind erfüllbar}) \vee (\phi \text{ und } \psi \text{ sind unerfüllbar})$ |
| Literal | $A$ und $\neg A$ |
|---|---|
| Minterm | Konjunktion: $\ldots \wedge \ldots \wedge \ldots \wedge \ldots$ (Die wenigsten Belegungen sind $\top$) |
| Maxterm / Klausel | Disjunktion: $\ldots \vee \ldots \vee \ldots \vee \ldots$ (Die meisten Belegungen sind $\top$) |
| KNF | $(\ldots \vee \ldots \vee \ldots \vee \ldots ) \wedge ( \ldots \vee \ldots \vee \ldots \vee \ldots )$ |
| DNF | $(\ldots \wedge \ldots \wedge \ldots \wedge \ldots) \vee (\ldots \wedge \ldots \wedge \ldots \wedge \ldots)$ |
| $\phi$ … KNF | Größe | Zeit |
|---|---|---|
| Äquivalent | exponentiell | ? |
| Erfüllungsäuivalent | linear | polynomiell |
Nur erfüllungsäquivalent
| $$KNF(A) = (A, \top)$$ |
| $$\begin{array}{ll}KNF(\neg\phi) =&\text{let } (B, \Gamma) = KNF(\phi) \text{ in} \\ & (C, \Gamma \wedge (C \vee B) \wedge (\neg C \vee \neg B))\end{array}$$ |
| $$\begin{array}{ll}KNF(\phi_1\vee\phi_2) =&\text{let } (B_1, \Gamma_1) = KNF(\phi_1) \text{ in} \\ &\text{let } (B_2, \Gamma_2) = KNF(\phi_2) \text{ in} \\ & (C, \Gamma_1 \wedge \Gamma_2 \wedge (\neg C \vee B_1 \vee B_2) \wedge (C \vee \neg B_1) \wedge (C \vee \neg B_2))\end{array}$$ |
SAT
Hier gibt es mehr. Aber das halte ich für Klausurirrelevant
Wenn gezeigt werden soll, das die Schaltungen $f$ und $f'$ bezüglich ihrer Eingänge $x\ldots$ das selbe liefern, dann darf $\neg \left( \left(f_1(x\ldots) \Leftrightarrow f'_1(x\ldots)\right) \wedge \left(f_2(x\ldots) \Leftrightarrow f'_2(x\ldots)\right)\right)$ keine Lösung liefern.
| Zeit | |||||
|---|---|---|---|---|---|
| 0 | 1 | … | n-1 | ||
| Zustand | $z_1$ | $x_{zt}$ | |||
| $z_2$ | |||||
| … | |||||
| $\bigwedge_t \bigwedge_{z \in Z} \bigwedge_{z' \ne z}\neg(x_{zt} \wedge x_{z't})$ | Zu jeder Zeit ist nur ein zustand gesetzt |
| $\bigvee_{z \in I} x_{z0}$ | Einer der Startzustände |
| $\bigwedge^{n-2}_{t=0} \bigvee_{z \rightarrow z'} x_{zt} \wedge x_{z'(t+1)}$ | Zu jeder Zeit führt ein Zustand in einen Folgezustand |
| $\bigvee^{n-1}_{t=0} \bigvee_{z \in V} x_{zt}$ | Zu einer Zeit ist ein verbotener Zustand erreicht |
Dieses System darf keine Lösung haben.
nichtreduzierter BDDs
reduzierte BDDs (zusätzlich)
nichtreduziert → reduziert
BDDs sind eindeutig: Gleiche Funktion ⇒ isomorphe BDDs
Shannon-Zerlegung: $f = (x \wedge f[x := \top]) \vee (\neg x \wedge f[x := \perp])$
Negation: True und False vertauschen
Variable setzen:
Zweistellige Operationen: Rekursiv $(x \wedge (f[x := \top] \oplus g[x := \top])) \vee (\neg x (\wedge f[X := \perp] \oplus g[x := \perp]))$ (Gehe die Variablen der reihe nach durch. Ersetze die Nachfolger durch $\oplus$ aus den True-Zweigen und durch $\oplus$ aus den False-Zweigen.)
Alle möglichkeiten einer Variablen probieren: $\exists x: f := f[x := \top] \vee f[x :=\perp]$
Optiomierungen
Es fehlen nebenläufige Systeme!!!
Arten
Dinge die Interessieren
| Propositionale Variablen | $p, q, \ldots$ | Jedes Aussgenlogische Formel ist CTL! |
|---|---|---|
| Junktoren | $\neg, \wedge, \vee, \Rightarrow, \Leftrightarrow$ | |
| Formel | $\phi, \psi, \ldots$ | |
| Konstanten | $\top, \perp$ | |
| Foo | $AX, EX, A[\phi U \psi], E[\phi U \psi], AG \phi, AF \phi, EG \phi, EF \phi$ |
$AG \Leftrightarrow \neg EF(\neg \phi)$
| 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 $\phi$, bis $\psi$ gilt. $\psi$ kann bereits im selben gelten |
$(S, \rightarrow)$
| $Tr(\mathcal{I})$ | $(S, \rightarrow)$ | Transitionsystem | Durch $\mathcal{I}$ festgelegt |
|---|---|---|---|
| $\mathcal{I}(p)$ | $\subseteq S$ | Zustände in denen $p$ gilt | |
| $s \models \mathcal{I} p$ | $\{True, False\}$ | Aussage: $p$ ist in Zustand $s$ gesetzt | |
| $\mathcal{I}(\phi)$ | $\subseteq S$ | Zustände in denen $\phi$ gilt | Ableitbar |
| $s \models \mathcal{I} \phi$ | $\{True, False\}$ | Aussage: $\phi$ ist in Zustand $s$ gesetzt |
Interpretation enthält keine Formel.
Markiere mit ..
Effizienter: $EG(\phi)$ anstatt $AF(\phi)$
Zeitkomplexität: Linear zu Transitionen
Aber state-explosion-problem: Exponentiell mit Anzahl zu modelierender Prozesse
⇒ BDDs verhindern das (es kann optimiert werden)
Alle interessierenden Zustände können immer unendlich offt erreicht werden.
E?, es Existiert ein fairer Pfad in dem …
A?, in allen fairen Pfaden gild …
Abwandlung des Labeling Algorithmuses:
BDD ist ein Bitvektor und daher kann ich ein Transitionsystem eincodieren, sowie ein $\phi$.
http://nicta.com.au/__data/assets/pdf_file/0018/14814/lecture4-mc2.pdf
ToDo
| Propositionale Variablen | $p, q, \ldots$ | eingeschränktes CTL! |
|---|---|---|
| Junktoren | $\neg, \wedge$ | |
| Formel | $\phi, \psi, \ldots$ | |
| Konstanten | $\top$ | |
| Foo | $X \phi, F \phi, G \phi, \phi U \psi$ |
(GF p1.state=running) ⇒ …
$(\Sigma, T, I, E, \delta)$
| $\Sigma$ | Menge | Alphabet |
| $Z$ | Menge | Zustände |
| $I$ | Menge | Anfangszustände |
| $E$ | Menge | Endzustände |
| $\delta$ | Relation | Zustandsübergänge |
$L = (b^{*}a)^\omega$ (wenn a immer wieder vorkommen muss)
| $\omega$ | FG | Unendlich offt vorkommen |
| $*$ | GF | Endlich offt vorkommen |
while […] do …
if […] then … else …
true
false
not …
… := …
“Erreichbare Definitionen” (Reachable Definitions)
“Verfügbare Ausdrücke” (Available Expressions)
“Lebendige Variablen” (Live Variables)
| $\ell$ | $RD_{entry}(\ell)$ | $RD_{exit}(\ell)$ |
|---|---|---|
| 1 | (x, ?), (y, ?) | … |
| 2 | … | … |
| 3 | … | … |
So lange ausfüllen, bis nichts mehr geht.
Das geht, weil Fixpunkte und Knaster-Tarski-Theorem
Teile
& bzw. |
-> für ⇒
MODULE main
– oder –
MODULE p(x, y, z)
VAR
a : boolean;
b : {foo, bar};
c : process otherModule(foo, bar);
… : … ;
boolean
{}
ASSIGN
init(b) := foo;
next(b) := {foo, bar};
next(b) := case
foo : bar;
TRUE : {foo, bar};
esac;
c := !b
… := …;
init()
next()
case … esac
INIT, TRANS und INVAR
Bei case: Boolscher Test: Wert/Set;
INIT b = foo;
… = … ;
TRANS
b = foo & next(b) = bar
| b = bar & next(b) = foo
| b = bar & next(b) = bar
INVAR Ziege.pos = Wolf.pos -> Bauer.pos = Ziege.pos
SPEC AG(a -> AF b = foo)
DEFINE foo := myVar = foo & myOtherVAr = bar;
… := … ;
JUSTICE/FAIRNESS p1.status = running
Verband $(L, \sqsubseteq)$
$s = \bigsqcup U$
Dazu muss $F(x)$ monoton sein.
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 | |||