## Blatt 3
### Aufgabe 5
---
#### Global
##### 1. Während der Zug den Bahnübergang passiert, muss die Schranke geschlossen sein:
\begin{align*}
Sys \models \textbf{G }(& (Zug.d >= Welt.GP \land Zug.d < Welt.SP \land \textbf{F } Zug.d >= Welt.SP)\\
& \Rightarrow (Schranke.neigungswinkel = 0 \textbf{ U } Zug.d >= Welt.SP)
\end{align*}
##### 2. Der Zug hat entweder den Sensorpunkt passiert oder vor dem Gefahrenpunkt angehalten:
\begin{align*}
Sys \models \textbf{F G }(Zug.d > Welt.SP \land Zug.v > 0) \lor \textbf{F G }(Zug.d < GP \land Zug.v = 0)
\end{align*}
##### 3. Wenn ein Schließbefehl gesendet wird, ist die Schranke irgendwann geschlossen:
\begin{align*}
Sys \models \textbf{G }(&Funkkanal.ZugZuUebergang = schliessbefehl \\
&\Rightarrow \textbf{F }(Schranke.neigungswinkel = 0))
\end{align*}
##### 4. Die Schranke schließt sich nur, wenn ein Schließbefehl gesendet wurde:
\begin{align*}
Sys \models (Schranke.neigungswinkel = 90)\textbf{ U }(Funkkanal.ZugZuUebergang = schliessbefehl)
\end{align*}
##### 5. Freigabe wird nur gesendet, wenn davor eine Anfrage gesendet wurde:
\begin{align*}
Sys \models (Funkkanal.UebergangZuZug = leer)\textbf{ U }(Funkkanal.ZugZuUebergang = statusanfrage)
\end{align*}
##### 6. Freigabe wird nur gesendet, wenn der Bahnübergang gesichert ist:
\begin{align*}
Sys \models \textbf{G }(Funkmodul.UebergangZuZug = freigabe \Rightarrow Schranke.neigungswinkel = 0)
\end{align*}
##### 7. Zug bremst nicht bevor er BEP ohne Freigabe passiert:
\begin{align*}
Sys \models (Bremse.verzoegerung = 0) \textbf{ U } (&Zug.d >= Welt.GP - Welt.z - \frac{Zug.v^2}{2\cdot Welt.a} \\
& \land Funkkanal.UebergangZuZug \neq freigabe))
\end{align*}
##### 8. Zug bremst, wenn er keine Freigabe erhalten hat und hinter dem BEP ist:
\begin{align*}
Sys \models &\left( Funkkanal.UebergangZuZug \neq freigabe \textbf{ U } Zug.d >= Welt.GP - Welt.z - \frac{Zug.v^2}{2\cdot Welt.a} \right) \\
&\Rightarrow \textbf{G } ( Zug.d >= Welt.GP - Welt.z - \frac{Zug.v^2}{2\cdot Welt.a} \Rightarrow Bremse.verzoegerung > 0 )
\end{align*}
##### 9. Zug passiert den Gefahrenpunkt nur, wenn er eine Freigabe erhalten hat:
\begin{align*}
Sys \models (Zug.d < GP)\textbf{ U }(Funkkanal.UebergangZuZug = freigabe)
\end{align*}
---
#### Bahnübergang
##### 1. Die Schranke ist am Ende geöffnet:
\begin{align*}
Sys \models \textbf{F G }(Schranke.neigungswinkel = 90)
\end{align*}
##### 2. Die Schranke ist nach Ablauf des Timers oder nachdem der Zug passiert ist nicht mehr geschlossen:
\begin{align*}
Sys \models \textbf{G }(&Timer = Abgelaufen \lor ZugSensor = True\\
& \Rightarrow \textbf{XXX }(Schranke.neigungswinkel \neq 0))
\end{align*}
##### 3. Wenn der Schrankenmotor sichert, verringert sich der Neigungswinkel der Schranke:
\begin{align*}
Sys \models \textbf{G }(&Uebergangssteuerung.motor = sichern \\
& \land Schranke.neigungswinkel > 0 \\
& \Rightarrow \exists x ( Schranke.neigungswinkel = x \land \textbf{X } (Schranke.neigungswinkel < x)))
\end{align*}
\begin{align*}
Sys \models \textbf{G }(&Uebergangssteuerung.motor = sichern \\
& \land Schranke.neigungswinkel > 0 \\
& \Rightarrow ( Schranke.neigungswinkel < next(Schranke.neigungswinkel)))
\end{align*}
##### 4. Wenn der Schrankenmotor entsichert, vergrößert sich der Neigungswinkel der Schranke:
\begin{align*}
Sys \models \textbf{G }(& Uebergangssteuerungsteuerung.motor = entsichern \\
& \land Schranke.neigungswinkel < 90 \\
& \Rightarrow \exists x ( Schranke.neigungswinkel = x \land \textbf{X } (Schranke.neigungswinkel > x)))
\end{align*}
---
#### Zug
##### 1. Sobald der Zug einmal angehalten hat, darf er nicht mehr weiterfahren:
$$
Sys \models \textbf{G }(Zug.v = 0 \Rightarrow (\textbf{G } Zug.v = 0))
$$
##### 2. Sobald angefangen wird zu bremsen, ist die Geschwindigkeit des Zuges irgendwann 0:
$$
Sys \models \textbf{G }(Bremse = Aktiv \Rightarrow \textbf{F } Zug.v = 0 )
$$
##### 3. Wenn die Bremse aktiv ist, verringert sich die Geschwindigkeit bis der Zug hält:
$$
Sys \models \textbf{G }(Bremse = Aktiv \land Zug.v > 0 \Rightarrow \exists x ( Zug.v = x \land \textbf{X } (Zug.v < x)))
$$
##### 4. Die Zugsteuerung erreicht irgendwann einen Endzustand:
$$
Sys \models \textbf{F }(Zugsteuerung = FahrenNachBEP \lor Zugsteuerung = ZugHaeltVorGP)
$$
##### 5. Zug bremst, obwohl Bahnübergang geschlossen:
$$
Sys \models \textbf{G }(Schranke.neigungswinkel = 0 \Rightarrow Zug.v > 0)
$$
---
#### Sensoren
##### 1. Der SchrankeOffenSensor gibt den Zustand der Schranke wieder (mit einem Schritt Verzögerung):
$$
Sys \models \textbf{G }(Schranke.neigungswinkel = 90 \Leftrightarrow \textbf{X }(SchrankeOffenSensor = True))
$$
##### 2. Der SchrankeGeschlossenSensor gibt den Zustand der Schranke wieder (mit einem Schritt Verzögerung):
$$
Sys \models \textbf{G }( Schranke.neigungswinkel = 0 \Leftrightarrow \textbf{X }(SchrankeGeschlossenSensor = True))
$$
##### 3. Der ZugSensor meldet das Passieren des Zuges erst, wenn dieser den ZugSensor passiert hat (mit einem Schritt Verzögerung):
$$
Sys \models \textbf{G }(Zug.d >= Welt.SP \Leftrightarrow \textbf{X }(ZugSensor = True))
$$
##### 4. Das Hodometer misst den korrekten Abstand zum Bahnübergang (mit einem Schritt Verzögerung):
$$
Sys \models \textbf{G }(\exists d'. Zug.d = d' \land \textbf{X } Hodometer.dGemessen = d')
$$
##### 5. Das Hodometer misst die korrekte Geschwindigkeit (mit einem Schritt Verzögerung):
$$
Sys \models \textbf{G }(\exists v' . Zug.v = v' \land \textbf{X }(Hodometer.vGemessen = v'))
$$
# Blatt 5
Zug auf ungesichertem Bahnübergang:
\begin{align*}
Sys \models \textbf{G } (&(Zug.d >= Welt.GP \land Zug.d < Zug.SP) \\
& \implies ((\textbf{G } Schranke.neigungswinkel = 0) \\
& \lor (Schranke.neigungswinkel = 0 \textbf{ U } Zug.d >= Welt.SP) ))
\end{align*}
### DCCA:
#### Überprüfung
##### Einelementige
* BremseFehler: :heavy_check_mark:
* SchrankeGeschlossenSensorFehler, false negative: :heavy_check_mark:
* SchrankeGeschlossenSensorFehler, false positive: :x:
* ZugsensorFehler, false positive: :x:
* ZugsensorFehler, false negative: :heavy_check_mark:
* SchrankenmotorFehler, Failure: :heavy_check_mark:
* SchrankenmotorFehler, SlowDown: :heavy_check_mark:
* Hodometer, Deviation: :x:
* Hodometer, Failure: :x:
* ZugfunkmodulFehler: :heavy_check_mark:
* ÜbergangsfunkmodulFehler: :heavy_check_mark:
##### ZweiElementige
* BremseFehler
* SchrankeGeschlossenSensorFehler, false negative: :heavy_check_mark:
* ZugsensorFehler, false negative: :heavy_check_mark:
* SchrankenmotorFehler, Failure: :x:
* SchrankenmotorFehler, SlowDown: :heavy_check_mark:
* ZugfunkmodulFehler: :x:
* ÜbergangsfunkmodulFehler: :x:
* SchrankeGeschlossenSensorFehler, false negative
* ZugsensorFehler, false negative: :heavy_check_mark:
* SchrankenmotorFehler, Failure: :heavy_check_mark:
* SchrankenmotorFehler, SlowDown: :heavy_check_mark:
* ZugfunkmodulFehler: :heavy_check_mark:
* ÜbergangsfunkmodulFehler: :heavy_check_mark:
* ZugsensorFehler, false negative
* SchrankenmotorFehler, Failure: :heavy_check_mark:
* SchrankenmotorFehler, SlowDown: :heavy_check_mark:
* ZugfunkmodulFehler: :heavy_check_mark:
* ÜbergangsfunkmodulFehler: :heavy_check_mark:
* SchrankenmotorFehler, Failure
* ZugfunkmodulFehler: :heavy_check_mark:
* ÜbergangsfunkmodulFehler: :heavy_check_mark:
* SchrankenmotorFehler, SlowDown
* ZugfunkmodulFehler: :heavy_check_mark:
* ÜbergangsfunkmodulFehler: :heavy_check_mark:
* ZugfunkmodulFehler
* ÜbergangsfunkmodulFehler: :heavy_check_mark:
##### Mit Monotonieeigenschaft von sicheren Mengen
* SchrankenGeschlossenSensorFehler, false negative; ZugsensorFehler, false positive, SchrankenMotorFehler, Failure; SchrankenMotorFehler, SlowDown: :heavy_check_mark:
* BremseFehler; SchrankeGeschlossenSensorFehler, false negative; ZugsensorFehler, false negative; SchrankenmotorFehler, SlowDown; :heavy_check_mark:
### Minimal Critial Sets
**{SchrankeGeschlossenSensor (false positive)}**: Freigabe wird gesendet obwohl die Schranke nicht geschlossen ist.
**{ZugsensorFehler (false positive)}**: Der Sensor detektiert fälschlicherweise eine Zug, wodurch die Schranke geöffnet wird während der Zug den Übergang passiert.
**{Hodometer (Deviation)}**: Die Punkte werden falsch berechnet und der Zug sendet die Anfragen an den Bahnübergang zu einem falschen Zeitpunkt.
**{Hodometer (Failure)}**: Die Position des Zuges wird nicht geupdated, sodass keine Schliessbefehl an den Bahnübergang gesendet wird und der Zug nicht das Passieren des Bremseinsatzpunktes erkennt.
**{Bremse (Failure), Schrankenmotor (Failure)}**: Die Schranke wird nicht geschlossen und der Zug kann nicht bremsen.
**{Bremse (Failure), Zugfunkmodul (Failure)}**: Der Zug sendet keinen Schließbefehl und der Zug kann auch nicht bremsen.
**{Bremse (Failure), Übergangsfunkmodul (Failure)}**: Der Bahnübergang erhält keinen Schließbefehl und der Zug kann auch nicht bremsen.
### Erklärung von Unterschieden zu Aufgabe 2
* Wir haben nicht genau aufgezeigt, wieso die Schranke nicht geschlossen ist.
* Wir haben beim Hodometer nicht zwischen Ausfall und Messfehlern unterschieden.
* Wir haben nicht betrachtet, wieso keine Freigabe gesendet / empfangen wird.