| version 1.8, 2007/04/29 19:39:13 |
version 1.9, 2007/04/29 22:07:52 |
|
|
| % 26/02/2003 - created |
% 26/02/2003 - created |
| % |
% |
| |
|
| % $Platon: doc/ztp-zbierka/02-programove-schemy.tex,v 1.7 2007-04-29 16:14:20 nepto Exp $ |
% $Platon: doc/ztp-zbierka/02-programove-schemy.tex,v 1.8 2007-04-29 19:39:13 nepto Exp $ |
| |
|
| \chapter{Programové schémy} |
\chapter{Programové schémy} |
| |
|
| Line 433 potom sa aj schéma $S$ zastaví. |
|
| Line 433 potom sa aj schéma $S$ zastaví. |
|
| |
|
| \section{Nerozhodnuteľnosť vlastností schém} |
\section{Nerozhodnuteľnosť vlastností schém} |
| |
|
| |
\begin{definition}[Rozhodnuteľnosť] % /* |
| |
|
| |
Problém je {\it rozhodnuteľný} ak existuje všeobecný algoritmus (musí sa |
| |
zastaviť), ktorý pre ľubovoľnú |
| |
schému z danej triedy schém odpovie, či schéma spĺňa danú vlastnosť alebo |
| |
nespĺňa. |
| |
|
| |
Problém je {\it nerozhodnuteľný}, ak takýto všeobecný algoritmus pre danú vlasnosť |
| |
neexistuje. |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{definition}[Čiastočná rozhodnuteľnosť] % /* |
| |
|
| |
Problém je {\it čiastočne rozhodnuteľný} ak existuje procedúra (nemusí sa |
| |
zastaviť), ktorá pre ľubovoľnú schému z danej triedy schém odpovie kladne, keď |
| |
schéma spĺňa danú vlastnosť a odpovie záporne alebo sa neskončí, keď schéma |
| |
danú vlasnosť nespĺňa. |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{note} % /* |
| |
|
| |
Pre triedu štandardných programových schém $\mathcal{S}$ sa skúmajú štyri |
| |
hlavné rozhodovacie problémy: |
| |
|
| |
\begin{itemize} |
| |
\item problém zastavenia |
| |
\item problém divergencie |
| |
\item problém ekvivalencie |
| |
\item problém izomorfizmu |
| |
\end{itemize} |
| |
|
| |
\end{note} % */ |
| |
|
| \begin{example} % /* P_1 divergency |
\begin{example} % /* P_1 divergency |
| |
|
| Máme danú schému $S$. |
Máme danú schému $S$. |
| Line 575 cyklus, naša procedúra nikdy neskončí. |
|
| Line 610 cyklus, naša procedúra nikdy neskončí. |
|
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|
| |
\begin{definition}[Syntakticky ohraničené podtriedy schém] ~ % /* |
| |
|
| |
\begin{itemize} |
| |
\item {\it Stromové schémy} sú také, ktorých graf neobsahuje cyklus. |
| |
\item {\it Janovove schémy} sú také, ktoré obsahujú monadické symboly |
| |
nad jedinou pracovnou premennou. |
| |
\item {\it Konzervatívne schémy} sú také, v ktorých sa premenná z |
| |
ľavej strany priradenia vyskytuje aj na pravej strane |
| |
priraďovacieho príkazu. |
| |
\item {\it Progresívne schémy} sú také, v ktorých premenná z ľavej |
| |
strany priraďovacieho príkazu je použitá na pravej strane |
| |
nasledujúceho príkazu priradenia. |
| |
\end{itemize} |
| |
\end{definition} % */ |
| |
|
| |
\begin{definition}[Sémanticky ohraničené podtriedy schém] ~ % /* |
| |
|
| |
\begin{itemize} |
| |
\item {\it Liberálne schémy} sú také, kde sa pri ľubovoľnej |
| |
interpretácii $I_H$ ten istý výraz počíta nanajvýš jeden krát. |
| |
\item {\it Voľné schémy} sú také, keď pre každú cestu vedúcu z |
| |
počiatočného príkazu existujú interpretácia a ohodnotenie |
| |
vstupných premenných také, že výpočet sleduje túto cestu. |
| |
\item {\it Dosiahnuteľné schémy} sú také, ktoré obsahujú len |
| |
dosiahnuteľné príkazy, tj. pre každý píkaz v schéme existuje |
| |
interpretácia, pri ktorej sa príkaz vykoná. |
| |
\item {\it Priechodné schémy} sú také, ktoré obsahujú len |
| |
dosiahnuteľné hrany, tj. pre každú hranu v schéme existuje |
| |
interpretácia, pri ktorej sa hranou prejde. |
| |
\end{itemize} |
| |
\end{definition} % */ |
| |
|
| \begin{example} % /* |
\begin{example} % /* |
| |
|
| Uvažujme triedu dosiahnuteľných schém~$\mathcal{D}$. Je príslušnosť schémy |
Uvažujme triedu dosiahnuteľných schém~$\mathcal{D}$. Je príslušnosť schémy |
|
|
| |
|
| \section{Porovnávanie tried programových schém} |
\section{Porovnávanie tried programových schém} |
| |
|
| |
\begin{definition} % /* |
| |
|
| |
Uvažujme triedy programových schém $\mathcal{S}_1$ a $\mathcal{S}_2$. |
| |
Hovoríme, že: |
| |
|
| |
\begin{itemize} |
| |
|
| |
\item trieda $\mathcal{S}_1$ je {\bf silnejšia} ako trieda $\mathcal{S}_2$ |
| |
(označenie $\mathcal{S}_2 \sqsubseteq \mathcal{S}_1$), ak ku každej schéme |
| |
$S_2 \in \mathcal{S}_2$ existuje schéma $S_1 \in \mathcal{S}_1$ taká, |
| |
že $S_1 \equiv S_2$ (trieda $\mathcal{S}_2$ je {\bf preložiteľná} |
| |
do~$\mathcal{S}_1$) |
| |
|
| |
\item trieda $\mathcal{S}_1$ je {\bf ostro silnejšia} ako trieda |
| |
$\mathcal{S}_2$ (označenie $\mathcal{S}_2 \sqsubset \mathcal{S}_2$), |
| |
ak $\mathcal{S}_1$ je silnejšia ako $\mathcal{S}_2$ a existuje schéma $S_1 |
| |
\in \mathcal{S}_1$, ku ktorej neexistuje ekvivalentná schéma $S_2 \in |
| |
\mathcal{S}_2$ |
| |
|
| |
\item triedy $\mathcal{S}_1$ a $\mathcal{S}_2$ sú {\bf rovnocenné}, ak |
| |
$\mathcal{S}_1 \sqsubset \mathcal{S}_2$ a |
| |
$\mathcal{S}_2 \sqsubset \mathcal{S}_1$ |
| |
|
| |
\item trieda $\mathcal{S}_1$ je {\bf efektívne preložiteľná} do |
| |
$\mathcal{S}_2$ ak existuje algoritmus, ktorý transformuje ľubovoľnú |
| |
schému $S_1 \in \mathcal{S}_1$ do ekvivalentnej schémy $S_2 \in |
| |
\mathcal{S}_2$ |
| |
|
| |
\item triedy $\mathcal{S}_1$ a $\mathcal{S}_2$ sú {\bf efektívne |
| |
rovnocenné}, ak $\mathcal{S}_1$ je efektívne preložiteľná do |
| |
$\mathcal{S}_2$ a $\mathcal{S}_2$ je efektívne preložiteľná do |
| |
$\mathcal{S}_1$ |
| |
\end{itemize} |
| |
|
| |
\end{definition} % */ |
| |
|
| \begin{example} % /* is volnost? |
\begin{example} % /* is volnost? |
| |
|
| Rozhodnite, či je schéma $S$ voľná. |
Rozhodnite, či je schéma $S$ voľná. |