| version 1.6, 2005/11/23 19:33:59 |
version 1.7, 2007/04/29 16:14:20 |
|
|
| % 26/02/2003 - created |
% 26/02/2003 - created |
| % |
% |
| |
|
| % $Platon: doc/ztp-zbierka/02-programove-schemy.tex,v 1.5 2004/06/07 10:53:37 nepto Exp $ |
% $Platon: doc/ztp-zbierka/02-programove-schemy.tex,v 1.6 2005-11-23 19:33:59 nepto Exp $ |
| |
|
| \chapter{Programové schémy} |
\chapter{Programové schémy} |
| |
|
| \section{Štandardné programové schémy} |
\section{Štandardné programové schémy} |
| |
|
| |
\begin{definition}[Symboly] % /* |
| |
|
| |
Symbolmi sú individuálne premenné, funkčné symboly, predikátové symboly |
| |
a~špeciálne symboly: |
| |
|
| |
\begin{itemize} |
| |
\item Individuálne premenné sú $X = \{x, y, z, \dots\}$ |
| |
\begin{itemize} |
| |
\item vstupné premenné sú $X_x - \overline{x} = \{x_1, \dots, x_k\}$ |
| |
\item výstupné premenné sú $X_z - \overline{z} = \{z_1, \dots, z_m\}$ |
| |
\item pracovné premenné sú $X_y - \overline{y} = \{y_1, \dots, y_n\}$ |
| |
\end{itemize} |
| |
\item Funkčné symboly sú $F = \bigcup_{i=0}^{\infty} F^i$ |
| |
\begin{itemize} |
| |
\item pre $f \in F^n$ platí $arity(f) = n$ |
| |
\item $F^n = \{f, g, h, \dots\}$ sú $n$-árne symboly |
| |
\item $F^0 = \{a, b, \dots\}$ sú konštanty |
| |
\end{itemize} |
| |
\item Predikátové symboly sú $B = \bigcup_{i=0}^{\infty} B^i$ |
| |
\begin{itemize} |
| |
\item pre $p \in B^n$ platí $arity(p) = n$ |
| |
\item $B^0 = \{0, 1\}$ sú logické konštantnty $true$ a $false$ |
| |
\end{itemize} |
| |
\item Špeciálne symboly sú $[, ], (, ), :=, :$ |
| |
\end{itemize} |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{definition}[Výrazy a príkazy] % /* |
| |
|
| |
Základnými syntaktickými objektami sú výrazy a predikáty (tzv. booleovské |
| |
výrazy). Z~nich sa konštruujú príkazy. |
| |
|
| |
\begin{itemize} |
| |
\item Termy sú $T = {t, t_i, \dots}$ |
| |
\begin{enumerate} |
| |
\item $F^0 \subseteq T, X \subseteq T$ |
| |
\item ak $f \in F^n, t_1, \dots, t_n \in T$ potom $f(t_1, \dots, |
| |
t_n) \in T$ |
| |
\end{enumerate} |
| |
\item Predikáty sú $P = \{q\}$ |
| |
\begin{enumerate} |
| |
\item $B^0 \subseteq P$ |
| |
\item ak $p \in B^n, t_1, \dots, t_n \in T$ potom $(p(t_1, \dots, |
| |
t_n) \in P$ |
| |
\end{enumerate} |
| |
\item Príkazy sú $C = \{st, st_i, \dots\}$ |
| |
\begin{enumerate} |
| |
\item počiatočný príkaz je $\cmd{begin}~ [\overline{y}] := |
| |
[t_1(\overline(x), \dots, t_n(\overline{x})]$ |
| |
\item koncový príkaz je $\cmd{end}~ [\overline{z}] := [t_1(\overline{x}, |
| |
\overline{y}), \dots, t_n(\overline{x}, \overline{y})]$ |
| |
\item priraďovací príkaz je $[\overline{y}] := [t_1(\overline{x}, |
| |
\overline{y}), \dots, t_n(\overline{x}, \overline{y})]$ |
| |
\item príkaz skoku je $\cmd{goto}~ i$ |
| |
\item podmienkový príkaz je $\cmd{if}~ p(\overline{x}, \overline{y}) |
| |
~\cmd{then}~ st$, kde $st$ je priradenie alebo príkaz skoku |
| |
\item príkaz s návestím je $i: st$, kde $st$ je buď priradenie, |
| |
podmienka alebo skok |
| |
\end{enumerate} |
| |
\end{itemize} |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{note} % /* |
| |
|
| |
Definícia syntaxe podmienkového príkazu určuje, že podmienku reprezentuje |
| |
predikátový symbol. Takže podmienkou nemôže byť formula vytvorená pomocou |
| |
logických spojok resp. operácií $not, and, or$, pretože tým by sme do |
| |
schém zaviedli niektoré fixne interpretované symboly. |
| |
|
| |
\end{note} % */ |
| |
|
| |
\begin{definition}[Štandardná programová schéma] % /* |
| |
|
| |
Štandardnú programovú schému tvorí konečná postupnosť príkazov $S = \{st_0, |
| |
st_1, \dots, st_n, st_{n+1}\}$, kde |
| |
\begin{enumerate} |
| |
\item $st_0$ je počiatočný príkaz |
| |
\item $st_{n+1}$ je koncový príkaz |
| |
\item $st_1$ $(1 \le i \le n)$ je podminekový, priraďovací alebo skokový |
| |
príkaz s~návestím $i$ |
| |
\item skok mieri na návestie z intervalu $\langle 1,n \rangle$, alebo na |
| |
návestie $\cmd{end}$ |
| |
\end{enumerate} |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{note} % /* |
| |
|
| |
Programová schéma nemusí obsahovať koncový príkaz $\cmd{end}$, keď podľa |
| |
terminológie teórie grafov neexistuje žiadna hrana, ktorá do neho vedie. |
| |
|
| |
\end{note} % */ |
| |
|
| |
\begin{definition}[Interpretácia štandardnej programovej schémy] % /* |
| |
|
| |
Interpretáciou programovej schémy $S$ nazývame dvojicu $I = (D, i)$, kde |
| |
|
| |
\begin{itemize} |
| |
\item $D$ je obor interpretácie |
| |
\item $i$ je interpretačný morfizmus |
| |
\begin{itemize} |
| |
\item $\forall a \in F^0: i(a) \in D$ |
| |
\item $\forall f \in F^n: i(f) \in D^n \mapsto D$ |
| |
\item $\forall c \in B^0: i(c) \in \{0, 1\}$ |
| |
\item $\forall p \in B^n: i(p) \in D^n \mapsto \{0, 1\}$ |
| |
\end{itemize} |
| |
\end{itemize} |
| |
|
| |
Pojem interpretácie sa dá primočiaro rozšíriť aj na termy a predikáty ($k$ |
| |
premenných v terme): |
| |
|
| |
\begin{itemize} |
| |
\item $i(t) \in D^k \mapsto D$ |
| |
\item $i(q) \in D^k \mapsto \{0, 1\}$ |
| |
\end{itemize} |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{definition}[Program] % /* |
| |
Programom $P$ nazývame dvojicu $P = (S, I)$, kde $S$ je programová schéma a $I$ je |
| |
interpretácia programovej schémy. |
| |
\end{definition} % */ |
| |
|
| \begin{example} % /* P_1 -> S_1 |
\begin{example} % /* P_1 -> S_1 |
| |
|
| Máme program $P_1$. Zistite, čo program počíta a napíšte jeho schému. |
Máme program $P_1$. Zistite, čo program počíta a napíšte jeho schému. |
|
|
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|
| |
\begin{definition}[Herbrandovo univerzum] % /* |
| |
|
| |
Herbrandovo univerzum $\mathcal{H}$ pozostáva z reťazcov symbolov, |
| |
zostrojených zo vstupných premenných a funkčných symbolov: |
| |
|
| |
\begin{itemize} |
| |
\item ak $x_i \in X_x$ potom $"x_i" \in \mathcal{H}$ |
| |
\item ak $a \in F^0$ potom $" a" \in \mathcal{H}$ |
| |
\item ak $f \in F^n; "t_1", \dots, "t_n" \in \mathcal{H}$ potom $"f(t_1, |
| |
\dots, t_n)" \in \mathcal{H}$ |
| |
\end{itemize} |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{definition}[Herbrandova voľná interpretácia] % /* |
| |
|
| |
Herbrandovou interpretáciou štandardnej programovej schémy $S$ nazývame |
| |
dvojicu $I_H = (\mathcal{H}, i_H)$, kde: |
| |
|
| |
\begin{itemize} |
| |
\item $\mathcal{H}$ je Herbrandovo univerzum |
| |
\item $i_H$ je interpretačný morfizumus: |
| |
\begin{itemize} |
| |
\item $\forall x \in X_x: i_H(x) = "x"$ |
| |
\item $\forall a \in F^0: i_H(a) = "a"$ |
| |
\item $\forall f \in F^n: i_H(f) \in \mathcal{H}^n \mapsto |
| |
\mathcal{H}$ $n$-tici $"t_1", \dots, "t_n"$ priradí $"f(t_1, |
| |
\dots, t_n)"$ |
| |
\end{itemize} |
| |
\item Interpretácia premenných a funkčných symbolov je "pevná", voľná je |
| |
interpretácia predikátov. |
| |
\item Existuje nekonečne veľa Herbrandových interpretácií danej |
| |
netriviálnej schémy, odlišujúcich sa interpretáciou predikátových |
| |
symbolov. |
| |
\item Hebrandove interpretácie "zastupujú" triedu všetkých interpretácií. |
| |
\end{itemize} |
| |
|
| |
\end{definition} % */ |
| |
|
| |
\begin{definition}[Zladenie výpočtov a symbolických výpočtov] % /* |
| |
|
| |
Interpretácia $I$ s ohodnotením $v$ je zladená s voľnou interpretáciou $I_H$ s |
| |
ohodnotením predikátov práve vtedy, keď pre každé $p \in B^n$ platí |
| |
|
| |
$$ |
| |
i_H(p)("t_1", \dots, "t_n") \iff i(p)(i^v(t_1), \dots, i^v(t_n)) |
| |
$$ |
| |
|
| |
\end{definition} % */ |
| |
|
| \begin{example} % /* H universum |
\begin{example} % /* H universum |
| |
|
| Zostrojte Herbrandové univerzum pre predchádzajúcu schému~$S$. |
Zostrojte Herbrandové univerzum pre predchádzajúcu schému~$S$. |