8. gyakorlat
Levezetési szabályok
1. feladat
Cseréljük ki két változó értékét
\(A = (x:\Z, \, y: \Z)\)
\(B = (x':\Z, \, y': \Z)\)
\(Q = (x=x' \; \land \; y = y')\)
\(R = (x = y' \; \land \; y = x')\)
-
\(x,y := y,x\)
Specifikáció tétele: \(Q \Rightarrow \text{lf}\,((x,y:=y,x), R)\)
\((x,y) \in D_{P(x,y:=y,x)} \land \underbrace{R^{x,y \; \leftarrow \; y, x}}_{y=y' \; \land \; x=x'}\)
-
\(x := x - y\) Közbülső állítás: \(Q_1\) \(y := x + y\) Közbülső állítás: \(Q_2\) \(x := y - x\) ST: \(Q \Rightarrow \text{lf}\,(S, R)\)
A szekvencia levezetési szabálya (SZLSZ) miatt: Tudunk mondani olyan \(Q_1\) és \(Q_2\) közbülső állításokat, hogy
- \(Q \Rightarrow \text{lf}\,(x:=x-y, \;Q_1)\)
- \(Q_1 \Rightarrow \text{lf}\,(y:=x+y, Q_2)\)
- \(Q_2 \Rightarrow \text{lf}\,(x := y - x,R)\)
Gregó tipp a megoldáshoz (levezetési szabályok)
- Az lf alapján erre akarunk jutni
- Egyszerű-e a feladat?
- Megoldjuk
Gregó szótár: ami "y"-nak néz ki, az valójában "lf"
Legyen \(Q_1=(x=x'-y' \land y=y')\) és \(Q_2=(x=x'-y' \land y=x')\)
- \(Q \Rightarrow \text{lf}\,(x:=x-y, \; Q_1)=(\text{igaz}\;\land\;Q_1^{x \; \leftarrow \; x-y})=(x-y=x'-y' \land y = y')\) Trivi (a \(Q\) miatt)
- \(Q_1 \Rightarrow \text{lf}\,(x := x + y, \; Q_2) = (\text{igaz} \land Q_2^{y \; \leftarrow \; x + y})=(x=x'-y'\land x+y=x')\)
- \(Q_2 \Rightarrow \text{lf}\,(x := y -x, \; R) = (\text{igaz} \; \land \; R^{x \; \leftarrow \; y-x} ) = (y - x = y' \; \land \; y = x')\)
-
\(A'=(x:\Z, y\Z, z: \Z)\)
\(z := x\) \(x := y\) \(y := z\) Legyen:
- \(Q_1=(x=x' \; \land \; y=y' \; \land \; z=x')\)
- \(Q_2 = (x = y' \; \land \; y = y' \; \land \; z = x')\)
(Házi feladat a zh utánra)
Nem érvényes rá a specifikáció tétele, mert ez nem ugyan az az állapottér, mint az eredeti feladat
Kibővíthetjük az állapotteret egy segédváltozóval, úgyhogy ez mégsem probléma
2. feladat
MAX
\(A=(x:\Z, y:\Z, z:\z)\)
\(B=(x':\Z, y': \Z)\)
\(Q=(x=x' \land y=y')\)
\(R=(z=\max(x', y'))\)
-
\(z:=\max(x,y)\)
"""Trivi""" - HF 2. \(z:=x+y-|x-y|\)
"Bizonyítani nem olyan bonyolult"
You guessed it: HF 3. (Ez itt elágazás táblázattal szemléltetve, mert még mindig nem találtam ki jobb módszert rá)
\(x \geq y\) \(x \leq y\) \(z:=x\) \(z:=y\) Specifikáció tétele: \(Q \Rightarrow \text{lf}\,(IF, R)\)
Elágazás levezetési szabálya (ELSz): "Egy elágazás akkor vezet el minket, a \(Q\)-ból az \(R\)-be, ha külön-külön az elágazások ágai (feltéve az ághoz tartozó feltételt) elvezetnek az \(R\)-be"
Be kell bizonyítani: - mindegyik feltétel értelmes - valamelyik feltétel biztos teljesül - minden ághoz 1-1 bizonyítás
-
\(Q \Rightarrow (x,y,z) \in D_{x \geq y} \land (x,y,z) \in D_{x \leq y}\)
\(\iff Q \Rightarrow (x \geq y \; \lor \; x < y) \; \land \; (x \leq \lor x > y)\) 2. \(Q \Rightarrow x \geq y \; \lor \; x \leq y\) 3. \(Q \land x \geq y \Rightarrow \text{lf}\,(z:=x,R)=(\text{igaz} \; \land \; R^{z \; \leftarrow \; x})=(x=\max(x', y'))\) 4. \(Q \land x \leq y \Rightarrow \text{lf}\,(z:=y,R)=(\text{igaz} \; \land \; R^{z \; \leftarrow \; y})=(y=\max(x', y'))\)
-
3. feladat
Számítsuk ki egy egész szám szignumát!
\(A = (x: \Z, s: \Z)\)
\(B = (x': \Z)\)
\(Q=(x=x')\)
\(R=(s := \text{sgn}(x'))\)
| \(x > 0\) | \(x = 0\) | \(x < 0\) |
|---|---|---|
| \(s := 1\) | \(s := 0\) | \(s := -1\) |
You guessed it HF
4. feladat
Keressük meg két egész szám legnagyobb közös osztóját!
\(A = (a: \N, b: \N)\) // \(a\)-ba kerüljön az eredmény
\(B = (a': \N, b': \N)\)
\(Q = (a = a' \; \land \; b = b' \; \land \; (a' > 0 \land b' > 0) )\)
\(R = (a=\text{lnko}(a',b'))\)
Specifikáció tétele: \(Q \Rightarrow \text{lf}\,(\text{LOOP}, R)\)
Ciklus Levezetési Szabálya (CLSz):
- Feltételezve, hogy a ciklus megáll, meg kell mutatni, hogy jó helyen áll meg
- ciklus invariáns állítása (olyan állítás, ami a ciklusban mindig igaz): \(P\)
- \(Q \Rightarrow P\) - Az előfeltételek szerint \(P\) teljesül
- \(P \land \pi \; \Rightarrow \; \text{lf}\,(S_0, P)\) - tehát, ha \(P\) teljesül, akkor a ciklusmag lefutása után is teljesül \(P\)
- \(P \land \lnot \pi \Rightarrow R\) - ha a ciklusfeltétel már nem teljesül, de P igen akkor az az utófeltételt jelenti
- \(P \Rightarrow \chi_{D_\pi}\) - I don't know honestly
- \(P \land \pi \Rightarrow t > 0 \quad\) \(t\): hány lépés van hátra
- \(P \land \pi \land t = t' \Rightarrow \text{lf}(S_0 \land t < t_0)\) - A hátralévő lépések száma csökken a ciklusmag lefutására
A két \(\text{lf}\)-es cuccot össze lehet vonni
\(P\): Az invariáns állítás jele
\(t\): hátralévő lépések száma
Ennek a gyakorlati használata:
\(P = (\text{lnko}(a,b) = \text{lnko}(a', b') \; \land \; (a > 0 \; \land \; b > 0))\)
\(t=b\)
Lépések:
- \(Q \Rightarrow P\)
- \(P \land \pi \Rightarrow R\)
- \(P \Rightarrow \chi_{D_\pi}\)
- Mivel a ciklusfeltétel bármilyen állapotra értelmezett, ezért ez triviálisan igaz
- \(P \land \pi \Rightarrow t > 0\)
- \(\pi = (b \neq 0)\), és \(b \in \N\), viszont \(t := b\), ezért beláttuk, hogy \(t>0\), hiszen \(b>0\)
- \(P \land b \neq 0 \land b = t_0 \Rightarrow \text{lf}\,(a, b := b,a \bmod b, P \land b < t_0) = (b \neq 0 \land (P \land b < t_0)^{a,b \; \leftarrow \; b, a \bmod b})=(b \neq 0 \; \land \; \text{lnko}(b, a \bmod b)=\text{lnko}(a', b') \land (b > 0 \lor a \bmod b > 0) \land a \bmod b < t_0)\)
"Tekeredik a ciklus, megoldás akar lenni." (Doboz)
Előadás jegyzet: 𓅂𓃭𓅱𓄿𓂧𓄿𓋴 𓆓𓅂𓎼𓇌𓊃𓅂𓏏 :nod:
ZH-ban a \(Q_1\)-et, \(Q_2\)-t, \(P\)-t megkapjuk