| version 1.9, 2007/07/30 04:55:09 |
version 1.10, 2007/08/06 04:56:50 |
|
|
| % 26/02/2003 - created |
% 26/02/2003 - created |
| % |
% |
| |
|
| % $Platon: doc/ztp-zbierka/04-semantika-programov.tex,v 1.8 2007-07-14 20:53:45 nepto Exp $ |
% $Platon: doc/ztp-zbierka/04-semantika-programov.tex,v 1.9 2007-07-30 04:55:09 nepto Exp $ |
| |
|
| \chapter{Sémantika programov} |
\chapter{Sémantika programov} |
| |
|
|
|
| & & \cmd{fi}\\ |
& & \cmd{fi}\\ |
| \tau^3\{x = 2\} & |
\tau^3\{x = 2\} & |
| \equiv & |
\equiv & |
| \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi} |
\cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi}\\ |
| |
\\ |
| |
\tau^3\{x > 2\} & |
| |
\equiv & |
| |
\cmd{if}~ x = 0\\ |
| |
& & \cmd{then}~ 0\\ |
| |
& & \cmd{else} |
| |
\begin{array}[t]{l} |
| |
\cmd{if} \perp = 0\\ |
| |
\cmd{then}~ 0\\ |
| |
\cmd{else}~(\cmd{if} \perp = 1 ~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi})\\ |
| |
\cmd{fi} |
| |
\end{array}\\ |
| |
& & \cmd{fi}\\ |
| |
\tau^3\{x > 2\} & |
| |
\equiv & |
| |
\cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi} |
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
|
|
| %\end{array} |
%\end{array} |
| %$$ |
%$$ |
| |
|
| A to už je pevný bod $f_P$: |
Vyzerá to tak, že pre $x \ge 0$ je to $0$, inak $\perp$. A to už je pevný bod $f_P$: |
| |
|
| $$ |
$$ |
| \begin{array}{rcl} |
\begin{array}{rcl} |
| f_P & \equiv & \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi} |
f_P & \equiv & \cmd{if}~ x \ge 0 ~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi} |
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|
| \begin{example} % /* |
\begin{example} % /* |
| |
Uvažujme rovnakú funkciu $f$ ako v predchádzajúcom príklade. Nech $g(x)$ je jej pevný bod. |
| |
Ukážte, že je silne ekvivalentný s~$f_P(x)$. |
| |
\end{example} % */ |
| |
|
| |
\begin{solution} % /* |
| |
Fixpointovou indukciou dokážeme, že pre $x \ge 0$: |
| |
$$ |
| |
f_P(x) \sqsubseteq g(x) |
| |
$$ |
| |
|
| |
Označme |
| |
$$ |
| |
g(x) \equiv \cmd{if}~ x \ge 0 ~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi} |
| |
$$ |
| |
|
| |
Podľa fixpointovej indukcie stačí dokázať, že $\tau[g] \sqsubseteq g$, čiže: |
| |
|
| |
$$ |
| |
\begin{array}{lcl} |
| |
\begin{array}{lcl} |
| |
\cmd{if}~ x = 0\\ |
| |
\cmd{then}~ 0\\ |
| |
\cmd{else}~(\cmd{if}~[\cmd{if}~ x - 1 \ge 0 ~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi}] \ge 0 |
| |
~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi})\\ |
| |
\cmd{fi} |
| |
\end{array} |
| |
& \sqsubseteq & |
| |
\begin{array}{l} |
| |
\cmd{if}~ x = 0\\ |
| |
\cmd{then}~ 0\\ |
| |
\cmd{else} \perp\\ |
| |
\cmd{fi} |
| |
\end{array} |
| |
\end{array} |
| |
$$ |
| |
|
| |
Rozdelíme to na nasledujúce prípady: |
| |
\begin{enumerate} |
| |
\item $x = 0$ |
| |
$$ |
| |
\begin{array}{lcl} |
| |
\tau[g](x) & = & 0\\ |
| |
\tau[g](x) & = & g(x) |
| |
\end{array} |
| |
$$ |
| |
\item $x - 1 \ge 0 \equiv x \ge 1$ |
| |
$$ |
| |
\begin{array}{lcl} |
| |
\tau[g](x) & = & |
| |
\cmd{if}~ x = 0\\ |
| |
& & \cmd{then}~ 0\\ |
| |
& & \cmd{else}~(\cmd{if}~ 0 \ge 0 |
| |
~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi})\\ |
| |
& & \cmd{fi}\\ |
| |
\tau[g](x) & = & |
| |
\cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi}\\ |
| |
\tau[g](x) & = & g(x) |
| |
\end{array} |
| |
$$ |
| |
\end{enumerate} |
| |
|
| |
Teda platí $f_P \sqsubseteq g$. A navyše pre $x < 0$ platí $g(x) \sqsubseteq f_P(x)$, |
| |
pretože $g(x) = \perp$. Celkovo platí |
| |
$$ |
| |
(g \sqsubseteq f_P) \land (f_P \sqsubseteq g) ~\Longrightarrow~ f_P \equiv g |
| |
$$ |
| |
|
| |
Teda $g$ je najmenší pevný bod. |
| |
\end{solution} % */ |
| |
|
| |
\begin{example} % /* |
| Máme funkciu: |
Máme funkciu: |
| |
|
| $$ |
$$ |
|
|
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
| Aj toto konkretne vyjadríme: |
Aj toto konkrétne vyjadríme: |
| |
|
| $$ |
$$ |
| \begin{array}{lcl} |
\begin{array}{lcl} |
| Line 679 Takto postupne konštruujeme aproximácie. |
|
| Line 766 Takto postupne konštruujeme aproximácie. |
|
| v niektorej z nich. Aký je teda pevný bod? |
v niektorej z nich. Aký je teda pevný bod? |
| |
|
| $$ |
$$ |
| f_P \equiv \cmd{if}~ x > 0 ~\cmd{then} \perp \cmd{else}~ x ~\cmd{fi} |
f_P \equiv \cmd{if}~ x > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x ~\cmd{fi} |
| $$ |
$$ |
| |
|
| Čiže |
Čiže |
|
|
| f_P: & \cmd{if}~ x > 0\\ |
f_P: & \cmd{if}~ x > 0\\ |
| & \cmd{then} |
& \cmd{then} |
| \begin{array}[t]{l} |
\begin{array}[t]{l} |
| \cmd{if}~ [\cmd{if}~ x > 1 ~\cmd{then} \perp \cmd{else}~ x - 1 ~\cmd{fi}] > 0\\ |
\cmd{if}~ [\cmd{if}~ x > 1 ~\cmd{then}~ 0 ~\cmd{else}~ x - 1 ~\cmd{fi}] > 0\\ |
| \cmd{then} \perp\\ |
\cmd{then}~ 0\\ |
| \cmd{else}~ (\cmd{if}~ x > 1 ~\cmd{them} \perp \cmd{else}~ x - 1 ~\cmd{fi})\\ |
\cmd{else}~ (\cmd{if}~ x > 1 ~\cmd{then}~ 0 ~\cmd{else}~ x - 1 ~\cmd{fi})\\ |
| \cmd{fi} |
\cmd{fi} |
| \end{array}\\ |
\end{array}\\ |
| & \cmd{else}~ x\\ |
& \cmd{else}~ x\\ |
| Line 705 sa nám rozloží na tri prípady: |
|
| Line 792 sa nám rozloží na tri prípady: |
|
| \item |
\item |
| $ |
$ |
| \begin{array}[t]{rcl} |
\begin{array}[t]{rcl} |
| x > 1 & \Rightarrow & \cmd{if}~ x > 0 ~\cmd{then}~ (\cmd{if}~ \perp > 0 ~\cmd{then} \perp |
x > 1 & \Rightarrow & \cmd{if}~ x > 0 ~\cmd{then}~ (\cmd{if}~ 0 > 0 ~\cmd{then}~ 0 |
| \cmd{else} \perp \cmd{fi}) ~\cmd{else}~ x ~\cmd{fi} =\\ |
~\cmd{else}~ 0 ~\cmd{fi}) ~\cmd{else}~ x ~\cmd{fi} =\\ |
| & = & \cmd{if}~ x > 0 ~\cmd{then} \perp \cmd{else}~ x ~\cmd{fi} |
& = & \cmd{if}~ x > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x ~\cmd{fi} |
| \end{array} |
\end{array} |
| $ |
$ |
| \item |
\item |
| $ |
$ |
| \begin{array}[t]{rcl} |
\begin{array}[t]{rcl} |
| x = 1 & \Rightarrow & \cmd{if}~ x > 0 ~\cmd{then}~ (\cmd{if}~ x > 1 ~\cmd{then} \perp |
x = 1 & \Rightarrow & \cmd{if}~ x > 0 ~\cmd{then}~ (\cmd{if}~ x > 1 ~\cmd{then}~ 0 |
| \cmd{else}~ x - 1 ~\cmd{fi}) ~\cmd{else}~ x ~\cmd{fi} =\\ |
~\cmd{else}~ x - 1 ~\cmd{fi}) ~\cmd{else}~ x ~\cmd{fi} =\\ |
| & = & \cmd{if}~ x > 0 ~\cmd{then} \perp \cmd{else}~ x ~\cmd{fi} |
& = & \cmd{if}~ x > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x ~\cmd{fi} |
| \end{array} |
\end{array} |
| $ |
$ |
| \item |
\item |
| $ |
$ |
| \begin{array}[t]{rcl} |
\begin{array}[t]{rcl} |
| x = 0 & \Rightarrow & \cmd{if}~ x > 0 ~\cmd{then}~ 0 - 1 ~\cmd{else}~ x ~\cmd{fi} =\\ |
x > 0 & \Rightarrow & \cmd{if}~ x > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x ~\cmd{fi} =\\ |
| & = & \cmd{if}~ x > 0 ~\cmd{then} \perp \cmd{else}~ x ~\cmd{fi} |
& = & \cmd{if}~ x > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x ~\cmd{fi} |
| \end{array} |
\end{array} |
| $ |
$ |
| \end{enumerate} |
\end{enumerate} |
| |
|
| Je to ten posledný tretí prípad $0 - 1 = \perp$, pretože $x \in \mathbb{N}$. |
Ukázali sme, že $f_P$ je pevný bod. |
| |
%Je to ten posledný tretí prípad $0 - 1 = \perp$, pretože $x \in \mathbb{N}$. |
| |
|
| |
\end{solution} % */ |
| |
|
| |
\begin{example} % /* |
| |
Uvažujme rovnakú funkciu $f$ ako v predchádzajúcom príklade. Nech $g(x)$ je jej pevný bod. |
| |
Ukážte, že je silne ekvivalentný s~$f_P(x)$. |
| |
\end{example} % */ |
| |
|
| |
\begin{solution} % /* |
| |
Fixpointovou indukciou dokážeme, že pre $x \ge 0$: |
| |
$$ |
| |
f_P(x) \sqsubseteq g(x) |
| |
$$ |
| |
|
| |
Označme |
| |
$$ |
| |
g(x) \equiv \cmd{if}~ x > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x ~\cmd{fi} |
| |
$$ |
| |
|
| |
Podľa fixpointovej indukcie stačí dokázať, že $\tau[g] \sqsubseteq g$, čiže: |
| |
|
| |
$$ |
| |
\begin{array}{lcl} |
| |
\begin{array}{lcl} |
| |
\cmd{if}~ x > 0\\ |
| |
\cmd{then} |
| |
\begin{array}[t]{l} |
| |
\cmd{if}~[\cmd{if}~ x - 1 > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x - 1 ~\cmd{fi}] > 0\\ |
| |
\cmd{then}~ 0\\ |
| |
\cmd{else}~ (\cmd{if}~ x - 1 > 0 ~\cmd{then}~ 0 ~\cmd{else}~ x - 1 ~\cmd{fi})\\ |
| |
\cmd{fi} |
| |
\end{array}\\ |
| |
\cmd{else}~x\\ |
| |
\cmd{fi} |
| |
\end{array} |
| |
& \sqsubseteq & |
| |
\begin{array}{l} |
| |
\cmd{if}~ x > 0\\ |
| |
\cmd{then}~ 0\\ |
| |
\cmd{else}~ x\\ |
| |
\cmd{fi}\\ |
| |
~\\ |
| |
~\\ |
| |
~ |
| |
\end{array} |
| |
\end{array} |
| |
$$ |
| |
|
| |
Rozdelíme to na nasledujúce prípady: |
| |
\begin{enumerate} |
| |
\item $x = 0: \tau[g](x) = 0 = g(x)$ |
| |
\item $x > 0: \tau[g](x) = 0 = g(x)$ |
| |
\end{enumerate} |
| |
|
| |
Teda platí $f_P \sqsubseteq g$. A navyše pre $x < 0$ platí $g(x) = x$, potom musí $f(x) = x$ aby |
| |
platilo $g \sqsubseteq f_P$. Celkovo platí |
| |
$$ |
| |
(g \sqsubseteq f_P) \land (f_P \sqsubseteq g) ~\Longrightarrow~ f_P \equiv g |
| |
$$ |
| |
|
| |
Teda $g$ je najmenší pevný bod. |
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|