\documentclass[a4paper,10pt]{book}
\usepackage{KnuthAprilis13,fancybox,rotating}
\usepackage{mycolortbl}

\makeindex

\renewcommand{\sfdefault}{ufu}

\setcounter{chapter}{7}
\setcounter{tocdepth}{4}
\setcounter{section}{1}
\setcounter{subsection}{1}
\setcounter{subsubsection}{3}
\setcounter{equation}{0}
\setcounter{figure}{8}
\setcounter{page}{1}




\begin{document}
\renewcommand\sz[1]{[\textit{#1}]}
\def\figdir{abrak} % ábrakönyvtár átnevezése
\def\CEE/{{\mc C\spacefactor1000}}% the C programming language
\def\MF{{\manfnt META}\-{\manfnt FONT}}%
\def\bool#1{\mathbin{\catcode`\.=12\vcenter{\hbox{$#1$}}}}
\def\nbool#1{\mathbin{\catcode`\.=12     \mkern1.5mu\overline{\mkern-1.5mu#1\mkern-1.5mu}\mkern1.5mu}}
\def\contra{\bool{\bot}} %%% rendben
\def\nimp{\nbool\supset}   %%% rendben
\def\quant{\lower.23ex\hbox{epsfbox{\figdir/v4a.9}}}   %%% ábra kell
\def\lproj{\bool{\epsfbox{\figdir/v4a.10}}}   %%% ábra kell
\def\cnimp{\nbool\subset}    %%% rendben
\def\rproj{\bool{\epsfbox{\figdir/v4a.11}}} %%% ábra kell
\def\xor{\oplus}       %%% rendben
\def\nor{\nbool\lor}   %%% rendben
\def\leqv{\bool\equiv}    %%% rendben
\def\rcomp{\nbool{\rproj}}   %%% ábra kell
\def\cimpl{\bool\subset}   %%% rendben
\def\lcomp{\nbool{\lproj}}   %%% ábra kell
\def\impl{\bool\supset} %%% rendben
\def\nand{\nbool{\land}}  %%% rendben
\def\affirm{\bool{\top}}  %%% rendben
\def\vtiny{\vskip.2pt}    %%% rendben
\def\orie{\rlap{$\,\vec{}$}} % oriented graph modifier
\def\rest{\mathbin{\mid}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LK ábrái
\newcommand\csucstxt[1]{\eighttt #1}
\newcommand\csucskor[1]{$\begin{picture}(12,7.5)(-6,-1.5)\unitlength 1pt
\put(0,1){\circle{12}}\end{picture}\kern-12pt\hbox to12pt{\hss\hbox{\eighttt #1}\hss}\,$}
\newcommand\kiskep[1]{\vcenter{\hbox{\epsfig{file=v4a.#1.eps}}}}
\newcommand\kiskepf[1]{\vcenter{\hbox{\epsfig{file=#1}}}}
\newcommand\csucskorpq{$\kiskep{691}$}
\newcommand\csucskorzz{$\kiskep{694}$}
\newcommand\csucskornn{$\kiskep{693}$}
\newcommand\kulcsucs{$\,\kiskep{664}\,$}

\hyphenation{Boo-le
függ-vé-nyek
mély-ség-re
The-sau-ru-sát}


\tableofcontents
{
\quoteformat
A gazdaságos áramkörök tervezése nagymértékben a
kapcsoló árakörök minimalizálását jelenti.
\author H. A. CURTIS \textsl{A New Approach to the Design of Switching Circuits} (1854) \cite[161. és 162. oldal]{Curtis1962}
\angolnevindex{Curtis, Herbert Allen}
}

{
\quoteformat
Egy óriási számítógépnek kell lennie, egyébként kinek sikerülne.
Egyszerûsíteni, egyszerûsíteni.
\author HENRY D. THOREAU, \textsl{Walden; or, Life in the Woods} (1854) \cite[2. fejezet 17. \&]{Thoreau1854}
\angolnevindex{Thoreau, David Henry (= Henry David, 1817--1862)}
}
\bigskip


\markboth{\sf 7. KOMBINATORIKAI KERESÉS (4. kötet 0. rész)}{\sf 7.1.2. BOOLE-FÜGGVÉNYEK KIÉRTÉKELÉSE}
\pagestyle{myheadings}
\subsection{Boole-függvények kiértékelése\label{pont712}}\angolnevindex{Boole, George (1815--1864)}
\setcounter{equation}{0}
\setcounter{table}{5}\index{Boole-lánc = Boolean chain|(}
A következõ célunk a Boole-függvények hatékony kiértékelésének tárgyalása a 4.6.4. pontbeli polinom kiértékelés stílusában.
\index{Boole-függvények kiértékelése = evaluation of Boolean functions|(} E téma tanulmányozásának természetes 
útja az alapmûvelet-lánc vizsgálata, ahogy azt a fenti pontban a polinom láncok esetén is tettük.

Az $(x_1,\ldots,x_n)$-tõl függõ, $n$ változós Boole-függvényhez rendelt \textit{Boole-lánc} egy olyan 
$(x_{n+1},\ldots,x_{n+r})$ sorozat,\inddef{Boole-lánc = Boolean chain}
ahol \index{lineáris számítás \textit{lásd} Boole-lánc = straight-line computation, \see Boolean chain} 
minden lépés két korábbi lépés kombinációja:
\begin{equation}
x_i\;=\;x_{j(i)}\,\circ_i\,x_{k(i)},\qquad n+1\le i\le n+r \hbox{-re}\koz,\label{keplet712-1}
\end{equation}
ahol $1\le j(i)<i$ és $1\le k(i)<i$, és ahol $\circ_i$ a
\ref{tablazat71-1}. táblázatban lévõ tizenhat bináris operátor valamelyike. Például, ha $n=3$ a 
\begin{equation}
\begin{split}
x_4&=x_1\wedge x_2\\
           x_5&=\bar x_1\wedge x_3\\
           x_6&=x_4\vee x_5\\
\end{split}
\qquad\qquad\hbox{és}\qquad\qquad
\begin{split}
x_4&=x_2\xor x_3\\
         x_5&=x_1\wedge x_4\\
         x_6&=x_3\xor x_5\\
\end{split}
\label{keplet712-2}
\end{equation}
láncok mindegyike a \idez{mux}  vagy \idez{elágazás} (if-then-else) függvényt $x_6=(x_1{?}\ x_2{:}\  x_3)$ értékeli 
ki\index{kiválasztó függvény \textit{lásd} mux = selection function, \see mux}\index{mux (multiplex) = mux (multiplex)}, 
ami az $x_2$ vagy $x_3$ értéket adja, attól függõen, hogy $x_1$ értéke 1 (igaz) vagy 0 (hamis). (Megjegyezzük, hogy 
(\ref{keplet712-2}) bal oldalán egy NEM-DE (NOT-BUT) mûvelet leírására az egyszerûsített \idez{$x_5=\bar x_1\wedge x_3$}
jelölést alkalmazzuk a \ref{tablazat71-1}. táblázatbeli \idez{$x_5=x_1\cnimp x_3$} helyett. A lényeg annyi, hogy
a jelölésektõl eltekintve a Boole-lánc minden lépése két korábbi eredmény Boole-kombinációja.)

A Boole-láncok természetes módom megfeleltethetõek elektronikus áramköröknek\index{áramkör = circuit}, hogy a lánc 
egy lépése egy két bemenetû és egy kimenetû \idez{kaput}\index{kapu = gate} jelent.

A villamosmérnökök \index{villamosmérnök = electrical engineer} a (\ref{keplet712-2})-beli Boole-láncokat például az alábbi 
áramköri diagramokkal ábrázolják:
\begin{equation}\label{keplet712-3}
\epsfbox{\figdir/v4a.120} \qquad\hbox{és} \qquad \epsfbox{\figdir/v4a.121}
\end{equation}
A mérnököknek olyan gazdaságos áramköröket kell tervezniük, amelyek több technológiai megszorításnak eleget tesznek; például 
figyelembe kell venni az egyes kapuk árát, a kimeneteket esetleg erõsítõvel kell ellátni a többszörös felhasználhatóság érdekében,
megkövetelhetõ, hogy az áramkör vezetékezése teljesen vagy majdnem teljesen síkban legyen elhelyezhetõ, bizonyos huzalhosszak rövidek
legyenek stb. Ebben a könyvben azonban a szoftver és nem a hardver érdekel minket, ezért a fent említett dolgokkal nem foglalkozunk.
Számunkra minden kapu ugyanannyiba kerül és minden kimenet tetszõleges sokszor felhasználható. (Röviden szólva a Boole-láncok olyan 
áramkörökbõl épülnek fel, amelyekben minden kapunak két bemenete van és korlátozás nélkül terhelhetõ.)  
\index{kimenet és bemenet = fan-out and fan-in}

A továbbiakban a a Boole-láncokat a (\ref{keplet712-3}) áramköri diagramok helyett olyan bináris fákkal ábrázoljuk, amilyet 
például (\ref{keplet712-4})-ben láthatunk: 
\begin{equation}\label{keplet712-4}
\epsfbox{\figdir/v4a.122} \qquad \hbox{és} \qquad \epsfbox{\figdir/v4a.123} \koz.
\end{equation}
Az ilyen bináris fákban lehetnek átfedõ részfák,\index{átfedõ részfa = overlapping subtree} amennyiben a lánc közbensõ lépései 
egynél többször is elõfordulnak. Minden belsõ csúcs cinkéje egy binér mûveleti jel lesz; a levelek cinkéje pedig egy $k$ 
egész szám, ami az $x_k$ változót jelöli. (\ref{keplet712-4}) baloldali fájában a `$\olessthan$ 
'\csucskor{<}' címke a NEM-DE mûveletet jelöli, ami a  $\bar x\wedge y=[x<y]$. Hasonlóan jelölheti a `$\ogreaterthan$' 
címke a DE-NEM (BUT-NOT) operátort, ami $x \wedge\bar y$ és a `\csucskor{>}' csúcscímkével ábrázolható.

Lehetséges, hogy különbözõ Boole-láncok fa diagramja egyforma. Például (\ref{keplet712-4}) baloldali fája reprezentálhatja a
következõ láncot is:
\begin{equation*}x_4=\bar x_1\wedge x_3,\qquad x_5=x_1\wedge x_2,\qquad x_6=x_5\vee x_4\koz.
\end{equation*} 
A fa csúcsainak bármely topológiai elrendezése ekvivalens láncot eredményez.

\smallbreak Adott $n$-változós $f$ Boole-függvény esetén legtöbbször olyan Boole-láncot keresünk, ahol
$x_{n+r}=f(x_1,\ldots,x_n)$ és $r$ a lehetõ legkisebb. Egy $f$ függvény \textit{kombinatorikus bonyolultsága}
\index{kombinatorikus bonyolultság = combinational complexity} $C(f)$, az $f$-et kiszámító legrövidebb lánc hossza. Egyszerûség
kedvéért $C(f)$-et \idez{az $f$ költségének} nevezzük. A fenti példabeli mux függvény költsége 3, mivel minden eset kipróbálásával 
megmutatható, hogy 2 hosszúságú Boole-lánccal nem lehet elõállítani.

$f$-nek a 7.1.1. pontban tárgyalt\index{DNF = DNF} DNF vagy\index{KNF = CNF} KNF alakú ábrázolása ritkán ad komolyabb
információt $C(f)$-rõl, mivel azoknál sokkal hatékonyabb kiszámítási sémák is léteznek. Például a (\ref{keplet711-30})-at 
követõ elemzésben láttuk, hogy a többé-kevésbé véletlen, 1100 1100~1001~0000~1111 igazságtáblájú négyváltozós függvénynek nincs 
rövidebb DNF alakja, mint %^^{pi, random}
\begin{equation}(\bar x_1\wedge\bar x_2\wedge\bar x_3)\vee (\bar x_1\wedge\bar
x_3\wedge\bar x_4)\vee (x_2\wedge x_3\wedge x_4)\vee(x_1\wedge
x_2)\koz.\label{keplet712-5}
\end{equation}
Ez a formula egy 10 lépéses Boole-láncnak felel meg. Ugyanakkor ez a függvény kifejezhetõ ügyesebben is:
\begin{equation}\bigl(((x_2\wedge\bar x_4)\xor\bar x_3)\wedge\bar x_1\bigr)\xor x_2\koz,\label{keplet712-6}
\end{equation}
ennek a bonyolultsága legfeljebb 4.


Hogyan lehet a (\ref{keplet712-6})-hoz hasonló, nem nyilvánvaló formulákat megtalálni? Látni fogjuk, hogy a négyváltozós 
függvényekhez egy számítógép képes megtalálni a legjobb láncokat nagy mennyiségû munka nélkül. Az eredmények valóban meglepõek, 
fõleg azok számára akiknek komoly tapasztalatai vannak a Boole-algebrában. Jellegzetes példákat láthatunk erre a 
\ref{abra712-9}. ábrán, ahol azokat a négyváltozós függvényeket mutatjuk, amelyek talán a
legnagyobb érdeklõdésre tartanak számot, nevezetesen azokat, amelyek változóik minden permutációjára szimmetrikusak. 
\index{szimmetrikus függvény = symmetric function|(}

\begin{figure}[!t]
\begin{center}
\epsfbox{\figdir/ch7a.720} \epsfbox{\figdir/ch7a.722}\quad \epsfbox{\figdir/ch7a.724} \\
\epsfbox{\figdir/ch7a.704} \epsfbox{\figdir/ch7a.705}\quad \epsfbox{\figdir/ch7a.706} \quad \epsfbox{\figdir/ch7a.707}\\
\epsfbox{\figdir/ch7a.708} \epsfbox{\figdir/ch7a.709}\quad \epsfbox{\figdir/ch7a.710} \quad \epsfbox{\figdir/ch7a.711}\\
\epsfbox{\figdir/ch7a.712} \epsfbox{\figdir/ch7a.713}\quad \epsfbox{\figdir/ch7a.714} \epsfbox{\figdir/ch7a.715}\\
\caption{Optimális Boole-láncok négy változó szimmetrikus függvényére.\label{abra712-9}}
\end{center}
\end{figure}

Tekintsük például azt az $S_2(x_1,x_2,x_3,x_4)$ függvényt, amire a \ref{abra712-9}. ábra alapján ezt kapjuk:
\begin{equation}\vcenter{\halign{$\hfil x_{#}$&${}#\hfil$\qquad\qquad&#\cr
1&&                  0000 0000 1111 1111\cr 2&& 0000 1111 0000
1111\cr 3&&                  0011 0011 0011 0011\cr 4&& 0101 0101
0101 0101\cr 5&=x_1\xor x_3& 0011 0011 1100 1100\cr 6&=x_1\xor
x_2&      0000 1111 1111 0000\cr 7&=x_3\xor x_4& 0110 0110 0110
0110\cr 8&=x_5\vee x_6& 0011 1111 1111 1100\cr 9&=x_6\xor x_7&
0110 1001 1001 0110\cr 10&=x_8\wedge\bar x_9&0001 0110 0110
1000\koz.\cr}}\label{keplet712-7}
\end{equation}
Itt az igazságtáblákat \index{igazságtábla = truth table}látjuk, amelyekkel könnyen ellenõrizhetõ a kiszámítás
minden lépése. Az $x_8$ lépés egy olyan függvényt jelent, ami akkor igaz, ha  $x_1\neq x_2$ vagy $x_1\neq x_3$; és 
$x_9=x_1\xor x_2\xor x_3\xor x_4$ az $(x_1+x_2+x_3+x_4) \mod 2$ paritásfüggvény.\index{paritásfüggvény = parity function} Ezért 
a végeredmény, $x_{10}$ pontosan akkor igaz, ha $\{x_1,x_2,x_3,x_4\}$ közül pontosan kettõnek az értéke 1; ezek azok az 
esetek, amelyek kielégítik $x_8$-at és a paritásuk páros.

A \ref{abra712-9}. ábra számos kiszámítási sémája igazolható intuitív úton. Néhány lánc azonban, mint például az 
$S_{1,4}$ függvényhez tartozó, kifejezetten érdekes.

 Figyeljük meg, hogy (\ref{keplet712-7})-ben az $x_6$ részeredményt kétszer használjuk fel. Nincs is olyan hatlépéses lánc 
 az $S_2(x_1,x_2,x_3,x_4)$ függvényre, amelyben valamelyik részkifejezést ne kellene kétszer felhasználni; $S_2$ valamennyi 
 legrövidebb algebrai kifejezésének, köztük olyan elegáns, szimmetrikus formulának, mint 
\begin{equation}\bigl((x_1\wedge x_2)\vee(x_3\wedge x_4)\bigr)\xor
  \bigl((x_1\vee x_2)\wedge(x_3\vee x_4)\bigr)\koz,\label{keplet712-8}
\end{equation}
7 a költsége. De a \ref{abra712-9}. ábra mutatja, hogy a többi négyváltozós szimmetrikus függvény optimálisan 
kiértékelhetõ \idez{tiszta} bináris fákkal,\index{bináris fa = binary tree} amelyekben csak a változókat ábrázoló  
levelek fordulnak elõ többször.

Egy $f(x_1,\ldots,x_n)$ Boole-függvény  $L(f)$ \textit{hosszán}\inddef{Boole-függvény hossza = length of a Boole function} 
az $f$-et leíró legrövidebb kifejezésben lévõ kétváltozós mûveleti jelek száma.\index{formula bonyolultsága, 
\textit{lásd} hossz = formula complexity, \see length}
Világos, hogy $L(f)\ge C(f)$; és $n\le 3$ esetén könnyen ellenõrizhetõ, hogy $L(f)=C(f)$, ha megnézzük a
(\ref{keplet711-95})-ben a 3 változós függvények\index{háromváltozós függvény@3 változós függvény = 3 variable function} 
tizennégy alaptípusát. Láttuk azonban, hogy $n=4$-re $L(S_2) = 7$ nagyobb, mint $C(S_2) = 6$, és nagy $n$ esetén 
$L(f)$ szinte mindig lényegesen nagyobb, mint $C(f)$ (lásd a \ref{gyak712-49}. gyakorlatot).

Egy $f$ Boole-függvény  $D(f)$ \textit{mélysége}\inddef{Boole-függvény mélysége = depth of a Boole-függvény} 
a bonyolultság másik fontos mértéke. Azt mondjuk,
hogy egy Boole-lánc mélysége a lánc fadiagramjában a leghosszabb lefelé haladó út hossza. $D(f)$ pedig az $f$ Boole-láncaiban lévõ
leghosszabb utak hosszainak minimuma. A \ref{abra712-9}. ábrán látható láncok költsége és mélysége is minimális -- kivéve az
$S_{2,3}$ és $S_{1,2}$ eseteket, ahol nem lehet elérni egyszerre a 6 költséget és a 3 mélységet. A 
\begin{equation}S_{2,3}(x_1,x_2,x_3,x_4)= \bigl((x_1\wedge x_2)\xor(x_3\wedge
x_4)\bigr)\vee
  \bigl((x_1\vee x_2)\wedge(x_3\xor x_4)\bigr)\label{keplet712-9}
\end{equation}
formula mutatja, hogy $D(S_{2,3})=3$, és hasonló formula áll elõ $S_{1,2}$-re is.
  
\medskip
\noindent \textbf{Optimális láncok $n = 4$-re}.\index{négyváltozós függvény = function of four variables} 
A 4 változós függvények végigszámolhatók, mivel mindössze $2^{16}=65\,536$ az igazságtáblák száma. Valójában az
igazságtábláknak csak a felét kell feldolgozni, mivel egy $f$ függvény $\bar f$ 
negáltjának \index{Boole-függvény negáltja = complement of a Boole-függvény} a
költsége, hossza és mélysége ugyanannyi, mint $f$-nek. 

Azt mondjuk, hogy $f(x_1,\ldots,x_n)$ \index{normalizált Boole-függvény = normal Boole-function} \textit{normalizált}, 
ha $f(0,\ldots,0)=0$ és általában az
\begin{equation}
f(x_1,\ldots,x_n)\,\xor\,f(0,\ldots,0) \label{keplet712-10}
\end{equation}
az $f$ \idez{normalizáltja}.\inddef{normalizált Boole-függvény = normal Boole-function} Bármely Boole-láncot lehet úgy 
normalizálni, hogy minden lépését normalizáljuk, és megfelelõ módon megváltoztatjuk a mûveleti jeleket. Ha ugyanis 
$(\hat x_1,\ldots, \hat x_{i-1})$ az $(x_1,\ldots,x_{i-1})$ normalizáltja és ha $x_i=x_{j(i)}\circ_i x_{k(i)}$, mint az 
(\ref{keplet712-1})-ben, akkor $\hat x_i$ az $\hat x_{j(i)}$ és $\hat x_{k(i)}$ bináris függvénye. (A \ref{gyak712-7}. 
gyakorlatban mutatunk erre egy példát.) Ezért az általánosság megsértése nélkül elegendõ normalizált Boole-láncokkal foglalkozni.

Megjegyezzük, hogy egy Boole-lánc akkor és csak akkor normalizált, ha minden $\circ_i$ kétváltozós 
operátora normalizált.\index{kétváltozós operátor = binary operátor|(} Csak nyolc
normalizált kétváltozós operátor van és ezek közül is három, nevezetesen a $\contra$, $\lproj$ és $\rproj$ 
triviálisak. Így feltehetjük, hogy minden fontosabb Boole-lánc öt mûveleti jellel $(\wedge$, $\cnimp$, $\nimp$, $\vee$ és $\xor)$ 
épül fel. Ezeket a mûveleti jeleket a \ref{abra712-9}. ábrában rendre $\owedge$, $\olessthan$, $\ogreaterthan$, 
$\ovee$, $\varoplus$-szal jelöljük. Ezenkívül feltesszük, hogy minden lépésben $j(i) < k(i)$.

A normalizált négyváltozós függvények száma $2^{15}=32{,}768$ és hosszukat megállapíthatjuk az összes 0, 1, 2 stb. 
hosszúságú függvény módszeres felsorolásával. Valóban $L(f) = r$ azt jelenti, hogy $f = g \circ h$ valamely $g$-re és $h$-ra, 
ahol $L(g)+L(h)=r-1$ és $\circ$ az öt nem triviális normalizált mûvelet valamelyike. Ennek megfelelõen az eljárás lehet a következõ.

\algbegin L algoritmus (normalizált hosszak keresése). Az\inddef{L algoritmus = Algorithm L}
algoritmus meghatározza $L(f)$-et bármely normalizált $0\le f<2^{2^n-1}$ igazságtábla esetén, elõállítva az összes
nemnulla $r \ (r \ge 0)$ hosszúságú, nemnulla normalizált függvény listáját.

\algindentset{L1}

\algstep L1. (Kezdeti értékek beállítása.) Legyen $L(0) \gets 0$ és $L(f)\gets \infty$ az $1\le f<2^{2^n-1}$ esetben. Legyen  
az $1 \le k < n-1$ értékekre $L(x_k) \gets 0$ és a nulladik listába tegyük be $x_k$-t, ahol
\begin{equation} x_k\;=\;(2^{2^n}-1)/(2^{2^{n-k}}+1) \label{keplet712-11}
\end{equation}
az $x_k$ igazságtáblája. (Lásd a \ref{gyak712-8}. gyakorlatot.) Végül legyen $c\gets 2^{2^n-1}-n-1$; $c$ azoknak a helyeknek 
a száma, ahol $L(f) = \infty$.

\algstep L2. (Ciklus $r$-re.) Az L3 lépés végrehajtása az $r = 1, \ 2, \ \dots$ értékekre addig, amíg az algoritmus 
befejezõdik azzal, hogy $c$ értéke $0$ lesz.

\algstep L3. (Ciklus $j$-re és $k$-ra.) Az L4 lépés végrehajtása a 
$j=0, \ 1, \ \dots$ értékekre és $k = r-1-j$-re, amíg $j\le k$.

\algstep L4. (Ciklus $g$-re és $h$-ra.) Az L5 lépés végrehajtása a $j$-edik lista minden $g$ és a $k$-adik lista minden $h$ 
elemére. (Ha $j = k,$ akkor elegendõ azokat a $h$ függvényeket tekinteni, amelyek \textit{követik} $g$-t a $k$-adik listában.)

\algstep L5. (Ciklus $f$-re.) Az L6 lépés végrehajtása $f=g\& h,$ $f=\bar g\& h,$ $f=g\&\bar h,$ $f=g| h,$ és $f=g\xor
h$-ra. (Itt $g\& h$ a $g$ és $h$ egész számok bináris felírásának bitenkénti ÉS mûveletének eredményét jelöli; az 
igazságtáblákat\index{igazságtábla = truth table} egész számok bináris alakjával ábrázoljuk.)\index{bitenként = bitwise}

\algstep L6. (Új-e $f$?) Ha $L(f)=\infty$, akkor legyen $L(f)\gets r$, $c\gets c-1$, és tegyük $f$-et az $r$ listába. 
Az algoritmus befejezõdik, ha $c=0$.\slug

A \ref{gyak712-10}. gyakorlat mutatja, hogy hasonló eljárással ki lehet számítani az összes $D(f)$ 
mélységet\index{mélység = depth}\index{Boole-függvény = Boole function|Boole-függvény mélysége = depth of a Boole function} is.

Az L algoritmust lehet úgy módosítani, hogy egy kis többletmunkával $C(f)$-re jobb felsõ korlátokat találjon. Ez egy
heurisztikus $\phi(f)$ bitvektor kiszámítása, amit $f$ \idez{lábnyomának}\index{lábnyom = footprint|(} nevezünk.
Egy normalizált Boole-lánc mindössze $5{n \choose 2}$ különbözõ módon kezdõdhet, mivel az $x_{n+1}$ elsõ lépés  kizárólag az
$x_1\wedge x_2$ vagy $\bar x_1\wedge x_2$ vagy $x_1\wedge\bar x_2$ vagy $x_1\vee x_2$ vagy $x_1\xor x_2$ vagy $x_1\wedge x_3$ vagy
$\ldots$ vagy $x_{n-1}\xor x_n$ valamelyike lehet. Tegyük fel, hogy $\phi(f)$ egy $5{n\choose2}$ hosszúságú bitvektor és $U(f)$ a
$C(f)$-nek a következõ tulajdonságú felsõ korlátja: Minden $\phi(f)$-beli 1-bit megfelel valamelyik, az $f$-et $U(f)$
lépésben kiszámító Boole-lánc elsõ elemének.

Ilyen $(U(f),\phi(f))$ párokat ki lehet számolni az L algoritmus alapstratégiájának kiterjesztésével. Induláskor legyen
$U(f)\gets 1$ és $\phi(f)$ legyen minden 1 költségû $f$-re egy megfelelõ $0 \ldots 010 \ldots 0$ vektor. Ezután az 
$r=2, \ 3, \ \dots$ értékekre olyan $f=g\circ h$ függvényeket keresünk, ahol $U(g)+U(h) = r-1$, mint korábban, 
de két változtatással: (1) Ha $g$ és $h$ lábnyomaiban van legalább egy közös elem, azaz $\phi(g)\&\phi(h)\neq 0$, akkor tudjuk, 
hogy $C(f)\le r-1$, tehát $U(f)$ csökkenthetõ, amennyiben az $\ge r$ volt. (2) Ha $g\circ h$ költsége egyenlõ az aktuális 
$U(f)$ felsõ korláttal (de annál nem kisebb), akkor legyen $\phi(f)\gets \phi(f)|(\phi(g)|\phi(h)),$ ha $U(f)=r$, $\phi(f)\gets
\phi(f)|(\phi(g)\&\phi(h))$, ha $U(f) = r-1$. A \ref{gyak712-11}. gyakorlat mutatja a kidolgozás részleteit.

Kiderül, hogy ez a heurisztikus lábnyom eléggé hatékony ahhoz, hogy $n=4$ esetben minden $f$ függvényre megtaláljuk az
$U(f) = C(f)$ optimális költségû láncokat. Késõbb látni fogjuk, hogy a lábnyomok sokkal összetettebb kiértékelési 
problémák esetén is segítségünkre lesznek.

A \ref{tablazat711-5} táblázatnak megfelelõen a $2^{16}=65{,}536$ négyváltozós függvény mindössze 222 különbözõ osztályhoz 
tartozik, ha nem veszünk tudomást a változók permutálása és/vagy az értékek komplementálása miatt adódó kisméretû eltérésekrõl. 
Az L algoritmus és változatai vezettek a \ref{tablazat712-1}. 
táblázatban\index{hossz statisztika = length stat}\index{költség statisztika =  cost stat}\index{mélységi statisztika = depth stat} 
lévõ statisztikai adatokhoz.

\begin{table}[1. Táblázat]
\caption{\label{tablazat712-1}}
\centerline{ADOTT BONYOLULTSÁGÚ NÉGYVÁLTOZÓS FÜGGVÉNYEK SZÁMA}
\vspace{4mm}
\centering
          \begin{tabular}{crrrrrrrr}
          \hline
\small{$C(f)$}&\omit\
\small{Osztályok} &\omit\ \small{Függvények} & \small{$L(f)$}&\omit\ \small{Osztályok} &\omit\
\small{Függvények}& \small{$D(f)$}&\omit\ \small{Osztályok} &\omit\ \small{Függvények}\\
    0&2&10&0&2&10&0&2&10\\
1&2&60&1&2&60&1&2&60\\
2&5&456&2&5&456&2&17&1458\\
3&20&2474&3&20&2474&3&179&56456\\
4&34&10624&4&34&10624&4&22&7552\\ 5&75&24184&5&75&24184&5&0&0\\
6&72&25008&6&68&24640&6&0&0\\ 7&12&2720&7&16&3088&7&0&0\\
          \hline
           \end{tabular}
\end{table}
\index{kétváltozós operátor = binary operátor|)}\index{lábnyom = footprint|)}

\noindent \textbf{*Kiértékelés minimális memóriával.}\index{minimális memória = minimum memory} Tegyük fel hogy az $x_1$, 
\dots,~$x_n$ változók értékei $n$ regiszterben \index{regiszter = registers} jelennek meg és ki akarunk értékelni egy függvényt egy
\begin{equation}x_{j(i)}\;\gets\;x_{j(i)}\,\circ_i\,x_{k(i)}, \qquad (1\le i\le r)\label{keplet712-12}
\end{equation}
alakú mûveletsorozat végrehajtásával, ahol $1\le j(i)\le n$ és $1\le k(i)\le n$ és $\circ_i$ egy kétváltozós mûvelet. A számítás
végén a kívánt függvényérték a regiszterek valamelyikében jelenik meg.

Például $n = 3$-ra a 
\begin{equation}
\begin{matrix}
x_1\gets x_1\xor x_2\quad\\ x_3\gets x_3\wedge  x_1\quad\\  x_2\gets x_2\wedge\bar x_1\quad\\ x_3\gets x_3\vee x_2\quad
\end{matrix}
\begin{matrix}
\quad(x_1=00001111 &x_2=00110011 &x_3=01010101)\\
\quad(x_1=00111100 &x_2=00110011 &x_3=01010101)\\
\quad(x_1=00111100 &x_2=00110011 &x_3=00010100)\\
\quad(x_1=00111100 &x_2=00000011 &x_3=00010100)\\
\quad(x_1=00111100 &x_2=00000011 &x_3=00010111)
\end{matrix}
\label{keplet712-13}
\end{equation}
négylépéses sorozat kiszámítja $\langle x_1x_2x_3\rangle$  mediánját\index{medián = median} és az eredményt az $x_3$ 
eredeti helyén találjuk. (Itt igazságtábla alakban\index{igazságtábla = truth table} jelenik meg a nyolc -- a mûveletek 
elõtt és után lehetséges -- regisztertartalom.)

Ha a helyzetet visszafelé haladva elemezzük, akkor a számítást ellenõrizhetjük úgy, hogy mindig csak egy igazságtáblával 
dolgozunk, így nem kell mind a hármat kezelni. Jelölje $f_l(x_1,\ldots,x_n)$ a sorozat $l, \ l + 1, \ \dots, \ r$-edik   
lépéseivel kiszámított függvényt, amibõl elhagyjuk az elsõ $l-1$ lépést. Példánkban az $x_3$-beli
eredmény a három lépés, $x_3\gets x_3\wedge x_1$, $x_2\gets
x_2\wedge\bar x_1$, $x_3\gets x_3\vee x_2$, után kapott
$f_2(x_1,x_2,x_3)$  lesz. Így a négy lépésben az $x_3$
regiszterben kiszámított függvény a következõ:
\begin{equation} f_1(x_1,x_2,x_3)\;=\;f_2(x_1\xor x_2,x_2,x_3)\koz.\label{keplet712-14}
\end{equation}
Hasonlóan $f_2(x_1,x_2,x_3)=f_3(x_1,x_2,x_3\wedge x_1)$,
          $f_3(x_1,x_2,x_3)=f_4(x_1,x_2\wedge\bar x_1,x_3)$,
          $f_4(x_1,x_2,x_3)=f_5(x_1,x_2,x_3\vee x_2)$, és
          $f_5(x_1,x_2,x_3)=x_3$. Ezért az igazságtáblákon
megfelelõ módon haladva visszafelé $f_5$-bõl $f_4$-be, $\ldots,$ $f_1$-be jutunk.

Például tegyük fel, hogy az $f(x_1,x_2,x_3)$ függvény igazságtáblája
\begin{equation*}t\;=\;a_0a_1a_2a_3a_4a_5a_6a_7\koz;
\end{equation*}  
akkor a $g(x_1,x_2,x_3)=f(x_1\xor x_2,x_2,x_3)$ igazságtáblája
\begin{equation*}
u\;=\;a_0a_1a_6a_7a_4a_5a_2a_3\koz,
\end{equation*} 
úgy áll elõ, hogy $a_x$-et $a_{x'}$-vel helyettesítjük, ahol
\begin{equation*}
\qquad\hbox{ha}\qquad x=(x_1x_2x_3)_2, \qquad\hbox{akkor}\qquad
x'=((x_1{\xor}x_2)x_2x_3)_2\koz.
\end{equation*} 
Hasonlóan a $h(x_1,x_2,x_3)=f(x_1,x_2,x_3\wedge x_1)$ igazságtáblája
\begin{equation*}
v\;=\;a_0a_0a_2a_2a_4a_5a_6a_7\koz.
\end{equation*}
Ekkor $t$-bõl $u$-t és $v$-t kiszámíthatjuk bitenkénti
mûveletekkel: \index{bitenkénti mûvelet = bitwise operation}
\begin{equation}
u=t\xor\bigl((t\xor(t\gg 4)\xor(t\ll4))\&(00110011)_2\bigr)\koz,\label{keplet712-15}
\end{equation}
\vspace{2mm}
\begin{equation}
v=t\xor\bigl((t\xor(t\gg 1))\&(01010000)_2\bigr)\koz.\label{keplet712-16}
\end{equation}

Legyen $f$ minimális memóriával való legrövidebb kiszámításának a hossza $C_m(f)$. A visszafelé haladó kiszámítás 
elve\index{visszafelé haladó kiszámítás elve = backward-computation principle} azt
jelenti, hogy ha ismerjük minden olyan $f$ függvény igazságtábláit, amelyre $C_m(f)<r$, akkor meg lehet találni az összes
olyan függvény igazságtábláját, amelyre $C_m(f)=r$. Itt is elegendõ a normalizált 
függvényeket\index{normalizált függvények = normal functions} tekinteni. Ekkor minden olyan normalizált
$g$-re, amelyre $C_m(g) = r-1$, elõ tudjuk állítani a mind az $5n(n-1)$ igazságtáblát 
\begin{equation}g(x_1,\ldots,x_{j-1},x_j\circ x_k,x_{j+1},\ldots,x_n)\label{keplet712-17}
\end{equation}
függvény mind az $5n(n-1)$ igazságtábláját, amelyekhez $r$ költséget rendelünk, ha ez elõzõleg nem történt volna meg. 
A \ref{gyak712-14}. gyakorlat mutatja, hogy ezeket az igazságtáblákat egyszerû bitenkénti mûveletekkel ki lehet számítani 
a $g$ igazságtáblájából .

$n = 4$ esetén 13 kivételével mind a 222 alapfüggvény-típusra $C_m(f) = C(f),$ tehát ki lehet minimális memóriával
értékelni a költség növelése nélkül. Jelesül, minden szimmetrikus függvény rendelkezik ezzel a tulajdonsággal -- 
habár a \ref{abra712-9}. ábrából ez nem nyilvánvaló. Öt függvényosztály esetén $C(f)=5$ vagy $C_m(f)=6$, nyolc osztálynál 
$C(f)=6$ de $C_m(f) = 7$. A legérdekesebb példa ez utóbbiak közül valószínûleg a
$(x_1\vee x_2)\xor(x_3\vee x_4)\xor(x_1\wedge x_2\wedge x_3\wedge
x_4)$ függvény, aminek a költsége 6 a
\begin{equation}x_1\xor(x_3\vee
x_4)\xor\bigl(x_2\wedge(\bar x_1\vee(x_3\wedge x_4))\bigr)
\label{keplet712-18}
\end{equation} 
formula miatt és nincs 7-nél rövidebb minimális memóriájú lánc hozzá. (Lásd a \ref{gyak712-15}. gyakorlatot.)

\medskip
\noindent \textbf{*A minimális költség meghatározása.}\index{optimális Boole kiértékelés = optimum Boolean evaluation|(}
 $C(f)$ pontos értéke megállapítható, ha megfigyeljük, hogy valamennyi $(x_{n+1},\ldots,x_{n+r})$ optimális 
Boole-lánca nyilvánvalóan teljesíti a következõ három feltétel legalább egyikét:
\begin{itemize}
\item[ i)] $x_{n+r} = x_j\circ x_k$, ahol $x_j$ és $x_k$ nem használnak fel közös
részeredményeket;
\item[ ii)] $x_{n+1} = x_j\circ x_k$, ahol $x_j$ és $x_k$ valamelyike nincs felhasználva
az $x_{n+2}$, \dots,~$x_{n+r}$ lépésekben;
\item[ iii)] A fentiek egyike sem teljesül még akkor sem, ha a lépések sorrendjét megváltoztatjuk.
\end{itemize}
\breathe\noindent Az (i) esetben $f=g\circ h$, ahol
$C(g) + C(h) = r-1$. Ezt nevezzük \idez{fentrõl-lefelé}\index{fentrõl-lefelé konstrukció = top-down construction|(}
konstrukciónak. Az (ii) esetben $f(x_1,\ldots,x_n) = g(x_1,\ldots,x_{j-1},\allowbreak
 x_j\circ x_k,x_{j+1},\ldots,x_n)$, ahol $C(g) = r-1$. Ezt nevezzük
 \idez{lentrõl-felfelé} konstrukciónak.\index{lentrõl-felfelé konstrukció = top-down construction|(}

A legjobb olyan láncokhoz, amelyeknél rekurzívan csak fentrõl-lefelé konstrukciót használnak, az $L(f)$ minimális
formulahossz\index{formula hossz = formula length} tartozik. A legjobb olyan láncokhoz, amelyeknél rekurzívan csak lentrõl-felfele
konstrukciót használnak, a $C_m(f)$ hosszúságú minimális-memória\index{minimális-memória = minimum-memory} kiértékelés tartozik.
Jobb lehet az eredmény, ha fentrõl-lefelé és a lentrõl-felfelé konstrukciót ötvözzük, de nem lehet tudni, hogy $C(f)$-et
találtuk-e meg, mivel az (iii) esethez tartozó lánc lehet még ennél is rövidebb.

Szerencsére az ilyen speciális láncok ritkák, mivel nagyon szigorú feltételeknek kell eleget tenniük. Azonban amikor $n$ és 
$r$ nem túl nagy, ezekrõl lehet teljes listát készíteni. Például a \ref{gyak712-19}. gyakorlatban megmutatjuk, hogy $r<n+2$; 
és ha $n=4$ és $r=6$, akkor mindössze a következõ 25 olyan lényegesen különbözõ, speciális lánc létezik, 
amelyek tovább már nem rövidíthetõek:
$$\epsfbox{\figdir/v4a.1210}\epsfbox{\figdir/v4a.1211}\epsfbox{\figdir/v4a.1212}\epsfbox{\figdir/v4a.1213}
\epsfbox{\figdir/v4a.1214}\epsfbox{\figdir/v4a.1215}\epsfbox{\figdir/v4a.1216}\epsfbox{\figdir/v4a.1217}$$
$$\epsfbox{\figdir/v4a.1219}\epsfbox{\figdir/v4a.1220}\epsfbox{\figdir/v4a.1221}\epsfbox{\figdir/v4a.1222}
\epsfbox{\figdir/v4a.1223}\epsfbox{\figdir/v4a.1224}\epsfbox{\figdir/v4a.1225}\epsfbox{\figdir/v4a.1226}\epsfbox{\figdir/v4a.1226}$$
$$\epsfbox{\figdir/v4a.1223}\epsfbox{\figdir/v4a.1224}\epsfbox{\figdir/v4a.1225}\epsfbox{\figdir/v4a.1226}
\epsfbox{\figdir/v4a.1227}\epsfbox{\figdir/v4a.1228}\epsfbox{\figdir/v4a.1229}\epsfbox{\figdir/v4a.1230}\koz.$$
Ha végigpróbáljuk minden speciális lánc esetén a fa belsõ csúcsaihoz
a normalizált mûveletek $5^r$ egyenkénti lehetséges hozzárendelését, akkor
minden ekvivalenciaosztályból találunk legalább egy $f$ függvényt,
amelynek a $C(f)$ minimális költsége csak az (iii) esetben érhetõ el.

Valóban, ha $n=4$ és $r=6$, ez a $25\cdot 5^6 = 390{,}625$ próbálkozás egyetlen olyan függvényosztályt eredményez, amit nem
lehet kiszámolni 6 lépésben egyetlen együttes fentrõl-lefelé plusz lentrõl-felfelé lánccal sem. Ez a hiányzó osztály, amit a
$(\langle x_1x_2x_3\rangle\vee x_4)\xor (x_1{\wedge}x_2{\wedge}x_3)$ részlegesen szimmetrikus függvénnyel jellemzünk, hat lépésben
elérhetõ a fentiekben látható elsõ öt lánc bármelyikébõl, megfelelõen specializálva ezeket. Például egy lehetõség az
\begin{equation}
\begin{split}\quad
x_5&=x_1\wedge x_2,\quad x_6 =x_1\vee x_2,\quad x_7 =x_3\xor x_5\koz,
\hfill\cr \hfill x_8& =x_4\wedge\bar x_5,\quad x_9 =x_6\wedge
x_7,\quad x_{10} =x_8\vee x_9\koz,
\end{split}\label{keplet712-19}
\end{equation}
amely az elsõ speciális láncnak felel meg. Mivel minden más függvényre $L(f)\le 7,$ az ilyen próbaszámítások minden 
esetben megadják a minimális költséget.

\textit{Történeti megjegyzések.} Az elsõ összehangolt kísérleteket az $f(w,x,y,z)$ Boole-függvények optimális kiértékelésére
1951-ben publikálták \cite{Aiken1951}, ahol Howard Aiken csapata ismertetett heurisztikus módszereket, valamint átfogó 
táblákat az általuk konstruált legjobb logikai áramkörökrõl\angolnevindex{Aiken, Howard Hathaway (1900--1973)}. Az õ $V(f)$ 
költségfüggvényük más volt, mint az általunk tekintett $C(f)$ költség, mivel az a vákuumcsövek\index{vákuumcsõ = vacuum tube} 
vezérlõrácsán\index{vezérlõ hálózat = control grid} alapult. Háromféle kaput\index{kapu = gate} használtak: NEM-VAGY-ot,  
VAGY-ot és ÉS-t és NEM-ÉS-t. Ezek  bemenetszáma $k$ és költsége is $k$ volt. Az ilyen kapuk bemenete vagy egy változó vagy 
egy negált változó vagy egy elõzõ kapu kimenete lehetett. A kiértékelendõ függvényt legfelsõ szinten tetszõleges számú 
kapu járulékos költség nélküli ÉS-kapcsolatával ábrázolták, ami nem jelentett már költséget.

\def\NOR{\hbox{\mc NEM-VAGY}}
\def\OR{\hbox{\mc VAGY}}
\def\NAND{\hbox{\mc NEM-ÉS}}
\def\AND{\hbox{\mc ÉS}}
Ilyen költség-feltételek mellett a függvénynek és a negáltjának nem lehetett ugyanaz a költsége, mivel az ÉS kapuk csak a
legfelsõ szinten fordulhattak elõ. Az $x\wedge y$ mint NEM-VAGY$(\bar x,\bar y)$ kiértékelésnek költsége 2, de a $\bar x\vee(\bar
y\wedge\bar z)\!=\!$NEM-ÉS$(x,$VAGY$(y,z))$ kiértékelésnek költsége~4, míg a negáltjáé, ami 
$x\wedge(y\vee z)=$ AND$\bigl($NEM-VAGY$(\bar x),$VAGY$(y,z)\bigr)$ csak 3. Ezért a Harvard kutatóinak, 4 változós függvények esetén 
402 lényegében különbözõ függvényosztályt kellett vizsgálni a 222 helyett (lásd a \ref{gyak711-125}. gyakorlatra adott választ). 

Természetesen akkor még kézzel dolgoztak. Azt találták, hogy minden esetben $V(f)<20$, kivéve a
$S_{0,1}(w,x,y,z)\vee\bigl(S_2(w,x,y)\wedge\nobreak z\bigr)$-val ekvivalens 64 függvényt, amit õk 20 vezérlõráccsal 
értékeltek ki:\index{szimmetrikus függvény = symmetric function} 
\begin{equation}
\begin{split}
g_1=\NOR(\bar w,\bar x),\ g_2=\NAND(\bar y,z),\ g_3=\NOR(w,x)\koz,
\hfill\cr\qquad
f=\AND\bigl( \NAND(g_1,g_2), \NAND(g_3,\NOR(\bar
y,\bar z))\koz, \hfill\cr
\NOR(\NOR(g_3,\bar y,z),\NOR(g_1,g_2,g_3))
\bigr)\koz.
\end{split}
\label{keplet712-20}
\end{equation}

Hellerman \cite{Hellerman1963}\angolnevindex{Hellerman, Leo} írta az elsõ számítógépes programot bizonyíthatóan 
optimális áramkörök elõállítására, és az adott $f(x,y,z)$ függvény kiértékeléséhez szükséges minimális NOR
kapuk számának meghatározására. Megkövetelte, hogy minden kapu minden bemenete vagy egy negálatlan változó vagy egy elõzõ kapu
kimenete legyen; a bemenetek\index{bemenet = fan-in} és az egy kimenetre kapcsoló bemenetek\index{kimenet = fan-out} 
legfeljebb 3 lehetett. Ha két áramkörben ugyanannyi áramkör szerepelt, akkor azt választotta, ahol az input összeg a legkevesebb.
Például kiszámította a\index{többségi függvény = majority function}\index{szimmetrikus függvény = symmetric function}
$\bar x=\NOR(x)$-t 1 költséggel; $x\vee y\vee z=\NOR(\NOR(x,y,z))$-t 2 költséggel; $\langle
xyz\rangle=\NOR(\NOR(x,y),\NOR(x,z),\NOR(y,z))$-t 4 költséggel;
$S_1(x,y,z)=\NOR\bigl(\NOR(x,y,z),\langle xyz\rangle\bigr)$-t 6
költséggel; stb. Mivel a fan-out korlát nála 3 volt, megmutatta,
hogy minden háromváltozós függvény kiértékelhetõ 7 vagy ennél
kevesebb költséggel. Kivétel a $x\xor y\xor z=(x\leqv y)\leqv z$
paritás függvény, \index{paritás függvény = parity function} ahol
$x\leqv y$ költsége 4 mivel ez a $\NOR(\NOR(x,\NOR(x,y)),\NOR(y,\NOR(x,y)))$.

A villamosmérnökök \index{mérnök = engineer} folytatták a kutatást más költség kritériumok irányába, de 1977-ig a
négyváltozós függvények elérhetetlennek tûntek, amikor Liang \angolnevindex{Liang, Franklin Mark} a \ref{tablazat712-1}.  
táblázatban látható $C(f)$ értékeket kiszámolta \cite{Liang1977}. Liang publikálatlan munkája az összes olyan lánc 
tanulmányozásán alapult, amit nem lehetett a fentrõl-lefelé\index{lentrõl-felfelé konstrukció = bottom-up construction} 
konstrukcióval redukálni.\index{fentrõl-lefelé konstrukció = top-down construction|)}

\medskip
\noindent \textbf{*Az $n = 5$ eset.}\index{ötváltozós függvények = five-variable functions}
A \ref{tablazat711-5}. táblázatnak megfelelõen az $f(x_1,x_2,x_3,x_4,x_5)$ függvényeknek 616,126 különbözõ osztálya
van. Mivel a számítógépek sebessége elég nagy ahhoz, hogy egy ilyen nagy szám ne legyen elriasztó, a szerzõ 
\cite{Knuth2006a}\angolnevindex{Knuth@\string\Knuth} elhatározta, hogy megvizsgálja $C(f)$-et az összes ötváltozós
\index{ötváltozós = five variables} Boole-függvényre. Egy kissé a jó szerencsének is köszönhetõ, hogy teljes eredményt lehetett
elérni, ami a \ref{tablazat712-2}. táblázat statisztikai adataihoz vezetett.
\begin{table}[2. Táblázat]
\caption{\label{tablazat712-2}}
\centerline{ADOTT BONYOLULTSÁGÚ ÖTVÁLTOZÓS FÜGGVÉNYEK SZÁMA}
\vspace{4mm}
\centering
          \begin{tabular}{crrrrrrrr}
          \hline
\small{$C(f)$}&\omit\ \small{Oszt.}\ &\omit\ \small{Függ.}\ & \small{$L(f)$}&\omit\ \small{Oszt.}\
&\omit\ \small{Függ.}\ & \small{$D(f)$}&\omit\ \small{Oszt.}\ &\omit\ \small{Függ.}\\
%\noalign{\vskip2pt}
0&2&12&0&2&12&0&2&12\\
1&2&100&1&2&100&1&2&100\\
2&5&1140&2&5&1140&2&17&5350\\
3&20&11570&3&20&11570&3&1789&6702242\\
\small{4}&\small{93}&\small{109826}&\small{4}&\small{93}&\small{109826}&\small{4}&\small{614316}&\small{4288259592}\\
5&389&995240&5&366&936440&5&0&0\\
6&1988&8430800&6&1730&7236880&6&0&0\\
7&11382&63401728&7&8782&47739088&7&0&0\\
8&60713&383877392&8&40297&250674320&8&0&0\\
\small{9}&\small{221541}&\small{1519125536}&\small{9}&\small{141422}&\small{955812256}&\small{9}&\small{0}&\small{0}\\
\small{10}&\small{293455}&\small{2123645248}&\small{10}&\small{273277}&\small{1945383936}&\small{10}&\small{0}&\small{0}\\
\small{11}&\small{26535}&\small{195366784}&\small{11}&\small{145707}&\small{1055912608}&\small{11}&\small{0}&\small{0}\\
\small{12}&\small{1}&\small{1920}&\small{12}&\small{4423}&\small{31149120}&\small{12}&\small{0}&\small{0}\\
\hline
\end{tabular}
\end{table}


Ezekhez a számításokhoz az L algoritmust és változatait kellett úgy módosítani, hogy az osztály reprezentánsaival foglalkozzanak 
a $2^{31}$  elemû összes normalizált igazságtábla halmaza helyett. A 7.2.1.2--20. gyakorlat módszerével könnyû egy osztály minden
függvényét elõállítani, sõt ezerszeres gyorsítást érhetünk el, ha annak legalább egy elemét ismerjük.  Kiemelnénk a lentrõl-felfelé 
módszert, ami lehetõvé tette annak megmutatását, hogy $f(x_1\wedge x_2,x_1\vee x_2,x_3,x_4,x_5)$ költsége $\le r$, ha  $C(f)=r-2$.
A 10 költségû osztályok megtalálása után a lentrõl-felfelé és a fentrõl-lefelé módszerek segítségével sikerült minden esetben
megtalálni (hét függvényosztály kivételével) azokat a láncokat, amelyek hossza $\le11$. A számítás idõrabló részében körülbelül 53
millió speciális láncot generáltunk, ahol $n=5$ és $r=11$. E láncok mindegyike $5^{11}=48{,}828{,}125$ függvényt jelent.
Remélhetõleg ezek közül egyesek a hét megmaradó különös osztályba tartoznak. Azonban csak hat olyan osztályt találtunk meg, amelyre
11 lépéses megoldások vannak. Az egyedüli hátramaradott, amelynek az igazságtáblája hexadecimális jelölésben \texttt{169ae443}, 
\index{hexadecimális igazságtála = hexadecimal truth table} az egyetlen olyan osztály, amelyre $C(f)=12$ és $L(f)=12$.

\begin{figure}[!t]
\epsfbox{\figdir/ch7a.720} \epsfbox{\figdir/ch7a.721}\quad \epsfbox{\figdir/ch7a.722} \\
\epsfbox{\figdir/ch7a.723} \epsfbox{\figdir/ch7a.724}\quad \epsfbox{\figdir/ch7a.725} \\
\epsfbox{\figdir/ch7a.726} \epsfbox{\figdir/ch7a.727}\quad \epsfbox{\figdir/ch7a.728} \quad \epsfbox{\figdir/ch7a.730}\\
\epsfbox{\figdir/ch7a.729} \epsfbox{\figdir/ch7a.731}\quad \epsfbox{\figdir/ch7a.732} \\
\epsfbox{\figdir/ch7a.733} \epsfbox{\figdir/ch7a.734}\quad \epsfbox{\figdir/ch7a.735} \\
\caption{Minimális költségû Boole-láncok öt változó szimmetrikus függvényére.\label{abra712-10}}
\end{figure}

A szimmetrikus függvényekre kapott konstrukciók a \ref{abra712-10}. ábrán láthatók. Ezek közül egyesek meglepõen szépek, egyesek
csodálatosan egyszerûek és mások egyszerûen meglepõek. (Nézzük például az $S_{2,3}(x_1,x_2,x_3,x_4,x_5)$ 8-lépéses kiszámítását
vagy az $S_{2,3,4}$ elegáns formuláját, vagy a nem monoton\index{monoton = monotonic} láncokat $S_{4,5}$ és $S_{3,4,5}$-re.)
A \ref{tablazat712-2}. táblázat azt is mutatja, hogy minden 5 változós függvény mélysége $\le 4$, de a \ref{abra712-10}. ábrán 
nincs kísérlet sem a mélység minimalizálására. Elõfordul, hogy ezeket a szimmetrikus függvényeket ki lehet értékelni minimális
memóriával \index{minimális memória = minimum memory} költségnövelés nélkül. De erre a tényre nem ismert egyszerû bizonyítás.
\index{optimális Boole kiértékelés = optimum Boolean evaluation|)}

\medskip
\noindent \textbf{*Többszörös kimenetek.} Gyakran akarunk\index{többszörös kimenet = multiple output|(}
 több különbözõ $f_1(x_1,\ldots,x_n)$, \dots, $f_m(x_1,\allowbreak \ldots,x_n)$
Boole-függvényt egyszerre kiértékelni az $x_1$, \dots,~$x_n$-re megadott, közös bemeneti értékek mellett. Más szóval gyakran 
akarunk kiértékelni valamely $y=f(x)$ több bites függvényt, ahol $y=f_1\ldots f_m$ egy $m$ hosszúságú bináris 
vektor.\index{vektor =  vector} Kis szerencsével az egyik $f_j(x_1,\ldots,x_n)$ komponens kiszámításához szükséges munka 
elvégezhetõ azokkal a mûveletekkel, amelyek egy másik $f_k(x_1,\ldots,x_n)$ komponens kiértékeléséhez szükségesek.

Legyen $C(f)=C(f_1\ldots f_m)$  annak a legrövidebb Boole-láncnak a hossza, ami kiszámítja az összes nemtriviális $f_j$
függvényt. Pontosabban, az $(x_{n+1},\ldots,x_{n+r})$ láncnak teljesítenie kell $1\le j\le m$-re a következõt; vagy
$f_j(x_1,\ldots,x_n)=x_{l(j)}$ vagy $f_j(x_1,\ldots,x_n)=\bar x_{l(j)}$, valamilyen $l(j)$ és $0\le l(j)\le n+r$-re, ahol
$x_0=0$. Nyilván $C(f)\le C(f_1)+\cdots+C(f_m)$, de ennél több is igaz.


 Például tegyük fel, hogy  ki akarjuk kiszámítani $z_1$, $z_0$-nak a (\ref{keplet712-21})-ben definiált  függvényét.
\begin{equation}\advance\abovedisplayskip 0ptminus2pt 
  \advance\belowdisplayskip 0ptminus2pt 
(z_1z_0)_2\;=\;x_1+x_2+x_3\koz, \label{keplet712-21}
\end{equation}

Ez három Boole-változó összege binárisan ábrázolva. Ekkor
\begin{equation}\advance\abovedisplayskip 0ptminus2pt 
  \advance\belowdisplayskip 0ptminus2pt 
z_1\;=\;\langle x_1x_2x_3\rangle\qquad\hbox{és}\qquad
  z_0\;=\;x_1\xor x_2\xor x_3,\label{keplet712-22}
\end{equation}

$C(z_1)=4$ and $C(z_0)=2$ az egyes költségek. Világos, hogy a $C(z_1z_0)$ együttes költség legfeljebb 5, mivel $x_1\xor x_2$ 
megfelelõ elsõ lépés bármelyik $z_j$ bit kiértékeléséhez: 
\begin{equation}\begin{split}
&x_4=x_1\xor x_2,\quad z_0=x_5=x_3\xor x_4\koz;\cr
&x_6=x_3\wedge
x_4,\quad x_7=x_1\wedge x_2,\quad
 z_1=x_8=x_6\vee x_7\koz.
 \end{split}
 \label{keplet712-23}
 \end{equation}

Az összes lehetõség kipróbálása mutatja, hogy $C(z_1z_0)>4$ és így $C(z_1z_0)=5$. A (\ref{keplet712-21}) áramkört a 
villamosmérnökök\index{mérnök = engineer} \textit{teljes összeadónak} nevezik, mivel $n$ ilyen blokkot kapcsolnak össze két 
$n$-bites szám összeadásához. A (\ref{keplet712-22}) speciális esete, amikor $x_3=0$, szintén fontos. Ebbõl egyszerûen 
\begin{equation}
z_1\;=\;x_1\wedge x_2\qquad\hbox{és}\qquad z_0\;=\;x_1\xor x_2
\label{keplet712-24}
\end{equation}
lesz. Ennek 2 a bonyolultsága. A mérnökök \idez{fél összeadónak}\index{fél összeadó = half adder}
hívják annak ellenére, hogy egy teljes összeadó költsége több, mint két fél összeadó költségének összege.


A\index{bináris összeadás = binary addition}
\begin{equation}
\vcenter{\halign{\hfil$#$&$\hfil#_{n-1}\ldots{}$&
                            $\hfil#_1$&
                            $\hfil#_0)_2$\cr
(&x&x&x\cr (&y&y&y\cr \noalign{\vskip-.5\baselineskip}
\multispan4\hrulefill\cr \noalign{\vskip-.25\baselineskip}
(z_n&z&z&z\cr}}\label{keplet712-25}
\end{equation} 
bináris összeadás általános feladata, hogy a $2n$ darab bemenõ $(x_{n-1}\ldots x_1x_0y_{n-1}\ldots y_1y_0)$ Boole-értékbõl 
kiszámítsa az $n+1$ $(z_n\ldots z_1z_0)$ kimenõ Boole-értéket. Erre megoldást adnak a
\begin{equation}
c_{j+1}\;=\;\langle x_jy_jc_j\rangle,\qquad
  z_j\;=\;x_j\xor y_j\xor c_j,
\qquad
0\le j<n \hbox{-re}\koz,\label{keplet712-26}
\end{equation}
formulák, ahol a $c_j$-k az \idez{átvitel bitek} \index{átvitel bit = carry bit} és $c_0=0$, $z_n=c_n$. Ezért $c_1$ és $z_0$
kiszámítására fél összeadót használhatunk , ami után $n-1$ teljes összeadó jön a többi $c$-k és $z$-k kiszámítására. Ezek teljes
költsége $5n-3$. Redkin \cite{Redkin1981}\angolnevindex{Redkin, Nyikolaj Petrovics ({\rus Redp1kin, Nikolai0 Petrovich})} 
bizonyította, hogy $5n-3$ lépés ténylegesen szükséges. Ez egy 35 oldalas indukciós bizonyítás, ami a 2.2.2.3.1.2.3.2.4.3(!) 
esettel végzõdik. Ennek az áramkörnek a mélysége  $2n-1,$ ami gyakorlati párhuzamos számításhoz túl 
nagy.\index{párhuzamos számítás = parallel computation} Ezért komoly erõfeszítéseket tesznek olyan összeadó kieszelésére,
amelynek $O(\lg n)$ a mélysége és a költsége is elfogadható. (Lásd a \ref{gyak712-41}--\ref{gyak712-44}. gyakorlatokat.)

Most terjesszük ki (\ref{keplet712-21})-et és próbáljunk egy 
\begin{equation}(z_{\lfloor\lg n\rfloor}\ldots z_1z_0)_2\;=\; x_1+x_2+\cdots+x_n\label{keplet712-27}
\end{equation} 
általános \idez{oldalösszeget} kiszámítani.\index{oldalösszeg = sideways sum}  
Ha $n=2k+1$, akkor felhasználhatunk $k$ teljes összeadót, hogy az összeget
leredukáljuk $(x_1+\cdots+x_n) \mod 2$-re plusz $k$ bit kétszeresére
bitre, mivel minden teljes összeadó 2-vel csökkenti az 1-súlyok
számát. Például, ha $n=9$ és $k=4$, akkor a számítás:
\begin{equation*}
\begin{split}x_{10}&=x_1\xor x_2\xor x_3,\cr y_1&=\langle
x_1x_2x_3\rangle,\cr\end{split}\quad
\begin{split}x_{11}&=x_4\xor x_5\xor x_6,\cr y_2&=\langle
x_4x_5x_6\rangle,\cr\end{split}\quad
\begin{split}x_{12}&=x_7\xor x_8\xor x_9,\cr y_3&=\langle
x_7x_8x_9\rangle,\cr\end{split}\quad
\begin{split}x_{13}&=x_{10}\xor x_{11}\xor x_{12}\koz,\cr
y_4&=\langle
x_{10}x_{11}x_{12}\rangle\koz\cr
\end{split}
\end{equation*} 
Ekkor azt kapjuk, hogy $x_1+\cdots+x_9=x_{13}+2(y_1+y_2+y_3+y_4)$. Ha $n=2k$ páros, akkor hasonló egyszerûsítést alkalmazunk, 
de a végére fél összeadó kerül. A 2 súlyú biteket ugyanígy lehet összegezni. Igy a
következõ rekurziót kapjuk \index{bináris rekurzió = binary recurrence}
\begin{equation}s(n)\;=\;5\lfloor n/2\rfloor-3\hbox{[$n$ even]}+s(\lfloor n/2\rfloor),
\qquad s(0)=0,\label{keplet712-28}
\end{equation}
a teljes $z_{\lfloor\lg n\rfloor} \ldots z_1z_0$ kiszámításához szükséges kapuk számára. (A \ref{gyak712-30}. gyakorlatban
$s(n)$-re egy zárt formulát találunk.) Azt kapjuk, hogy $s(n)<5n$ és az 
\begin{equation*}\openup1pt\vcenter{\halign{$\hfil#=\,$&&\
\hfil#\hfil\ \cr
n\phantom)&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20 \cr
s(n)&0&2&5&9&12&17&20&26&29&34&37&44&47&52&55&63&66&71&74&81
\cr}}\kern-1em
\end{equation*}
kezdeti értékek azt mutatják, hogy a módszer kis $n$-ekre egészen hatékony. Például, ha $n=5$, az eredmény
\begin{equation}\label{keplet712-29}
\epsfbox{\figdir/v4a.130}\koz,
\end{equation} 
ami a $z_2=S_{4,5}(x_1,\ldots,x_5)$, $z_1=S_{2,3}(x_1,\ldots,x_5)$, $z_0=S_{1,3,5}(x_1,\ldots,x_5)$ három különbözõ szimmetrikus 
függvényt pontosan 12 lépésben számítja ki. \index{szimmetrikus függvény = symmetric function} A \ref{abra712-10}. ábrának 
megfelelõen az $S_{4,5}$ 10-lépéses kiszámítása optimális. Ugyanígy az $S_{4,5}$  4-lépéses kiszámítása is. Ezenkívül, bár
$C(S_{2,3})=8$, az $S_{2,3}$-at itt olyan ügyes 10-lépéses módon adjuk meg, ami minden kaput megosztva használ, $S_{4,5}$-bõl is
egyet.

Megjegyezzük, hogy ezután \textit{minden} szimmetrikus függvény hatékonyan kiszámítható, mivel minden $\{x_1,\ldots,x_n\}$ változós 
szimmetrikus függvény egy $z_{\lfloor\lg n\rfloor}\ldots z_1z_0$ változós Boole-függvény. Tudjuk, hogy minden négyváltozós 
Boole-függvény összetettsége $\le 7$; emiatt bármelyik $S_{k_1,\ldots,k_t}(x_1,\ldots,x_{15})$ szimmetrikus függvény költsége 
legfeljebb $s(15)+7=62$. Ami meglepõ: kis változószám esetén az $n$-változós szimmetrikus függvények kiértékelése nagyon nehéz, 
de $n\ge 10$-re ugyanez a feladat a legkönnyebbek közé tartozik.
\goodbreak
Szimmetrikus függvények \textit{halmazait} szintén ki lehet
hatékonyan számolni. Ha mondjuk egyetlen Boole-lánccal
akarjuk kiértékelni az $n+1$ darab $S_k(x_1,\ldots,x_n)$  
szimmetrikus függvényt $0\le k\le n$-re, akkor egyszerûen a
$z_0$, $z_1$, \dots,~$z_{\lfloor\lg n\rfloor}$ változók
elsõ $n+1$ \textit{mintermjét} \index{minterm = minterm} kell
kiértékelni. Például, ha $n=5$, akkor az összes $S_k$ függvényt
megadó mintermek a következõk: $S_0=\bar z_0\wedge\bar z_1\wedge\bar
z_2$, $S_1=\bar z_0\wedge\bar z_1\wedge z_2$, \dots,
$S_5=z_0\wedge\bar z_1\wedge z_2$.

Milyen nehéz $n$ változóhoz a $2^n$ minterm kiszámítása? Az
elektronikai mérnökök \index{mérnökök = engineers} ezt a függvényt
$n$-bõl-$2^n$-be \textit{bináris dekódolónak} \index{bináris
dekódoló = binary decoder} hívják, mivel az $n$ darab $x_1\ldots
x_n$ bitet egy olyan $2^n$ elemû $d_0d_1\ldots d_{2^n-1}$
sorozatba konvertálja, amelyek közül pontosan egynek lehet 1 az
értéke. Az \idez{oszd meg és uralkodj} elvnek \index{oszd meg és
uralkodj = divide and conquer} megfelelõen elõször az elsõ
$\lceil n/2\rceil$ változón értékeljük ki az összes mintermet,
ugyanígy az összes mintermet az utolsó $\lfloor n/2\rfloor$-n;
ezután $2^n$ \mbox{ÉS} kapuval fejezõdik be a munka. A módszer
költsége $t(n)$, ahol\index{bináris rekurzió = binary recurrence}
\begin{equation}
t(0)=t(1)=0;\quad t(n)=2^n+t(\lceil n/2\rceil)+t(\lfloor
n/2\rfloor) \quad \hbox{$n\ge 2$-re.}
\label{keplet712-30}
\end{equation} 
Igy $t(n)=2^n+O(2^{n/2})$; ez durván egy kapu mintermenként (lásd a \ref{megold712-32}. gyakorlatot). 

\smallskip
Többkimenetû függvények gyakran segítenek nagyméretû egykimenetû függvények megépítésében. Például, láttuk, hogy a 
(\ref{keplet712-27})-beli tömörítõ összeg, szimmetrikus függvények kiszámítását teszi lehetõvé, valamint, hogy a $n$-bõl-$2^n$-be
dekódolónak szintén sok alkalmazása van, attól eltekintve, hogy nagy $n$ esetén $2^n$ már rendkívül nagy. Hasonló eset az
$M_m(x_1,\ldots,x_m;y_0,y_1,\ldots, y_{2^m-1})$ \textit{$2^m$-es multiplexer},
\index{kettõadem@$2^m$-es multiplexer = $2^m$-way multiplexer} ami mint $m$-bites \textit{memória elérési függvény} is ismert; 
bemenetszám $n=m+2^m$ és $(x_1\ldots x_m)_2=k$ estben az $y_k$ értéket adja. Definíció szerint 
\begin{equation}M_m(x_1,\ldots,x_m;y_0,y_1,\ldots,y_{2^m-1})\;=\;
\bigvee_{k=0}^{2^m-1}(d_k\wedge y_k)\koz,\label{keplet712-31}
\end{equation} 
ahol $d_k$ az $m$-bõl-$2^m$ bináris dekódoló $k$-adik kimenete; így a (\ref{keplet712-30})-nak megfelelõen $M_m$-et 
$2^m+(2^m{-}1)+t(m) = 3n + O(\sqrt n)$ kapuval ki lehet értékelni. A \ref{gyak712-39}. gyakorlatban megmutatjuk, hogy a 
költséget mindössze $2n+O(\sqrt n\,)$-re csökkenthetjük. (Lásd a \ref{gyak712-79}. 
gyakorlatot is.)\index{többszörös kimenet = multiple output|)}

\medskip
\noindent \textbf{*Aszimptotikus tények.} Ha a változók száma kicsi, a teljes kipróbálás módszerével sok olyan eset adódik, ahol
a \index{aszimptotikus módszer = asymptotic method|(}\index{alsó korlát = lower bound|(}
Boole-függvényeket meglepõ hatékonysággal ki lehet értékelni.
Ezért természetes azt remélni, hogy több változó jelenléte még
több ügyes kiértékelési lehetõséget biztosít. Az igazság ennek az
ellenkezõje, legalábbis a statisztika részérõl.

\noindent \textbf{S tétel} \cite{Shannon1949}.
\angolnevindex{Shannon, Claude Elwood, Jr. (1916--2001)} 
{\sl Majdnem minden $f(x_1,\ldots,x_n)$ Boole-függvény költsége
meghaladja a $2^n\!/n$-t. Pontosabban szólva, ha a $c(n,r)$
Boole-függvények összetettsége $\le r$, akkor fennáll a következõ:}
\begin{equation}(r-1)!\,c(n,r)\;\le\;2^{2r+1}(n+r-1)^{2r}.
\label{keplet712-32}
\end{equation}

\noindent \textit{Bizonyítás.} Ha egy függvényt ki lehet számítani $r-1$ lépésben, akkor kiszámítható $r$-lépéses lánccal is. 
(Ez az állítás nyilvánvaló, ha $r=1$; egyébként pedig $x_{n+r}=x_{n+r-1}\wedge x_{n+r-1}$ lehet.) Megmutatjuk, hogy nincs
túl sok $r$-lépéses lánc, emiatt nem túl sok olyan különbözõ függvényt lehet kiszámítani, ahol a költség $\le r$.

Legyen $\pi$ az $\{1,\ldots,n+r\}$ egy olyan permutációja, ahol az
$1\mapsto 1$, \dots, $n\mapsto n$, and $n+r\mapsto n+r$
hozzárendelés rögzített; ilyen permutáció $(r-1)!$ van. Tegyük
fel, hogy $(x_{n+1},\ldots,x_{n+r})$ egy olyan Boole-lánc,
amelyben az $x_{n+1}$, \dots, $x_{n+r-1}$ közbensõ lépések
mindegyike legalább egy rész-lépéssorozatban elõfordul. Ekkor az
\begin{equation}
x_i\;=\;x_{j'(i)}\circ'_i x_{k'(i)} \;=\;
x_{j(i\pi)\pi^{-}}\circ_{i\pi}x_{k(i\pi)\pi^{-}}, \qquad n<i\le n+r\hbox{-re}\koz,\label{keplet712-33}
\end{equation}
szabállyal definiált permutált láncok különbözõ $\pi$-kre különbözõek lesznek. (Ha $\pi$ szerint $a\mapsto b$, akkor azt 
írjuk, hogy $b=a\pi$ és $a=b\pi^{-}$.) Például, ha $\pi$ szerint $~5\mapsto6\mapsto 7\mapsto8\mapsto9\mapsto5$, akkor a
(\ref{keplet712-7}) láncból a következõ lesz:
\begin{equation}
\vcenter{\halign{\hfil$x_{#}$&${}#$\hfil\cr
\multispan2{\hfil Eredeti\hfil}\cr \noalign{\vskip2pt} 5&=x_1\xor
x_3,\cr 6&=x_1\xor x_2,\cr 7&=x_3\xor x_4,\cr 8&=x_5\vee x_6,\cr
9&=x_6\xor x_7,\cr 10&=x_8\wedge\bar x_9;\cr
}}\hskip6em\vcenter{\halign{\hfil$x_{#}$&${}#$\hfil\cr
\multispan2{\hfil Permutált\hfil}\cr \noalign{\vskip2pt}
5&=x_1\xor x_2\koz,\cr 6&=x_3\xor x_4\koz,\cr 7&=x_9\vee x_5\koz,\cr
8&=x_5\xor x_6\koz,\cr 9&=x_1\xor x_3\koz,\cr 10&=x_7\wedge\bar x_8\koz.\cr}}\label{keplet712-34}
\end{equation}
Megjegyezzük, hogy a szokásos szabályokkal ellentétben $j'(i)\ge k'(i)$ vagy $j'(i)>i$ vagy $k'(i)>i$ lehetséges. Mindazonáltal a
permutált lánc ugyanazt az $x_{n+r}$ függvényt számítja ki, mint korábban és nincs benne olyan ciklus, ami egy bemenetet indirekt
módon definiálna önmaga termjeként, mivel $x_i$ permutáltja nem más, mint $x_{i\pi}$.

Mint azt korábban is megjegyeztük most a \textit{normalizált}\index{normalizált = normal} Boole-láncokkal
foglalkozunk. Így a $c(n,r)/2$ normalizált Boole-függvény, aminek a költsége $\le r$, olyan  $(r-1)!\,c(n,r)/2$ különbözõ permutált
láncot eredményez, amelyben az $\circ_i$ mûvelet a $\wedge$, $\vee$, $\nimp$, or $\xor$ mûveletek valamelyike. Mivel $\circ_i$
kiválasztására négy lehetõség van, valamint $n<i\le n+r$ esetén, $n{+}r{-}1$-féle választás $j(i)$-re és $k(i)$-re, a lehetséges
láncok száma legfeljebb $4^r(n{+}r{-}1)^{2r}$. A (\ref{keplet712-32}) képletbõl következik és a tétel függõben lévõ
állítását $r=\lfloor 2^n\!/n\rfloor$-re kapjuk meg. 
(Lásd a \ref{gyak712-46}. gyakorlatot.)

\index{felsõ korlát = upper bound++} Másrészt a kétkedõk számára jó
hír, hogy bármely $n$ -változós Boole-függvényt egy kicsivel több,
mint $2^n\!/n$ lépésben ki lehet értékelni, még akkor is, ha a
$\xor$ és a $\leqv$ mûveleteket elhagyjuk, amennyiben azt a
technikát használjuk, amit Shannon \cite{Shannon1949}
\angolnevindex{Shannon, Claude Elwood, Jr. (1916--2001)} ötlete
alapján Lupanov tökéletesített \cite{Lupanov1958}
\angolnevindex{Lupanov, Oleg Boriszovics (1932--2006, {\rus Lupanov, Oleg Borisovich})}.

A Shannon--Lupanov-közelítés hasznos eredményekhez vezetett, még kis $n$-re is.
Tanulmányozzuk ezt egy kis példán keresztül. Tekintsük a
\begin{equation}f(x_1,x_2,x_3,x_4,x_5,x_6)\;=\;
[(x_1x_2x_3x_4x_5x_6)_2 \hbox{prímszám}]\koz,\label{keplet712-35}
\end{equation}
függvényt, ami felismeri az összes 6 bites prímszámot \index{prímszám = prime number}. A függvény 
igazságtáblája\index{igazságtábla = truth table}\index{igazságtábla = truth table} $2^6=64$ bitet tartalmaz, 
amit hagyományosan $4\times 16$-os mátrix alakban adunk meg, majd ezeket a biteket tekintjük az egydimenziós sorozat helyett.

\begin{equation}
\setbox9=\copy\strutbox
\def\0{\copy9}\def\1{\copy9}
\def\\#1{\raise1pt\hbox{$#1$}}
\def\|#1{\ \smash{\raise6pt\hbox{$\Bigr\}$ #1. csoport}}}
\vcenter{\offinterlineskip\halign{\strut\hfil$#{}$&&\kern2pt\hfil#\hfil\kern2pt\cr
x_3=\kern-2pt&0&0&0&0&0&0&0&0&1&1&1&1&1&1&1&1\cr
x_4=\kern-2pt&0&0&0&0&1&1&1&1&0&0&0&0&1&1&1&1\cr
x_5=\kern-2pt&0&0&1&1&0&0&1&1&0&0&1&1&0&0&1&1\cr
x_6=\kern-2pt&0&1&0&1&0&1&0&1&0&1&0&1&0&1&0&1\cr
\noalign{\vskip2pt}
\omit&\multispan{16}{\kern-2pt\hrulefill\kern-2pt}\cr
\omit\hfil\vrule height1pt\kern1.6pt&&&&&&&&
&&&&&&&&&\omit\kern1.6pt\vrule\hfil\cr
\\{x_1x_2=00}\enspace\vrule\kern1.6pt&0&0&1&1&0&1&0&1&0&0&0&1&0&1&0&0&\omit\kern1.6pt\vrule\hfil\cr
\\{x_1x_2=01}\enspace\vrule\kern1.6pt&0&1&0&1&0&0&0&1&0&0&0&0&0&1&0&1&\omit\kern1.6pt\vrule\|1\cr
\\{x_1x_2=10}\enspace\vrule\kern1.6pt&0&0&0&0&0&1&0&0&0&1&0&1&0&0&0&1&\omit\kern1.6pt\vrule\hfil\cr
\\{x_1x_2=11}\enspace\vrule\kern1.6pt&0&0&0&0&0&1&0&0&0&0&0&1&0&1&0&0&\omit\kern1.6pt\vrule\|2\cr
\omit&\multispan{16}{\kern-2pt\hrulefill\kern-2pt}\cr
}}
\label{keplet712-36}
\end{equation}


A sorokat két kettes csoportba osztjuk, a sorok mindegyik csoportjának 16 oszlopa van. amelyek négyféle alaptípushoz 
tartoznak nevezetesen $0\atop 0$, $0\atop 1$, $1\atop 0$, vagy $1\atop 1$. Így a függvény a következõkép fejezhetõ ki:
\begin{equation}
\begin{aligned}
f(x_1,\ldots,x_6)\;=\;\hspace{0.5cm}& 
\bigl(\left[x_1x_2\in\{00\}\right]       &\wedge\;\;& \left[x_3x_4x_5x_6\in\{0010,0101,1011\}\right]\bigr)\\ 
 \vee\;\;&\bigl(\left[x_1x_2\in\{01\}\right]&\wedge\;\; &\left[x_3x_4x_5x_6\in\{0001,1111\}\right]\bigr)\\ 
 \vee\;\;&\bigl([x_1x_2\in\{00,01\}]         &\wedge\;\; &[x_3x_4x_5x_6\in\{0011,0111,1101\}]\bigr)\\
 \vee\;\;&\bigl([x_1x_2\in\{10\}]            &\wedge\;\; &[x_3x_4x_5x_6\in\{1001,1111\}]\bigr)\\
 \vee\;\;&\bigl([x_1x_2\in\{11\}]           &\wedge\;\;&[x_3x_4x_5x_6\in\{1101\}]\bigr)\\
 \vee\;\;&\bigl([x_1x_2\in\{10,11\}]        &\wedge\;\;&[x_3x_4x_5x_6\in\{0101,1011\}]\bigr)\koz.
\end{aligned}\label{keplet712-37}
\end{equation}
(Az elsõ sor a ${1\atop 0}$ típusú 1. csoportnak felel meg, azután jön a ${0\atop1}$ típusú 1. csoport stb.; az utolsó sor a
$1\atop1$ típusú 2. csoportnak felel meg.) A $[x_3x_4x_5x_6\in\{0010,0101,1011\}]$-hez hasonló függvény az
$\{x_3,x_4,x_5,x_6\}$-bõl alkotott három minterm\index{minterm = minterm} VAGY-ja.

Általában az igazságtáblát megadhatjuk $2^k\times 2^{n-k}$ mátrix alakban, ahol a sorokat $l$ csoportra
bontjuk, így minden sorcsoport  $\lfloor 2^k\!/l\rfloor$  sorból áll. Egy $m$ méretû csoportnak $2^m$-féle alaptípusa lesz.
Képezzük a $(g_{it}(x_1,\ldots,x_k)\wedge h_{it}(x_{k+1},\ldots,x_n))$ konjunkciót minden ~$i$-csoportra és
minden nemzéró típusú $t$-re, ahol $g_{it}$ az $\{x_1,\dots,x_k\}$ összes olyan mintermjének az VAGY-ja, 
ahol a csoport soraiban $t$-ben van 1-es, a $h_{it}$ az $\{x_{k+1},\ldots,x_n\}$ összes olyan mintermjének az VAGY-ja 
amelyek az $i$ csoportba tartozó $t$ típusú oszlopokhoz tartoznak. Az összes $(g_{it}\wedge h_{it})$ VAGY-ja megadja az
$f(x_1,\ldots,x_n)$-et.

Ha megválasztottuk a $k$ és az $l$ paramétereket, ahol $1\le k\le n-2$ és $1\le l\le 2^k$, akkor a számítás az $\{x_1,\ldots,x_k\}$
összes mintermjének és $\{x_{k+1},\ldots,x_n\}$ összes mintermjének kiszámításával kezdõdik. Ez $t(k)+t(n-k)$ lépés
(lásd (\ref{keplet712-30})). Ezután $1\le i\le l$-re tekintjük az $i$-edik csoportot, ami az $(x_1,\ldots,x_k)$-nak az
$(i-1)2^k\!/l\le(x_1\ldots x_k)_2<i2^k\!/l$ értékeibõl áll; ez összesen $m_i=\lceil i2^k\!/l\rceil-\lceil(i-1)2^k\!/l\rceil$ sor.
Elõállítjuk az összes $g_{it}$-t a $t\in S_i$-re, ahol $S_i$ e sorok nemüres részhalmazainak $2^{m_i}-1$ elemû családja. Az
elõzõleg kiszámított mintermek diszjunkciójával; vagyis $2^{m_i}-m_i-1$ OR felhasználásával fejezõdik be a feladat.
Ezután elõállítjuk az összes $h_{it}$-t a $t$-típusú oszlopokhoz. Ehhez legfeljebb $2^{n-k}$ VAGY mûvelet szükséges minden $i$
csoportban, mivel egy adott $t$-típusú $h$~függvénybe a mintermek diszjunkciója kerül. Végül kiszámítjuk az $f=\bigvee_{i=1}^{l}
\bigvee_{t\in S_i}(g_{it}\wedge h_{it})$-et. Az ÉS mûveleteket egyetlen VAGY mûvelettel számoljuk be minden
$h_{it}$-be. Így a tejes költség legfeljebb 
\begin{equation}
t(k)+t(n{-}k)+(l{-}1)+\sum_{i=1}^l\bigl((2^{m_i}{-}m_i{-}1)
  +2^{n-k}+(2^{m_i}{-}2)\bigr)\koz;\label{keplet712-38}
\end{equation}
Szeretnénk ezt a felsõ határt minimalizálni $k$ és $l$ alkalmas
megválasztásával. Kis $n$ esetére a \ref{gyak712-52}. gyakorlat foglalkozik a
legjobb választással. Nagy $n$-re egy jó választás valószínûleg
egy közel optimális láncot eredményez a legtöbb függvényre.

\medskip
\noindent \textbf{L tétel.} Jelölje $C(n)$ a legdrágább
$n$ változós Boole-függvény költségét. Ekkor $n\to\infty$ esetén
\begin{equation}
C(n)\;\ge\;{2^n\over n}\Bigl(1+{\lg n\over
n}+O\Bigl({1\over n}\Bigr)\Bigr)\koz; \label{keplet712-39}
\end{equation}

\begin{equation}
C(n)\;\le\;{2^n\over n}\Bigl(1+3{\lg n\over
n}+O\Bigl({1\over n}\Bigr)\Bigr)\koz.
\label{keplet712-40}
\end{equation}
\noindent \textit{Bizonyítás.} A \ref{gyak712-46}. gyakorlat mutatja, hogy a (\ref{keplet712-39}) alsó határ az S tétel 
következménye. Ami a felsõ határt illeti, Lupanov módszere \cite{Lupanov1961} szerint beállítjuk,
\angolnevindex{Lupanov, Oleg Boriszovics  (1932--2006, {\rus Lupanov, Oleg Borisovich})} hogy $k=\lfloor 2\lg n\rfloor$ és
$l=\lceil2^k\!/(n-3\lg n)\rceil$ teljesüljön. Lásd az \ref{gyak712-53}. gyakorlatot.
\quad\slug
\index{aszimptotikus módszer = asymptotic method|(}\index{alsó korlát = lower bound|(}

\medskip
\noindent \textbf{Jó lánc szintetizálása.} Bár a (\ref{keplet712-37}) formula nem adja meg a legjobb módot a 6 bites 
prímszám-felismerõ implementálásához, azonban egy eléggé jó stratégiát sugall. Például nem okvetlenül az $x_1$-et és~$x_2$-t kell
a sorokhoz rendelni. Az \ref{gyak712-51}. gyakorlat mutatja, hogy sokkal jobb láncot eredményez, ha a sorokhoz 
$x_5x_6$-ot, az oszlopokhoz pedig $x_1x_2x_3x_4$-et rendeljük. Általában sok lehetõség van arra, hogy egy igazságtáblát 
$k$ változó és $n-k$ változó szerint particionáljunk.

Ezenkívül a 4 változós függvényekkel kapcsolatos tudásunkat felhasználva javíthatunk (\ref{keplet712-37})-en.
Ugyanis ahhoz, hogy az $[x_3x_4x_5x_6\in\allowbreak\{0010,0101,1011\}]$-hoz hasonló függvényeket kiértékeljük, nincs arra 
szükség, hogy elõször kiszámítsuk  $\{x_3,x_4,x_5,x_6\}$ mintermjeit, amennyiben ismerjük a legjobb módot, vázlatosan megadott 
hasonló függvények kiértékelésére. Másrészt szükség lesz néhány 4 változós függvény szimultán kiértékelésére, ezért a minterm 
ötlet egyáltalán nem olyan rossz. Lehet-e ezen javítani?

Próbáljunk meg 4 változós függvények adott halmazát kiszámító Boole-lánc szintézisére jó módszert keresni. Az $x_3x_4x_5x_6$-nak
az (\ref{keplet712-37})-beli hat függvénye eléggé egyszerû, ezért többet lehet tanulni a napi életbõl választott érdekesebb példákból.

\hangfig{\epsfbox{\figdir/v4a.1266}}
A \textit{hét szegmenses ábrázolás} \index{hét szegmenses ábrázolás = seven-segment display} ma a legelterjedtebb módja az
$(x_1x_2x_3x_4)_2$ négybites számok ábrázolásának a hét jól elhelyezett -- látható vagy nem látható állapotú -- szegmens
segítségével. A szegmensek $(a,b,c,d,e,f,g)$ tradicionális megnevezését itt mutatjuk. A 0-át a körbefutó $(a,b,c,d,e,f)$
szegmensekkel kapjuk, de az `1'-hez csak a $(b,c)$ szegmenseket használjuk. (Az ilyen ábrázolás ötlete Wood nevéhez fûzõdik 
\cite{Wood1910}.\angolnevindex{Wood, Frank W. (1904--1995)} Amúgy Wood eredeti ábrázolása nyolc szegmenst használt, mivel a
`4' ábrázolásához a diagonális vonalra szüksége volt.) A hét szegmenses ábrázolás általában a decimális `0', `1', \dots,~`9'
számjegyekre alkalmas, de a számítógép-kutatók által használt digitális óráknak a hexadecimális számjegyeket is mutatniuk kell.
Így a hét szegmenses logikában megtervezték a tizenhat számjegy ábrázolását,
\begin{equation}\label{keplet712-41}
\epsfbox{\figdir/v4a.1250}\epsfbox{\figdir/v4a.1251}\epsfbox{\figdir/v4a.1252}\epsfbox{\figdir/v4a.1253}\epsfbox{\figdir/v4a.1254}
\epsfbox{\figdir/v4a.1255}\epsfbox{\figdir/v4a.1256}\epsfbox{\figdir/v4a.1257}\epsfbox{\figdir/v4a.1258}\epsfbox{\figdir/v4a.1259}
\epsfbox{\figdir/v4a.1260}\epsfbox{\figdir/v4a.1261}\epsfbox{\figdir/v4a.1262}\epsfbox{\figdir/v4a.1263}\epsfbox{\figdir/v4a.1264}
\epsfbox{\figdir/v4a.1265}\koz,
\end{equation}
ha adottak rendre az $x_1x_2x_3x_4=0000$, 0001, 0010, \dots, 1111 bemenetek.

Más szóval ki kell értékelnünk az alábbi igazságtáblákkal rendelkezõ hét Boole-függvényt:

\begin{equation}
\vcenter{\halign{\hfil$#\;=\;{}$&#\hfil\cr
a&1011 0111 1110 0011\koz,\cr
b&1111 1001 1110 0100\koz,\cr
c&1101 1111 1111 0100\koz,\cr
d&1011 0110 1101 1110\koz,\cr
e&1010 0010 1011 1111\koz,\cr
f&1000 1111 1111 0011\koz,\cr
g&0011 1110 1111 1111\koz.\cr}}\label{keplet712-42}
\end{equation}
Ha külön-külön szeretnénk mindegyik függvényt kiértékelni, akkor néhány eddig tárgyalt módszer alapján belátható, hogy a
következõ minimális költségek adódnak. $C(a)=5$, $C(b)=C(c)=C(d)=6$, $C(e)=C(f)=5$, és $C(g)=4$. A hét függvény
együttes költsége tehát 37. Mi azonban egyetlen Boole-lánccal együttesen akarjuk mindet megadni. Ezek közül a legrövidebb lesz a
leghatékonyabb. Hogyan lehet ezt megtalálni?

Egy valóban optimális lánc megtalálása $\{a,b,c,d,e,f,g\}$-re kiszámítási szempontból megvalósíthatatlannak tûnik. De a korábban
bemutatott \idez{lábnyom} \index{lábnyom = footprint} ötlet alapján jó megoldást lehet találni. Mi nemcsak egy függvényre
tudjuk kiszámítani a minimális költséget, hanem az összes olyan elsõ lépések halmazára is, amelyek hozzásegítenek ehhez a minimális
költséghez egy normalizált láncban. Például az $e$~függvény költsége 5, de csak akkor, ha a kiértékelésnél a következõ
mûveletek valamelyikével kezdünk:
$$x_5=x_1\xor x_4 \qquad\hbox{vagy}\qquad x_5=x_2\wedge\bar x_3
\qquad\hbox{vagy}\qquad x_5=x_2\vee x_3\koz.$$

Szerencsére a kívánt elsõ lépések egyike a hét lábnyom közül négyhez hozzátartozik. A $c$, $d$, $f$, és~$g$ mindegyike
optimálisan kiértékelhetõ az $x_5=x_2\xor x_3$ kezdéssel. Így ez egy természetes választás; ez három lépéssel való csökkenést
jelent; mint tudjuk, az eredeti 37 lépésbõl legfeljebb 33 szükséges a befejezéshez.

Most újraszámolhatjuk a költségeket és a lábnyomokat az összes $2^{16}$ függvényre ugyanúgy, mint az elõbb, beállítva az új~$x_5$
függvény költségét nullára. Eredményként a $c$, $d$, $f$, és $g$ költsége 1-el csökken és a lábnyomok is változnak. Például az $a$
függvény költsége 5, de a lábnyoma $\{x_1\xor x_3,x_2\wedge x_3\}$ helyett $\{x_1\xor x_3,x_1\wedge x_4,\bar x_1\wedge x_4,x_2\wedge
x_3,\bar x_2\wedge x_4, \allowbreak x_2\xor x_4,\allowbreak x_4\wedge x_5, \allowbreak x_4\xor x_5\}$ lett, amikor az
$x_5=x_2\xor x_3$ függvény szabadon elérhetõvé vált.

Tény, hogy $x_6=\bar x_1\wedge x_4$ közös az új lábnyomok közül néggyel, így adódott egy természetes út a folytatásra. Ha mindent
újraszámolunk, úgy hogy nulla költséget adunk mind $x_5$, mind $x_6$-nak, a következõ $x_7= x_3\wedge\bar x_6$ lépés a legújabb
lábnyomok közül ötben közös. Folytatva ezt a \idez{mohó}\index{mohó algoritmusok = greedy algorithms} módszert, nem leszünk 
mindig ilyen szerencsések, de egy mindössze 22 lépéses lánc felbukkan:
\begin{equation}
\begin{split}
x_5&=x_2\xor x_3,\cr x_6&=\bar x_1\wedge x_4,\cr x_7&=x_3\wedge\bar
x_6,\cr x_8&=x_1\xor x_2,\cr x_9&=x_4\xor x_5,\cr x_{10}&=\bar
x_7\wedge x_8,\cr x_{11}&=x_9\xor x_{10},\cr \strut
x_{12}&=x_5\wedge x_{11}\koz.\cr
\end{split}\qquad
\begin{split} x_{13}&=x_1\xor x_7,\cr
x_{14}&=x_5\xor x_6,\cr x_{15}&=x_7\vee x_{12},\cr x_{16}&=x_1\vee
x_5,\cr x_{17}&=x_5\vee x_6,\cr x_{18}&=x_9\wedge x_{10},\cr
x_{19}&=x_3\wedge x_9,\cr \strut\cr
\end{split}\qquad
\begin{split} \bar a=x_{20}&=x_{14}\wedge\bar x_{19}\koz,\cr
\bar b=x_{21}&=x_7\xor x_{12}\koz,\cr \bar c=x_{22}&=\bar x_8\wedge
x_{15}\koz,\cr \bar d=x_{23}&=x_9\wedge\bar x_{13}\koz,\cr \bar
e=x_{24}&=x_6\vee x_{18}\koz,\cr \bar f=x_{25}&=\bar x_8\wedge
x_{17}\koz,\cr g=x_{26}&=x_7\vee x_{16}\koz.\cr \strut\cr
\end{split}\label{keplet712-43}
\end{equation}
(Ez egy \textit{normalizált}\index{normalizált = normal} lánc, így az $\{\bar a,\bar b,\bar c,\bar d,\bar e,\bar f, g\}$
normalizáltjait tartalmazza a $\{a,b,c, \allowbreak d,e,f,g\}$ helyett) Egyszerû cserékkel elõállhatnak nemnormalizált függvények
költségváltozás nélkül.

\medskip
\noindent \textbf{Parciális függvények.}\index{parciális függvény = partial function|(} A gyakorlatban egy
Boole-függvény kimeneti értékét sokszor csak bizonyos $x_1\ldots x_n$ bemenetekre definiálják, a többi esetben a kimenetek nem
fontosak. Tudhatjuk például, hogy bizonyos bemeneti kombinációk soha sem fordulhatnak elõ. Az ilyen esetekben az igazságtábla
\index{igazságtábla = truth table} megfelelõ pozíciójába a 0 vagy 1 helyett egy csillagot teszünk.

A hét szegmenses ábrázolás \index{hét szegmenses ábrázolás = seven-segment display} ad egy ilyen esetet, mivel a legtöbb
alkalmazás csak azt a tíz binárisan kódolt decimális számot használja inputként, amelyekre $(x_1x_2x_3x_4)_2\le 9$. Azzal nem
foglalkozunk, hogy mely szegmensek láthatók a többi hat esetben. Így a (\ref{keplet712-42})-ben lévõ igazságtábla helyett a
következõt használjuk:
\begin{equation}\catcode`\*=\active
\def*{\hbox to.5em{\hss$\ast$\hss}}
\vcenter{\halign{\hfil$#\;=\;{}$&#\hfil\cr
a&1011 0111 11** ****\koz,\cr
b&1111 1001 11** ****\koz,\cr
c&1101 1111 11** ****\koz,\cr
d&1011 0110 11** ****\koz,\cr
e&1010 0010 10** ****\koz,\cr
f&1000 111* 11** ****\koz,\cr
g&0011 1110 11** ****\koz.\cr
}}\label{keplet712-44}
\end{equation}

($f$-ben az $x_1x_2x_3x_4=0111$ pozíción azért van csillag, mivel a `7'-et meg lehet jeleníteni
$\epsfysize=12pt\epsfbox{\figdir/v4a.1267}$ vagy $\epsfysize=12pt\epsfbox{\figdir/v4a.1257}$
alakban is.) A fejezet írása idején még mindkét változat szinte egyenlõ arányban használatos volt. A 
$\epsfysize=12pt\epsfbox{\figdir/v4a.1256}$ és a $\epsfysize=12pt\epsfbox{\figdir/v4a.1259}$
csonkított formája csak régebben volt használatos, de ezek szerencsére már eltûntek.

A csillagokat az igazságtáblában úgy tekintjük mint \textit{érdektelen jeleket} -- 
(\idez{don't-cares}\index{érdektelen jel = don't-care}, ami egy olyan különös kifejezés, amit a 
villamosmérnökök\index{villamosmérnök = electrical engineer} találtak ki. 
A \ref{tablazat712-3}. táblázat mutatja, hogy a kimenetek önkényes megválasztásának szabadsága elõnyös. Például 
${16\choose 3}2^{13}=4{,}587{,}520$ olyan igazságtábla létezik, amely 3 \idez{don't care}-t tartalmaz és ezek 69\%-ának a költsége 
4 vagy kisebb, míg a csillagmentes igazságtáblák 21\%-a tesz lehetõvé ilyen gazdaságosságot. Másrészrõl az érdektelen jelek nem 
segítenek annyit, mint remélnénk; a \ref{gyak712-63}. gyakorlat mutatja, hogy egy tetszõleges függvény, amelynél 
az igazságtábla 30\%-a csillag, a teljesen specifikált függvény költségét körülbelül 30\%-kal enyhíti.

\smallskip
Mi az a legrövidebb Boole-lánc, ami a (\ref{keplet712-44})-ben lévõ hét parciálisan definiált függvényt kiértékeli? A mi mohó-
lábnyom \index{mohó- lábnyom = greedy-footprint}módszerünk könnyen adaptálható a \idez{don't care}-k jelenlétére, mivel OR-ral 
összekapcsolhajuk annak a $2^d$ db. függvénynek a lábnyomát, amelyek a $d$ csillaggal összeegyeztethetõk. Az egyes függvények
külön-külön kiértékelésének kezdeti költségei $C(a)=3$, $C(b)=C(c)=2$, $C(d)=5$, $C(e)=2$, $C(f)=3$, $C(g)=4$-ra
redukálódnak, ez összességében 21 a korábbi 31 helyett. A $g$ függvény nem lett olcsóbb, de a lábnyoma nagyobb lett. Ha úgy
járunk el mint korábban, miközben a \idez{don't care}-eket elõnyben részesítjük, egy olyan alkalmas 13--hosszúságú, láncot találunk,
amelyben kimenetenként(!) kevesebb, mint két mûvelet szerepel.
\begin{equation}\openup-.9\jot\begin{split}
x_5&=x_1\xor x_2,\cr x_6&=x_3\wedge\bar x_4,\cr x_7&=x_1\xor
x_3,\cr x_8&=x_2\wedge\bar x_6,\cr \strut x_9&=x_3\vee x_4\koz,\cr
\end{split}\qquad
\begin{split} \bar e=x_{10}&=x_4\vee x_8,\cr g=x_{11}&=x_7\xor
x_8,\cr x_{12}&=x_4\xor x_{11},\cr \bar d=x_{13}&=x_{10}\wedge
x_{12},\cr \strut \bar a=x_{14}&=\bar x_3\wedge x_{13}\koz,\cr
\end{split}\qquad
\begin{split} \bar b=x_{15}&=x_2\wedge\bar x_{13}\koz,\cr \bar
c=x_{16}&=\bar x_2\wedge x_6,\cr \bar f=x_{17}&=\bar x_5\wedge
x_9\koz.\cr \strut\cr \strut\cr
\end{split}\label{keplet712-45}\end{equation}


\begin{table}[3. Táblázat]
\caption{\label{tablazat712-3}}
\centerline{$d$ ÉRDEKTELEN JELET TARTALMAZÓ,}
\centerline{$c$ KÖLTSÉGÛ 4 VÁLTOZÓS FÜGGVÉNYEK SZÁMA}
\vspace{4mm}
\centering
         \begin{tabular}{lrrrrrrrr}
         \hline
         \noalign{\vskip4pt}

\omit&$c=0$&$c=1$&$c=2$&$c=3$&$c=4$&$c=5$&$c=6$&$c=7$\\
\noalign{\vskip4pt}

$d=0$&10&60&456&2474&10624&24184&25008&2720\\
$d=1$&160&960&7296&35040&131904&227296&119072&2560\\
$d=2$&1200&7200&52736&221840&700512&816448&166144\\
$d=3$&5600&33600&228992&831232&2045952&1381952&60192\\
$d=4$&18200&108816&666528&2034408&3505344&1118128&3296\\
$d=5$&43680&257472&1367776&3351488&3491648&433568&32\\
$d=6$&80080&455616&2015072&3648608&1914800&86016\\
$d=7$&114400&606944&2115648&2474688&533568&12032\\
$d=8$&128660&604756&1528808&960080&71520&896\\
$d=9$&114080&440960&707488&197632&4160\\
$d=10$&78960&224144&189248&20160\\ 
$d=11$&41440&72064&25472&800\\
$d=12$&15480&12360&1280\\ 
$d=13$&3680&800\\ 
$d=14$&480\\ 
$d=15$&32\\ 
$d=16$&1\\
\noalign{\vskip4pt}
\hline
\end{tabular}
\end{table}

\begingroup\def\O/{{\eightss O}}\def\X/{{\eightss X}}
\font\tiny=cmssq8 at 3.9pt
\newdimen\uu \uu=.2pt
\def\cell#1#2#3{\vrule height3.1pt depth.7pt width0pt
            \hbox to3.8pt{\hss\tiny\ifx#1.\else
              \kern#2\uu\raise#3\uu\hbox{#1}\fi\hss}}
\def\\#1#2#3#4#5#6#7#8#9{\vcenter to12pt{\offinterlineskip
 \halign{\cell##&\vrule width.3pt\cell##&\vrule width.3pt\cell##\cr
 {#1}{-1}1&{#2}01&{#3}11\cr
 \noalign{\hrule height.3pt}
 {#4}{-1}0&{#5}00&{#6}10\cr
 \noalign{\hrule height.3pt}
 {#7}{-1}{-1}&{#8}0{-1}&{#9}1{-1}\cr}\kern0pt}}


\medskip
\noindent \textbf{Amõba játék.}\index{amõba (tic-tac-toe) játék = tic-tac-toe game|(}
\index{amõba-szerû játék = noughts and crosses, \see tic-tac-toe}\index{amõba = tic-tac-toe} 
Vegyünk most egy népszerû gyermekjátékon alapuló, kissé bõvebb problémát. Két játékos egy
$3\times 3$ rácsot akar kitölteni. Az egyik egy \X/-et, a másik egy \O/-t ír felváltva a rácsba. Addig folytatódik a játék, amíg vagy
három \X/ vagy három \O/ megjelenik egy vonalban (Ebben az esetben az a játékos gyõz), vagy mind a kilenc cella ki van töltve és
nincs gyõztes (ebben az esetben \idez{ablakban a pénz}, azaz döntetlen az eredmény). Például egy játékmenet:
\begin{equation}
\\......... \qquad
\\.X....... \qquad
\\.X......O \qquad
\\.XX.....O \qquad
\\OXX.....O \qquad
\\OXX.X...O \qquad
\\OXX.X.O.O \qquad
\\OXX.X.OXO\koz;\label{keplet712-46}
\end{equation}

Az \X/ gyõzött. Célunk olyan, az amõba játékot optimálisan játszó gép tervezése, amely minden olyan pozícióban, ahonnan
lehetséges a gyõzelem elérése, gyõztes lépést lép, és amely nem lép vesztes lépést olyan pozícióban, ahol a vereség elkerülhetõ.

Pontosabban, az aktuális pozíció celláit megvilágító lámpák vezérlésére a 18 darab $x_1$, \dots,~$x_9$, $o_1$,~\dots,~$o_9$
Boole-változó szolgál. A cellák $\\123456789$ számozása megegyezik a telefon billentyûzetével. A $j$ cella egy \X/-et
jelenít meg, ha $x_j=1$ és  \O/-t, ha $o_j=1$, illetve\angolnevindex{Keister, William (1907--1997)} sötét marad, ha 
$x_j=o_j=0$.\footnote{E beállítás alapja egy a kora 1950-es években Csikágóban a Museum of Science and 
Industry-ban\index{Tudományos és Ipari Múzeum = Museum of Science and Industry} megrendezett kiállítás volt,
ahol a szerzõ elõször lett bevezetve a kapcsoló áramkörök csodáiba. A csikágói gép, amit nagyjából 1940-ben tervezett 
Keister a Bell Telephone Laboratories-ban\index{Bell Telefon Laboratórium = Bell Telephone Laboratories} 
\cite{Keister1940}\angolnevindex{Keister, William (1907--1997)}, megengedte, hogy elsõként lépjek.
% see Claude Shannon, J Franklin Inst 260 (1955) p450 for ref to Keister 
Gyorsan megértettem, hogy a gépet nem lehet megverni. Ekkor elhatároztam, hogy a lehetõ legostobább lépéseket teszem meg, 
abban a reményben, hogy a tervezõ nem készült fel ilyen bizarr viselkedésre. Lényegében elértem, hogy a gép olyan
pozícióba kerüljön, ahonnan két gyõztes lépést tehetett. A gép mindkettõt végrehajtotta. Kétszer lépni a szabályok kirívó
megsértése, ezért ez számomra erkölcsi gyõzelem volt még akkor is, ha a gép azt közölte, hogy vesztettem.} 
Az sohasem állhat elõ, hogy $x_j=o_j=1$, mivel ekkor \setbox0=\hbox{\O/}`\rlap{\hbox to\wd0{\hss\X/\hss}}\box0'-t kellene kijelezni. 
Feltesszük, hogy az $x_1\ldots x_9o_1\ldots o_9$ változók beállítása egy legális állapotot jelent, amelyben nincs nyertes. 
A számítógép az \X/-et használja és a számítógép léphet. Erre a célra definiáljunk kilenc $y_1$, \dots,~$y_9$ függvényt, ahol 
$y_j$ jelentése \idez{változtasd} $x_j$ értékét 0-ról 1-re. Ha az aktuális pozíció \idez{döntetlen}, akkor kötelezõ az 
$y_1=\cdots=y_9=0$ beállítás, mert egyébként pontosan egy $y_j$ értéknek kell 1-nek lennie, de $y_j$ értéke csak akkor lehet 1, 
ha $x_j=o_j=0$.

{\quoteformat
Elkezdtem egy játék vizsgálatát, a neve \idez{tit-tat-to} \ldots
célom kideríteni, hogy milyen kombinációszám lenne szükséges 
a lépések és a helyzetek összes lehetséges változatára. 
Azt gondoltam, hogy ennek viszonylag nincs jelentõsége. 
\ldots Azonban egy szokatlan nehézség merült fel. 
Ha az automatának lépni kell, elõfordulhat, hogy 
két különbözõ lépés adódik és mindegyik egyformán biztosítja neki a gyõzelmet. 
\ldots Hacsak valamilyen óvintézkedést nem vezetünk be, 
a gép megkísérelhet két egymásnak ellentmondó mozgást.

\author CHARLES BABBAGE, \textsl{Passages from the Life of a Philosopher} 

(1864) \cite[34. fejezet, 154--155. oldal]{Babbage1864}
\angolnevindex{Babbage, Charles (1791--1871)}
% near the end of chapter 34; pages 154--155 in the Morrisons' edition
}

\bigskip
Tizennyolc változóval a mi kilenc $y_j$ függvényünk igazságtáblája\index{igazságtábla = truth table} $2^{18}=262{,}144$ méretû.
Elõfordul, hogy $x_1\ldots x_9o_1\ldots o_9$-ra csak 4520 legális bemenet lehetséges, így aztán ezeknek az igazságtábláknak 98.3\%-a 
érdektelen jelekkel lesz kitöltve. Mivel a 4520 kellemetlenül nagy az értelmezõ Boole-lánc intuitív megértéséhez és
megtervezéséhez. A 7.1.4. pontban a Boole-függvények reprezentálására olyan alternatív módokat mutatunk, amelyekkel
gyakran lehetséges változók százaival foglalkozni, még akkor is, ha a kezelendõ igazságtábla lehetetlenül nagy \cite{Babbage1889}.
\angolnevindex{Babbage, Henry Provost}


A legtöbb 18 változós függvényhez több, mint $2^{18}\!/18$ kapura van szükség, de reménykedjünk, hogy tudjuk ezt jobban is csinálni.
A amõba játékban egy megfelelõ lépés megtételére közvetlenül adódik egy kézenfekvõ stratégia, néhány könnyen felismerhetõ
feltétel formájában:

\medskip
\begin{tabular}{lll}%\openup.5pt\halign{\hskip25pt plus1fil$#$&\ \ #\hfil\cr
$w_j$,&\X/ beírása a &$j$ cellába gyõzelem, egy \X/-eket tartalmazó sor befejezése miatt\koz;\\

$b_j$,&\O/ beírása a &$j$ cellába veszteség lenne, egy \O/-ás sor befejezése miatt\koz;\\

$f_j$,&\X/ beírása a &$j$ cellába az \X/ számára két esélyt ad a gyõzelemre\koz;\\

$d_j$,&\O/ beírása a &$j$ cellába a \O/ számára két esélyt adna a gyõzelemre\koz.\\
\end{tabular}

\medskip
\noindent Például a (\ref{keplet712-46})-ban \X/ középre lép, mert a \O/-t blokkolnia kell. Ezért ez egy
$b_5$-típusú és egyben $f_5$-típusú lépés, ami gyõzelmet biztosít a következõ lépésben.

Legyenek $L=\{\{1,2,3\},\{4,5,6\},\{7,8,9\},\{1,4,7\},\{2,5,8\},\{3,6,9\}, \{1,5,9\},\{3,5,7\}\}$ a gyõztes sorok. Ekkor
\begin{align}
  m_j&=\bar x_j\,\wedge\,\bar o_j; \vphantom{\bigvee}
 &\hbox{[lépés a $j$-edik cellába legális]}\label{keplet712-47}\\
  w_j&=\textstyle m_j\,\wedge\,\bigvee_{\{i,j,k\}\in L}(x_i\wedge x_k);
 &\hbox{[lépés a $j$-edik cellába gyõzelem]}\label{keplet712-48}\\
 b_j&=\textstyle m_j\,\wedge\,\bigvee_{\{i,j,k\}\in L}(o_i\wedge o_k);
 &\hbox{[lépés a $j$-edik cellába blokkol]}\label{keplet712-49}\\
 f_j&=m_j\,\wedge\,S_2\bigl(\{\alpha_{ik}\mid\{i,j,k\}\in L\}\bigr);
 &\hbox{[lépés a $j$-edik cellába közrefog]}\label{keplet712-50}\\
d_j&=m_j\,\wedge\,S_2\bigl(\{\beta_{ik}\mid\{i,j,k\}\in L\}\bigr);
 &\hbox{[moving in cell $j$ védekezik]}\label{keplet712-51}
\end{align}
itt $\alpha_{ik}$ és $\beta_{ik}$ egy\index{szimmetrikus függvény = symmetric function}
\X/-et vagy \O/-át jelöl egy blank-kel együtt, nevezetesen
\begin{equation}
\alpha_{ik}=(x_i{\wedge}m_k)\vee(m_i{\wedge}x_k),\qquad
   \beta_{ik}=(o_i{\wedge}m_k)\vee(m_i{\wedge}o_k)\koz.\label{keplet712-52}
\end{equation}
Például, $b_1=m_1\wedge\bigl( (o_2{\wedge}o_3)\vee (o_4{\wedge}o_7)\vee (o_5{\wedge}o_9)\bigr)$; \ $f_2=m_2\wedge
S_2(\alpha_{13},\alpha_{58}) = m_2\wedge\alpha_{13}\wedge\alpha_{58}$;
\ $d_5=m_5\wedge S_2(\beta_{19},\beta_{28},\beta_{37},\beta_{46})$.
Ezekkel a definíciókkal megpróbálhatjuk a lépéseket sorba rendezni:
\begin{equation}
\{w_1,\ldots,w_9\}\,>\,
  \{b_1,\ldots,b_9\}\,>\,
  \{f_1,\ldots,f_9\}\,>\,
  \{d_1,\ldots,d_9\}\,>\,
  \{m_1,\ldots,m_9\}\koz.
  \label{keplet712-53}\end{equation}
\idez{Gyõzz, ha lehet, egyébként blokkolj, ha lehet, egyébként csinálj befogást, ha lehet, egyébként védekezz, ha lehet, egyébként
lépj meg egy legális lépést.} A késõbbiekben, amikor a legális lépések közül választunk, ésszerûnek látszik a következõ rendezés:
\begin{equation}
m_5>m_1>m_3>m_9>m_7>m_2>m_6>m_8>m_4\koz,\label{keplet712-54}
\end{equation}
Ugyanis az 5, a középsõ cella négy gyõztes sorban jelenik meg. Ha az 1, 3, 9, vagy 7 sarokcellába lépünk, akkor háromban, 
ha a 2, 6, 8, vagy 4 oldalcellába lépünk, akkor már csak kettõben van benne. Ezt a lépésrendezést az (\ref{keplet712-53})-beli 
$\{w_j\}$, $\{b_j\}$, $\{f_j\}$, $\{d_j\}$, and $\{m_{j}\}$ lépéscsoportoknál is használhatjuk.

Annak biztosítására, hogy egyszerre csak egy lépés legyen kiválasztva definiáljuk a $w'_j$, $b'_j$, $f'_j$, $d^{\prime}_j$,
$m'_j$-t, azt sugallva, hogy \idez{az elsõ választás a legjobb}. Ennek megfelelõen $w'_5=0$, $w'_1=w_5$, $w'_3=w_1\vee
w'_1$, \dots, $w'_4 = w_8\vee w'_8$, $b'_5 = w_4\vee w'_4$,
$b'_1 = b_5\vee b'_5$, \dots, $m'_4 = m_8\vee m'_8$. A
amõba automata definícióját kiegészíthetjük a következõvel:
\begin{equation}
y_j = (w_ j{\wedge}~\rlap{$\bar{\phantom n}$}\bar w'_j)\vee (b_j{\wedge}~\bar b'_j)\vee (f_ j{\wedge}~\bar f'_j)\vee 
(d_j{\wedge}~\bar d^{\prime}_j)\vee (m_j{\wedge}~\rlap{$\bar{\phantom n}$}\bar m'_j) 
\!\quad (1\le j\le 9)\koz.\label{keplet712-55}
\end{equation}
Így konstruáltunk az $m$-ekre 9 kaput, a $w$-kre 48-at, a $b$-kre 48-at, az $\alpha$-kra és a $\beta$-kra 144-et, az
$f$-ekre 35-öt (a \ref{abra712-9}. ábra segítségével), a $d$-kre 35-öt, a prím változókra 43-at és
az $y$-okra 80-at. A továbbiakban a négyváltozós parciális függvényekkel kapcsolatos tudásunkat felhasználhatjuk arra, hogy
az (\ref{keplet712-52})-beli hat mûveletet négyre csökkentsük.
\begin{equation}
\alpha_{ik}=(x_i{\xor}x_k)\vee\overline{(o_i{\xor}o_k)},\qquad
   \beta_{ik}=\overline{(x_i{\xor}x_k)}\vee(o_i{\xor}o_k)\koz.\label{keplet712-56}
\end{equation}
Ezzel a trükkel 48 kaput nyerünk, így a teljes költség 396 kapu összesen.

A amõba játéknak a (\ref{keplet712-47})--(\ref{keplet712-56})-ban kifejtett stratégiája a legtöbb esetben
jól mûködik, de van néhány kirívó hibája. Például szégyellni valóan veszít a következõ játékban
\begin{equation}
\\O........ \qquad
\\O...X.... \qquad
\\O...X...O \qquad
\\O.X.X...O \qquad
\\O.X.X.O.O \qquad
\\O.X.X.OXO \qquad
\\O.XOX.OXO \koz;\label{keplet712-57}
\end{equation}
a második \X/ lépés $d_3$, védekezésként az \O/ befogására, arra készteti \O/ játékost, hogy lépjen az ellentétes sarokba! 
Egy másik hiba is felmerül. Például a $\\.X......O$ pozíció után, amikor az $m_5$ lépés a $\\.X..X...O$, 
$\\.X..X..OO$, $\\.X..X.XOO$, $\\.XO.X.XOO$, $\\.XO.XXXOO$ vesztéshez vezet, pedig \X/ gyõzhetett volna,  
lásd (\ref{keplet712-46}). A \ref{gyak712-65}. gyakorlat javít a dolgon és egy teljesen korrekt Boole 
amõba-játékost ad meg, amihez pontosan 445 kapura van szükség.
\endgroup\index{amõba játék = tic-tac-toe game|)}

\medskip
\noindent \textbf{Függvény dekompozíció.}\index{függvény dekompozíció = decomposition of functions|(}
\index{diszjunkt dekompozíció = disjoint decomposition|(}
Ha az $f(x_1,\ldots,x_n)$ függvényt fel lehet írni $g(x_1,\ldots,x_k,$\linebreak 
\noindent $h(x_{k+1},\ldots,x_n))$ alakban, akkor a
kiszámításhoz jó ötlet elõször az $y=h(x_{k+1},\ldots,x_n)$-t kiértékelni és azután kiszámítani $g(x_1,\ldots,x_k,y)$-t. Az
ilyen dekompozíciók tanulmányozását Ashenhurst\angolnevindex{Ashenhurst, Robert Lovett} kezdeményezte 1952-ben, 
lásd \cite{Ashenhurst1957}. Azt is megfigyelte, hogy elég könnyû felismerni, ha $f$ rendelkezik ezzel a speciális
tulajdonsággal. Írjuk le az $f$ igazságtábláját $2^k\times 2^{n-k}$ mátrixszal, mint (\ref{keplet712-36})-ban, ahol a sorok az
$x_1\ldots x_k$-nak, az oszlopok pedig az $x_{k+1}\ldots x_n$-nek vannak megfeleltetve. A kívánt $g$ és $h$ részfüggvények akkor és
csak akkor léteznek, ha ennek a mátrixnak az oszlopai legfeljebb kétfélék. Például a $\langle x_1x_2\langle
x_3x_4x_5\rangle\rangle$ függvény  igazságtáblája
\begin{equation*}
\begin{array}{cccccccc}
0&0&0&0&0&0&0&0\cr 0&0&0&1&0&1&1&1\cr 0&0&0&1&0&1&1&1\cr
1&1&1&1&1&1&1&1 \koz,\cr
\end{array}
\end{equation*}
ha ebbe a kétdimenziós formába írjuk. Az egyik fajta oszlop megfelel a $h(x_{k+1},\ldots,x_n)=0$-nak, a másik fajta pedig a
$h(x_{k+1},\ldots,x_n)=1$-nek. 

Általában az $X=\{x_1,\ldots,x_n\}$ változókat bármely két $Y=\{y_1,\ldots,y_k\}$ és $Z=\{z_1,\ldots,z_{n-k}\}$ diszjunkt
részhalmazra bonthatjuk. Ennek alapján megkaphatjuk az $f(x)=g(y,h(z))$-et. Egy adott $(Y,Z)$ dekompozícióra meg kell
vizsgálni a $2^k\times2^{n-k}$ igazságtábla oszlopait, ahol a sorok felelnek meg az ~$y$ értékeinek. Azonban $X$-re $2^n$
partíció létezik és ezek mindegyike potenciálisan alkalmas lehet, kivéve olyan triviális eseteket, mint $\vert Y\vert=0$ vagy $\vert
Z\vert\le1$. Hogyan kerülhetjük el ezt az óriási számú vizsgálatot?

Egy gyakorlati lehetõség Shen, McKellar és Weiner nevéhez fûzõdik \cite{Shen1971}.\angolnevindex{Weiner, Peter Gallegos}
\angolnevindex{Shen, Vincent Yun-Shen}\angolnevindex{McKellar, Archie Charles} 
Ezzel a módszerrel a potenciálisan hasznos $(Y,Z)$ partíciók azonosításához csak $O(n^2)$ lépés szükséges. Az
alapötlet egyszerû; tegyük fel hogy $x_i\in Z$, $x_j\in Z$, és $x_m\in Y$. definiáljunk nyolc $\delta_{l}$ bináris vektort
$l=(l_1l_2l_3)_2$-ra, ahol $\delta_{l}$-beli $(i,j,m)$ komponensekben rendre $(l_1,l_2,l_3)$ van és nulla máshol.
Tekintsünk bármilyen véletlenül választott $x=x_1\ldots x_n$\index{véletlen választás = randomization} 
vektort és értékeljük ki $f_l\,=\,f(x\xor\delta_{l})$-t $0\le l\le 7$-re. Ekkor az  
\begin{equation}\advance\abovedisplayskip-.5pt
  \advance\belowdisplayskip-.5pt
\Bigl({f_0\atop f_1}\Bigr)\qquad \Bigl({f_2\atop f_3}\Bigr)\qquad
\Bigl({f_4\atop f_5}\Bigr)\qquad \Bigl({f_6\atop f_7}\Bigr)\label{keplet712-58}
\end{equation}
párok jelennek meg egy $2^k\times 2^{n-k}$ igazságtábla $2\times 4$-es részmátrixában. A dekompozíció lehetetlen, ha ezek a 
párok különböznek, vagy ha három különbözõ értéket tartalmaznak.

Nevezzük a párokat \idez{jónak} \index{jó pár = good pair}, ha egyformák vagy ha csak két különbözõ értékük van. Egyébként ezek
\idez{rosszak}. \index{rossz pár = bad pair} Ha $f$ lényegében véletlenszerû viselkedésû, akkor -- a fenti ötletet néhány 
véletlenszerûen kiválasztott $x$ vektorra alkalmazva -- hamar találunk rossz párokat. Ugyanis az $f_0f_1\ldots f_7$-re 
lehetséges 256 esetbõl csak 88 ad jó párhalmazt. Annak a valószínûsége, hogy egy sorban tízszer találjunk jó párokat, csak
$({88\over256})^{10}\approx.00002$. Ha rossz párokat találunk, akkor megállapíthatjuk, hogy

\begin{equation}x_i\in Z\quad\hbox{és}\quad x_j\in Z\;\implies\; x_m\in Z\koz,\label{keplet712-59}
\end{equation}
mivel az $x_m\in Y$ alternatív lehetõség lehetetlen.

Tegyük fel például, hogy $n=9$ és, hogy az $f$ függvény igazságtáblája $11001001000011\allowbreak \ldots 00101$ a $\pi$ \index{Pi =
$\pi$}legfontosabb 512 bitjébõl áll. (Ez a \idez{több-vagy-kevesebb véletlen függvény}, amit $n=4$-re tanulmányoztunk fentebb a
(\ref{keplet712-5})-ben és a (\ref{keplet712-6})-ban) Erre a 
$\pi$~függvényre\index{pifüggvény@$\pi$-függvény = $\pi$~function} a rossz
párok gyorsan megtalálhatók minden olyan $(i,j,m)$ esetre, ahol $m\neq i<j\neq m$. A szerzõ tapasztalata, hogy a 252 olyan esetbõl,
ahol a véletlen $x$ vektorok esetenkénti arányszáma 1.52, 170-et azonnal meghatároztak. Csak egy esetben volt szükség mind a nyolc
~$x$-re, mielõtt a rossz párok megjelentek. Az (\ref{keplet712-59}) minden releváns $(i,j,m)$-re teljesül ezért
világos, hogy a függvény dekomponálhatatlan. A \ref{gyak712-73}. gyakorlat mutatja, hogy nincs szükség mind a 252 teszt
elvégzésére. Ugyanis ahhoz, hogy a $\pi$~függvény dekomponálhatatlanságát igazoljuk; elegendõ mindössze ${n\choose2}=36$ teszt.

Tekintsünk egy kisebb véletlen függvényt. Legyen $f(x_1,\ldots,x_9)=(\det X)\mod 2$, ahol
\begin{equation}
{X=\left(\begin{array}{lcr}x_1&x_2&x_3\\ x_4&x_5&x_6\\
x_7&x_8&x_9
\end{array}\right)\koz.}\label{keplet712-60}
\end{equation}
Ez a függvény nem teljesíti az (\ref{keplet712-59})-t, ha $i=1$, $j=2$, és $m=3$, mivel ezekben az esetekben nincsenek 
rossz párok. Azonban $4\le m\le9$-re, ha $\{i,j\}=\{1,2\}$ teljesíti a (\ref{keplet712-59})-t. Ezt a viselkedést az 
`$12 \Rightarrow 456789$' rövidítéssel jelöljük. Az implikációk teljes halmaza minden $\{i,j\}$ párra a következõ:
$$\hspace*{-2mm}\begin{array}{@{}ll}
&12\Rightarrow456789\cr
&13\Rightarrow456789\cr &14\Rightarrow235689\cr
&15\Rightarrow36789\cr &16\Rightarrow25789\cr &17\Rightarrow235689
\end{array}\hspace*{-2mm}
\begin{array}{@{}ll}
&18\Rightarrow34569\cr &19\Rightarrow24568\cr
&23\Rightarrow456789\cr &24\Rightarrow36789\cr
&25\Rightarrow134679\cr &26\Rightarrow14789
\end{array}\hspace*{-2mm}
\begin{array}{@{}ll}
 &27\Rightarrow34569\cr &28\Rightarrow134679\cr &29\Rightarrow14567\cr &34\Rightarrow25789\cr
&35\Rightarrow14789\cr &36\Rightarrow124578
\end{array}\hspace*{-2mm}
\begin{array}{@{}ll}&37\Rightarrow24568\cr
&38\Rightarrow14567\cr &39\Rightarrow124578\cr
&45\Rightarrow123789\cr &46\Rightarrow123789\cr
&47\Rightarrow235689
\end{array}\hspace*{-2mm}
\begin{array}{@{}ll}&48\Rightarrow12369\cr &49\Rightarrow12358\cr
&56\Rightarrow123789\cr &57\Rightarrow12369\cr
&58\Rightarrow134679\cr &59\Rightarrow12347
\end{array}\hspace*{-2mm}
\begin{array}{@{}ll} &67\Rightarrow12358\cr &68\Rightarrow12347\cr &69\Rightarrow124578\cr
&78\Rightarrow123456\cr &79\Rightarrow123456\cr
&89\Rightarrow123456\cr
\end{array}$$
(lásd  a \ref{megold712-69}. gyakorlatot). Kissé nehezebb rossz párokat találni, ha találomra választjuk a függvényt. A szerzõ 
tapasztalata szerint, ha léteztek rossz párok, akkor a szükséges $x$-ek átlaga 3.6 körülire nõtt. Természetesen a tesztszámot 
korlátozni kell egy $t$ küszöbszámmal, ami azt jelenti, hogy leállunk, ha $t$ egymás utáni próbálkozásra sem találtunk rossz 
párt. $t=10$ választás mellett a fent kilistázott 198 implikációból mintegy 8-at meg kell találni.

Az (\ref{keplet712-59})-hez hasonló implikációk a Horn-klózok\index{Horn-klóz = Horn clause} és a 7.1.1. pontból tudjuk, 
hogy Horn-klózokból könnyû további levezetéseket elõállítani. A \ref{gyak712-74}. gyakorlatban látható módszerrel le tudjuk 
vezetni, hogy $\vert Z\vert>1$ esetben az egyetlen lehetséges partíció a triviális $(Y=\emptyset$, $Z=\{x_1,\ldots,x_9\})$. 
Ehhez elég volt 50-nél kevesebb $(i,j,m)$ eset megvizsgálása.

Hasonló eredményeket kapunk, ha $f(x_1,\ldots,x_9)=[{\rm per}\,X>0]$, ahol a per a \textit{permanens} függvényt 
jelöli.\index{permanens függvény = permanent function} (Ebben az esetben $f$ megadja, hogy a $K_{3,3}$ páros részgráfjában 
van-e az  $x_1\ldots x_9$ változók által meghatározott élekkel illesztés.\index{illesztés = matching}) Itt 180 implikációt láthatunk,
\begin{equation*}
\hspace*{-2mm}
\begin{array}{@{}ll}
&12\Rightarrow456789\cr &13\Rightarrow456789\cr
&14\Rightarrow235689\cr &15\Rightarrow3678\cr
&16\Rightarrow2579\cr &17\Rightarrow235689\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
&18\Rightarrow3459\cr &19\Rightarrow2468\cr
&23\Rightarrow456789\cr &24\Rightarrow3678\cr
&25\Rightarrow134679\cr &26\Rightarrow1489\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
&27\Rightarrow3459\cr &28\Rightarrow134679\cr
&29\Rightarrow1567\cr &34\Rightarrow2579\cr &35\Rightarrow1489\cr
&36\Rightarrow124578\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
&37\Rightarrow2468\cr &38\Rightarrow1567\cr
&39\Rightarrow124578\cr &45\Rightarrow123789\cr
&46\Rightarrow123789\cr &47\Rightarrow235689\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
&48\Rightarrow1269\cr
&49\Rightarrow1358\cr &56\Rightarrow123789\cr
&57\Rightarrow1269\cr &58\Rightarrow134679\cr
&59\Rightarrow2347\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
&67\Rightarrow1358\cr &68\Rightarrow2347\cr
&69\Rightarrow124578\cr &78\Rightarrow123456\cr
&79\Rightarrow123456\cr &89\Rightarrow123456\koz,\cr
\end{array}\koz,
\end{equation*}
amelyekbõl csak 122-t lehetett volna megtalálni a $t=10$ vágási küszöbbel. (A legjobb választás ~$t$-re nem ismert; talán
dinamikusan változik) Mégis ez a 122 Horn-klóz több mint elegendõ a dekomponálhatatlanság igazolására.

Mit mondhatunk a dekomponálható függvényrõl? $f=\langle x_2x_3x_6x_9\langle x_1x_4x_5x_7x_8\rangle\rangle$ estén azt
kapjuk, hogy $i{\wedge}j\Rightarrow m$ minden $m\notin\{i,j\}$-re, kivéve ha $\{i,j\}\subseteq\{1,4,5,7,8\}$. Ez utóbbi esetben
$m$-nek az $\{1,4,5,7,8\}$-hoz kell tartoznia. Jóllehet a 212 implikációból csak 185-öt találtak meg $t=10$-re, az
$Y=\{x_2,x_3,x_6,x_9\}$, $Z=\{x_1,x_4,x_5,x_7,x_8\}$ partíció hamar felbukkant, mint erõs lehetõség.

Amikor egy potenciális dekompozíció ötletszerûen felmerül, mindig meg kell vizsgálni a megfelelõ $2^k\times 2^{n-k}$ igazságtáblát,
hogy valóban csak egy- vagy kétféle oszlopai vannak-e. Szívesen használunk fel $2^n$ idõegységet erre a vizsgálatra, mert így
nagymértékben egyszerûsítjük az ~$f$ kiértékelését.

Az $f=[(x_1x_2x_3x_4)_2\ge(x_5x_6x_7x_8)_2+x_9]$ összehasonlító függvény \index{összehasonlító függvény =
comparison function} egy másik érdekes eset. Ennek 184 potenciálisan levezethetõ implikációja:
\begin{equation*}
\hspace*{-2mm}
\begin{array}{@{}ll}
\small
&12\Rightarrow3456789\cr &13\Rightarrow2456789\cr
&14\Rightarrow2356789\cr &15\Rightarrow2346789\cr
&16\Rightarrow2345789\cr &17\Rightarrow2345689
\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
\small 
&18\Rightarrow2345679\cr
&19\Rightarrow2345678\cr &23\Rightarrow46789\cr
&24\Rightarrow36789\cr &25\Rightarrow1346789\cr
&26\Rightarrow34789
\end{array}
 \hspace*{-2mm}
\begin{array}{@{}ll}
\small 
&27\Rightarrow34689\cr &28\Rightarrow34679\cr
&29\Rightarrow34678\cr &34\Rightarrow789\cr
&35\Rightarrow1246789\cr &36\Rightarrow24789
\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll} 
\small
&37\Rightarrow489\cr &38\Rightarrow479\cr &39\Rightarrow478\cr &45\Rightarrow1236789\cr
&46\Rightarrow23789\cr &47\Rightarrow389
\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll} 
\small
&48\Rightarrow9\cr &49\Rightarrow8\cr
&56\Rightarrow1234789\cr &57\Rightarrow1234689\cr
&58\Rightarrow1234679\cr &59\Rightarrow1234678
\end{array}
\hspace*{-2mm}
\begin{array}{@{}ll}
\small
&67\Rightarrow23489\cr &68\Rightarrow23479\cr
&69\Rightarrow23478\cr &78\Rightarrow349\cr &79\Rightarrow348\cr
&89\Rightarrow 4\koz, \hskip-5pt
\end{array}
\end{equation*}
\normalsize
és ezeek közül 145-öt $t=10$ mellett találtak meg. Három dekompozíció szinte adta magát, ezeknél rendre $Z=\{x_4,x_8,x_9\}$,
$Z=\{x_3,x_4,x_7,x_8,x_9\}$ és $Z=\{x_2,x_3,x_4,x_6,x_7,x_8,x_9\}$. Ashenhurst bizonyította 
\cite{Ashenhurst1957},\angolnevindex{Ashenhurst, Robert Lovett}  hogy $f$ azonnal redukálható, amikor egy
nemtriviális dekompozíció adódik. A többi dekompozíció felmerülhet késõbb, amikor a $g$ és~$h$ függvényeket próbáljuk 
redukálni.\index{függvény dekompozíció = decomposition of functions|)}\index{diszjunkt dekompozíció = disjoint decomposition|)}

\medskip
\noindent \textbf{*Parciális függvények dekompozíciója.}
\index{parciális függvények dekompozíciója = decomposition of partial functions|(}
Ha az $f$ függvény csak parciálisan specifikált, akkor egy $(Y,Z)$ partíciójú dekompozíció léte attól függ, hogy a
érdektelen jelekhez\index{érdektelen jel = don't-care} hogyan tudunk úgy értékeket rendelni, hogy legfeljebb két különbözõ oszlop
jelenjen meg a megfelelõ $2^k\times 2^{n-k}$ igazságtáblában.

A $0$, $1$, és $*$ jelekbõl álló $u_1\ldots u_m$ és $v_1\ldots v_m$ vektorokat inkompatibilisnek nevezzük, ha van olyan $j$, hogy 
$u_j=0$ és $v_j=1$ vagy $u_j=1$ és $v_j=0$. Más szóval, ha az $u$ és $v$ által definiált $m$-kockák részkockáinak nincs közös
pontja. Tekintsük azt a gráfot, amelynek a csúcsai az érdektelen jeleket is tartalmazó igazságtábla oszlopai, ahol
$u\adj v$ akkor és csak akkor, ha $u$~és~$v$ inkompatibilisek. A $*$-oknak akkor és csak akkor adhatunk úgy értéket, hogy
legfeljebb két különbözõ oszlop álljon elõ, ha ez a gráf \textit{páros}\index{páros = bipartite}. Ha $u_1$,~\dots,~$u_l$
kölcsönösen kompatibilisek, akkor $u_1\sqcup~\cdots~\sqcup u_l$, a 7.1.1-32. gyakorlatban definiált általánosított konszenzusuk
\index{általánosított konszenzus = generalized consensus} kompatibilis mindegyikkel.
{Lásd Hight \cite{Hight1973}, valamint Boros, Gurvich, Hammer, Ibaraki és Kogan cikkét \cite{Boros1995}.}
\angolnevindex{Hight, Stuart Lee}\angolnevindex{Boros Endre}\angolnevindex{Gurvich, Vlagyimir 
Alexander ({\rus Gurvich, Vladimir Aleksandrovich})}\angolnevindex{Hammer, Péter László (= Peter Leslie = Ivanescu, 
Petru Ladislav, 1936--2006)}\angolnevindex{Ibaraki, Toshihide}\angolnevindex{Kogan, Alexander Jurevics 
({\rus Kogan, Aleksandr Yurp1evich})} Mivel egy gráf akkor és csak akkor páros, ha nem tartalmaz páratlan hosszúságú kört, ez a 
feltétel egy mélységi kereséssel könnyen tesztelhetõ (Lásd a 7.4.1. pontot).

Következéskép Shen, McKellar, és Weiner módszere \cite{Shen1971} mûködik\angolnevindex{Weiner, Peter Gallegos}
\angolnevindex{Shen, Vincent Yun-Shen}\angolnevindex{McKellar, Archie Charles} akkor is, ha érdektelen értékek is vannak. Az
(\ref{keplet712-58})-beli négy pár akkor és csak akkor tekintendõ rossznak \index{rossz pár = bad pair}, ha közülük három 
kölcsönösen inkompatibilis. Ugyanúgy dolgozhatunk mint korábban, bár a rossz párok megtalálása nehezebb, amikor sok $*$ 
fordul elõ (lásd a \ref{gyak712-72}. gyakorlat). Azonban Ashenhurst\angolnevindex{Ashenhurst, Robert Lovett} tétele 
\cite{Ashenhurst1957} már nem alkalmazható. Ha néhány dekompozíció már létezik, akkor az összeset megtalálhatjuk késõbb, mivel az  
érdektelenekre különbözõ beállításokat használhatunk és ezek közül bizonyosak jobbak lehetnek, mint mások.

Bár a legtöbb $f(x)$ függvénynek nincs egyszerû $g(y,h(z))$ dekompozíciója, nem szabad túl hamar elveszíteni a reményt, mivel
más, például a $g(y,h_1(z),h_2(z))$-hoz hasonló alakkal kaphatunk hatékony láncot. Ha például $f$ szimmetrikus a $\{z_1,z_2,z_3\}$
három változóban, akkor mindig felírható az $f(x)= g\bigl(y,S_{1,2}(z_1,z_2,z_3),S_{1,3}(z_1,z_2,z_3)\bigr)$ alak,
mivel $S_{1,2}(z_1,z_2,z_3)$ és $S_{1,3}(z_1,z_2,z_3)$ jellemzi az $z_1+z_2+z_3$ értékét. (Megjegyezzük, hogy négy lépés pontosan
elegendõ az $S_{1,2}$ és $S_{1,3}$ kiszámításához.)

Curtis megfigyelése szerint \cite{Curtis1961}\angolnevindex{Curtis, Herbert Allen} $f(x)$-et akkor és csak akkor lehet 
kifejezni $g(y,h_1(z),\ldots,\allowbreak h_r(z))$ alakban, ha az $Y$-nak és $Z$-nek megfelelõ $2^k\times 2^{n-k}$-as igazságtábla 
legfeljebb $2^r$ különbözõ oszlopot tartalmaz. Ha don't-care-ek is találhatók, akkor ugyanez az eredmény akkor és csak akkor 
érhetõ el, ha az $Y$ és $Z$-hez tartozó inkompatibilitási gráf legfeljebb
$2^r$ színnel kiszínezhetõ.\index{gráfszínezés = coloring of graphs|(}

Például a fentebb vizsgált $f(x)=(\det X)\mod 2~$ függvény a $Z=\{x_4,x_5,x_6,x_7,x_8,x_9\}$ esetén nyolc különbözõ oszlopot
eredményez, ami meglepõen kis szám, mivel az igazságtáblának 8 sora és 64 oszlopa van. Ebbõl a ténybõl eljuthatunk arra a 
gondolatra, hogy hogyan fejtsük ki a determinánst\index{determináns = determinant} az elsõ sor kofaktoraival,
\begin{equation*}f(x)\;=\;x_1{\wedge}h_1(x_4,\ldots,x_9)\,\xor\,
       x_2{\wedge}h_2(x_4,\ldots,x_9)\,\xor\,
       x_3{\wedge}h_3(x_4,\ldots,x_9)\koz,
\end{equation*}
ha nem ismernénk már ilyen szabályt.

Ha $d\le 2^r$ különbözõ oszlop fordul elõ, akkor az $f(x)$-et tekinthetjük úgy, mint $y$ és $h(z)$ függvényét, ahol $h$ az egyes
$z_1\ldots z_{n-k}$ bináris vektorokhoz a $\{0,1,\ldots,d-1\}$ értékek valamelyikét hozzárendeli. Így $(h_1,\ldots,h_r)$ lényegében
kódolja a különbözõ oszloptípusokat. Reméljük, hogy találunk olyan egyszerû $h_1$,~\dots,~$h_r$ függvényeket, amelyek megadnak egy
ilyen kódolást. Amennyiben $d$ sokkal kisebb, mint ~$2^r$, akkor a $g(y,h_1,\ldots,h_r)$ függvényben sok don't-care szerepel, ami
nagyban csökkenti a költséget.

A különbözõ oszlopok sugallhatnak olyan $g$ függvényt, amelyhez a $h$-k don't-care-eket tartalmaznak. Például, ha az
oszlopok $(0,0,0,0)^T$ vagy $(0,0,1,1)^T$ vagy $(0,1,1,0)^T$, akkor $g(y_1,y_2,h_1,h_2)= (y_1\xor(h_1\wedge
y_2))\wedge h_2$ alkalmas. Itt, ha $z$ a csupa nulla oszlopnak felel meg, akkor a $h_1(z)$ értéke tetszõleges. Curtis 
 \angolnevindex{Curtis, Herbert Allen} megmutatta, hogy ezt az ötletet hogyan lehet kiaknázni, ha 
 $\vert Y \vert = 1$ és $\vert Z\vert = n-1$ (lásd \cite{Curtis1976}).

A dekompozíciós technikák átfogó tárgyalásához lásd Karp cikkét 
\cite{Karp1963}.\angolnevindex{Karp, Richard Manning}\index{parciális függvények dekompozíciója = decomposition of partial functions|)}
\index{gráfszínezés = coloring of graphs|)}

\medskip 
\noindent \textbf{$n$ nagyobb értékei.}\index{többváltozós függvények = functions of many variables|(} 
Eddig Boole-függvényekre\index{Boole-függvény = Boole function} csak kisméretû példákat tekintettünk. Az S tétel 
szerint a nagy véletlen példák magától értetõdõen nehezek. Azonban a gyakorlati példák lehetnek nagyon is nem véletlenszerûek.
Ezért van értelme annak, hogy az egyszerûsítésekre heurisztikus módszereket keressünk.

$n$ növekedése esetén, a Boole-függvények kezelésére a jelenleg ismert legjobb mód a Boole-lánccal való kezdés -- nem egy óriási
igazságtáblával -- majd ezt a láncot kell tökélesíteni \idez{helyi változtatásokkal}\index{helyi változtatások = local changes}. A
lánc megadható egy egyenlethalmazzal. Ha egy közbensõ eredményt viszonylag kevés részsorozatban használunk, akkor
megpróbálhatjuk ezt kihagyni és idõlegesen berakni egy háromváltozós függvénybe, majd újraformalizálni ezeket a
függvényeket és ezáltal a láncot javítani, ha lehet.

\newbox\sqbox
\setbox\sqbox=\vbox{\hrule\kern-0.4pt
                     \hbox to3.33pt{\vrule height 3.33pt\hfil\vrule}
                     \kern-0.4pt\hrule}
\def\sqr{\mathbin{\vcenter{\copy\sqbox}}}

Például tegyük fel, hogy az $x_i=x_j\circ x_k$ kaput egyetlen egyszer használjuk az $x_{l}=x_i\sqr x_m$ kapuhoz, így aztán
$x_{l}=(x_j\circ x_k)\sqr x_m$. Lehet, hogy már vannak olyan kapuk, amelyekkel $x_j$, $x_k$ és $x_m$ más függvényeit
kiszámítottuk. Viszont az $x_j$, $x_k$ és $x_m$ definíciói maguk után vonhatják, hogy az $(x_j,x_k,x_m)$-hez rendelhetõ bizonyos
értékek nem lehetségesek. Ily módon $x_{l}$-et kiszámíthatjuk más kapukból, mindössze egy további mûvelet végrehajtásával. Például,
ha $x_i=x_j\wedge x_k$ és $x_{l}=x_i\vee x_m$, és ha az $x_j\vee x_m$ és $x_k\vee x_m$ értékek megjelennek valahol a láncban, akkor
beírhatjuk $x_{l}=(x_j{\vee}x_m)\wedge (x_k{\vee}x_m)$-et; ez kiküszöböli $x_i$-t és 1-gyel csökkenti a
költséget. Vagy, ha mondjuk $x_j\wedge(x_k{\xor}x_m)$ elõfordul valahol és tudjuk, hogy $x_jx_kx_m\neq 101$, akkor
$x_{l}=x_m\xor(x_j\wedge(x_k{\xor}x_m))$ lehetséges.

Ha $x_i$-t csak $x_{l}$-ben használtuk és $x_{l}$-et csak $x_p$-ben, akkor az $x_p$ kapu négy változótól függ. Ekkor
a költséget lehetséges csökkenteni a négyváltozós függvényekkel\index{négyváltozós függvények = four-variable functions}
kapcsolatos teljes tudásunk felhasználásával és $x_p$-re az $x_i$ és~$x_{l}$ eliminálásával egy jobb megoldást kapni. Hasonlóan, ha
$x_i$ csak az $x_{l}$-ben és~$x_p$-ben jelenik meg, akkor $x_i$ eliminálható, ha találunk jobb lehetõséget két különbözõ
négyváltozós függvény kiértékelésére, esetleg érdektelen értékekkel és olyan egyéb, négyváltozós függvényekkel, 
amelyekben a négy változó szabadon elérhetõ. Másrészt az ilyen problémákat meg tudjuk oldani a fentebb tárgyalt \idez{lábnyom} 
módszerrel.\index{lábnyom = footprint}

Ha lokális cserékkel nem tudjuk csökkenteni a költséget, akkor olyan lokális cserékkel próbálkozunk, amelyek megtartják, esetleg
növelik a költséget, miközben olyan láncok alakulnak ki, amelyeket más módon lehet egyszerûsíteni. Az ilyen lokális vizsgálati
módszerekkel a 7.10. alfejezetben behatóan foglalkozunk.

A Boole optimalizálási technikákról, vagy ahogy az elektronikai mérnökök mondják a \idez{többszintû logikai szintézis}
problémájáról \index{többszintû logikai szintézis = multilevel logic synthesis} remek összefoglalást publikáltak Brayton, 
Hachtel és Sangiovanni-Vincentelli a \cite{Brayton1990}\angolnevindex{Brayton, Robert King}\angolnevindex{Hachtel, Gary Deane}
\angolnevindex{Sangiovanni-Vincentelli, Alberto Luigi}  cikkben és De Micheli a könyvében \cite{Micheli1994}.
\angolnevindex{Micheli, Giovanni, De}\index{többváltozós függvények = functions of many variables|)}

\medskip 
\noindent \textbf{Alsó korlátok.}\index{kombinatorikus összetettség alsó korlátai = lower bounds on combinational complexity|(} 
Az S tétel szerint majdnem minden ~$2^n\!/n$-et meghaladó hosszúságú láncot igénylõ $n\ge 12$ változós függvényt 
nehéz kiértékelni. Persze a modern számítógépek, amelyek Boole-változók ezreit reprezentáló, elektronikus jelekre
mûködõ logikai áramkörökbõl vannak felépítve, mikroszekundumonként Boole-függvények millióit értékelik ki. Nyilvánvaló, hogy rengeteg
gyorsan kiértékelhetõ fontos függvény létezik a D tétel ellenére. Ezt a tételt indirekt módon bizonyítottuk; egyszerûen az alacsony
költségû eseteket számoltuk, így szinte semmit sem tudtunk meg olyan különleges példákról, amelyek a gyakorlatban merülnek fel.
Ha ki akarunk számítani egy adott függvényt és a munkát csak nagyon összetettnek képzelhetjük el, hogyan lehetünk biztosak
abban, hogy nincs egy trükkös rövidítés?

A válasz erre a kérdésre botrányos. Több évtizedes intenzív
kutatás után a számítástudomány szakemberei képtelenek megtalálni
\textit{bármilyen} olyan $f(x_1,\ldots,x_n)$ függvénycsaládot,
aminek a költsége az $n$~növekedésével rá jellemzõen nemlineáris.
A valóságos viselkedés $2^n\!/n$, de egy $n\lg\lg\lg n$ erõsségû
alsó határ nincs bizonyítva! Természetesen ki lehet olyan mesterséges
példákat találni, mint a \idez{lexikografikusan legkisebb, ~$2^n$
hosszúságú igazságtábla, ami nem állítható elõ egyetlen
$\lfloor2^n\!/n\rfloor-1$ hosszúságú Boole-lánccal sem}; ám az
ilyen függvényeket biztosan nem lehet kifejezni. Egy kifejezhetõ
$f(x_1,\ldots,x_n)$ függvény igazságtáblájának kiszámíthatónak kell lennie 
mondjuk legfeljebb $2^{cn}$ idõegység alatt valamilyen
$c$ konstans mellett. Más szóval az összes függvényérték
kiszámításához szükséges idõnek polinomiálisnak kell lennie az igazságtábla hosszának függvényében. Ezek alapján, jelenleg nem
ismert olyan egykimenetû függvénycsalád, aminek a kombinatorikus bonyolultsága meghaladná a $3n+O(1)$ értéket amikor $n\to\infty$.
{Lásd \cite{Blum1984}\angolnevindex{Blum, Norbert Karl}.} 

A kép azonban nem teljesen sötét, mivel a gyakorlatban fontos
függvényekre bizonyítottak egy sor érdekes \textit{lineáris} alsó korlátot. 
Az ilyen eredmények elérésének alapvetõ módszereit
Redkin \angolnevindex{Redkin, Nyikolaj Petrovics ({\rus Redp1kin, Nikolai0 Petrovich})}
vezette be 1970-ben. Tegyük fel, hogy
$f(x_1,\ldots,x_n)$-re már van egy ~$r$ költségû optimális lánc.
$x_n\gets0$ vagy $x_n\gets1$ beállítás mellett a
$g(x_1,\ldots,x_{n-1})=f(x_1,\ldots,x_{n-1},0)$ és
$h(x_1,\ldots,x_{n-1})=f(x_1,\ldots,x_{n-1},1)$ függvényekre
redukált láncot kapunk, amelynek $r-u$ a költsége, ha $u$~
különbözõ kapunak $x_n$ a bemenete. Ezenkívül, ha $x_n$-et egy olyan
$x_i=x_n\circ x_k$ \idez{irányító}\index{irányító = canalizing}
kapuban használtuk fel, ahol a $\circ$ mûvelet sem nem az $\xor$
sem nem az ~$\leqv$, akkor az ~$x_n$ bizonyos beállítása kényszeríti, hogy
$x_i$ konstans legyen, ami további redukciót eredményez $g$ vagy
~$h$ láncán. A $g$ és/vagy $h$ alsó korlátai így az ~$f$ alsó
korlátját meghatározzák. (Lásd a \ref{gyak712-77}--\ref{gyak712-81}. gyakorlatokat.)

De mi van a nemlineáris alsó korlátok bizonyításával? Majdnem
minden probléma, amire a válasz igen-nem, leírható egy
Boole-függvénnyel, ezért nincs hiány olyan explicit függvényekben,
amelyeket nem tudunk kiértékelni lineáris idõben, de még
polinomiális idõben sem. Például egy $\{v_1,\ldots,v_m\}$ a 
csúcsokkal rendelkezõ ~$G$ irányított gráf, leírható az ~$X$ \index{átmenet mátrix = adjacency
matrix} átmenet mátrixszal, ahol $x_{ij}=[v_i\to v_j]$:
\begin{equation}
f(x_{12},\ldots,x_{1m},\ldots,x_{m1},\ldots,x_{m(m-1)})\;=\;
\hbox{[$G$ -nek van Hamilton-útja]} \label{keplet712-61}
\end{equation}
egy $n=m(m-1)$ változós Boole-függvény. Nagyon jó lenne, ha ezt a függvényt ki tudnánk értékelni, mondjuk $n^4$ lépésben. Azt 
tudjuk, hogyan számítsuk ki $f$ igazságtábláját $O(m!2^n)=2^{n+O(\sqrt n\,\lg n)}$ lépésben. Mivel csak $m!$
potenciális Hamilton út létezik, az $f$ \idez{explicit}. Azt azonban senki sem tudja, hogyan értékeljük ki $f$-et polimomiális
idõben, vagy hogyan bizonyítsuk, hogy $4n$-lépéses lánca nem létezik.

Általában azt tudjuk, hogy minden $n$ esetén $f$-re létezhetnek rövid Boole-láncok. Mindenesetre \ref{abra712-9}. és a 
\ref{abra712-10}. ábra mutat lehetõségeket döbbenetesen ügyes láncokra még a 4 és
5 változós esetben is. A nagyméretû, valaha is megoldásra váró problémákkal 
kapcsolatos hatékony láncok vizsgálata még a \idez{jövõ zenéje} -- látókörünkön 
teljesen kívül esik, hiszen még megtalálásukra sincs idõ. Ha egy mindentudó 
lény megadná nekünk az egyszerû láncokat, elõfordulhatna, hogy azokat érthetetlennek
tartanánk, mivel lehetséges, hogy a lánc jóságának legrövidebb
bizonyítása hosszabb lenne, mint agysejjeink száma.

Az S tétel elutasítja az ilyen forgatókönyvet a legtöbb Boole-függvény esetén. De kevesebb mint $2^{100}$ Boole-függvénynek 
lehet még a világtörténelem során gyakorlati jelentõsége és az S tétel ezekrõl semmit sem mond.

1974-ben Stockmeyer és Meyer\angolnevindex{Stockmeyer, Larry Joseph}\angolnevindex{Meyer, Albert Ronald da Silva} konstruáltak egy 
olyan $f$ Boole-függvényt \cite{Stockmeyer1974}, aminek bizonyíthatóan nagyon nagy a bonyolultsága. Az õ $f$-jük nem \idez{explicit},
%^^{quantified formulas}
a fent leírt értelemben, de egyáltalán nem mûvi; a matematikai logikában \index{logika = logic} merült fel. Tekintsük a következõ
szimbolikus állításokat:
\begin{align}
&\texttt{048+1015$\neq$1063};  \label{keplet712-62}\\
&\texttt{$\forall$m$\exists$n$($m$<$n$+$1$)$}; \label{keplet712-63}\\
&\texttt{$\forall$n$\exists$m$($m$+$1$<$\koz n$)$};\label{keplet712-64}\\
&\texttt{$\forall$a$\forall$b$($b$\geq$a$+$2$
\Rightarrow\exists$ab$($a$<$ab$\wedge$ab$<$b$))$};
\label{keplet712-65}\\
&\texttt{$\forall$A$\forall$B$($A$\equiv$B$
\Leftrightarrow\neg\exists$n$($n$\in$A$\wedge$n$\notin$B$\vee$n$
\in$B$\wedge$n$\notin$A$))$};\label{keplet712-66}\\
&\texttt{$\forall$A$(\exists$n$($n$\in$A$)\Rightarrow\exists$m$
($m$\in$A$\wedge\forall$n$($n$\in$A$\Rightarrow$m$\leq$n$)))$};\label{keplet712-67}\\
&\texttt{$\forall$A$(\exists$n$($n$\in$A$)\Rightarrow\exists$m$
($m$\in$A$\wedge\forall$n$($n$\in$A$\Rightarrow$m$\geq$n$)))$};\label{keplet712-68}\\
&\texttt{$\exists$P$\forall$a$(($a$\in$P$\Leftrightarrow$a$+$3$
\notin$P$)\Leftrightarrow$a$<$1000$)$};\label{keplet712-69}\\
&\texttt{$\forall$A$\forall$B$(\forall$C$\forall$c$($C$\equiv$A$
\wedge$c$=$1$\vee$c$\equiv$B$%
\wedge$c$=$0$\Rightarrow(\forall$n$($n$\in$C$\Leftrightarrow$n$+$1$\in$C$)
\Leftrightarrow$c$=$1$))\Rightarrow\neg$A$\equiv$B$)$}.\label{keplet712-70}
\end{align}


Stockmeyer\angolnevindex{Stockmeyer, Larry Joseph} és Meyer\angolnevindex{Meyer, Albert Ronald da Silva} definiáltak  
egy $L$ nyelvet, aminek az ábécéje a következõ 63 karakterbõl áll:
$$\texttt{$\forall\exists\neg()\equiv\in\notin$+$\wedge%
\vee\Rightarrow\Leftrightarrow<\leq=\neq\geq>$}%
\texttt{abcdefghijklmnopqABCDEFGHIJKLMNOPQ0123456789}$$
és a szimbólumoknak megfelelõ értelmezést adtak. Kisbetûk egy sorozata
az $L$ egy mondatán belül -- a (\ref{keplet712-65})-ban lévõ '\texttt{ab}'-hez hasonlóan -- numerikus változókat jelentenek, 
amelyek a nemnegatív egész számokat futják be; a nagybetûk sorozatai halmazváltozókat jelentenek, amelyek egész számok véges
 részhalmazait futják be. Például a (\ref{keplet712-66}) jelentése: \idez{Minden véges $A$ és $B$ halmazra, $A=B$ akkor és
 csak akkor, ha nincs olyan $n$ szám, ami benne van $A$-ban, de nincs benne $B$-ben, vagy benne van $B$-ben de nincs benne $A$-ban.} 
 Ezen állítások némelyike igaz, mások hamisak. (Lásd a \ref{gyak712-82}. gyakorlatot.)

A (\ref{keplet712-62})--(\ref{keplet712-70})-ben lévõ sorozatok az $L$-hez tartoznak, de ez a nyelv nagyon korlátos. A számokon
megengedett egyetlen aritmetikai mûvelet egyetlen konstans hozzáadása. Azt írhatjuk, hogy '\texttt{a+13}', de azt nem,hogy
'\texttt{a+b}'. A megengedett egyetlen reláció egy szám és egy halmaz között az eleme reláció ($\in$ vagy $\notin$). A halmazok
között megengedett egyetlen reláció az egyenlõség ($\equiv$). Ezenkívül minden változót kvantálni kell a $\forall$ vagy a
$\exists$ kvantorral.\footnote{A szó szoros értelmében az $L$ mondatai\idez{az egyetlen rákövetkezés függvénnyel rendelkezõ
gyenge másodrendû monadikus logikához} tartoznak. A gyenge másodrendû logika megengedi a véges halmazok feletti
kvantifikálást. A $k$ rákövetkezés függvénnyel rendelkezõ monadikus logika a címkézetlen $k$-fák elmélete.}
%^^{weak second-order logic}^^{second-order logic}^^{$k$-ary
%trees}^^{WS1S} ^^{Monadic logic: Logic with only unary operators}

$L$-nek minden $k\le n$ hosszúságú mondata reprezentálható egy $6n$ hosszúságú bináris vektorral, ahol az utolsó $6(n-k)$ biten
nullák vannak. Legyen $f(x)$ egy olyan $6n$ változós Boole-függvény, ahol $f(x)=1$, ha $x$ az ~$L$ egy igaz mondata, és
$f(x)=0$, ha $x$ egy hamis mondatot reprezentál. Az $f(x)$ értéke nem specifikált, ha $x$ egy nem értelmes mondatot reprezentál. Egy
ilyen ~$f$ függvény igazságtáblája véges számú lépésben elõállítható Büchi és Elgot tételeinek megfelelõen 
\cite{Buchi1960,Elgot1961}.\angolnevindex{Elgot, Calvin Creston}\angolnevindex{Büchi, Julius Richard (1924--1984)} 

De a \idez{véges} nem jelenti azt, hogy \idez{megcsinálható}: Stockmeyer\angolnevindex{Stockmeyer, Larry Joseph} és 
Meyer\angolnevindex{Meyer, Albert Ronald da Silva} bizonyította, hogy
\begin{equation}
\hbox{$C(f)>2^{r-5}$},\qquad\hbox{ha $n\ge 460+.302r+5.08\ln r$ és $r>36$}\koz.\label{keplet712-71}
\end{equation}
Végeredményben, ha $n=621$, akkor $C(f)>2^{426}>10^{128}$. \textit{Ennyi sok kapuból álló Boole-lánc
sohasem építhetõ meg}, mivel $10^{128}$ egy nagyvonalú felsõ becslés az univerzumbeli összes protonok számára. Ez egy
meglehetõsen kicsi, véges probléma, ami megoldva soha nem lesz. Stockmeyer és Meyer bizonyításának részletei a \cite{Stockmeyer2002}
cikkben jelentek meg. Az alapötlet az, hogy bár az $L$ nyelv korlátozott, de elég gazdag igazságtáblák és Boole-láncok 
összetettségének eléggé rövid mondatokkal való leírásához. Így aztán $f$-nek olyan inputokat kell kezelni, amelyek önmagukra 
hivatkoznak.\index{önhivatkozás = self-reference}\index{diagonizálás = diagonalization}
\index{kombinatorikus összetettség alsó korlátai = lower bounds on combinational complexity|)}


\medskip \noindent \textbf{További olvasnivaló.} Jelentõs cikkek ezreit írták a Boole-kapukból álló hálózatokról, mivel 
az ilyen hálózatok az elmélet és a gyakorlat sok vonatkozásában alapvetõek. Ebben a részben olyan témakörökre
koncentrálunk, amelyek a szekvenciális számítógépek programozásával vannak kapcsolatban. Azonban a párhuzamos
számításokkal kapcsolatos témákat is behatóan vizsgáljuk, mint például a kis mélységû hálózatok, amelyekben a kapuk bemenetszáma
tetszõleges (\idez{nem korlátozott bemenet})\index{mélység = depth}\index{bemenet szám = fan-in}. Wegener a \cite{Wegener1987}
\angolnevindex{Wegener, Ingo Werner (1950--2008)} könyvében a teljes tárgykör nagyon jó bevezetését nyújtja.

Fõleg olyan Boole-láncokkal foglalkozunk, amelyekben minden bináris mûvelet egyformán fontos. A mi szempontunkból, az olyan
kapuk mint a $\xor$ vagy a $\cnimp$ nem kevésbé fontosak, mint az $\wedge$ vagy a $\vee$ kapuk. De az is természetes, hogy ha 
monoton függvényt\index{monoton függvény = monotone function} akarunk kiszámítani, úgy gondoljuk, hogy elegendõ csak monoton 
mûveleteket használni, mint a $\wedge$ és a $\vee$. 
Razborov \angolnevindex{Razborov, Alexander Alexandrovics ({\rus Razborov, Aleksandr Aleksandrovich})} meglepõ bizonyítási 
technikát fejlesztett ki annak belátására, hogy a monoton mûveletek önmagukban korlátozott képességûek. Megmutatta például, 
hogy minden olyan ÉS-VAGY lánc\index{ÉS-VAGY lánc = ÉS-VAGY chain} költsége biztosan $n^{\Omega(\lg n)}$, amellyel egy 
$0$ és ~$1$-esekbõl álló\index{nullaegymátrixok@0--1 mátrixok = 0--1 matrices} 
$n\times n$-es mátrix permanensérõl \index{permanens = permanent} 
meg akarjuk állapítani, hogy nulla vagy egy {lásd \cite{Razborov1985b,Razborov1985}}. Ezzel szemben a 7.5.1. pontban látni 
fogjuk, hogy ez a probléma ekvivalens a \idez{páros illesztés}-sel\index{páros illesztés = bipartite matching}, ami mindössze
$O(n^{2.5})$ lépésben megoldható. Továbbá ebben a pontban a hatékony módszereket kissé nagyobb költségû
Boole-láncokként\index{Boole-lánc = Boolean chain} lehet implementálni, ahol megengedjük az $\wedge$-en és a $\vee$-on kívül a 
negáció vagy más Boole-mûveletek használatát is. (Pratt\angolnevindex{Pratt, Vaughan Ronald} ezt \idez{a negatív gondolkodás erejének} 
nevezte.) Razborov\angolnevindex{Razborov, Alexander Alexandrovics ({\rus Razborov, Aleksandr Aleksandrovich})} 
módszerérõl egy bevezetés található a \ref{gyak712-85}. és a \ref{gyak712-86}. gyakorlatban.


\vspace{8mm}
\textbf{GYAKORLATOK}
\vspace{2mm}
\begin{small}
\begin{gyak}
%%% 1
\ujgyak \label{gyak712-1}\sz{24}
A (\ref{keplet712-6})-os formula által leírt \idez{véletlen} függvény egy 4~költségû, 
4~mélységû\index{mélység = depth} Boole-láncnak felel meg.\index{véletlen függvény = random function} 
Keressünk olyan 3 mélységû formulát, melynek költsége ugyanannyi.
%%% 2
\ujgyak \label{gyak712-2}\sz{21}
Mutassunk olyan 3 mélységû, 5 költségû formulát, mellyel kiszámítható\index{medián = median}  
(a) $w\xor \left\langle xyz\right\rangle,$ illetve 
(b) $w\land \left\langle xyz\right\rangle$.
%%% 3
\ujgyak \label{gyak712-3}\sz{M23}
\cite{Finikov1957}\angolnevindex{Finikov, Borisz Ivanovics ({\rus Finikov, Boris Ivanovich})} 
Bizonyítsuk be, hogy ha egy $f\left(x_1,\ldots,x_n\right)$ Boole-függvény pontosan $k$ pontban igaz, akkor 
$L(f)<2n+\left(k-2\right)2^{k-1}$. Tekintsük a $k=3$, $n=10^6$ esetet.
%%% 4
\ujgyak \label{gyak712-4}\sz{M26}
\cite{Spira1971}\angolnevindex{Spira, Philip Martin}
Igazoljuk, hogy bármely $f$ Boole-függvény esetén a minimális mélységre, illetve formula hosszra teljesül, hogy
$\lg L(f) < D(f) \leq \alpha \lg L(f) +1$, ahol $\alpha = 2 / \lg(\frac{3}{2}) \approx 3.419$. 
\textit{Útmutatás.} Minden $r\geq 3$ belsõ csúcsot tartalmazó bináris fában létezik $s$ belsõ csúcsból álló részfa,
melyre $\frac{1}{3}r \leq s < \frac{2}{3}r$.
%%% 5
\ujgyak \label{gyak712-5}\sz{21}
Az $F_n(x_1,\ldots,x_n)= \left\langle x_1^{F_1} x_2^{F_2}\ldots x_{n-1}^{F_{n-1}} x_n^{F_{n-2}}\right\rangle$
Fibonacci küszöbfüggvényt\index{Fibonacci küszöb-függvény = Fibonacci threshold function},
ahol $n\geq 3$, már elemeztük a \ref{gyak711-101} gyakorlatban. Létezik-e hatékony módszer a kiértékelésére?
%%% 6
\ujgyak \label{gyak712-6}\sz{20}
Igaz vagy hamis: egy $f\left(x_1,\ldots,x_n\right)$ függvény akkor és csak akkor normalizált,
ha eleget tesz az $f\left(x_1,\ldots,x_n\right)\land y=f\left(x_1\land y,\ldots,x_n\land y\right)$
általános disztributív szabálynak.\index{disztributív szabály = distributive law}
%%% 7
\ujgyak \label{gyak712-7}\sz{20}
Alakítsuk át az `$x_5 = x_1\nor x_4$, $x_6=\bar x_2\vee x_5$, $x_7=\bar x_1\wedge\bar x_3$' Boole-láncot
egy vele ekvivalens $\left(\hat{x}_5,\hat{x}_6,\hat{x}_7,\hat{x}_8\right)$ lánccá, 
melyben minden lépés normalizált.\index{normalizált = normal}
%%% 8
\ujgyak \label{gyak712-8}\sz{20}
Magyarázzuk meg, hogy (\ref{keplet712-11}) miért lehet az $x_k$ változó igazságtáblája.
%%% 9
\ujgyak \label{gyak712-9}\sz{20}
Az L algoritmus\index{L algoritmus = Algorithm L} tetszõleges $f$ függvényhez megadja a legrövidebb formula hosszát,
de semmilyen további információval nem szolgál. Egészítsük ki az algoritmust úgy, hogy az egy, 
(\ref{keplet712-6})-hoz hasonló tényleges minimális hosszúságú formulát is megadjon.
%%% 10
\ujgyak \label{gyak712-10}\sz{20}
Módosítsuk az L algoritmust oly módon, hogy az $L(f)$ helyett $D(f)$-et számítsa ki.
%%% 11
\ujgyak \label{gyak712-11}\sz{22}
Módosítsuk az L algoritmust úgy, hogy az $L(f)$ helyett az $U(f)$ felsõ korlátot,
valamint a szövegben bemutatott $\phi(f)$~lábnyomot\index{lábnyom = footprint} számítsa ki.
%%% 12
\ujgyak \label{gyak712-12}\sz{15}
Milyen Boole-lánc felel meg a (\ref{keplet712-13})-as minimális-memóriájú
\index{minimális-memória = minimum-memory} sémának?
%%% 13
\ujgyak \label{gyak712-13}\sz{16}
Milyen igazságtáblák tartoznak a (\ref{keplet712-13})-as példa $f_1$, $f_2$, $f_3$, $f_4$ és $f_5$ függvényeihez?
%%% 14
\ujgyak\label{gyak712-14} \sz{22}
Hogyan lehet alkalmas módon meghatározni a (\ref{keplet712-17})-es függvénnyel leírt $5n(n-1)$ igazságtáblát, ha ismerjük 
$g$ igazságtábláját? (Használjunk bitenkénti mûveleteket,\index{bitenkénti mûvelet = bitwise operation} 
mint (\ref{keplet712-15})-ben és (\ref{keplet712-16})-ban.)
%%% 15
\ujgyak \label{gyak712-15}\sz{28}
Hogyan számíthatóak ki a lehetõ legrövidebb módon az alábbi függvények minimális memória felhasználás mellett:
\index{szimmetrikus függvény = symmetric function}
(a) $S_2(x_1,x_2,x_3,x_4)$;
(b) $S_1(x_1,x_2,x_3,x_4)$;
(c) a (\ref{keplet712-18}) függvény.
%%% 16
\ujgyak\label{gyak712-16} \sz{F33} Lássuk be, hogy a $2^{128}$ $f(x_1,\ldots,x_7)$ Boole-függvénybõl kevesebb, 
mint $2^{118}$ számítható ki minimális memóriával.\index{minimális memória = minimum memory}
%%% 17
\ujgyak\label{gyak712-17} \sz{25} (M. S. Paterson\angolnevindex{Paterson, Michael Stewart}, 1977.) 
Bár az $f(x_1,\ldots,x_n)$ Boole-függvényt nem lehet mindig $n$ regiszterben kiértékelni, lássuk be, hogy $n+1$ regiszter 
viszont mindig elegendõ. Más szóval, mutassuk meg, hogy ha feltesszük, hogy $0\le j(i), k(i)\le n$, akkor mindig van 
a (\ref{keplet712-13})-hoz hasonló mûveletsorozat az $f(x_1,\ldots,x_n)$ kiszámítására.
%%% 18
\ujgyak\label{gyak712-18} \sz{35} Vizsgáljuk meg az $f(x_1,x_2,x_3,x_4,x_5)$ kiszámítását optimális minimális-memóriával: hány 
olyan ötváltozós függvényosztály\index{ötváltozós függvények = five-variable functions} létezik, ahol 
$C_m(f)=r$ (ha $r = 0,$ 1, 2,~\dots)?
%%% 19
\ujgyak\label{gyak712-19} \sz{M22} Igazoljuk, hogy ha egy Boole-láncban $n$ változót használunk fel és a lánc hossza $r<n+2$, 
akkor igazoljuk, hogy létezik vagy egy fentrõl-lefelé\index{fentrõl-lefelé = top-down} vagy egy 
lentrõl-felfelé\index{lentrõl-felfelé = bottom-up} elõállítás.
%%% 20
\ujgyak\label{gyak712-20} \sz{40} (R. Schroeppel, 2004)\angolnevindex{Schroeppel, Richard Crabtree} Egy Boole-lánc 
\idez{kényszerítõ},\index{kényszerítõ függvény = canalizing function}\index{ÉS/VAGY/NEM áramkör = ÉS/VAGY/NEM circuit} ha az 
$\xor$ vagy $\leqv$ mûveleti jelek egyikét sem használja. Keressük meg az összes 4 változós 
függvényre,\index{négyváltozós@4 változós függvény = 4-variable function} a fenti megszorítások mellett az optimális költséget, 
hosszt és mélységet. Ad-e a lábnyom heurisztika\index{lábnyom = footprint} optimális eredményeket?
%%% 21
\ujgyak\label{gyak711-21} \sz{46} Hány darab négyváltozós függvényhez\gyakindex{négyváltozós függvény = four-variable function} 
találtak a Harvard kutatói optimális elektroncsöves áramkört\gyakindex{elektroncsöves áramkör = vacuum-tube circuit} 1951-ben?
%%% 22
\ujgyak\label{gyak711-22} \sz{21} Mutassuk meg, hogy a \ref{abra712-10}. ábrán az $S_3$-hoz tartozó lánc tulajdonképpen 
magában foglalja a 9. ábrán lévõ $S_{2,3}$-hoz tartozó láncot. Keressünk hasonló 
láncot $S_2(x_1,x_2,x_3,x_4,x_5)$-re.\gyakindex{szimmetrikus függvények = symmetric functions} 
%%% 23
\ujgyak\label{gyak711-23} \sz{23} A \ref{abra712-10}. ábra a lehetséges 64 ötváltozós szimmetrikus függvény közül 
csak 16-ot illusztrál. Mutassuk meg, hogyan írjuk fel az optimális láncokat a többiekre.
%%% 24
\ujgyak\label{gyak711-24} \sz{47} 
Igaz-e, hogy minden szimmetrikus $f$ függvényre $C_m(f) = C(f)$?
%%% 25
\ujgyak\label{gyak711-25} \sz{17} 
Tegyük fel, hogy olyan Boole-láncot akarunk, ami magában foglal \textit{minden} 
$n$ változós Boole-függvényt. Legyen $f_k(x_1,\ldots,x_n)$ egy olyan függvény, ahol 
$k$ bináris ábrázolása a függvény igazságtáblája, $0\le k<m=2\losup{\mkern.5mu2^n}$-re. 
Mi a $C(f_0f_1\ldots f_{m-1})$?
%%%
%%%26
%%%
\ujgyak\label{gyak712-26} \sz{25} Igaz vagy hamis: 
Ha $f(x_0,\ldots,x_n)=(x_0\land g(x_1,\ldots,x_n))\xor h(x_1,\ldots,x_n)$, ahol $g$ és $h$ nemtriviális Boole-függvények 
és együttes költségük $C(gh)$, akkor $C(f)\!=\!2+C(gh)$.\tighten
%%%
%%%27
%%%
\ujgyak\label{gyak712-27} \sz{23} Lehet-e a (\ref{keplet712-22}) teljes összeadót\index{teljes összeadó = full adder} mindössze
öt lépéssel implementálni minimális memória\index{minimális memória = minimum memory} felhasználása mellett 
(azaz mindössze három egy bites regiszterrel)?
%%%
%%%28
%%%
\ujgyak\label{gyak712-28} \sz{26} Bizonyítsuk be, hogy $C(u'v')=C(u''v'')=5$ teljesül a következõ kétkimenetû függvényekre: 
$$(u'v')_2=\bigl(x+y-(uv)_2\bigr)\mod4,\qquad (u''v'')_2=\bigl(-x-y-(uv)_2\bigr)\mod 4.$$
Használjuk ezeket a függvényeket $[(x_1+\cdots+x_n)\mod 4=0]$ kevesebb, mint $2.5n$ lépésben való kiértékelésére.
%%%
%%%29
%%%
\ujgyak\label{gyak712-29} \sz{M28} Bizonyítsuk be, hogy a (\ref{keplet712-21}) képlettel kapcsolatban definiált 
\textit{teljes összeadó áramkör}\gyakindex{teljes összeadó áramkör = full adder} a (\ref{keplet712-27}) \textit{általános oldalösszeg} 
\index{oldalösszeg = sideways addition} kiszámítására bemutatott áramkör mélysége $O(\lg n)$.
%%%
%%%30
%%%
\ujgyak\label{gyak712-30} \sz{M25} Oldjuk meg az oldalösszeadások $s(n)$ költségére vonatkozó (\ref{keplet712-28}) 
bináris rekurzív egyenletet.\index{bináris rekurzió = binary recurrence} az oldalsó összegek
\index{oldalösszeadás = sideways addition}\index{oldalösszeadás függvény ($\nu x$) = sideways addition function $(\nu x)$}  
%%%
%%%31
%%%
\ujgyak\label{gyak712-31}
\sz{21} Bizonyítsuk be, hogy $C(f)\le 5n+O(n/\!\log n)$, ha $f(x_1,\ldots,x_n)$ szimmetrikus.
%%%
%%%32
%%%
\ujgyak\label{gyak712-32} \sz{F16} Miért teljesül (\ref{keplet712-30}) megoldására $t(n)=2^n+O(2^{n/2})$?
%%%
%%%33
%%%
\ujgyak\label{gyak712-33} \sz{F22} Igaz vagy hamis: Ha $1\le N\le 2^n$ és $n\to\infty$ és $N\to\infty$, akkor $\{x_1,\ldots,x_n\}$ 
elsõ $N$ mintermje\index{minterm = minterm} kiértékelhetõ $N+O(\sqrt N\,)$ lépésben.
%%%
%%%34
%%%
\ujgyak\label{gyak712-34} \sz{22} Egy \textit{prioritás kódolónak}\index{prioritás kódoló = priority encoder} $n=2^m-1$ 
bemenete van -- jelölje $x_1\ldots x_n$ -- és $m$ kimenete -- $y_1\ldots y_m$ --, ahol $(y_1\ldots y_m)_2=k$
pontosan akkor igaz, ha $k=\max\{j\mid j=0$ vagy $x_j=1\}$.
Tervezzünk egy ilyen kódolót $O(n)$ költséggel és $O(m)$ mélységgel.
%%%
%%%35
%%%
\ujgyak\label{gyak712-35} \sz{23} Mutassuk meg, hogy ha $n>1$, akkor az $x_1\land\cdots\land x_{k-1}\land x_{k+1}\land\cdots\land x_n$ 
($1\le k\le n$) konjunkciók kiszámíthatóak $(x_1,\ldots,x_n)$-bõl legfeljebb $3n-6$ teljes költséggel.
%%%
%%%36
%%%
\ujgyak\label{gyak712-36} \sz{M28} \cite{Ladner1980}\angolnevindex{Fischer, Michael John}\angolnevindex{Ladner, Richard Emil}
Legyen $y_k$ az $x_1\land\cdots\land x_k$ \idez{prefix}\index{prefix = prefix} minden $1\le k\le n$-re. 
Nyilvánvaló, hogy $C(y_1\ldots y_n)=n-1$ és $D(y_1\ldots y_n)=\lceil\lg n\rceil$, de nem tudjuk egyszerre minimalizálni a 
költséget és a mélységet. Keressünk egy olyan optimális mélységû láncot, melynek a költsége $<4n$.
%%%
%%%37
%%%
\ujgyak\label{gyak712-37} \sz{M28} (Marc Snir, 1986.) \cite{Snir1986}\angolnevindex{Snir, Marc} 
Adott $n\ge m\ge 1$ esetén tekintsük a következõ algoritmust:
%kellene még egy kis hely az algoritmus felett, de nem akarja beszúrni...

\medskip
\algindentset{\hskip\parindent S1}

\algstep S1. (Elõre haladó ciklus.) Minden $t\gets 1$, 2, \dots, $\lceil\lg m\rceil$-re
legyen $x_{\min(m,2^t k)}\gets x_{2^t(k-1/2)}\wedge x_{\min(m,2^t k)}$
minden $k\ge 1$ és $2^t(k-1/2)<m$ esetén.

\algstep S2. (Visszafelé haladó ciklus.) Minden $t\gets\lceil\lg m\rceil-1$, $\lceil\lg m\rceil-2$, \dots, 1-re legyen
$x_{2^t(k+1/2)}\gets x_{2^t k}\land x_{2^t(k+1/2)}$ minden $k\ge 1$ és $2^t(k+1/2)<m$ esetén.

\algstep S3. (Kiterjesztés.) Minden $k\gets m+1$, $m+2$, \dots, $n$-re
legyen $x_k\gets x_{k-1}\land x_k$.\quad\slug\smallskip

a) Bizonyítsuk be, hogy az algoritmus megoldja a \ref{gyak712-36}. gyakorlat prefix 
problémáját\index{prefix probléma = prefix problem}, azaz $(x_1,x_2,\ldots,x_n)$-et 
$(x_1,x_1\land x_2,\ldots,x_1\land x_2\land\cdots\land x_n)$-re képezi le.

b) Legyen $c(m,n)$ és $d(m,n)$ a költsége és a mélysége a megfelelõ 
Boole-láncnak. Bizonyítsuk be, hogy $c(m,n)+d(m,n)=2n-2$, ha $n$ elég nagy.

c) Mit jelent adott $n$ esetén a $d(n)=\min_{1\le m\le n}d(m,n)$ érték? Mutassuk meg, hogy $d(n) < 2 \lg n$.

d) Bizonyítsuk be, hogy létezik $2n-2-d$ költségû és $d$ mélységû Boole-lánc a prefix probléma megoldására, ha $d(n)\le d<n$.
(A \ref{gyak712-81}. gyakorlat alapján ez a költség optimális is.)
%%%
%%%38
%%%
\ujgyak\label{gyak712-38} \sz{25} Az 5.3.4. pontban megvizsgáltuk a \textit{rendezõ hálózatokat}\index{rendezõ hálózat = 
sorting network} és azt kaptuk, hogy $\hat S(n)$ összehasonlító egység\index{összehasonlító egység = comparator module} 
elegendõ $n$ szám -- $(x_1,x_2,\ldots,x_n)$ -- növekvõ sorrendbe rendezéséhez. Ha az $x_j$ bemenetek csak $0$-k
és 1-ek lehetnek, minden összehasonlító ekvivalens két kapuval, $(x\land y,x\lor y)$-nal. Így egy rendezõ hálózat 
megfeleltethetõ egy Boole-láncnak, ami $(x_1,x_2,\ldots,x_n)$-nek $n$ részfüggvényét számítja ki.

a) Melyik az az $n$ függvény -- $f_1f_2\ldots f_n$ --, amelyeket egy rendezõ hálózat kiszámít? 

b) Mutassuk meg, hogy az $\{f_1,f_2,\ldots,f_n\}$ függvények kiszámíthatóak $O(n)$ lépésben egy $O(\lg n)$ mélységû lánccal. 
(Tehát a rendezõ hálózatok a Boole-függvényekre alkalmazva aszimptotikusan nem optimálisak.)
%%%
%%%39
%%%
\ujgyak\label{gyak712-39} \sz{M21} (Paterson és Klein \cite{Paterson1980}.)
\angolnevindex{Paterson, Michael Stewart}\angolnevindex{Klein, Peter}
Implementáljuk (\ref{keplet712-31}) $M_m(x_1,\ldots,x_m;y_0,y_1,$ $\ldots,y_{2^m-1})$
$2^m$-es multiplexerét\index{kettõadem@$2^m$-es multiplexer = $2^m$-way multiplexer} egy hatékony lánccal, 
ami egyszersmind igazolja a $C(M_m)\le 2n+O(\sqrt n)$ és $D(M_m)\le m+O(\lg m)$ felsõ korlátokat is.
%%%
%%%40
%%%
\ujgyak\label{gyak712-40} \sz{25} 
Ha $n\ge k\ge 1$, legyen $f_{nk}(x_1,\ldots,x_n)$ a \idez{egy sorban $k$}\index{egy sorban $k$ = $k$ in a row} 
függvény, azaz\index{egymást követõ 1-esek = consecutive 1's}
$$(x_1\land\cdots\land x_k)\lor
  (x_2\land\cdots\land x_{k+1})\lor\cdots\lor
  (x_{n+1-k}\land\cdots\land x_n).$$
Mutassuk meg, hogy a $C(f_{nk})$ költség kevesebb, mint $4n-3k$.
%%%
%%%41
%%%
\ujgyak\label{gyak712-41} \sz{M23} (\textit{Feltételes összeg összeadók.})\index{feltételes összeg összeadó = conditional-sum adder}
A (\ref{keplet712-25}) bináris összeadás $O(\lg n)$ mélység melletti megvalósításának egyik módja a \ref{gyak712-4}. gyakorlat 
multiplexeres\index{multiplexer = multiplexer} trükkjén alapszik: Ha 
$(xx')_2+(yy')_2=(zz')_2$, ahol $\vert x'\vert=\vert y'\vert=\vert z'\vert$, akkor vagy 
$(x)_2+(y)_2=(z)_2$ és $(x')_2+(y')_2=(z')_2$ teljesül, vagy pedig $(x)_2+(y)_2+1=(z)_2$ és
$(x')_2+(y')_2=(1z')_2$. Hogy idõt takarítsunk meg, kiszámíthatjuk $(x)_2+(y)_2$ és $(x)_2+(y)_2+1$ értékét egyszerre mialatt 
$(x')_2+(y')_2$-t számítjuk ki. Utána, ha már tudjuk, hogy $(x')_2+(y')_2$ kevésbé szignifikáns része eredményez-e 
átvitelt,\index{átvitel = carry} multiplexerekkel kiválaszthatjuk a helyes biteket a legszignifikánsabb részhez. 
Ha $n=2^m$ és ezt módszert rekurzívan alkalmazzuk $2n$-bites összeadók építésére $n$-bites összeadókból, hány kapura van szükség? 
Mekkora lesz a mélység?
%%%
%%%42
%%%
\ujgyak\label{gyak712-42} \sz{25} A (\ref{keplet712-25}) bináris összeadásban legyen $u_k=x_k\land y_k$ és $v_k=x_k\xor y_k$ 
minden $0\le k<n$ esetén.

a) Mutassuk meg, hogy $z_k=v_k\xor c_k$, ahol a $c_k$ átvitel bitekre\index{átvitel bit = carry bit} teljesül, hogy
$$c_k=u_{k-1}\lor(v_{k-1}\land(u_{k-2}\lor(v_{k-2}\land(\cdots(u_1\land v_{0})\cdots))))\koz.$$

b) Legyen $U_k^k=0$, $V_k^k=1$ és $U_j^{k+1}=u_k\lor(v_k\land U_j^k)$, $V_j^{k+1}=v_k\land V_j^k$,
ha $k\ge j$. Bizonyítsuk be, hogy $c_k=U_0^k$ és $U_i^k=U_j^k\lor(V_j^k\land U_i^j)$, $V_i^k=V_j^k\land V_i^j$, ha
$i\le j\le k$.\breathe

c) Legyen $h(m)=2^{m(m-1)/2}$. Mutassuk meg, ha $n=h(m)$, akkor a $c_1$, \dots,~$c_n$ átvitel bitek mind kiértékelhetõek 
úgy, hogy a mélység $(m+1) m/2\approx \lg n+\sqrt{2\lg n}$ és a teljes költség $O(2^mn)$.
%%%
%%%43
%%%
\vspace{-2mm}
\ujgyak\label{gyak712-43} \sz{28} Egy \textit{véges állapotú átalakító}\index{véges állapotú átalakító = finite state transducer} 
egy absztrakt gép $A$ véges bemenet ábécével, $B$ véges kimenet ábécével és a belsõ állapotok véges 
$Q$ halmazával. Az állapotok egyike, $q_0$, az úgynevezett \idez{kezdõ állapot}. Egy adott $\alpha=a_1\ldots a_n$ füzérre, 
ahol minden $a_j\in A$, a gép kiszámítja a $\beta=b_1\ldots b_n$ füzért, ahol minden $b_j\in B$, a következõféleképpen: 

\medskip
\algindentset{\hskip\parindent T1}

\algstep T1. (Kezdeti értékek beállítása.) Legyen $j\gets 1$ és $q\gets q_0$.

\algstep T2. (Kész?) Az algoritmus befejezõdik, ha $j>n$.

\algstep T3. ($b_j$ kimenet.) Legyen $b_j\gets c(q,a_j)$.

\algstep T4. ($j$ növelése.) Legyen $q\gets d(q,a_j)$, $j\gets j+1$, és
folytassuk a T2 lépéssel.\quad\slug\smallskip\noindent 

A gép beépített utasításokkal rendelkezik a $c(q,a)\in B$ és $d(q,a)\in Q$ értékek meghatározására minden $q\in Q$ állapot és 
minden $a\in A$ karakter esetében. A gyakorlat célja, hogy megmutassuk, hogy ha egy ilyen véges állapotú átalakító $A$ és $B$ 
ábécéit binárisan kódoljuk, akkor a $\beta$ füzér kiszámítható $\alpha$-ból egy $O(n)$ méretû és $O(\lg n)$ mélységû Boole-lánccal.

a) Tekintsük azt a problémát, hogyan lehet egy $a_1\ldots a_n$ bináris vektort $b_1\ldots b_n$-re változtatni, ahol
$$b_j\;\gets\;a_j\xor [\hbox{$a_j=a_{j-1}=\cdots=a_{j-k}=1$ és $a_{j-k-1}=0$, ahol $k$ páratlan}]\koz,$$ 
feltéve, hogy $a_0=0$. Például $\alpha=1100100100011111101101010\mapsto \beta =1000100100010101001001010$. %^^{pi}
Bizonyítsuk be, hogy ezt a transzformációt meg lehet valósítani egy véges 
állapotú átalakítóval úgy, hogy $\vert A\vert=\vert B\vert=\vert Q\vert=2$.

b) Tegyük fel, hogy egy véges állapotú átalakító a $q_j$ állapotba került 
$a_1\ldots a_{j-1}$ beolvasása után. Hogyan lehet a $q_1\ldots q_n$ sorozatot
kiszámítani $O(n)$ költségû és $O(\lg n)$ mélységû Boole-lánccal, felhasználva Ladner\angolnevindex{Ladner, Richard Emil} 
és Fischer\angolnevindex{Fischer, Michael John} konstrukcióját a \ref{gyak712-36}. gyakorlatból?
(Ebbõl a $q_1\ldots q_n$ sorozatból már könnyen kiszámítható $b_1\ldots b_n$, hiszen $b_j=c(q_j,a_j)$.)

c) Alkalmazzuk a (b)-ben látott módszert az (a)-ban bemutatott problémára. 
%%%
%%%44
%%%
\ujgyak\label{gyak712-44} \sz{26} \cite{Ladner1980}\angolnevindex{Ladner, Richard Emil}\angolnevindex{Fischer, Michael John} 
Mutassuk meg, hogy a (\ref{keplet712-25}) bináris összeadás problémájára lehet úgy is tekinteni, mint egy véges állapotú 
átalakításra. Jellemezzük a \ref{gyak712-43}. gyakorlat konstrukciójával kapható Boole-láncot, ha 
$n=2^m$, és hasonlítsuk össze a \ref{gyak712-41}. gyakorlat feltételes összeg összeadójával.
%%%
%%%45
%%%
\ujgyak\label{gyak712-45} \sz{F20} Miért nem érvelhetünk az S tétel bizonyításában egyszerûen azzal, hogy összesen 
$n^2(n{+}1)^2\ldots(n{+}r{-}1)^2$-féleképpen lehet megválasztani $j(i)$ és $k(i)$ értékét úgy, hogy $1\le j(i),k(i)<i$?
%%%
%%%46
%%%
\ujgyak\label{gyak712-46} \sz{F21} Legyen $\alpha(n)=c\bigl(n,\lfloor2^n\!/n\rfloor\bigr)/2^{2^n}$
azon $f(x_1,\ldots,x_n)$ $n$ változós Boole-függvények aránya, 
amelyekre $C(f)\le2^n\!/n$. Bizonyítsuk be, hogy $\alpha(n)$ gyorsan tart nullához, ha $n\to \infty$.
%%%
%%%47
%%%
\ujgyak\label{gyak712-47} \sz{M23} Terjesszük ki az S tételt az $n$ bemenetû $m$ kimenetû függvényekre is.
%%%
%%%48
%%%
\ujgyak\label{gyak712-48} \sz{F23} Határozza meg a legkisebb olyan $r = r(n)$ egész értéket, amelyre
$(r-1)!2^{2^n}\le 2^{2r+1}(n{+}r{-}1)^{2r}$ teljesül,
(a)~pontosan, ha $1\le n\le 16$; (b)~aszimptotikusan, ha $n\to \infty$.
%%%
%%%49
%%%
\ujgyak\label{gyak712-49} \sz{F25} 
Bizonyítsuk be, hogy ha $n\to \infty$, akkor majdnem minden $f(x_1,\ldots,x_n)$
Boole-függvény minimális hosszára $L(f)>2^n/\lg n-2^{n+2}/(\lg n)^2$ teljesül.
%%%
%%%50
%%%
\ujgyak\label{gyak712-50} \sz{24} Melyek a (\ref{keplet712-35}) prímszám-függvény\index{prímszám-függvény = prime-number function} 
prím implikánsai\index{prím implikáns = prime implicant} és prím klózai\index{prím klóz = prime clause}?
Írjuk fel a függvényt minimális hosszú (a) DNF (b) KNF alakban.
%%%
%%%51
%%%
\ujgyak\label{gyak712-51} \sz{20} 
A prímszám felismerõ mely reprezentációja helyettesíti (\ref{keplet712-37})-et,
ha az igazságtábla sorait $x_5x_6$ alapján készítjük el $x_1x_2$ helyett?
%%%
%%%52
%%%
\ujgyak\label{gyak712-52} \sz{23} 
Mely $k$ és $l$ értékek mellett lesz a (\ref{keplet712-38}) felsõ korlát minimális, ha $5\le n\le 16$?
%%%
%%%53
%%%
\ujgyak\label{gyak712-53} \sz{F22} Becsüljük meg (\ref{keplet712-38}) értékét, ha $k=\lfloor 2\lg n\rfloor$, 
$l=\lceil2^k\!/(n-3\lg n)\rceil$ és $n\to \infty$.
%%%
%%%54
%%%
\ujgyak\label{gyak712-54} \sz{29} Keressünk egy rövid Boole-láncot a következõ hat függvény kiértékelésére: 
$f_j(x)= [x_1x_2x_3x_4\in A_j]$, ahol $A_1=\{0010,0101,1011\}$, $A_2=\{0001,1111\}$, $A_3=\{0011,0111,\allowbreak1101\}$, 
$A_4=\{1001,1111\}$, $A_5=\{1101\}$, $A_6=\{0101,1011\}$. (Ez a hat függvény szerepel a (\ref{keplet712-37}) prímszám felismerõben.)
A kapott láncot hasonlítsuk össze Lupanov\angolnevindex{Lupanov, Oleg Boriszovics (1932--2006, {\rus Lupanov, Oleg Borisovich})} 
általános módszerének minterm-elõször kiértékelési sémájával.
%%%
%%%55
%%%
\ujgyak \label{gyak712-55}
\sz{34} Mutassuk meg, hogy a 6 bites prímszám felismerõ függvény költsége legfeljebb 14.
%%%
%%%56
%%%
\ujgyak\label{gyak712-56} \sz{16} Magyarázzuk meg, hogy miért nulla költségû valamennyi 14 vagy több 
közömbös\index{közömbös = don't cares} hellyel rendelkezõ függvény a \ref{tablazat712-3}. táblázatban.
%%%
%%%57
%%%
\ujgyak\label{gyak712-57} \sz{19} 
Mely hét szegmenses \idez{számjegyek} kerülnek megjelenítésre, ha $(x_1x_2x_3x_4)_2>9$ (\ref{keplet712-45})-ben?
%%%
%%%58
%%%
\ujgyak\label{gyak712-58} \sz{30} 
Egy $4{\times}4$ bites \textit{S-doboz}\index{S-doboz = S-box} a $\{0000,0001,\ldots,1111\}$ 4 bites 
vektorok egy permutációja. Az ilyen permutációkat ismert kriptográfiai rendszerben szokták felhasználni, 
mint amilyen az orosz {\mc GOST} 28147 (1989) szabvány.
% developed in 1989 by A. ^{Zabotin} and others.
Minden $4{\times}4$ bites S-doboz megfelel négy függvény, 
$f_1(x_1,x_2,x_3,x_4)$,
\dots, %$f_2(x_1,x_2,x_3,x_4)$, $f_3(x_1,x_2,x_3,x_4)$,
$f_4(x_1,x_2,x_3,x_4)$ sorozatának, 
ezáltal egy $x_1x_2x_3x_4\mapsto f_1f_2f_3f_4$ leképezést megvalósítva.
\breathe
Találjuk meg az összes olyan $4{\times}4$-bites S-dobozt, amelyre $C(f_1)=C(f_2)=C(f_3) =$\linebreak 
\noindent $C(f_4)=7$.
%%%
%%%59
%%%
\ujgyak\label{gyak712-59} \sz{29} Az \ref{gyak712-58}. gyakorlat feltételeit kielégítõ egyik S-doboz 
$(\texttt{0},\ldots,\texttt{f})\mapsto (\texttt{0,6,5,b,3,9,f,e,c,4,$\linebreak 
\noindent $7,8,d}, \texttt{2,a,1})$, másképpen fogalmazva $(f_1,f_2,f_3,f_4)$ igazságtáblái rendre $(\texttt{179a}, 
\texttt{63e8}, \texttt{5b26}, \texttt{3e29})$. Keressünk egy Boole-láncot, ami ezt a négy \idez{maximálisan bonyolult} 
függvényt kevesebb, mint 20 lépésben  kiértékeli.
%%%
%%%60
%%%
\ujgyak\label{gyak712-60} \sz{23} (Frank Ruskey.)\angolnevindex{Ruskey, Frank} Tegyük fel, hogy $z=(x+y)\mod 3$, ahol
$x=(x_1x_2)_2$, $y=(y_1y_2)_2$, $z=(z_1z_2)_2$, %^^{addition modulo 3 and 5} ???
és minden kétbites érték csak 00, 01 vagy 10 lehet. Számítsuk ki $z_1$ és $z_2$ értékét $x_1$, $x_2$, $y_1$, $y_2$ értékébõl 
hat Boole-lépésben.
%%%
%%%61
%%%
\ujgyak\label{gyak712-61} \sz{34} A \ref{gyak712-60}. gyakorlatot folytatva keressünk egy jó módszert $z=(x+y)\mod 5$ kiszámítására,  
ezúttal a következõ három bites értékeket megengedve: 000, 001, 010, 011, 100.
%%%
%%%62
%%%
\ujgyak\label{gyak712-62} \sz{F23} 
Tekintsünk egy olyan véletlen parciális $n$ változós Boole-függvényt, amelynek a  $2^n c$ helyen adott az értéke és 
$2^n d$ helyen közömbös, ahol $c+d=1$. Bizonyítsuk be, hogy majdnem 
minden ilyen parciális függvény költsége több, mint $2^nc/n$.
%%%
%%%63
%%%
\ujgyak\label{gyak712-63} \sz{F35} (L. A. Sholomov, 1969 
\cite{Sholomov1969}.)\angolnevindex{Sholomov, Lev Abramovics ({\rus Sholomov, Lev Abramovich})}
A \ref{gyak712-62}. gyakorlatot folytatva bizonyítsuk be, hogy valamennyi fenti tulajdonságú függvény költsége 
$\le 2^n c/n(1+O(n^{-1}\lg n))$. \textit{Útmutatás:} Létezik egy olyan $2^m(1+k)$ elemû $x_1\ldots x_k$ vektorokból álló halmaz,  
amely belemetsz a $k$-dimenziós kocka\index{kdimenzióskocka@$k$-dimenziós kocka = $k$-cube} 
minden $(k-m)$-dimenziós részkockájába\index{részkocka = subcube}.
%%%
%%%64
%%%
\ujgyak\label{gyak712-64} \sz{25} (\textit{Bûvös tizenöt.})\index{bûvös tizenöt = magic fifteen} 
Két játékos felváltva választ számjegyeket 1-tõl 9-ig, minden számjegyet legfeljebb egyszer felhasználva. 
Ha van egyáltalán, akkor a gyõztes az, aki elõször tesz szert három olyan számjegyre, 
hogy azok összege éppen 15. Milyen stratégiát lenne érdemes használni?
%%%
%%%65
%%%
\ujgyak\label{gyak712-65} \sz{35} 
Módosítsuk a (\ref{keplet712-47})--(\ref{keplet712-56})-ban bemutatott amõba stratégiát úgy, hogy minden esetben 
jó döntést hozzon.
%%%
%%%66
%%%
\ujgyak\label{gyak712-66} \sz{20} 
Értékeljük a \ref{gyak712-65}. gyakorlatban választott lépéseket. Mindig optimálisak?
%%%
%%%67
%%%
\ujgyak\label{gyak712-67} \sz{40} Ahelyett, hogy csak egyetlen jó lépést keresnénk minden egyes pozícióra a amõba játékban, 
kereshetnénk az összeset is. Máshogy fogalmazva adott $x_1\ldots x_9o_1\ldots o_9$-hez megpróbálhatnánk kiszámítani a kilenc elemû 
$g_1\ldots g_9$ kimenetet, ahol \begingroup\def\O/{{\eightss O}}\def\X/{{\eightss X}}
$g_j=1$ akkor és csak akkor, ha a $j$ mezõ választása \X/ számára jó lépés lenne. 
Például a következõ tipikus esetekben ezek adódnak \X/ felkiáltójellel jelölt jó lépéseire: \endgroup

\begingroup\def\O/{{\eightss O}}\def\X/{{\eightss X}}%
\font\tiny=cmss8 at 3.6pt
\newdimen\uu \uu=.18pt
\uu=.18pt
\def\cell#1#2#3{\vrule height2.9pt depth.6pt width0pt
            \hbox to3.5pt{\hss\tiny\ifx#1.\else
              \kern#2\uu\raise#3\uu\hbox{#1}\fi\hss}}%
\def\\#1#2#3#4#5#6#7#8#9{\vcenter to11pt{\offinterlineskip
 \halign{\cell##&\vrule width.25pt\cell##&\vrule width.25pt\cell##\cr
 {#1}{-1}1&{#2}01&{#3}11\cr
 \noalign{\hrule height.25pt}
 {#4}{-1}0&{#5}00&{#6}10\cr
 \noalign{\hrule height.25pt}
 {#7}{-1}{-1}&{#8}0{-1}&{#9}1{-1}\cr}\kern0pt}}%
$$\\!!!!!!!!!;\
\\O...!....;\
\\!O!.!..!.;\
\\!.!.O.!.!;\
\\XO.!!.!..;\
\\X.O!..!.!;\
\\X!!!O!!!!;\
\\X.!.!O!..;\
\\X.!...!.O;\
\\O!!!X!!!!;\
\\!O!!X!!.!;\
\\OX.!!.!.!;\
\\!X.O!....;\
\\!X!!O!!.!;\
\\!X....O..;\
\\!X!!!!!O!\koz.
$$
\endgroup
Olyan gép ellen játszani sokkal nagyobb élvezet, amely ezek közül a lehetõségek közül választ véletlenszerûen, mint egy olyan 
ellen, ami mindig ugyanazt lépi. Az összes-jó-lépés probléma egyik vonzó megoldása annak kihasználása, hogy az amõbának 
nyolc szimmetriája van. %???
Képzeljünk el egy áramkört, amelynek 18 bemenete -- $x_1\ldots x_9o_1\ldots o_9$ -- és három kimenete -- $(c,s,m)$ -- van, 
melyek jelentése rendre \idez{sarok,} \idez{oldal} és \idez{közép}. Továbbá legyen elegendõ nyolc ilyen áramkört
megfelelõ módon összekapcsolni az elõállítani kívánt $g_j$ függvények kiszámításához:
\begin{equation*}
\begin{split}
g_1&=c(x_1x_2x_3x_4x_5x_6x_7x_8x_9o_1o_2o_3o_4o_5o_6o_7o_8o_9)\\
\noalign{\vskip-2pt} &\hskip5em{}\lor
      c(x_1x_4x_7x_2x_5x_8x_3x_6x_9o_1o_4o_7o_2o_5o_8o_3o_6o_9),\\
g_2&=s(x_1x_2x_3x_4x_5x_6x_7x_8x_9o_1o_2o_3o_4o_5o_6o_7o_8o_9)\\
\noalign{\vskip-2pt} &\hskip5em{}\lor
      s(x_3x_2x_1x_6x_5x_4x_9x_8x_7o_3o_2o_1o_6o_5o_4o_9o_8o_7),\\
g_3&=c(x_3x_2x_1x_6x_5x_4x_9x_8x_7o_3o_2o_1o_6o_5o_4o_9o_8o_7)\\
\noalign{\vskip-2pt} &\hskip5em{}\lor
      c(x_3x_6x_9x_2x_5x_8x_1x_4x_7o_3o_6o_9o_2o_5o_8o_1o_4o_7),\\
g_4&=s(x_1x_4x_7x_2x_5x_8x_3x_6x_9o_1o_4o_7o_2o_5o_8o_3o_6o_9)\\
\noalign{\vskip-2pt} &\hskip5em{}\lor
     s(x_7x_4x_1x_8x_5x_2x_9x_6x_3o_7o_4o_1o_8o_5o_2o_9o_6o_3),\qquad\ldots\\
g_9&=c(x_9x_8x_7x_6x_5x_4x_3x_2x_1o_9o_8o_7o_6o_5o_4o_3o_2o_1)\\
\noalign{\vskip-2pt} &\hskip5em{}\lor
          c(x_9x_6x_3x_8x_5x_2x_7x_4x_1o_9o_6o_3o_8o_5o_2o_7o_4o_1),\\
\end{split}
\end{equation*}
és $g_5$ mind a nyolc áramkör $m$ kimenetének összevagyolásával adódik.

Tervezzünk egy ilyen áramkört kevesebb, mint 2000 kapu felhasználásával.
%%%
%%%68
%%%
\ujgyak\label{gyak712-68} \sz{M25} Tekintsük az $n$ bites 
$\pi$-függvényt\index{pifüggvény$\pi$-függvény = $\pi$ function} 
$\pi_n(x_1\ldots x_n)$-et, melynek az értéke a $\pi$ bináris reprezentációjának 
legszignifikánsabb bitjétõl jobbra esõ $(x_1\ldots x_n)_2$-edik bit.
Bizonyítja-e a 4.3.1-39. gyakorlatban $\pi$ tetszõleges bitjeinek hatékony kiszámítására bemutatott módszer, hogy 
elég nagy $n$-re $C(\pi_n)<2^n\!/n$?
%%%
%%%69
%%%
\ujgyak\label{gyak712-69} \sz{M24} Legyen $f$ multilineáris 
reprezentációja\index{multilineáris reprezentáció = multilinear representation} 
\begin{equation*}
\alpha_{000}\xor\alpha_{001}x_m\xor\alpha_{010}x_j\xor\alpha_{011}x_jx_m\xor
\alpha_{100}x_i\xor\alpha_{101}x_ix_m\xor\alpha_{110}x_ix_j\xor
\alpha_{111}x_ix_jx_m\koz,
\end{equation*}
ahol minden $\alpha_{l}$ együttható az 
$\{x_1,\ldots,x_n\}\setminus\{x_i,x_j,x_m\}$ változók függvénye.

a) Bizonyítsuk be, hogy az (\ref{keplet712-58}) párok pontosan akkor \idez{jók}\index{jó pár = good pair},
ha az együtthatók kielégítik a következõ egyenleteket:
\begin{equation*}
\alpha_{010}\alpha_{101}=\alpha_{011}\alpha_{100},\quad
  \alpha_{101}\alpha_{110}=\alpha_{100}\alpha_{111}\quad\hbox{és}\quad
  \alpha_{110}\alpha_{011}=\alpha_{111}\alpha_{010}\koz.
\end{equation*}

b) Mely $(i,j,m)$ értékekre lesznek a párok rosszak\index{rossz pár = bad pair},
ha $f=(\det X)\mod2$? {Lásd (\ref{keplet712-60}).}
%%%
%%%70
%%%
\ujgyak\label{gyak712-70} \sz{M27} Legyen $X$ a $3\times 3$-as Boole-mátrix (\ref{keplet712-60})-ból. Keressünk 
hatékony láncokat a következõ Boole-függvényekhez:
(a)~$(\det X)\mod 2$; (b)~$[{\rm per}\,X>0]$; (c)~$[\det X>0]$.
%%%
%%%71
%%%
\ujgyak\label{gyak712-71} \sz{M26} 
Tegyük fel, hogy $f(x)$ értéke 0 $p$ valószínûséggel minden $x=x_1\ldots x_n$ pontban, függetlenül a többi helyen felvett értékétõl. 

a) Milyen valószínûséggel lesznek az (\ref{keplet712-58}) párok jók?\index{algoritmusok elemzése = analysis of algorithms} 

b) Mi a valószínûsége annak, hogy léteznek rossz (\ref{keplet712-58}) párok?

c) Milyen valószínûséggel találunk rossz (\ref{keplet712-58}) párokat legfeljebb $t$ véletlen próbával? 

d) Várhatóan mennyi idõbe telik az $(i,j,m)$ eset tesztelése, mint $p$, $t$ és $n$ függvénye?
%%%
%%%72
%%%
\ujgyak\label{gyak712-72} \sz{M24} Terjesszük ki az elõzõ feladatot parciális 
függvényekre,\index{parciális függvény = partial function} is, 
ahol $f(x)=0$ $p$ valószínûséggel, $f(x)=1$ $q$ valószínûséggel és $f(x)={*}$ $r$ valószínûséggel. %^^{don't-cares} 
%%%
%%%73
%%%
\ujgyak\label{gyak712-73} \sz{20} 
Mutassuk meg, hogy ha minden $(i,j,m)$, $m \neq i\neq j\neq m$, esetén létezik rossz (\ref{keplet712-58}) pár, akkor  
elegendõ $n\choose2$ jól megválasztott $(i,j,m)$ hármast megvizsgálni annak bizonyításához, hogy $f$ nem dekomponálható.
%%%
%%%74
%%%
\ujgyak\label{gyak712-74} \sz{25} Terjesszük ki az elõzõ gyakorlat ötletét és javasoljunk egy módszert 
az egymást követõ $(i,j,m)$ hármasok kiválasztására Shen,\angolnevindex{Shen, Vincent Yun-Shen}  
McKellar\angolnevindex{McKellar, Archie Charles} 
és Weiner\angolnevindex{Weiner, Peter Gallegos} módszerének alkalmazásához.
%%%
%%%75
%%%
\ujgyak \label{gyak712-75}
\sz{20} Mi történik, ha a fejezet dekompozíciós eljárását 
az $S_{0,n}(x_1,\ldots,x_n)$ \idez{mindegyik-azonos}\index{mindegyik-azonos = all-equal} 
függvényre alkalmazzuk?
%%%
%%%76
%%%
\ujgyak\label{gyak712-76} \sz{M25} (D. Uhlig, 1974.) \cite{Uhlig1974}\angolnevindex{Uhlig, Dietmar} 
A gyakorlat célja, hogy bebizonyítsuk azt a meglepõ tényt, hogy bizonyos $f$ függvények esetében a legjobb lánc költsége az 
$$F(u_1,\ldots,u_n,v_1,\ldots,v_n)\;=\;
f(u_1,\ldots,u_n)\lor f(v_1,\ldots,v_n)$$
Boole-függvény kiértékelésére \textit{kevesebb}, mint $2C(f)$. Ebbõl pedig következik, 
hogy a függvény-dekompozíció\index{függvény-dekompozíció = decomposition of functions} 
\textit{nem} mindig jó ötlet.\breathe
Legyen $n=m+2^m$ és vezessük be az $f(i_1,\ldots,i_m,x_0,\ldots,x_{2^m-1})=
f_i(x)$ jelölést, ahol $i$ alatt az $(i_1\ldots i_m)_2$ számot értjük.
Ekkor $(u_1,\ldots,u_n)=(i_1,\ldots,i_m,x_0,\ldots,x_{2^m-1})$, 
     $(v_1,\ldots,v_n)=(j_1,\ldots,j_m,y_0,\ldots,y_{2^m-1})$ és
$F(u,v)=f_i(x)\lor f_j(y)$.\breathe

a) Bizonyítsuk be, hogy $O(n/\!\lg n)^2$ költségû lánccal kiértékelhetõ a következõ $2^m+1$ függvény:
$$z_{l}\;=\;x\xor\bigl(([l\le i]\xor[i\le j])\land(x\xor y)\bigr),
\qquad 0\le l\le 2^m,$$
ahol $i$, $j$, $x$, $y$ adott vektorok és valamennyi 
$z_{l}$ vektor hossza $2^m$.\breathe

b) Legyen $g_i(x)=f_i(x)\xor f_{i-1}(x)$ minden $0\le i\le 2^m$ esetén, ahol 
$f_{-1}(x)=f_{2^m}(x)=0$. Becsülje meg a $c_{l}=g_{l}(z_{l})$ - összesen $2^m+1$ számú - érték
kiszámításának költségét, ha a 
$z_{l}$ vektorok adottak minden $0\le l\le 2^m$ esetén.\breathe %adottak???

c) Legyen $c'_{l}=c_{l}\land([i\le j]\leqv[l\le i])$ és
             $c''_{l}=c_{l}\land([i\le j]\leqv[j>l])$. Bizonyítsuk be, hogy
$$f_i(x)=c'_0\xor c'_1\xor\cdots\xor c'_{2^m},\qquad
  f_j(y)=c''_0\xor c''_1\xor\cdots\xor c''_{2^m}.$$

d) Mutassa meg, hogy $C(F)\le 2^n\!/n+O(2^n(\lg n)/n^2)$.
(Ha $n$ eléggé nagy, akkor ez a költség határozottan kisebb 
mint $2^{n+1}\!/n$, de léteznek olyan $f$ függvények, amelyekre $C(f)>2^n\!/n$.)

e) %For clarity, ???
Írjuk fel az $F$-hez tartozó láncot, ha $m=1$ és $f(i,x_0,x_1)=(i\land x_0)\lor x_1$.
%%%
%%%77
%%%
\ujgyak\label{gyak712-77} \sz{35} (N. P. Redkin, 1970 
\cite{Redkin1970}.)\angolnevindex{Redkin, Nyikolaj Petrovics ({\rus Redp1kin, Nikolai0 Petrovich})} %^^{AND-OR-NOT chains}
Tegyük fel, hogy egy Boole-lánc csak az ÉS, VAGY és NEM mûveleteket használja fel, azaz minden lépés 
$x_i=x_{j(i)}\land x_{k(i)}$, $x_i=x_{j(i)}\lor x_{k(i)}$ vagy $x_i=\bar x_{j(i)}$. 
Bizonyítsa be, hogy ha egy ilyen lánc az $f_n(x_1,\ldots,x_n)=x_1\xor\cdots\xor x_n$ 
\idez{páratlan}\index{paritás = parity} vagy az $\bar f_n(x_1,\ldots,x_n)=1\xor x_1\xor\cdots\xor x_n$ 
\idez{páros}\index{paritás = parity} függvényt számítja ki $n\ge 2$-re, akkor a lánc hossza 
legalább $4(n-1)$.
%%%
%%%78
%%%
\ujgyak\label{gyak712-78} \sz{26} (W. J. Paul, 1977 \cite{Paul1977}.)\angolnevindex{Paul, Wolfgang Jakob}
Legyen $f(x_1,\ldots,x_m,y_0,\ldots, y_{2^m-1})$ egy olyan Boole-függvény, ami $y_k$ értékét veszi fel valahányszor
$(x_1\ldots x_m)_2=k\in S$ teljesül, ahol $S\subseteq\{0,1,\ldots, 2^m-1\}$ egy adott halmaz. Az $f$ többi pontban 
felvett értékérõl nem teszünk fel semmit.
%^^{partially specified} %???
Mutassuk meg, hogy $C(f)\ge 2 | S | -2$, ha $S$ nem az üres halmaz. (Speciálisan, ha $S=\{0,1,\ldots,2^m-1\}$, 
a \ref{gyak712-39}. gyakorlatban látott multiplexer\index{multiplexer = multiplexer} lánc aszimptotikusan optimális.)
%%%
%%%79
%%%
\ujgyak\label{gyak712-79} \sz{32} (C. P. Schnorr, 1976 \cite{Schnorr1976}.)\angolnevindex{Schnorr, Claus-Peter} 
Azt mondjuk, hogy egy $u$ és~$v$ változók \idez{társak}\index{társ = mate} egy Boole-láncban, ha pontosan egy egyszerû út 
létezik közöttük a láncnak megfelelõ bináris fában. Két változó csak akkor lehet társ, ha mindegyiküket csak egyszer használtuk 
fel a láncban, de ez a szükséges feltétel nem elégséges. Például, a 2 és 4 változók barátok az $S_{1,2,3}$-hez
tartozó láncban a \ref{abra712-9}. ábrán, de nem társak az $S_2$-höz tartozó láncban.\breathe
a) Bizonyítsuk be, hogy ha egy $n$ változós Boole-láncban nincsenek társak, akkor a lánc költsége legalább $2n-2$.

b) Bizonyítsuk be, hogy $C(f)=2n-3$, ha $f$ az $S_{0,n}(x_1,\ldots,x_n)$ minden-egyenlõ\index{minden-egyenlõ = all-equal} függvény.
%%%
%%%80
%%%
\ujgyak\label{gyak712-80} \sz{M27} (L. J. Stockmeyer, 1977 \cite{Stockmeyer1977}.)\angolnevindex{Stockmeyer, Larry Joseph} 
A szimmetrikus függvények\index{szimmetrikus függvény = symmetric function} egy másik 
jelölése\index{jelölés = notation} néha kényelmesebb: Ha $\alpha=a_0a_1\ldots a_n$ egy 
bináris füzér, legyen $S_\alpha(x)=a_{\nu x}$. Például
$\langle x_1x_2x_3\rangle=S_{0011}$ és $x_1\xor x_2\xor x_3=S_{0101}$
%%%\def\\{{}'\?\?}%%megpróbáltam kikommentezni, de akkor nem fordul, bár nem értem miért...
ezzel a jelöléssel. Vegyük észre, hogy $S_\alpha(0,x_2,\ldots,x_n) =
S_{\alpha'}(x_2,\ldots,x_n)$ és $S_\alpha(1,x_2,\ldots,x_n) =
S_{'\alpha}(x_2,\ldots,x_n)$, ahol $\alpha'$ és $'\alpha$
$\alpha$-t jelölik az utolsó, illetve az elsõ elemének törlése után.
%^^{prefixes of strings} ^^{suffixes of strings} %???
Ugyancsak,
$$S_\alpha\big(f(x_3,\ldots,x_n),\bar f(x_3,\ldots,x_n),x_3,\ldots,x_n\bigr)
\;=\;S_{'\alpha'}(x_3,\ldots,x_n)$$
ha $f$ egy tetszõleges Boole-függvény $n-2$ változóval.\breathe

a) Egy paritás\index{paritás = parity} függvényre $a_0\neq a_1\neq a_2\neq\cdots\neq a_n$.
Tegyük fel, hogy $n\ge 2$. Bizonyítsuk be, hogy ha $S_\alpha$ nem egy paritás függvény 
és $S_{'\alpha'}$ nem konstans, akkor 
$$\medmuskip=1mu \thinmuskip=5mu
C(S_\alpha)\;\ge\;\max\bigl(C(S_{\alpha'})+2, C(S_{{}'\alpha})+2,
\min\bigl(C(S_{\alpha'})+3,C(S_{'\alpha})+3,C(S_{'\alpha'})+5\bigr)\bigr).$$
\breathe

b) Az elõzõ eredményt felhasználva milyen alsó korlát adható 
$C(S_k)$-ra és $C(S_{\ge k})$-ra, ha $0\le k\le n$?
%%%
%%%81
%%%
\ujgyak\label{gyak712-81} \sz{23} (M. Snir, 1986 \cite{Snir1986}.)\angolnevindex{Snir, Marc} 
Mutassuk meg, hogy minden $c$ költségû és $d$ mélységû láncra, ami a 
\ref{gyak712-36}. gyakorlatban látott prefix problémát\index{prefix probléma = prefix problem} 
megoldja, $c+d\ge 2n-2$ teljesül.
%%%
%%%82
%%%
\ujgyak\label{gyak712-82} \sz{M23} Magyarázzuk meg a (\ref{keplet712-62})--(\ref{keplet712-70}) 
logikai\index{logika = logic} állításokat. Melyek igazak közölük?
%%%
%%%83
%%%
\ujgyak\label{gyak712-83} \sz{21} 
Mutassuk meg, hogy ha egy $f(x_1,\ldots,x_n)$-et kiszámító Boole-lánc $p$ 
kényszerítõ mûveletet tartalmaz, akkor $C(f)<(p+1)(n+p/2)$.
%%%
%%%84
%%%
\ujgyak\label{gyak712-84} \sz{M20} Egy \textit{monoton Boole-lánc}\index{monoton Boole-lánc = monotone Boolean chain} 
egy olyan Boole-lánc, amiben minden $\circ_i$ mûvelet monoton. $f$ legrövidebb monoton láncának hosszát $C^+(f)$-fel jelöljük. 
Mutassuk meg, hogy ha létezik $f(x_1,\ldots,x_n)$-re olyan monoton Boole-lánc, ami $p$ $\land$ és $q$ $\lor$ mûveletet 
tartalmaz, akkor $C^+(f)<\min\bigl((p+1)(n+p/2),(q+1)(n+q/2)\bigr)$.
%%%
%%%85
%%%
\ujgyak\label{gyak712-85} \sz{M28} Jelölje $M_n$ az $n$-változós monoton függvények\index{monoton függvény = monotone function} 
halmazát. Ha $L$ $M_n$-beli függvények egy családja, legyen 
$$x\sqcup y=\bigwedge\{z\in L\mid z\supseteq x\lor y\}\qquad\hbox{és}\qquad
x\sqcap y=\bigvee\{z\in L\mid z\subseteq x\land y\}.$$
Az $L$ családot ekkor \idez{legitimnek}\index{legitim = legitimate} nevezzük, ha tartalmazza a 0 és az 1 
konstans függvényeket, az $x_j$ projekciókat $1\le j\le n$-re, továbbá 
ha $x\sqcup y\in L$, $x\sqcap y\in L$ teljesül minden $x,y\in L$ esetén.\breathe

a) Ha $n=3$, akkor $M_3=\{
\texttt{00}$, \texttt{01}, \texttt{03}, \texttt{05}, \texttt{11}, \texttt{07}, \texttt{13}, \texttt{15}, \texttt{0f},
\texttt{33}, \texttt{55}, \texttt{17}, \texttt{1f}, \texttt{37}, \texttt{57}, \texttt{3f}, \texttt{5f}, \texttt{77}, \texttt{7f},
$\texttt{ff}\}$,
ahol minden függvényt a hexadecimális\index{hexadecimális = hexadecimal} 
igazságtáblája\index{igazságtábla = truth table} reprezentál.
Összesen $2^{15}$-féleképpen lehet az $L$ függvénycsaládot megválasztani úgy, hogy 
$\{\texttt{00},\texttt{0f},\texttt{33},\texttt{55},\texttt{ff}\}\subseteq L\subseteq M_3$ teljesüljön. 
Hány lesz ezek közül legitim?\breathe 

b) Ha $A$ egy részhalmaza az $\{1,\ldots,n\}$ halmaznak, akkor legyen 
$\lceil A\rceil=\bigvee_{a\in A}x_a$, továbbá legyen $\lceil\infty\rceil=1$.
Tegyük fel, hogy $\cal A$ egy olyan családja $\{1,\ldots,n\}$ részhalmazainak, hogy 
tartalmazza az összes legfeljebb egy elemû részhalmazt és zárt a metszetre\index{metszetre zárt = closed under intersection}, 
azaz $A\cap B\in\cal A$ minden $A\in\cal A$, $B\in\cal A$ esetén.
Bizonyítsuk be, hogy az $L=\{\lceil A\rceil\mid A\in\cal A\cup\{\infty\}\}$ család legitim. 

c) Legyen $(x_{n+1},\ldots,x_{n+r})$ egy monoton Boole-lánc \ref{keplet712-1}. Legyen $(\hat x_{n+1},\ldots,\hat x_{n+r})$ az a 
Boole-lánc, amit úgy kapunk, hogy az elõzõ láncban minden $\land$-t $\sqcap$ mûveleti jellel és minden $\lor$-ot $\sqcup$
mûvelettel cserélünk fel, ahol most $L$ egy rögzített legitim család. Bizonyítsuk be, hogy ha $n+1\le l\le n+r$, akkor
\begin{equation*}
\begin{split}
\hat x_{l}&\;\subseteq\;x_{l}\lor
\bigvee_{i=n+1}^l\{\hat x_i\xor(\hat x_{j(i)}\lor\hat x_{k(i)})
\mid {\circ_i}={\lor}\};\\
x_{l}&\;\subseteq\;\hat x_{l}\lor
\bigvee_{i=n+1}^l\{\hat x_i\xor(\hat x_{j(i)}\land\hat x_{k(i)})
\mid {\circ_i}={\land}\}.\\
\end{split}
\end{equation*}%A 80-as feladat makródefiníciója miatt nem úgy néz ki, ahogy kellene
%%%
%%%86
%%%
\ujgyak\label{gyak712-86} \sz{F37} Egy $G$ gráf az $\{1,\ldots,n\}$ csúcsok felett megadható $N={n\choose2}$ számú $x_{uv}$, 
$1\le u<v\le n$ Boole-változó segítségével, ahol $x_{uv}= [u\adj v\ G\mbox{-ben van}]$. Legyen $f$ az $f(x)= [G$ tartalmaz 
háromszöget$]$ függvény. Például, ha $n=4$, akkor
$f(x_{12},x_{13},x_{14},x_{23},x_{24},x_{34})=
(x_{12}\land x_{13}\land x_{23})\lor
(x_{12}\land x_{14}\land x_{24})\lor
(x_{13}\land x_{14}\land x_{34})\lor
(x_{23}\land x_{24}\land x_{34})$.
Ebben a gyakorlatban az a célunk, hogy bebizonyítsuk, a $C^+(f)$ monoton 
bonyolultság\index{monoton bonyolultság = monotone complexity} éppen $\Omega(n/\!\log n)_3$. 

a) Ha egy $G$ gráfban $u_j\adj v_j$ $1\le j\le r$ esetén, akkor nevezzük 
az $S=\bigl\{\{u_1,v_1\},\ldots,\{u_r,v_r\}\bigr\}$ halmazt  
egy {\it $r$-családnak}\index{rcsalád@$r$-család = $r$-family}, és legyen
$\Delta(S)=\bigcup_{\raise1pt\hbox{$\scriptstyle 1\le i<j\le r$}}
\bigl(\{u_i,v_i\}\cap\{u_j,v_j\}\bigr)$ a páronként vett metszetek elemeinek halmaza.
Egy $G$ gráfot nevezzünk \textit{$r$-zártnak}\inddef{rzártgráf@$r$-zárt gráf = $r$-closed graph}, ha $u\adj v$ mindig teljesül 
$\Delta(S)\subseteq\{u,v\}$ esetén bármely $S$ $r$-családra. A gráfot 
\textit{erõsen} $r$-zártnak nevezzük,\inddef{erõsen $r$-zárt gráf = strongly $r$-closed graph} ha a fentieken túl még az is 
igaz, hogy  $\vert\Delta(S)\vert\ge2$ minden $S$ $r$-családra. Bizonyítsa be, hogy
egy erõsen $r$-zárt gráf erõsen $(r+1)$-zárt is.

b) Bizonyítsuk be, hogy a $K_{m,n}$ teljes páros gráf\index{teljes páros gráf = complete bigraph} erõsen 
$r$-zárt, ha $r>\max(m,n)$.

c) Bizonyítsuk be, hogy egy erõsen $r$-zárt gráfnak legfeljebb $(r-1)^2$ éle lehet.

d) Legyen $L$ a következõ függvények családja: $\{1\}\cup
\bigl\{\lceil G\rceil\mid G$ egy erõsen $r$-zárt gráf az 
$\{1,\ldots,n\}$ csúcsok felett$\bigr\}$. 
(Lásd még \ref{gyak712-85}(b) gyakorlat; $G$-t élek halmazának tekintjük.
Például, ha az élek $1\adj3$, $1\adj4$,
$2\adj3$ és $2\adj4$, akkor $\lceil G\rceil=x_{13}\lor x_{14}\lor
x_{23}\lor x_{24}$.) Legitim\index{legitim = legitimate} lesz-e $L$? 

e) Legyen $x_{N+1}$, \dots, $x_{N+p+q}=f$ egy monoton Boole-lánc\index{monoton Boole-lánc = monotone Boolean chain} 
$p$ $\land$-lépéssel és $q$ $\lor$-lépéssel, és tekintsük a 
a (d) rész $L$ családja szerint módosított 
$\hat x_{N+1}$, \dots,~$\hat x_{N+p+q}=\hat f$ láncot. 
Ha $\hat f\neq 1$, mutassa meg, hogy $2(r-1)^3p+(r-1)^2(n-2)\ge{n\choose3}$.
\textit{Útmutatás:} Használjuk a \ref{gyak712-85}(c) gyakorlatban szereplõ második formulát. 

f) Továbbá, ha $\hat f=1$, akkor $r^2q\ge 2^{r-1}$. 

g) Következésképpen $p=\Omega(n/\!\log n)_3$. \textit{Útmutatás:} Legyen $r\approx 6\lg n$ és alkalmazzuk a 
\ref{gyak712-84}. gyakorlatot.
%%%
%%%87
%%%
\ujgyak\label{gyak712-87} \sz{M20} 
Mutassuk meg, hogy ha nemmonoton mûveletek is megengedettek, akkor a \ref{gyak712-86}. gyakorlatban szereplõ 
háromszög-függvény\index{háromszög-függvény = triangle function} költsége $C(f)=O(n^{\lg 7}(\lg n)^2)=O(n^{2.81})$.
\textit{Útmutatás:} Egy gráf pontosan akkor tartalmaz háromszöget, ha a gráf szomszédsági 
mátrixának\index{szomszédsági mátrix = adjacency matrix} a kockája nemnulla átlójú.
% ha a gráf átmenet mátrixának átlója tartalmaz nullától eltérõ elemet is/nem nulla átlójú 
% ez jobban hangzik, csak így nem igaz...
%%%
%%%88
%%%
\ujgyak\label{gyak712-88} \sz{40} Egy \textit{medián-lánc}\index{medián-lánc = median chain}  olyan, mint egy Boole-lánc, 
csak a bináris mûveletek helyett három-elem-mediánja lépésekbõl áll, azaz $x_i=\langle x_{j(i)}x_{k(i)}x_{l(i)}\rangle$, ha
$n+1\le i\le n+r$.

Vizsgáljuk meg a medián láncok optimális hosszának, mélységének és költségének kérdéseit a 7 változós  
önduális\index{önduális monoton Boole-függvény = self-dual monotone Boole-function} monoton Boole-függvények 
esetében.\index{hét elem médiánja = median of seven}
Mi a legrövidebb lánc az $\langle x_1x_2x_3x_4x_5x_6x_7\rangle$ függvényre?
\end{gyak}
\end{small}
\index{Boole-függvények kiértékelése = evaluation of Boolean functions|)}
\index{Boole-lánc = Boolean chain|)}



\markboth{\sf 7. KOMBINATORIKUS ELEMZÉS (4. kötet, 0. rész)}{\sf 7.1.2. PONT GYAKORLATAINAK MEGOLDÁSA}
\pagestyle{myheadings}
\section*{A 7.1.2. pont gyakorlatainak megoldása}
\addcontentsline{toc}{section}{A 7.1.2. pont gyakorlatainak a megoldása}

\begin{small}
\begin{gyak}
%%% 1
\ujgyak \label{megold712-1}
$\left(\left(x_1\lor x_4\right)\land x_2\right) \leqv \left(x_1\lor x_3\right)$.
%%% 2
\ujgyak \label{megold712-2}
(a) $\left(w\xor\left(x\land y\right)\right)\xor\left(\left(x\xor y\right)\land z\right)$;
(b) $\left(w\land\left(x\lor y\right)\right)\land\left(\left(x\land y\right)\lor z\right)$.
%%% 3
\ujgyak \label{megold712-3} {\cite{Finikov1957}}
Tekintsünk egy $k\times n$-es mátrixot, melynek sorait azon $x$ vektorok alkotják, melyekre $f(x)=1$.
A változók permutálásával és/vagy negálásával feltételezhetjük, hogy az elsõ sor az $1\ldots 1$ és az oszlopok rendezve vannak.
Tegyük fel, hogy $l$ különbözõ oszlopunk van. Ekkor $f=g\land h$, 
 melyben $g$ az összes $(x_{j-1}\leqv x_j)$ kifejezés konjunkciója, 
  ahol $1<j\leq n$, és a $j-1$.\ oszlop megegyezik a $j$.\ oszloppal,
 míg $h$ jelöli a $k$ darab $l$ hosszúságú minterm diszjunkcióját,
  ahol az azonos oszlopok közül mindig csak egyet használunk.
Például, ha $n=8$ és $f$ a következõ $k=3$ pontban igaz: $11111111$, $00001111$, $00110111$, akkor $l=4$, míg $f(x)$ megegyezik 
 $\left(x_1\leqv x_2\right)\land \left(x_3\leqv x_4\right)\land 
  \left(x_6\leqv x_7\right)\land \left(x_7\leqv x_8\right)\land
  \left(\left(x_1\land x_3\land x_5\land x_6\right) 
  \lor \left(\bar x_1\land \bar x_3\land x_5\land x_6\right)
  \lor \left(\bar x_1\land x_3\land \bar x_5\land x_6\right)\right)$
  formulával.
Az így kapott formula hossza $2n+\left(k-2\right)l-1$, ahol $l\leq 2^{k-1}$.

Figyeljük meg, hogy ha $k$ nagy, akkor rövidebb formulát kapunk, 
 ha $f(x)$-et $f_1(x)\lor \ldots \lor f_r(x)$ alakban írjuk fel, 
 ahol minden $f_j$ legfeljebb $\left\lceil k/r\right\rceil$ 1-est tartalmaz.
Ekkor
\[
L(f) \leq \min_{r\geq 1}\left(r-1+\left(2n+\left\lceil k/r-2\right\rceil 2^{\left\lceil k/r-1\right\rceil}\right)r\right).
\]
%%% 4
\ujgyak \label{megold712-4}
Az elsõ egyenlõtlenség közvetlen következménye annak, hogy egy $d$ mélységû bináris fa legfeljebb 
$1+2+\ldots +2^{d-1} = 2^d-1$ belsõ csúcsot tartalmazhat.

Az utalás rendben van, hiszen létezik legkisebb részfa, melynek mérete $\geq \left\lfloor r/3\right\rfloor$. Ennek $s$ mérete 
 legfeljebb $1+2\left(\left\lfloor r/3\right\rfloor -1\right)$. Ez alapján $f=\left(g?\ f_1:\ f_0\right)$, ahol $g$ egy 
 $s$ méretû részformula, míg $f_0$ és $f_1$ olyan $r-s-1$ méretû formulák, melyeket $f$-bõl a $g$ helyére rendre $0$, 
 illetve $1$ helyettesítésével kapunk.

Legyen $d(r)=\max\left\{D(f)\rest L(f)=r\right\}$. Mivel a mux\index{mux = mux} 
függvény mélysége~2, és $\max(s,r-s-1)<\left\lceil \frac{2r}{3}\right\rceil$, ezért $r\geq 3$ esetén 
$d(r)\leq 2+d\left(\left\lceil \frac{2r}{3}\right\rceil-1\right)$, 
melybõl az eredmény $r$ szerinti indukcióval következik \cite{Spira1971}.
%%% 5
\ujgyak \label{megold712-5}
Legyen $g_0=0$, $g_1=x_1$, és $g_j=x_j\land(x_{j-1}\lor g_{j-2})$, ahol $j\geq 2$. Ekkor $F_n=g_n\lor g_{n-1}$, 
melynek költsége $2n-2$, mélysége pedig $n$. [Ezek a $g_j$ függvények fontos szerepet játszanak a bináris összeadásnál is. 
A \ref{gyak712-42}., illetve \ref{gyak712-44}. gyakorlatoknál bemutatjuk, hogyan lehet õket $O(\lg n)$ mélységû 
függvényekkel meghatározni.]
%%% 6
\ujgyak \label{megold712-6}
Igaz: vizsgálja meg az $y=0$ valamint az $y=1$ esetet.
%%% 7
\ujgyak \label{megold712-7}
$\hat x_5=x_1\lor x_4$, $\hat x_6=x_2\land \hat x_5$, $\hat x_7=x_1\lor x_3$, $\hat x_8=\hat x_6\xor\hat x_7$.
(Az eredeti lánc a (\ref{keplet712-6})-os \idez{random}\index{pí = pi}%^^{pi}
függvényt számítja; lásd az \ref{gyak712-1}.\ gyakorlatot. Az új lánc ennek a függvénynek a normalizáltját,
\index{normalizálás = normalization} nevezetesen a negáltját számítja.)
%%% 8
\ujgyak \label{megold712-8}
Az $x_k$ igazságtáblájában $2^{n-k}$ darab 0-t, valamint $2^{n-k}$ darab 1-est tartalmazó blokkok váltakoznak, 
 amint az a (\ref{keplet712-7})-ben is megfigyelhetõ.
így ha megszorozzuk $2^{2^{n-k}}+1$-gyel, az eredményül kapott $x_k+\left(x_k \ll 2^{n-k}\right)$ csupa 1-esbõl fog állni.
%%% 9
\ujgyak \label{megold712-9}
Az L6-os lépésben, amikor $L(f)=\infty$, tároljuk el $g$-t és $h$-t egy $f$-hez rendelt rekordban.
Ekkor $f$-hez egy rekurzív eljárás\index{rekurzív eljárás = recursive procedure}%^{recursive procedure}
segítségével, a megfelelõ $g$ és $h$ felhasználásával elõállítható egy minimum hosszúságú formula.
%%% 10
\ujgyak \label{megold712-10}
Az L3-as lépésben írjunk $k=r-1-j$ helyére $k=r-1$-et, valamint írjuk át mindenhol az $L$-et $D$-re.
%%% 11
\ujgyak \label{megold712-11}
Az egyetlen probléma az, hogy az U3 lépésben \emph{csökkenteni} kell $j$-t. 
Ekkor $j=0$ esetén $\phi(g) \band \phi(h) \ne 0$, 
így az összes $r-1$ költségû esetet megtaláljuk, még mielõtt nekifognánk az $r-1$. listának.

\algindentset{\hskip\parindent U1}

\algstep U1. {Kezdeti beállítás.} Legyen $U(0)\gets\phi(0)\gets 0$ míg
$U(f)\gets\infty$ minden $1\le f<2^{2^n-1}$ esetén.
Ekkor legyen $U(x_k)\gets\phi(x_k)\gets 0$ és fûzzük $x_k$-t a 0.~listához, ahogy azt az L1 lépésben tettük.
Ugyanakkor legyen $U(x_j\circ x_k)\gets 1$, és rendeljük $\phi(x_j\circ x_k)$-hoz a neki megfelelõ 1~súlyú bit vektort, 
és fûzzük $x_j\circ x_k$-t az 1.~listához, minden $1\le j<k\le n$ és mind az öt $\circ$ normál operátor esetén.
Végül legyen $c\gets 2^{2^n-1}-5{n\choose2}-n-1$.

\algstep U2. {Ciklus $r$-re.} Ismételjük az U3 lépést $r=2,\ 3,\ \dots$ esetén, amíg $c>0$.

\algstep U3. {Ciklus $j$-re és $k$-ra.} Ismételjük az U4 lépést $j=\lfloor(r-1)/2\rfloor,\ 
\lfloor(r-1)/2\rfloor-1,\ \dots$, valamint $k=r-1-j$ esetén, amíg $j\ge $.

\algstep U4. {Ciklus $g$-re és $h$-ra.} Ismételjük az U5 lépést a $j$.~lista minden $g$ és a $k$.~lista minden $h$ elemére.
Amennyiben $j=k$, csak azon $h$ elemeket tekintsük, melyek a $g$ \emph{után következnek} a $k$.~listán.

\algstep U5. {Ciklus $f$-re.} 

Ha $\phi(g)\band\phi(h)\neq 0$, akkor legyen $u\gets r-1$ és $v\gets\phi(g)\band\phi(h)$,
különben pedig legyen $u\gets r$ és $v\gets\phi(g)\bor\phi(h)$. Ekkor végezzük el az U6 lépést 
$f=g\band h$,
$f=\bar g\band h$,
$f=g\band\bar h$,
$f=g\bor h$, illetve
$f=g\xor h$ esetén.

\algstep U6. {$U(f)$ és $\phi(f)$ aktualizálása.} Ha $U(f)=\infty$, akkor legyen $c\gets c-1$, 
$\phi(f)\gets v$, és fûzzük $f$-et az $u$.~listához.
Különben, ha $U(f)>u$, akkor legyen $\phi(f)\gets v$, és helyezzük át $f$-et az $U(f)$.~listáról az $u$. listára.
Ha pedig $U(f)=u$, akkor legyen $\phi(f)\gets\phi(f)\bor v$.\quad\slug 
%%% 12
\ujgyak \label{megold712-12}
$x_4=x_1\xor x_2$, $x_5=x_3\land x_2$, $x_6=x_2\land\bar x_4$, $x_7=x_5\lor x_6$.
%%% 13
\ujgyak \label{megold712-13}
$f_5=01010101$ ($x_3$);
$f_4=01110111$ ($x_2\lor x_3$);
$f_3=01110101$ ($(\bar x_1\land x_2)\lor x_3$);
$f_2=00110101$ ($x_1{?}\ x_3{:}\ x_2$);
$f_1=00010111$ ($\langle x_1 x_2 x_3\rangle$).
%%% 14
\ujgyak \label{megold712-14}
Tetszõleges $1\le j\le n$ esetén számítsuk ki $t\gets (g\xor(g\gg2^{n-j}))\band x_j$, $t\gets t\xor(t\ll2^{n-j})$, 
ahol $x_j$ a (\ref{keplet712-11})-es igazságtábla. 
Ekkor $1\le k\le n$ és $k\ne j$ esetén az $x_j\gets x_j\circ x_k$
mûveletnek megfelelõ igazságtábla a $g\xor(t\band((x_j\circ x_k)\xor x_j))$ képlettel számítható.
(Mivel az $(x_j\circ x_k)\xor x_j$ által leírt $5n(n-1)$ különbözõ mûvelet $g$-tõl független, azok elõre kiszámíthatóak.
Ugyanez az ötlet mûködik az ennél általánosabb $x_{j(i)}\gets x_{k(i)}\circ_i x_{l(i)}$ alakú számításokra,
és a neki megfelelõ $(x_k\circ x_l)\xor x_j$ által leírt $5n^2(n-1)$ féle mûveletre is.)
%%% 15
\ujgyak \label{megold712-15}
Valódi aszimmetrikus módszerek szimmetrikus függvények kiszámítására:
$$
\openup-1\jot
\begin{aligned}
	{\rm(a)}\enspace 
	x_1&\gets x_1\xor x_2,\cr
	x_3&\gets x_3\xor x_4,\cr
	x_1&\gets x_1\xor x_3,\cr
	x_2&\gets x_2\xor x_4,\cr
	x_3&\gets x_3\lor x_2,\cr
	x_3&\gets x_3\land\bar x_1.\cr
	&\phantom{x_3\land\bar x_1}\cr
\end{aligned}
\qquad
\begin{aligned}
	{\rm(b)}\enspace 
	x_1&\gets x_1\xor x_2,\cr
	x_2&\gets x_2\land\bar x_1,\cr
	x_3&\gets x_3\xor x_4,\cr
	x_4&\gets x_4\land x_1,\cr
	x_2&\gets\bar x_2\land x_3,\cr
	x_2&\gets x_2\xor x_1,\cr
	x_2&\gets x_2\land\bar x_4.\cr
\end{aligned}
\qquad
\begin{aligned}
	{\rm(c)}\enspace 
	x_1&\gets x_1\xor x_2,\cr
	x_2&\gets x_2\xor x_3,\cr
	x_2&\gets x_2\lor x_1,\cr
	x_1&\gets x_1\xor x_4,\cr
	x_1&\gets x_1\land x_3,\cr
	x_2&\gets x_2\land\bar x_1,\cr
	x_2&\gets x_2\xor x_4.\cr
\end{aligned}
\qquad\qquad
$$
\ujgyak\label{megold712-16} 
Az a számítás, amely csak $\xor$-t és komplementálást (negációt) 
tartalmaz nem vezet sehova kivéve az affin függvényeket
\index{affin függvények = affine functions} 
(lásd a \ref{gyak711-132}. gyakorlatot.) Tegyük fel, hogy 
$f(x)=f(x_1,\ldots,x_n)$ egy minimális memóriával kiszámítható 
nem affin függvény. Ekkor $f(x)$ alakja $g(Ax+c)$, ahol 
$g(y_1,y_2,\ldots,y_n)=g(y_1\wedge y_2,y_2,\ldots,y_n)$, 
bizonyos nem szinguláris $n\times n$-es $0$-ákból és ~$1$-esekbõl 
álló $A$ mátrixra, ahol $x$ és~$c$ oszlopvektorok, és a vektormûveleteket 
modulo 2 végezzük el. Ebben a formulában az $A$ mátrix és a $c$ vektor 
biztosítják az összes $x_i\gets x_i\xor x_j$ mûveletet és/vagy a permutációkat 
és azon koordináták komplementálását, amelyek a legutolsó 
végrehajtott nem-affin mûvelet után  jelennek meg. Ki fogjuk használni azt a tényt, 
hogy $g(0,0,y_3,\ldots,y_n)=g(1,0, y_3,\ldots,y_n)$.

Legyen $\alpha$ és $\beta$ az $A$ elsõ két sora, valamint legyen 
$a$ és~$b$ a $c$ elsõ két eleme. Ha $Ax+c\equiv y$ (modulo~2), akkor 
$y_1=y_2=0$ akkor és csak akkor, ha $\alpha\cdot x\equiv a$ és 
$\beta\cdot x\equiv b$. Ezt a feltételt pontosan $2^{n-2}$ $x$ vektor 
teljesíti, és minden ilyen vektorra $f(x)=f(x\xor w)$, ahol 
$Aw\equiv(1,0,\ldots,0)^T$.

Adott $\alpha$, $\beta$, $a$, $b$, és~$w$-re, $\alpha\ne(0,\ldots,0)$,
$\beta\ne(0,\ldots,0)$, $\alpha\ne\beta$, és $\alpha\cdot w\equiv 1$
(modulo~2) esetén, létezik $2_{2_ n-2_{n-2}}$ darab olyan 
$f$ függvény amely az $f(x)=f(x\xor w)$ amikor 
$\alpha\cdot x\mod 2=a$ és $\beta\cdot x\mod 2=b$ 
tulajdonsággal rendelkezik. Ennélfogva a minimális memóriában kiszámítható 
függvények száma legfeljebb $2^{n+1}$ (affin függvényekre) plusz 
$$(2^n-1)(2^n-2)2^2(2^{n-1})(2^{2^n-2^{n-2}})<2^{2^n-2^{n-2}+3n+1}.$$
\ujgyak \label{megold712-17} Legyen $f(x_1,\ldots,x_n)=g(x_1,\ldots,x_{n-1})\xor
(h(x_1,\ldots,x_{n-1})\wedge x_n)$ mint a (\ref{keplet711-16})-ban. 
Reprezentáljuk $h$-t KNF-ben és $h\wedge x_n$ eléréséhez tegyük a klózokat 
egyenként $x_0$-ba és $x_n$-el vett AND-jüket tegyük $x_n$-be. 
Állítsuk elõ $g$-t mint konjunkciók (mod~2) vett összegét, egymásután 
berakva a konjunkciókat $x_0$-ba és XOR-jukat pedig $x_n$-be.

(Nem lehet minden függvényt $n+1$ regiszterben kiértékelni, ha nem 
engedjük meg a $\xor$ és a $\leqv$ - nem irányító - mûveletek 
használatát. Azonban világos, hogy $n+2$ regiszter már elegendõ, még 
akkor is, ha egyedül a $\nand$ mûveletet használjuk.\index{nem-és = NAND})
\ujgyak \label{gyak712-18} Ahogy a 14-es megoldásban említettük 
a minimális memóriával való kiszámítás szöveges definícióját ki 
kell hogy terjesszük, megengedve az olyan lépéseket, mint 
$x_{j(i)}\gets x_{k(i)}\circ_i x_{@l(i)}$, ahol $k(i)\ne j(i)$ és
$l(i)\ne j(i)$. Ugyanis ezek jobb eredményeket adnak bizonyos 
olyan függvényekre, amelyek az öt változójuk közül csak négytõl 
függnek. Ezután azt találtuk, hogy $C_m(f)=(0,1,\ldots,13,14)$ rendre 
(2,
2,
5,
20,
93,
389,
1960,
10459,
47604,
135990,
198092,
123590,
21540,
472,
0)
függvényosztályra \dots\, amiben nincs benne 75,908 osztály (és
575,963,136 függvény) amelyekre $C_m(f)=\infty$, miután egyáltalán 
nem értékelhetõk ki minimális memóriában. A legérdekesebb ilyen jellegû 
függvény talán 
$(x_1\wedge x_2)\lor
 (x_2\wedge x_3)\lor
 (x_3\wedge x_4)\lor
 (x_4\wedge x_5)\lor
 (x_5\wedge x_1)$, amelyre $C(f)=7$ de $C_m(f)=\infty$. Egy másik 
 érdekes eset $\bigl(((x_1\lor x_2)\xor x_3)\lor((x_2\lor\bar x_4)
 \wedge x_5)\bigr)\wedge\bigl((x_1\leqv x_2)\lor x_3\lor x_4\bigr)$, 
 amelyre $C(f)=8$ és $C_m(f)=13$. Egy lehetõség e függvény 8-lépéses 
 kiértékelésére
 $x_6=x_1\lor x_2$,
$x_7=x_1\lor x_4$,
$x_8=x_2\xor x_7$,
$x_9=x_3\xor x_6$,
$x_{10}=x_4\xor x_9$,
$x_{11}=x_5\lor x_9$,
$x_{12}=x_8\wedge x_{10}$,
$x_{13}=x_{11}\wedge\bar x_{12}$.
\ujgyak \label{megold712-19} Ha nincs, akkor a gyökér bal- és jobb oldali 
részfáiban kell hogy fedés legyen, mivel az (i) eset nem teljesül. A 
hipotézis szerint minden változónak legalább egyszer kell levélben 
szerepelni. Mivel az (ii) eset nem teljesül legalább két változónak 
legalább kétszer levélben szerepelnie. Azonban a belsõ csúcsok száma 
$r\le n+1$ és így a levelek száma nem lehet $n+2$, hacsak a részfák között nincs átfedés.
%%%
%%%20
%%%
\ujgyak\label{megold712-20} Az L algoritmus mutatja (ha elhagyjuk 
\idez{$f=g\xor h$}-t az L5 lépésben), hogy bizonyos formulák 
hossza kell hogy 15 legyen, és sajnos a 11 gyakorlatbeli lábnyom 
módszer sem ad 14-nél jobb eredményt. Valóban minimális 
lánc elérése érdekében a szövegben bemutatott 25 darab $r=6$-ra vonatkozó 
speciális láncot ki kell egészíteni öt olyan másikkal, amelyek nem 
hagyhatók ki, nevezetesen
\begin{equation*}
\epsfbox{\figdir/v4a.1204}\quad\epsfbox{\figdir/v4a.1227}\quad\epsfbox{\figdir/v4a.1228}\quad
\epsfbox{\figdir/v4a.1229}\quad\epsfbox{\figdir/v4a.1230}
\end{equation*}
és amikor $r=(7,8,9)$ rendre meg kell vizsgálni $(653,12387,225660)$ pótlólagos potenciális láncokat, amelyek nem speciális esetei a 
fentrõl-lefele és a lentrõl-felfele konstrukcióknak. Az \ref{tablazat712-1}. táblázattal való összehasonlítás eredményét mutatja 
a következõ táblázat.
$$\setbox0=\hbox{0}\def\\{\kern\wd0\relax}
\setbox1=\vbox{\baselineskip7pt\halign{\hfil#\hfil\cr Függ-\cr vények\cr}}
\setbox2=\vbox{\baselineskip7pt\halign{\hfil#\hfil\cr Osztá-\cr lyok\cr}}
\halign to\hsize{\hfil$#$\hfil\ &\enspace\hfil#\enspace&\enspace\hfil#\enspace
\tabskip0pt plus1fil&
\hfil$#$\hfil\ \tabskip0pt&\enspace\hfil#\enspace&\enspace\hfil#\enspace
\tabskip0pt plus1fil&
\hfil$#$\hfil\ \tabskip0pt&\enspace\hfil#\enspace&\enspace\hfil#\enspace
\tabskip0pt plus1fil&
\hfil$#$\hfil\ \tabskip0pt&\enspace\hfil#\enspace&\enspace\hfil#\enspace\cr
C_c(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern-.5em&
U_c(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern-.5em&
L_c(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern-.5em&
D_c(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern-.5em\cr
\noalign{\medskip}
\\0&2&10&\\0&2&10&\\0&2&10&\\0&2&10\cr
\\1&1&48&\\1&1&48&\\1&1&48&\\1&1&48\cr
\\2&2&256&\\2&2&256&\\2&2&256&\\2&7&684\cr
\\3&7&940&\\3&7&940&\\3&7&940&\\3&59&17064\cr
\\4&9&2336&\\4&9&2336&\\4&7&2048&\\4&151&47634\cr
\\5&24&6464&\\5&21&6112&\\5&20&5248&\\5&2&96\cr
\\6&30&10616&\\6&28&9664&\\6&23&8672&\\6&0&0\cr
\\7&61&18984&\\7&45&15128&\\7&37&11768&\\7&0&0\cr
\\8&45&17680&\\8&40&14296&\\8&27&10592&\\8&0&0\cr
\\9&37&7882&\\9&23&8568&\\9&33&11536&\\9&0&0\cr
10&4&320&10&28&5920&10&16&5472&10&0&0\cr
11&0&0&11&6&1504&11&30&6304&11&0&0\cr
12&0&0&12&5&576&12&3&960&12&0&0\cr
13&0&0&13&3&144&13&8&1472&13&0&0\cr
14&0&0&14&2&34&14&2&96&14&0&0\cr
15&0&0&15&0&0&15&4&114&15&0&0\cr}$$

A két 5 mélységû függvényosztályt az $S_{2,4}(x_1,x_2,x_3,x_4)$ 
és az $x_1\xor S_2(x_2,x_3,x_4)$ szimmetrikus függvények 
\index{szimmetrikus függvény = symmetric function} 
reprezentálják, és ennek a két függvénynek az 
$S_2(x_1,x_2,x_3,x_4)$ és az 
$S_{1,3}(x_1,x_2,x_3,x_4)=x_1\xor x_2\xor x_3\xor x_4$ paritás 
függvénnyel\index{paritás függvény = parity function} együtt a hossza 15. 
Úgyszintén $U_c(S_{2,4})=U_c(S_{1,3})=14$. Hasonlóan reprezentálják 
a négy 10 költségû osztályt az
$S_{1,4}(x_1,x_2,x_3,x_4)$,
$S_{2,4}(x_1,x_2,x_3,x_4)$,
$(x_4{?}\ x_1\xor x_2\xor x_3{:}\ \langle x_1x_2x_3\rangle)$, és
$[(x_1x_2x_3x_4)_2\in\{0,1,4,7,10,13\}]$. (Ezek közül a harmadik, 
mellékesen komplemense a (\ref{keplet712-20})-nak, a legnehezebb 
eset a \idez{Harvard}-on.\index{Harvard University Computation Laboratory})
%%%
%%%21
%%%
\ujgyak \label{megold711-21}
(A szerzõk állítása szerint az õ táblabemeneteik 
\idez{az akkori írók által ismert leggazdaságosabb mûveleteket kellett hogy tekintsék}.)
%%%
%%%22
%%%
\ujgyak \label{megold711-22} 
 $\nu(x_1x_2x_3x_4x_5)=3$ akkor és csak akkor, ha
        $\nu(x_1x_2x_3x_4)\in\{2,3\}$ és
        $\nu(x_1x_2x_3x_4x_5)$ páratlan.
Hasonlóan,
$S_2(x_1,x_2,x_3,x_4,x_5)=S_3(\bar x_1,\bar x_2,\bar x_3,\bar x_4,\bar x_5)$
magában foglalja $S_{1,2}(x_1,x_2,x_3,x_4)$-et:
\begin{equation*}
\epsfbox{\figdir/ch7a.736}
\end{equation*}
%%%
%%%23
%%%
\ujgyak \label{megold711-23} 
Csak 32 normalizált\gyakindex{normalizált = normal} esetet kell tekinteni 
mint a 9. ábrán, mivel egy szimmetrikus függvény komplementere is szimmetrikus. 
Ezután használhatjuk az $S_{1,2}(x)=S_{3,4}(\bar x)$-hez hasonló tükrözést, 
lehetõség szerint az  $S_{2,3,4,5}(x)=\bar S_{0,1}(x)=\bar S_{4,5}(\bar x)$-hez 
hasonló komplementálással együtt, a megmaradó esetek levezetésére. Természetesen 
$S_1$, $S_{1,3,5}$, és $S_{1,2,3,4,5}$ költsége 4. Ami ezután marad 
$S_{1,2,3,4}(x_1,x_2,x_3,x_4,x_5)=
(x_1\xor x_2)\lor
(x_2\xor x_3)\lor
(x_3\xor x_4)\lor
(x_4\xor x_5)$, amit a \ref{gyak712-79}. gyakorlatban tárgyaltunk általában $n$-re.
%%%
%%%24
%%%
\ujgyak \label{megold711-24} 
Ahogy a szövegben szerepel, ez a sejtés $n\le 5$-re teljesül.
%%%
%%%25
%%%
\ujgyak \label{megold711-25} 
A nem triviális\gyakindex{triviális = trivial} normalizált\gyakindex{normalizált = normal} 
függvények száma $2^{2^n-1}-n-1$. (Egy tetszõleges $r$ hosszúságú normalizált láncban, ami 
nem tartalmazza az összes ilyen függvényt, az $x_j\circ x_k$ egy új függvény lesz $j$-re 
és~$k$-ra, ahol $1\le j,k\le n+r$ és $\circ$ valamilyen normalizált mûvelet; így minden új 
lépésben egy új függvényt számíthatunk ki, amíg mindet sorra nem vettük.)
%%%
%%%26
%%%
\ujgyak \label{megold712-26}
Hamis. Például, ha $g=S_{1,3}(x_1,x_2,x_3)$ és $h=S_{2,3}
(x_1,x_2,x_3)$, akkor $C(gh)=5$ a költsége egy teljes összeadónak\index{teljes összeadó = full adder}. De
$f=S_{2,3}(x_0,x_1,x_2,x_3)$ költsége 6 a \ref{abra712-9}.
ábra szerint.
%%%
%%%27
%%%
\ujgyak \label{megold712-27}
Igen: Az 
`$x_2\gets x_2\xor x_1$,
$x_1\gets x_1\xor x_3$,
$x_1\gets x_1\land\bar x_2$,
$x_1\gets x_1\xor x_3$,
$x_2\gets x_2\xor x_3$'
mûveletek $(x_1,x_2,x_3)$-at $(z_1,z_0,x_3)$-ba képezik le. %???
%%%
%%%28
%%%
\ujgyak\label{megold712-28}
Legyen $v'=v''=v\xor(x\xor y)$, $u'=((v\xor y)\cnimp(x\xor  y))\xor u$,
$u''=((v\xor y)\lor(x\xor  y))\xor u$. Ekkor legyen $u_0=0$, $v_0=x_1$,
$u_j=((v_{j-1}\xor x_{2j+1})\lor(x_{2j}\xor x_{2j+1}))\xor u_{j-1}$, ha $j$ páratlan, és 
$u_j=((v_{j-1}\xor x_{2j+1})\cnimp(x_{2j}\xor x_{2j+1}))\xor u_{j-1}$,
 ha $j$ páros, továbbá $v_j=v_{j-1}\xor(x_{2j}\xor x_{2j+1})$. Így 
$(u_jv_j)_2=(x_1+\cdots+x_{2j+1})\mod4$ minden $1\le j\le\lfloor n/2\rfloor$-re. 
Legyen $x_{n+1}=0$, ha $n$ páros. Ekkor az $[(x_1+\cdots+x_n)\mod4=0]=
\bar u_{\lfloor n/2\rfloor}\land\bar v_{\lfloor n/2\rfloor}$
függvény $\lfloor5n/2\rfloor-2$ lépésben kiszámítható.\par
Ez a konstrukció L.~J. Stockmeyernek\angolnevindex{Stockmeyer, Larry Joseph} 
köszönhetõ, aki azt is bebizonyította, hogy ez 
közel optimális. Valójában a \ref{gyak712-80}. gyakorlat eredménye és a 
\ref{abra712-9}. és \ref{abra712-10}. ábrák együtt azt mutatják, hogy ez a megoldás legalább egy lépéssel hosszabb a 
legjobb láncnál minden $n\ge 5$ esetén. 

Egyébként az analóg $u'''=((v\xor y)\land(x\xor  y))\xor u$ formula 
$(u'''v')_2=((uv)_2+x-y)\mod4$-et eredményezi. Az egyszerûbbnek tûnõ 
$((uv)_2+x+y)\mod4$ függvény költsége azonban 6, és nem 5.
%%%
%%%29
%%%
\ujgyak \label{megold712-29}
Hogy felsõ korlátot kapjunk, tegyük fel, hogy minden teljes és fél összeadó
3-mal növeli meg a mélységet. Ha $a_{jd}$ bit súlya $2^j$ és mélysége 
$3d$, akkor legfeljebb $\lceil a_{jd}/3\rceil$ rákövetkezõ bit súlya lehet 
$2^j$ vagy $2^{j+1}$ $3(d+1)$ mélység mellett. Ekkor indukcióval adódik, hogy 
$a_{jd}\le{d\choose j}3^{-d}n+4$. Így $a_{jd}\le5$, ha 
$d\ge \lg _{3/2}n$, és a teljes mélység legfeljebb $3\log_{3/2}n+3$.
(Érdekes módon a tényleges mélység éppen 100-nak adódik, ha $n=10^7$.)
%%%
%%%30
%%%
\ujgyak \label{megold712-30}
Ezúttal is jelölje $\nu n$ a bitek tömörítõ összegét $n$ bináris reprezentációjában. 
%^^{sideways addition function nu}
Ekkor $s(n)=5n-2\nu n-3\lfloor\lg n\rfloor-3$.
%%%
%%%31
%%%
\ujgyak \label{megold712-31}
A tömörítõ összegek $s(n)<5n$ lépésben való kiszámítása után, 
$(z_{\lfloor\lg n\rfloor},\ldots,z\losub0)$ egy tetszõleges függvénye kiértékelhetõ 
legfeljebb $\sim 2n/\!\lg n$ lépésben az L tétel szerint\null. 
Lásd még \cite{Lupanov1961}\angolnevindex{Lupanov, Oleg Boriszovics (1932--2006, {\rus Lupanov, Oleg Borisovich})}.
%%%
%%%32
%%%
\ujgyak \label{megold712-32}
Bootstrap\index{bootsrap = bootstrap}: Elõször bizonyítsuk be $n$ szerinti indukcióval, hogy $t(n)\le 2^{n+1}$.
%%%
%%%33
%%%
\ujgyak \label{megold712-33}
Hamis, egy technikai sajátosság miatt: Ha mondjuk $N=\sqrt n$, akkor legalább $n$
lépésre van szükség. A helyes aszimptotikus $N+O(\sqrt N\,)+O(n)$ formulát viszont
be lehet bizonyítani. Elõször is vegyük észre, hogy a fejezet módszerével  
$N+O(\sqrt N\,)$ adódik, ha $N\ge 2^{n-1}$. Különben pedig, ha $\lfloor\lg N\rfloor
=n-k-1$, akkor $O(n)$ mûvelet segítségével képezhetjük az $\bar x_1\wedge\cdots\wedge\bar x_k$
érték és a többi $x_{k+1}$, \dots,~$x_n$ változó konjunkcióját,
majd csökkenthetjük $n$ értékét $k$-val.\par
(Ennek az egyik következménye, hogy az $\{S_1,S_2,\ldots,S_n\}$ 
szimmetrikus függvényeket\index{szimmetrikus függvény = symmetric function} 
$s(n)+n+O(\hisqrt n\,)=6n+O(\hisqrt n\,)$ költséggel 
és $O(\lg n)$ mélységgel kiszámíthatjuk.)
%%%
%%%34
%%%
\ujgyak \label{megold712-34}
Egy {\it kiterjesztett\/} prioritás kódolónak legyen $n+1=2^m$ bemenete 
- $x_0x_1\ldots x_n$ - és $m+1$ kimenete - $y_0y_1\ldots y_m$ -, ahol $y_0=
x_0\lor x_1\lor\cdots\lor x_n$. Ha $Q'_m$ és $Q''_m$ kiterjesztett 
kódolók $x'_0\ldots x'_n$, illetve $x''_0\ldots x''_n$ bemenettel, akkor $Q_{m+1}$
$x'_0\ldots x'_nx''_0\ldots x''_n$ bemenettel a következõféleképpen konstruálható meg a 
segítségükkel: 
$y\losub0=y'_0\lor y''_0$, $y\losub1=y''_0$,
$y\losub2=y\losub1{?}\ y''_1{:}\ y'_1$, \dots,
$y\losub{m+1}=y\losub1{?}\ y''_m{:}\ y'_m$.
Ha $P'_m$ egy közönséges prioritás kódoló $x'_1\ldots x'_n$ bemenettel, akkor
$P_{m+1}$ $x'_1\ldots x'_nx''_0\ldots x''_n$ bemenettel hasonlóféleképpen adható meg.

Kezdve $m=2$-vel $y_2=x_3\lor(x_1\land\bar x_2)$,
$y_1=x_2\lor x_3$ és
$y_0=x_0\lor x_1\lor y_1$ adódik. A konstrukció egy $p_m$ költségû $P_m$-et és egy
$q_m$ költségû $Q_m$-et eredményez, ahol $p_2=3$, $q_2=5$, 
továbbá $p_{m+1}=3m+p_m+q_m$ és $q_{m+1}=3m+1+2q_m$,
ha $m\ge2$. Így tehát $p_m=q_m-m$ és $q_m=15\cdot2^{m-2}-3m-4
\approx 3.75n$.%^^{recurrence}
%%%
%%%35
%%%
\ujgyak \label{megold712-35}
Ha $n=2m$, akkor számítsuk ki $x_1\land x_2$, \dots, $x_{n-1}\land x_n$-t,
majd rekurzívan képezzük az $x_1\land\cdots\land x_{2k-2}\land x_{2k+1}\land
\cdots\land x_n$ konjunkciót minden $1\le k\le m$-re, és fejezzük be $n$ további lépéssel. 
Ha $n=2m-1$, használjuk ezt a láncot $n+1$ elemre. Ekkor három lépés törölhetõ, ha 
$x_{n+1}$-nek $1$-et adunk értékül. 
Lásd még Wegener könyvének \cite{Wegener1987}\angolnevindex{Wegener, Ingo Werner (1950--2008)} 3.25. gyakorlatát. 
Ugyanez az ötlet használható {\it bármilyen\/} mûvelet esetén $\land$ helyett, ha az 
asszociatív\index{asszociatív = associative} és kommutatív\index{kommutatív = commutative}.
%%%
%%%36
%%%
\ujgyak \label{megold712-36}
Rekurzívan\index{rekurzívan = recursively} konstruáljuk meg $P_n(x_1,\ldots,x_n)$-et és 
$Q_n(x_1,\ldots,x_n)$-et a következõféleképpen, ahol $P_n$ optimális mélységû és 
$Q_n$ mélysége $\le\lceil\lg n\rceil+1$: $n=1$ esete triviális, különben pedig 
$P_n$-et $Q'_r(x_1,\ldots,x_ r)$-bõl és $P''_s(x_{r+1},\ldots,x_n)$-bõl 
kapjuk meg, ahol $r=\lceil n/2\rceil$ és $s=\lfloor n/2\rfloor$, még hozzá úgy, hogy 
legyen $y^j=y'_j$ minden $1\le j\le r$-re és
$y^j=y'_r\land y''_{j-r}$, ha $r<j\le n$.
$Q_n$-et pedig vagy 
$P'_r(x_1\land x_2,\ldots,x_{n-1}\land x_n)$-bõl vagy 
$P'_r(x_1\land x_2,\ldots,x_{n-2}\land x_{n-1},x_n)$-bõl 
kaphatjuk meg úgy, hogy legyen $y_1=x_1$, $y^{2j}=y'_j$,
$y^{2j+1}=y'_j\land x^{2j+1}$, ha $1\le j<s$,
és legyen $y^{2s}=y'_s$, $y^ n=y'_r$.\breathe

Az érvényesség bizonyításához azt is meg kell mutatnunk, hogy $Q_n$ 
$y_n$ kimenetének a mélysége $\lceil\lg n\rceil$. Vegyük észre, hogy  
$Q_{2m+1}$ hamis lenne, ha $P'_m(x_1\land x_2,\ldots,x_{2m-1}\land x_{2m})$-mel
kezdenénk $P'_{m+1}(x_1\land x_2,\ldots,x_{2m-1}\land x_{2m},x_{2m+1})$ helyett,
{\it kivéve\/} ha $m$ 2 hatványa.\par
\goodbreak 
Ezek a számítások {\it minimális memóriával}\index{minimális memória = minimum memory} is elvégezhetõek, egyszerûen legyen 
$x_{k(i)}\gets x_{j(i)}\land x_{k(i)}$ az $i$. lépésben valamilyen $j(i)<k(i)$ indexekre. Így a konstrukciót ábrázolhatjuk 
a rendezõ hálózatoknál\index{rendezõ hálózat = sorting network} is használt diagrammokkal. Például 
\begin{equation*}
P_8\;=\;
\epsfbox{\figdir/v4a.1011-magyar}
\;;\hskip5em
Q_8\;=\;
\epsfbox{\figdir/v4a.1012-magyar}
\;.
\end{equation*}

A $p_n$ és $q_n$ költségekre teljesülnek a következõk: 
$p_n=\lfloor n/2\rfloor+q_{\lceil n/2\rceil}+p_{\lfloor n/2\rfloor}$ és
$q_n=2\lfloor n/2\rfloor-1+p_{\lceil n/2\rceil}$, 
ha $n>1$. Például $(p_1,\ldots,p_7)=(q_1,\ldots,q_7)=
(0,1,2,4,5,7,9)$. %^^{binary recurrence}
Legyen $\bar p_n=4n-p_n$ és $\bar q_n=3n-q_n$, ekkor egyszerûbb formulákhoz juthatunk, 
amik bizonyítják, hogy $p_n<4n$ és $q_n<3n$:
$\bar q_n=\bar p_{\lceil n/2\rceil}+\hbox{[$n$ páros]}$;
$\bar p_{4n}=\bar p_{2n}+\bar p_n+1$,
$\bar p_{4n+1}=\bar p_{2n}+\bar p_{n+1}+1$,
$\bar p_{4n+2}=\bar p_{2n+1}+\bar p_{n+1}$,
$\bar p_{4n+3}=\bar p_{4n+2}+2$.
Speciálisan $1+\bar p_{2^m}=F_{m+5}$ egy Fibonacci szám\index{Fibonacci szám = Fibonacci number}.\tighten

Lásd még \cite{Ladner1980}.\angolnevindex{Ladner, Richard Emil}\angolnevindex{Fischer, Michael John}  
Valamivel jobb láncokat lehet készíteni, ha a különben nem megengedett $P'_{\lfloor n/2\rfloor}$
konstrukcióját használjuk $Q_n$ elõállításra, ha $n=2^m+1$, ha $P_5$-öt és $P_6$-ot 
$Q_5$-tel és $Q_6$-tal helyettesítjük, és ha ekkor felcseréljük $(P_9,P_{10},P_{11},P_{17})$-et
$(Q_9,Q_{10},Q_{11},Q_{17})$-tel.

Vegyük észre, hogy ez a konstrukció általában is mûködik, ha felcseréljük az `$\land$'-t \textit{bármely} 
asszociatív\index{asszociatív = associative} mûvelettel. Speciálisan az $x_1\xor\cdots\xor x_k$ ($1\le k\le n$) prefixeinek 
sorozata éppen a konverziót adja meg a Gray-kód\index{Gray-kód = Gray binary code} és a radix-2 egészek között, 
lásd még 7.2.1.1--(10).
%%%
%%%37
%%%
\ujgyak \label{megold712-37}
Az $m=15$, $n=16$ eset ábráját lásd jobb oldalt.
{\parfillskip=0pt\hfil
  \llap{\smash{\lower115pt\hbox{\epsfbox{\figdir/v4a.1010}}}}\par}
\hangindent -4.5pc \hangafter-10
(a) Jelölje $x_{i\dts j}$ az $x_i\land\cdots\land x_j$ konjunkció eredeti értékét. 
Meg lehet mutatni, hogy valahányszor az algoritmus elvégzi az 
$x_k\gets x_j\land x_k$ értékadást, $x_k$ elõzõ értéke $x_{j+1\dts k}$. 
Az S1 lépés után $x_k$ éppen $x_{f(k)+1\dts k}$, ahol 
$f(k)=k\band(k-1)$, ha $1\le k<m$, és $f(m)=0$. Az S2 lépés után pedig 
\vadjust{\breathe}%
$x_k$ értéke $x_{1\dts k}$ minden $1\le k\le m$-re.\hfil\break\indent
(b) S1 költsége $m-1$, S2 költsége $m-1-\lceil\lg m\rceil$ 
és S3-é pedig $n-m$. $x_k$ végsõ késése %???
$\lfloor\lg k\rfloor +\nu\,k-1$, ha $1\le k<m$, és $\lceil\lg m\rceil+k-m$, ha 
$m\le k\le n$. Így a maximális késés $\{x_1,\ldots,x_{m-1}\}$-re éppen $g(m)=m-1$, ha $m<4$,
és $g(m)=\lfloor\lg m\rfloor+\lfloor\lg{m\over3}\rfloor$, ha $m\ge4$.
Így azt kapjuk, hogy $c(m,n)=m+n-2-\lceil\lg m\rceil$ és $d(m,n)=\max(g(m),
\lceil\lg m\rceil+n-m)$. Tehát $c(m,n)+d(m,n)=2n-2$, ha 
$n\ge m+g(m)-\lceil\lg m\rceil$.\hfil\break\indent
(c) Az értékek táblázatát felírva kaphatjuk, hogy $d(n)=\lceil\lg n\rceil$, ha $n<8$,
és $d(n)=\lfloor\lg(n-\lfloor\lg n\rfloor+3)\rfloor+
\lfloor\lg{2\over3}(n-\lfloor\lg n\rfloor+3)\rfloor-1$, ha $n\ge8$.
Máshogy fogalmazva $d(n)>d(n-1)>0$ pontosan akkor teljesül, ha 
$n=2^k+k-3$ vagy $2^k+2^{k-1}+k-3$ valamely $k>1$ értékre. A minimum 
$m=n$ mellett vétetik fel, ha $n<8$, különben pedig  
$m=n-\lfloor{2\over3}(n-\lfloor\lg n\rfloor+3)\rfloor+2
-[n=2^k+k-3$ valamilyen $k$-ra$]$ mellett.\par % \[
\breathe(d) Legyen $m\gets m(n,d)$, ahol $m(n,d(n))$ legyen az elõzõ 
állításban definiált érték, 
és $m(n,d)=m(n-1,d-1)$, ha $d>d(n)$.
Lásd még Snir cikkét \cite{Snir1986}\angolnevindex{Snir, Marc}. 
%%%
%%%38
%%%
\ujgyak \label{megold712-38}
(a) Minden $f_k(x_1,\ldots,x_n)$ egy elemi 
szimmetrikus függvény, az úgynevezett $S_{\ge k}(x_1,\ldots,x_n)$
küszöb függvény\index{küszöb függvény = threshold function}.
(Lásd még az 5.3.4--28 gyakorlatot és a (7.1.1--90) képletet.)

(b) Miután kiszámítottuk $\{S_1,\ldots,S_n\}$-t $\approx 6n$ lépésben a 
\ref{megold712-33}. gyakorlat megoldásának megfelelõen, alkalmazhatjuk 
a \ref{gyak712-37}. gyakorlat módszerét és további $2n$ lépésben végezhetünk is.

De sokkal érdekesebb tervezni egy Boole-láncot külön a $2^m+1$ 
$g_k(x_1,\ldots,x_m)=[(x_1\ldots x_m)_2\ge k]$ ($0\le k\le2^m$) 
küszöb függvények kiszámítására. 
Mivel $[(x'x'')_2\ge(y'y'')_2]=[(x')_2\ge(y')_2{+}1]\lor
([(x')_2\ge(y')_2]\land [(x'')_2\ge(y'')_2])$, 
egy oszd meg és uralkodj\index{oszd meg és uralkodj = divide and conquer}
konstrukció megfelel egy bináris 
dekódolónak\index{bináris dekódoló = binary decoder}, ami ezt a problémát 
legfeljebb $2t(m)$ költséggel megoldja.\par
Továbbá, ha $2^{m-1}\le n<2^m$, $\{g_1,\ldots,g_n\}$ ezzel a módszerrel
való kiszámításának $u(n)$ költsége éppen $2n+O(\hisqrt n\,)$,
és ez egészen elfogadható kis $n$-ekre: 
\begin{equation*}
\advance\abovedisplayskip-2pt
  \advance\belowdisplayskip-2pt
\vcenter{\halign{$\hfil#=\,$&&\ \hfil#\hfil\ \cr
n\phantom)&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20\cr
u(n)&0&1&2&4&7&7&8&12&15&17&19&19&20&21&22&27&32&34&36&36\cr}}\kern-1em
\end{equation*}
Kezdve a tömörítõ összegek\index{tömörítõ összeg = sideways addition} 
kiszámításával, $n$ Boole értéket 
$s(n)+u(n)\approx7n$ lépésben rendezhetünk.
Egy rendezõ hálózat $2\hat S(n)$ költséggel jobb, ha 
$n=4$, de rosszabb, ha $n\ge8$. Lásd még 5.3.4--(11), és
Muller és Preparata cikkét \cite{Muller1975}.\angolnevindex{Muller, David E.}\angolnevindex{Preparata, Franco Paolo}
%%%
%%%39
%%%
\ujgyak \label{megold712-39} {Lásd Paterson cikkét \cite{Paterson1980}.}
A következõ azonosság azt mutatja, hogy $C(M_{r+s})\le C(M_r)+2^{r+s}+2^r(2^s-1)+t(s)$, ahol $t(s)$
a (\ref{keplet712-30}) kódoló költsége: 
$$M_{r+s}(x_1,\ldots,x_r,x_{r+1},\ldots,x_{r+s};
y_0,\ldots,y_{2^{r+s}-1})=M_r(x_1,\ldots,x_r;y'_0,\ldots,y'_{2^r-1}),$$
ahol $y'_j=\bigvee_{k=0}^{2^s-1}(d_k\wedge y_{2^s j+k})$
és $d_k$ a $k$-adik kimenete egy $(x_{r+1},\ldots,x_{r+s})$-re alkalmazott 
$s$-bõl-$2^s$ kódolónak. A mélység $D(M_{r+s})=\max\bigl(D_x(M_{r+s}),D_y(M_{r+s})\bigr)$,
ahol $D_x$ és $D_y$ jelöli az $x$ és $y$ változók maximális mélységét. 
Ekkor $D_x(M_{r+s})\le\max\bigl(D_x(M_r),1+s+\lceil\lg s\rceil
+D_y(M_r)\bigr)$ és $D_y(M_{r+s})\le1+s+D_y(M_r)$ teljesül.

Ez $r=\lceil m/2\rceil$ és $s=\lfloor m/2\rfloor$ esetén a következõ eredményeket adja:
$C(M_m)\le 2^{m+1}+O(2^{m/2})$, $D_y(M_m)\le m+1+\lceil\lg m\rceil$,
és $D_x(M_m)\le D_y(M_m)+\lceil\lg m\rceil$.
%%%
%%%40
%%%
\ujgyak \label{megold712-40}
Legyen például $f_{nk}(x)=\bigvee_{j=1}^{n+1-k}(l_{j}(x)\land r_{j+k-1}(x))$, ahol
\begin{equation*}
\begin{split}
l_{j}(x)=
\begin{cases}
x_j,&\text{ha $j\mod k=0$,}\\
\noalign{\breathe}
x_j\land l_{j+1}(x),&\text{ha $j\mod k\ne0$},
\end{cases}&
\quad\hbox{minden $1\le j\le n-(n\mod k)$-ra};\\
\noalign{\smallskip}
r_j(x)=
\begin{cases}
1,&\text{ha $j\mod k=0$,}\\
\noalign{\breathe}
x_j\land r_{j-1}(x),&\text{ha $j\mod k\ne 0$,}\\
\end{cases}&
\quad\hbox{minden $k\le j\le n$-re}.\\
\end{split}
\end{equation*}
A költség $4n-3k-3\bigl\lfloor{n\over k}\bigr\rfloor
-\bigl\lfloor{n-1\over k}\bigr\rfloor+2-(n\mod k)$.\par\breathe
Ha $n$ vagy $k$ kicsi, akkor egy rekurzív megoldás sokkal jobb lenne: 
Figyeljük meg, hogy %^^{recursion} ^^{recurrence}
\begin{equation*}
f_{nk}(x)=
\begin{cases}
x_{n-k+1}\land\cdots\land x_k\land{}\\
\qquad f_{(2n-2k)(n-k)}(x_1,\ldots,x_{n-k},x_{k+1},\ldots,x_n),&\text{ha $k<n<2k$;}\\
\noalign{\smallskip}
f_{\lfloor(n+k)/2\rfloor k}(x_1,\ldots,x_{\lfloor(n+k)/2\rfloor})\lor{}\\
\qquad f_{\lfloor(n+k-1)/2\rfloor k}(x_{\lfloor(n-k)/2\rfloor+1},\ldots,x_n),
&\text{ha $n\ge2k$.}\\
\end{cases}
\end{equation*}
Ennek a megoldásnak a költsége $n-1+\sum_{j=1}^{n-k}\lfloor\lg j\rfloor$, 
ha $k\le n<2k$, és ez aszimptotikusan 
$(m+\alpha_k-1)n+O(km)$ és
$(m+2-2/\alpha_k)n+O(km)$ között helyezkedik el, ha $n\to\infty$,  
$m=\lfloor\lg k\rfloor$ és $1<\alpha_k=(k+1)/2^m\le2$.\breathe

A két módszer ötvözése még jobb eredményt ad. Az optimális költség nem ismert. 
%%%
%%%41
%%%
\ujgyak \label{megold712-41}
Legyen $c(m)$ az $(x)_2+(y)_2$ és $(x)_2+(y)_2+1$ összegek együttes 
kiszámításának költsége a conditional sum módszerrel, ha 
$x$ és $y$ $n=2^m$ bites, és legyen $c'(m)$ az egyszerûbb probléma, azaz 
egyedül $(x)_2+(y)_2$ kiszámításának költsége. Ekkor 
$c(m+1)=2c(m)+6\cdot2^m+2$ és $c'(m+1)=c(m)+c'(m)+3\cdot2^m+1$.
(Az összeg $z_n$ bitjének költsége csak 1, de a $z_k$ biteké ($n<k\le2n+1$) már 3,
mivel $c{?}\ a_k{:}\ b_k$ alakúak, ahol $c$ az átvitel bit.)
Ha $n=1$-gyel, $c(0)=3$-mal és $c'(0)=2$-vel indítjuk a rekurziót, akkor a megoldás 
$c(m)=(3m+5)2^m-2$, $c'(m)=(3m+2)2^m-m$. De $n=2$ esetére vannak jobb konstrukciók is, így 
kezdhetünk $c(1)=11$-gyel és $c'(1)=7$-tel is, és ekkor a megoldás 
$c(m)=(3m+{7\over2})2^m-2$, $c'(m)=(3m+{1\over2})2^m-m+1$. 
Mindkét esetben a mélység $2m+1$.
Lásd még Sklansky cikkét \cite{Sklansky1960}.\angolnevindex{Sklansky, Jack}
%%%
%%%42
%%%
\ujgyak \label{megold712-42}
(a) Mivel $\langle x_ky_kc_k\rangle=u_k\lor(v_k\land c_k)$, alkalmazhatjuk 
(\ref{keplet712-26}) és az állítás adódik indukcióval.

(b) Vegyük észre, hogy $U_k^{k+1}=u_k$ és $V_k^{k+1}=v_k$. Majd alkalmazzunk indukciót $j-i$ szerint.
Lásd még A.~Wein\-berger\angolnevindex{Weinberger, Arnold} 
és Smith\angolnevindex{Smith, John Lynn} cikkét \cite{Weinberger1956}, 
valamint Brent\angolnevindex{Brent, Richard Peirce} és 
Kung\angolnevindex{Kung, Hsiang Tsung} cikkét \cite{Brent1982}.

(c) Elõször is minden $l=1$, 2, \dots, $m-1$ és $1\le k\le n$ értékre számítsuk ki 
$V_i^k$-t $h(l)$ minden olyan $i$ többszörösére, amire $k_{l}\ge i\ge k_{l+1}$ teljesül, 
ahol $k_{l}=h(l)\lfloor(k-1)/h(l)\rfloor$ jelölje $h(l)$ legnagyobb $k$-nál kisebb 
többszörösét. Például, ha $l=2$ és $k=99$, akkor a következõket számítjuk ki: 
$V_{96}^{99}$,
$V_{88}^{99}=V_{96}^{99}\land V_{88}^{96}$,
$V_{80}^{99}=V_{88}^{99}\land V_{80}^{88}$, \dots,
$V_{64}^{99}=V_{72}^{99}\land V_{64}^{72}$; ez egy prefix számítás a 
$V_{96}^{99}$,
$V_{88}^{96}$,
$V_{80}^{88}$, \dots,
$V_{64}^{72}$ értékek felhasználásával, amiket már korábban kiszámítottunk. 
A \ref{gyak712-36}. gyakorlat módszerével az $l$. lépés legfeljebb $l$-lel
növeli meg a mélységet és összesen $(p_1+p_2+\cdots+p_{2^{l}}) n/2^{l}=O(2^{l}n)$ 
kapura van szükség hozzá.\par
Majd ismét minden $l=1$, 2, \dots, $m-1$-re és $1\le k\le n$-re számítsuk ki 
az $U_i^k$ értékeket $i=k_{l+1}$ esetében, felhasználva a következõ \idez{kifejtett} formulát:
$$U_{k_{l+1}}^k\;=\;U_{k_{l}}^k\lor
\bigvee_{\scriptstyle k_{l}>j\ge k_{l+1}\atop\scriptstyle h(l)\j}
(V_{j+h(l)}^k\land U_j^{j+h(l)}).$$
Például, ha $l=3$ és $k=99$, akkor ez a következõ formula: 
$$U_{64}^{99}\;=\;
U_{96}^{99}\lor
(V_{96}^{99}\land U_{88}^{96})\lor
(V_{88}^{99}\land U_{80}^{88})\lor
(V_{80}^{99}\land U_{72}^{80})\lor
(V_{72}^{99}\land U_{64}^{72}).$$
Minden ilyen $U_i^k$ legfeljebb $2^{l}$ term uniója, így legfeljebb $l$ mélység
mellett kiszámítható a termek mélységét figyelmen kívül hagyva. 
A fázis teljes költsége $(0+2+4+\cdots+(2^{l}{-}2))n/2^{l}=O(2^{l}n)$, 
ha $1\le k\le n$.\par
A szükséges $U$-k és $V$-k kiszámításának teljes költsége tehát 
$\sum_{l=1}^{m-1}O(2^{l}n)=O(2^mn)$. (Mi több a $V_{0}^k$ értékekre 
tulajdonképpen nincs is szükség, így $\sum_{l=1}^{m-1}h(l) p_{2^{l}}$ 
kapu költsége megtakarítható.)
Pédául, ha $m=(2,3,4,5)$, akkor a $(2,8,64,1024)$-bites számok összeadására 
kapható lánc teljes mélysége rendre $(3,7,11,16)$, illetve teljes költsége 
$(7,64,1254,48470)$.
{Ez a konstrukció Khrapchenkonak\angolnevindex{Khrapchenko (Hrapcsenko), Valerij Mihajlovics 
({\rus Khrapchenko, Valerii0 Mikhai0lovich})} köszönhetõ \cite{Khrapchenko1967},
aki azt is megmutatta, hogyan lehet más módszerekkel kombinálva elérni $O(n)$ költséget $\lg n+O(\hisqrt{\lg n}\,)$ mélység mellett. 
Azonban kombinált módszere csak elméleti szempontból érdekes, ugyanis csak $n>2^{64}$ esetén lesz a mélység kisebb mint $2\lg n$.
Egy másik módja az alacsony mélység elérésének (b) rekurzív kifejezéseivel alapulhat
a Fibonacci számokon\index{Fibonacci szám = Fibonacci number}:
A Fibonacci módszer az átviteleket $\lg _\phi n+O(1)\approx 1.44\lg n$
mélység és $O(n\lg n)$ költség mellett számítja ki. Például a következõ tulajdonságú 
láncokat eredményezi a bináris összeadásra:
\begin{equation*}
\vcenter{\halign{\hfil#&&\quad\hfil#\hfil\cr
$n$\quad$=$&4&8&16&32&64&128&256&512&1024\cr
\noalign{\vskip2pt}
\mbox{mélység} \enspace&6&7&9&10&12&13&15&16&18\cr
\mbox{költség} \quad&24&71&186&467&1125&2648&6102&13775&30861\cr
}}
\end{equation*}
Lásd \cite{Knuth1994}\angolnevindex{Knuth@\string\Knuth}.

Charles Babbage\angolnevindex{Babbage, Charles (1791--1871)} 
talált egy szellemes mechanikus megoldást a radix 10 számok összeadásának analóg problémájára és azt állította,
hogy tetszõleges pontossággal képes elvégezni az összeadást konstans idõben. 
%for this to work he would have needed idealized, rigid components with
%vanishing clearances. 
% a fenti helyett inkább
De ehhez persze olyan tökéletes alkatrészekre lett volna szüksége, amelyek nem léteznek. Lásd \cite[334--335. oldal]{Babbage1889}. 
Érdekes módon egy egyenértékû ötlet tökéletesen mûködik tranzisztorok esetében, bár ezt nem lehet kifejezni Boole-láncokkal; 
lásd Fenwick cikkét \cite{Fenwick1987}.}\angolnevindex{Fenwick, Peter McAulay}
%%%
%%%43
%%%
\ujgyak \label{megold712-43}
(a) Legyen $A=B=Q=\{0,1\}$ és $q_0=0$. Továbbá legyen $c(q,a)=
d(q,a)=\bar q\land a$.\par
(b) Elõször konstruáljuk meg a $d_1(q)\ldots d_{n-1}(q)$ függvényeket,
ahol $d_1(q)=d(q,a_1)$ és $d_{j+1}(q)=d(d_j(q),a_j)$. Másképp fogalmazva 
$d_1=d_{(a_1)}$ és $d_{j+1}=d_j\circ d_{(a_j)}$,
ahol $d_{(a)}$ a $q\mapsto d(q,a)$ függvény és $\circ$ a 
függvénykompozíciót\index{függvénykompozíció = composition of functions} jelöli. 
Minden $d_j$ függvény bináris alakra kódolható
és ekkor $\circ$ egy asszociatív\index{asszociatív = associative} mûvelet ezeken a bináris 
reprezentációkon. Így a $d_1d_2\ldots d_{n-1}$ függvények a 
$d\losup{(a_1)}$, $d_{(a_1)}\circ d\losup{(a_2)}$, \dots,
$d\losup{(a_1)}\circ\cdots\circ d\losup{(a_{n-1})}$ prefixeknek 
felelnek meg, és $q_1q_2\ldots q_n=q_0@d_1(q_0)\ldots d_{n-1}(q_0)$.\par
(c) Reprezentáljunk egy $f(q)$ függvényt az $f_0f_1$ igazságtáblájával. Ekkor az 
$f_0f_1\circ g_0g_1$ kompozíció $h_0h_1$, ahol a $h_0=f_0{?}\ g_1{:}\ g_0$ és
$h_1=f_1{?}\ g_1{:}\ g_0$ mux\index{mux = mux} függvények, %^^{multiplex operation}
melyek mindegyike 3 költséggel és 2 mélységgel kiszámítható. (A kombinált 
$C(h_0h_1)$ költség csak 5 lenne, de a mélységet minél alacsonyabban próbáljuk 
tartani.) $d\losup{(a)}$ igazságtáblája $a 0$. A \ref{gyak712-36}. gyakorlat felhasználásával, a 
$d_{10}d_{11}d_{20}d_{21}\ldots d_{(n-1)0}d_{(n-1)1}$ igazságtáblákat legfeljebb 
$6p_{n-1}<24n$ költséggel és legfeljebb $2\lceil\lg(n-1)\rceil$ mélységgel 
kiszámíthatjuk; továbbá $b_j=\bar q_j\land a_j=\bar d_{(j-1)0}\land a_j$.
(Ezek a költségbecslések meglehetõsen konzervatívak; alapos egyszerûsítésekre 
lenne lehetõség a kezdeti igazságtáblákban elõforduló sok $0$ miatt és mert 
sok köztes $d_{j1}$ érték sosem kerül felhasználásra. 
Például, ha $n=5$, a tényleges költség csak 10, nem pedig $6p_4+4=28$; 
a tényleges mélység pedig 4, és nem pedig $1+2\lceil\lg 4\rceil=5$.)
%%%
%%%44
%%%
\ujgyak \label{megold712-44}
A bemenet felfogható egy $x_0y_0\,x_1y_1\,\ldots\, x_{n-1}y_{n-1}$
füzérként, aminek az elemei a négyelemû $A=\{00,01,10,11\}$ 
ábécébõl valók; a két állapot $Q=\{0,1\}$ a lehetséges átvitel bitet\index{átvitel bit = carry bit} 
reprezentálja, $q_0=0$; a kimenet ábécéje pedig 
$B=\{0,1\}$; továbbá $c(q,xy)=q\xor x\xor y$,
$d(q,xy)=\langle qxy\rangle$. Ebben az esetben a véges állapotú 
átalakító tulajdonképpen leírható egy teljes összeadóval\index{teljes összeadó = full adder}.

A $d_{(xy)}$ leképezések elõállításakor $q$-nak csak
három függvénye fordul elõ a lehetséges négybõl. 
Ezek lekódolhatóak $u\lor(q\land v)$ alakban.
A kezdõ $d\losup{(xy)}$ függvényekre $u=x\land y$, $v=x\xor y$ adódik,
az $(uv)\circ(u'v')$ kompozícióra pedig $u''v''$, ahol
$u''=u'\lor(v'\land u)$ és $v''=v\land v'$.

\begingroup\advance\baselineskip2pt
Ha $n=4$ például, a lánc a következõ formát ölti 
\vadjust{\vskip-1.5pt}%
a \ref{gyak712-42}. gyakorlat jelöléseivel: 
$U_k^{k+1}=x_k\land y_k$, $V_k^{k+1}=x_k\xor y_k$, ha $0\le k<4$;
$U_{0}^2=U_1^2\lor(V_1^2\land U_{0}^1)$,
$U_2^4=U_3^4\lor(V_3^4\land U_2^3)$,
$V_2^4=V_2^3\land V_3^4$;
$U_{0}^3=U_2^3\lor(V_2^3\land U_{0}^2)$,
$U_{0}^4=U_2^4\lor(V_2^4\land U_{0}^2)$;
$z_0=V_0^1$, $z_1=U_{0}^1\xor V_1^2$, $z_2=U_{0}^2\xor V_2^3$,
\vadjust{\vskip-1.5pt}%
$z_3=U_{0}^3\xor V_3^4$, $z_4=U_{0}^4$. A teljes költség 20 és a
maximális mélység $5$.\par\endgroup
Általános esetben a költségre $2n+3p_n$ adódik a \ref{gyak712-36}. gyakorlat jelöléseivel,
ugyanis $2n$ kapura van szükség a kezdõ $u$-khoz és $v$-khez, majd 
$3p_n$ kapura a prefix számításhoz; a további $n-1$ kaput pedig, ami  
a $z_j$-k ($0<j<n$) kiszámításához szükséges, nem kell figyelembe vennünk, 
ugyanis a költségekbe már amúgy is beleszámított 
$V_0^j$-k kiszámítása szükségtelen ($1<j\le n$).
Így a teljes költség $14\cdot2^m-3F_{m+5}+3$, ami nyilvánvalóan felülmúlja a 
conditional sum módszerrel kapható megoldást (aminek a mélysége szintén $2m+1$):
\begin{equation*}
\vcenter{\halign{\hfil#&&\enspace\hfil#\hfil\cr
$n$\enspace$=$&2&4&8&16&32&64&128&256&512&1024\cr
\noalign{\vskip2pt}
conditional sum lánc költsége\enspace
 &7&25&74&197&492&1179&2746&6265&14072&31223\cr
Ladner--Fischer-lánc költsége\enspace
 &7&20&52&125&286&632&1363&2888&6040&12509\cr
}}
\end{equation*}

{George Boole\angolnevindex{Boole, George (1815--1864)} azért találta ki az algebráját, hogy megmutassa, a logika aritmetikai 
kifejezésekkel is leírható. Azóta a helyzet megfordult. Olyanok mint Shannon\angolnevindex{Shannon, Claude Elwood, Jr. (1916--2001)} 
és Zuse\angolnevindex{Zuse, Konrad (1910--1995)} az 1930-as években elkezdtek áramköröket tervezni logikai alapokon aritmetikai 
számításokra és azóta is számos új megközelítést fedeztek fel a párhuzamos összeadás\index{párhuzamos összeadás = parallel addition} 
problémáját vizsgálva. Az elsõ $O(n)$ költségû és $O(\lg n)$ mélységû Boole-láncokat 
Ofman\angolnevindex{Ofman, Jurij Petrovics ({\rus Ofman, Yurii0 Petrovich})} szerkesztette meg \cite{Ofman1962}. 
Az õ láncai hasonlóak voltak a fenti konstrukcióhoz, de a mélységük hozzávetõlegesen $4m$ volt.}
%%%
%%%45
%%%
\ujgyak \label{megold712-45}
Ez a fajta érvelés valóban egyszerûbb lenne, de nem elég erõs a kitûzött eredmény bizonyításához. (Számos 0 kimenet 
értékû\index{kimenet érték = fan-out} lépéseket is tartalmazó lánc mutatható, ami felduzzasztja az egyszerûbb becslést.) 
A fejezet permutációkon alapuló bizonyítási technikáját elõször Savage\angolnevindex{Savage, John Edmund} 
alkalmazta könyvében, \cite[3.4.1. tétel]{Savage1976}.
%%%
%%%46
%%%
\ujgyak\label{megold712-46}
Legyen $r=2^n\!/n+O(1)$, ekkor $\ln(2^{2r+1}(n{+}r{-}1)^{2r}\!/(r-1)!)
=r\ln r+(1{+}\ln4) r+O(n)=(2^n\!/n)(n\ln 2-\ln n+1+\ln 4)+O(n)$.
Így $\alpha(n)\le(n/(4e))^{-2^n\!/n+O(n/\!\lg n)}$, ami 
csakugyan meglehetõsen gyorsan tart nullához, ha $n>4e$. 
(És valóban, (\ref{keplet712-32}) szerint
$\alpha(11)<7.6\times 10^7$, % sic +7
$\alpha(12)<4.2\times 10^{-6}$,
$\alpha(13)<1.2\times 10^{-38}$.)
%%%
%%%47
%%%
\ujgyak \label{megold712-47}
Tekintsük most a permutációknak csak azon $(r-m)!$ esetét, amikor $i\pi=i$ minden $1\le
i\le n$ esetén és $(n{+}r{+}1{-}k)\pi$ a $k$-adik kimenet. Ekkor (\ref{keplet712-32})  
helyett $(r-m)!\,c(m,n,r)\le 2^{2r+1}(n{+}r{-}1)^{2r}$ adódik.
Ebbõl pedig a \ref{gyak712-46}. gyakorlat alapján következik, hogy majdnem minden ilyen függvény 
költsége meghaladja a $2^nm/(n+\lg m)$ értéket, ha $m=O(2^n\!/n^2)$.
%%%
%%%48
%%%
\ujgyak \label{megold712-48}
(a) Nem meglepõ módon a $C(n)$ értékére adott alsó korlát kis $n$-ekre meglehetõsen pontatlan:
\begin{equation*}
\advance\abovedisplayskip-2pt
  \advance\belowdisplayskip-2pt
\vcenter{\halign{$\hfil#=\,$&&\ \hfil#\hfil\ \cr
n\phantom)&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16\cr
r(n)&1&1&2&3&5&9&16&29&54&99&184&343&639&1196&2246&4229\cr}}\kern-1em
\end{equation*}

(b) A bootstrap módszer\index{bootstrap módszer = bootstrap method} 
(lásd \cite[S9.4.]{Knuth1994}) a következõ eredményt adja:
\begin{equation*}
r(n)={2^n\over n}\Bigl(1+{\lg n - 2 - 1/\!\ln 2\over n}+
  O\Bigl({\lg n\over n^2}\Bigr)\Bigr).
\end{equation*}
%%%
%%%49
%%%
\ujgyak \label{megold712-49}
Azon normalizált Boole-függvények száma, amelyek reprezentálhatóak $r$-nél nem 
hosszabb formulával, legfeljebb $5^r n^{r+1} g_r$, ahol
$g_r$ az $r$ belsõ csúccsal rendelkezõ irányított bináris fák\index{irányított bináris fa = oriented binary tree} száma. 
Helyettesítsünk most $r$ helyébe $2^n/\lg n-2^{n+2}/(\lg n)^2$-t a képletben és osszunk $2^{2^n-1}$-gyel, hogy felsõ 
korláthoz jussunk a legfeljebb $r$ hosszú függvények hányadrészére. Az eredmény gyorsan konvergál nullához, lásd a 
2.3.4.4--7. gyakorlatot, ugyanis ez $O((5\alpha/16)^{2^n/\lg n})$, ahol $\alpha\approx 2.483$.

Riordan\angolnevindex{Riordan, John (1902--1988)} és Shannon\angolnevindex{Shannon, Claude Elwood, Jr. (1916--2001)} 
egy hasonló alsó korláthoz jutottak soros-párhuzamos kapcsoló 
hálózatokra\index{soros-párhuzamos kapcsoló hálózat = series-parallel switching network} 
\cite{Riordan1942}, az ilyen hálózatok kölcsönösen megfeleltethetõek olyan formuláknak, amelyek csak irányító 
operátorokat\index{irányító operátor = canalizing operator} használnak. 
Krichevsky\angolnevindex{Krichevsky, Rafail Jevszejevics ({\rus Krichevskii0, Rafail Evseevich})} általánosabb eredményeket is 
levezetett \cite{Krichevsky1959}, és Lupanov\angolnevindex{Lupanov, Oleg Boriszovics (1932--2006, {\rus Lupanov, Oleg Borisovich})} 
adott egy aszimptotikusan megegyezõ felsõ korlátot \cite{Lupanov1960}.
%%%
%%%50
%%%
\ujgyak \label{megold712-50}
(a) Felhasználva a 7.1.1-\ref{gyak711-30}-as gyakorlatban is alkalmazott alkocka\index{alkocka = subcube} jelölést
\begingroup\def\*{{*}}\catcode`\*=\active \let*=\*%
a prím implikánsokra a következõk adódnak:  
$00001*$,
($0001*1$),
$0100*1$,
$0111*1$,
$1010*1$,
$101*11$,
$00*011$,
$00*101$,
($01*111$),
$11*101$,
($0*1101$),
($1*0101$),
$1*1011$,
$0*0*11$,
$*00101$,
($*01011$),
($*11101$),
ahol a zárójelben lévõ alkockák elhagyásával adódik a legrövidebb DNF. 
(b)~Hasonlóképpen adódnak a prím klózok és a legrövidebb KNF: 
$00111*$,
$01010*$,
$10110*$,
$0110**$,
$00*00*$,
$11*00*$,
$11*11*$,
($0*100*$),
($1*00**$),
$1*0*1*$,
($1****0$),
$*0000*$,
($*1100*$),
$*1***0$,
$**1**0$,
$***1*0$,
és ($****00$). \endgroup
(Így tehát a KNF
$(x_1{\lor}x_2{\lor}\bar x_3{\lor}\bar x_4{\lor}\bar x_5)\land
 (x_1{\lor}\bar x_2{\lor}x_3{\lor}\bar x_4{\lor}x_5)\land
\cdots\land(\bar x_4{\lor}x_6)$.)
%%%
%%%51
%%%
\ujgyak \label{megold712-51}
\begingroup\advance\baselineskip1pt
$f=\bigl([x_5x_6\in\{01\}]\land
 [(x_1x_2x_3x_4)_2\in\{1,3,4,7,9,10,13,15\}]\bigr)
\lor\bigl([x_5x_6\in\{10,11\}]\land\break [x_1x_2x_3x_4=0000]\bigr)
\lor\bigl([x_5x_6\in\{11\}]\land
  [(x_1x_2x_3x_4)_2\in\{1,2,4,5,7,10,11,14\}]\bigr)
_{\mathstrut}$.\par\endgroup
%%%
%%%52
%%%
\ujgyak\label{megold712-52}
A kis $n$-ekre kapható eredmények jelentõsen eltérnek az aszimptotikus értékektõl:
\begin{equation*}
\advance\abovedisplayskip-3pt
\vcenter{\halign{\hfil#\hfil&&\ \hfil#\hfil\cr
$n$&$k$&$l$&(\ref{keplet712-38})\cr
\noalign{\vskip2pt}
5&2&2&39\cr
6&2&2&67\cr
7&2&1&109\cr
}}\qquad\qquad\vcenter{\halign{\hfil#\hfil&&\ \hfil#\hfil\cr
$n$&$k$&$l$&(\ref{keplet712-38})\cr
\noalign{\vskip2pt}
8&3&2&175\cr
9&3&2&279\cr
10&4&4&471\cr
}}\qquad\qquad\vcenter{\halign{\hfil#\hfil&&\ \hfil#\hfil\cr
$n$&$k$&$l$&(\ref{keplet712-38})\cr
\noalign{\vskip2pt}
11&4&4&803\cr
12&4&3&1329\cr
13&5&6&2355\cr
}}\qquad\qquad\vcenter{\halign{\hfil#\hfil&&\ \hfil#\hfil\cr
$n$&$k$&$l$&(\ref{keplet712-38})\cr
\noalign{\vskip2pt}
14&5&5&4045\cr
15&5&5&7141\cr
16&5&4&12431\cr
}}
\end{equation*}
%% another data point is: n=32 k=8 l=13 bound=257958261
(A költségek általában tovább csökkenthetõek olyan optimalizálások révén, mint $[x_1 x_2 \in \{00,01\}] = \bar x_1$.)
%%%
%%%53
%%%
\ujgyak \label{megold712-53}
Elõször vegyük észre, hogy $2^k/l\le n-3\lg n$, így $m_i\le
n-3\lg n+1$ és $2^{m_i}=O(2^n/n^3)$. Továbbá $l=O(n)$ és
$t(n-k)=O(2^n/n^2)$. Ezért  (\ref{keplet712-38}) a következõ egyszerû alakban felírható: 
$l\cdot2^{n-k}+O(2^n/n^2)=2^n/(n-3\lg n)+O(2^n/n^2)$.
%%%
%%%54
%%%
\ujgyak\label{megold712-54}
A mohó-lábnyom heurisztika\index{mohó-lábnyom heurisztika = greedy-footprint heuristic} a következõ 15 hosszú láncot adja: 
\begin{equation*}
\begin{split}
x_5&=x_1\xor x_2,\\
x_6&=x_2\xor x_3,\\
x_7&=x_1\land\bar x_3,\\
x_8&=x_4\land\bar x_6,\\
x_9&=x_4\land\bar x_5,\\
\end{split}
\qquad
\begin{split}
x_{10}&=x_4\xor x_5,\\
x_{11}&=x_7\lor x_{10},\\
x_{12}&=x_6\xor x_{11},\\
x_{13}&=\bar x_{10}\land x_{12},\\
f_1=x_{14}&=x_6\land\bar x_{11},\\
\end{split}
\qquad
\begin{split}
f_2=x_{15}&=\bar x_5\land x_8,\\
f_3=x_{16}&=x_4\land\bar x_{12},\\
f_4=x_{17}&=x_1\land x_8,\\
f_5=x_{18}&=x_7\land x_9,\\
f_6=x_{19}&=\bar x_3\land x_{13}.\\
\end{split}
\end{equation*}
A minterm-first módszer alkalmazása egy 22 hosszú láncot eredményez, miután eltávolítjuk a sohasem használt lépéseket:
\begin{equation*}
\begin{split}
x_5&=\bar x_1\land\bar x_2,\\
x_6&=\bar x_1\land x_2,\\
x_7&=x_1\land\bar x_2,\\
x_8&=x_1\land x_2,\\
x_9&=\bar x_3\land x_4,\\
x_{10}&=x_3\land\bar x_4,\\
x_{11}&=x_3\land x_4,\\
x_{12}&=x_5\land x_9,\\
\end{split}
\qquad
\begin{split}
x_{13}&=x_5\land x_{10},\\
x_{14}&=x_5\land x_{11},\\
x_{15}&=x_6\land x_9,\\
x_{16}&=x_6\land x_{11},\\
x_{17}&=x_7\land x_9,\\
x_{18}&=x_7\land x_{11},\\
f_5=x_{19}&=x_8\land x_9,\\
\\
\end{split}
\qquad
\begin{split}
x_{20}&=x_8\land x_{11},\\
f_6=x_{21}&=x_{15}\lor x_{18},\\
f_1=x_{22}&=x_{13}\lor x_{21},\\
f_2=x_{23}&=x_{12}\lor x_{20},\\
x_{24}&=x_{14}\lor x_{16},\\
f_3=x_{25}&=x_{24}\lor x_{19},\\
f_4=x_{26}&=x_{17}\lor x_{20}.\\
\\
\end{split}
\end{equation*}
(A disztributivitási szabály segítségével $x_{14}$, $x_{16}$ és $x_{24}$ 
kiszámítását két lépéssel helyettesíthetnénk.)\par
Egyébként az \ref{megold712-51}. gyakorlat megoldásában szereplõ három függvény csupán tíz lépésben kiszámítható: 
\begin{equation*}
\begin{split}
x_5&=x_2\lor x_4,\\
x_6&=\bar x_1\land x_5,\\
x_7&=x_2\land x_4,\\
x_8&=x_3\land\bar x_7,\\
\end{split}
\qquad
\begin{split}
f_3=x_9&=x_6\xor x_8,\\
x_{10}&=x_1\xor x_8,\\
\bar f_2=x_{11}&=x_9\lor x_{10},\\
\\
\end{split}
\qquad
\begin{split}
x_{12}&=x_2\xor x_3,\\
x_{13}&=\bar x_{10}\land x_{12},\\
f_1=x_{14}&=x_4\xor x_{13}.\\
\\
\end{split}
\end{equation*}
%%%
%%%55
%%%
\ujgyak\label{megold712-55}
Az \ref{megold712-50}. gyakorlat megoldásában kapott optimális kétszintû DNF\index{DNF = DNF} és KNF\index{KNF = CNF} 
reprezentációk költsége 53, illetve 43. A (\ref{keplet712-37}) formula költsége 30, ha az \ref{gyak712-54}. 
gyakorlatnak megfelelõen optimalizáljuk. Az \ref{gyak712-51}. gyakorlatban szereplõ alternatíva költsége 
csak 17. Az optimális ötváltozós láncok katalógusa viszont a következõ megoldást javasolja erre a hatváltozós függvényre: 
\begin{equation*}
\begin{split}
x_7&=\bar x_1\land x_2,\\
x_8&=x_3\xor x_7,\\
x_9&=x_2\land x_8,\\
x_{10}&=x_1\xor x_9,\\
\end{split}
\qquad
\begin{split}
x_{11}&=x_5\land x_{10},\\
x_{12}&=x_5\lor  x_{10},\\
x_{13}&=x_4\land\bar x_{11},\\
x_{14}&=x_7\land x_{12},\\
\end{split}
\qquad
\begin{split}
x_{15}&=x_{13}\xor x_{14},\\
x_{16}&=x_5\land\bar x_{10},\\
x_{17}&=\bar x_3\land x_{16},\\
\\
\end{split}
\qquad
\begin{split}
x_{18}&=\bar x_4\land x_{17},\\
x_{19}&=x_6\land x_{15},\\
x_{20}&=x_{18}\lor x_{19},\\
\\
\end{split}
\end{equation*}
Van-e vajon jobb megoldás?
%%%
%%%56
%%%
\ujgyak \label{megold712-56}
Ha legfeljebb két érték meghatározott, akkor a függvény konstans vagy 
$x_j$ vagy pedig $\bar x_j$.\tighten
%%%
%%%57
%%%
\ujgyak \label{megold712-57}
Az $x_5$ \dots $x_{17}$ formulák igazságtáblái hexadecimális jelöléssel rendre 
\texttt{0ff0},
\texttt{2222},
\texttt{33cc},
\texttt{0d0d},
\texttt{7777},
\texttt{5d5d},
\texttt{3ec1},
\texttt{6b94},
\texttt{4914},
\texttt{4804},
\texttt{060b},
\texttt{2020},
\texttt{7007}.
Így a következõ ''számjegyeket'' kapjuk:\tighten
\begin{equation*}
%\def\\#1{\vcenter{\def\epsfsize##1##2{.5##1}\epsfbox{\figdir/v4a.127#1}}}
1010=\\0\,,\quad
1011=\\1\,,\quad
1012=\\2\,,\quad
1013=\\3\,,\quad
1014=\\4\,,\quad
1015=\\5\,.
\end{equation*}%ide jön majd egy ábra fentebb
%%%
%%%58
%%%
\ujgyak \label{megold712-58}
Azon 7 költségû függvények igazságtáblái, amelyek igazságtáblái pontosan nyolc egyest tartalmaznak, mind 
ekvivalensek a következõk valamelyikével: \texttt{0779}, \texttt{169b} vagy
\texttt{179a}. Ezek valamennyi lehetséges kombinációját elõállítva 9656 olyan megoldáshoz juthatunk, 
amelyek különböznek egymástól figyelembe véve $\{x_1,x_2,x_3,x_4\}$, illetve $\{f_1,f_2,f_3,f_4\}$ 
esetleges permutációit és komplementereit. %ez a mondat nem tetszik... 
%%%
%%%59
%%%
\ujgyak \label{megold712-59}
A mohó-lábnyom heurisztika a következõ 17 lépéses láncot adja: 
\begin{equation*}
\begin{split}
x_5&=x_1\lor x_4,\\
x_6&=x_1\xor x_3,\\
x_7&=x_2\xor x_4,\\
x_8&=\bar x_4\land x_6,\\
x_9&=x_3\xor x_7,\\
x_{10}&=x_2\lor x_3,\\
\end{split}
\qquad
\begin{split}
x_{11}&=x_8\lor x_9,\\
x_{12}&=x_1\xor x_{11},\\
x_{13}&=x_5\land\bar x_9,\\
x_{14}&=x_5\land x_{12},\\
x_{15}&=x_2\land x_6,\\
x_{16}&=x_2\land\bar x_6,\\
\end{split}
\qquad
\begin{split}
x_{17}&=\bar x_2\land x_3,\\
f_1=x_{18}&=x_{13}\xor x_{15},\\
f_2=x_{19}&=x_{11}\land\bar x_{16},\\
f_3=x_{20}&=x_{12}\xor x_{17},\\
f_4=x_{21}&=x_{10}\land\bar x_{14}.\\
\\
\end{split}
\end{equation*}
A kiinduló függvények lábnyoma nagy, így nem érhetjük el, hogy $C(f_1f_2f_3f_4)=28$ 
teljesüljön, de egy alig valamivel bonyolultabb S-doboz valószínûleg létezik.
%%%
%%%60
%%%
\ujgyak \label{megold712-60}
Az egyik lehetõség, hogy $u_1=x_1\xor y_1$, $u_2=x_2\xor y_2$,
$v_1=y_2\xor u_1$, $v_2=y_1\xor u_2$,
$z_1=v_1\land\bar u_2$, $z_2=v_2\land\bar u_1$.\tighten
%%%
%%%61
%%%
\ujgyak \label{megold712-61}
Tekintsünk ezekre a hatváltozós parciális függvényekre mint $4\times16$-os 
igazságtáblákra, amelyek sorait $x_1y_1$ határozzák meg.
Ekkor a 4-bites függvényekrõl szerzett ismereteinkkel hatékonyan 
kiszámíthatjuk a sorokat és ez végül a következõ 25 lépésbõl álló megoldáshoz vezet: 
$t_1=x_2\land y_2$,
$t_2=x_3\land y_3$,
$t_3=x_2\lor y_2$,
$t_4=x_3\lor y_3$,
$t_5=t_1\xor t_2$,
$t_6=t_1\lor t_2$,
$t_7=t_4\land\bar t_5$,
$t_8=t_3\xor t_6$,
$t_9=x_2\xor y_2$,
$t_{10}=t_4\xor t_9$,
$t_{11}=t_5\land\bar t_{10}$,
$t_{12}=t_3\xor t_4$,
$t_{13}=x_1\lor y_1$,
$t_{14}=t_8\xor t_{12}$,
$t_{15}=t_{13}\land\bar t_{14}$,
$t_{16}=t_4\xor t_7$,
$t_{17}=t_{13}\land\bar t_{16}$,
$t_{18}=t_3\lor t_4$,
$t_{19}=x_1\xor y_1$,
$t_{20}=t_{19}\land\bar t_{18}$,
$t_{21}=t_8\xor t_{15}$,
$t_{22}=t_7\xor t_{17}$,
$z_1=t_{11}\lor t_{20}$,
$z_2=t_{21}\land\bar t_{20}$,
$z_3=t_{22}\land\bar t_{20}$. (Létezik-e jobb megoldás?
Gilbert Lee talált egy 17 lépéses megoldást arra az esetre, 
amikor a bemenet csak 000, 001, 011, 101 vagy 111 lehet.)
%%%
%%%62
%%%
\ujgyak \label{megold712-62}
Összesen ${2^n\choose 2^n\!d}2^{2^n\!c}$ ilyen függvény létezik és legfeljebb 
${2^n\choose 2^n\!d}t(n,r)$ költsége $\le r$. Így a \ref{gyak712-46}.  
gyakorlatban is alkalmazott érveléssel megmutathatjuk (\ref{keplet712-32}) 
felhasználásával, hogy a legfeljebb $r=\lfloor2^n c/n\rfloor$ költségû
függvények hányadrésze legfeljebb 
$2^{2r+1-2^n c}(n+r-1)^{2r}/(r-1)!=2^{-r\lg n+O(r)}$.
%%%
%%%63
%%%
\ujgyak \label{megold712-63}
\cite{Sholomov1969}\angolnevindex{Sholomov, Lev Abramovics ({\rus Sholomov, Lev Abramovich})} 
Írjuk fel az igazságtáblát egy $2^k\times 2^{n-k}$ méretû táblázatba, ahogyan 
Lupanov\angolnevindex{Lupanov, Oleg Boriszovics (1932--2006, {\rus Lupanov, Oleg Borisovich})} 
módszerében is tettük, és tegyük fel, hogy a $j$. oszlopban $c_j$ érték 
van megadva -- a többi don't-care -- minden $0\le j<2^{n-k}$-ra.
Majd osszuk fel az oszlopot $\lfloor c_j/m\rfloor+1$ részre úgy, hogy 
a legalsó esetlegesen üres részoszlop kivételével minden rész $m$ definiált értéket tartalmazzon. 
A segítség szerint legfeljebb $2^{m+k}$ oszlopvektor elegendõ az összes 
$0$ és $1$ lefedéséhez azokban a részoszlopokban, amelyek legfelsõ és 
legalsó sora egy-egy rögzített $i_0$, illetve $i_1$ indexhez tartozik. 
Ekkor $O(m2^{m+3k})$ mûvelettel megkonstruálhatunk $O(2^{m+3k})$ 
$g_t(x_1,\ldots,x_k)$ függvényt az $\{x_1,\ldots,x_k\}$ mintermjeibõl úgy, 
hogy minden részoszlop illeszkedjen egy $t$ típusra. 
És minden $t$ típusra $\{x_{k+1},\ldots,x_n\}$ mintermejeibõl megszerkeszthetünk
olyan $h_t(x_{k+1},\ldots,x_n)$ függvényeket, 
amik megadják, hogy melyik oszlopok illeszkednek egy adott $t$-re. 
A költség legfeljebb $\sum_j(\lfloor c_j/m\rfloor+1)\le 2^n c/m+2^{n-k}$. 
Végül pedig $f=\bigvee_t(g_t\land h_t)$ további $O(2^{m+3k})$ lépést igényel.
A teljes költségre tehát legfeljebb $(2^n c/n)(1+9n\_\lg n+O(n\_))$, 
ha a $k=\lfloor2\lg n\rfloor$, $m=\lceil n-9\lg n\rceil$ értékeket választjuk.\par
Természetesen a segítségben megfogalmazott állítást is be kellene 
bizonyítani, ami Necsiporuknak\angolnevindex{Necsiporuk, Eduard Ivanovics ({\rus Nechiporuk, E1duard Ivanovich})} 
köszönhetõ \cite{Nechiporuk1965}. Voltaképpen $2^m(1+\lceil k\ln 2\rceil)$ vektor is elegendõ 
(lásd \cite{Stein1974}\angolnevindex{Stein, Sherman Kopald}):
Ha véletlenszerûen választunk $q=2^m\lceil k\ln 2\rceil$ nem feltétlenül 
különbözõ vektort, akkor az érintetlenül hagyott részkockák várható száma 
${k\choose m}2^m(1-2^{-m})^q<\smash{{k\choose m}2^me\losup{-q2^{-m}}}<2^m$.
(Egy explicit bizonyításnak persze jobban örülnénk.)\breathe
További széles körû általánosítások -- bizonyos mértékû hibatolerancia kezelése 
és az egyesek sûrûségének megadása -- megtalálhatóak  
Pippenger cikkében \cite{Pippenger1977a}\angolnevindex{Pippenger, Nicholas John}. 
%%%
%%%64
%%%
\ujgyak\label{megold712-64}
Ez éppen az amõba\index{amõba = tic-tac-toe}, ha a mezõket így számozzuk meg: 
\begingroup\def\O/{{\eightss O}}\def\X/{{\eightss X}}%
\font\tiny=cmss8 at 3.6pt
\newdimen\uu \uu=.18pt
\uu=.18pt
\def\cell#1#2#3{\vrule height2.9pt depth.6pt width0pt
            \hbox to3.5pt{\hss\tiny\ifx#1.\else
              \kern#2\uu\raise#3\uu\hbox{#1}\fi\hss}}%
\def\\#1#2#3#4#5#6#7#8#9{\vcenter to11pt{\offinterlineskip
 \halign{\cell##&\vrule width.25pt\cell##&\vrule width.25pt\cell##\cr
 {#1}{-1}1&{#2}01&{#3}11\cr
 \noalign{\hrule height.25pt}
 {#4}{-1}0&{#5}00&{#6}10\cr
 \noalign{\hrule height.25pt}
 {#7}{-1}{-1}&{#8}0{-1}&{#9}1{-1}\cr}\kern0pt}}%
\endgroup 
$\\618753294$ - éppen ahogy egy õsi kínai bûvös négyzeten\index{bûvös négyzet = magic square}. %^^{Lo Shu magic sq}
{Berlekamp\angolnevindex{Berlekamp, Elwyn Ralph}, 
Conway\angolnevindex{Conway, John Horton}, 
és Guy\angolnevindex{Guy, Richard Kenneth} 
ezt a számozási sémát használják az amõba teljes elemzésekor könyvükben \cite{Berlekamp2003}.}
%%%
%%%65
%%%
\ujgyak \label{megold712-65}
Az egyik megoldás, hogy a \idez{védekezõ} $d_j$ lépéseket felcseréljük \idez{támadó} $a_j$ és 
\idez{ellentámadó} $c_j$ lépésekre, és csak a $j\in\{1,3,9,7\}$ sarok mezõkben alkalmazzuk õket. 
Legyen $j\cdot k = (jk)\mod 10$, ekkor
\begin{equation*}
\begin{matrix}
j\cdot1&j\cdot2&j\cdot3\\
j\cdot4&j\cdot5&j\cdot6\\
j\cdot7&j\cdot8&j\cdot9\\
\end{matrix}
\end{equation*}
egy újabb ábrázolása az amõbának, ha $j$ egy sarok mezõ, ugyanis $j\perp 10$. Így $a_j$ és $c_j$ pontos definíciója:
\begin{equation*}
\begin{split}
a_j&=
m_j\land\bigl(
\bigl(x_{j\cdot3}\land\beta_{(j\cdot8)(j\cdot9)}\land
  (o_{j\cdot4}{\xor} o_{j\cdot6})\bigr) \lor
\bigl(x_{j\cdot7}\land\beta_{(j\cdot6)(j\cdot9)}\land
  (o_{j\cdot2} {\xor} o_{j\cdot8})\bigr)\\
&\hskip5em{}\lor
\bigl(m_{j\cdot9}\land\bigl(
      (m_{j\cdot8}\land x_{j\cdot2}\land
             \overline{(o_{j\cdot3}{\xor}o_{j\cdot6})})\lor
      (m_{j\cdot6}\land x_{j\cdot4}\land
             \overline{(o_{j\cdot7}{\xor}o_{j\cdot8})})\bigr)\bigr)\bigr);\\
c_j&=d_j\land\overline{(x_{j\cdot6}\land o_{j\cdot7})}
    \land\overline{(x_{j\cdot8}\land o_{j\cdot3})}\land\bar d_{j\cdot9};\\
\end{split}
\end{equation*}
itt $d_j=m_j\land\beta_{(j\cdot2)(j\cdot3)}\land\beta_{(j\cdot4)(j\cdot7)}$
helyettesíti (\ref{keplet712-51})-et. Továbbá legyen 
\begin{equation*}
\begin{split}
u&=(x_1\xor x_3)\xor(x_7\xor x_9),\\
v&=(o_1\xor o_3)\xor(o_7\xor o_9),\\
t&=m_2\land m_6\land m_8\land m_4\land(u\lor\bar v),\\
\end{split}
\qquad\qquad
\begin{split}
z_j=
\begin{cases}
m_j\land\bar t,&\text{ha $j=5$,}\\
\noalign{\smallskip}
m_j\land\bar d_{j\cdot9},&\text{ha $j\in\{1,3,9,7\}$,}\\
\noalign{\smallskip}
m_j,&\text{ha $j\in\{2,6,8,4\}$,}\\
\end{cases}
\end{split}
\end{equation*}
hogy kezeljünk még néhány kivételes esetet. Végül a lépések
rangsorolt %rank-ordered 
sorozatát, $d_5d_1d_3d_9d_7d_2d_6 \allowbreak d_8d_4m_5m_1m_3m_9m_7m_2m_6m_8m_4$-et (\ref{keplet712-53})-ban
helyettesítsük $a_1a_3a_9a_7c_1c_3c_9c_7z_5z_1z_3z_9z_7z_2z_6z_8z_4$-gyel, és cseréljük fel 
$(d_j{\land}\bar d^{\prime}_j)\lor
(m\losub j{\land}\rlap{$\bar{\phantom n}$}\bar m'_j)$-t (\ref{keplet712-55})-ben 
$(a\losub j{\land}\bar a'_j)\lor
 (c\losub j{\land}\bar c'_j)\lor
 (z\losub j{\land}\bar z'_j)$-vel, ha $j$ egy sarok mezõ, különben pedig egyszerûen 
$(z_j{\land}\bar z'_j)$-vel.\breathe

(Megjegyezzük, hogy ennek a gépnek \textit{valamennyi} megengedett pozícióból 
jól kell tudnia lépnie, még olyan pozíciókból is, amelyek nem fordulhatnak elõ 
a gép korábbi lépései miatt. Felfogható úgy is, hogy megengedjük az emberi játékosnak, hogy egy ideig maga játsszon és
csak utána hívja segítségül a gépet. Ellenkezõ esetben jelentõs egyszerûsítésekre lenne lehetõség. 
%Például, ha mindig \X/ kezd, akkor elsõ lépésként elfoglalhatja a középsõ mezõt, ezzel 
Például, ha mindig $\times$ kezd, akkor elsõ lépésként elfoglalhatja a középsõ mezõt, ezzel
kiiktatva számos jövõbeli lehetõséget. 
Ekkor kevesebb mint $8\times 6\times 4\times 2=384$ játszma fordulhatna elõ. 
Még akkor is, ha \O/ kezd, kevesebb mint $9\times 7\times 5\times 3=945$ 
lehetséges forgatókönyv létezik egy rögzített stratégia mellett. 
Tulajdonképpen a különbözõ játszmák valódi száma az itt definiált stratégia mellett $76+457$, 
amibõl $72+328$-at a gép nyer meg, míg a maradék pedig döntetlen.) 

\begingroup\def\O/{{\eightss O}}\def\X/{{\eightss X}}
\font\tiny=cmssq8 at 3.9pt
\newdimen\uu \uu=.2pt
\def\cell#1#2#3{\vrule height3.1pt depth.7pt width0pt
            \hbox to3.8pt{\hss\tiny\ifx#1.\else
              \kern#2\uu\raise#3\uu\hbox{#1}\fi\hss}}
\def\\#1#2#3#4#5#6#7#8#9{\vcenter to12pt{\offinterlineskip
 \halign{\cell##&\vrule width.3pt\cell##&\vrule width.3pt\cell##\cr
 {#1}{-1}1&{#2}01&{#3}11\cr
 \noalign{\hrule height.3pt}
 {#4}{-1}0&{#5}00&{#6}10\cr
 \noalign{\hrule height.3pt}
 {#7}{-1}{-1}&{#8}0{-1}&{#9}1{-1}\cr}\kern0pt}}

%%%
%%%66
%%%
\ujgyak \label{megold712-66}
Az elõzõ megoldásban látott Boole-lánc mind a 4520 megengedett pozícióból helyes lépést adott, ahol a helyesség azt jelentette, 
hogy az adott pozícióból elérhetõ legrosszabb befejezést maximalizáltuk. %FURA...???
De egy igazán jó amõba játékos máshogy csinálná. Például a $\\.O.....X.$ pozícióból a gép a középsõ mezõt választja, 
$\\.O..X..X.$, és ezután \O/ valószínûleg az egyik sarkot, ezzel döntetlent elérve. Azonban a $\\.O.X...X.$ pozíciót választva
\O/ már csak két lépés közül választhatna, ha el akarja kerülni a vereséget. {Lásd Martin Gardner\angolnevindex{Gardner, Martin} 
könyvét \cite[4. fejezet]{Gardner1988}.} Továbbá az olyan pozícióból mint amilyen $\\X..OX.O..$, a legjobb lépés $\\XX.OX.O..$ 
az azonnali gyõzelem helyett, ekkor, ha a válasz $\\XXOOX.O..$, lépjünk  $\\XXOOXXO..$-et. Ily módon még mindig gyõzünk, 
de nem alázzuk meg annyira ellenfelünket. Végezetül, az egyetlen \idez{legjobb lépésnek} már a koncepciója is sántít, 
ugyanis egy jó játékos különbözõ lépéseket fog választani különbözõ 
játszmákban (ahogy ezt Babbage\angolnevindex{Babbage, Charles (1791--1871)} is megfigyelte). 
\endgroup

\medskip
{\quoteformat
Azt gondolnánk, hogy egyszerû egy digitális számítógépet beprogramozni 
amõbázni vagy speciális áramköröket tervezni egy amõbagéphez. 
Ez igaz, hacsak nem egy mester robotot akarunk létrehozni, 
ami a lehetõ legtöbb játékot nyeri meg tapasztalatlan játékosok ellen.
\author MARTIN GARDNER, \textsl{The Scientific American Book of Mathematical Puzzles \& Diversions} (1959) \cite{Gardner1959}}
\angolnevindex{Gardner, Martin}

%%%
%%%67
%%%
\ujgyak \label{megold712-67}
A szerzõ által elért legjobb eredmény 1734 kaput használ fel és 
Sholomov\angolnevindex{Sholomov, Lev Abramovics ({\rus Sholomov, Lev Abramovich})} 
\ref{megold712-63}. gyakorlat megoldásában látott módszerének alkalmazásával sikerült elérni: 
Elõször osszuk fel az igazságtáblákat 64 sorra $o_5x_5o_2o_6o_8o_4$ szerint 
és 4096 oszlopra a többi 12 bemeneti változónak megfelelõen. 
Majd írjunk egyeseket a \idez{care} helyekre úgy, hogy az oszlopokban viszonylag kevés egyes legyen.
Ezután keressünk néhány oszloptípust, amelyek illeszkednek valamennyi oszlopban a definiált helyekre. 
23 típus elegendõ a $c$ függvényhez, 20 típus az $s$-hez és 6 az $m$-hez. 
Ekkor valamennyi kimenetet kiszámíthatjuk $\bigvee(g_t\land h_t)$ alakban, 
ezáltal a szükséges minterm számítások jelentõs részét szétosztva $g_t$-ben és $h_t$-ban. 
{Ezt a feladatot Wakerly könyvének egyik kérdése ihlette, \cite[S6.2.7.]{Wakerly2000}\angolnevindex{Wakerly, John Francis} 
Egyébként Babbage\angolnevindex{Babbage, Charles (1791--1871)} 
úgy akart választani $k$ lehetséges lépés közül, hogy megvizsgálta 
$N\mod k$-t, ahol $N$ az eddig megnyert játszmák száma volt.
Nem ismerte fel, hogy az egymást követõ lépések $N$ megváltozásáig erõsen összefüggnek. %???
Sokkal jobb választás lett volna $N$-nek az eddig \textit{megtett lépések} száma.}
%%%
%%%68
%%%
\ujgyak \label{megold712-68}
Nem. Az a módszer egy \idez{egységes} láncot eredményez jól átlátható
szerkezettel, de a költsége $2^n$-szer egy $n$-ben polinomiális kifejezés. Az L tétel 
segítségével megkonstruálható egy áramkör hozzávetõlegesen $2^n\!/n$ kapuval,
de sokkal nehezebb elkészíteni. (Egyébként $C(\pi_5)=10$.)\tighten
%%%
%%%69
%%%
\ujgyak \label{megold712-69}
(a) Például le lehet ellenõrizni az eredményt mind a 64 eset megvizsgálásával.\par
(b) Ha $x_m$ ugyanabban a sorban vagy oszlopban van mint $x_i$ és szintén 
ugyanabban a sorban vagy oszlopban mint $x_j$, akkor $\alpha_{111}=\alpha_{101}=\alpha_{110}
=0$, tehát a párok jók. Ellenkezõ esetben lényegében véve három 
különbözõ lehetõség van és mind rossz:
Ha $(i,j,m)=(1,2,4)$, akkor $\alpha_{101}=0$, $\alpha_{100}=x_5x_9\xor
  x_6x_8$, $\alpha_{011}=x_9$;
ha $(i,j,m)=(1,2,6)$, akkor $\alpha_{010}=x_4x_9$, $\alpha_{011}=x_7$,
  $\alpha_{100}=x_5x_9$, $\alpha_{101}=x_8$;
ha $(i,j,m)=(1,5,9)$, akkor $\alpha_{111}=1$, $\alpha_{110}=0$,
  $\alpha_{010}=x_3x_7$.
%%%
%%%70
%%%
\ujgyak \label{megold712-70}
(a) $x_1{\land}((x_5{\land}x_9){\xor}(x_6{\land}x_8))\xor
x_2{\land}((x_6{\land}x_7){\xor}(x_4{\land}x_9))\xor
x_3{\land}((x_4{\land}x_8){\xor}(x_5{\land}x_7))$.\par
(b) $x_1{\land}((x_5{\land}x_9){\lor}(x_6{\land}x_8))\lor
x_2{\land}((x_6{\land}x_7){\lor}(x_4{\land}x_9))\lor
x_3{\land}((x_4{\land}x_8){\lor}(x_5{\land}x_7))$.\par
(c) Legyen $y_1=x_1\land x_5\land x_9$,
        $y_2=x_1\land x_6\land x_8$,
        $y_3=x_2\land x_6\land x_7$,
        $y_4=x_2\land x_4\land x_9$,
        $y_5=x_3\land x_4\land x_8$,
        $y_6=x_3\land x_5\land x_7$.
Az $f(y_1,\ldots,y_6)=[y_1+y_2+y_3>y_4+y_5+y_6]$ függvény további
15 lépésben kiértékelhetõ két teljes összeadó\index{teljes összeadó = full adder} 
és egy összehasonlító\index{összehasonlító = comparator} segítségével, 
de létezik egy 14 lépéses megoldás is: 
Legyen $z_1=(y_1\xor y_2)\xor y_3$, $z_2=(y_1\xor y_2)\lor(y_1\xor y_3)$,
    $z_3=(y_4\xor y_5)\xor y_6$, $z_4=(y_4\xor y_5)\lor(y_4\xor y_6)$.
Ekkor $f=(z_1\xor(z_2{\land}(\bar z_4{\xor}(z_1{\lor}z_3))))\land
(\bar z_3{\lor}z_4)$. Továbbá $y_1y_2y_3=111\iff y_4y_5y_6=111$, 
tehát vannak don't-care helyek, ami egy 11 lépéses megoldáshoz vezet: 
$f=((\bar z_1{\land}z_3){\lor}\bar z_4)\land z_2$. 
Így a teljes költség $12+11=23$.

(A szerzõ nem ismer módszert arra, hogy a számítógép hogyan találhatna meg egy ennyire hatékony láncot belátható idõn belül, 
ha $f$-nek csak az igazságtáblája adott. De talán még ennél is létezik hatékonyabb lánc.)
%%%
%%%71
%%%
\ujgyak \label{megold712-71}
(a) $P(p)=1-12p^2+24p^3+12p^4-96p^5+144p^6-96p^7+24p^8$, ami
${11\over32}+{9\over2}\epsilon^2-3\epsilon^4
-24\epsilon^6+24\epsilon^8$, ha $p={1\over2}+\epsilon$.\breathe
(b) Az $(f_0,\ldots,f_7)$ nyolcasokat összesen $N=2^{n-3}$ módon lehet
halmazokba sorolni, melyek mindegyike $P(p)$ valószínûséggel ad jó párokat. Így tehát a 
válasz $1-P(p)\losup N$.\breathe %az eleje furcsa...???
(c) Annak a valószínûsége, hogy pontosan $r$ halmaz jó, ${N\choose r}P(p)^r(1-P(p))^{N-r}$. 
Ekkor $t$ próba $(r/N)^t$ valószínûséggel talál jó párokat. Így a válasz 
$1-\sum_{r=0}^{N}{N\choose r}P(p)^r(1-P(p))^{N-r}(r/N)^t=
1-P(p)^t+O(t^2\!/N)$.\breathe
(d) $\sum_{r=0}^{N}{N\choose r}P(p)^r(1-P(p))^{N-r}\sum_{j=0}^{t-1}(r/N)^j = (1-P(p)^t)/(1-P(p))+O(t^3\!/N)$.
%%%
%%%72
%%%
\ujgyak \label{megold712-72}
A \ref{gyak712-71}(a) gyakorlatra kapott valószínûség a következõképpen módosul:   
$P(p)+ (72 p^3  - 264 p^4  + 432 p^5  - 336 p^6  + 96 p^7 ) r + 
(60 p^2  - 240 p^3  + 456 p^4  - 432 p^5  + 144 p^6 ) r^2  + 
(-48 p^2  + 144 p^3  - 216 p^4 + 96 p^5 ) r^3 +
(-36 p^2  + 24 p^3  + 12 p^4 ) r^4  + 
(48 p^2  - 24 p^3 ) r^5  - 12 p^2  r^6$. Ha $p=q=(1-r)/2$, akkor ez 
$(11 + 48 r + 36 r^2  - 144 r^3  - 30 r^4  + 336 r^5  - 348 r^6  + 144 r^7
- 21 r^8)/32$. Pédául ez $7739/8192\approx 0.94$, ha $r=1/2$.
%%%
%%%73
%%%
\ujgyak \label{megold712-73}
\def\\{{\Rightarrow}}\def\>{{\land}}
Tekintsük a következõ Horn-klózokat: $1\>2\\3$, $1\>3\\4$, \dots, $1\>(n-1)\\n$,
$1\> n\\2$ és $i\> j\\1$ minden $1<i<j\le n$ esetén. Tegyük fel, hogy $\vert Z\vert>1$
egy dekompozícióban és legyen $i$ a legkisebb olyan szám, amelyre $x_i\in Z$.
Továbbá legyen $j$ a legkisebb olyan egész, amelyre $j>i$ és $x_j\in Z$. Ekkor nem lehet 
$i>1$, ugyanis ekkor $i\> j\\1$ teljesülne. Ebbõl már következik, hogy $i=1$ és $x_j\in Z$
teljesül minden $2\le j\le n$ esetén.
%%%
%%%74
%%%
\ujgyak \label{megold712-74}
Tegyük fel, hogy már tudjuk, hogy nem létezik olyan nemtriviális dekompozíció, amire
$x_1\in Z$, $\cdots$ vagy $x_{i-1}\in Z$ teljesülne, és kezdetben $i=1$. Azt reméljük, 
hogy $j$ és $m$ ügyes megválasztásával $x_i\in Z$-t is kizárhatjuk. 
Az $i\> j\\m$ alakú Horn-klózok\index{Horn-klóz = Horn clause} $j\\m$ alakú 
Krom-klózokká\index{Krom-klóz = Krom clause} egyszerûsödnek, ha $i$ igaz. 
Tarjan\angolnevindex{Tarjan, Robert Endre} mélységi keresõ\index{mélységi keresés = depth-first search} 
algoritmusával akarjuk megkeresni az erõs komponenseket egy olyan 
irányított gráfban, amelyben a $j\\m$ élek talán léteznek, talán nem.
 
Amikor a $j$ csúcsból kiinduló éleket vizsgáljuk, elõször próbáljuk $m=1$, \dots, $m=i-1$-et. Ha bármelyik
$i\> j\\m$ implikáció fennáll, akkor $j$-t és az összes õsét kitörölhetjük az $i$-hez tartozó irányított gráfból. 
Különben vizsgáljuk meg, hogy teljesül-e $j\\m$ valamelyik már kitörölt $m$ csúcsra.
Ha ez sem sikerül, akkor tekintsük a még nem vizsgált $m$ csúcsokat. 
Végezetül, ha az elõzõek még nem voltak elegendõek, próbálkozzunk olyan $m$ csúcsokkal, amelyeket már megvizsgáltunk, 
kezdve azokkal, amik közel vannak a mélységi fa gyökeréhez.\par 
Példaként $f(x)=(\det X)\mod 2$-re rendre a következõket kapjuk:
\def\|{{\not\Rightarrow}}%
$1\>2\|3$,
$1\>2\\4$,
$1\>4\\3$,
$1\>3\\5$,
$1\>5\\6$,
$1\>6\\7$,
$1\>7\\8$,
$1\>8\\9$,
$1\>9\\2$ (immár $i\gets 2$);
$2\>3\|1$,
$2\>3\\4$,
$2\>4\|1$,
$2\>4\|5$,
$2\>4\\6$,
$2\>6\\1$ (ekkor 3, 4 és 6 is törlésre kerül a 2-höz tartozó gráfból), 
$2\>5\\1$ (és 5-öt is törölhetjük),
$2\>7\|1$,
$2\>7\\3$ (7 is törlésre kerül),
$2\>8\\1$,
$2\>9\\1$ (most már $i\gets 3$);
$3\>4\|1$,
$3\>4\\2$,
$3\>5\\1$, és így tovább.
%%%
%%%75
%%%
\ujgyak \label{megold712-75}
Ez a függvény két helyen vesz fel 1 értéket és ez a két hely egymás komplemense. 
Így tehát nem dekomponálható, mégis az (\ref{keplet712-58}) párok \textit{sohasem} lesznek
rosszak, ha $n>3$. Ezért bármely $(Y,Z)$ felosztás alkalmas dekompozíciónak.

Hasonlóképpen, ha $f$ felbontható $(Y,Z)$-nek megfelelõen, az $f(x)\xor S_{0,n}(x)$ nem dekomponálható függvény lényegében véve 
ugyanúgy fog viselkedni a tesztekben mint $f$. (Egy általános célú dekomponálhatóság tesztelõnek tartalmaznia kellene módszert a 
\textit{közelítõleg dekomponálható függvények}\index{közelítõleg dekomponálható függvények = approximately decomposable functions} 
kezelésére is.)
%%%
%%%76
%%%
\ujgyak \label{megold712-76}
\begingroup\advance\baselineskip1pt
(a) Legyen $a_{l}=[i\ge l]$, ha $0\le l\le2^m$. Ahogy a \ref{gyak712-38}(b) gyakorlatban már láttuk, 
a költség $\le2t(m)$, és valójában a költség tovább csökkenthetõ 
$2^{m+1}-2m-2$-re $\Theta(m)$ mélység mellett.
Mi több, az $[i\le j]=(\bar\imath_1\land j_1)\lor
((i_1\leqv j_1)\land[i_2\ldots i_m\le j_2\ldots j_m])$ függvény 
$4m-3$ kapu segítségével kiértékelhetõ. $x\xor y$ kiszámítása után, valamennyi $z_{l}$
költsége $2^{m+1}+1=O(n/\!\log n)$.\par\endgroup\breathe
(b) Itt a költség legfeljebb $C(g_0)+\cdots+C(g_{2^m})\le
(2^m+1)(2\losup{2^m}\!/(2^m+O(m)))$ az L tétel szerint, ugyanis az összes $g_{l}$ függvénynek 
$2^m$ bemenete van.\par
(c) Ha $i\le j$, akkor $z_{l}=x$ minden $l\le i$ esetén és $z_{l}=y$, ha $l>i$. 
Így kapjuk, hogy $f_i(x)=c_0\xor\cdots\xor c_i$ és $f_j(y)=c_{j+1}\xor\cdots\xor c_{2^m}$.
Ha $i>j$, akkor $z_{l}=y$ minden $l\le i$ esetén és $z_{l}=x$, ha $l>i$. Ebben az esetben pedig 
$f_j(y)=c_0\xor\cdots\xor c_j$ és $f_i(x)=c_{i+1}\xor\cdots\xor c_{2^m}$ adódik.\par
(d) A $b_{l}=[j<l]$ függvények $0\le l\le2^m$ esetén $O(2^m)$ lépésben kiszámíthatóak, 
ahogy azt láttuk (a)-ban. Tehát $F$ kiszámítható $(c_0,\ldots,c_{2^m})$-bõl 
$O(2^m)$ további kapu segítségével. Tehát a költséget alapvetõen a (b) lépés határozza meg 
nagy $m$ értékek esetében.\par
(e) $a_0=1$, $a_1=i$, $a_2=0$; $b_0=0$, $b_1=j$, $b_2=1$; $d=[i\le j]=
\bar\imath\lor j$;
$m_{l}=a_{l}\xor d$, $z_{l0}=x_0\xor(m_{l}\land(x_0\xor y_0))$,
$z_{l1}=x_1\xor(m_{l}\land(x_1\xor y_1))$, ha $l=0,1,2$; $c_0=z_{01}$;
$c_1=z_{10}\land\bar z_{11}$; $c_2=z_{20}\lor z_{21}$;
$c'_{l}=c_{l}\land(d\leqv a_{l})$, $c''_{l}=c_{l}\land(d\leqv b_{l})$,
ha $l=0,1,2$; és végül 
$F=(c'_0\xor c'_1\xor c'_2)\lor(c''_0\xor c''_1\xor c''_2)$.\par
A teljes költség 29 nyilvánvaló egyszerûsítések után, ami természetesen elfogadhatatlan 
ilyen kis méretû példára. De az emberben felmerülhet a kérdés, hogy egy korszerû 
gépi optimalizáló\index{optimalizáló = optimizer} képes lenne-e leegyszerûsíteni 
ezt a láncot csupán 5 kapura.
{Ez az eredmény speciális esete azoknak a sokkal általánosabb tételeknek, amik megtalálhatóak Uhlig cikkeiben 
\cite{Uhlig1974,Uhlig1992}.}
%%%
%%%77
%%%
\ujgyak \label{megold712-77}
Tegyük fel, hogy a lánc legrövidebb lánc $f_n$, illetve $\bar f_n$ kiszámítására. Ekkor legyen 
$U_{l}=\{i\mid l=j(i)\ {\rm vagy}\ l=k(i)\}$ azon lépések indexeinek halmaza, 
amelyek \idez{felhasználják} az $x_{l}$ változót
és legyen $u_{l}=\vert U_{l}\vert$. Legyen továbbá $t_i=1$, ha $x_i=x_{j(i)}\lor
x_{k(i)}$, különben pedig $t_i=0$. Meg fogjuk mutatni, hogy létezik olyan legfeljebb 
$r-4$ hosszú lánc, ami kiszámítja az $f_{n-1}$, illetve $\bar f_{n-1}$ függvényt a 
következõ ötlet felhasználásával: 
Ha valamely $m$ esetén az $x_m$ változó értéke 0-ra, illetve 1-re változik, 
az $U_{m}$-hez tartozó lépések törlésével és a többi lépés megfelelõ módosításával 
kaphatunk egy láncot $f_{n-1}$, illetve $\bar f_{n-1}$ kiszámítására. 
Továbbá, ha $x_i=x_{j(i)}\circ x_{k(i)}$ és ha $x_{j(i)}$-rõl vagy 
$x_{k(i)}$-rõl tudjuk, hogy megegyezik $t_i$-vel, ha $x_m$ 0-ra vagy 1-re változik,
akkor törölhetjük az $U_i$-hez tartozó lépéseket is. (A tárgyalás során $m$ végig
egy tetszõleges $1\le m\le n$ indexet jelöl.)

{\em 1. eset:}\enspace
 $u_{m}=1$ valamely $m$-re. Ez az eset nem fordulhat elõ legrövidebb lánc esetén. 
Ugyanis, ha $x_m$ egyetlen felhasználása $x_i=\bar x_m$, a lépés törlésével
$f_n\swap\bar f_n$-t kapnánk, és különben $x_1$, \dots,~$x_{m-1}$, $x_{m+1}$, \dots,~$x_n$ értékét
megváltoztathatnánk oly módon, hogy $x_i$ független legyen $x_m$-tõl, ellentmondva ezzel 
$x_{n+r}=f_n$ vagy $\bar f_n$-nak. Tehát minden változót legalább kétszer felhasználnunk.

{\em 2. eset:}\enspace
 $x_{l}=\bar x_m$ valamely $l$-re és $m$-re, ahol $u_{m}>1$.
Ekkor $x_i=x_{l}\circ x_k$ valamely $i$-re és $k$-ra, és $x_m$ értékét $\bar t_i$-ra módosíthatjuk, 
így $x_i$-t téve függetlenné $x_k$-tól. Ekkor az $U_{m}$, $U_{l}$ 
és $U_i$-hez tartozó lépések törlésével legalább 4 lépést eltávolíthatunk, kivéve ha $u_{l}=u_i=1$, 
$u_{m}=2$ és $x_j=x_m\circ x_i$, de ebben az esetben $U_j$ is törölhetõ.

{\em 3. eset:}\enspace
 $u_{m}\ge3$ valamely $m$-re és nem felel meg a 2. esetnek. Ha $i,j,k\in U_m$
és $i<j<k$, módosítsuk $x_m$ értékét $t_k$-ra és töröljük az $i$, $j$, $k$, $U_k$ lépéseket.

{\em 4. eset:}\enspace
 $u_1=u_2=\cdots=u_n=2$, és nem tartozik a 2. esethez. Feltehetjük, hogy
az elsõ lépés $x_1=x_1\circ x_2$ és hogy $x_{l}=x_1\circ x_k$
valamely $k<l$ esetén.

{\em 4.1. eset:}\enspace
 $k>0$. Ekkor $k>1$. Ha $u_k=1$, legyen $x_1\gets t_{l}$ és töröljük az 
1,~$k$, $l$,~$U_{l}$ lépéseket. Különben legyen $x_2\gets t_1$, így 
$x_k=\bar t_{l}$-nak kell teljesülnie és törölhetjük az 1,~$k$, $l$,~$U_k$ lépéseket.

{\em 4.2. eset:}\enspace
 $x_{l}=x_1\circ x_m$. Ekkor $m=2$-nek kell teljesülnie, ha ugyanis $m>2$ teljesülne, 
elvégezve az $x_2\gets t_1$, $x_m\gets t_{l}$ módosításokat az $x_r$ változót függetlenné tehetnénk
$x_1$-tõl. Továbbá feltehetjük, hogy $x_1=x_1\land x_2$ és $x_2=x_1\lor x_2$.
Elvégezve $x_1\gets 0$-át törölhetjük az $U_0$ és $U_1$ lépéseket, elvégezve $x_1\gets 1$-et
pedig törölhetjük az $U_0$ és $U_2$ lépéseket. Így készen is vagyunk, hacsak nem teljesül 
$u_1=u_2=1$.\par
Ha $x_p=\bar x_1$, legyen $x_1\gets 0$ és töröljük az 1, 2, $p$, $U_p$ lépéseket;
ha $x_q=\bar x_2$, legyen $x_1\gets 1$ és töröljük az 1, 2, $q$, $U_q$ lépéseket.
Különben $x_p=x_1\circ x_u$ és $x_q=x_2\circ x_v$, ahol $x_u$ és $x_v$
nem függ $x_1$-tõl vagy $x_2$-tõl. De ez lehetetlen, ugyanis ez lehetõvé tenné, hogy
$x_3$, \dots,~$x_n$ értékét úgy módosítsuk, hogy $x_u=t_p$ teljesüljön, ez 
követõen $x_2\gets1$ segítségével $x_r$-t függetlenné tehetnénk $x_1$-tõl.

{Lásd \cite{Redkin1970,Redkin1974} Hasonló bizonyítással 
Redkin\angolnevindex{Redkin, Nyikolaj Petrovics ({\rus Redp1kin, Nikolai0 Petrovich})} 
megmutatta, hogy az `$x_1\ldots x_n<y_1\ldots y_{n\!}$' és `$x_1\ldots x_n=y_1\ldots y_{n\!}$'
függvényekhez tartozó legrövidebb AND-OR-NOT láncok hossza rendre $5n-3$ és $5n-1$.}
%^^{comparison function} %???

%%%
%%%78
%%%
\ujgyak \label{megold712-78}
{Lásd Paul cikkét \cite[427--430. oldal]{Paul1977}.}\angolnevindex{Paul, Wolfgang Jakob} Nevezzük az $y_k$ változót
\textit{aktívnak}, ha $k\in S$ teljesül. Feltehetjük, hogy a lánc normalizált\index{normal = normalizált} 
és hogy $\Vert S\Vert>1$. A bizonyítás hasonló 
Redkin\angolnevindex{Redkin, Nyikolaj Petrovics ({\rus Redp1kin, Nikolai0 Petrovich})} 
bizonyításához a \ref{megold712-77}. gyakorlat megoldásában: 
{\em 1. eset:}\enspace Valamely aktív $y_k$-t többször is felhasználunk. Ekkor $y_k\gets 0$ legalább két lépést megtakarít és egy 
olyan láncot  eredményez, ami egy $\Vert S\Vert-1$ aktív értékkel rendelkezõ függvényt számít ki.

{\em 2. eset:}\enspace Az egyik aktív $y_k$ csak egyetlen AND-kapuban jut szerephez. Ekkor $y_k\gets 0$ segítségével legalább 
két lépés törölhetõ, ha az AND nem az utolsó lépés. De ez nem is lehet az utolsó lépés, ugyanis $y_k=0$ esetén a végeredmény 
független lenne az összes többi aktív $y_j$-tõl.

{\em 3. eset:}\enspace Ugyanúgy bizonyítható, ahogyan a 2. esetben, csak VAGY, NEM-DE vagy DE-NEM kapuval. Az $y_k\gets c$ 
értékadás segítségével elérhetõ a kívánt hatás egy megfelelõ $c$ konstanssal.

{\em 4. eset:}\enspace Mint a 2. esetben, csak XOR kapuval. A kapu nem lehet az utolsó, ugyanis a végeredménynek függetlennek 
kell lennie $y_k$-tól, ha $(x_1\ldots x_m)_2$ egy másik aktív $y_j$-re hivatkozik. Ekkor törölhetünk két lépést, ha $y_k$ 
értékét a XOR \textit{másik} bemenete által meghatározott függvényre módosítjuk.
%%%
%%%79
%%%
\ujgyak \label{megold712-79}
(a) Tegyük fel, hogy a költség $r<2n-2$, ahol $n>1$. Ha minden változót pontosan egyszer használunk fel, bármely két levélnek 
barátnak kell lennie. Így tehát néhány változót legalább kétszer kellett felhasználnunk. Egy ilyen változót eltávolítva a 
kapott $n-1$ változós lánc költsége $\le r-2$ és nem tartalmaz barátokat. (Egyébként a költség legalább $2n-1$, ha minden 
változót legalább kétszer használunk fel, ugyanis a változóknak legalább $2n$ használatát kell összekapcsolni a láncban.)\breathe
(b) Vegyük észre, hogy $S_{0,n}=\bigwedge_{u\subadj v}(u\leqv v)$ ha az $u\adj v$ élek szabad fát határoznak meg 
$\{x_1,\ldots,x_n\}$ felett. Ebbõl következik, hogy sokféleképpen el lehet érni a $2n-3$ költséget.

Minden $r<2n-3$ költségû láncra $n>2$-nek kell teljesülnie és az ilyen láncoknak tartalmazniuk kell $u$, $v$ barátokat. 
Átnevezéssel és a közvetlen eredmények komplementálásával feltehetjük, hogy $u=1$, $v=2$ és hogy 
$f(x_1,\ldots,x_n)=g(x_1\circ h(x_3,\ldots,x_n),x_2,\ldots,x_n)$, ahol $\circ$ vagy az $\land$ vagy a $\xor$ mûvelet.

{\em 1. eset:}\enspace
 $\circ$ az {\mc AND} mûvelet. Ekkor $h(0,\ldots,0)=h(1,\ldots,1)=1$-nek kell teljesülnie,
különben $f(x_1,x_2,y,\ldots,y)$ nem függne $x_1$-tõl. Ezért
$f(x_1,\ldots,x_n)=h(x_3,\ldots,x_n)\land g(x_1,x_2,\ldots,x_n)$ kiszámítható
egy olyan változatlan költségû lánccal, amiben 1 és 2 barátok és az út közöttük 
rövidebb mint eddig volt.

{\em 2. eset:}\enspace
$\circ$ a {\mc XOR} mûvelet. Ekkor $f=f_0\lor f_1$, ahol
$f_0(x_1,\ldots,x_n)=(x_1\leqv h(x_3,\ldots,x_n))\land g(0,x_2,\ldots,x_n)$ és
$f_1(x_1,\ldots,x_n)=(x_1\xor h(x_3,\ldots,x_n))\land g(1,x_2,\ldots,x_n)$.
De $f=S_{0,n}$-nek csak két prím implikánsa van, így csak négy lehetõség van:

{\em 2a. eset:}\enspace
 $f_0=f$. Ekkor felcserélhetjük $x_1\xor h$-t 0-val, hogy egy $\le r-2$ 
 költségû láncot kapjunk a $g(0,x_2,\ldots,x_n)=S_{0,n-1}(x_2,\ldots,x_n)$ függvényre.
 
{\em 2b. eset:}\enspace
 $f_1=f$. Hasonlóképpen mint az elõzõ esetben.
 
{\em 2c. eset:}\enspace
 $f_0(x)=x_1\land\cdots\land x_n$ és $f_1(x)=\bar x_1\land\cdots\land
\bar x_n$. Ebben az esetben a következõknek kell teljesülniük: 
$g(0,x_2,\ldots,x_n)=x_2\land\cdots\land x_n$ és
$g(1,x_2,\ldots,x_n)=\bar x_2\land\cdots\land\bar x_n$. Helyettesítve $h$-t 1-gyel
egy olyan lánchoz jutunk, ami az $f$ függvényt kevesebb mint $r$ lépésben számítja ki.

{\em 2d. eset:}\enspace
 $f_0(x)=\bar x_1\land\cdots\land\bar x_n$
és $f_1(x)=x_1\land\cdots\land x_n$. Hasonlóképpen járhatunk el, ahogy az elõzõ esetben.

A fenti egyszerûsítések ismételt alkalmazása ellentmondásra vezet. Ugyanígy  
megmutatható, hogy $C(S_0S_n)=2n-2$. Lásd még \cite{Schnorr1976}.
%%%
%%%80
%%%
\ujgyak \label{megold712-80}\def\\{{}'\?\?}
\cite{Stockmeyer1977} 
Az általánosság megsértése nélkül feltehetjük, hogy $a_0=0$ és hogy a lánc normalizált. 
Definiáljuk $U_{l}$-t és $u_{l}$-t, ahogyan a \ref{megold712-77}. gyakorlat megoldásában is tettük. 
A szimmetria miatt feltehetjük, hogy $u_1=\max(u_1,\ldots,u_n)$.

Ekkor $u_1\ge 2$-nek kell teljesülnie. Ugyanis, ha $u_1=1$ teljesülne, akkor feltehetnénk, hogy
$x_{n+1}=x_1\circ x_2$ és így kettõ a következõ három függvény közül egyenlõ lenne: 
$S_\alpha(0,0,x_3,\ldots,x_n)=S_{\alpha''}$,
$S_\alpha(0,1,x_3,\ldots,x_n)=S_{'\alpha'}$,
$S_\alpha(1,1,x_3,\ldots,x_n)=S_{''\alpha}$.
De ekkor $S_\alpha$ paritás függvény lenne 
vagy $S_{'\alpha'}$ lenne konstans. Így $x_1$-nek 0-át adva értékül törölhetjük az $U_1$-hez tartozó kapukat,
ami egy legalább 2-vel rövidebb láncot eredményez $S_{\alpha'}$-re. Ebbõl következik, hogy $C(S_\alpha)\ge C(S_{\alpha'})+2$. 
Hasonlóan $x_1$-nek 1-et adva értékül bizonyíthatjuk, hogy $C(S_\alpha)\ge C(S_{'\alpha})+2$.

A további vizsgálatokhoz három esetet kell tekinteni:

{\em 1. eset:}\enspace
 $u_1\ge3$. Legyen $x_1=0$, ez bizonyítja, hogy
$C(S_\alpha)\ge C(S_{\alpha'})+3$.

{\em 2. eset:}\enspace
 $U_1=\{i,j\}$ és a $\circ_j$ irányító mûvelet (azaz ÉS, DE-NEM, NEM-DE vagy VAGY). 
$x_1$ értékének egy megfelelõ konstansra módosítása 
lehetõvé teszi, hogy töröljük az $U_1\cup U_j$ lépéseket.
Vegyük észre, hogy optimális lánc esetén $i\notin U_j$.
Így tehát vagy $C(S_\alpha)\ge C(S_{\alpha'})+3$ vagy
$C(S_\alpha)\ge C(S_{'\alpha})+3$ teljesül.

{\em 3. eset:}\enspace
 $U_1=\{i,j\}$ és $\circ_i=\circ_j=\xor$. Feltehetjük, hogy
$x_i=x_1\xor x_2$ és $x_j=x_1\xor x_k$. Ha $u_j=1$ és $x_{l}=x_j\xor x_p$,
akkor átszervezhetjük a láncot $x_j=x_k\xor x_p$, $x_{l}=x_1\xor
x_j$ felhasználásával, így feltehetjük, hogy $u_j\ne1$ vagy $x_{l}=x_j\circ x_p$
teljesül $\circ$ irányító mûvelettel. Ha $U_2=\{i,j'\}$, akkor ugyanígy feltehetjük, hogy
$x_{j'}=x_2\xor x_{k'}$ és hogy $u_{j'}=1$ vagy
$x_{l'}=x_{j'}\circ' x_{p'}$ teljesül egy $\circ'$ irányító mûvelettel.
Továbbá a szimmetria miatt feltehetjük, hogy $x_j$ nem függ $x_{j'}$-tõl.

Ha $x_k$ nem függ $x_i$-tõl, akkor legyen $f(x_3,\ldots,x_n)=x_k$, különben pedig legyen
$f(x_3,\ldots,x_n)$ értéke $x_k$, ha $x_i=1$. 
Elvégezve az $x_1=f(x_3,\ldots,x_n)$ és $x_2=\bar f(x_3,\ldots,x_n)$ értékadásokat, 
vagy ezek fordítottját, 
$x_i$ és $x_j$ konstanssá tehetõ, és így láncot kaphatunk a nemkonstans 
$S_{'\alpha'}$ függvényre. Tulajdonképpen $u_j=1$ esetén biztosíthatjuk, 
hogy $x_{l}$ konstans legyen. Azt állítjuk, hogy ennek a láncnak 
legalább öt kapuja (beleértve $x_i$-t és $x_j$-t is) törölhetõ. 
Így $C(S_\alpha)\ge C(S_{'\alpha'})+5$. 
Az állítás nyilván igaz, ha $\vert U_i\cup U_j\vert\ge 3$.

$\vert U_i\cup U_j\vert>1$-nek fenn kell állnia. Különben $p=i$ teljesülne 
és $x_k$ nem függne $x_i$-tõl, így $S_\alpha$ független lenne 
$x_1$-tõl a mi $x_2$-nk mellett. Így tehát $\vert U_i\cup U_j\vert=2$.

{\em 3a eset:}\enspace
 $U_j=\{l\}$. Ekkor $x_{l}$ konstans és törölhetjük az $x_i$,
$x_j$ és $U_i\cup U_j\cup U_{l}$ lépéseket. Ha az utóbbi halmaz csak kételemû, 
akkor $x_q=x_i\circ x_{l}$ is konstans és $U_q$ is törölhetõ.
Mivel $S_{'\alpha'}$ nem konstans, a kimenet kapuját nem fogjuk törölni.

{\em 3b eset:}\enspace
 $U_i\subseteq U_j$, $\vert U_j\vert=2$. Ekkor $x_q=x_i\circ x_j$ 
valamilyen $q$-ra és az $x_i$, $x_j$ és $U_j\cup U_q$ lépések törölhetõek.
Az állítást bebizonyítottuk.\breathe

(b) Indukcióval, $C(S_k)\ge 2n+\min(k,n-k)-3-[n=2k]$, minden $0<k<n$-re;
$C(S_{\ge k})\ge 2n+\min(k,n+1-k)-4$, ha $1<k<n$. Az egyszerû esetek 
$C(S_0)=C(S_n)=C(S_{\ge1})=C(S_{\ge n})=n-1$; $C(S_{\ge 0})=0$.
(A \ref{abra712-9}. és \ref{abra712-10}. 
ábrák szerint ezek a korlátok optimálisak 
$k=\lceil n/2\rceil$-re, ha $n\le5$. Egyetlen ismert eredmény sem mond ellent 
a $C(S_k)=C(S_{\ge k})$ ha $k\ge n/2$ feltevésnek.)
%%%
%%%81
%%%
\ujgyak \label{megold712-81}
Ha egy változót többször is használunk, akkor legyen az értéke konstans, 
ezáltal csökkentve $n$ értékét eggyel és $c$ értékét legalább $2$-vel. Ellenkezõ esetben az elsõ 
mûveletnek $x_1$-re is kell vonatkoznia, ugyanis $y_1=x_1$ az egyetlen kimenet, ami 
nem igényel számolást. Ekkor $x_1$ konstansra módosítása csökkenti $n$ értékét eggyel, $c$-ét
és $d$-ét pedig legalább eggyel-eggyel. Lásd még \cite{Snir1986}.
%%%
%%%82
%%%
\ujgyak \label{megold712-82}
(\ref{keplet712-62}) hamis.\par\indent %^^{quantified formulas}
(\ref{keplet712-63}) a következõképpen hangzik: ``Minden $m$ számra létezik egy olyan $n$ szám, hogy 
$m<n+1$''. Ez igaz, ugyanis az $m=n$ választás kielégíti az állítást.

\indent \ref{keplet712-64} hamis, ha $n=0$ vagy $n=1$, mert ezekben a formulákban a számoknak 
nemnegatív egészeknek kell lenniük.

\indent (\ref{keplet712-65}) azt mondja ki, hogy ha $b$ értéke meghaladja $a$ értékét legalább kettõvel, akkor megadható 
egy $ab$ szám közöttük. Ez természetesen igaz, az $ab=a+1$ szám megfelel a feltételnek.

\indent (\ref{keplet712-66})-ot megindokoltuk már a szövegben és ez is igaz. Vegyük észre, hogy `$\land$' magasabb 
precedenciájú mint `$\lor$', `$\leqv$' mint `$\Leftrightarrow$', ahogyan `$+$' mint `$\ge$' és `$<$' mint `$\land$' 
(\ref{keplet712-65})-ben. Ezen konvenciók használatával csökkenthetjük 
a zárójelek számát $L$ mondataiban.\indent %Konvenció? Precedencia?
(\ref{keplet712-67}) azt állítja, hogy ha $A$ legalább egy $n$ elemet tartalmaz, akkor tartalmaznia kell
egy $m$ minimális elemet is, azaz egy olyan elemet, ami kisebb vagy egyenlõ minden más eleménél. Igaz.

\indent (\ref{keplet712-68}) hasonló állítást fogalmaz meg, csak $m$ most maximális elem. Ismét igaz, ugyanis 
minden halmaz véges.

\indent (\ref{keplet712-69}) egy olyan $P$ halmazt kér, amelyre teljesül $[0\in P]= [3\notin P]$,
$[1\in P]= [4\notin P]$, \dots, $[999\in P]= [1002\notin P]$, $[1000\in P]\ne [1003\notin P]$,
$[1001\in P]\ne [1004\notin P]$ stb. Ez igaz akkor (és csak akkor), ha $P=\{x\mid x\mod6\in\{1,2,3\}$
és $0\le x<1000\}$.\breathe
Végül, a $\forall n\,(n\in C\Leftrightarrow n+1\in C)$ részformula 
\ref{keplet712-70}-ben egy másik megfogalmazása annak, hogy $C=\emptyset$, ugyanis $C$ véges.
Következésképpen a $\forall A\,\forall B$-t követõ zárójelezett formula egy trükkös megfogalmazása 
annak, hogy $A=\emptyset$ és $B\neq \emptyset$. (Stockmeyer\angolnevindex{Stockmeyer, Larry Joseph} 
és Meyer\angolnevindex{Meyer, Albert Ronald da Silva} ezt a trükköt arra használták, hogy lerövidítsék $L$ hosszú részformulákat
többszörösen is tartalmazó állításait.) A (\ref{keplet712-70}) állítás tehát igaz, mert az üres halmaz nem lehet egyenlõ 
egy nemüres halmazzal.
%%%
%%%83
%%%
\ujgyak \label{megold712-83}
Feltehetjük, hogy a lánc normalizált. Legyenek az irányító lépések $y_1$, \dots,~$y_p$. Ekkor $y_k=\alpha_k\circ \beta_k$
és $f=\alpha_{p+1}$, ahol $\alpha_k$ és $\beta_k$ az $\{x_1,\ldots,x_n,y_1,\ldots,y_{k-1}\}$ 
valamely részhalmazainak $\xor$-jai és legfeljebb $n+k-2$ $\xor$ szükséges a kiszámításukhoz, ha elõször az egyszerû 
termeket kombináljuk. Így $C(f)\le p+\sum_{k=1}^{p+1}(n+k-2)=(p+1)(n+p/2)-1$.
%%%
%%%84
%%%
\ujgyak \label{megold712-84}
Az elõzõ megoldásban használt érvelést alkalmazhatjuk ezúttal is, csak $\lor$ és $\land$
szerepel $\xor$ helyett. Lásd még Alon és Boppana cikkét 
\cite[15--16]{Alon1987}.\angolnevindex{Alon, Noga}\angolnevindex{Boppana, Ravi Babu}
%%%
%%%85
%%%
\ujgyak \label{megold712-85}
(a) Egy egyszerû számítógépes programmal kiszámítható, hogy 13744 legitim 
közülük és 19024 nem. (Egy ilyen illegitim 
családnak legalább 8 tagja kell, hogy legyen. Ilyen például 
$\{\texttt{00},\texttt{0f},\texttt{33},\texttt{55},\allowbreak\texttt{ff},\texttt{15},\texttt{3f},\texttt{77}\}$. %???
Valóban, ha az $x_1\lor x_2$ (\texttt{3f}), $x_2\lor x_3$ (\texttt{77})
és $(x_1\lor x_2)\wedge x_3$ (\texttt{15}) függvényeket tartalmazza egy $L$ legitim 
család, akkor az $x_2\sqcup\texttt{15}=\texttt{33}\bor\texttt{15}=\texttt{37}$ függvényt szintén
tartalmaznia kell.)\tighten

(b) A projekciós és konstans függvényeket nyilván tartalmazza. 
Legyen $A^\ast=\bigcap\,\{B\mid B\supseteq A$ és $B\in\cal A\}$,
vagy $A^\ast=\infty$, ha nem létezik ilyen $B$ halmaz. Ekkor
$\lceil A\rceil\sqcap\lceil B\rceil=\lceil A\cap B\rceil$ és
$\lceil A\rceil\sqcup\lceil B\rceil=\lceil(A\cup B)^*\rceil$.

(c) Rövidítsük le a formulákat a következõféleképpen: 
$\hat x_{l}\subseteq x_{l}\lor\bigvee_{i=n+1}^{\,l}\delta_i$,
$x_{l}\subseteq\hat x_{l}\lor\bigvee_{i=n+1}^{\,l}\epsilon_i$,
és bizonyítsunk indukcióval: Ha az $l$. lépés {\mc AND} lépés, akkor
$\hat x_{l}=\hat x_j\sqcap\hat x_k\subseteq\hat x_j\land\hat x_k\subseteq
\bigl(x_j\lor\bigvee_{i=n+1_{\phantom0}}^{\,l}\delta_i\bigr)\land
\bigl(x_k\lor\bigvee_{i=n+1}^{\,l}\delta_i\bigr)=
x_{l}\lor\bigvee_{i=n+1}^{\,l}\delta_i$;
$x_{l}=x_j\land x_k\subseteq
\bigl(\hat x_j\lor\bigvee_{i=n+1}^{\,l-1}\epsilon_i\bigr)\land
\bigl(\hat x_k\lor\bigvee_{i=n+1}^{\,l-1}\epsilon_i\bigr)=
(\hat x_j\land\hat x_k)\lor\bigvee_{i=n+1}^{\,l-1}\epsilon_i$,
és $\hat x_j\land\hat x_k=\hat x_{l}\lor\epsilon_{l}$.
Ugyanígy érvelhetünk, ha az $l$. lépés OR lépés.
%%%
%%%86
%%%
\ujgyak \label{megold712-86}
(a) Ha $S$ egy $r$-család, amit tartalmaz az $S'$~$(r+1)$-család, 
akkor nyilván $\Delta(S)\subseteq\Delta(S')$.

(b) A skatulya elv\index{skatulya elv = pigeonhole principle} 
alapján, ha $S$ egy $r$-család, akkor 
$\Delta(S)$-nek az összes rész $u$ és $v$ elemét tartalmaznia kell. %rész??
És, ha $\Delta(S)=\{u,v\}$, akkor $u\adj v$ biztosan fennáll.

(c) Az eredmény nyilvánvaló, ha $r=1$. Az \idez{erõs} tulajdonság miatt 
legfeljebb $r-1$ olyan él lehet, ami illeszkedik egy adott $u$ csúcsra. 
És, ha $u\adj v$, az $\{u,v\}$-bõl {\it kiinduló\/} élek 
erõsen $(r-1)$-zártak, így indukcióval megmutatható, hogy legfeljebb 
$(r-2)^2$ lehet belõlük. 
Tehát összesen legfeljebb $1+2(r-2)+(r-2)^2$ él lehet.

(d) Igen, a 85(b) gyakorlat miatt, ha $r>1$. Ugyanis az erõsen 
$r$-zárt gráfok zártak a metszetre. 
Minden legfeljebb $1$ élû gráf erõsen $r$-zárt, ha $r>1$, 
hiszen nem találhatunk bennük olyan $r$-családokat, melyek élei
diszjunktak.

(e) Összesen $n\choose3$~$x_{ij}\land x_{ik}\land x_{jk}$ háromszög létezik,
melyek közül csak $n-2$ fordul elõ $\hat f$ valamely $x_{uv}$ termjében.
Így legfeljebb $(r-1)^2(n-2)$ háromszög mintermje szerepel $\hat f$-ban, 
és a többit pedig valamely $\epsilon_i=\hat x_i\xor(\hat x_{j(i)}\land x_{k(i)})$
függvény tartalmazza.
Egy ilyen term $T=(\lceil G\rceil\sqcap\lceil H\rceil)\xor
(\lceil G\rceil\land\lceil H\rceil)=
(\lceil G\rceil\land\lceil H\rceil)\land\overline{\lceil G\cap H\rceil}$ 
alakban felírható,
ahol $G$ és $H$ erõsen $r$-zártak. Be fogjuk bizonyítani, hogy 
$T$ legfeljebb $2(r-1)^3$ háromszöget tartalmaz.\tighten\par
Egy $x_{ij}\land x_{ik}\land x_{jk}$ háromszögnek $T$-ben fel kell használnia 
valamilyen változót (mondjuk $x_{ij}$-t) $\lceil G\rceil$-bõl és 
valamilyen változót (mondjuk $x_{ik}$-t) $\lceil H\rceil$-ból, 
de egyetlen változót sem használhat fel $\lceil G\cap H\rceil$-ból. 
Legfeljebb $(r-1)^2$-féleképpen lehet $ij$-t megválasztani és 
legfeljebb $2(r-1)$-féleképpen $k$-t, ugyanis $H$-nak 
legfeljebb $r-1$ éle érinti $i$-t és legfeljebb $r-1$ éle $j$-t.

(f) Színezzük az 1 csúcsot pirosra, a többi csúcsot pedig pirosra vagy kékre. 
Egy $u$ és $v$ csúcsot pedig kössön össze egy él pontosan akkor, ha eltérõ 
színûek. Ily módon $2^{n-1}$ teljes páros 
gráfot\index{teljes páros gráf = complete bigraph} kaphatunk. 
A \ref{gyak712-85}(c) gyakorlat elsõ formulája alapján 
minden ilyen gráfra a $B$ mintermet egy 
$T=\delta_i=\hat x_i\xor(\hat x_{j(i)}\lor x_{k(i)})=
\lceil(G\cup H)^*\rceil\land\overline{\lceil G\cup H\rceil}$ 
termnek tartalmaznia kell.
(Például, ha $n=4$ és a $(2,3,4)$ csúcsok színe (piros, kék, kék), akkor
$B=\bar x_{12}\land x_{13}\land x_{14}\land x_{23}\land x_{24}
\land\bar x_{34}$.) Egy $B$ mintermet pontosan akkor tartalmaz $T$, 
ha $B$ színezésével $(G\cup H)^*$ valamely éle eltérõ színû csúcsokra 
illeszkedik, míg $G\cup H$ minden éle egyszínû. Bebizonyítjuk, hogy 
$T$ legfeljebb $2^{n-r}r^2$ ilyen $B$ termet tartalmazhat.\par
Legyen $G$ egy tetszõleges gráf és $T=\lceil G^*\rceil\land\overline{\lceil
G\rceil}$. A következõ nem túl hatékony algoritmussal megtalálható $G^*$:
Ha létezik egy $S$~$r$-family, amire $\vert\Delta(S)\vert<2$,
akkor megállunk és legyen $G^*=\infty$. Különben, ha $\Delta(S)=\{u,v\}$ 
és $u\nadj v$, vegyük hozzá $G$-hez az $u\adj v$ élt és így tovább.

Legfeljebb $2^{n-r}$ kétrétû %???
$B$ mintermre lesznek az $\{u_j,v_j\}$-k ($1\le j\le r$) egyszínûek, 
ha $\vert\Delta(S)\vert<2$. És. ha $\Delta(S)=\{u,v\}$, akkor 
$2^{n-r-1}$-re lesznek az $\{u_j,v_j\}$-k egyszínûek 
és az $\{u,v\}$ kétszínû.
Így tehát azt akarjuk megmutatni, hogy $G$-re az algoritmus kevesebb mint $2r^2$ 
iterációt végez, ha $G$ erõsen $r$-zárt.

$k\ge1$-re legyen $u_k\adj v_k$ az elsõ új él, amit $G$-hez hozzáveszünk és
$\{u_j,v_j\}$-bõl ($1\le j<k$) indul ki. 
Legfeljebb $r$ ilyen él létezik az erõs tulajdonság miatt 
és mindegyiket legfeljebb $2r-3$ ~$u_j$-t vagy $v_j$-t érintõ új él követi.
Így összesen legfeljebb $r(2r-2)+1<2r^2$ lépésben megtaláljuk $G^*$-ot.

(g) A \ref{gyak712-84}-es gyakorlat szerint $q<{p\choose2}+(p+1){n\choose2}$. Így vagy $2(r-1)^3p\ge{n\choose3}-(r-1)^2(n-2)$ 
vagy pedig ${p\choose 2}+(p+1){n\choose2}>2^{r-1}\!/r^2$ teljesül. Mindkét $p$-re vonatkozó alsó korlát 
\begin{equation*}
{1\over12}\Bigl({n\over6\lg n}\Bigr)^{\!3}\Bigl(1+O\Bigl(
{\log\log n\over\log n}\Bigr)\Bigr)\qquad\hbox{ha}\qquad
r=\Big\lceil\lg\Bigl({n^6\over 186624(\lg n)^4}\Bigr)\Big\rceil.
\end{equation*}

{Noga Alon és Ravi B. Boppana \cite{Alon1987}\angolnevindex{Alon, Noga}\angolnevindex{Boppana, Ravi Babu} 
így bizonyították be többek között az $\land$-k számára az $\Omega(n/\!\lg n)^s$ alsó korlátot 
olyan monoton láncok esetében, amik egy adott $G$-rõl eldöntik, 
hogy tartalmaz-e $s\ge 3$ rögzített méretû klikket\index{klikk = clique}.}\tighten
%%%
%%%87
%%%
\ujgyak \label{megold712-87}
$X^3$ legfeljebb $n^2$ bejegyzést tartalmaz, ha $X$ egy
$0$--1 mátrix\index{nullaegymátrix@$0 - 1$ mátrix = $0 - 1$ matrix}.
Megadható olyan Boole-lánc, ami $O(n^{\lg 7}(\lg n)^2)$ kapu segítségével megvalósítja 
Strassen\angolnevindex{Strassen, Volker} 
4.6.4--(36) mátrixszorzó\index{mátrixszorzás = matrix multiplication} algoritmusát 
modulo \smash{$2^{\lfloor\lg n^2\rfloor+1}$} egészeken. 
%%%
%%%88
%%%
\ujgyak \label{megold712-88}
Összesen 1,422,564 ilyen függvény létezik. Ezeket 716 osztályba sorolhatjuk be, 
figyelembe véve a változók permutációit is.
Az L algoritmus és a fejezet többi módszere mind kiterjeszthetõ  
háromváltozós mûveletekre\index{háromváltozós mûvelet = ternary operation} is, 
és a következõ eredményekhez juthatunk az optimális csak-medián 
számításokra vonatkozóan: 
\begin{equation*}
\setbox0=\hbox{0}\def\\{\kern\wd0\relax}
\setbox1=\vbox{\baselineskip7pt\halign{\hfil#\hfil\cr Függ-\cr vények\cr}}
\setbox2=\vbox{\baselineskip7pt\halign{\hfil#\hfil\cr Osztá-\cr lyok\cr}}
\halign to\hsize{\hfil$#$\hfil\ &\enspace\hfil#\enspace&\enspace\hfil#\enspace
\tabskip0pt plus1fil&
\hfil$#$\hfil\ \tabskip0pt&\enspace\hfil#\enspace&\enspace\hfil#\enspace
\tabskip0pt plus1fil&
\hfil$#$\hfil\ \tabskip0pt&\enspace\hfil#\enspace&\enspace\hfil#\enspace
\tabskip0pt plus1fil&
\hfil$#$\hfil\ \tabskip0pt&\enspace\hfil#\enspace&\enspace\hfil#\enspace\cr
C(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern.25em&
C_m(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern.25em&
L(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern.25em&
D(f)&\omit$\vcenter{\copy2}$\hidewidth&$\vcenter{\copy1}$\kern.25em\cr
\noalign{\medskip}
\\0&1&7&\\0&1&7&\\0&1&7&\\0&1&7\cr
\\1&1&35&\\1&1&35&\\1&1&35&\\1&1&35\cr
\\2&2&350&\\2&2&350&\\2&2&350&\\2&13&5670\cr
\\3&9&3885&\\3&9&3885&\\3&8&3745&\\3&700&\kern-.5em1416822\cr
\\4&48&42483&\\4&48&42483&\\4&38&35203&\\4&1&30\cr
\\5&201&406945&\\5&188&391384&\\5&139&270830&\\5&0&0\cr
\\6&353&798686&\\6&253&622909&\\6&313&699377&\\6&0&0\cr
\\7&99&169891&\\7&69&134337&\\7&176&367542&\\7&0&0\cr
\\8&2&282&\\8&2&2520&\\8&34&43135&\\8&0&0\cr
\\9&0&0&\\9&0&0&\\9&3&2310&\\9&0&0\cr
10&0&0&10&0&0&10&0&0&10&0&0\cr
11&0&0&\infty&143&224654&11&1&30&11&0&0\cr}
\end{equation*}
Amarel,\angolnevindex{Amarel, Saul (1928--2002)}, Cooke\angolnevindex{Cooke, George Erskine} 
és Winder\angolnevindex{Winder, Robert Owen}
arra következtettek \cite{Amarel1964}, hogy a 9 mûveletbõl álló
$$\let\<=\langle \let\>=\rangle
\<x_1x_2x_3x_4x_5x_6x_7\>=
\bigl\<x_1 \<\<x_2x_3x_5\>\<x_2x_4x_6\>\<x_3x_4x_7\>\>
          \<\<x_2x_5x_6\>\<x_3x_5x_7\>\<x_4x_6x_7\>\>\bigr\>$$
formula a legjobb módja a 7-medián 3-mediánokkal való kiszámításának.
De a \idez{bûvös}
$$\let\<=\langle \let\>=\rangle
\bigl\<x_1\<x_2\<x_3x_4x_5\>\<x_3x_6x_7\>\>
 \<x_4\<x_2x_6x_7\>\<x_3x_5\<x_5x_6x_7\>\>\>\bigr\>$$
formulával csak 8 mûveletre van szükség.
Mi több, a legrövidebb lánc csak hét lépésbõl áll: 
$$\let\<=\langle \let\>=\rangle
\<x_1x_2x_3x_4x_5x_6x_7\>=
\bigl\<x_1
 \<x_2\<x_5x_6x_7\>\<x_3\<x_5x_6x_7\>x_4\>\>
 \<x_5\<x_2x_3x_4\>\<x_6\<x_2x_3x_4\>x_7\>\>\bigr\>.$$
Az érdekes $f(x_1,\ldots,x_7)=
(x_1{\land}x_2{\land}x_4)\lor
(x_2{\land}x_3{\land}x_5)\lor
(x_3{\land}x_4{\land}x_6)\lor
(x_4{\land}x_5{\land}x_7)\lor
(x_5{\land}x_6{\land}x_1)\lor
(x_6{\land}x_7{\land}x_2)\lor
(x_7{\land}x_1{\land}x_3)$ függvény,
amely prím implikánsai megfelelnek egy 7 pontú 
projekciós síknak\index{projekciós sík = projective plane}, %??? lehet, hogy a vetítõsík jobb lenne, feltéve, hogy nem jelent mást...
az összes közül a legnehezebb: A minimális $L(f)=11$ hosszát
és legkisebb $D(f)=4$ mélységét a következõ figyelemre méltó formulával reprezentálva éri el: 
$$\let\<=\langle \let\>=\rangle
\bigl\<
 \bigl\<x_1x_4\<x_4x_5x_6\>\bigr\>
 \bigl\<x_3x_6\<x_1\<x_2x_3x_7\>\<x_2x_5x_6\>\>\bigr\>
 \bigl\<x_2x_7\<x_1\<x_5x_2x_4\>\<x_5x_3x_7\>\>\bigr\> \bigr\>.$$
És a következõ még megdöbbentõbb lánc számítja ki optimálisan:
$$\def\\#1.#2.#3.#4.{x_{#1}=\langle x_{#2}x_{#3}x_{#4}\rangle}
\openup-1\jot
\displaylines{\quad
\\8.1.2.3.,\quad
\\9.1.4.6.,\quad
\\10.1.5.8.,\quad
\\11.2.7.8.,
\hfill\cr\hfill
\\12.3.9.10.,\quad
\\13.4.5.12.,\quad
\\14.6.11.12.,\quad
\\15.7.13.14..
\quad\cr}
$$
\end{gyak}
\end{small}

\bibliography{KnuthMajus19}
\bibliographystyle{infalg}

\begin{printindex}
\end{printindex}


\begin{printangolnevindex}
\end{printangolnevindex}

\begin{printnevindex}
\end{printnevindex}

\end{document}
