| version 1.5, 2007/07/11 00:44:51 |
version 1.6, 2007/07/12 04:29:45 |
|
|
| % 26/02/2003 - created |
% 26/02/2003 - created |
| % |
% |
| |
|
| % $Platon: doc/ztp-zbierka/04-semantika-programov.tex,v 1.4 2007-06-03 11:33:05 nepto Exp $ |
% $Platon: doc/ztp-zbierka/04-semantika-programov.tex,v 1.5 2007-07-11 00:44:51 nepto Exp $ |
| |
|
| \chapter{Sémantika programov} |
\chapter{Sémantika programov} |
| |
|
|
|
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|
| |
\begin{example} % /* |
| |
Máme funkciu: |
| |
|
| |
$$ |
| |
\begin{array}{rcl} |
| |
f_0 & = & 0\\ |
| |
f(n) & = & f(f(n - 1)) |
| |
\end{array} |
| |
$$ |
| |
|
| |
Nájdite pevný bod tejto funkcie. |
| |
|
| |
\end{example} % */ |
| |
|
| |
\begin{solution} % /* |
| |
|
| |
Funkciu si najskôr rozpíšeme: |
| |
$$ |
| |
\begin{array}{rcl} |
| |
f(1) & = & f(f(0)) = f(0) = 0\\ |
| |
f(2) & = & f(f(1)) = f(f(f(0))) = f(f(0)) = f(0) = 0\\ |
| |
f(3) & = & f(f(2)) = f(f(f(1))) = f(f(f(f(0)))) = f(f(f(0))) = f(f(0)) = f(0) = 0 |
| |
\end{array} |
| |
$$ |
| |
|
| |
Teraz ju zapíšeme v ???(neviem) tvare: |
| |
|
| |
$$ |
| |
\phi(x): \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ \phi(\phi(x - 1)) ~\cmd{fi} |
| |
$$ |
| |
|
| |
Hľadajme pevný bod: |
| |
|
| |
$$ |
| |
\begin{array}{rcl} |
| |
\tau^0 & \equiv & \Omega\\ |
| |
\tau^1 & \equiv & \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else} \perp \cmd{fi}\\ |
| |
\tau^2 & \equiv & \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ ([\cmd{if}~ x = 1 ~\cmd{then}~ 0 |
| |
~\cmd{else} \perp \cmd{fi}] = 0 ~\cmd{then}~ 0 ~\cmd{else} \perp) ~\cmd{fi}\\ |
| |
\tau^3 & \equiv & x = 0 ~?~ 0 ~:~ ([x = 1 ~?~ 0 ~:~ (x = 2 ~?~ 0 ~:~ \perp)] = 0 ~?~ 0 ~:~ ([[x = 1 ~?~ 0 ~:~ (x = 2 |
| |
~?~ 0 ~:~ \perp)] = 1 ~?~ 0 ~:~ \perp] = 0 ~?~ 0 ~:~ \perp)) |
| |
\end{array} |
| |
$$ |
| |
|
| |
Upravme to: |
| |
|
| |
$$ |
| |
\begin{array}{lcl} |
| |
\tau^3\{x = 1\} & \equiv & x = 0 ~?~ 0 ~:~ (0 = 0 ~?~ 0 ~:~ ((\perp = 1 ~?~ 0 ~:~ \perp) = 0 ~?~ 0 ~:~ \perp)) \equiv\\ |
| |
& \equiv & x = 0 ~?~ 0 ~:~ 0\\ |
| |
\tau^3\{x = 2\} & \equiv & x = 0 ~?~ 0 ~:~ (0 = 0 ~?~ 0 ~:~ ((0 = 1 ~?~ 0 ~:~ \perp) = 0 ~?~ 0 ~:~ \perp)) \equiv\\ |
| |
& \equiv & x = 0 ~?~ 0 ~:~ 0\\ |
| |
\tau^4 & \equiv & x = 0 ~?~ 0 ~:~ ([x = 1 ~?~ 0 ~:~ 0] = 0 ~?~ 0 ~:~ 0) \equiv\\ |
| |
& \equiv & x = 0 ~?~ 0 ~:~ 0 |
| |
\end{array} |
| |
$$ |
| |
|
| |
Zdá sa, že to už je pevný bod. Overme to: |
| |
|
| |
$$ |
| |
\begin{array}{rcl} |
| |
f_P & \equiv & \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ ([\cmd{if}~ x = 1 ~\cmd{then}~ 0 ~\cmd{else}~ 0 |
| |
~\cmd{fi}] = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi}) ~\cmd{fi} \equiv\\ |
| |
& \equiv & \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi} |
| |
\end{array} |
| |
$$ |
| |
|
| |
Takže naozaj je to pevný bod. Zapíšme ho ešte raz, ale teraz už bez použitia notácie programovacieho |
| |
jazyka~C: |
| |
|
| |
$$ |
| |
\begin{array}{rcl} |
| |
f_P & \equiv & \cmd{if}~ x = 0 ~\cmd{then}~ 0 ~\cmd{else}~ 0 ~\cmd{fi} |
| |
\end{array} |
| |
$$ |
| |
|
| |
\end{solution} % */ |
| |
|
| |
|
| % vim: ts=4 tw=100 |
% vim: ts=4 tw=100 |
| % vim600: fdl=0 fdm=marker fdc=0 fmr=/*,*/ |
% vim600: fdl=0 fdm=marker fdc=0 fmr=/*,*/ |
| |
|