summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/utthesis/ICDE-11
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/utthesis/ICDE-11
Initial commit
Diffstat (limited to 'macros/latex/contrib/utthesis/ICDE-11')
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/abstract.tex23
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/conclusion.tex49
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/eqlogexp.Q1-8.ps605
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/intro.tex82
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/model.tex831
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/p2v.tex139
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.aux137
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.bbl76
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.blg0
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.dvibin0 -> 97632 bytes
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.log511
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.ps6693
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/paper.tex251
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/preprint.ps6724
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/related.tex59
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/reprint.ps6693
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/results.tex473
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q1.ps519
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q2.ps507
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q3.ps561
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q4.ps549
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q5.ps375
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q6.ps401
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q7.ps396
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/runtime_Q8.ps384
-rw-r--r--macros/latex/contrib/utthesis/ICDE-11/stretch.sty10
26 files changed, 27048 insertions, 0 deletions
diff --git a/macros/latex/contrib/utthesis/ICDE-11/abstract.tex b/macros/latex/contrib/utthesis/ICDE-11/abstract.tex
new file mode 100644
index 0000000000..c966ccb075
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/abstract.tex
@@ -0,0 +1,23 @@
+\firstpage
+\begin{abstract}
+{\itshape
+From our experience, current rule-based query optimizers do not provide
+a very intuitive and well-defined framework to define rules and
+actions. To remedy this situation, we propose an extensible and
+structured algebraic framework called Prairie for specifying rules.
+Prairie facilitates rule-writing by enabling a user to write rules and
+actions more quickly, correctly and in an easy-to-understand and
+easy-to-debug manner.
+
+Query optimizers consist of three major parts: a search space, a cost
+model and a search strategy. The approach we take is only to develop
+the algebra which defines the search space and the cost model and use
+the Volcano optimizer-generator as our search engine. Using Prairie as
+a front-end, we translate Prairie rules to Volcano to validate our
+claim that Prairie makes it easier to write rules.
+
+We describe our algebra and present experimental results which
+show that using a high-level framework like Prairie to design
+large-scale optimizers does not sacrifice efficiency.
+}
+\end{abstract}
diff --git a/macros/latex/contrib/utthesis/ICDE-11/conclusion.tex b/macros/latex/contrib/utthesis/ICDE-11/conclusion.tex
new file mode 100644
index 0000000000..fbfb02c0c5
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/conclusion.tex
@@ -0,0 +1,49 @@
+\section{Conclusion and future work}
+\label{sec:conclusion}
+
+Current rule-based query optimizers do not provide a very intuitive and
+conceptually streamlined framework to define rules and actions. Our
+experiences with the Volcano optimizer generator suggest that its model
+of rules and the expression of these rules is much more complicated and
+too low-level than it needs to be. As a consequence, rule sets in
+Volcano are fragile, hard to write, and debug. Similar problems may
+exist in other contemporary rule-based query optimizers.
+
+We believe that rule-based query optimizers will be standard tools
+of future database systems. The pragmatic difficulties of using
+existing rule-based optimizers led us to develop Prairie, an
+extensible and structured algebraic framework for specifying rules.
+Prairie is similar to existing optimizers in that it supports both
+transformation rules and implementation rules. However, Prairie
+makes several improvements:
+\begin{enumerate}
+\item it offers a conceptually more streamlined model for rule specification;
+\item rules are encapsulated, there are no ``hidden'' operators or
+ ``hidden'' algorithms;
+\item implementation hints (\eg enforcers) are deduced automatically;
+\item and it has efficient implementations.
+\end{enumerate}
+
+We have explained how the first three points are important for
+simplifying rule specifications and making rule sets less brittle for
+extensibility. A consequence is that Prairie rules are simpler and
+more robust than rules of existing optimizers (\eg Volcano). We
+addressed the fourth point by building a P2V pre-processor which uses
+sophisticated algorithms to compose and compact a Prairie rule set into
+a Volcano rule set. To demonstrate the scalability of our approach, we
+rewrote the TI Open OODB rule set as a Prairie rule set, generated its
+Volcano counterpart, and showed that the performance of the synthesized
+Volcano rule set closely matches the hand-crafted Volcano rule set.
+
+Our future work will concentrate on developing higher-level
+abstractions using Prairie, including automatically generating Prairie
+rule sets, and combining multiple Prairie rule sets to automatically
+generate efficient optimizers.
+
+\section*{Acknowledgments}
+\label{sec:acknowledgments}
+
+We wish to thank Texas Instruments, Inc.\ for making the Open OODB
+source code available to us. Comments by Jos\'e Blakeley, Anne Ngu,
+Vivek Singhal, Thomas Woo and the anonymous referees greatly improved
+the quality of the paper.
diff --git a/macros/latex/contrib/utthesis/ICDE-11/eqlogexp.Q1-8.ps b/macros/latex/contrib/utthesis/ICDE-11/eqlogexp.Q1-8.ps
new file mode 100644
index 0000000000..6c41dfdf1d
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/eqlogexp.Q1-8.ps
@@ -0,0 +1,605 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 18 18 552 482
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: /u/ddas/research/papers/eqlogexp.Q1-8.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+72 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+91 scalefont
+ setfont
+/Times-Roman findfont
+91 scalefont
+ setfont
+stroke
+420 300 m
+gsave
+420 300 translate
+0 rotate
+0 -30 m
+(0) CS
+(0) show
+grestore
+newpath
+621 300 m
+gsave
+621 300 translate
+0 rotate
+0 -30 m
+(1) CS
+(1) show
+grestore
+newpath
+822 300 m
+gsave
+822 300 translate
+0 rotate
+0 -30 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 300 m
+gsave
+1023 300 translate
+0 rotate
+0 -30 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 300 m
+gsave
+1225 300 translate
+0 rotate
+0 -30 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 300 m
+gsave
+1426 300 translate
+0 rotate
+0 -30 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 300 m
+gsave
+1627 300 translate
+0 rotate
+0 -30 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 300 m
+gsave
+1828 300 translate
+0 rotate
+0 -30 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 300 m
+gsave
+2030 300 translate
+0 rotate
+0 -30 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+90 scalefont
+ setfont
+1225 148 m
+gsave
+1225 148 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+440 376 l
+420 728 m
+440 728 l
+420 1081 m
+440 1081 l
+420 1433 m
+440 1433 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 728 m
+2010 728 l
+2030 1081 m
+2010 1081 l
+2030 1433 m
+2010 1433 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+91 scalefont
+ setfont
+stroke
+366 376 m
+gsave
+366 376 translate
+0 rotate
+0 -30 m
+(100) RJ
+(10) show
+/Times-Roman findfont
+54 scalefont
+ setfont
+0 54 rmoveto
+(0) show
+/Times-Roman findfont
+91 scalefont
+ setfont
+0 -54 rmoveto
+() show
+grestore
+newpath
+366 728 m
+gsave
+366 728 translate
+0 rotate
+0 -30 m
+(102) RJ
+(10) show
+/Times-Roman findfont
+54 scalefont
+ setfont
+0 54 rmoveto
+(2) show
+/Times-Roman findfont
+91 scalefont
+ setfont
+0 -54 rmoveto
+() show
+grestore
+newpath
+366 1081 m
+gsave
+366 1081 translate
+0 rotate
+0 -30 m
+(104) RJ
+(10) show
+/Times-Roman findfont
+54 scalefont
+ setfont
+0 54 rmoveto
+(4) show
+/Times-Roman findfont
+91 scalefont
+ setfont
+0 -54 rmoveto
+() show
+grestore
+newpath
+366 1433 m
+gsave
+366 1433 translate
+0 rotate
+0 -30 m
+(106) RJ
+(10) show
+/Times-Roman findfont
+54 scalefont
+ setfont
+0 54 rmoveto
+(6) show
+/Times-Roman findfont
+91 scalefont
+ setfont
+0 -54 rmoveto
+() show
+grestore
+newpath
+366 1785 m
+gsave
+366 1785 translate
+0 rotate
+0 -30 m
+(108) RJ
+(10) show
+/Times-Roman findfont
+54 scalefont
+ setfont
+0 54 rmoveto
+(8) show
+/Times-Roman findfont
+91 scalefont
+ setfont
+0 -54 rmoveto
+() show
+grestore
+newpath
+/Times-Roman findfont
+90 scalefont
+ setfont
+187 1080 m
+gsave
+187 1080 translate
+90 rotate
+0 0 m
+(Equivalence classes) CS
+(Equivalence classes) show
+grestore
+newpath
+/Times-Roman findfont
+90 scalefont
+ setfont
+/Times-Bold findfont
+90 scalefont
+ setfont
+1225 1953 m
+gsave
+1225 1953 translate
+0 rotate
+0 0 m
+(N-way Join Queries) CS
+(N-way Join Queries) show
+grestore
+newpath
+/Times-Bold findfont
+84 scalefont
+ setfont
+/Times-Roman findfont
+84 scalefont
+ setfont
+1225 1855 m
+gsave
+1225 1855 translate
+0 rotate
+0 0 m
+(Number of Equivalence Classes) CS
+(Number of Equivalence Classes) show
+grestore
+newpath
+420 376 m
+621 429 l
+822 482 l
+1023 535 l
+1225 588 l
+1426 641 l
+1627 694 l
+1828 747 l
+2030 800 l
+stroke
+420 376 30 0 360 arc
+gsave fill grestore
+stroke
+621 429 30 0 360 arc
+gsave fill grestore
+stroke
+822 482 30 0 360 arc
+gsave fill grestore
+stroke
+1023 535 30 0 360 arc
+gsave fill grestore
+stroke
+1225 588 30 0 360 arc
+gsave fill grestore
+stroke
+1426 641 30 0 360 arc
+gsave fill grestore
+stroke
+1627 694 30 0 360 arc
+gsave fill grestore
+stroke
+1828 747 30 0 360 arc
+gsave fill grestore
+stroke
+2030 800 30 0 360 arc
+gsave fill grestore
+stroke
+420 376 m
+621 597 l
+822 734 l
+1023 871 l
+1225 1008 l
+1426 1145 l
+1627 1282 l
+1828 1419 l
+2030 1556 l
+stroke
+420 406 m
+390 376 l
+420 346 l
+450 376 l
+closepath
+gsave eofill grestore
+stroke
+621 627 m
+591 597 l
+621 567 l
+651 597 l
+closepath
+gsave eofill grestore
+stroke
+822 764 m
+792 734 l
+822 704 l
+852 734 l
+closepath
+gsave eofill grestore
+stroke
+1023 901 m
+993 871 l
+1023 841 l
+1053 871 l
+closepath
+gsave eofill grestore
+stroke
+1225 1038 m
+1195 1008 l
+1225 978 l
+1255 1008 l
+closepath
+gsave eofill grestore
+stroke
+1426 1175 m
+1396 1145 l
+1426 1115 l
+1456 1145 l
+closepath
+gsave eofill grestore
+stroke
+1627 1312 m
+1597 1282 l
+1627 1252 l
+1657 1282 l
+closepath
+gsave eofill grestore
+stroke
+1828 1449 m
+1798 1419 l
+1828 1389 l
+1858 1419 l
+closepath
+gsave eofill grestore
+stroke
+2030 1586 m
+2000 1556 l
+2030 1526 l
+2060 1556 l
+closepath
+gsave eofill grestore
+stroke
+420 376 m
+621 578 l
+822 805 l
+1023 1059 l
+stroke
+420 406 m
+390 346 l
+450 346 l
+closepath
+gsave eofill grestore
+stroke
+621 608 m
+591 548 l
+651 548 l
+closepath
+gsave eofill grestore
+stroke
+822 835 m
+792 775 l
+852 775 l
+closepath
+gsave eofill grestore
+stroke
+1023 1089 m
+993 1029 l
+1053 1029 l
+closepath
+gsave eofill grestore
+stroke
+420 513 m
+621 787 l
+822 1094 l
+1023 1428 l
+stroke
+390 543 m
+420 483 l
+450 543 l
+closepath
+gsave eofill grestore
+stroke
+591 817 m
+621 757 l
+651 817 l
+closepath
+gsave eofill grestore
+stroke
+792 1124 m
+822 1064 l
+852 1124 l
+closepath
+gsave eofill grestore
+stroke
+993 1458 m
+1023 1398 l
+1053 1458 l
+closepath
+gsave eofill grestore
+stroke
+/Times-Roman findfont
+72 scalefont
+ setfont
+1070 1369 m
+1070 1729 l
+1665 1729 l
+1665 1369 l
+1070 1369 l
+stroke
+/Times-Roman findfont
+72 scalefont
+ setfont
+1110 1684 m
+1270 1684 l
+stroke
+1110 1684 30 0 360 arc
+gsave fill grestore
+stroke
+1270 1684 30 0 360 arc
+gsave fill grestore
+stroke
+1310 1684 m
+gsave
+1310 1684 translate
+0 rotate
+0 -24 m
+(Query 1, 2) show
+grestore
+newpath
+/Times-Roman findfont
+72 scalefont
+ setfont
+1110 1594 m
+1270 1594 l
+stroke
+1110 1624 m
+1080 1594 l
+1110 1564 l
+1140 1594 l
+closepath
+gsave eofill grestore
+stroke
+1270 1624 m
+1240 1594 l
+1270 1564 l
+1300 1594 l
+closepath
+gsave eofill grestore
+stroke
+1310 1594 m
+gsave
+1310 1594 translate
+0 rotate
+0 -24 m
+(Query 3, 4) show
+grestore
+newpath
+/Times-Roman findfont
+72 scalefont
+ setfont
+1110 1504 m
+1270 1504 l
+stroke
+1110 1534 m
+1080 1474 l
+1140 1474 l
+closepath
+gsave eofill grestore
+stroke
+1270 1534 m
+1240 1474 l
+1300 1474 l
+closepath
+gsave eofill grestore
+stroke
+1310 1504 m
+gsave
+1310 1504 translate
+0 rotate
+0 -24 m
+(Query 5, 6) show
+grestore
+newpath
+/Times-Roman findfont
+72 scalefont
+ setfont
+1110 1414 m
+1270 1414 l
+stroke
+1080 1444 m
+1110 1384 l
+1140 1444 l
+closepath
+gsave eofill grestore
+stroke
+1240 1444 m
+1270 1384 l
+1300 1444 l
+closepath
+gsave eofill grestore
+stroke
+1310 1414 m
+gsave
+1310 1414 translate
+0 rotate
+0 -24 m
+(Query 7, 8) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/intro.tex b/macros/latex/contrib/utthesis/ICDE-11/intro.tex
new file mode 100644
index 0000000000..b4ebebe580
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/intro.tex
@@ -0,0 +1,82 @@
+\section{Introduction}
+\label{sec:intro}
+
+Query optimization \cite{Grae93} is a fundamental part of database
+systems. It is the process of generating an efficient access plan for
+a database query. Informally, an access plan is an execution strategy
+for a query; it is the sequence of low-level database retrieval
+operations that, when executed, produce the database records that
+satisfy the query. There are three basic aspects that define and
+influence query optimization: the search space, the cost model, and the
+search strategy.
+
+The {\em search space} is the set of logically equivalent access plans
+that can be used to evaluate a query. All plans in a query's search
+space return the same result; however, some plans are more efficient
+than others. The {\em cost model} assigns a cost to each plan in the
+search space. The cost of a plan is an estimate of the resources used
+when the plan is executed; the lower the cost, the better the plan.
+The {\em search strategy} is a specification of which plans in the
+search space are to be examined.
+
+Traditionally, query optimizers have been built as monolithic
+subsystems of a DBMS. This simply reflects the fact that traditional
+database systems are themselves monolithic: the algorithms used for
+storing and retrieving data are hard-wired and are rather difficult to
+change. The need to have extensible database systems, and in turn
+extensible optimizers, has long been recognized in systems like Genesis
+\cite{Bato88a}, EXODUS \cite{Grae87b}, Starburst \cite{Haas88}, and
+Postgres \cite{Ston86b}. Rule-based query optimizers are among the
+major conceptual advances that have been proposed to deal with query
+optimizer extensibility \cite{Haas88,Frey87a,Grae87b,Grae90b}. The
+extensibility translates into the ability to incorporate new operators,
+algorithms, cost models, or search strategies without changing the
+optimization algorithm.
+
+In this paper, we describe an algebraic framework called \emph{Prairie}
+for specifying rules in a rule-based query optimizer. Prairie is
+similar to other rule specification languages like Starburst
+\cite{Haas88} and Volcano \cite{Grae90b}, and indeed, we have based our
+work on Volcano to capture most of the advantages of rule-based
+optimizers. However, Prairie attempts to provide some key features
+that, we have found, simplify the effort in writing rules:
+
+\begin{enumerate}
+ \item A framework in which users can define a query optimizer
+ concisely in terms of a well-defined set of operators and
+ algorithms. \emph{All} operators and algorithms are considered
+ first-class objects, \ie \emph{any} of them can occur in any
+ rule, and \emph{only} these operators and algorithms can appear
+ in rules. This scheme eliminates the need for special classes
+ of operators and algorithms, such as enforcers in Volcano and
+ glue in Starburst, that significantly complicate rule
+ specification.
+ \item A framework in which users can define a list of properties to
+ characterize the expressions generated in the optimization
+ process. Again, the goal here is to allow the user to treat
+ \emph{all} properties as having equal status. This is different
+ from Volcano where the user must classify properties as logical,
+ physical, or operator/algorithm arguments.
+ \item A framework in which users can specify mapping functions
+ between properties concomitantly with the corresponding rules.
+ This contrasts with existing approaches in which mappings
+ between properties are fragmented into multiple functions and at
+ logically different places than the corresponding rules.
+ Research into rule-based optimizers has revealed that
+ property-mapping functions are a major source of user effort, so
+ this is an important goal.
+ \item The format (Prairie) in which users can cleanly specify rules is
+ not necessarily the same format needed for generating efficient
+ optimizers. Thus, there is a need for a pre-processor (written
+ by us) that translates between these competing representations.
+\end{enumerate}
+
+Prairie strives for uniformity in dealing with issues that have been a
+source of most user effort and potential user errors. In the following
+sections, we present the Prairie framework. We explain how our P2V
+pre-processor maps Prairie rule specifications into Volcano rule
+specifications that can be processed efficiently. Experimental results
+to support this claim are given in Section~\ref{sec:results}, where we
+compare implementations of the Texas Instruments Open OODB query
+optimizer using both Prairie and Volcano. We conclude with a summary
+and related research.
diff --git a/macros/latex/contrib/utthesis/ICDE-11/model.tex b/macros/latex/contrib/utthesis/ICDE-11/model.tex
new file mode 100644
index 0000000000..3a3f916091
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/model.tex
@@ -0,0 +1,831 @@
+\section{Prairie: A language for rule specification}
+\label{sec:framework}
+
+The basic concepts and definitions that underlie the Prairie model are
+presented in this section. The goal is to lay a foundation for
+reasoning about query optimization algebraically; this is necessary for
+our subsequent discussion about translating Prairie specifications to
+those of Volcano.
+
+\subsection {Notation and assumptions}
+\label{sec:notation}
+
+\paragraph{Stored Files and Streams.}
+A file is \emph{stored} if its tuples reside on disk. In the case of
+relational databases, stored files are sometimes called \emph{base
+relations}; we will denote them by $R$ or $R_i$. In object-oriented
+schemas, stored files are \emph{classes}; we will denote them by
+$\textit{C}$ or $\textit{C}_i$. Henceforth, whenever we refer to a
+stored file, we mean a relation or a class; when the distinction is
+unimportant, we will use $F$ or $F_i$. A \emph{stream} is a sequence
+of tuples and is the result of a computation on one or more streams or
+stored files; tuples of streams are returned one at a time, typically
+on demand. Streams can be \emph{named}, denoted by $S_i$, or
+\emph{unnamed}.
+
+\paragraph{Database Operations.}
+An \emph{operation} is a computation on one or more streams or stored
+files. There are two types of database operations in Prairie:
+abstract (or implementation-unspecified) operators and concrete
+algorithms. Each is detailed below.
+\begin{description} % To achieve extra indentation.
+\begin{description}
+\item[Operators.]
+Abstract (or conceptual) \emph{operators} specify computations on
+streams or stored files; they are denoted by all capital
+letters (\eg JOIN). Operators have two types of parameters:
+essential and additional. \emph{Essential parameters} are the stream
+or file inputs to an operator; these are the primary inputs to be
+processed by an operator. \emph{Additional parameters} are
+``fine-grain'' qualifications of an operator; their purpose is to
+describe an operator in more detail than essential parameters.
+
+\item[Algorithms.]
+\emph{Algorithms} are concrete implementations of conceptual operators;
+they will be represented in lower case with the first letter
+capitalized (\eg Nested\_loops). Algorithms have at least the same
+essential and additional parameters as the conceptual operators that
+they implement.\footnote{Algorithms may have \emph{tuning parameters}
+which are not parameters of the operators they implement.}
+Furthermore, there can be, and usually are, several algorithms for a
+particular operator.
+\end{description}
+\end{description}
+Table~\ref{tab:operators} lists some operators and algorithms implementing
+them together with their additional parameters.
+
+\begin{centeredtable*}
+\begin{minipage}[b]{9.9cm}
+\nodesizes
+\newlength{\first}
+\settowidth{\first}{JOIN($S_1$, $S_2$)}
+\newlength{\second}
+\settowidth{\second}{Join streams $S_1$, $S_2$}
+\newlength{\third}
+\settowidth{\third}{projected\_attributes}
+\newlength{\fourth}
+\settowidth{\fourth}{Nested\_loops($S_1$, $S_2$)}
+\newlength{\linelength}
+\setlength{\linelength}{\fourth+\tabcolsep*2}
+\begin{tabular}{|l|l|l|p{\fourth}|} \thickhline
+\textbf{Operator}
+ & \textbf{Description}
+ & \textbf{Additional Parameters}
+ & \textbf{Algorithm} \\ \thickhline
+\multirow{2}{\first}{JOIN($S_1$, $S_2$)}
+ & \multirow{2}{\second}{Join streams $S_1$, $S_2$} & tuple\_order
+ & Nested\_loops($S_1$, $S_2$) \\ \cline{4-4}
+ & & join\_predicate & Merge\_join($S_1$, $S_2$) \\ \hline
+\multirow{3}{\first}{RET($F$)}
+ & \multirow{3}{\second}{Retrieve file $F$}
+ & tuple\_order
+ & \parbox[c][\baselineskip][b]{\fourth}{File\_scan($F$)} \\
+ & & selection\_predicate
+ & \parbox[c]{\linelength}
+ {\hspace*{-\tabcolsep}\rule{\linelength}{\arrayrulewidth}} \\
+ & & projected\_attributes
+ & \parbox[c][\baselineskip][t]{\fourth}{Index\_scan($F$)} \\ \hline
+\multirow{2}{\first}{SORT($S_1$)}
+ & \multirow{2}{\second}{Sort stream $S_1$}
+ & \multirow{2}{\third}{tuple\_order}
+ & Merge\_sort($S_1$) \\ \cline{4-4}
+ & & & Null($S_1$) \\ \thickhline
+\end{tabular}
+\caption{Operators and algorithms in a centralized query optimizer and
+ their additional parameters}
+\label{tab:operators}
+\end{minipage}
+\hfill
+\begin{minipage}[b]{6.5cm}
+\nodesizes
+\settowidth{\first}{projected\_attributes}
+\begin{tabular}{|l|l|} \thickhline
+\textbf{Property}
+ & \textbf{Description} \\ \thickhline
+join\_predicate
+ & join predicate for JOIN operator \\ \hline
+selection\_predicate
+ & selection predicate for RET operator \\ \hline
+\multirow{2}{\first}{tuple\_order}
+ & tuple order of resulting stream, \\
+ & DONT\_CARE if none \\ \hline
+num\_records
+ & number of tuples of resulting stream \\ \hline
+tuple\_size
+ & size of individual tuple in stream \\ \hline
+projected\_attributes
+ & projected attributes for RET operator \\ \hline
+attributes
+ & list of attributes \\ \hline
+cost
+ & estimated cost of algorithm \\ \thickhline
+\end{tabular}
+\caption{Properties of nodes in an operator tree}
+\label{tab:annotations}
+\end{minipage}
+\end{centeredtable*}
+
+\paragraph{Operator Trees.}
+An \emph{operator tree} is a rooted tree whose non-leaf, or
+\emph{interior}, nodes are database operations (operators or
+algorithms) and whose leaf nodes are stored files. The children of an
+interior node in an operator tree are the essential parameters (\ie the
+stream or file parameters) of the node. Additional parameters are
+implicitly attached to each node. Algebraically, operator trees are
+compositions of database operations; thus, we will also call operator
+trees \emph{expressions}; both terms will be used interchangeably.
+
+\begin{example}
+A simple expression and its operator tree representation are shown
+in Figure~\ref{fig:optreeexample}. Relations $R_1$ and $R_2$ are first
+RETrieved, then JOINed, and finally SORTed resulting in a stream
+sorted on a specific attribute. The figure shows only the essential
+parameters of the various operators, not the additional parameters.
+\end{example}
+
+\begin{comment}
+The figures which follow.
+
+ SORT
+ |
+ |
+ JOIN
+ /\
+ / \
+ RET RET
+ | |
+ | |
+ R1 R2
+
+ Merge_sort
+ |
+ |
+ Nested_loops
+ / \
+ / \
+ File_scan File_scan
+ | |
+ | |
+ R1 R2
+
+\end{comment}
+
+\begin{centeredfigure}
+\setlength{\unitlength}{0.6in}
+%
+\myshadowbox
+{
+\subfigure[An expression and its corresponding operator tree]
+{
+\begin{centeredinhalfminipage}
+\psset{unit=4mm}
+\psset{nodesep=1pt}
+\tiny
+\begin{pspicture}(0,0)(2,4)
+\rput(1,4){SORT (JOIN (RET ($R_1$), RET ($R_2$)))}
+\rput(1,3){\rnode{sort}{SORT}}
+\rput(1,2){\rnode{join}{JOIN}}
+\ncline{-}{sort}{join}
+\rput(0,1){\rnode{retr1}{RET}}
+\rput(2,1){\rnode{retr2}{RET}}
+\ncline{-}{join}{retr1}
+\ncline{-}{join}{retr2}
+\rput(0,0){\rnode{r1}{$R_1$}}
+\rput(2,0){\rnode{r2}{$R_2$}}
+\ncline{-}{retr1}{r1}
+\ncline{-}{retr2}{r2}
+\end{pspicture}
+\end{centeredinhalfminipage}
+\label{fig:optreeexample}
+}
+%
+\vrule
+%
+\subfigure[Possible access plan for operator tree in (a)]
+{
+\begin{centeredinhalfminipage}
+\psset{unit=4mm}
+\psset{nodesep=1pt}
+\tiny
+\begin{pspicture}(0,0)(2,3)
+\rput(1,3){\rnode{mergesort}{Merge\_sort}}
+\rput(1,2){\rnode{nestedloops}{Nested\_loops}}
+\ncline{-}{mergesort}{nestedloops}
+\rput(0,1){\rnode{filescanr1}{File\_scan}}
+\rput(2,1){\rnode{filescanr2}{File\_scan}}
+\ncline{-}{nestedloops}{filescanr1}
+\ncline{-}{nestedloops}{filescanr2}
+\rput(0,0){\rnode{r1}{$R_1$}}
+\rput(2,0){\rnode{r2}{$R_2$}}
+\ncline{-}{filescanr1}{r1}
+\ncline{-}{filescanr2}{r2}
+\end{pspicture}
+\end{centeredinhalfminipage}
+\label{fig:accplanexample}
+}
+}
+%
+\caption{Example of an operator tree and access plan}
+\label{fig:expexample}
+\end{centeredfigure}
+
+\paragraph{Descriptors.}
+A \emph{property} of a node is a (user-defined) variable that contains
+information used by an optimizer. An \emph{annotation} is a $\langle
+\emph{property, value} \rangle$ pair that is assigned to a node. A
+\emph{descriptor} is a list of annotations that describes a node of an
+operator tree; every node has its own descriptor. As an example,
+Table~\ref{tab:annotations} lists some typical properties that might be
+used in a descriptor. Note that descriptors for stream and stored
+files may have different properties. The following notations will be
+useful in our subsequent discussions. If $S_i$ is a stream, then
+$\mathbf{D_i}$ is its descriptor. Annotations of $S_i$ are accessed by
+a structure member relationship, \eg
+$\mathbf{D_i}.\text{num\_records}$. Also, let $E$ be an expression and
+let $\mathbf{D}$ be its descriptor. We will write this as
+$E:\mathbf{D}$.
+
+\begin{example}
+The expression,
+\begin{eqnarray*}
+{\scriptstyle \text{SORT}(\text{JOIN}(\text{RET}(R_1):\mathbf{D_3},
+ \text{RET}(R_2):\mathbf{D_4}):\mathbf{D_5}):\mathbf{D_6}} & &
+\end{eqnarray*}
+corresponds to the operator tree in Figure~\ref{fig:optreeexample}, and
+shows the descriptors of the various nodes.
+\end{example}
+
+A notational simplification can be made here. Additional parameters
+of operators can be treated the same way as other properties of a node;
+essential parameters, however, are \emph{expressions}. Thus, the term
+descriptor in the remainder of this paper will refer to a set of properties,
+including additional parameters, as shown in Table~\ref{tab:annotations}.
+
+Currently, descriptor properties are defined entirely by the user;
+however, we envision providing a hierarchy of pre-defined descriptor
+types to aid this process.
+
+\paragraph{Access Plans.}
+An \emph{access plan} is an operator tree in which all interior nodes
+are algorithms.
+
+\begin{example}
+An access plan for the operator tree in Figure~\ref{fig:optreeexample}
+is shown in Figure~\ref{fig:accplanexample}.
+\end{example}
+
+\subsection{Prairie optimization paradigm}
+\label{sec:topdown}
+
+Prairie admits two rather different means of optimization: top-down and
+bottom-up. A top-down query optimizer optimizes the parents of a node
+prior to optimizing the node itself. A bottom-up optimizer optimizes
+the children of a node prior to optimizing the node. The earliest
+optimizers (System R \cite{Seli79} and R$^*$ \cite{Dani82}) employed
+the bottom-up approach.
+
+Our research concentrates on a top-down optimization of operator
+trees. We have chosen this approach because we intend to translate
+Prairie rules into the format required by the Volcano query optimizer
+generator \cite{Grae90b} which is based on a top-down strategy.
+Given an appropriate search engine, Prairie can potentially also be
+used with a bottom-up optimization strategy; however, we will not
+discuss this approach in this paper.
+
+In query optimization, there are certain annotations (such as
+additional parameters) that are known before any optimization is
+begun. These annotations can be computed at the time that the operator
+tree is initialized, and will not change with application of rules.
+Our following discussions assume operator trees are initialized.
+
+There are two types of algebraic transformations (or \emph{rewrite
+rules}) in Prairie: T-rules (``transformation rules'') and I-rules
+(``implementation rules''). Each rule transforms an expression into
+another based on additional conditions; the transformation also results
+in a mapping of descriptors between expressions. We define T-rules and
+I-rules precisely in the following sections and illustrate them with
+examples. Our examples are chosen from rules that would be used in a
+centralized relational query optimizer; the operators, algorithms, and
+properties are subsets of those in Tables~\ref{tab:operators} and
+\ref{tab:annotations}.
+
+\subsection{Transformation rules}
+\label{sec:trules}
+
+\begin{centeredfigure}
+\def\subfigtopskip{0pt}
+\myshadowbox{
+\begin{tabular}{c}
+\subfigure[General form of a T-rule]
+{
+\setlength{\topsep}{0pt}
+\scriptsize
+\begin{minipage}[b]{0.86\linewidth}
+\begin{trule}
+E(x_1, \ldots, x_n):\mathbf{D_1} \Longrightarrow
+ E'(x_1, \ldots, x_n):\mathbf{D_2} \label{eq:generaltrule}
+\end{trule}
+\begin{trulepretest}
+\> pre-test statements
+\end{trulepretest}
+test
+\begin{truleposttest}
+\> post-test statements
+\end{truleposttest}
+\end{minipage}
+\label{fig:generaltrule}
+} \\ \hline
+%%%
+\subfigure[Join associativity]
+{
+\setlength{\topsep}{0pt}
+\scriptsize
+\begin{minipage}[b]{0.86\linewidth}
+\vspace*{4pt}
+\begin{trule}
+\text{JOIN}(\text{JOIN}(S_1, S_2):\mathbf{D_4}, S_3):\mathbf{D_5}
+\label{eq:associativity}
+\end{trule}
+%%% TODO: Remove extra space above eqnarray.
+\begin{eqnarray*}
+\rulespace \Longrightarrow
+ \text{JOIN}(S_1, \text{JOIN}(S_2, S_3):\mathbf{D_6}):\mathbf{D_7}
+% \label{eq:associativity}
+\end{eqnarray*}
+\begin{trulepretest}
+\> $\mathbf{D_6}.\text{attributes} =
+ \text{union}\ (\mathbf{D_2}.\text{attributes},
+ \mathbf{D_3}.\text{attributes})\ ;$
+\end{trulepretest}
+$\text{is\_associative}\ (\mathbf{D_6}.\text{join\_predicate},
+ \mathbf{D_6}.\text{attributes},
+ \mathbf{D_5}.\text{join\_predicate})$
+\begin{truleposttest}
+\> $\mathbf{D_7} = \mathbf{D_5}\ ;$ \\
+\> $\mathbf{D_7}.\text{join\_predicate} =
+ \mathbf{D_4}.\text{join\_predicate}\ ;$ \\
+\> $\mathbf{D_6}.\text{tuple\_size} =
+ \mathbf{D_2}.\text{tuple\_size}
+ + \mathbf{D_3}.\text{tuple\_size}\ ;$ \\
+\> $\mathbf{D_6}.\text{num\_records} =
+ \text{cardinality}\ (\mathbf{D_2}, \mathbf{D_3})\ ;$
+\end{truleposttest}
+\end{minipage}
+\label{fig:associativity}
+}
+\end{tabular}
+}
+\caption{T-rule}
+\label{fig:trules}
+\end{centeredfigure}
+
+Transformation rules, or T-rules for short, define equivalences among
+pairs of expressions; they define mappings from one operator tree to
+another. Let $E$ and $E'$ be expressions that involve only abstract
+operators. Equation~(\ref{eq:generaltrule}) (shown in
+Figure~\ref{fig:generaltrule}) shows the general form of a T-rule. The
+actions of a T-rule define the equivalences between the descriptors of
+nodes of the original operator tree $E$ with the nodes of the output
+tree $E'$; these actions consist of a series of (C or C++)
+assignment\footnote{The actions can be non-assignment statements (like
+function calls), but in this case, the P2V pre-processor (described in
+Section~\ref{sec:ptov}) needs some hints about the properties that
+are changed by the statement in order to correctly categorize each
+property. For simplicity, in this paper, we assume all actions consist
+of assignment statements.} statements. The left-hand sides of these
+statements refer to descriptors of expressions on the right-hand side
+of the T-rule; the right-hand sides of the statements can refer to any
+descriptor in the T-rule. Function (called \emph{helper} functions)
+calls can also appear on the right side of the assignment statements.
+Thus, descriptors on the \emph{left-hand side} of a T-rule are
+\emph{never} changed in the rule's actions. A \emph{test} is needed to
+determine if the transformations of the T-rule are in fact applicable.
+
+Purely as an optimization, it is usually the case that not all
+statements in a T-rule's actions need to be executed prior to a
+T-rule's test. For this reason, the actions of a T-rule are split into
+two groups; those that need to be executed prior to the T-rule's test,
+and those that can be executed after a successful test. These groups
+of statements comprise, respectively, the \emph{pre-test} and
+\emph{post-test} statements of the T-rule.\footnote{We suspect it is
+possible to use data-flow analysis to partition the assignment
+statements automatically, but for now, we let the rule-writer do the
+partitioning.}
+
+\begin{comment}
+We now define the actions and tests of a T-rule more precisely. Let
+$O_i$ be an abstract operator of $E'$, and let $\mathbf{O_i}$ be its
+descriptor. Similarly, let $I_i$ be an abstract operator of $E$ and
+let $\mathbf{I_i}$ be its descriptor. ($I_i$ is an operator that is
+input to the rule and $O_i$ is an operator that is output by the
+rule). Let $M_i$ denote the $i$th descriptor property. Thus,
+$\mathbf{O_i}.M_j$ is the value of the $j$th property of descriptor
+$\mathbf{O_i}$. We have found that actions of a T-rule are invariably
+assignment statements, since actions compute assignments to descriptor
+properties. Rather than admitting all possible computations, we will
+present our model in terms of assignment statements.\footnote{ The
+actions can be non-assignment statements (like function calls), but in
+this case, the P2V pre-processor (described in
+Section~\ref{sec:results}) needs some hints about the properties that
+are changed by the statement in order to correctly categorize each
+property. For simplicity, in this paper, we assume all actions consist
+of assignment statements. } The left-hand side of an assignment refers
+to an output descriptor ($\mathbf{O_i}$) or a member of an output
+descriptor ($\mathbf{O_i}.M_j$). The right-hand side is an expression
+or function that only references input descriptors and/or their
+members. (We call such functions \emph{helper} functions; they are
+defined externally to a rule). Here are a few examples:
+\[
+\begin{array}{rlll}
+\mathbf{O_i} & = & \mathbf{I_k}\ ; &
+ \text{$//$ copy descriptor $\mathbf{I_k}$ to $\mathbf{O_i}$} \nonumber \\
+\mathbf{O_i}.M_j & = & \mathbf{I_k}.M_j + 4\ ; &
+ \text{$//$ expression defining $\mathbf{O_i}.M_j$} \nonumber \\
+\mathbf{O_3}.M_5 & = & \text{helper}\ (\mathbf{I_1}.M_5, \mathbf{I_2}.M_5)\ ; &
+ \text{$//$ helper function that computes $\mathbf{O_3}.M_5$} \nonumber \\
+& & &
+ \text{$//$ from inputs $\mathbf{I_1}.M_5$ and $\mathbf{I_2}.M_5$.} \nonumber
+\end{array}
+\]
+
+The test for a T-rule's applicability is a boolean expression and
+normally involves checks on the values of output descriptors (\eg
+$\mathbf{O_3}.M_5 > 6$); occasionally, helper functions may be needed.
+
+Again, it is important to remember that the pre-test actions are
+carried out prior to the test; the post-test actions are performed only
+if a T-rule's test evaluates to TRUE, and all post-test actions are
+performed immediately, with no intermediate optimization of any
+descendant nodes of the root of $E$.
+
+Note that there are no actions that are carried out \emph{after} the
+essential parameters of the root of $E$ are optimized. This is because
+a T-rule only logically transforms a conceptual tree into another
+conceptual tree.
+\end{comment}
+
+\begin{example}
+\label{ex:joinassociativity}
+The associativity of JOINs is expressed by T-rule
+(\ref{eq:associativity}) in Figure~\ref{fig:associativity}.
+\end{example}
+
+\begin{comment}
+
+ b2=c1 JOIN JOIN a1=b1
+ /\ /\
+ / \ / \
+ a1=b1 JOIN RET RET JOIN b2=c1
+ /\ | ====> | /\
+ / \ R3 R1 / \
+ RET RET RET RET
+ | | | |
+ R1 R2 R2 R3
+
+ a2=c1 JOIN JOIN a1=b1
+ /\ /\
+ / \ / \
+ a1=b1 JOIN RET RET JOIN <empty>
+ /\ | ==/==> | /\
+ / \ R3 R1 / \
+ RET RET RET RET
+ | | | |
+ R1 R2 R2 R3
+
+\end{comment}
+
+\newsavebox{\lefttreeone}
+\newsavebox{\righttreeone}
+\newsavebox{\lefttreetwo}
+\newsavebox{\righttreetwo}
+\newsavebox{\rewritesto}
+\newsavebox{\doesnotrewriteto}
+
+\begin{lrbox}{\lefttreeone}
+\begin{minipage}[t]{3.0cm}
+\psset{unit=\edgesizes}
+\psset{nodesep=3pt}
+\nodesizes
+\begin{center}
+\begin{pspicture}(-0.5,0)(3,3)
+\rput(2,3){\rnode{joinr1r2r3}{JOIN}}
+\rput(0.5,3){$b_2 = c_1$}
+\rput(1,2){\rnode{joinr1r2}{JOIN}}
+\rput(-0.5,2){$a_1 = b_1$}
+\rput(0,1){\rnode{retr1}{RET}}
+\rput(2,1){\rnode{retr2}{RET}}
+\rput(3,2){\rnode{retr3}{RET}}
+\rput(0,0){\rnode{r1}{$R_1$}}
+\rput(2,0){\rnode{r2}{$R_2$}}
+\rput(3,1){\rnode{r3}{$R_3$}}
+\ncline{-}{joinr1r2}{retr1}
+\ncline{-}{joinr1r2}{retr2}
+\ncline{-}{joinr1r2r3}{joinr1r2}
+\ncline{-}{joinr1r2r3}{retr3}
+\ncline{-}{retr1}{r1}
+\ncline{-}{retr2}{r2}
+\ncline{-}{retr3}{r3}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\rewritesto}
+\begin{minipage}[t]{0.6cm}
+\psset{unit=\edgesizes}
+\psset{nodesep=3pt}
+\nodesizes
+\begin{center}
+\begin{pspicture}(0,0)(1,3)
+\rput(0.5,1.5){$\Longrightarrow$}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\righttreeone}
+\begin{minipage}[t]{3.0cm}
+\psset{unit=\edgesizes}
+\psset{nodesep=3pt}
+\nodesizes
+\begin{center}
+\begin{pspicture}(0,0)(3,3)
+\rput(1,3){\rnode{joinr1r2r3}{JOIN}}
+\rput(2.5,3){$a_1 = b_1$}
+\rput(2,2){\rnode{joinr2r3}{JOIN}}
+\rput(3.5,2){$b_2 = c_1$}
+\rput(0,2){\rnode{retr1}{RET}}
+\rput(1,1){\rnode{retr2}{RET}}
+\rput(3,1){\rnode{retr3}{RET}}
+\rput(0,1){\rnode{r1}{$R_1$}}
+\rput(1,0){\rnode{r2}{$R_2$}}
+\rput(3,0){\rnode{r3}{$R_3$}}
+\ncline{-}{joinr1r2r3}{retr1}
+\ncline{-}{joinr1r2r3}{joinr2r3}
+\ncline{-}{joinr2r3}{retr2}
+\ncline{-}{joinr2r3}{retr3}
+\ncline{-}{retr1}{r1}
+\ncline{-}{retr2}{r2}
+\ncline{-}{retr3}{r3}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\lefttreetwo}
+\begin{minipage}[t]{3.0cm}
+\psset{unit=\edgesizes}
+\psset{nodesep=3pt}
+\nodesizes
+\begin{center}
+\begin{pspicture}(-0.5,0)(3,3)
+\rput(2,3){\rnode{joinr1r2r3}{JOIN}}
+\rput(0.5,3){$a_2 = c_1$}
+\rput(1,2){\rnode{joinr1r2}{JOIN}}
+\rput(-0.5,2){$a_1 = b_1$}
+\rput(0,1){\rnode{retr1}{RET}}
+\rput(2,1){\rnode{retr2}{RET}}
+\rput(3,2){\rnode{retr3}{RET}}
+\rput(0,0){\rnode{r1}{$R_1$}}
+\rput(2,0){\rnode{r2}{$R_2$}}
+\rput(3,1){\rnode{r3}{$R_3$}}
+\ncline{-}{joinr1r2}{retr1}
+\ncline{-}{joinr1r2}{retr2}
+\ncline{-}{joinr1r2r3}{joinr1r2}
+\ncline{-}{joinr1r2r3}{retr3}
+\ncline{-}{retr1}{r1}
+\ncline{-}{retr2}{r2}
+\ncline{-}{retr3}{r3}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\doesnotrewriteto}
+\begin{minipage}[t]{0.6cm}
+\psset{unit=\edgesizes}
+\psset{nodesep=3pt}
+\nodesizes
+\begin{center}
+\begin{pspicture}(0,0)(1,3)
+\rput(0.5,1.5){$\Longrightarrow$}
+\rput(0.5,1.5){$/$}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\righttreetwo}
+\begin{minipage}[t]{3.0cm}
+\psset{unit=\edgesizes}
+\psset{nodesep=3pt}
+\nodesizes
+\begin{center}
+\begin{pspicture}(0,0)(3,3)
+\rput(1,3){\rnode{joinr1r2r3}{JOIN}}
+\rput(2,2){\rnode{joinr2r3}{JOIN}}
+\rput(0,2){\rnode{retr1}{RET}}
+\rput(1,1){\rnode{retr2}{RET}}
+\rput(3,1){\rnode{retr3}{RET}}
+\rput(0,1){\rnode{r1}{$R_1$}}
+\rput(1,0){\rnode{r2}{$R_2$}}
+\rput(3,0){\rnode{r3}{$R_3$}}
+\ncline{-}{joinr1r2r3}{retr1}
+\ncline{-}{joinr1r2r3}{joinr2r3}
+\ncline{-}{joinr2r3}{retr2}
+\ncline{-}{joinr2r3}{retr3}
+\ncline{-}{retr1}{r1}
+\ncline{-}{retr2}{r2}
+\ncline{-}{retr3}{r3}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\subsection{Implementation rules}
+\label{sec:irules}
+
+Implementation rules, or I-rules for short, define equivalences between
+expressions and their implementing algorithms. Let $E$ be an
+expression and $A$ be an algorithm that implements $E$. The general
+form of an I-rule is given by Equation~(\ref{eq:generalirule}) (shown
+in Figure~\ref{fig:generalirule}).
+
+\begin{centeredfigure}
+\def\subfigtopskip{0pt}
+\myshadowbox{
+\begin{tabular}{c}
+\subfigure[General form of an I-rule]
+{
+\setlength{\topsep}{0pt}
+\scriptsize
+\begin{minipage}[b]{0.86\linewidth}
+\begin{irule}
+E(x_1, \ldots, x_n):\mathbf{D_1} \Longrightarrow
+ A(x_1, \ldots, x_n):\mathbf{D_2} \label{eq:generalirule}
+\end{irule}
+test
+\begin{irulepreopt}
+\> pre-opt statements
+\end{irulepreopt}
+\begin{irulepostopt}
+\> post-opt statements
+\end{irulepostopt}
+\end{minipage}
+\label{fig:generalirule}
+} \\ \hline
+%%%
+\subfigure[Merge-sort sort algorithm]
+{
+\setlength{\topsep}{0pt}
+\scriptsize
+\begin{minipage}[b]{0.86\linewidth}
+\vspace*{4pt}
+\begin{irule}
+\text{SORT}(S_1):\mathbf{D_2} \Longrightarrow
+ \text{Merge\_sort}(S_1):\mathbf{D_3} \label{eq:msort}
+\end{irule}
+$(\mathbf{D_2}.\text{tuple\_order}\ !\negthinspace= \text{DONT\_CARE})$
+\begin{irulepreopt}
+\> $\mathbf{D_3} = \mathbf{D_2}\ ;$
+\end{irulepreopt}
+\begin{irulepostopt}
+\> $\mathbf{D_3}.\text{cost} = \mathbf{D_1}.\text{cost}$ \\
+\> \hspace{1.2cm} $+ (\mathbf{D_3}.\text{num\_records}) *
+ \log(\mathbf{D_3}.\text{num\_records})\ ;$
+\end{irulepostopt}
+\end{minipage}
+\label{fig:msort}
+}
+\end{tabular}
+}
+\caption{I-rule}
+\label{fig:irules}
+\end{centeredfigure}
+
+The actions associated with an I-rule are defined in three parts.
+The first part, or \emph{test}, is a boolean expression whose
+value determines whether or not the rule can be applied.
+
+The second part, or \emph{pre-opt statements}, is a set of descriptor
+assignment statements that are executed only if the test is true and
+\emph{before} any of the inputs $x_i$ of $E$ are optimized. Additional
+parameters of nodes are usually assigned in the pre-opt section. This
+is necessary before any of the nodes on the right side can be
+optimized.
+
+The third part, or \emph{post-opt statements}, is a set of descriptor
+assignment statements that are executed \emph{after} all $x_i$ are
+optimized. Normally, the post-opt statements compute cost properties
+that can only be determined once the inputs to the algorithm are
+completely optimized and their costs known. This \emph{does not},
+however, imply a bottom-up optimization strategy. It simply means that
+although I-rules are applied to parents before their children are
+optimized, the \emph{cost} (and other properties in the post-opt
+section) of the parent cannot be computed until the children have been
+optimized.
+
+\begin{example}
+\label{ex:mergesort}
+Equation~(\ref{eq:msort}) (in Figure~\ref{fig:msort}) shows the I-rule
+that implements the SORT operator by Merge\_sort.
+\end{example}
+
+\subsection{Null algorithm}
+\label{sec:null}
+Recall that, in Section~\ref{sec:intro}, we mentioned that Prairie
+allows users to treat all operators and algorithms as first-class
+objects, \ie all operators and algorithms are explicit, in contrast to
+enforcers in Volcano or glue in Starburst. This requires that Prairie
+provide a mechanism where users can also ``delete'' one or more of the
+explicit operators from expressions. This is done by having a special
+class of I-rules that have the form given by
+Equation~(\ref{eq:generalnullalg}) in Figure~\ref{fig:generalnullalg}.
+The left side of the rule is a single abstract operator $O$ with one
+stream input $S_1$. The right side of the rule is an algorithm called
+``Null'' with the same stream input but with a different descriptor.
+As the name suggests, the Null algorithm is supposed to pass its input
+unchanged to algorithms above it in an operator tree. This is
+accomplished in the I-rule as follows.
+
+The test for this I-rule is always TRUE, \ie any node in an operator
+tree with $O$ as its operator can be implemented by the Null
+algorithm. The actions associated with this rule have a specific
+pattern. The pre-opt section consists of three
+statements. The first statement copies the descriptor of the operator
+$O$ to the algorithm Null. The second statement sets the descriptor of
+the stream $S_1$ on the right side to the descriptor of the stream
+$S_1$ on the left side. Why is it necessary to do this? The key lies
+in the third statement. This statement copies the property
+``property'' of the operator $O$ node on the left side to the
+``property'' of the input stream $S_1$ on the right side. Since
+left-hand side descriptors cannot be changed in an I-rule, a new
+descriptor $\mathbf{D_3}$ is necessary for $S_1$ to convey the property
+propagation information.
+
+The post-opt section in the I-rule has only a cost-assignment
+statement; this simply sets the cost of the Null node to the cost of
+its optimized input stream.
+
+The Null algorithm, therefore, serves to effectively transform a single
+operator to a no-op.
+
+\begin{example}
+Equation~(\ref{eq:nullsort}) (in Figure~\ref{fig:nullsort}) shows the
+I-rule that rewrites the SORT operator to use a Null algorithm.
+\end{example}
+
+\begin{centeredfigure}
+\def\subfigtopskip{0pt}
+\myshadowbox{
+\begin{tabular}{c}
+\subfigure[General form of a ``Null'' I-rule]
+{
+\setlength{\topsep}{0pt}
+\scriptsize
+\begin{minipage}[b]{0.86\linewidth}
+\begin{irule}
+O(S_1):\mathbf{D_2} \Longrightarrow
+ \text{Null}(S_1:\mathbf{D_3}):\mathbf{D_4} \label{eq:generalnullalg}
+\end{irule}
+TRUE
+\begin{irulepreopt}
+\> $\mathbf{D_4} = \mathbf{D_2}\ ;$ \\
+\> $\mathbf{D_3} = \mathbf{D_1}\ ;$ \\
+\> $\mathbf{D_3}.\text{property} = \mathbf{D_2}.\text{property}\ ;$
+\end{irulepreopt}
+\begin{irulepostopt}
+\> $\mathbf{D_4}.\text{cost} = \mathbf{D_3}.\text{cost}\ ;$
+\end{irulepostopt}
+\end{minipage}
+\label{fig:generalnullalg}
+}
+\\ \hline
+%%%
+\subfigure[Null sort algorithm]
+{
+\setlength{\topsep}{0pt}
+\scriptsize
+\begin{minipage}[b]{0.86\linewidth}
+\vspace*{4pt}
+\begin{irule}
+\text{SORT}(S_1):\mathbf{D_2} \rulespace \Longrightarrow
+ \text{Null}(S_1:\mathbf{D_3}):\mathbf{D_4} \label{eq:nullsort}
+\end{irule}
+TRUE
+\begin{irulepreopt}
+\> $\mathbf{D_4} = \mathbf{D_2}\ ;$ \\
+\> $\mathbf{D_3} = \mathbf{D_1}\ ;$ \\
+\> $\mathbf{D_3}.\text{tuple\_order} = \mathbf{D_2}.\text{tuple\_order}\ ;$
+\end{irulepreopt}
+\begin{irulepostopt}
+\> $\mathbf{D_4}.\text{cost} = \mathbf{D_3}.\text{cost}\ ;$
+\end{irulepostopt}
+\end{minipage}
+\label{fig:nullsort}
+}
+\end{tabular}
+}
+\caption{The ``Null'' algorithm concept}
+\label{fig:null}
+\end{centeredfigure}
diff --git a/macros/latex/contrib/utthesis/ICDE-11/p2v.tex b/macros/latex/contrib/utthesis/ICDE-11/p2v.tex
new file mode 100644
index 0000000000..d8c344e302
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/p2v.tex
@@ -0,0 +1,139 @@
+\section{The P2V pre-processor}
+\label{sec:ptov}
+
+In Section~\ref{sec:intro}, we enumerated the four primary goals of
+Prairie, viz., uniformity in operator and algorithms; uniformity in
+properties; uniformity in property-transformations; and efficient
+generation of Prairie optimizers. The first three goals are driven by
+the need for conceptual simplicity; however, they alone do not
+necessarily generate efficient optimizers. The P2V pre-processor
+ensures that efficient optimizers can be realized from Prairie
+specifications, by translating them to the Volcano framework and then
+generating an optimizer by compiling with the Volcano search engine.
+This Prairie optimizer-generator paradigm is shown schematically in
+Figure~\ref{fig:ptovmodel}. The pre-processor itself is 4500 lines of
+\texttt{flex} and \texttt{bison} code. In this section, we briefly
+describe the pre-processor steps and explain why the Prairie-to-Volcano
+transformation is non-trivial. A more detailed description of the
+pre-processor is given in \cite{Das94}.
+
+\begin{centeredfigure}
+\myshadowbox
+{
+\scriptsize
+\begin{centeredinfullminipage}
+\begin{center}
+\psset{unit=6mm}
+\psset{nodesep=3pt}
+%\begin{pspicture}(-1.0,-0.5)(10,9.0)
+\begin{pspicture}(-1.0,-0.5)(8,9.0)
+\pspolygon[doubleline=true](1,1.5)(7,1.5)(7,7.5)(1,7.5)
+\pspolygon[fillcolor=white,fillstyle=solid](2,8)(6,8)(6,9)(2,9)
+\rput(4,8.5){\psframebox*{Prairie Rule Set}}
+\psline[border=2pt]{->}(4,8)(4,7)
+\pspolygon[doubleline=true](2,6)(6,6)(6,7)(2,7)
+\rput(4,6.5){P2V Pre-processor}
+\psline[border=2pt]{->}(4,6)(4,5)
+\pspolygon[fillcolor=gray,fillstyle=solid](2,4)(6,4)(6,5)(2,5)
+\rput(4,4.5){\psframebox*{Volcano Rule Set}}
+\psline[border=2pt]{->}(4,4)(4,3)
+\pspolygon[doubleline=true](2,2)(6,2)(6,3)(2,3)
+\rput(4,2.5){\begin{tabular}{c} Volcano \\ Optimizer-Generator \end{tabular}}
+\psline[border=2pt]{->}(4,2)(4,1)
+\pspolygon[fillcolor=gray,fillstyle=solid](2,0)(6,0)(6,1)(2,1)
+\rput(4,0.5){\psframebox*{Query Optimizer}}
+\rput[r](1,0.5){Operator Tree}
+\psline[border=2pt]{->}(1,0.5)(2,0.5)
+\psline[border=2pt]{->}(6,0.5)(7,0.5)
+\rput[l](7,0.5){Access Plan}
+\end{pspicture}
+\end{center}
+\end{centeredinfullminipage}
+}
+\caption{The Prairie optimizer-generator paradigm. Double-boxed modules
+ represent software generators, shaded boxes represent
+ generated programs. The outermost double-boxed portion
+ denotes the Prairie optimizer generator.}
+\label{fig:ptovmodel}
+\end{centeredfigure}
+
+The specification of an optimizer in Volcano consists of a set of
+transformation rules (called ``trans\_rules'') and implementation rules
+(called ``impl\_rules''), a set of properties, and some support
+functions. The join associativity trans\_rule
+(cf.\ Figure~\ref{fig:associativity}) in Volcano is as follows\footnote{There
+are conditions and actions associated with Volcano rules that are not
+shown here.}:
+\begin{eqnarray*}
+\scriptscriptstyle
+& &
+{\scriptstyle
+(\text{JOIN} \ \text{?op\_arg5}
+ \ ((\text{JOIN} \ \text{?op\_arg4} \ (?1 \ ?2)) \
+ ?3))} \\
+& &
+\rulespace
+{\scriptstyle -\!\!>}
+{\scriptstyle
+(\text{JOIN} \ \text{?op\_arg7}
+ \ (?1 \
+ (\text{JOIN} \ \text{?op\_arg6} \ (?2 \ ?3))))}
+\end{eqnarray*}
+The important point to note is the use of \emph{operator arguments}
+(denoted by ``op\_arg'' in rules); these arguments contain properties
+used in the rule's actions, but unlike Prairie, they do not contain
+\emph{all} the properties of an operator tree node. There are other
+property classes, like algorithm argument, logical property, system
+property, physical property, and cost. Thus, while Prairie uses a
+uniform descriptor to encode properties, Volcano partitions the
+properties into different classes. The P2V pre-processor partitions a
+Prairie descriptor into the different property classes required by
+Volcano. This is a non-trivial task, since it requires parsing the
+Prairie rules and their actions.
+
+Impl\_rules in Volcano defer most of the actions associated with the
+rules to support functions. Each algorithm has four support functions
+associated with it. A Prairie specification, on the other hand,
+contains all the actions in the corresponding rule. The P2V
+pre-processor parses a Prairie I-rule, and automatically generates all
+the Volcano support functions from the rule. This is also a complex
+process, since it depends partly on the partitioning of properties
+mentioned in the last paragraph, and also because it requires
+relocating pieces of code from Prairie rules to Volcano support
+functions.
+
+The third salient feature of a Volcano specification is the presence of
+implicit, or hidden, algorithms, called \emph{enforcers}. In Prairie,
+all algorithms are explicit. Consider, for example, the Merge\_sort
+algorithm in Figure~\ref{fig:msort}. In a Volcano specification, this
+algorithm would be classified as an enforcer, since it enforces the
+sortedness property. The P2V pre-processor determines the Prairie
+algorithms that are functionally Volcano enforcers, and deletes the
+corresponding Prairie rules to generate the Volcano specification.
+This requires the pre-processor to migrate the (deleted) rule's actions
+to Volcano support functions.
+
+The P2V pre-processor also generates a set of compact Volcano rules by
+merging Prairie rules whenever possible. Consider, for example, the
+following set of rules in Prairie:
+\begin{eqnarray*}
+{\scriptstyle \text{JOIN}(S_1, S_2):\mathbf{D_3}}
+ & \Longrightarrow &
+{\scriptstyle \text{JOPR}(\text{SORT}(S_1):\mathbf{D_4},
+ \text{SORT}(S_2):\mathbf{D_5}):\mathbf{D_6}} \\
+{\scriptstyle \text{SORT}(S_1):\mathbf{D_2}}
+ & \Longrightarrow &
+{\scriptstyle \text{Null}(S_1:\mathbf{D_3}):\mathbf{D_4}} \\
+{\scriptstyle \text{JOPR}(S_1, S_2):\mathbf{D_3}}
+ & \Longrightarrow &
+{\scriptstyle \text{Nested\_loops}(S_1:\mathbf{D_4}, S_2):\mathbf{D_5}}
+\end{eqnarray*}
+The first rule is a T-rule, and the next two are I-rules. The P2V
+pre-processor combines the above set of Prairie rules into a single
+I-rule,
+\begin{eqnarray*}
+{\scriptstyle \text{JOIN}(S_1, S_2):\mathbf{D_3}}
+ & \Longrightarrow &
+{\scriptstyle \text{Nested\_loops}(S_1:\mathbf{D_4}, S_2):\mathbf{D_5}}
+\end{eqnarray*}
+and then translates it into a single Volcano impl\_rule.
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.aux b/macros/latex/contrib/utthesis/ICDE-11/paper.aux
new file mode 100644
index 0000000000..9c07f2af48
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.aux
@@ -0,0 +1,137 @@
+\relax
+\citation{Grae93}
+\citation{Bato88a}
+\citation{Grae87b}
+\citation{Haas88}
+\citation{Ston86b}
+\citation{Haas88,Frey87a,Grae87b,Grae90b}
+\citation{Haas88}
+\citation{Grae90b}
+\@writefile{toc}{\protect \contentsline {section}{\protect \numberline {1}Introduction}{1}}
+\newlabel{sec:intro}{{1}{1}}
+\@writefile{toc}{\protect \contentsline {section}{\protect \numberline {2}Prairie: A language for rule specification}{2}}
+\newlabel{sec:framework}{{2}{2}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {2.1}Notation and assumptions}{2}}
+\newlabel{sec:notation}{{2.1}{2}}
+\@writefile{toc}{\protect \contentsline {paragraph}{Stored Files and Streams.}{2}}
+\@writefile{toc}{\protect \contentsline {paragraph}{Database Operations.}{2}}
+\@writefile{toc}{\protect \contentsline {paragraph}{Operator Trees.}{2}}
+\citation{Seli79}
+\citation{Dani82}
+\citation{Grae90b}
+\@writefile{lot}{\protect \contentsline {table}{\protect \numberline {1}{\ignorespaces Operators and algorithms in a centralized query optimizer and their additional parameters}}{3}}
+\newlabel{tab:operators}{{1}{3}}
+\@writefile{lot}{\protect \contentsline {table}{\protect \numberline {2}{\ignorespaces Properties of nodes in an operator tree}}{3}}
+\newlabel{tab:annotations}{{2}{3}}
+\newlabel{fig:optreeexample}{{1(a)}{3}}
+\newlabel{fig:accplanexample}{{1(b)}{3}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {1}{\ignorespaces Example of an operator tree and access plan}}{3}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{1(a)}{\ignorespaces An expression and its corresponding operator tree}}{3}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{1(b)}{\ignorespaces Possible access plan for operator tree in (a)}}{3}}
+\newlabel{fig:expexample}{{1}{3}}
+\@writefile{toc}{\protect \contentsline {paragraph}{Descriptors.}{3}}
+\@writefile{toc}{\protect \contentsline {paragraph}{Access Plans.}{3}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {2.2}Prairie optimization paradigm}{3}}
+\newlabel{sec:topdown}{{2.2}{3}}
+\newlabel{eq:generaltrule}{{1}{4}}
+\newlabel{fig:generaltrule}{{2(a)}{4}}
+\newlabel{eq:associativity}{{2}{4}}
+\newlabel{fig:associativity}{{2(b)}{4}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {2}{\ignorespaces T-rule}}{4}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{2(a)}{\ignorespaces General form of a T-rule}}{4}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{2(b)}{\ignorespaces Join associativity}}{4}}
+\newlabel{fig:trules}{{2}{4}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {2.3}Transformation rules}{4}}
+\newlabel{sec:trules}{{2.3}{4}}
+\newlabel{eq:generalirule}{{3}{4}}
+\newlabel{fig:generalirule}{{3(a)}{4}}
+\newlabel{eq:msort}{{4}{4}}
+\newlabel{fig:msort}{{3(b)}{4}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {3}{\ignorespaces I-rule}}{4}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{3(a)}{\ignorespaces General form of an I-rule}}{4}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{3(b)}{\ignorespaces Merge-sort sort algorithm}}{4}}
+\newlabel{fig:irules}{{3}{4}}
+\newlabel{ex:joinassociativity}{{4.}{4}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {2.4}Implementation rules}{4}}
+\newlabel{sec:irules}{{2.4}{4}}
+\citation{Das94}
+\newlabel{ex:mergesort}{{5.}{5}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {2.5}Null algorithm}{5}}
+\newlabel{sec:null}{{2.5}{5}}
+\@writefile{toc}{\protect \contentsline {section}{\protect \numberline {3}The P2V pre-processor}{5}}
+\newlabel{sec:ptov}{{3}{5}}
+\newlabel{eq:generalnullalg}{{5}{5}}
+\newlabel{fig:generalnullalg}{{4(a)}{5}}
+\newlabel{eq:nullsort}{{6}{5}}
+\newlabel{fig:nullsort}{{4(b)}{5}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {4}{\ignorespaces The ``Null'' algorithm concept}}{5}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{4(a)}{\ignorespaces General form of a ``Null'' I-rule}}{5}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{4(b)}{\ignorespaces Null sort algorithm}}{5}}
+\newlabel{fig:null}{{4}{5}}
+\citation{Das93}
+\citation{Blak93}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {5}{\ignorespaces The Prairie optimizer-generator paradigm. Double-boxed modules represent software generators, shaded boxes represent generated programs. The outermost double-boxed portion denotes the Prairie optimizer generator.}}{6}}
+\newlabel{fig:ptovmodel}{{5}{6}}
+\@writefile{toc}{\protect \contentsline {section}{\protect \numberline {4}Experimental results}{6}}
+\newlabel{sec:results}{{4}{6}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {4.1}The Texas Instruments Open OODB query optimizer}{6}}
+\newlabel{sec:oodb}{{4.1}{6}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {4.2}Programmer productivity}{7}}
+\newlabel{sec:productivity}{{4.2}{7}}
+\@writefile{toc}{\protect \contentsline {subsection}{\protect \numberline {4.3}Performance results using the Open OODB optimizer}{7}}
+\newlabel{sec:oodbexp}{{4.3}{7}}
+\citation{Seli79}
+\citation{Dani82}
+\newlabel{fig:Eone}{{6(a)}{8}}
+\newlabel{fig:Etwo}{{6(b)}{8}}
+\newlabel{fig:Ethree}{{6(c)}{8}}
+\newlabel{fig:Efour}{{6(d)}{8}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {6}{\ignorespaces Expressions used in generating queries for experiments}}{8}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{6(a)}{\ignorespaces E1}}{8}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{6(b)}{\ignorespaces E2}}{8}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{6(c)}{\ignorespaces E3}}{8}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{6(d)}{\ignorespaces E4}}{8}}
+\newlabel{fig:exps}{{6}{8}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {3}{\ignorespaces Queries used in experiments}}{8}}
+\newlabel{tab:queries}{{3}{8}}
+\@writefile{toc}{\protect \contentsline {section}{\protect \numberline {5}Related research}{8}}
+\newlabel{sec:related}{{5}{8}}
+\citation{Haas88}
+\citation{Frey87a}
+\citation{Grae87b}
+\citation{Grae90b}
+\newlabel{fig:q1}{{7(a)}{9}}
+\newlabel{fig:q2}{{7(b)}{9}}
+\newlabel{fig:q3}{{7(c)}{9}}
+\newlabel{fig:q4}{{7(d)}{9}}
+\newlabel{fig:q5}{{7(e)}{9}}
+\newlabel{fig:q6}{{7(f)}{9}}
+\newlabel{fig:q7}{{7(g)}{9}}
+\newlabel{fig:q8}{{7(h)}{9}}
+\@writefile{lof}{\protect \contentsline {figure}{\protect \numberline {7}{\ignorespaces Query optimization times for Q1 through Q8}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(a)}{\ignorespaces Query 1}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(b)}{\ignorespaces Query 2}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(c)}{\ignorespaces Query 3}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(d)}{\ignorespaces Query 4}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(e)}{\ignorespaces Query 5}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(f)}{\ignorespaces Query 6}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(g)}{\ignorespaces Query 7}}{9}}
+\@writefile{lof}{\protect \contentsline {subfigure}{\string\numberline{7(h)}{\ignorespaces Query 8}}{9}}
+\newlabel{fig:e4}{{7}{9}}
+\@writefile{toc}{\protect \contentsline {section}{\protect \numberline {6}Conclusion and future work}{9}}
+\newlabel{sec:conclusion}{{6}{9}}
+\bibstyle{plain}
+\bibdata{references}
+\bibcite{Bato88a}{1}
+\bibcite{Blak93}{2}
+\bibcite{Dani82}{3}
+\bibcite{Das93}{4}
+\bibcite{Das94}{5}
+\bibcite{Frey87a}{6}
+\bibcite{Grae90b}{7}
+\bibcite{Grae93}{8}
+\bibcite{Grae87b}{9}
+\bibcite{Haas88}{10}
+\bibcite{Seli79}{11}
+\bibcite{Ston86b}{12}
+\newlabel{sec:acknowledgments}{{6}{10}}
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.bbl b/macros/latex/contrib/utthesis/ICDE-11/paper.bbl
new file mode 100644
index 0000000000..a7e1b3ccdf
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.bbl
@@ -0,0 +1,76 @@
+\begin{thebibliography}{10}
+
+\bibitem{Bato88a}
+D.~S. Batory.
+\newblock Building blocks of database management systems.
+\newblock Technical Report TR--87--23, The University of Texas at Austin,
+ February 1988.
+
+\bibitem{Blak93}
+Jos\'e~A. Blakeley, William~J. McKenna, and Goetz Graefe.
+\newblock Experiences building the {O}pen {OODB} query optimizer.
+\newblock In {\em Proceedings 1993 ACM SIGMOD International Conference on
+ Management of Data}, pages 287--296, Washington, May 1993.
+
+\bibitem{Dani82}
+Dean Daniels, Patricia Selinger, Laura Haas, Bruce Lindsay, C.~Mohan, Adrian
+ Walker, and Paul Wilms.
+\newblock An introduction to distributed query compilation in {R}$^*$.
+\newblock In {\em Proceedings 2nd International Conference on Distributed
+ Databases}, pages 291--309, Berlin, September 1982.
+
+\bibitem{Das93}
+Dinesh Das and Don Batory.
+\newblock Prairie: An algebraic framework for rule specification in query
+ optimizers.
+\newblock In {\em Proceedings of the Workshop on Database Query Optimizer
+ Generators and Rule-Based Optimizers}, pages 139--154, Dallas, September
+ 1993.
+
+\bibitem{Das94}
+Dinesh Das and Don Batory.
+\newblock Prairie: A rule specification framework for query optimizers.
+\newblock Technical Report TR 94--16, The University of Texas at Austin, May
+ 1994.
+
+\bibitem{Frey87a}
+Johann~Christoph Freytag.
+\newblock A rule-based view of query optimization.
+\newblock In {\em Proceedings 1987 ACM SIGMOD International Conference on
+ Management of Data}, pages 173--180, San Francisco, May 1987.
+
+\bibitem{Grae90b}
+Goetz Graefe.
+\newblock Volcano, an extensible and parallel query evaluation system.
+\newblock Technical Report CU--CS--481--90, University of Colorado at Boulder,
+ July 1990.
+
+\bibitem{Grae93}
+Goetz Graefe.
+\newblock Query evaluation techniques for large databases.
+\newblock {\em ACM Computing Surveys}, 25(2):73--170, June 1993.
+
+\bibitem{Grae87b}
+Goetz Graefe and David~J. DeWitt.
+\newblock The {EXODUS} optimizer generator.
+\newblock In {\em Proceedings 1987 ACM SIGMOD International Conference on
+ Management of Data}, pages 387--394, San Francisco, May 1987.
+
+\bibitem{Haas88}
+L.~M. Haas, J.~C. Freytag, G.~M. Lohman, and H.~Pirahesh.
+\newblock Extensible query processing in {S}tarburst.
+\newblock Research Report RJ 6610, IBM Almaden Research Center, December 1988.
+
+\bibitem{Seli79}
+P.~G. Selinger, M.~M. Astrahan, D.~D. Chamberlin, R.~A. Lorie, and T.~G. Price.
+\newblock Access path selection in a relational database management system.
+\newblock In {\em Proceedings 1979 ACM SIGMOD International Conference on
+ Management of Data}, pages 23--34, Boston, May 1979.
+
+\bibitem{Ston86b}
+Michael Stonebraker and Lawrence~A. Rowe.
+\newblock The design of {P}ostgres.
+\newblock In {\em Proceedings 1986 ACM SIGMOD International Conference on
+ Management of Data}, pages 340--355, Washington, May 1986.
+
+\end{thebibliography}
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.blg b/macros/latex/contrib/utthesis/ICDE-11/paper.blg
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.blg
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.dvi b/macros/latex/contrib/utthesis/ICDE-11/paper.dvi
new file mode 100644
index 0000000000..24b018fcfb
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.dvi
Binary files differ
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.log b/macros/latex/contrib/utthesis/ICDE-11/paper.log
new file mode 100644
index 0000000000..baa677fc30
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.log
@@ -0,0 +1,511 @@
+This is TeX, Version 3.141 (C version d) (format=latex 94.8.3) 20 MAR 1995 11:32
+**&latex2e paper
+(paper.tex
+LaTeX2e <1994/06/01> patch level 3
+(/lusr/tex/lib/tex/macros/latex2e/article.cls
+Document Class: article 1994/07/13 v1.2u Standard LaTeX document class
+(/lusr/tex/lib/tex/macros/latex2e/size10.clo
+File: size10.clo 1994/07/13 v1.2u Standard LaTeX file (size option)
+)
+\c@part=\count82
+\c@section=\count83
+\c@subsection=\count84
+\c@subsubsection=\count85
+\c@paragraph=\count86
+\c@subparagraph=\count87
+\c@figure=\count88
+\c@table=\count89
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/lusr/tex/lib/tex/macros/latex2e/amssymb.sty
+Package: amssymb 1994/10/27 v1.2beta
+
+(/lusr/tex/lib/tex/macros/latex2e/amsfonts.sty
+Package: amsfonts 1994/10/25 v1.2beta
+
+(/lusr/tex/lib/tex/macros/latex2e/amsgen.sty
+File: amsgen.sty 1994/10/26 v1.2beta
+\@emptytoks=\toks14
+\ex@=\dimen103
+)
+\Mathstrutbox@=\box25
+\strutbox@=\box26
+\big@size=\dimen104
+\symAMSa=\mathgroup4
+\symAMSb=\mathgroup5
+LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
+(Font) U/euf/m/n --> U/euf/b/n on input line 151.
+)
+LaTeX Font Info: Redeclaring math symbol \square on input line 55.
+LaTeX Font Info: Redeclaring math symbol \lozenge on input line 58.
+)
+(/lusr/tex/lib/tex/macros/latex2e/amstext.sty
+Package: amstext 1994/10/27 v1.2beta
+)
+(/lusr/tex/lib/tex/macros/latex2e/array.sty
+Package: array 1994/06/01 v2.2e Tabular extension package (FMi)
+\col@sep=\dimen105
+\extrarowheight=\dimen106
+\NC@list=\toks15
+)
+(/u/ddas/tex/latex2e/inputs/boxedminipage.sty)
+(/u/ddas/tex/latex2e/inputs/calc.sty
+Style Option: `calc' 3.7 <1993/09/26 19:56:43> (KKT and FJ)
+\global@count=\count90
+\local@count=\count91
+\global@dimen=\dimen107
+\local@dimen=\dimen108
+\global@skip=\skip43
+\local@skip=\skip44
+\global@muskip=\muskip10
+\local@muskip=\muskip11
+\ratio@count=\count92
+) (/u/ddas/tex/inputs/citesort.sty
+\@minsofar=\count93
+\@min=\count94
+\@cite@temp=\count95
+)
+(/lusr/tex/lib/tex/macros/latex2e/epsfig.sty
+Package: epsfig 1994/06/07 1.3 (SPQR)
+
+(/lusr/tex/lib/tex/macros/latex2e/graphicx.sty
+Package: graphicx 1994/05/30 v0.4b Enhanced LaTeX Graphics (DPC,SPQR)
+
+(/lusr/tex/lib/tex/macros/latex2e/keyval.sty
+Package: keyval 1994/03/15 v1.07 sin cos tan (DPC)
+Package: keyval 1994/02/01 v1.06 (DPC)
+Package: keyval 1994/02/01 v1.06 (DPC)
+)
+(/lusr/tex/lib/tex/macros/latex2e/graphics.sty
+Package: graphics 1994/05/30 v0.4e Standard LaTeX Graphics (DPC,SPQR)
+
+(/lusr/tex/lib/tex/macros/latex2e/trig.sty
+Package: trig 1994/03/15 v1.07 sin cos tan (DPC)
+)
+(/lusr/tex/lib/tex/macros/latex2e/dvips.def
+File: dvips.def 1994/06/08 v1.6 Driver-dependant file (DPC,SPQR)
+))
+\Gin@req@height=\dimen109
+\Gin@req@width=\dimen110
+)
+\epsfxsize=\dimen111
+\epsfysize=\dimen112
+)
+(/u/ddas/tex/pstricks/inputs/fancybox.sty
+Style option: `fancybox' v1.0 <93/02/10> (tvz)
+\@fancybox=\box27
+\shadowsize=\dimen113
+\@Sbox=\box28
+\do@VerbBox=\toks16
+\the@fancyput=\toks17
+\this@fancyput=\toks18
+\EndVerbatimTokens=\toks19
+\Verbatim@Outfile=\write4
+\Verbatim@Infile=\read1
+) (/u/ddas/tex/inputs/fancyheadings.sty
+\headrulewidth=\dimen114
+\footrulewidth=\dimen115
+\plainheadrulewidth=\dimen116
+\plainfootrulewidth=\dimen117
+\headwidth=\dimen118
+) (/lusr/tex/lib/tex/macros/fleqn.sty
+Document style option `fleqn' - Released 04 Nov 91
+\mathindent=\dimen119
+) (/lusr/tex/lib/tex/macros/latex2e/hhline.sty
+Package: hhline 1994/05/23 v2.03 Table rule package (DPC)
+)
+(/u/ddas/tex/latex2e/inputs/multirow.sty)
+(/u/ddas/tex/latex2e/inputs/psboxit.sty
+\gray@box=\box29
+\gray@space=\dimen120
+)
+(/u/ddas/tex/pstricks/inputs/pst-node.sty
+(/u/ddas/tex/pstricks/inputs/pst-node.tex
+(/u/ddas/tex/pstricks/inputs/pstricks.tex
+`PSTricks' v0.93a <93/03/12> (tvz)
+\pst@dima=\dimen121
+\pst@dimb=\dimen122
+\pst@dimc=\dimen123
+\pst@dimd=\dimen124
+\pst@dimg=\dimen125
+\pst@dimh=\dimen126
+\pst@hbox=\box30
+\pst@boxg=\box31
+\pst@cnta=\count96
+\pst@cntb=\count97
+\pst@cntc=\count98
+\pst@cntd=\count99
+\pst@cntg=\count100
+\pst@cnth=\count101
+(/u/ddas/tex/pstricks/inputs/pstricks.con)
+\psunit=\dimen127
+\psxunit=\dimen128
+\psyunit=\dimen129
+\pslinewidth=\dimen130
+\pst@customdefs=\toks20
+\pslinearc=\dimen131
+\everypsbox=\toks21
+\psframesep=\dimen132
+\pslabelsep=\dimen133
+\theoverlaybox=\box32
+)))
+(/u/ddas/tex/pstricks/inputs/pstricks.sty
+(/u/ddas/tex/pstricks/inputs/pstricks.tex)) (stretch.sty)
+(/u/ddas/tex/latex2e/inputs/subfigure.sty
+\c@subfigure=\count102
+\c@lofdepth=\count103
+\c@subtable=\count104
+\c@lotdepth=\count105
+)
+(/lusr/tex/lib/tex/macros/latex2e/theorem.sty
+Package: theorem 1994/02/03 LaTeX2e package v2.2a
+
+Package: `theorem' v2.2a <1994/02/03> (FMi)
+English documentation as of <1994/02/28> (FMi)
+\theorem@style=\toks22
+\theorem@bodyfont=\toks23
+\theorempreskipamount=\skip45
+\theorempostskipamount=\skip46
+(/lusr/tex/lib/tex/macros/latex2e/thp.sty
+File: thp.sty 1994/02/03 Theorem layout style v2.2a
+Theorem layout: `theorem-plain' v2.2a <1994/02/03> (FMi)
+))
+(/lusr/tex/lib/tex/macros/latex2e/times.sty
+Package: times 94/11/11 4.2 Times PSNFSS2e package
+) (/u/ddas/tex/inputs/timestamp.sty
+\hour=\count106
+\minute=\count107
+\wwwy=\count108
+\wwwm=\count109
+\wwwd=\count110
+\wwwc=\count111
+\wwwt=\count112
+\wwws=\count113
+) (/lusr/tex/lib/tex/macros/latex2e/verbatim.sty
+Package: verbatim 1994/06/10 v1.5e LaTeX2e package for verbatim enhancements
+
+Package: `verbatim' 4.2 <94/11/11> (RmS)
+English Documentation <94/11/06> (RmS)
+\every@verbatim=\toks24
+\verbatim@line=\toks25
+\verbatim@in@stream=\read2
+) (/lusr/tex/lib/tex/macros/latex2e/xspace.sty
+Package: xspace 1994/01/31 v1.02 Space after command names (DPC)
+)
+\edgesizes=\skip47
+LaTeX Font Info: Try loading font information for OT1+ptm on input line 93.
+
+(/lusr/tex/lib/tex/macros/latex2e/OT1ptm.fd)
+\c@myexample=\count114
+ (paper.aux)
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 235.
+LaTeX Font Info: ... okay on input line 235.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 235.
+LaTeX Font Info: ... okay on input line 235.
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 235.
+LaTeX Font Info: ... okay on input line 235.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 235.
+LaTeX Font Info: ... okay on input line 235.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 235.
+LaTeX Font Info: ... okay on input line 235.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 235.
+LaTeX Font Info: ... okay on input line 235.
+LaTeX Info: Redefining \" on input line 235.
+LaTeX Info: Redefining \" on input line 235.
+LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <17.28> not available
+(Font) Font shape `OT1/ptm/b/n' tried instead on input line 237.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <17.28> on input line 237.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <12> on input line 237.
+LaTeX Font Info: Try loading font information for U+msa on input line 237.
+
+(/lusr/tex/lib/tex/macros/latex2e/Umsa.fd
+File: Umsa.fd 1994/10/17 v2.2d AMS font definitions
+)
+LaTeX Font Info: Try loading font information for U+msb on input line 237.
+
+(/lusr/tex/lib/tex/macros/latex2e/Umsb.fd
+File: Umsb.fd 1994/10/17 v2.2d AMS font definitions
+)
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <8> on input line 237.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <6> on input line 237.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <5> on input line 237.
+LaTeX Font Info: Try loading font information for OT1+pcr on input line 237.
+
+
+(/lusr/tex/lib/tex/macros/latex2e/OT1pcr.fd) (abstract.tex
+LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <14.4> not available
+(Font) Font shape `OT1/ptm/b/n' tried instead on input line 2.
+) (intro.tex
+Underfull \hbox (badness 10000) has occurred while \output is active
+[]
+ []
+
+[1
+
+
+]
+Underfull \hbox (badness 2980) in paragraph at lines 60--68
+[][]\OT1/ptm/m/n/10 A frame-work in which users can spec-ify map-ping
+ []
+
+) (model.tex
+LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <12> not available
+(Font) Font shape `OT1/ptm/b/n' tried instead on input line 10.
+LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <10> not available
+(Font) Font shape `OT1/ptm/b/n' tried instead on input line 14.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <7> on input line 16.
+
+Underfull \hbox (badness 1515) in paragraph at lines 34--42
+\OT1/ptm/m/n/10 are de-noted by all cap-i-tal let-ters (e.g., JOIN).
+ []
+
+
+Underfull \hbox (badness 2799) in paragraph at lines 34--42
+\OT1/ptm/m/n/10 tial and ad-di-tional. \OT1/ptm/m/it/10 Es-sen-tial pa-ram-e-te
+rs \OT1/ptm/m/n/10 are
+ []
+
+
+Underfull \hbox (badness 1354) in paragraph at lines 34--42
+\OT1/ptm/m/n/10 the stream or file in-puts to an op-er-a-tor; these
+ []
+
+
+Underfull \hbox (badness 2158) in paragraph at lines 34--42
+\OT1/ptm/m/n/10 are the pri-mary in-puts to be pro-cessed by an
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 44--52
+[][]\OT1/ptm/m/it/10 Algorithms \OT1/ptm/m/n/10 are con-crete im-ple-men-
+ []
+
+
+Underfull \hbox (badness 4792) in paragraph at lines 44--52
+\OT1/ptm/m/n/10 ta-tions of con-cep-tual op-er-a-tors; they will be
+ []
+
+
+Underfull \hbox (badness 2809) in paragraph at lines 44--52
+\OT1/ptm/m/n/10 rep-re-sented in lower case with the first let-ter
+ []
+
+
+Underfull \hbox (badness 8000) in paragraph at lines 44--52
+\OT1/ptm/m/n/10 cap-i-tal-ized (e.g., Nested[]loops). Al-go-rithms
+ []
+
+
+Underfull \hbox (badness 2970) in paragraph at lines 44--52
+\OT1/ptm/m/n/10 implement.[] Fur-ther-more, there can be, and
+ []
+
+\first=\skip48
+\second=\skip49
+\third=\skip50
+\fourth=\skip51
+\linelength=\skip52
+LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <7> not available
+(Font) Font shape `OT1/ptm/b/n' tried instead on input line 71.
+
+Overfull \hbox (12.0pt too wide) in paragraph at lines 85--86
+[]|$[]$|
+ []
+
+
+Underfull \hbox (badness 4366) in paragraph at lines 200--200
+[]\OT1/ptm/m/n/8 (a) An ex-pres-sion and its
+ []
+
+[2]
+Underfull \hbox (badness 3271) in paragraph at lines 301--311
+ []\OT1/ptm/m/n/10 There are two types of al-ge-braic trans-for-ma-tions (or
+ []
+
+[3]
+\lefttreeone=\box33
+\righttreeone=\box34
+\lefttreetwo=\box35
+\righttreetwo=\box36
+\rewritesto=\box37
+\doesnotrewriteto=\box38
+ [4]
+Underfull \hbox (badness 6978) in paragraph at lines 766--769
+ []\OT1/ptm/m/n/10 The post-opt sec-tion in the I-rule has only a cost-
+ []
+
+
+Underfull \hbox (badness 4699) in paragraph at lines 766--769
+ \OT1/ptm/m/n/10 assignment state-ment; this sim-ply sets the cost of the
+ []
+
+) (p2v.tex
+Underfull \hbox (badness 1902) in paragraph at lines 4--19
+ \OT1/ptm/m/n/10 In Sec-tion 1[], we enu-mer-ated the four pri-mary goals of
+ []
+
+
+Underfull \hbox (badness 1577) in paragraph at lines 4--19
+ \OT1/ptm/m/n/10 and ef-fi-cient gen-er-a-tion of Prairie op-ti-miz-ers. The fi
+rst
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 56--56
+[]\OT1/ptm/m/n/10 Figure 5: The Prairie optimizer-generator paradigm.
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 56--56
+\OT1/ptm/m/n/10 Double-boxed mod-ules rep-re-sent soft-ware gen-er-a-tors,
+ []
+
+
+Underfull \hbox (badness 1194) in paragraph at lines 56--56
+\OT1/ptm/m/n/10 shaded boxes rep-re-sent gen-er-ated pro-grams. The out-er-
+ []
+
+
+Underfull \hbox (badness 1087) in paragraph at lines 56--56
+\OT1/ptm/m/n/10 most double-boxed por-tion de-notes the Prairie op-ti-mizer
+ []
+
+[5]
+Underfull \hbox (badness 1460) in paragraph at lines 105--115
+ []\OT1/ptm/m/n/10 The third salient fea-ture of a Vol-cano spec-i-fi-ca-tion i
+s
+ []
+
+
+Underfull \hbox (badness 2460) in paragraph at lines 105--115
+ \OT1/ptm/m/n/10 This re-quires the pre-processor to mi-grate the (deleted)
+ []
+
+) (results.tex
+Underfull \hbox (badness 4505) in paragraph at lines 24--26
+[][]\OT1/ptm/m/n/10 How is pro-gram-mer pro-duc-tiv-ity en-hanced by the
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 36--36
+ []\OT1/ptm/b/n/12 The Texas In-stru-ments Open OODB
+ []
+
+
+Underfull \hbox (badness 5105) in paragraph at lines 39--49
+ \OT1/ptm/m/n/10 The Texas In-stru-ments Open Object-Oriented Database
+ []
+
+
+Underfull \hbox (badness 7576) in paragraph at lines 39--49
+ \OT1/ptm/m/n/10 database sys-tem which pro-vides users an ar-chi-tec-tural
+ []
+
+
+Underfull \hbox (badness 1448) in paragraph at lines 39--49
+ \OT1/ptm/m/n/10 us-ing Vol-cano. It is writ-ten as a set of trans[]rules and
+ []
+
+
+Underfull \hbox (badness 3417) in paragraph at lines 39--49
+ \OT1/ptm/m/n/10 impl[]rules that de-fine the al-ge-bra of an object-oriented
+ []
+
+
+Underfull \hbox (badness 1122) in paragraph at lines 39--49
+ \OT1/ptm/m/n/10 database sys-tem. Cur-rently, there are 17 trans-for-ma-tion
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 39--49
+ \OT1/ptm/m/n/10 rules and 9 im-ple-men-ta-tion rules to-gether with about
+ []
+
+[6]
+Underfull \hbox (badness 10000) in paragraph at lines 86--86
+ []\OT1/ptm/b/n/12 Performance re-sults us-ing the Open
+ []
+
+\Eone=\box39
+\Etwo=\box40
+\Ethree=\box41
+\Efour=\box42
+\c@savectr=\count115
+\Lone=\skip53
+\Ltwo=\skip54
+\Lthree=\skip55
+\Lfour=\skip56
+\Lnum=\skip57
+
+Underfull \hbox (badness 10000) in paragraph at lines 351--356
+ []\OT1/ptm/m/n/10 Table 3[] also shows the num-ber of trans[]rules and
+ []
+
+
+Underfull \hbox (badness 1609) in paragraph at lines 351--356
+ \OT1/ptm/m/n/10 impl[]rules that are matched by each ex-pres-sion. These
+ []
+
+[7]
+File: runtime_Q1.ps Graphic file (type eps)
+ <runtime_Q1.ps>
+File: runtime_Q2.ps Graphic file (type eps)
+ <runtime_Q2.ps>
+File: runtime_Q3.ps Graphic file (type eps)
+ <runtime_Q3.ps>
+File: runtime_Q4.ps Graphic file (type eps)
+ <runtime_Q4.ps>
+File: runtime_Q5.ps Graphic file (type eps)
+
+<runtime_Q5.ps>
+File: runtime_Q6.ps Graphic file (type eps)
+ <runtime_Q6.ps>
+File: runtime_Q7.ps Graphic file (type eps)
+ <runtime_Q7.ps>
+File: runtime_Q8.ps Graphic file (type eps)
+ <runtime_Q8.ps>) (related.tex
+[8]) (conclusion.tex [9]) (paper.bbl
+Underfull \hbox (badness 1292) in paragraph at lines 10--14
+[][]\OT1/ptm/m/n/10 Jos[]e A. Blake-ley, William J. McKenna, and Goetz
+ []
+
+
+Underfull \hbox (badness 2418) in paragraph at lines 23--29
+\OT1/ptm/m/n/10 frame-work for rule spec-i-fi-ca-tion in query op-ti-miz-
+ []
+
+
+Underfull \hbox (badness 2401) in paragraph at lines 37--41
+\OT1/ptm/m/it/10 In-ter-na-tional Con-fer-ence on Man-age-ment of Data\OT1/ptm/
+m/n/10 ,
+ []
+
+
+Underfull \hbox (badness 2245) in paragraph at lines 54--58
+\OT1/ptm/m/it/10 MOD In-ter-na-tional Con-fer-ence on Man-age-ment of
+ []
+
+
+Underfull \hbox (badness 2245) in paragraph at lines 71--75
+\OT1/ptm/m/it/10 MOD In-ter-na-tional Con-fer-ence on Man-age-ment of
+ []
+
+) [10] (paper.aux) )
+Here is how much of TeX's memory you used:
+ 2739 strings out of 11045
+ 29194 string characters out of 75338
+ 125876 words of memory out of 262141
+ 5306 multiletter control sequences out of 9500
+ 18856 words of font info for 64 fonts, out of 100000 for 255
+ 14 hyphenation exceptions out of 607
+ 32i,17n,30p,345b,597s stack positions out of 300i,40n,60p,3000b,4000s
+
+Output written on paper.dvi (10 pages, 97632 bytes).
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.ps b/macros/latex/contrib/utthesis/ICDE-11/paper.ps
new file mode 100644
index 0000000000..9ff44af284
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.ps
@@ -0,0 +1,6693 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.55 Copyright 1986, 1994 Radical Eye Software
+%%Title: paper.dvi
+%%CreationDate: Mon Mar 20 11:33:02 1995
+%%Pages: 10
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: Times-Roman Times-Italic Times-Bold Courier
+%%EndComments
+%DVIPSCommandLine: dvips -D 600 paper -o
+%DVIPSParameters: dpi=600, comments removed
+%DVIPSSource: TeX output 1995.03.20:1132
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: /u/ddas/tex/pstricks/ps/pstricks.pro
+% PostScript prologue for pstricks.tex.
+% Created 1993/3/12. Source file was pstricks.doc
+% Version 0.93a, 93/03/12.
+% For use with Rokicki's dvips.
+/tx@Dict 200 dict def tx@Dict begin
+/ADict 25 dict def
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/Atan { /atan load stopped { pop pop 0 } if } def
+/Div { dup 0 eq { pop } { div } ifelse } def
+/NET { neg exch neg exch T } def
+/Pyth { dup mul exch dup mul add sqrt } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def }
+def
+/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
+} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
+pathforall z } def
+/STP { .996264 dup scale } def
+/STV { SDict begin normalscale end STP } def
+/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+/y ED x mul /x ED x 0 eq y 0 eq and { /x 1 def /y 1 def } if [ y x ] 1 a
+sub y mul setdash stroke } def
+/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt
+{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add
+def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if
+] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1
+setlinecap stroke } def
+/LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED
+/x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul
+def newpath 2 setlinecap n { currentstrokeadjust == x1 y1 moveto x2 y1 L
+stroke /y1 y1 a add def } repeat grestore } def
+/LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED
+/x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul
+def newpath 2 setlinecap systemdict /currentstrokeadjust known {
+currentstrokeadjust } { false } ifelse { /t { } def } { /t { transform
+0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform }
+bind def } ifelse n { x1 y1 t moveto x2 y1 t L stroke /y1 y1 a add def }
+repeat grestore } def
+/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg
+exch 3 index sub exch Atan rotate newpath } def
+/EndArrow { @mtrx setmatrix CP grestore end } def
+/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1
+scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill
+grestore } def
+/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0
+CLW moveto } def
+/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2
+div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0
+CLW moveto } def
+/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW
+2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0
+curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto }
+def
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+/closepath load } pathforall ] cvx newpath 3 1 roll T exec } def
+/SD { 0 360 arc fill } def
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+cvi def } def
+/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if
+f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
+/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub
+def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def
+/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
+ifelse { pop } repeat a } def
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+Lineto pop pop closepath } ifelse } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
+def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
+mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
+abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
+/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
+m mul neg def } def
+/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
+ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
+def
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def
+n { NC } repeat EOC } ifelse } def
+/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
+/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
+pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
+/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
+CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
+repeat closepath pop pop } ifelse } def
+/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS
+CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
+sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
+x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
+y0 x0 2 mul x1 sub y1 ] def } def
+/Grid { /a 4 string def /b ED /d ED /n ED cvi dup 1 lt { pop 1 } if /c ED
+c div dup 0 eq { pop 1 } if /cy ED c div dup 0 eq { pop 1 } if /cx ED cy
+div cvi /y ED cx div cvi /x ED cy div cvi /y2 ED cx div cvi /x2 ED cy
+div cvi /y1 ED cx div cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse
+def /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2
+div add def /Helvetica findfont b scalefont setfont /b b .95 mul CLW 2
+div add def } if gsave n 0 gt { 1 setlinecap [ 0 cy n div ] 0 setdash }
+{ 2 setlinecap } ifelse /c x1 def /i 500 w mul x1 add def /e y cy mul
+def /f y1 cy mul def /g y2 cy mul def x1 cx mul 0 T { newpath 0 e moveto
+b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1} {z1 z2
+add neg} ifelse h 0 gt {b neg} {z1} ifelse rmoveto show grestore } if 0
+f moveto 0 g L stroke cx w mul 0 T c x2 eq c i eq or {exit} if /c c w
+add def } loop grestore gsave n 0 gt { 1 setlinecap [ 0 cx n div ] 0
+setdash } { 2 setlinecap } ifelse /c y1 def /i 500 h mul y1 add def /e x
+cx mul def /f x1 cx mul def /g x2 cx mul def 0 y1 cy mul T { newpath e 0
+moveto b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1 z2
+add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto show grestore }
+if f 0 moveto g 0 L stroke 0 cy h mul T c y2 eq c i eq or {exit} if /c c
+h add def } loop grestore } def
+/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0
+1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add
+exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+mul neg d } def
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /lmtrx [ tx@Dict /lmtrx known { lmtrx aload pop } if CM ] def
+CP 4 2 roll T moveto } def
+/PutEnd { CP /lmtrx [ lmtrx aload pop setmatrix ] def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { CP OLUnit T
+moveto /IfVisible true def } if } { IfVisible { CP OLUnit NET moveto
+/IfVisible false def } if } ifelse } def
+/InitOL { /OLUnit [ gsave CM STV 2890.79999 dup moveto setmatrix CP
+grestore ] cvx def /BOL { BeginOL } def /IfVisible true def } def
+end
+%%EndProcSet
+%%BeginProcSet: /u/ddas/tex/pstricks/ps/pst-node.pro
+% PostScript prologue for pst-node.tex.
+% Created 1993/3/12. Source file was pst-node.doc
+% Version 0.93a, 93/03/12.
+% For use with Rokicki's dvips.
+/tx@NodeDict 200 dict def tx@NodeDict begin
+/NewNode { gsave /next ED dict dup 3 -1 roll ED begin tx@Dict begin STV
+CP T exec end /NodeMtrx CM def next end grestore } def
+/InitPnode { /Y ED /X ED /NodePos { Nodesep Cos mul Nodesep Sin mul } def
+} def
+/InitCnode { /r ED /Y ED /X ED /NodePos { Nodesep r add dup Cos mul exch
+Sin mul } def } def
+/GetRnodePos { Cos 0 gt { /dx r Nodesep add def } { /dx l Nodesep sub def
+} ifelse Sin 0 gt { /dy u Nodesep add def } { /dy d Nodesep sub def }
+ifelse dx Sin mul abs dy Cos mul abs gt { dy Cos mul Sin div dy } { dx
+dup Sin mul Cos Div } ifelse } def
+/InitRnode { /r ED r mul neg /l ED /r r l add def /X l neg def { neg /d
+ED /u ED /Y 0 def } { neg /Y ED Y sub /u ED u mul neg /d ED /u u d add
+def /Y Y d sub def } ifelse /NodePos { GetRnodePos } def } def
+/InitRNode { /Y ED /X ED /r ED /X r 2 div X add def /r r X sub def /l X
+neg def Y add neg /d ED Y sub /u ED /NodePos { GetRnodePos } def } def
+/GetOnodePos { /ww w Nodesep add def /hh h Nodesep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+/GetAngle { nodeA GetCenter nodeB GetCenter 3 -1 roll sub 3 1 roll sub
+neg Atan } def
+/GetEdge { begin /Nodesep ED dup 1 0 NodeMtrx dtransform CM idtransform
+exch atan sub dup sin /Sin ED cos /Cos ED NodePos Y add exch X add exch
+NodeMtrx transform CM itransform end 4 2 roll 1 index 0 eq { pop pop } {
+2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse } def
+/GetPos { OffsetA AngleA NodesepA nodeA GetEdge /y1 ED /x1 ED OffsetB
+AngleB NodesepB nodeB GetEdge /y2 ED /x2 ED } def
+/InitNC { /nodeB ED /nodeA ED /NodesepB ED /NodesepA ED /OffsetB ED
+/OffsetA ED tx@NodeDict nodeA known tx@NodeDict nodeB known and dup {
+/nodeA nodeA load def /nodeB nodeB load def } if } def
+/LineMP { 4 copy 1 t sub mul exch t mul add 3 1 roll 1 t sub mul exch t
+mul add exch 6 2 roll sub 3 1 roll sub Atan } def
+/NCCoor { GetAngle /AngleA ED /AngleB AngleA 180 add def GetPos /LPutVar
+[ x2 x1 y2 y1 ] cvx def /LPutPos { LPutVar LineMP } def x1 y1 x2 y2 }
+def
+/NCLine { NCCoor tx@Dict begin ArrowB 4 2 roll ArrowA lineto end } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan } def
+/GetArms { /x1a armA AngleA cos mul x1 add def /y1a armA AngleA sin mul
+y1 add def /x2a armB AngleB cos mul x2 add def /y2a armB AngleB sin mul
+y2 add def } def
+/NCCurve { GetPos x1 x2 sub y1 y2 sub Pyth 2 div dup 3 -1 roll mul /armA
+ED mul /armB ED GetArms x1a y1a x1 y1 tx@Dict begin ArrowA end x2a y2a
+x2 y2 tx@Dict begin ArrowB end curveto /LPutVar [ x1 y1 x1a y1a x2a y2a
+x2 y2 ] cvx def /LPutPos { t LPutVar BezierMidpoint } def } def
+/AnglesMP { LPutVar t 3 gt { /t t 3 sub def } { t 2 gt { /t t 2 sub def
+10 -2 roll } { t 1 gt { /t t 1 sub def 10 -4 roll } { 10 4 roll } ifelse
+} ifelse } ifelse 6 { pop } repeat 3 -1 roll exch LineMP } def
+/NCAngles { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform pop x2a y2a mtrx transform exch pop mtrx itransform /y0 ED /x0
+ED mark armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1a y1a armA 0 ne { x1 y1 }
+if tx@Dict begin false Line end /LPutVar [ x2 y2 x2a y2a x0 y0 x1a y1a
+x1 y1 ] cvx def /LPutPos { AnglesMP } def } def
+/NCAngle { GetPos /x2a armB AngleB cos mul x2 add def /y2a armB AngleB
+sin mul y2 add def /mtrx AngleA matrix rotate def x2a y2a mtrx transform
+pop x1 y1 mtrx transform exch pop mtrx itransform /y0 ED /x0 ED mark
+armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1 y1 tx@Dict begin false Line end
+/LPutVar [ x2 y2 x2 y2 x2a y2a x0 y0 x1 y1 ] cvx def /LPutPos { AnglesMP
+} def } def
+/NCBar { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform pop x2a y2a mtrx transform pop sub dup 0 mtrx itransform 3 -1
+roll 0 gt { /y2a exch y2a add def /x2a exch x2a add def } { /y1a exch
+neg y1a add def /x2a exch neg x2a add def } ifelse mark x2 y2 x2a y2a
+x1a y1a x1 y1 tx@Dict begin false Line end /LPutVar [ x2 y2 x2 y2 x2a
+y2a x1a y1a x1 y1 ] cvx def /LPutPos { LPutVar AnglesMP } def } def
+/NCDiag { GetPos GetArms mark x2 y2 x2a y2a x1a y1a x1 y1 tx@Dict begin
+false Line end /LPutVar [ x2 y2 x2 y2 x2a y2a x1a y1a x1 y1 ] cvx def
+/LPutPos { AnglesMP } def } def
+/NCDiagg { OffsetA AngleA NodesepA nodeA GetEdge /y1 ED /x1 ED /x1a armA
+AngleA cos mul x1 add def /y1a armA AngleA sin mul y1 add def nodeB
+GetCenter y1a sub exch x1a sub Atan 180 add /AngleB ED OffsetB AngleB
+NodesepB nodeB GetEdge /y2 ED /x2 ED mark x2 y2 x1a y1a x1 y1 tx@Dict
+begin false Line end /LPutVar [ x2 y2 x2 y2 x2 y2 x1a y1a x1 y1] cvx def
+/LPutPos { AnglesMP } def } def
+/LoopMP { /t t abs def [ LPutVar ] length 2 div 1 sub dup t lt { /t ED }
+{ pop } ifelse mark LPutVar t cvi { /t t 1 sub def pop pop } repeat
+counttomark 1 add 4 roll cleartomark 3 -1 roll exch LineMP } def
+/NCLoop { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform loopsize add /y1b ED /x1b ED /x2b x2a y2a mtrx transform pop
+def x2b y1b mtrx itransform /y2b ED /x2b ED x1b y1b mtrx itransform /y1b
+ED /x1b ED mark armB 0 ne { x2 y2 } if x2a y2a x2b y2b x1b y1b x1a y1a
+armA 0 ne { x1 y1 } if tx@Dict begin false Line end /LPutVar [ x2 y2 x2a
+y2a x2b y2b x1b y1b x1a y1a x1 y1 ] cvx def /LPutPos { LoopMP } def }
+def
+/NCCircle { nodeA GetCenter 0 0 NodesepA nodeA GetEdge pop 3 1 roll /Y ED
+/X ED X sub 2 div dup 2 exp r r mul sub abs sqrt atan 2 mul /a ED r
+AngleA 90 add PtoC Y add exch X add exch 2 copy /LPutVar [ 4 2 roll r a
+] def /LPutPos { LPutVar aload pop t 360 mul add dup 5 1 roll 90 sub
+PtoC 3 -1 roll add 3 1 roll add exch 3 -1 roll } def r AngleA 90 sub a
+add AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c
+57.2957 r Div def /y ED /x ED } def
+/LPutCoor { tx@NodeDict /LPutPos known { gsave LPutPos tx@Dict begin
+/langle ED CM 3 1 roll STV CP 3 -1 roll sub neg 3 1 roll sub exch moveto
+setmatrix CP end grestore } { 0 0 tx@Dict /langle 0 def end } ifelse }
+def
+end
+%%EndProcSet
+%%BeginProcSet: texps.pro
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont load]cvx def}def
+/ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def
+/ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def
+end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale false def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin @defspecial
+
+ TeXDict begin /box{newpath 2 copy moveto 3 copy pop exch lineto 4
+copy pop pop lineto 4 copy exch pop exch pop lineto closepath } bind
+def /min{ 2 copy gt { exch } if pop } bind def/max{ 2 copy lt { exch
+} if pop } bind def/roundedbox{/radius exch store 3 2 roll 2 copy min
+radius sub /miny exch store max radius add /maxy exch store 2 copy
+min radius sub /minx exch store max radius add /maxx exch store newpath
+minx radius add miny moveto maxx miny maxx maxy radius arcto maxx maxy
+minx maxy radius arcto minx maxy minx miny radius arcto minx miny maxx
+miny radius arcto 16 {pop} repeat closepath }bind def /rectcartouche{box
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def /cartouche{roundedbox
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def end
+
+ TeXDict begin /box{newpath 2 copy moveto 3 copy pop exch lineto 4
+copy pop pop lineto 4 copy exch pop exch pop lineto closepath } bind
+def /min{ 2 copy gt { exch } if pop } bind def/max{ 2 copy lt { exch
+} if pop } bind def/roundedbox{/radius exch store 3 2 roll 2 copy min
+radius sub /miny exch store max radius add /maxy exch store 2 copy
+min radius sub /minx exch store max radius add /maxx exch store newpath
+minx radius add miny moveto maxx miny maxx maxy radius arcto maxx maxy
+minx maxy radius arcto minx maxy minx miny radius arcto minx miny maxx
+miny radius arcto 16 {pop} repeat closepath }bind def /rectcartouche{box
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def /cartouche{roundedbox
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def end
+
+@fedspecial end TeXDict begin
+40258431 52099146 1000 600 600
+(/v/ahhnold/v3/ddas/research/papers/ICDE-11/paper.dvi)
+@start /Fa 188[28 67[{}1 41.666668 /Times-Italic rf /Fb
+1 60 df<38FEFEFFFFFF3B0303030706060E0C1C3830706008147A8614>59
+D E /Fc 7 57 df<003FC00000FFF00003E07C0007C03E000F801F000F000F001E000780
+1E0007803E0007C03E0007C07C0003E07C0003E07C0003E07C0003E07C0003E0FC0003F0
+FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0
+FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C0003E07C0003E07C0003E0
+7E0007E03E0007C03E0007C03E0007C01F000F800F000F000F801F0007C03E0003F0FC00
+00FFF000003FC0001C2D7DAB23>48 D<000C00003C00007C0003FC00FFFC00FC7C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFF
+FE7FFFFE172C7AAB23>I<007F800001FFF0000780FC000E003F001C001F8038000FC070
+000FC0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F000
+0007F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E0000
+007C000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000
+F0003000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FF
+FFFFC0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C00
+1F803F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F800000
+1F8000003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC000000
+3F0000001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C00
+07F0FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E00
+3F000780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E
+0000003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E
+00000C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E
+0003003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E
+00FFFFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E
+0000003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I<0C0001800FC01F80
+0FFFFF000FFFFE000FFFFC000FFFF0000FFFC0000C7E00000C0000000C0000000C000000
+0C0000000C0000000C0000000C0000000C0000000C1FC0000C7FF8000DE07C000F801F00
+0F001F800E000F800C0007C0000007E0000007E0000003E0000003F0000003F0000003F0
+000003F0780003F0FC0003F0FC0003F0FC0003F0FC0003F0F80007E0E00007E0600007C0
+70000FC038000F801C001F000E003E000780F80001FFE000007F80001C2D7DAB23>I<00
+1FC00000FFF00003E07C0007801E000F000F001E0007801E0007803C0003C03C0003C03C
+0003C03C0003C03E0003C03E0007C03F0007801FC00F801FE00F001FF81E000FFC3C0007
+FFF80003FFE00000FFE000003FF80000FFFC0003C7FF000783FF801F00FFC01E003FC03C
+001FE07C0007E0780003F0F80003F0F00001F0F00000F0F00000F0F00000F0F00000F0F8
+0000E0780001E07C0001C03C0003C01E0007800F800F0007E03C0001FFF000003FC0001C
+2D7DAB23>56 D E /Fd 135[50 3[50 50 3[50 50 50 50 2[50
+2[50 50 1[50 50 50 97[{}13 83.333336 /Courier rf /Fe
+1 49 df<038007C007C007C00F800F800F800F001F001E001E003E003C003C0038007800
+780070007000E000E0000A157D9612>48 D E /Ff 6 104 df<FFFFFFFFFEFFFFFFFFFE
+FFFFFFFFFE27037A8F34>0 D<003800003800003800003800003800403804F0381EF810
+3E7E10FC0F11E003938000FE0000380000FE000393800F11E07E10FCF8103EF0381E4038
+0400380000380000380000380000380017197B9A22>3 D<000000003000000000000000
+380000000000000038000000000000003C000000000000001E000000000000000E000000
+000000000F00000000000000078000000000000003C000007FFFFFFFFFE00000FFFFFFFF
+FFF00000FFFFFFFFFFFC000000000000003E000000000000000F8000000000000007E000
+000000000001FC000000000000007F800000000000003F80000000000000FC0000000000
+0003F00000000000000F800000000000001F000000000000003C0000FFFFFFFFFFF80000
+FFFFFFFFFFF000007FFFFFFFFFE000000000000003C00000000000000780000000000000
+0F000000000000000E000000000000001E000000000000003C0000000000000038000000
+0000000038000000000000003000000039237C9F42>41 D<00F001F803F803F803F807F0
+07F007F007E007E00FC00FC00FC00F801F801F001F001F003E003E003C003C007C007800
+78007000F000F000E0000D1D7D9F13>48 D<00007E0003FE0007E0000F00001E00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C0000780000780000F00003E000FF8000FC0000
+FF800003E00000F000007800007800003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+001E00000F000007E00003FE00007E173B7BAB22>102 D<FC0000FF800007E00001F000
+007800003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00001E00001E00000F000007C0
+0001FE00007E0001FE0007C0000F00001E00001E00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C0000780001F00007E000FF8000FC0000173B7BAB22>I
+E /Fg 7 56 df<001C00007C0007FC00FFFC00FFFC00F8FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC007FFFF87FFFF87FFFF8151C7B9B1F>49 D<03FE000FFFC03FFFF0
+7E07F8F803FCFC01FCFC00FEFC00FEFC007E7800FE0000FE0000FE0001FC0001F80003F0
+0007E0000F80003E00007C0000F00E01E00E07801C0FFFFC1FFFFC7FFFFCFFFFFCFFFFF8
+FFFFF8171C7C9B1F>I<00FF800003FFE0000FFFF8001F01FC003E00FE003F007E003F00
+7E003F007E003F00FE000C00FC000001FC000003F00000FFC00000FFF0000001FC000000
+FE0000007F0000003F8000003F8030003F80FC003F80FC003F80FC003F80FC007F00F800
+FF007E01FE003FFFF8000FFFF00001FF8000191D7D9B1F>I<0003F0000003F0000007F0
+00000FF000001DF0000039F0000039F0000071F00000E1F00001C1F0000381F0000701F0
+000701F0000E01F0001C01F0003801F0007001F000F001F000FFFFFF80FFFFFF80FFFFFF
+800003F0000003F0000003F0000003F00000FFFF8000FFFF8000FFFF80191C7D9B1F>I<
+3800783FFFF83FFFF03FFFE03FFF803FFE003FF0003C00003C00003C00003CFF003FFFC0
+3F03F03E01F83C00FC38007C00007E00007E00007E78007EFC007EFC007EFC00FCF800FC
+7801F87E03F03FFFE00FFF8003FE00171D7C9B1F>I<001FE00000FFF80003FFFC0007F0
+3E000FC07E001F807E003F007E003E007E007E003C007E000000FC3F8000FCFFF000FDC0
+FC00FF807E00FF003F00FE001F00FE001F80FC001F80FC001F80FC001F807C001F807E00
+1F807E001F803E003F003F003F001F80FE000FFFF80003FFF000007F8000191D7D9B1F>
+I<380000003FFFFF803FFFFF807FFFFF807FFFFF007FFFFE007FFFFC007000F800E001F0
+00E003E0000007C000000F8000001F0000001F0000003E0000007E0000007C0000007C00
+0000FC000000FC000000F8000001F8000001F8000001F8000001F8000001F8000001F800
+0001F8000000F00000191D7C9B1F>I E /Fh 7 62 df<007C00000000600001FF000000
+00F00003C380000001F0000700C0000001E0000E0060000003E0001E007000000FC0001C
+003C00001F80003C003F00007F80003C001BE003FF00007C0018FFFF9E00007800181FFC
+3E000078000C00007C0000F8000C0000780000F8000C0000F80000F8000C0001F00000F8
+000C0001E00000F8000C0003E00000F8000C0007C00000F8000C0007800000F8000C000F
+800000F8000C001F00000078000C001E000000780018003E0000007C0018007C0000003C
+001800780000003C003000F80000001C003001F00000001E006001E00000000E006003E0
+0000000700C007C000000003C380078000000001FF000F80000000007C001F0000000000
+00001E0007C0000000003E001FF0000000007C003C38000000007800700C00000000F800
+F00600000001F001E00600000001E001E00300000003E003C00300000007C003C0018000
+00078007C0018000000F800780018000001F000780018000001E000F8000C000003E000F
+8000C000007C000F8000C0000078000F8000C00000F8000F8000C00001F0000F8000C000
+01E0000F8000C00003E0000F8000C00007C0000F8000C0000780000F8000C0000F800007
+800180001F000007800180001E000007C00180003E000003C00180007C000003C0030000
+78000001E0030000F8000001E0060001F0000000F0060001E0000000700C0003E0000000
+3C380003C00000001FF000018000000007C0003A437BBD45>37 D<0003F80000001FFF00
+00007E0FC00000F803E00003E000F80003C000780007C0007C000F80003E000F80003E00
+1F00001F001F00001F003F00001F803F00001F803F00001F807E00000FC07E00000FC07E
+00000FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00
+000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000
+0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000F
+C07E00000FC07E00000FC07E00000FC07F00001FC03F00001F803F00001F803F00001F80
+1F00001F001F00001F000F80003E000F80003E0007C0007C0003E000F80003E000F80000
+F803E000007E0FC000001FFF00000007FC000023387DB62A>48 D<000180000007800000
+0F8000003F800001FF8000FFFF8000FFDF8000FE1F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000003FC0007FFFFFE07FFFFFE07FFFFFE01B3779B62A
+>I<0007F80000003FFF000000FFFFC00001F00FE000038003F000070001F8000F0001FC
+000FC001FE001FE000FE001FE000FF001FE000FF001FE000FF000FE000FF000FC000FF00
+038000FF00000000FE00000000FE00000001FE00000001FC00000001F800000003F00000
+0003E000000007C00000000F800000007F0000001FFC0000001FFF800000000FE0000000
+03F000000001FC00000000FE00000000FF000000007F000000007F800000007FC0000000
+3FC00000003FC00000003FE00000003FE03E00003FE07F00003FE0FF80003FE0FF80003F
+E0FF80003FE0FF80003FC0FF00007FC07E00007F807C00007F80300000FF00380000FE00
+1C0001FC000F0003F80007F00FF00001FFFFC000007FFF8000000FFC000023387DB62A>
+51 D<0600000C000780003C0007F003F80007FFFFF00007FFFFE00007FFFFC00007FFFF
+800007FFFF000007FFFC0000067FE0000006000000000600000000060000000006000000
+000600000000060000000006000000000600000000060000000006000000000600000000
+0607F80000063FFF000006F80F800007C003C000070001F000060000F800040000F80000
+00007C000000007E000000007E000000003F000000003F000000003F000000003F800000
+003F800000003F803C00003F807E00003F80FF00003F80FF00003F80FF00003F80FF0000
+3F00FE00003F00FC00007F006000007E006000007E00300000FC00380000F800180001F8
+000E0003F000070007E00003E03F800001FFFF0000007FFC0000001FE0000021387CB62A
+>53 D<1C003E007F00FF80FF80FF807F003E001C00000000000000000000000000000000
+0000000000000000000000000000000000000000001C003E007F00FF80FF80FF807F003E
+001C00092479A317>58 D<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFF
+FFFFFC000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFC
+FFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFFFFFFF836167B9F41>61
+D E /Fi 3 106 df<001FF00000FFFF0003E03FC00F801FE01F000FF01F800FF83FC007
+F83FE007F83FE007F83FE007F83FE00FF83FE00FF01FC00FF007001FE000003FE000007F
+800000FF00007FFC00007FF800007FFF0000003FC000000FF0000007F8000007FC0C0007
+FC3F0003FE7F8003FEFFC003FEFFC003FEFFC003FEFFC003FEFFC003FC7F8007FC7F0007
+F83F000FF01FC03FE007FFFFC001FFFF00003FF0001F277DA526>51
+D<FFFFFFFF000000FFFFFFFFF00000FFFFFFFFFC000003FE0007FF000003FE00007FC000
+03FE00003FE00003FE00000FF00003FE000007F80003FE000003F80003FE000003FC0003
+FE000001FE0003FE000001FE0003FE000000FF0003FE000000FF0003FE000000FF0003FE
+000000FF0003FE000000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE00
+0000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE0000
+00FF0003FE000000FF0003FE000000FF0003FE000001FE0003FE000001FE0003FE000003
+FC0003FE000003FC0003FE000007F80003FE00000FF00003FE00001FE00003FE00007FC0
+0003FE0003FF0000FFFFFFFFFE0000FFFFFFFFF00000FFFFFFFF00000031287DA739>68
+D<0F801FC03FE03FE03FE03FE03FE01FC00F80000000000000000000000000FFE0FFE0FF
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE0FFFCFFFCFFFC0E297CA816>105 D E /Fj 1 69 df<FFFFFFFFFF800000FF
+FFFFFFFFF80000FFFFFFFFFFFF0000FFFFFFFFFFFFC000007FF80007FFF000007FF80000
+7FF800007FF800001FFE00007FF800000FFF00007FF8000003FF80007FF8000001FFC000
+7FF8000001FFC0007FF8000000FFE0007FF80000007FF0007FF80000007FF0007FF80000
+003FF8007FF80000003FF8007FF80000003FFC007FF80000001FFC007FF80000001FFC00
+7FF80000001FFE007FF80000001FFE007FF80000001FFE007FF80000001FFE007FF80000
+001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF00
+7FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000
+001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFE007FF80000001FFE00
+7FF80000001FFE007FF80000001FFE007FF80000001FFC007FF80000003FFC007FF80000
+003FFC007FF80000003FF8007FF80000007FF8007FF80000007FF0007FF8000000FFE000
+7FF8000000FFE0007FF8000001FFC0007FF8000003FF80007FF8000007FF00007FF80000
+1FFE00007FF800007FFC00007FF80007FFF000FFFFFFFFFFFFC000FFFFFFFFFFFF0000FF
+FFFFFFFFFC0000FFFFFFFFFF80000040397DB849>68 D E /Fk 3
+106 df<00000000003C00000000000000003C00000000000000003E0000000000000000
+1E00000000000000001F00000000000000000F8000000000000000078000000000000000
+07C00000000000000003E00000000000000001F00000000000000000F800000000000000
+00FC00007FFFFFFFFFFFFE0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF8000FFFFFFFFFF
+FFFFC00000000000000003E00000000000000001F80000000000000000FE000000000000
+00003F00000000000000001FE00000000000000007F80000000000000001FF0000000000
+000001FF0000000000000007F8000000000000001FE0000000000000003F000000000000
+0000FE0000000000000001F80000000000000003E000FFFFFFFFFFFFFFC000FFFFFFFFFF
+FFFF8000FFFFFFFFFFFFFF00007FFFFFFFFFFFFE0000000000000000FC00000000000000
+00F80000000000000001F00000000000000003E00000000000000007C000000000000000
+0780000000000000000F80000000000000001F00000000000000001E0000000000000000
+3E00000000000000003C00000000000000003C000000482E7BAB53>41
+D<0000C00001E00003E00003E00003C00007C00007C0000780000F80000F80001F00001F
+00001E00003E00003E00007C00007C0000780000F80000F80001F00001F00001E00003E0
+0003E00003C00007C00007C0000F80000F80000F00001F00001F00003E00003E00003C00
+007C00007C0000780000F80000F80000F80000F800007800007C00007C00003C00003E00
+003E00001F00001F00000F00000F80000F800007C00007C00003C00003E00003E00001E0
+0001F00001F00000F80000F800007800007C00007C00003E00003E00001E00001F00001F
+00000F80000F800007800007C00007C00003C00003E00003E00001E00000C0135278BD20
+>104 D<600000F00000F80000F800007800007C00007C00003C00003E00003E00001F00
+001F00000F00000F80000F800007C00007C00003C00003E00003E00001F00001F00000F0
+0000F80000F800007800007C00007C00003E00003E00001E00001F00001F00000F80000F
+800007800007C00007C00003C00003E00003E00003E00003E00003C00007C00007C00007
+80000F80000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F8
+0000F00001F00001F00003E00003E00003C00007C00007C0000F80000F80000F00001F00
+001F00003E00003E00003C00007C00007C0000780000F80000F80000F000006000001352
+7CBD20>I E /Fl 3 111 df<70F8F8F87005057A8413>58 D<03FFFFC00003FFFFF80000
+3C007E00003C001F00003C000F80003C000F800078000F800078000F800078000F800078
+001F0000F0003E0000F000780000F003E00000FFFE000001E007000001E003C00001E001
+C00001E001E00003C001E00003C001E00003C001E00003C001E000078003E000078003E0
+60078003E060078003E0C0FFF801F0C0FFF800F1800000003E00231D7B9B2B>82
+D<0F03F00033861C0021D81E0061F01E00C3E01E00C3C01E0003C01E0003C01E0007803C
+0007803C0007803C00078078200F0078600F00F0600F00F0C00F00F0C01E0071800C003E
+001B127D9125>110 D E /Fm 139[12 16 14 1[21 21 21 1[12
+2[12 1[21 1[18 21 18 1[18 12[25 23 28 2[30 30 37 25 1[16
+14 2[23 25 1[28 1[30 20[10 2[14 14 40[{}29 41.666668
+/Times-Roman rf /Fn 3 52 df<00600001E0000FE000FFE000F1E00001E00001E00001
+E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001
+E00001E00001E00001E00001E00001E00001E0007FFF807FFF80111C7B9B1C>49
+D<03FC000FFF801C0FC03003E06001F0E000F0E000F8F00078F000786000780000F80000
+F00001F00001E00003C0000700000E00001C0000300000E0000180180300180600180800
+383FFFF07FFFF0FFFFF0FFFFF0151C7D9B1C>I<03FC000FFF001C07C03001E07001F078
+01F07800F03001F00001F00001E00003C0000780001E0003FC000007800003C00001E000
+00F00000F80000F86000F8F000F8F000F8E000F06001F07003E03C07C00FFF0003FC0015
+1D7D9B1C>I E /Fo 81[32 51[26 29 29 1[29 29 16 23 19 1[29
+29 29 45 16 1[16 16 29 29 19 26 29 26 29 26 7[42 2[42
+42 36 32 39 42 32 42 42 52 2[23 19 1[42 32 36 42 39 1[42
+1[26 5[29 29 29 29 29 29 29 29 29 3[19 15 2[19 19 40[{}57
+58.333336 /Times-Roman rf /Fp 134[29 29 2[32 19 23 26
+1[32 29 32 48 16 2[16 32 29 1[26 32 26 1[29 14[42 45
+36 45 5[23 3[39 42 2[42 1[29 63[{}27 58.333336 /Times-Bold
+rf /Fq 138[33 18 26 26 1[33 1[33 48 3[18 1[33 1[29 3[33
+97[{}11 66.666664 /Times-Italic rf /Fr 7 56 df<00E00001E00007E000FFE000
+F9E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00003F000FFFFC0FFFFC012217AA01E>49 D<01FC0007FF801C0FC03003E060
+01F06000F8F800F8FC00FCFC00FCFC007C78007C3000FC0000FC0000F80000F80001F000
+03E00003C0000780000F00001E0000380000700000E00001C00C03800C0600180C001818
+00183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00FF0003FFC00F03E01C00F01C00F8
+3E00FC3E007C3E007C1E00FC0C00FC0000F80000F80001F00003E0000FC001FF0001FF00
+0003E00000F000007800007C00003E00003F30003F78003FFC003FFC003FFC003EF8007E
+60007C3800F81E03F00FFFC001FF0018227DA01E>I<0000E00001E00001E00003E00007
+E00007E0000DE0001DE00039E00031E00061E000E1E000C1E00181E00381E00701E00601
+E00C01E01C01E01801E03001E07001E0E001E0FFFFFFFFFFFF0001E00001E00001E00001
+E00001E00001E00003F0003FFF003FFF18227DA11E>I<1000301E01F01FFFE01FFFC01F
+FF801FFE001BF00018000018000018000018000018000018FE001BFF801F03C01C01E018
+00F01800F800007800007800007C00007C30007C78007CF8007CF8007CF80078F000F860
+00F07001E03801E01E078007FF0001F80016227CA01E>I<000FC0007FF001F03803C018
+07803C0F007C1E007C1C00383C00003C00007C0000780000787FC0F8FFE0F980F0FA0038
+FE003CFC001EFC001EF8001FF8001FF8001FF8001F78001F78001F78001F3C001E3C001E
+1C003C1E00380F00700781E001FFC0007F0018227DA01E>I<3000003C00003FFFFF3FFF
+FF7FFFFE7FFFFC60001C600038600070C000E0C000C00001C0000380000700000600000E
+00001C00001C0000380000380000780000780000780000F00000F00000F00000F00001F0
+0001F00001F00001F00001F00001F00001F00000E00018237CA11E>I
+E /Fs 1 4 df<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFCF0
+00000000003CF000000000003CF000000000003CF000000000003CF000000000003CF000
+000000003CF000000000003CF000000000003CF000000000003CF000000000003CF00000
+0000003CF000000000003CF000000000003CF000000000003CF000000000003CF0000000
+00003CF000000000003CF000000000003CF000000000003CF000000000003CF000000000
+003CF000000000003CF000000000003CF000000000003CF000000000003CF00000000000
+3CF000000000003CF000000000003CF000000000003CF000000000003CF000000000003C
+F000000000003CF000000000003CF000000000003CF000000000003CF000000000003CF0
+00000000003CF000000000003CF000000000003CF000000000003CF000000000003CF000
+000000003CF000000000003CF000000000003CF000000000003CF000000000003CF00000
+0000003CF000000000003CFFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFF
+FFFFF836387BB741>3 D E /Ft 18 112 df<387CFEFEFEFEFEFE7C7C7C7C7C7C7C7C7C
+7C3838383838383838383810000000000038FEFEFEFEFE3807297BA813>33
+D<0006000C00180030006000E001C00380038007000F000E001E001E001C003C003C003C
+0078007800780078007800F800F000F000F000F000F000F000F000F000F000F000F000F8
+00780078007800780078003C003C003C001C001E001E000E000F0007000380038001C000
+E0006000300018000C00060F3B7AAB1A>40 D<C0006000300018000C000E000700038003
+8001C001E000E000F000F00070007800780078003C003C003C003C003C003E001E001E00
+1E001E001E001E001E001E001E001E001E003E003C003C003C003C003C00780078007800
+7000F000F000E001E001C00380038007000E000C00180030006000C0000F3B7DAB1A>I<
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E000000FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E0000002B2B7DA333>43 D<00380000780001F8001FF800FEF800E0F80000F80000
+F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
+F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
+F80000F80000F80000F80001FC00FFFFF8FFFFF815267BA521>49
+D<00FF000003FFE0000E03F0001800F80030007C0060003E0078001F00FC001F00FE001F
+80FE001F80FE000F80FE000F807C000F8000001F8000001F0000001F0000003F0000003E
+0000007C00000078000000F0000001E0000003C00000078000000F0000001C0000003800
+000070018000E0018001C0018003800300060003000C0003001FFFFF003FFFFF007FFFFE
+00FFFFFE00FFFFFE0019267DA521>I<00FF000003FFE0000F01F8001C007C0030003E00
+3C003E007E003F007E001F007E001F007E003F003C003F0000003E0000003E0000007C00
+0000F8000001F0000007E00001FF800001FF00000001E0000000F00000007C0000003E00
+00003F0000001F0000001F8000001F8038001F807C001F80FE001F80FE001F80FE001F00
+FC003F0078003E0070007C003800F8001F01F00007FFC00000FF000019277DA521>I<00
+00380000003800000078000000F8000001F8000001F8000003F8000007F8000006F80000
+0CF800001CF8000018F8000030F8000070F8000060F80000C0F80001C0F8000180F80003
+00F8000700F8000E00F8000C00F8001C00F8003800F8003000F8006000F800E000F800FF
+FFFFE0FFFFFFE00000F8000000F8000000F8000000F8000000F8000000F8000000F80000
+01FC00003FFFE0003FFFE01B277EA621>I<18000C001F007C001FFFF8001FFFF0001FFF
+E0001FFF800019FC00001800000018000000180000001800000018000000180000001800
+0000187F000019FFE0001F81F0001E0078001C003C0018003E0000003E0000001F000000
+1F0000001F8000001F8030001F807C001F80FC001F80FC001F80FC001F80FC001F00F000
+1F0060003E0070003E0030007C001C00F8000F03E00003FFC00000FE000019277DA521>
+I<000FE000003FF80000F81C0001E0060003801F0007003F000F003F001E003F001E003F
+003C001E003C0000007C0000007800000078040000783FC000F8FFF000F9807800FB003C
+00FA001E00FC001E00FC000F00FC000F00F8000F80F8000F80F8000F80F8000F8078000F
+8078000F8078000F8078000F803C000F003C000F001C001E001E001E000E003C00070078
+0003C0F00001FFC000007F000019277DA521>I<300000003C0000003FFFFFE03FFFFFE0
+3FFFFFC07FFFFF807FFFFF807000070060000E0060000C00C0001C00C0003800C0007000
+0000E0000000C0000001C000000380000003800000070000000F0000000E0000001E0000
+001E0000001E0000003E0000003C0000003C0000007C0000007C0000007C0000007C0000
+00FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000780000
+1B287DA621>I<387CFEFEFE7C380000000000000000000000387CFEFEFE7C3807197B98
+13>58 D<387CFEFEFE7C380000000000000000000000387CFCFEFE7E3E0606060C0C0C18
+1830702007247B9813>I<7FFFFFFFFFC0FFFFFFFFFFE0FFFFFFFFFFE000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000FFFFFFFFFFE0FFFFFFFFFFE07F
+FFFFFFFFC02B117D9633>61 D<01FF000FFFE01E01F038007860007CF8003EFC003EFC00
+3EFC003E78003E30007C00007C0000F80001F00003C0000780000F00000E00001C000018
+000038000030000030000030000030000030000030000030000020000000000000000000
+0000000000000000700001FC0001FC0001FC0001FC0001FC0000700017297DA81F>63
+D<007E03E001FF8FF00781F8F00F00F0F01E0078001C0038003C003C003C003C003C003C
+003C003C003C003C003C003C001C0038001E0078000F00F0000781E00009FF8000087E00
+0018000000180000001C0000001E0000000FFFF0000FFFFC0007FFFF000FFFFF801C001F
+C0380007C0780003E0F00001E0F00001E0F00001E0F00001E0780003C07C0007C03E000F
+800FC07E0003FFF800007FC0001C277E9921>103 D<0F80FF80FF801F800F800F800F80
+0F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F80
+0F800F800F800F800F800F800F800F800F800F800F800F801FC0FFF8FFF80D287EA713>
+108 D<003F800000FFE00003E0F80007803C000F001E001E000F003C0007803C00078078
+0003C0780003C0780003C0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F8
+0003E0780003C0780003C07C0007C03C0007801E000F001F001F000F803E0003E0F80001
+FFF000003F80001B1C7E9A21>111 D E /Fu 11 121 df<387CFEFEFE7C3807077A8614>
+58 D<387CFEFFFF7F3B0303030606060C1838702008127A8614>I<E000000000F8000000
+00FE000000003F800000000FE000000003F800000000FE000000003F800000000FE00000
+0003F800000000FE000000003F800000000FE000000003F800000000FE000000003F8000
+00000FE000000003F800000000FE000000003E00000000FE00000003F80000000FE00000
+003F80000000FE00000003F80000000FE00000003F80000000FE00000003F80000000FE0
+0000003F80000000FE00000003F80000000FE00000003F80000000FE00000000F8000000
+00E00000000027277AA134>62 D<00000001800000000003800000000007800000000007
+C0000000000FC0000000001FC0000000001FC00000000037C00000000037C00000000067
+C000000000C7C000000000C7E00000000183E00000000383E00000000303E00000000603
+E00000000E03E00000000C03E00000001803F00000001801F00000003001F00000006001
+F00000006001F0000000C001F0000001C001F00000018001F0000003FFFFF8000003FFFF
+F80000060000F800000C0000F800000C0000F80000180000F80000380000F80000300000
+FC00006000007C0000E000007C0000C000007C0001C000007C0003C000007C000FC00000
+FE00FFF8000FFFE0FFF8000FFFE02B2A7DA932>65 D<003FFFFFFFF8003FFFFFFFF80001
+F80003F80001F00000F80001F00000780003F00000300003F00000300003E00000300003
+E00000300007E00000300007E00000300007C00180300007C0018030000FC0038000000F
+C0030000000F80030000000F80070000001F801F0000001FFFFE0000001FFFFE0000001F
+001E0000003F000E0000003F000C0000003E000C0000003E000C0000007E001C01C0007E
+00180180007C00000180007C0000038000FC0000070000FC0000070000F800000E0000F8
+00000E0001F800001C0001F800003C0001F00000780001F00001F80003F0000FF000FFFF
+FFFFF000FFFFFFFFE0002D287CA731>69 D<003FFFFFFFE0003FFFFFFFE00001F80007E0
+0001F00003E00001F00001E00003F00000C00003F00000C00003E00000C00003E00000C0
+0007E00000C00007E00000C00007C00000C00007C00300C0000FC0070000000FC0060000
+000F80060000000F800E0000001F800E0000001F803C0000001FFFFC0000001FFFFC0000
+003F003C0000003F00180000003E00180000003E00180000007E00380000007E00300000
+007C00300000007C0000000000FC0000000000FC0000000000F80000000000F800000000
+01F80000000001F80000000001F00000000001F00000000003F000000000FFFFE0000000
+FFFFE00000002B287CA72A>I<000001FF000000001FFFE00000007E01F8000001F0007E
+000007C0001F00000F80000F80001E000007C0007C000007C000F8000003E001F0000003
+E001F0000001F003E0000001F007C0000001F00FC0000001F00F80000001F81F80000001
+F81F00000001F83F00000001F83F00000001F07E00000003F07E00000003F07E00000003
+F07E00000003F07E00000007E0FC00000007E0FC0000000FC0FC0000000FC0FC0000001F
+80FC0000001F807C0000003F007E0000003E007E0000007E003E000000FC003E000001F8
+001F000003F0001F800007C0000F80000F800007C0003F000003F000FC000000FC03F000
+00003FFFC000000007FC0000002D2A7DA832>79 D<003FFFFFC000003FFFFFF8000001F8
+00FE000001F0001F000001F0000F800003F0000FC00003F00007C00003E00007C00003E0
+0007E00007E00007E00007E0000FC00007C0000FC00007C0000FC0000FC0001F80000FC0
+001F00000F80003E00000F80007C00001F8001F000001F800FE000001FFFFF0000001FFF
+FE0000003F001F0000003F0007C000003E0007C000003E0003E000007E0003E000007E00
+03E000007C0003E000007C0003E00000FC0007E00000FC0007E00000F80007E00000F800
+07E00001F80007E01001F80007E03001F00007E03001F00007E07003F00007E0E0FFFF80
+03F1C0FFFF8001FF80000000007E002C297CA732>82 D<00001FE0080000FFFC180003E0
+1E380007000770000E0003F000180001F000300000F000700000E000E00000E000E00000
+E000E00000E001E00000C001E00000C001E000000001F000000000F800000000FE000000
+007FE00000007FFE0000003FFFE000000FFFF0000001FFF80000001FFC00000001FE0000
+00003E000000001F000000000F000000000F000000000F00180000070018000007003800
+000E003000000E003800000C003800001C0078000038007C000070007E0000E000770003
+C000E3E00F0000C0FFFE0000801FF00000252A7CA829>I<000E00001F00001F00001E00
+000C0000000000000000000000000000000000000000000000000003E00007F0000C7800
+183800303800303800607800607800C07800C0F00000F00001E00001E00001E00003C000
+03C0000780000781800781800F01800F03000F03000F06000F0C000F1C0007F00001E000
+11287DA617>105 D<00F807C001FE1FF0070738380E07B0381C03E0781803C0F83003C0
+F83003C07060078000600780000007800000078000000F0000000F0000000F0000000F00
+00001E0000001E0030001E0030301E0060783E0060F83E00C0F87E00C0F06E038061CF07
+007F83FC001E01F8001D1B7D9926>120 D E /Fv 11 121 df<1C007F00FF80FF80FF80
+FF80FF807F001C000909798817>58 D<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C0
+00C000C000C001C00180018003800300070006000E001C003800700060000A19798817>
+I<00000000006000000000000070000000000000F0000000000001F0000000000001F000
+0000000003F0000000000003F0000000000007F000000000000FF000000000000FF00000
+0000001FF800000000001FF8000000000033F8000000000073F8000000000063F8000000
+0000C3F80000000000C3F8000000000183F8000000000183F8000000000303F800000000
+0603F8000000000603FC000000000C03FC000000000C01FC000000001801FC0000000030
+01FC000000003001FC000000006001FC000000006001FC00000000C001FC00000001C001
+FC000000018001FC000000030001FE000000030001FE000000060000FE0000000E0000FE
+0000000C0000FE000000180000FE0000001FFFFFFE0000003FFFFFFE0000003FFFFFFE00
+0000600000FE000000C00000FE000000C00000FF000001800000FF0000018000007F0000
+030000007F0000060000007F0000060000007F00000C0000007F00000C0000007F000018
+0000007F0000380000007F0000700000007F0000F00000007F8001F80000007F8007F800
+0000FF80FFFF80003FFFFFFFFF80007FFFFFFFFF80007FFFFF383C7DBB3E>65
+D<0003FFFFFFFFFFF00007FFFFFFFFFFF00007FFFFFFFFFFF0000007F800003FF0000007
+F0000007F0000007F0000003E000000FF0000001E000000FF0000000E000000FE0000000
+E000000FE0000000E000001FE0000000E000001FE0000000E000001FC0000000E000001F
+C0000000C000003FC0000000C000003FC0000000C000003F80003000C000003F80003000
+C000007F80007000C000007F800070000000007F000060000000007F0000E000000000FF
+0000E000000000FF0001E000000000FE0003C000000000FE000FC000000001FFFFFFC000
+000001FFFFFFC000000001FFFFFF8000000001FC000F8000000003FC00078000000003FC
+00078000000003F800030000000003F800030000000007F800070000000007F800070003
+000007F000060003000007F00006000700000FF00006000600000FF00000000600000FE0
+0000000E00000FE00000000C00001FE00000001C00001FE00000001800001FC000000038
+00001FC00000003800003FC00000007000003FC0000000F000003F80000001E000003F80
+000001E000007F80000007E000007F8000000FC000007F0000003FC00000FF000003FF80
+00FFFFFFFFFFFF8000FFFFFFFFFFFF8000FFFFFFFFFFFF00003C397DB83D>69
+D<0003FFFFFFFFFFE00007FFFFFFFFFFE00007FFFFFFFFFFE0000007F800003FE0000007
+F000000FE0000007F0000003C000000FF0000003C000000FF0000001C000000FE0000001
+C000000FE0000001C000001FE0000001C000001FE0000001C000001FC0000001C000001F
+C00000018000003FC00000018000003FC00000018000003F800000018000003F80006001
+8000007F8000E0018000007F8000E0000000007F0000C0000000007F0000C000000000FF
+0001C000000000FF0001C000000000FE00038000000000FE00078000000001FE001F8000
+000001FFFFFF8000000001FFFFFF0000000001FFFFFF0000000003FC001F0000000003FC
+000F0000000003F8000E0000000003F8000E0000000007F8000E0000000007F8000E0000
+000007F0000C0000000007F0000C000000000FF0001C000000000FF0001C000000000FE0
+0000000000000FE00000000000001FE00000000000001FE00000000000001FC000000000
+00001FC00000000000003FC00000000000003FC00000000000003F800000000000003F80
+0000000000007F800000000000007F800000000000007F00000000000000FF8000000000
+00FFFFFFC000000000FFFFFFC000000000FFFFFFC0000000003B397DB835>I<0003FFF8
+00001FFFF80007FFFC00003FFFF80007FFFC00003FFFF8000007FC000001FF00000007FE
+0000007C00000006FE000000780000000EFF000000700000000E7F000000700000000C7F
+800000600000000C7F800000600000001C3F800000E00000001C3FC00000C0000000181F
+C00000C0000000181FE00000C0000000381FE00001C0000000380FF0000180000000300F
+F00001800000003007F00001800000007007F80003800000007003F80003000000006003
+FC0003000000006003FC000300000000E001FC000700000000E001FE000600000000C000
+FE000600000000C000FF000600000001C0007F000E00000001C0007F800C000000018000
+7F800C0000000180003F800C0000000380003FC01C0000000380001FC018000000030000
+1FE0180000000300000FE0180000000700000FF0380000000700000FF030000000060000
+07F03000000006000007F8300000000E000003F8700000000E000003FC600000000C0000
+03FC600000000C000001FE600000001C000001FEE00000001C000000FEC0000000180000
+00FFC0000000180000007FC0000000380000007FC0000000380000007F80000000300000
+003F80000000300000003F80000000700000001F80000000700000001F00000000F00000
+000F00000007FC0000000F000000FFFFE000000F000000FFFFE0000006000000FFFFE000
+000600000045397DB843>78 D<00000001FF00000000001FFFF000000000FE01FC000000
+03F0007E00000007C0001F8000001F80000FC000003E000007E00000FC000003F00001F8
+000003F00003F0000001F80007E0000001F8000FC0000000FC001F80000000FC003F0000
+0000FE007F000000007E00FE000000007E00FC000000007F01FC000000007F03F8000000
+007F03F8000000007F07F0000000007F07F0000000007F0FF0000000007F0FE000000000
+7F1FE000000000FF1FE000000000FF3FC000000000FF3FC000000000FF3FC000000000FF
+7F8000000001FE7F8000000001FE7F8000000001FE7F8000000001FEFF8000000003FCFF
+0000000003FCFF0000000003FCFF0000000007F8FF0000000007F8FF000000000FF0FF00
+0000000FF0FF000000000FE0FF000000001FE0FF000000001FC0FF000000003F807F0000
+00007F807F000000007F007F00000000FE007F00000001FC003F80000001F8003F800000
+03F8001F80000007F0001FC000000FE0000FC000001F800007E000003F000007F000007E
+000003F00001F8000001FC0003F00000007E000FC00000003F807F0000000007FFF80000
+000000FF80000000383D7CBA3F>I<0003FFFFFFF800000007FFFFFFFF80000007FFFFFF
+FFE000000007F8001FF800000007F00003FC00000007F00000FE0000000FF000007F0000
+000FF000007F0000000FE000003F8000000FE000003F8000001FE000003FC000001FE000
+003FC000001FC000003FC000001FC000003FC000003FC000003FC000003FC000007F8000
+003F8000007F8000003F8000007F8000007F800000FF0000007F800000FE0000007F0000
+01FC0000007F000003F8000000FF000007F0000000FF00000FE0000000FE00001F800000
+00FE00007F00000001FE0007F800000001FFFFFFE000000001FFFFFF0000000001FC000F
+C000000003FC0003F000000003FC0001F800000003F80000FC00000003F80000FE000000
+07F80000FE00000007F800007E00000007F000007E00000007F000007F0000000FF00000
+FF0000000FF00000FE0000000FE00000FE0000000FE00000FE0000001FE00001FE000000
+1FE00001FE0000001FC00001FE0000001FC00001FE0000003FC00001FE0000003FC00003
+FE0000003F800003FC0060003F800003FC0060007F800003FC00E0007F800003FC00C000
+7F000003FC01C000FF800001FC0180FFFFFF0001FC0380FFFFFF0000FE0700FFFFFF0000
+7E0E0000000000001FFC00000000000007F0003B3B7DB83F>82 D<0000001FE003800000
+00FFFC0300000003FFFE070000000FE01F8F0000003F0007DF0000007E0001FE000000F8
+0000FE000001F00000FE000003E000007E000003E000007C000007C000003C00000F8000
+003C00000F8000003C00001F8000003800001F0000003800001F0000003800001F000000
+3800003F0000003000003F0000003000003F8000003000003F8000000000003FC0000000
+00003FE000000000001FF000000000001FFE00000000001FFFE0000000000FFFFE000000
+0007FFFFC000000003FFFFF000000001FFFFF800000000FFFFFC000000001FFFFE000000
+0003FFFF00000000003FFF000000000003FF800000000000FF8000000000007F80000000
+00003F8000000000001F8000000000001F8000000000001F80000C0000001F80000C0000
+000F80000C0000000F80001C0000001F80001C0000001F00001C0000001F00001C000000
+1F00003C0000003E00003C0000003E00003C0000007C00003E000000F800007E000000F8
+00007F000001F000007F800003E000007FC0000FC00000F9F0001F800000F0FE00FE0000
+00E03FFFF8000000E00FFFE0000000C001FF00000000313D7CBA33>I<0000E00001F800
+03F80003F80003F80003F00001C000000000000000000000000000000000000000000000
+000000000000000000000000000000F80003FE00070F000E0F801C0F80180F80380F8030
+0F80701F80601F80603F80E03F00C03F00C07F00007E00007E0000FE0000FC0001FC0001
+FC0001F80003F80003F00003F00007F01807E01807E0380FE0300FC0300FC0700F80600F
+80E00F80C00F81C00F838007870003FE0000F80015397EB71D>105
+D<0007E001F000001FF807FE0000783E0E0F0000E01F1C0F0001C01F383F8003800FF03F
+8003000FE03F8007000FE03F000E000FC03F000C000FC01C000C001FC000001C001F8000
+0018001F80000018001F80000000003F80000000003F80000000003F00000000003F0000
+0000007F00000000007F00000000007E00000000007E0000000000FE0000000000FE0000
+000000FC000C000000FC000C000001FC001C000001FC0018001C01F80018007E01F80038
+007E03F8007000FE03F8006000FE07F800E000FE0E7C01C000781C7C03800078383E0F00
+003FF00FFC000007C003F0000029267EA42F>120 D E /Fw 139[28
+32 37 1[46 42 46 69 23 2[23 46 42 1[37 46 37 46 42 12[55
+46 2[51 65 8[51 1[60 2[60 18[21 46[{}24 83.333336 /Times-Bold
+rf /Fx 133[44 50 50 1[50 55 33 39 44 55 55 50 55 83 28
+2[28 55 50 33 44 55 44 1[50 12[66 3[61 78 72 4[39 4[72
+1[66 12[50 50 50 50 50 2[25 46[{}35 100.000000 /Times-Bold
+rf /Fy 135[40 2[40 40 40 2[40 2[40 3[40 2[40 40 40 40
+1[40 50[40 46[{}13 66.666664 /Courier rf /Fz 69[29 8[33
+1[37 37 3[29 47[29 33 33 48 33 33 18 26 22 33 33 33 33
+52 18 33 1[18 33 33 22 29 33 29 33 29 8[48 63 48 48 41
+37 44 48 37 48 48 59 41 1[26 22 1[48 37 41 48 44 1[48
+5[18 1[33 33 33 33 33 33 33 33 33 33 1[17 22 17 2[22
+22 40[{}67 66.666664 /Times-Roman rf /FA 2 122 df<0060000070000060000060
+00406020E06070F861F07C63E00F6F0003FC0000600003FC000F6F007C63E0F861F0E060
+7040602000600000600000700000600014157B9620>3 D<00600000F00000F00000F000
+00F00000F00000F0000060000060000060000060000060000060007861E0FFFFF0FFFFF0
+7861E000600000600000600000600000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+006000006000006000006000006000006000006000142F7CA31E>121
+D E /FB 81[66 53[60 86 1[66 40 47 53 1[66 60 66 100 33
+66 1[33 66 60 40 53 66 53 66 60 10[86 1[80 1[86 1[73
+6[47 3[80 1[86 1[86 6[40 3[60 60 60 60 60 60 3[40 45[{}38
+119.999947 /Times-Bold rf /FC 78[50 55[50 50 1[50 50
+28 39 33 1[50 50 50 78 3[28 50 1[33 44 50 44 50 44 11[72
+61 55 14[72 66 66 72 92 7[50 50 4[50 50 2[25 1[25 44[{}34
+100.000000 /Times-Roman rf /FD 4 122 df<00007000000000F800000000F8000000
+00F800000000F800000000F800000000F800000000F800000000F8000000007000007800
+7000F07C007001F0FF007007F87F80700FF03FE0703FE00FF0707F8003F870FE0000FE73
+F800003F77E000000FFF80000003FE00000000F800000003FE0000000FFF8000003F77E0
+0000FE73F80003F870FE000FF0707F803FE0703FE07F80700FF0FF007007F87C007001F0
+78007000F000007000000000F800000000F800000000F800000000F800000000F8000000
+00F800000000F800000000F800000000700000252B7AAD32>3 D<0000000FE0000000FF
+E0000003FC0000000FE00000003FC00000007F80000000FF00000000FE00000001FC0000
+0001FC00000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000007F000000007F00000000FE00000001FE00000
+003FC00000007F80000000FE00000007F8000000FFE0000000FFE000000007F800000000
+FE000000007F800000003FC00000001FE00000000FE000000007F000000007F000000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000001FC00000001FC00000000FE00000000FF000000007F80000000
+3FC00000000FE000000003FC00000000FFE00000000FE0236479CA32>102
+D<FE00000000FFE000000007F800000000FE000000007F800000003FC00000001FE00000
+000FE000000007F000000007F000000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000001FC00000001FC0000
+0000FE00000000FF000000007F800000003FC00000000FE000000003FC00000000FFE000
+0000FFE0000003FC0000000FE00000003FC00000007F80000000FF00000000FE00000001
+FC00000001FC00000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000007F000000007F00000000FE00000001F
+E00000003FC00000007F80000000FE00000007F8000000FFE0000000FE00000000236479
+CA32>I<0001C000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F000000007F000000007F000000003E000000003E000000003E0
+00000003E000000003E000000003E000000003E000000001C000000001C000000001C000
+000001C000000001C000000001C000003E01C03E00FFE1C3FF80FFFFFFFF80FFFFFFFF80
+FFFFFFFF80FFE1C3FF803E01C03E000001C000000001C000000001C000000001C0000000
+03E000000003E000000003E000000003E000000003E000000007F000000007F000000007
+F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
+00000007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
+0007F000000007F000000003E000000003E000000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000003
+E000000003E000000003E000000001C000000001C000000001C000000001C000000001C0
+00000001C000000001C000000001C000000001C000000001C00000215B7BC52C>121
+D E /FE 81[80 51[64 72 1[104 1[80 48 56 64 1[80 72 80
+120 40 80 1[40 2[48 64 1[64 1[72 13[80 104 112 88 112
+8[88 4[104 6[48 58[{}27 144.000000 /Times-Bold rf /FF
+81[42 51[32 37 37 55 37 42 23 32 32 42 42 42 42 60 23
+37 23 23 42 42 23 37 42 37 42 42 9[69 51 60 46 42 51
+60 51 60 1[69 3[28 1[60 51 51 60 55 51 51 6[28 42 42
+42 42 2[42 42 42 2[21 28 21 44[{}56 83.333336 /Times-Italic
+rf /FG 47[83 13[28 7[37 8[42 1[46 46 3[37 47[37 42 42
+60 42 42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28
+37 42 37 42 37 3[28 1[28 2[60 78 60 60 51 46 55 60 46
+60 60 74 51 60 32 28 60 60 46 51 60 55 55 60 1[37 3[23
+23 42 42 42 42 42 42 42 42 42 42 23 21 28 21 47 1[28
+28 28 1[69 37[{}81 83.333336 /Times-Roman rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -112 -352 3537 4 v -112 -227 4 125 v -84 -270
+a FG(In)20 b FF(Pr)m(oceedings)e(1)-6 b(1th)20 b(International)e
+(Confer)m(ence)h(on)h(Data)f(Engineering)p FG(,)f(pages)i(201\261210,)d
+(T)-6 b(aipei,)20 b(March)g(1995)p 3421 -227 V -112 -224
+3537 4 v 685 286 a FE(Prairie:)46 b(A)35 b(Rule)g(Speci\256cation)e
+(Framework)1267 469 y(for)i(Query)f(Optimizers)2600 417
+y FD(\003)-17 b(y)1160 710 y FC(Dinesh)24 b(Das)650 b(Don)25
+b(Batory)1262 826 y(Department)g(of)g(Computer)f(Sciences)1274
+942 y(The)h(University)f(of)g(T)-7 b(exas)25 b(at)g(Austin)1417
+1058 y(Austin,)f(T)-7 b(exas)24 b(78712\2611)l(188)1358
+1175 y FD(f)p FC(ddas,batory)p FD(g)p FC(@cs.utexas.edu)-112
+1500 y FB(Abstract)-112 1692 y FF(Fr)m(om)h(our)h(experience,)g(curr)m
+(ent)g(rule-based)f(query)g(optimizers)-112 1791 y(do)c(not)h(pr)m
+(ovide)g(a)g(very)h(intuitive)f(and)f(well-de\256ned)g(framework)-112
+1891 y(to)30 b(de\256ne)g(rules)h(and)e(actions.)57 b(T)-8
+b(o)32 b(r)m(emedy)e(this)h(situation,)h(we)-112 1991
+y(pr)m(opose)23 b(an)g(extensible)h(and)g(structur)m(ed)g(algebraic)f
+(framework)-112 2090 y(called)f(Prairie)h(for)h(specifying)e(rules.)35
+b(Prairie)24 b(facilitates)f(rule-)-112 2190 y(writing)h(by)f(enabling)
+f(a)i(user)g(to)g(write)h(rules)f(and)f(actions)g(mor)m(e)-116
+2289 y(quickly)-5 b(,)16 b(corr)m(ectly)g(and)g(in)h(an)f
+(easy-to-understand)d(and)i(easy-to-)-112 2389 y(debug)j(manner)-9
+b(.)-29 2492 y(Query)24 b(optimizers)h(consist)g(of)g(thr)m(ee)g(major)
+f(parts:)36 b(a)25 b(sear)m(ch)-116 2592 y(space,)17
+b(a)h(cost)f(model)g(and)f(a)i(sear)m(ch)f(strategy)-5
+b(.)26 b(The)18 b(appr)m(oach)d(we)-113 2691 y(take)k(is)i(only)e(to)h
+(develop)e(the)i(algebra)f(which)g(de\256nes)g(the)h(sear)m(ch)-112
+2791 y(space)29 b(and)g(the)h(cost)g(model)f(and)g(use)h(the)g(V)-9
+b(olcano)28 b(optimizer)n(-)-112 2891 y(generator)c(as)i(our)f(sear)m
+(ch)h(engine.)41 b(Using)26 b(Prairie)g(as)g(a)f(fr)m(ont-)-112
+2990 y(end,)j(we)h(translate)e(Prairie)h(rules)g(to)g(V)-9
+b(olcano)26 b(to)h(validate)g(our)-112 3090 y(claim)20
+b(that)g(Prairie)g(makes)g(it)h(easier)g(to)f(write)i(rules.)-33
+3193 y(W)-8 b(e)18 b(describe)e(our)h(algebra)f(and)g(pr)m(esent)h
+(experimental)f(r)m(esults)-118 3293 y(which)f(show)h(that)f(using)g(a)
+h(high-level)e(framework)i(like)f(Prairie)h(to)-117 3392
+y(design)e(lar)m(ge-scale)h(optimizers)i(does)e(not)h(sacri\256ce)f
+(ef\256ciency)-5 b(.)-112 3691 y FB(1)119 b(Intr)n(oduction)-119
+3883 y FG(Query)13 b(optimization)f([8])i(is)h(a)g(fundamental)d(part)i
+(of)g(database)g(sys-)-112 3982 y(tems.)26 b(It)20 b(is)h(the)f
+(process)g(of)f(generating)f(an)i(ef)o(\256cient)f(access)i(plan)-112
+4082 y(for)i(a)i(database)f(query)-5 b(.)37 b(Informally)-5
+b(,)22 b(an)i(access)h(plan)f(is)h(an)f(exe-)-112 4181
+y(cution)g(strategy)h(for)g(a)h(query;)g(it)g(is)h(the)e(sequence)g(of)
+g(low-level)-112 4281 y(database)e(retrieval)h(operations)f(that,)i
+(when)f(executed,)g(produce)-112 4381 y(the)f(database)g(records)f
+(that)i(satisfy)f(the)h(query)-5 b(.)34 b(There)23 b(are)g(three)-112
+4480 y(basic)h(aspects)h(that)f(de\256ne)g(and)g(in\257uence)f(query)g
+(optimization:)-112 4580 y(the)d(search)f(space,)h(the)h(cost)f(model,)
+f(and)h(the)g(search)g(strategy)-5 b(.)-30 4683 y(The)20
+b FF(sear)m(ch)f(space)h FG(is)g(the)g(set)h(of)e(logically)g
+(equivalent)g(access)-112 4783 y(plans)27 b(that)g(can)h(be)f(used)g
+(to)h(evaluate)f(a)g(query)-5 b(.)47 b(All)28 b(plans)g(in)f(a)p
+-112 4867 788 4 v -29 4921 a FA(\003)7 4944 y Fz(This)18
+b(research)h(was)f(supported)i(in)e(part)h(by)f(grants)h(from)e(The)h
+(University)i(of)-112 5023 y(T)-5 b(exas)23 b(Applied)h(Research)h
+(Laboratories,)h(Schlumber)o(ger)m(,)g(and)d(Digital)h(Equip-)-112
+5102 y(ment)17 b(Corporation.)-26 5160 y FA(y)7 5184
+y Fz(An)d(expanded)j(version)f(of)f(this)g(paper)h(is)e(available)k(as)
+d(T)-5 b(echnical)17 b(Report)f(TR)-112 5263 y(94\26116)h(by)g
+(anonymous)h(ftp)f(from)g Fy(ftp.cs.utexas.edu)p Fz(.)2044
+1500 y FG(query')-5 b(s)20 b(search)g(space)h(return)e(the)i(same)g
+(result;)g(however)m(,)e(some)2042 1600 y(plans)g(are)f(more)g(ef)o
+(\256cient)g(than)h(others.)25 b(The)19 b FF(cost)g(model)f
+FG(assigns)2043 1699 y(a)i(cost)g(to)g(each)f(plan)g(in)h(the)f(search)
+h(space.)26 b(The)19 b(cost)h(of)g(a)g(plan)f(is)2041
+1799 y(an)f(estimate)g(of)g(the)g(resources)f(used)g(when)h(the)g(plan)
+f(is)i(executed;)2040 1899 y(the)e(lower)g(the)g(cost,)h(the)f(better)g
+(the)g(plan.)25 b(The)17 b FF(sear)m(ch)g(strategy)g
+FG(is)2044 1998 y(a)23 b(speci\256cation)f(of)h(which)f(plans)h(in)g
+(the)g(search)f(space)h(are)g(to)g(be)2044 2098 y(examined.)2127
+2197 y(T)m(raditionally)-5 b(,)18 b(query)h(optimizers)h(have)g(been)g
+(built)g(as)i(mono-)2044 2297 y(lithic)i(subsystems)f(of)h(a)g(DBMS.)g
+(This)g(simply)f(re\257ects)h(the)g(fact)2040 2397 y(that)18
+b(traditional)e(database)h(systems)h(are)f(themselves)g(monolithic:)
+2043 2496 y(the)i(algorithms)f(used)g(for)h(storing)f(and)h(retrieving)
+e(data)i(are)h(hard-)2044 2596 y(wired)25 b(and)f(are)i(rather)e(dif)o
+(\256cult)g(to)i(change.)41 b(The)25 b(need)f(to)i(have)2041
+2696 y(extensible)18 b(database)f(systems,)i(and)f(in)g(turn)f
+(extensible)h(optimiz-)2044 2795 y(ers,)27 b(has)f(long)f(been)h
+(recognized)d(in)j(systems)h(like)f(Genesis)g([1],)2039
+2895 y(EXODUS)17 b([9],)g(Starburst)e([10],)h(and)g(Postgres)h([12].)24
+b(Rule-based)2043 2994 y(query)19 b(optimizers)g(are)h(among)e(the)i
+(major)f(conceptual)g(advances)2044 3094 y(that)28 b(have)g(been)g
+(proposed)f(to)i(deal)f(with)h(query)e(optimizer)g(ex-)2044
+3194 y(tensibility)d([6,)13 b(7,)g(9,)g(10].)39 b(The)24
+b(extensibility)f(translates)i(into)f(the)2044 3293 y(ability)e(to)g
+(incorporate)e(new)i(operators,)f(algorithms,)h(cost)g(mod-)2044
+3393 y(els,)27 b(or)e(search)g(strategies)g(without)f(changing)g(the)h
+(optimization)2044 3493 y(algorithm.)2127 3592 y(In)c(this)h(paper)m(,)
+e(we)i(describe)e(an)i(algebraic)e(framework)f(called)2042
+3692 y FF(Prairie)h FG(for)e(specifying)g(rules)h(in)g(a)g(rule-based)f
+(query)f(optimizer)-5 b(.)2044 3791 y(Prairie)27 b(is)h(similar)f(to)g
+(other)f(rule)h(speci\256cation)f(languages)g(like)2044
+3891 y(Starburst)d([10])f(and)h(V)-11 b(olcano)22 b([7],)i(and)f
+(indeed,)g(we)h(have)e(based)2044 3991 y(our)i(work)g(on)h(V)-11
+b(olcano)24 b(to)h(capture)e(most)i(of)g(the)g(advantages)e(of)2040
+4090 y(rule-based)16 b(optimizers.)25 b(However)m(,)16
+b(Prairie)h(attempts)g(to)g(provide)2040 4190 y(some)g(key)g(features)f
+(that,)i(we)g(have)e(found,)g(simplify)h(the)g(ef)o(fort)e(in)2044
+4290 y(writing)k(rules:)2106 4466 y(1.)41 b(A)26 b(framework)e(in)i
+(which)g(users)g(can)g(de\256ne)g(a)g(query)f(opti-)2210
+4565 y(mizer)c(concisely)f(in)h(terms)g(of)g(a)h(well-de\256ned)d(set)j
+(of)f(oper)n(-)2210 4665 y(ators)g(and)g(algorithms.)29
+b FF(All)22 b FG(operators)e(and)h(algorithms)f(are)2210
+4764 y(considered)f(\256rst-class)i(objects,)g(i.e.,)f
+FF(any)g FG(of)h(them)f(can)g(oc-)2210 4864 y(cur)15
+b(in)g(any)g(rule,)h(and)f FF(only)g FG(these)h(operators)d(and)i
+(algorithms)2210 4964 y(can)25 b(appear)f(in)h(rules.)42
+b(This)26 b(scheme)e(eliminates)i(the)f(need)2210 5063
+y(for)17 b(special)h(classes)i(of)d(operators)g(and)h(algorithms,)f
+(such)g(as)2210 5163 y(enforcers)i(in)i(V)-11 b(olcano)19
+b(and)h(glue)g(in)h(Starburst,)f(that)h(signif-)2210
+5263 y(icantly)f(complicate)f(rule)g(speci\256cation.)p
+eop
+%%Page: 2 2
+2 1 bop -50 21 a FG(2.)41 b(A)17 b(framework)d(in)j(which)f(users)h
+(can)f(de\256ne)g(a)h(list)h(of)f(proper)n(-)54 120 y(ties)g(to)f
+(characterize)f(the)h(expressions)f(generated)f(in)i(the)h(op-)54
+220 y(timization)g(process.)26 b(Again,)18 b(the)h(goal)e(here)h(is)i
+(to)e(allow)h(the)54 319 y(user)h(to)h(treat)g FF(all)g
+FG(properties)e(as)j(having)d(equal)h(status.)30 b(This)54
+419 y(is)22 b(dif)o(ferent)d(from)h(V)-11 b(olcano)20
+b(where)g(the)i(user)e(must)i(classify)54 519 y(properties)30
+b(as)i(logical,)h(physical,)h(or)d(operator/algorithm)54
+618 y(ar)o(guments.)-50 790 y(3.)41 b(A)h(framework)d(in)j(which)f
+(users)g(can)h(specify)f(mapping)54 889 y(functions)30
+b(between)h(properties)f(concomitantly)f(with)j(the)54
+989 y(corresponding)23 b(rules.)47 b(This)28 b(contrasts)e(with)i
+(existing)e(ap-)54 1088 y(proaches)32 b(in)i(which)g(mappings)e
+(between)h(properties)g(are)54 1188 y(fragmented)14 b(into)i(multiple)g
+(functions)f(and)h(at)h(logically)e(dif-)54 1288 y(ferent)27
+b(places)h(than)g(the)g(corresponding)d(rules.)51 b(Research)54
+1387 y(into)24 b(rule-based)f(optimizers)h(has)h(revealed)e(that)i
+(property-)54 1487 y(mapping)16 b(functions)h(are)h(a)h(major)e(source)
+h(of)f(user)i(ef)o(fort,)d(so)54 1587 y(this)k(is)h(an)g(important)d
+(goal.)-50 1758 y(4.)41 b(The)16 b(format)h(\(Prairie\))f(in)i(which)e
+(users)i(can)f(cleanly)f(specify)54 1857 y(rules)e(is)i(not)e
+(necessarily)h(the)f(same)h(format)f(needed)g(for)g(gen-)54
+1957 y(erating)25 b(ef)o(\256cient)g(optimizers.)43 b(Thus,)27
+b(there)e(is)i(a)f(need)f(for)54 2057 y(a)c(pre-processor)e(\(written)h
+(by)h(us\))g(that)g(translates)h(between)54 2156 y(these)e(competing)e
+(representations.)-29 2344 y(Prairie)26 b(strives)h(for)e(uniformity)g
+(in)h(dealing)g(with)g(issues)i(that)-114 2444 y(have)18
+b(been)g(a)i(source)e(of)g(most)h(user)g(ef)o(fort)e(and)i(potential)f
+(user)g(er)n(-)-117 2543 y(rors.)26 b(In)16 b(the)h(following)e
+(sections,)i(we)g(present)f(the)h(Prairie)f(frame-)-112
+2643 y(work.)26 b(W)-7 b(e)22 b(explain)d(how)h(our)f(P2V)i
+(pre-processor)d(maps)i(Prairie)-112 2742 y(rule)i(speci\256cations)h
+(into)g(V)-11 b(olcano)23 b(rule)g(speci\256cations)g(that)g(can)-118
+2842 y(be)16 b(processed)f(ef)o(\256ciently)-5 b(.)24
+b(Experimental)14 b(results)i(to)g(support)e(this)-120
+2942 y(claim)g(are)g(given)f(in)h(Section)g(4,)h(where)e(we)i(compare)d
+(implementa-)-117 3041 y(tions)17 b(of)g(the)f(T)-6 b(exas)17
+b(Instruments)e(Open)h(OODB)i(query)d(optimizer)-112
+3141 y(using)24 b(both)h(Prairie)g(and)g(V)-11 b(olcano.)41
+b(W)-7 b(e)26 b(conclude)e(with)h(a)h(sum-)-112 3241
+y(mary)19 b(and)h(related)f(research.)-117 3527 y FB(2)120
+b(Prairie:)37 b(A)26 b(language)f(for)g(rule)h(speci\256-)67
+3677 y(cation)-112 3864 y FG(The)c(basic)h(concepts)f(and)h
+(de\256nitions)f(that)h(underlie)f(the)h(Prairie)-118
+3964 y(model)14 b(are)i(presented)e(in)i(this)g(section.)25
+b(The)15 b(goal)g(is)h(to)g(lay)f(a)h(foun-)-117 4064
+y(dation)g(for)h(reasoning)e(about)h(query)f(optimization)g
+(algebraically;)-112 4163 y(this)21 b(is)i(necessary)d(for)h(our)f
+(subsequent)g(discussion)h(about)f(trans-)-112 4263 y(lating)f(Prairie)
+h(speci\256cations)g(to)h(those)f(of)f(V)-11 b(olcano.)-112
+4507 y Fx(2.1)99 b(Notation)24 b(and)i(assumptions)-114
+4665 y Fw(Stor)o(ed)19 b(Files)h(and)f(Str)o(eams.)82
+b FG(A)20 b(\256le)f(is)i FF(stor)m(ed)g FG(if)e(its)h(tuples)f(re-)
+-112 4764 y(side)h(on)g(disk.)27 b(In)20 b(the)h(case)g(of)f
+(relational)f(databases,)h(stored)g(\256les)-116 4864
+y(are)c(sometimes)h(called)g FF(base)f(r)m(elations)p
+FG(;)i(we)f(will)h(denote)e(them)g(by)-118 4964 y Fv(R)i
+FG(or)d Fv(R)111 4976 y Fu(i)139 4964 y FG(.)26 b(In)16
+b(object-oriented)d(schemas,)k(stored)e(\256les)i(are)f
+FF(classes)p FG(;)-112 5063 y(we)21 b(will)i(denote)d(them)h(by)g
+FF(C)i FG(or)e FF(C)918 5075 y Fu(i)946 5063 y FG(.)31
+b(Henceforth,)20 b(whenever)f(we)-115 5163 y(refer)f(to)g(a)h(stored)f
+(\256le,)h(we)g(mean)e(a)i(relation)f(or)g(a)g(class;)i(when)e(the)-118
+5263 y(distinction)c(is)i(unimportant,)d(we)j(will)g(use)f
+Fv(F)28 b FG(or)15 b Fv(F)1365 5275 y Fu(i)1393 5263
+y FG(.)26 b(A)16 b FF(str)m(eam)f FG(is)h(a)2042 21 y(sequence)i(of)h
+(tuples)g(and)f(is)i(the)f(result)g(of)g(a)g(computation)e(on)h(one)
+2037 120 y(or)d(more)f(streams)h(or)f(stored)h(\256les;)i(tuples)e(of)g
+(streams)g(are)f(returned)2044 220 y(one)20 b(at)i(a)f(time,)g
+(typically)f(on)g(demand.)28 b(Streams)21 b(can)g(be)f
+FF(named)p FG(,)2044 319 y(denoted)e(by)i Fv(S)2482 331
+y Fu(i)2510 319 y FG(,)g(or)g FF(unnamed)p FG(.)2044
+536 y Fw(Database)f(Operations.)82 b FG(An)20 b FF(operation)f
+FG(is)i(a)g(computation)d(on)2044 635 y(one)j(or)h(more)f(streams)i(or)
+f(stored)f(\256les.)34 b(There)21 b(are)h(two)g(types)g(of)2043
+735 y(database)c(operations)g(in)h(Prairie:)27 b(abstract)19
+b(\(or)g(implementation-)2043 835 y(unspeci\256ed\))g(operators)f(and)h
+(concrete)g(algorithms.)26 b(Each)19 b(is)i(de-)2044
+934 y(tailed)f(below)-5 b(.)2210 1103 y Fw(Operators.)39
+b FG(Abstract)28 b(\(or)f(conceptual\))e FF(operators)i
+FG(spec-)2392 1203 y(ify)c(computations)e(on)i(streams)g(or)g(stored)g
+(\256les;)j(they)2392 1302 y(are)38 b(denoted)d(by)i(all)h(capital)f
+(letters)h(\(e.g.,)i(JOIN\).)2392 1402 y(Operators)25
+b(have)h(two)g(types)g(of)f(parameters:)38 b(essen-)2392
+1502 y(tial)k(and)f(additional.)88 b FF(Essential)41
+b(parameters)g FG(are)2392 1601 y(the)c(stream)g(or)f(\256le)h(inputs)f
+(to)h(an)g(operator;)43 b(these)2392 1701 y(are)d(the)f(primary)f
+(inputs)h(to)g(be)h(processed)e(by)h(an)2392 1800 y(operator)-5
+b(.)31 b FF(Additional)20 b(parameters)i FG(are)g(\252\256ne-grain\272)
+2392 1900 y(quali\256cations)k(of)g(an)g(operator;)h(their)f(purpose)f
+(is)i(to)2392 2000 y(describe)19 b(an)g(operator)f(in)i(more)e(detail)i
+(than)f(essential)2392 2099 y(parameters.)2210 2223 y
+Fw(Algorithms.)40 b FF(Algorithms)75 b FG(are)h(concrete)e(implemen-)
+2392 2323 y(tations)46 b(of)f(conceptual)e(operators;)56
+b(they)45 b(will)h(be)2392 2422 y(represented)40 b(in)h(lower)g(case)g
+(with)h(the)f(\256rst)h(letter)2392 2522 y(capitalized)50
+b(\(e.g.,)56 b(Nested)p 3265 2522 25 4 v 29 w(loops\).)115
+b(Algorithms)2392 2621 y(have)34 b(at)g(least)h(the)f(same)g(essential)
+g(and)f(additional)2392 2721 y(parameters)24 b(as)h(the)f(conceptual)e
+(operators)h(that)i(they)2392 2821 y(implement.)2770
+2791 y Ft(1)2897 2821 y FG(Furthermore,)45 b(there)c(can)g(be,)47
+b(and)2392 2920 y(usually)35 b(are,)j(several)c(algorithms)g(for)g(a)h
+(particular)2392 3020 y(operator)-5 b(.)2044 3189 y(T)f(able)26
+b(1)h(lists)h(some)e(operators)f(and)h(algorithms)f(implementing)2044
+3288 y(them)20 b(together)e(with)j(their)f(additional)f(parameters.)
+2044 3505 y Fw(Operator)i(T)-6 b(r)o(ees.)82 b FG(An)22
+b FF(operator)g(tr)m(ee)h FG(is)g(a)g(rooted)e(tree)h(whose)2044
+3604 y(non-leaf,)27 b(or)g FF(interior)p FG(,)i(nodes)e(are)h(database)
+e(operations)g(\(oper)n(-)2044 3704 y(ators)g(or)g(algorithms\))f(and)g
+(whose)h(leaf)h(nodes)e(are)i(stored)e(\256les.)2044
+3804 y(The)e(children)g(of)g(an)h(interior)e(node)h(in)h(an)g(operator)
+e(tree)h(are)h(the)2044 3903 y(essential)i(parameters)e(\(i.e.,)i(the)g
+(stream)f(or)g(\256le)h(parameters\))e(of)2044 4003 y(the)h(node.)42
+b(Additional)24 b(parameters)h(are)g(implicitly)g(attached)g(to)2039
+4102 y(each)16 b(node.)25 b(Algebraically)-5 b(,)15 b(operator)g(trees)
+i(are)f(compositions)f(of)2039 4202 y(database)g(operations;)h(thus,)g
+(we)h(will)f(also)h(call)f(operator)e(trees)i FF(ex-)2044
+4302 y(pr)m(essions)p FG(;)k(both)g(terms)g(will)h(be)f(used)g
+(interchangeably)-5 b(.)2046 4487 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)24
+b FG(1)t(.)150 b(A)23 b(simple)g(expression)f(and)g(its)i(operator)d
+(tree)2044 4587 y(representation)h(are)h(shown)h(in)g(Figure)f(1\(a\).)
+38 b(Relations)24 b Fv(R)3831 4599 y Ft(1)3893 4587 y
+FG(and)2044 4686 y Fv(R)2107 4698 y Ft(2)2171 4686 y
+FG(are)j(\256rst)h(RET)m(rieved,)f(then)f(JOINed,)i(and)e(\256nally)h
+(SOR)-5 b(T)f(ed)2044 4786 y(resulting)13 b(in)h(a)h(stream)f(sorted)g
+(on)g(a)g(speci\256c)h(attribute.)24 b(The)14 b(\256gure)2044
+4886 y(shows)g(only)f(the)h(essential)h(parameters)e(of)h(the)g
+(various)f(operators,)2044 4985 y(not)20 b(the)g(additional)f
+(parameters.)915 b Fs(\003)p 2044 5107 788 4 v 2129 5160
+a Fr(1)2163 5184 y Fz(Algorithms)20 b(may)e(have)h Fq(tuning)g
+(parameters)h Fz(which)f(are)f(not)h(parameters)h(of)2044
+5263 y(the)e(operators)g(they)g(implement.)p eop
+%%Page: 3 3
+3 2 bop -112 71 2323 13 v -112 138 4 67 v -59 118 a Fp(Operator)p
+330 138 V 211 w(Description)p 912 138 V 294 w(Additional)17
+b(Parameters)p 1582 138 V 102 w(Algorithm)p 2207 138
+V -112 150 2323 13 v -112 217 4 67 v -59 232 a Fo(JOIN\()p
+Fu(S)127 240 y Fn(1)159 232 y Fo(,)d Fu(S)229 240 y Fn(2)261
+232 y Fo(\))p 330 217 V 104 w(Join)g(streams)g Fu(S)728
+240 y Fn(1)760 232 y Fo(,)g Fu(S)830 240 y Fn(2)p 912
+217 V 965 197 a Fo(tuple)p 1084 197 18 4 v 22 w(order)p
+1582 217 4 67 v 410 w(Nested)p 1800 197 18 4 v 20 w(loops\()p
+Fu(S)2003 205 y Fn(1)2036 197 y Fo(,)g Fu(S)2106 205
+y Fn(2)2138 197 y Fo(\))p 2207 217 4 67 v 1585 220 626
+4 v -112 283 4 67 v 330 283 V 912 283 V 965 263 a(join)p
+1058 263 18 4 v 22 w(predicate)p 1582 283 4 67 v 345
+w(Mer)o(ge)p 1789 263 18 4 v 20 w(join\()p Fu(S)1956
+271 y Fn(1)1989 263 y Fo(,)g Fu(S)2059 271 y Fn(2)2092
+263 y Fo(\))p 2207 283 4 67 v -112 286 2323 4 v -112
+363 4 77 v -59 407 a(RET\()p Fu(F)9 b Fo(\))p 330 363
+V 384 412 a(Retrieve)14 b(\256le)h Fu(F)p 912 363 V 965
+339 a Fo(tuple)p 1084 339 18 4 v 22 w(order)p 1582 363
+4 77 v 1635 353 a(File)p 1728 353 18 4 v 21 w(scan\()p
+Fu(F)9 b Fo(\))p 2207 363 4 77 v -112 429 4 67 v 330
+429 V 912 429 V 965 410 a(selection)p 1175 410 18 4 v
+21 w(predicate)p 1582 429 4 67 v 1585 397 622 4 v 2207
+429 4 67 v -112 497 4 68 v 330 497 V 912 497 V 965 477
+a(projected)p 1184 477 18 4 v 22 w(attributes)p 1582
+497 4 68 v 1635 469 a(Index)p 1770 469 18 4 v 21 w(scan\()p
+Fu(F)g Fo(\))p 2207 497 4 68 v -112 500 2323 4 v -112
+567 4 67 v -59 582 a(SOR)m(T\()p Fu(S)147 590 y Fn(1)178
+582 y Fo(\))p 330 567 V 384 583 a(Sort)15 b(stream)f
+Fu(S)705 591 y Fn(1)p 912 567 V 965 580 a Fo(tuple)p
+1084 580 18 4 v 22 w(order)p 1582 567 4 67 v 1635 547
+a(Mer)o(ge)p 1789 547 18 4 v 20 w(sort\()p Fu(S)1953
+555 y Fn(1)1986 547 y Fo(\))p 2207 567 4 67 v 1585 570
+626 4 v -112 633 4 67 v 330 633 V 912 633 V 1582 633
+V 1635 613 a(Null\()p Fu(S)1798 621 y Fn(1)1831 613 y
+Fo(\))p 2207 633 V -112 646 2323 13 v -112 793 a FG(T)-6
+b(able)17 b(1:)27 b(Operators)17 b(and)h(algorithms)e(in)j(a)f
+(centralized)f(query)g(optimizer)g(and)-112 893 y(their)i(additional)g
+(parameters)p 2477 33 1525 13 v 2477 99 4 67 v 2530 80
+a Fp(Pr)o(operty)p 3033 99 V 335 w(Description)p 3998
+99 V 2477 112 1525 13 v 2477 178 4 67 v 2530 158 a Fo(join)p
+2623 158 18 4 v 22 w(predicate)p 3033 178 4 67 v 232
+w(join)c(predicate)f(for)h(JOIN)g(operator)p 3998 178
+V 2477 182 1525 4 v 2477 248 4 67 v 2530 228 a(selection)p
+2740 228 18 4 v 21 w(predicate)p 3033 248 4 67 v 116
+w(selection)f(predicate)g(for)i(RET)d(operator)p 3998
+248 V 2477 251 1525 4 v 2477 318 4 67 v 2530 331 a(tuple)p
+2649 331 18 4 v 21 w(order)p 3033 318 4 67 v 3087 298
+a(tuple)h(order)i(of)e(resulting)h(stream,)p 3998 318
+V 2477 384 V 3033 384 V 3087 364 a(DONT)p 3252 364 18
+4 v 20 w(CARE)e(if)i(none)p 3998 384 4 67 v 2477 388
+1525 4 v 2477 454 4 67 v 2530 434 a(num)p 2636 434 18
+4 v 21 w(records)p 3033 454 4 67 v 262 w(number)g(of)g(tuples)f(of)h
+(resulting)g(stream)p 3998 454 V 2477 457 1525 4 v 2477
+524 4 67 v 2530 504 a(tuple)p 2649 504 18 4 v 21 w(size)p
+3033 524 4 67 v 329 w(size)f(of)g(individual)i(tuple)e(in)h(stream)p
+3998 524 V 2477 527 1525 4 v 2477 593 4 67 v 2530 574
+a(projected)p 2749 574 18 4 v 21 w(attributes)p 3033
+593 4 67 v 104 w(projected)f(attributes)h(for)h(RET)d(operator)p
+3998 593 V 2477 597 1525 4 v 2477 663 4 67 v 2530 643
+a(attributes)p 3033 663 V 341 w(list)h(of)h(attributes)p
+3998 663 V 2477 666 1525 4 v 2477 733 4 67 v 2530 713
+a(cost)p 3033 733 V 463 w(estimated)f(cost)g(of)h(algorithm)p
+3998 733 V 2477 745 1525 13 v 2477 893 a FG(T)-6 b(able)16
+b(2:)26 b(Properties)15 b(of)h(nodes)g(in)g(an)h(operator)d(tree)p
+-105 1246 1938 4 v -105 2116 4 870 v 61 1362 a Fm(SOR)n(T)c(\(JOIN)g
+(\(RET)h(\()p Fl(R)449 1374 y Fn(1)481 1362 y Fm(\),)f(RET)h(\()p
+Fl(R)661 1374 y Fn(2)693 1362 y Fm(\)\)\))346 1463 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodesort 16 { .5 3.39499
+0.05246 false .5 12.4799 InitRnode } NewNode end end
+
+346 1463 a Fm(SOR)n(T)353 1557 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoin 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 353 1557 a Fm(JOIN)303
+1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodesort
+/TheNodejoin InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303 1732 a 264 1652 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderetr1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 264 1652 a Fm(RET)453 1652
+y
+ tx@Dict begin tx@NodeDict begin { } /TheNoderetr2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 453 1652 a Fm(RET)303 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoin
+/TheNoderetr1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 303 1732 a 303 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoin
+/TheNoderetr2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+
+303 1732 a 265 1740 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoder1 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 265 1740 a Fl(R)308 1752 y Fn(1)455
+1740 y
+ tx@Dict begin tx@NodeDict begin { } /TheNoder2 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 455 1740 a Fl(R)498 1752 y Fn(2)303 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderetr1
+/TheNoder1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303
+1732 a 303 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderetr2
+/TheNoder2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303 1732 a 27 1915 a Fz(\(a\))37 b(An)f(expression)i
+(and)f(its)27 1994 y(corresponding)19 b(operator)g(tree)p
+872 2091 4 820 v 1237 1458 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodemergesort 16 { .5 3.34
+1.07994 false .5 22.25977 InitRnode } NewNode end end
+ 1237 1458 a Fm(Mer)o(ge)p
+1346 1458 13 4 v 16 w(sort)1219 1553 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodenestedloops 16 { .5 3.39499
+1.07994 false .5 26.5197 InitRnode } NewNode end end
+ 1219 1553 a Fm(Nested)p
+1336 1553 13 4 v 16 w(loops)1235 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodemergesort
+/TheNodenestedloops InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1158
+1652 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodefilescanr1 16 { .5 3.39499
+0.05246 false .5 18.4647 InitRnode } NewNode end end
+ 1158 1652 a Fm(File)p 1225 1652 13 4 v 15 w(scan)1347
+1652 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodefilescanr2 16 { .5 3.39499
+0.05246 false .5 18.4647 InitRnode } NewNode end end
+ 1347 1652 a Fm(File)p 1414 1652 13 4 v 15 w(scan)1235
+1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodenestedloops
+/TheNodefilescanr1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1235 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodenestedloops
+/TheNodefilescanr2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1197 1740
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNoder1 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 1197 1740 a Fl(R)1240 1752 y Fn(1)1386 1740 y
+ tx@Dict begin tx@NodeDict begin { } /TheNoder2 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 1386
+1740 a Fl(R)1429 1752 y Fn(2)1235 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodefilescanr1
+/TheNoder1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1235 1732 a
+1235 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodefilescanr2
+/TheNoder2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1235 1732 a 959 1915 a Fz(\(b\))h(Possible)i(access)g(plan)
+g(for)959 1994 y(operator)d(tree)f(in)f(\(a\))p 1829
+2116 4 870 v -105 2119 1938 4 v 1831 2136 19 877 v -89
+2136 1938 19 v -25 2319 a FG(Figure)j(1:)27 b(Example)19
+b(of)h(an)g(operator)e(tree)i(and)g(access)h(plan)-117
+2521 y Fw(Descriptors.)83 b FG(A)17 b FF(pr)m(operty)f
+FG(of)h(a)g(node)f(is)i(a)f(\(user)n(-de\256ned\))e(vari-)-112
+2620 y(able)31 b(that)h(contains)f(information)e(used)i(by)h(an)f
+(optimizer)-5 b(.)61 b(An)-112 2720 y FF(annotation)25
+b FG(is)k(a)f Fk(h)p FF(pr)m(operty)-5 b(,)20 b(value)o
+Fk(i)29 b FG(pair)e(that)h(is)h(assigned)e(to)h(a)-112
+2819 y(node.)39 b(A)25 b FF(descriptor)g FG(is)h(a)f(list)h(of)e
+(annotations)f(that)i(describes)f(a)-112 2919 y(node)j(of)g(an)h
+(operator)f(tree;)32 b(every)27 b(node)g(has)h(its)h(own)f(descrip-)
+-112 3019 y(tor)-5 b(.)54 b(As)30 b(an)f(example,)h(T)-6
+b(able)29 b(2)h(lists)g(some)f(typical)g(properties)-112
+3118 y(that)21 b(might)f(be)h(used)f(in)h(a)h(descriptor)-5
+b(.)28 b(Note)21 b(that)g(descriptors)e(for)-112 3218
+y(stream)24 b(and)h(stored)f(\256les)i(may)e(have)h(dif)o(ferent)e
+(properties.)39 b(The)-114 3318 y(following)17 b(notations)h(will)h(be)
+g(useful)f(in)h(our)f(subsequent)g(discus-)-119 3417
+y(sions.)26 b(If)14 b Fv(S)220 3429 y Fu(i)263 3417 y
+FG(is)i(a)g(stream,)f(then)g Fj(D)877 3429 y Fi(i)918
+3417 y FG(is)h(its)g(descriptor)-5 b(.)24 b(Annotations)-112
+3517 y(of)c Fv(S)29 3529 y Fu(i)78 3517 y FG(are)h(accessed)g(by)f(a)i
+(structure)e(member)f(relationship,)h(e.g.,)-113 3616
+y Fj(D)-40 3628 y Fi(i)-14 3616 y Fv(:)p FG(num)p 163
+3616 25 4 v 28 w(records)o(.)27 b(Also,)20 b(let)h Fv(E)k
+FG(be)20 b(an)g(expression)f(and)g(let)h Fj(D)h FG(be)-112
+3716 y(its)g(descriptor)-5 b(.)26 b(W)-7 b(e)21 b(will)g(write)f(this)h
+(as)g Fv(E)28 b Fh(:)23 b Fj(D)p FG(.)-110 3904 y(E)t
+Fz(X)t(A)t(M)t(P)t(L)t(E)h FG(2)t(.)147 b(The)19 b(expression,)-112
+4055 y Fo(SOR)m(T)o Ft(\()p Fo(JOIN)o Ft(\()p Fo(RET)o
+Ft(\()p Fu(R)396 4063 y Fn(1)428 4055 y Ft(\):)p Fi(D)530
+4063 y Fg(3)566 4055 y Fu(;)p Fo(RET)o Ft(\()p Fu(R)772
+4063 y Fn(2)804 4055 y Ft(\):)p Fi(D)906 4063 y Fg(4)942
+4055 y Ft(\):)p Fi(D)1044 4063 y Fg(5)1079 4055 y Ft(\):)p
+Fi(D)1181 4063 y Fg(6)-112 4206 y FG(corresponds)k(to)j(the)f(operator)
+f(tree)i(in)g(Figure)f(1\(a\),)h(and)f(shows)-112 4305
+y(the)20 b(descriptors)f(of)h(the)g(various)f(nodes.)704
+b Fs(\003)-30 4466 y FG(A)19 b(notational)f(simpli\256cation)h(can)g
+(be)g(made)g(here.)26 b(Additional)-117 4565 y(parameters)14
+b(of)i(operators)f(can)h(be)g(treated)f(the)h(same)h(way)f(as)h(other)
+-112 4665 y(properties)i(of)h(a)h(node;)f(essential)h(parameters,)e
+(however)m(,)f(are)j FF(ex-)-115 4764 y(pr)m(essions)p
+FG(.)27 b(Thus,)18 b(the)g(term)g(descriptor)f(in)h(the)g(remainder)f
+(of)h(this)-112 4864 y(paper)24 b(will)i(refer)f(to)h(a)g(set)h(of)e
+(properties,)g(including)f(additional)-112 4964 y(parameters,)18
+b(as)j(shown)f(in)g(T)-6 b(able)20 b(2.)-35 5063 y(Currently)-5
+b(,)15 b(descriptor)f(properties)h(are)g(de\256ned)g(entirely)g(by)g
+(the)-112 5163 y(user;)34 b(however)m(,)c(we)g(envision)f(providing)e
+(a)j(hierarchy)e(of)i(pre-)-112 5263 y(de\256ned)19 b(descriptor)f
+(types)i(to)h(aid)f(this)h(process.)2042 1243 y Fw(Access)e(Plans.)83
+b FG(An)18 b FF(access)h(plan)f FG(is)h(an)g(operator)d(tree)j(in)g
+(which)2044 1343 y(all)i(interior)e(nodes)g(are)h(algorithms.)2046
+1630 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)k FG(3)t(.)142 b(An)15
+b(access)h(plan)f(for)f(the)h(operator)f(tree)h(in)g(Fig-)2044
+1729 y(ure)20 b(1\(a\))f(is)i(shown)f(in)g(Figure)f(1\(b\).)826
+b Fs(\003)2044 2047 y Fx(2.2)99 b(Prairie)25 b(optimization)f(paradigm)
+2044 2230 y FG(Prairie)k(admits)f(two)h(rather)g(dif)o(ferent)d(means)j
+(of)g(optimization:)2044 2329 y(top-down)19 b(and)j(bottom-up.)29
+b(A)23 b(top-down)d(query)g(optimizer)h(op-)2041 2429
+y(timizes)d(the)g(parents)g(of)f(a)i(node)d(prior)h(to)h(optimizing)f
+(the)h(node)e(it-)2038 2529 y(self.)25 b(A)16 b(bottom-up)d(optimizer)h
+(optimizes)g(the)i(children)e(of)g(a)i(node)2044 2628
+y(prior)22 b(to)i(optimizing)d(the)j(node.)35 b(The)23
+b(earliest)h(optimizers)e(\(Sys-)2044 2728 y(tem)e(R)h([1)m(1])e(and)h
+(R)2617 2698 y Ff(\003)2676 2728 y FG([3]\))f(employed)f(the)j
+(bottom-up)c(approach.)2126 2842 y(Our)i(research)f(concentrates)g(on)h
+(a)h(top-down)e(optimization)f(of)2044 2942 y(operator)24
+b(trees.)46 b(W)-7 b(e)28 b(have)d(chosen)h(this)h(approach)d(because)i
+(we)2044 3042 y(intend)d(to)h(translate)g(Prairie)g(rules)g(into)f(the)
+h(format)f(required)f(by)2044 3141 y(the)28 b(V)-11 b(olcano)28
+b(query)f(optimizer)g(generator)f([7])i(which)g(is)h(based)2044
+3241 y(on)h(a)h(top-down)d(strategy)-5 b(.)56 b(Given)30
+b(an)g(appropriate)e(search)i(en-)2044 3340 y(gine,)24
+b(Prairie)f(can)g(potentially)g(also)h(be)f(used)h(with)f(a)i
+(bottom-up)2043 3440 y(optimization)18 b(strategy;)i(however)m(,)d(we)k
+(will)f(not)g(discuss)g(this)g(ap-)2044 3540 y(proach)e(in)j(this)f
+(paper)-5 b(.)2125 3654 y(In)18 b(query)g(optimization,)f(there)h(are)g
+(certain)g(annotations)g(\(such)2044 3754 y(as)29 b(additional)f
+(parameters\))f(that)i(are)g(known)e(before)g(any)i(opti-)2037
+3853 y(mization)14 b(is)i(begun.)23 b(These)15 b(annotations)e(can)i
+(be)f(computed)f(at)j(the)2043 3953 y(time)j(that)g(the)g(operator)f
+(tree)h(is)h(initialized,)f(and)g(will)h(not)f(change)2040
+4052 y(with)f(application)d(of)i(rules.)26 b(Our)17 b(following)f
+(discussions)h(assume)2044 4152 y(operator)h(trees)j(are)f
+(initialized.)2127 4266 y(There)41 b(are)h(two)h(types)f(of)g
+(algebraic)f(transformations)f(\(or)2044 4366 y FF(r)m(ewrite)34
+b(rules)p FG(\))e(in)h(Prairie:)52 b(T)-8 b(-rules)32
+b(\(\252transformation)e(rules\272\))2044 4466 y(and)22
+b(I-rules)f(\(\252implementation)f(rules\272\).)33 b(Each)22
+b(rule)g(transforms)2044 4565 y(an)j(expression)g(into)g(another)f
+(based)i(on)f(additional)f(conditions;)2044 4665 y(the)h
+(transformation)d(also)j(results)g(in)g(a)g(mapping)e(of)h(descriptors)
+2037 4764 y(between)14 b(expressions.)24 b(W)-7 b(e)16
+b(de\256ne)e(T)-8 b(-rules)14 b(and)g(I-rules)g(precisely)2042
+4864 y(in)20 b(the)f(following)e(sections)i(and)g(illustrate)g(them)f
+(with)i(examples.)2044 4964 y(Our)33 b(examples)g(are)h(chosen)f(from)f
+(rules)i(that)g(would)f(be)g(used)2044 5063 y(in)e(a)h(centralized)e
+(relational)g(query)g(optimizer;)36 b(the)31 b(operators,)2044
+5163 y(algorithms,)25 b(and)f(properties)g(are)h(subsets)h(of)f(those)g
+(in)h(T)-6 b(ables)25 b(1)2044 5263 y(and)19 b(2.)p eop
+%%Page: 4 4
+4 3 bop -110 24 1947 4 v -110 1929 4 1905 v 31 101 a
+Fu(E)s Ft(\()p Fu(x)147 109 y Fn(1)178 101 y Fu(;)11
+b(:)h(:)f(:)g(;)g(x)372 109 y Fl(n)412 101 y Ft(\))19
+b(:)g Fi(D)552 109 y Fg(1)606 101 y Ft(=)-11 b Ff(\))19
+b Fu(E)783 72 y Fe(0)805 101 y Ft(\()p Fu(x)869 109 y
+Fn(1)901 101 y Fu(;)12 b(:)f(:)g(:)g(;)g(x)1095 109 y
+Fl(n)1135 101 y Ft(\))19 b(:)g Fi(D)1275 109 y Fg(2)1656
+101 y Fo(\(1\))31 167 y Ff(ff)244 234 y Fo(pre-test)c(statements)31
+300 y Ff(gg)31 367 y Fo(test)31 433 y Ff(ff)244 500 y
+Fo(post-test)g(statements)31 566 y Ff(gg)493 709 y Fz(\(a\))j(General)g
+(form)f(of)g(a)g(T)-6 b(-rule)p -61 807 1849 4 v 31 884
+a Fo(JOIN)o Ft(\()p Fo(JOIN)p Ft(\()p Fu(S)375 892 y
+Fn(1)407 884 y Fu(;)11 b(S)479 892 y Fn(2)512 884 y Ft(\))18
+b(:)h Fi(D)651 892 y Fg(4)687 884 y Fu(;)11 b(S)759 892
+y Fn(3)791 884 y Ft(\))19 b(:)g Fi(D)931 892 y Fg(5)1656
+884 y Fo(\(2\))89 983 y Ft(=)-11 b Ff(\))18 b Fo(JOIN)p
+Ft(\()p Fu(S)406 991 y Fn(1)438 983 y Fu(;)11 b Fo(JOIN)p
+Ft(\()p Fu(S)662 991 y Fn(2)694 983 y Fu(;)g(S)766 991
+y Fn(3)799 983 y Ft(\))18 b(:)h Fi(D)938 991 y Fg(6)974
+983 y Ft(\))g(:)g Fi(D)1114 991 y Fg(7)31 1066 y Ff(ff)244
+1133 y Fi(D)301 1141 y Fg(6)337 1133 y Fu(:)p Fo(attributes)g
+Ft(=)g Fo(union)c Ft(\()p Fi(D)892 1141 y Fg(2)928 1133
+y Fu(:)p Fo(attributes)p Fu(;)c Fi(D)1252 1141 y Fg(3)1288
+1133 y Fu(:)p Fo(attributes)p Ft(\))j(;)31 1199 y Ff(gg)31
+1265 y Fo(is)p 73 1265 18 4 v 20 w(associative)g Ft(\()p
+Fi(D)443 1273 y Fg(6)479 1265 y Fu(:)p Fo(join)p 592
+1265 V 21 w(predicate)p Fu(;)d Fi(D)911 1273 y Fg(6)947
+1265 y Fu(:)p Fo(attributes)p Fu(;)g Fi(D)1271 1273 y
+Fg(5)1306 1265 y Fu(:)p Fo(join)p 1419 1265 V 22 w(predicate)p
+Ft(\))31 1332 y Ff(ff)244 1398 y Fi(D)301 1406 y Fg(7)356
+1398 y Ft(=)19 b Fi(D)483 1406 y Fg(5)533 1398 y Ft(;)244
+1465 y Fi(D)301 1473 y Fg(7)337 1465 y Fu(:)p Fo(join)p
+450 1465 V 21 w(predicate)g Ft(=)g Fi(D)827 1473 y Fg(4)863
+1465 y Fu(:)p Fo(join)p 976 1465 V 21 w(predicate)14
+b Ft(;)244 1531 y Fi(D)301 1539 y Fg(6)337 1531 y Fu(:)p
+Fo(tuple)p 476 1531 V 21 w(size)k Ft(=)h Fi(D)730 1539
+y Fg(2)766 1531 y Fu(:)p Fo(tuple)p 905 1531 V 21 w(size)14
+b Ft(+)h Fi(D)1151 1539 y Fg(3)1187 1531 y Fu(:)p Fo(tuple)p
+1326 1531 V 21 w(size)f Ft(;)244 1598 y Fi(D)301 1606
+y Fg(6)337 1598 y Fu(:)p Fo(num)p 463 1598 V 21 w(records)19
+b Ft(=)g Fo(cardinality)c Ft(\()p Fi(D)1087 1606 y Fg(2)1123
+1598 y Fu(;)c Fi(D)1211 1606 y Fg(3)1247 1598 y Ft(\))j(;)31
+1664 y Ff(gg)587 1807 y Fz(\(b\))j(Join)g(associativity)p
+1834 1929 4 1905 v -110 1932 1947 4 v 1835 1949 19 1912
+v -93 1949 1947 19 v 607 2131 a FG(Figure)j(2:)27 b(T)-8
+b(-rule)-112 2372 y Fx(2.3)99 b(T)-7 b(ransformation)25
+b(rules)-112 2549 y FG(T)m(ransformation)k(rules,)35
+b(or)d(T)-8 b(-rules)32 b(for)g(short,)i(de\256ne)e(equiva-)-112
+2649 y(lences)e(among)g(pairs)h(of)f(expressions;)36
+b(they)30 b(de\256ne)g(mappings)-112 2748 y(from)g(one)i(operator)e
+(tree)h(to)h(another)-5 b(.)61 b(Let)32 b Fv(E)37 b FG(and)32
+b Fv(E)1584 2718 y Ff(0)1639 2748 y FG(be)g(ex-)-112
+2848 y(pressions)19 b(that)i(involve)e(only)h(abstract)g(operators.)26
+b(Equation)18 b(\(1\))-112 2948 y(\(shown)k(in)i(Figure)e(2\(a\)\))h
+(shows)g(the)h(general)e(form)h(of)g(a)h(T)-8 b(-rule.)-112
+3047 y(The)19 b(actions)h(of)g(a)h(T)-8 b(-rule)20 b(de\256ne)f(the)i
+(equivalences)d(between)i(the)-114 3147 y(descriptors)f(of)g(nodes)f
+(of)h(the)h(original)e(operator)f(tree)i Fv(E)25 b FG(with)20
+b(the)-112 3247 y(nodes)27 b(of)g(the)h(output)f(tree)g
+Fv(E)796 3216 y Ff(0)820 3247 y FG(;)32 b(these)c(actions)g(consist)g
+(of)f(a)h(se-)-112 3346 y(ries)f(of)f(\(C)i(or)f(C++\))g(assignment)918
+3316 y Ft(2)981 3346 y FG(statements.)47 b(The)27 b(left-hand)-112
+3446 y(sides)21 b(of)f(these)h(statements)g(refer)f(to)h(descriptors)e
+(of)i(expressions)-112 3545 y(on)g(the)h(right-hand)e(side)j(of)f(the)g
+(T)-8 b(-rule;)22 b(the)h(right-hand)c(sides)k(of)-119
+3645 y(the)14 b(statements)h(can)f(refer)g(to)h(any)f(descriptor)f(in)h
+(the)h(T)-8 b(-rule.)24 b(Func-)-112 3745 y(tion)j(\(called)h
+FF(helper)g FG(functions\))e(calls)j(can)f(also)g(appear)f(on)h(the)
+-118 3844 y(right)15 b(side)h(of)f(the)h(assignment)e(statements.)26
+b(Thus,)15 b(descriptors)g(on)-114 3944 y(the)k FF(left-hand)f(side)i
+FG(of)e(a)i(T)-8 b(-rule)19 b(are)g FF(never)g FG(changed)e(in)j(the)f
+(rule')-5 b(s)-114 4044 y(actions.)26 b(A)19 b FF(test)h
+FG(is)f(needed)f(to)g(determine)g(if)g(the)h(transformations)-112
+4143 y(of)g(the)i(T)-8 b(-rule)19 b(are)h(in)h(fact)f(applicable.)-34
+4254 y(Purely)c(as)i(an)e(optimization,)g(it)h(is)h(usually)e(the)g
+(case)h(that)g(not)f(all)-118 4354 y(statements)g(in)g(a)g(T)-8
+b(-rule')j(s)16 b(actions)f(need)g(to)h(be)g(executed)e(prior)h(to)h(a)
+-114 4454 y(T)-8 b(-rule')j(s)18 b(test.)28 b(For)18
+b(this)i(reason,)e(the)h(actions)f(of)h(a)g(T)-8 b(-rule)18
+b(are)h(split)-112 4553 y(into)i(two)g(groups;)g(those)h(that)f(need)g
+(to)h(be)f(executed)g(prior)f(to)i(the)-119 4653 y(T)-8
+b(-rule')j(s)14 b(test,)i(and)e(those)h(that)f(can)h(be)f(executed)g
+(after)g(a)h(successful)-113 4753 y(test.)27 b(These)19
+b(groups)f(of)h(statements)h(comprise,)e(respectively)-5
+b(,)18 b(the)p -112 4870 788 4 v -28 4924 a Fr(2)7 4947
+y Fz(The)13 b(actions)i(can)e(be)g(non-assignment)j(statements)e
+(\(like)h(function)g(calls\),)f(but)-112 5026 y(in)23
+b(this)h(case,)i(the)e(P2V)f(pre-processor)j(\(described)f(in)f
+(Section)h(3\))f(needs)g(some)-112 5105 y(hints)15 b(about)i(the)f
+(properties)h(that)f(are)g(changed)h(by)f(the)g(statement)h(in)e(order)
+h(to)g(cor)o(-)-112 5184 y(rectly)g(categorize)j(each)d(property)l(.)22
+b(For)15 b(simplicity)l(,)i(in)e(this)h(paper)m(,)g(we)f(assume)g(all)
+-112 5263 y(actions)j(consist)g(of)f(assignment)i(statements.)p
+2046 24 1947 4 v 2046 1688 4 1664 v 2187 92 a Fu(E)s
+Ft(\()p Fu(x)2303 100 y Fn(1)2335 92 y Fu(;)11 b(:)g(:)g(:)g(;)g(x)2528
+100 y Fl(n)2568 92 y Ft(\))19 b(:)g Fi(D)2708 100 y Fg(1)2763
+92 y Ft(=)-11 b Ff(\))18 b Fu(A)p Ft(\()p Fu(x)3001 100
+y Fn(1)3033 92 y Fu(;)11 b(:)g(:)g(:)g(;)h(x)3227 100
+y Fl(n)3267 92 y Ft(\))19 b(:)f Fi(D)3406 100 y Fg(2)3812
+92 y Fo(\(3\))2187 159 y(test)2187 225 y Ff(ff)2401 292
+y Fo(pre-opt)d(statements)2187 358 y Ff(gg)2187 424 y(ff)2401
+491 y Fo(post-opt)g(statements)2187 557 y Ff(gg)2639
+700 y Fz(\(a\))i(General)i(form)e(of)g(an)g(I-rule)p
+2095 798 1849 4 v 2187 875 a Fo(SOR)m(T)o Ft(\()p Fu(S)2399
+883 y Fn(1)2431 875 y Ft(\))i(:)f Fi(D)2570 883 y Fg(2)2625
+875 y Ft(=)-11 b Ff(\))19 b Fo(Mer)o(ge)p 2904 875 18
+4 v 21 w(sort)p Ft(\()p Fu(S)3076 883 y Fn(1)3108 875
+y Ft(\))g(:)f Fi(D)3247 883 y Fg(3)3812 875 y Fo(\(4\))2187
+958 y Ft(\()p Fi(D)2270 966 y Fg(2)2306 958 y Fu(:)p
+Fo(tuple)p 2445 958 V 20 w(order)e Ft(!)9 b(=)18 b Fo(DONT)p
+2862 958 V 21 w(CARE)o Ft(\))2187 1024 y Ff(ff)2401 1091
+y Fi(D)2458 1099 y Fg(3)2512 1091 y Ft(=)h Fi(D)2639
+1099 y Fg(2)2690 1091 y Ft(;)2187 1157 y Ff(gg)2187 1224
+y(ff)2401 1290 y Fi(D)2458 1298 y Fg(3)2493 1290 y Fu(:)p
+Fo(cost)g Ft(=)g Fi(D)2753 1298 y Fg(1)2788 1290 y Fu(:)p
+Fo(cost)2699 1356 y Ft(+\()p Fi(D)2833 1364 y Fg(3)2868
+1356 y Fu(:)p Fo(num)p 2994 1356 V 21 w(records)p Ft(\))c
+Ff(\003)h Ft(log\()p Fi(D)3442 1364 y Fg(3)3478 1356
+y Fu(:)p Fo(num)p 3604 1356 V 21 w(records)p Ft(\))f(;)2187
+1423 y Ff(gg)2630 1565 y Fz(\(b\))i(Mer)o(ge-sort)i(sort)e(algorithm)p
+3990 1688 4 1664 v 2046 1691 1947 4 v 3992 1708 19 1671
+v 2063 1708 1947 19 v 2771 1890 a FG(Figure)j(3:)27 b(I-rule)2044
+2113 y FF(pr)m(e-test)21 b FG(and)f FF(post-test)g FG(statements)h(of)f
+(the)g(T)-8 b(-rule.)3565 2083 y Ft(3)2046 2330 y FG(E)t
+Fz(X)t(A)t(M)t(P)t(L)t(E)24 b FG(4)t(.)142 b(The)14 b(associativity)h
+(of)g(JOINs)h(is)g(expressed)d(by)2044 2430 y(T)-8 b(-rule)19
+b(\(2\))h(in)g(Figure)g(2\(b\).)1082 b Fs(\003)2044 2683
+y Fx(2.4)99 b(Implementation)26 b(rules)2044 2844 y FG(Implementation)k
+(rules,)35 b(or)e(I-rules)f(for)g(short,)j(de\256ne)e(equiva-)2044
+2944 y(lences)e(between)g(expressions)g(and)g(their)g(implementing)f
+(algo-)2044 3043 y(rithms.)i(Let)23 b Fv(E)k FG(be)c(an)f(expression)f
+(and)g Fv(A)i FG(be)f(an)g(algorithm)f(that)2044 3143
+y(implements)26 b Fv(E)5 b FG(.)51 b(The)27 b(general)g(form)f(of)i(an)
+f(I-rule)g(is)i(given)d(by)2044 3242 y(Equation)18 b(\(3\))i(\(shown)f
+(in)h(Figure)g(3\(a\)\).)2127 3345 y(The)g(actions)h(associated)g(with)
+g(an)g(I-rule)f(are)h(de\256ned)e(in)j(three)2044 3445
+y(parts.)35 b(The)23 b(\256rst)h(part,)f(or)g FF(test)p
+FG(,)i(is)f(a)f(boolean)f(expression)f(whose)2044 3544
+y(value)e(determines)g(whether)h(or)f(not)h(the)h(rule)e(can)h(be)g
+(applied.)2123 3647 y(The)d(second)g(part,)g(or)g FF(pr)m(e-opt)f
+(statements)p FG(,)i(is)h(a)e(set)h(of)g(descrip-)2044
+3746 y(tor)23 b(assignment)g(statements)g(that)h(are)f(executed)f(only)
+h(if)h(the)f(test)2044 3846 y(is)i(true)f(and)f FF(befor)m(e)h
+FG(any)g(of)g(the)g(inputs)g Fv(x)3296 3858 y Fu(i)3349
+3846 y FG(of)g Fv(E)30 b FG(are)24 b(optimized.)2044
+3946 y(Additional)e(parameters)g(of)i(nodes)f(are)g(usually)g(assigned)
+g(in)h(the)2039 4045 y(pre-opt)15 b(section.)25 b(This)16
+b(is)h(necessary)f(before)f(any)h(of)f(the)i(nodes)e(on)2044
+4145 y(the)20 b(right)g(side)g(can)g(be)g(optimized.)2127
+4248 y(The)g(third)h(part,)g(or)f FF(post-opt)g(statements)p
+FG(,)h(is)h(a)g(set)f(of)g(descrip-)2044 4347 y(tor)i(assignment)f
+(statements)i(that)f(are)g(executed)f FF(after)i FG(all)g
+Fv(x)3859 4359 y Fu(i)3911 4347 y FG(are)2044 4447 y(optimized.)k
+(Normally)-5 b(,)19 b(the)i(post-opt)f(statements)h(compute)f(cost)2040
+4546 y(properties)c(that)h(can)g(only)g(be)g(determined)e(once)h(the)i
+(inputs)e(to)i(the)2044 4646 y(algorithm)i(are)i(completely)f
+(optimized)g(and)g(their)h(costs)h(known.)2044 4746 y(This)33
+b FF(does)g(not)p FG(,)j(however)m(,)e(imply)f(a)g(bottom-up)e
+(optimization)2044 4845 y(strategy)-5 b(.)41 b(It)26
+b(simply)e(means)h(that)h(although)d(I-rules)i(are)g(applied)2044
+4945 y(to)20 b(parents)g(before)g(their)g(children)f(are)i(optimized,)e
+(the)h FF(cost)i FG(\(and)p 2044 5028 788 4 v 2129 5081
+a Fr(3)2163 5105 y Fz(W)-5 b(e)19 b(suspect)i(it)e(is)h(possible)g(to)g
+(use)g(data-\257ow)g(analysis)h(to)f(partition)i(the)e(as-)2044
+5184 y(signment)i(statements)h(automatically)l(,)i(but)c(for)g(now)l(,)
+g(we)g(let)h(the)g(rule-writer)h(do)2044 5263 y(the)18
+b(partitioning.)p eop
+%%Page: 5 5
+5 4 bop -115 21 a FG(other)18 b(properties)f(in)h(the)h(post-opt)e
+(section\))g(of)h(the)h(parent)e(cannot)-112 120 y(be)j(computed)e
+(until)i(the)g(children)f(have)g(been)h(optimized.)-110
+326 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)k FG(5)t(.)146 b(Equation)19
+b(\(4\))g(\(in)h(Figure)f(3\(b\)\))g(shows)h(the)g(I-)-112
+425 y(rule)f(that)i(implements)e(the)h(SOR)-5 b(T)21
+b(operator)d(by)i(Mer)o(ge)p 1564 425 25 4 v 28 w(sort.)59
+b Fs(\003)-112 668 y Fx(2.5)99 b(Null)24 b(algorithm)-112
+826 y FG(Recall)g(that,)i(in)e(Section)g(1,)h(we)g(mentioned)d(that)i
+(Prairie)g(allows)-112 925 y(users)g(to)g(treat)g(all)g(operators)f
+(and)g(algorithms)g(as)i(\256rst-class)g(ob-)-112 1025
+y(jects,)g(i.e.,)g(all)f(operators)e(and)i(algorithms)f(are)g
+(explicit,)i(in)f(con-)-112 1125 y(trast)i(to)g(enforcers)e(in)h(V)-11
+b(olcano)25 b(or)h(glue)f(in)h(Starburst.)42 b(This)26
+b(re-)-119 1224 y(quires)15 b(that)g(Prairie)g(provide)f(a)h(mechanism)
+f(where)g(users)i(can)f(also)-112 1324 y(\252delete\272)21
+b(one)g(or)h(more)f(of)h(the)g(explicit)g(operators)e(from)h(expres-)
+-112 1423 y(sions.)33 b(This)23 b(is)g(done)f(by)g(having)f(a)i
+(special)f(class)i(of)e(I-rules)g(that)-115 1523 y(have)c(the)g(form)f
+(given)g(by)h(Equation)e(\(5\))i(in)g(Figure)g(4\(a\).)25
+b(The)18 b(left)-120 1623 y(side)c(of)f(the)h(rule)f(is)i(a)f(single)g
+(abstract)f(operator)f Fv(O)17 b FG(with)d(one)f(stream)-112
+1722 y(input)25 b Fv(S)136 1734 y Ft(1)173 1722 y FG(.)46
+b(The)26 b(right)g(side)g(of)g(the)h(rule)f(is)h(an)f(algorithm)f
+(called)-112 1822 y(\252Null\272)f(with)h(the)g(same)g(stream)g(input)f
+(but)h(with)g(a)g(dif)o(ferent)e(de-)-112 1922 y(scriptor)-5
+b(.)42 b(As)26 b(the)g(name)e(suggests,)j(the)e(Null)h(algorithm)e(is)i
+(sup-)-112 2021 y(posed)21 b(to)i(pass)g(its)g(input)f(unchanged)e(to)i
+(algorithms)f(above)h(it)h(in)-112 2121 y(an)h(operator)f(tree.)41
+b(This)25 b(is)h(accomplished)c(in)j(the)g(I-rule)f(as)h(fol-)-112
+2220 y(lows.)-29 2321 y(The)c(test)i(for)e(this)i(I-rule)e(is)i(always)
+f(TRUE,)g(i.e.,)g(any)g(node)f(in)-112 2421 y(an)g(operator)f(tree)i
+(with)g Fv(O)k FG(as)c(its)h(operator)d(can)i(be)g(implemented)-113
+2520 y(by)e(the)g(Null)g(algorithm.)25 b(The)20 b(actions)f(associated)
+h(with)g(this)g(rule)-115 2620 y(have)d(a)h(speci\256c)g(pattern.)25
+b(The)18 b(pre-opt)e(section)h(consists)i(of)e(three)-112
+2720 y(statements.)36 b(The)23 b(\256rst)h(statement)f(copies)g(the)h
+(descriptor)e(of)h(the)-116 2819 y(operator)16 b Fv(O)21
+b FG(to)d(the)g(algorithm)e(Null.)26 b(The)17 b(second)g(statement)h
+(sets)-112 2919 y(the)25 b(descriptor)e(of)i(the)g(stream)g
+Fv(S)892 2931 y Ft(1)955 2919 y FG(on)g(the)g(right)f(side)i(to)f(the)g
+(de-)-117 3018 y(scriptor)15 b(of)h(the)g(stream)g Fv(S)646
+3030 y Ft(1)700 3018 y FG(on)f(the)h(left)h(side.)26
+b(Why)16 b(is)h(it)f(necessary)-119 3118 y(to)e(do)g(this?)26
+b(The)14 b(key)g(lies)h(in)f(the)h(third)f(statement.)24
+b(This)15 b(statement)-117 3218 y(copies)h(the)g(property)f
+(\252property\272)e(of)k(the)f(operator)f Fv(O)k FG(node)c(on)h(the)
+-116 3317 y(left)i(side)g(to)g(the)f(\252property\272)e(of)j(the)f
+(input)g(stream)h Fv(S)1427 3329 y Ft(1)1482 3317 y FG(on)f(the)h
+(right)-112 3417 y(side.)32 b(Since)22 b(left-hand)e(side)j
+(descriptors)e(cannot)g(be)g(changed)g(in)-115 3517 y(an)c(I-rule,)g(a)
+h(new)g(descriptor)e Fj(D)840 3529 y Fi(3)900 3517 y
+FG(is)j(necessary)e(for)g Fv(S)1481 3529 y Ft(1)1537
+3517 y FG(to)g(convey)-112 3616 y(the)j(property)e(propagation)f
+(information.)-29 3717 y(The)48 b(post-opt)f(section)h(in)h(the)g
+(I-rule)e(has)i(only)f(a)h(cost-)-112 3817 y(assignment)44
+b(statement;)57 b(this)46 b(simply)e(sets)j(the)e(cost)g(of)g(the)-112
+3916 y(Null)20 b(node)f(to)h(the)h(cost)f(of)g(its)h(optimized)e(input)
+g(stream.)-31 4017 y(The)f(Null)g(algorithm,)g(therefore,)e(serves)j
+(to)g(ef)o(fectively)d(trans-)-112 4116 y(form)j(a)h(single)g(operator)
+f(to)h(a)h(no-op.)-110 4322 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)j
+FG(6)t(.)146 b(Equation)19 b(\(6\))g(\(in)h(Figure)f(4\(b\)\))g(shows)h
+(the)g(I-)-112 4422 y(rule)15 b(that)g(rewrites)g(the)h(SOR)-5
+b(T)16 b(operator)d(to)j(use)f(a)h(Null)g(algorithm.)-112
+4521 y Fs(\003)-112 4876 y FB(3)119 b(The)30 b(P2V)g(pr)n(e-pr)n
+(ocessor)-112 5063 y FG(In)38 b(Section)g(1,)43 b(we)c(enumerated)e
+(the)h(four)g(primary)f(goals)h(of)-112 5163 y(Prairie,)22
+b(viz.,)g(uniformity)e(in)i(operator)e(and)i(algorithms;)f(unifor)n(-)
+-112 5263 y(mity)i(in)h(properties;)h(uniformity)c(in)j
+(property-transformations;)p 2046 24 1947 4 v 2046 1887
+4 1864 v 2187 92 a Fu(O)r Ft(\()p Fu(S)2306 100 y Fn(1)2338
+92 y Ft(\))19 b(:)g Fi(D)2478 100 y Fg(2)2532 92 y Ft(=)-11
+b Ff(\))19 b Fo(Null)q Ft(\()p Fu(S)2828 100 y Fn(1)2879
+92 y Ft(:)f Fi(D)2973 100 y Fg(3)3009 92 y Ft(\))h(:)g
+Fi(D)3149 100 y Fg(4)3812 92 y Fo(\(5\))2187 159 y(TRUE)2187
+225 y Ff(ff)2401 292 y Fi(D)2458 300 y Fg(4)2512 292
+y Ft(=)g Fi(D)2639 300 y Fg(2)2690 292 y Ft(;)2401 358
+y Fi(D)2458 366 y Fg(3)2512 358 y Ft(=)g Fi(D)2639 366
+y Fg(1)2690 358 y Ft(;)2401 424 y Fi(D)2458 432 y Fg(3)2493
+424 y Fu(:)p Fo(property)h Ft(=)f Fi(D)2856 432 y Fg(2)2892
+424 y Fu(:)p Fo(property)c Ft(;)2187 491 y Ff(gg)2187
+557 y(ff)2401 624 y Fi(D)2458 632 y Fg(4)2493 624 y Fu(:)p
+Fo(cost)k Ft(=)g Fi(D)2753 632 y Fg(3)2788 624 y Fu(:)p
+Fo(cost)14 b Ft(;)2187 690 y Ff(gg)2559 833 y Fz(\(a\))j(General)i
+(form)e(of)g(a)g(\252Null\272)h(I-rule)p 2095 931 1849
+4 v 2187 1008 a Fo(SOR)m(T)o Ft(\()p Fu(S)2399 1016 y
+Fn(1)2431 1008 y Ft(\))h(:)f Fi(D)2570 1016 y Fg(2)2683
+1008 y Ft(=)-11 b Ff(\))19 b Fo(Null)p Ft(\()p Fu(S)2978
+1016 y Fn(1)3029 1008 y Ft(:)g Fi(D)3124 1016 y Fg(3)3160
+1008 y Ft(\))g(:)g Fi(D)3300 1016 y Fg(4)3812 1008 y
+Fo(\(6\))2187 1091 y(TRUE)2187 1157 y Ff(ff)2401 1224
+y Fi(D)2458 1232 y Fg(4)2512 1224 y Ft(=)g Fi(D)2639
+1232 y Fg(2)2690 1224 y Ft(;)2401 1290 y Fi(D)2458 1298
+y Fg(3)2512 1290 y Ft(=)g Fi(D)2639 1298 y Fg(1)2690
+1290 y Ft(;)2401 1356 y Fi(D)2458 1364 y Fg(3)2493 1356
+y Fu(:)p Fo(tuple)p 2632 1356 18 4 v 21 w(order)h Ft(=)f
+Fi(D)2919 1364 y Fg(2)2955 1356 y Fu(:)p Fo(tuple)p 3094
+1356 V 20 w(order)d Ft(;)2187 1423 y Ff(gg)2187 1489
+y(ff)2401 1556 y Fi(D)2458 1564 y Fg(4)2493 1556 y Fu(:)p
+Fo(cost)j Ft(=)g Fi(D)2753 1564 y Fg(3)2788 1556 y Fu(:)p
+Fo(cost)14 b Ft(;)2187 1622 y Ff(gg)2718 1765 y Fz(\(b\))j(Null)h(sort)
+f(algorithm)p 3990 1887 4 1864 v 2046 1890 1947 4 v 3992
+1907 19 1870 v 2063 1907 1947 19 v 2366 2090 a FG(Figure)j(4:)27
+b(The)20 b(\252Null\272)g(algorithm)f(concept)2044 2301
+y(and)37 b(ef)o(\256cient)f(generation)g(of)h(Prairie)g(optimizers.)78
+b(The)37 b(\256rst)2041 2401 y(three)18 b(goals)f(are)h(driven)f(by)g
+(the)h(need)g(for)f(conceptual)f(simplicity;)2044 2500
+y(however)m(,)33 b(they)f(alone)f(do)h(not)g(necessarily)g(generate)f
+(ef)o(\256cient)2044 2600 y(optimizers.)61 b(The)31 b(P2V)h
+(pre-processor)e(ensures)h(that)h(ef)o(\256cient)2044
+2700 y(optimizers)e(can)h(be)f(realized)h(from)f(Prairie)h
+(speci\256cations,)h(by)2044 2799 y(translating)c(them)i(to)f(the)h(V)
+-11 b(olcano)29 b(framework)e(and)i(then)g(gen-)2044
+2899 y(erating)22 b(an)h(optimizer)f(by)h(compiling)f(with)h(the)g(V)
+-11 b(olcano)22 b(search)2041 2999 y(engine.)j(This)18
+b(Prairie)g(optimizer)n(-generator)c(paradigm)i(is)j(shown)2044
+3098 y(schematically)j(in)h(Figure)f(5.)35 b(The)23 b(pre-processor)d
+(itself)k(is)f(4500)2044 3198 y(lines)f(of)g Fd(flex)g
+FG(and)g Fd(bison)f FG(code.)33 b(In)21 b(this)i(section,)f(we)h
+(brie\257y)2038 3297 y(describe)14 b(the)i(pre-processor)c(steps)k(and)
+f(explain)f(why)h(the)g(Prairie-)2044 3397 y(to-V)-11
+b(olcano)27 b(transformation)e(is)30 b(non-trivial.)49
+b(A)29 b(more)f(detailed)2044 3497 y(description)18 b(of)i(the)h
+(pre-processor)c(is)k(given)e(in)i([5].)2125 3596 y(The)d
+(speci\256cation)g(of)g(an)g(optimizer)f(in)i(V)-11 b(olcano)18
+b(consists)h(of)f(a)2043 3696 y(set)j(of)e(transformation)e(rules)j
+(\(called)f(\252trans)p 3386 3696 25 4 v 29 w(rules\272\))g(and)g
+(imple-)2037 3796 y(mentation)14 b(rules)h(\(called)f(\252impl)p
+2998 3796 V 29 w(rules\272\),)h(a)g(set)h(of)f(properties,)f(and)2038
+3895 y(some)h(support)e(functions.)24 b(The)15 b(join)g(associativity)g
+(trans)p 3737 3895 V 29 w(rule)g(\(cf.)2044 3995 y(Figure)k(2\(b\)\))g
+(in)h(V)-11 b(olcano)20 b(is)h(as)g(follows)3261 3965
+y Ft(4)3297 3995 y FG(:)2210 4155 y Ft(\()p Fo(JOIN)f(?op)p
+2469 4155 18 4 v 21 w(ar)o(g5)h Ft(\(\()p Fo(JOIN)g(?op)p
+2896 4155 V 21 w(ar)o(g4)g Ft(\(?1)g(?2\)\))g(?3\)\))2293
+4280 y Ff(\000)-23 b Fu(>)p Ft(\()p Fo(JOIN)20 b(?op)p
+2633 4280 V 21 w(ar)o(g7)h Ft(\(?1)g(\()p Fo(JOIN)g(?op)p
+3145 4280 V 21 w(ar)o(g6)g Ft(\(?2)g(?3\)\)\)\))2044
+4440 y FG(The)32 b(important)f(point)g(to)i(note)f(is)h(the)g(use)f(of)
+h FF(operator)e(ar)m(gu-)2044 4540 y(ments)21 b FG(\(denoted)e(by)h
+(\252op)p 2801 4540 25 4 v 29 w(ar)o(g\272)g(in)g(rules\);)h(these)g
+(ar)o(guments)e(con-)2044 4640 y(tain)i(properties)f(used)h(in)h(the)f
+(rule')-5 b(s)22 b(actions,)f(but)g(unlike)f(Prairie,)2044
+4739 y(they)31 b(do)g(not)h(contain)e FF(all)i FG(the)g(properties)e
+(of)i(an)f(operator)f(tree)2043 4839 y(node.)c(There)18
+b(are)i(other)f(property)e(classes,)k(like)e(algorithm)g(ar)o(gu-)2044
+4939 y(ment,)26 b(logical)e(property)-5 b(,)24 b(system)i(property)-5
+b(,)23 b(physical)i(property)-5 b(,)2044 5038 y(and)25
+b(cost.)44 b(Thus,)27 b(while)f(Prairie)g(uses)g(a)g(uniform)e
+(descriptor)h(to)p 2044 5107 788 4 v 2129 5160 a Fr(4)2163
+5184 y Fz(There)15 b(are)f(conditions)j(and)d(actions)i(associated)g
+(with)f(V)-9 b(olcano)16 b(rules)e(that)h(are)2044 5263
+y(not)i(shown)g(here.)p eop
+%%Page: 6 6
+6 5 bop -98 24 1923 4 v -98 1420 4 1397 v 371 1324 a
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 17.07164 128.0373
+119.50148 128.0373 119.50148 25.60745 17.07164 25.60745 /Lineto /lineto
+load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 153.64476
+102.42984 153.64476 102.42984 136.57312 34.14328 136.57312 /Lineto
+/lineto load def false Polygon gsave 1. setgray fill grestore gsave
+0.8 SLW 0. setgray 0 setlinecap stroke grestore end
+
+@endspecial 754 139 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 3.07344
+neg 47.33029 7.75298 .5 Frame gsave 1. setgray fill grestore end
+
+
+@endspecial Fo(Prairie)15 b(Rule)f(Set)371 1324 y @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 119.50148 68.28656 136.57312
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 34.14328 119.50148
+102.42984 119.50148 102.42984 102.42984 34.14328 102.42984 /Lineto
+/lineto load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap
+stroke grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial
+719 416 a(P2V)h(Pre-processor)371 1324 y @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 85.3582 68.28656 102.42984
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 85.3582 102.42984
+85.3582 102.42984 68.28656 34.14328 68.28656 /Lineto /lineto load
+def false Polygon gsave 0.5 setgray fill grestore gsave 0.8 SLW 0.
+setgray 0 setlinecap stroke grestore end
+
+@endspecial
+736 706 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 3.07344
+neg 51.4815 7.75298 .5 Frame gsave 1. setgray fill grestore end
+
+@endspecial(V)-7
+b(olcano)14 b(Rule)h(Set)371 1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 51.21492 68.28656 68.28656
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 34.14328 51.21492
+102.42984 51.21492 102.42984 34.14328 34.14328 34.14328 /Lineto /lineto
+load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial 843
+950 a(V)-7 b(olcano)694 1017 y(Optimizer)o(-Generator)371
+1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 17.07164 68.28656 34.14328
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 17.07164
+102.42984 17.07164 102.42984 0.0 34.14328 0.0 /Lineto /lineto load
+def false Polygon gsave 0.5 setgray fill grestore gsave 0.8 SLW 0.
+setgray 0 setlinecap stroke grestore end
+
+@endspecial 740 1267 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 4.51193
+neg 50.62743 7.75298 .5 Frame gsave 1. setgray fill grestore end
+
+
+@endspecial(Query)15 b(Optimizer)-948 b(Operator)15
+b(T)n(ree)371 1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 34.14328 8.53581 17.07164 8.53581
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 119.50148 8.53581 102.42984 8.53581
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial 1363 1273 a(Access)e(Plan)p
+1822 1420 V -98 1423 1923 4 v 1823 1440 19 1403 v -81
+1440 1923 19 v -112 1623 a FG(Figure)58 b(5:)105 b(The)59
+b(Prairie)g(optimizer)n(-generator)d(paradigm.)-112 1722
+y(Double-boxed)j(modules)k(represent)f(software)h(generators,)-112
+1822 y(shaded)35 b(boxes)g(represent)g(generated)f(programs.)72
+b(The)36 b(outer)n(-)-112 1922 y(most)f(double-boxed)d(portion)h
+(denotes)i(the)h(Prairie)f(optimizer)-112 2021 y(generator)-5
+b(.)-117 2223 y(encode)16 b(properties,)g(V)-11 b(olcano)16
+b(partitions)g(the)h(properties)e(into)h(dif-)-119 2323
+y(ferent)d(classes.)26 b(The)15 b(P2V)f(pre-processor)e(partitions)i(a)
+h(Prairie)f(de-)-112 2422 y(scriptor)22 b(into)g(the)h(dif)o(ferent)e
+(property)f(classes)k(required)d(by)i(V)-11 b(ol-)-112
+2522 y(cano.)26 b(This)21 b(is)g(a)g(non-trivial)d(task,)j(since)f(it)h
+(requires)e(parsing)h(the)-112 2621 y(Prairie)g(rules)g(and)f(their)h
+(actions.)-29 2721 y(Impl)p 134 2721 25 4 v 28 w(rules)29
+b(in)g(V)-11 b(olcano)28 b(defer)f(most)i(of)g(the)f(actions)h(associ-)
+-114 2821 y(ated)18 b(with)h(the)g(rules)f(to)h(support)e(functions.)25
+b(Each)18 b(algorithm)f(has)-119 2920 y(four)c(support)g(functions)g
+(associated)h(with)h(it.)26 b(A)15 b(Prairie)f(speci\256ca-)-113
+3020 y(tion,)19 b(on)g(the)h(other)f(hand,)f(contains)h(all)h(the)g
+(actions)f(in)h(the)g(corre-)-120 3120 y(sponding)13
+b(rule.)24 b(The)14 b(P2V)g(pre-processor)e(parses)i(a)h(Prairie)f
+(I-rule,)-112 3219 y(and)28 b(automatically)f(generates)g(all)j(the)e
+(V)-11 b(olcano)28 b(support)f(func-)-112 3319 y(tions)f(from)g(the)h
+(rule.)46 b(This)27 b(is)h(also)f(a)g(complex)e(process,)j(since)-116
+3418 y(it)17 b(depends)f(partly)g(on)h(the)g(partitioning)e(of)i
+(properties)f(mentioned)-114 3518 y(in)j(the)g(last)h(paragraph,)c(and)
+j(also)g(because)f(it)i(requires)e(relocating)-112 3618
+y(pieces)25 b(of)g(code)f(from)g(Prairie)h(rules)h(to)f(V)-11
+b(olcano)24 b(support)g(func-)-112 3717 y(tions.)-29
+3817 y(The)36 b(third)h(salient)g(feature)f(of)h(a)g(V)-11
+b(olcano)37 b(speci\256cation)f(is)-112 3917 y(the)27
+b(presence)g(of)h(implicit,)h(or)e(hidden,)h(algorithms,)h(called)e
+FF(en-)-112 4016 y(for)m(cers)p FG(.)59 b(In)30 b(Prairie,)j(all)f
+(algorithms)d(are)i(explicit.)58 b(Consider)m(,)-112
+4116 y(for)22 b(example,)h(the)g(Mer)o(ge)p 682 4116
+V 28 w(sort)h(algorithm)e(in)h(Figure)g(3\(b\).)35 b(In)23
+b(a)-112 4215 y(V)-11 b(olcano)20 b(speci\256cation,)g(this)h
+(algorithm)f(would)g(be)h(classi\256ed)g(as)-112 4315
+y(an)k(enforcer)m(,)f(since)h(it)h(enforces)e(the)i(sortedness)f
+(property)-5 b(.)39 b(The)-112 4415 y(P2V)33 b(pre-processor)d
+(determines)i(the)i(Prairie)f(algorithms)f(that)-112
+4514 y(are)d(functionally)f(V)-11 b(olcano)29 b(enforcers,)i(and)e
+(deletes)h(the)g(corre-)-115 4614 y(sponding)16 b(Prairie)h(rules)h(to)
+g(generate)f(the)h(V)-11 b(olcano)17 b(speci\256cation.)-112
+4714 y(This)40 b(requires)f(the)h(pre-processor)e(to)i(migrate)g(the)g
+(\(deleted\))-112 4813 y(rule')-5 b(s)20 b(actions)g(to)g(V)-11
+b(olcano)19 b(support)g(functions.)-29 4913 y(The)27
+b(P2V)i(pre-processor)c(also)k(generates)e(a)i(set)g(of)f(compact)-112
+5012 y(V)-11 b(olcano)24 b(rules)h(by)g(mer)o(ging)e(Prairie)i(rules)g
+(whenever)e(possible.)-112 5112 y(Consider)m(,)18 b(for)i(example,)f
+(the)h(following)f(set)i(of)f(rules)g(in)g(Prairie:)-103
+5263 y Fo(JOIN)p Ft(\()p Fu(S)90 5271 y Fn(1)122 5263
+y Fu(;S)183 5271 y Fn(2)215 5263 y Ft(\):)p Fi(D)317
+5271 y Fg(3)436 5263 y Fh(=)-14 b Fk(\))83 b Fo(JOPR)o
+Ft(\()p Fo(SOR)m(T)o Ft(\()p Fu(S)1026 5271 y Fn(1)1058
+5263 y Ft(\):)p Fi(D)1160 5271 y Fg(4)1196 5263 y Fu(;)p
+Fo(SOR)m(T)o Ft(\()p Fu(S)1428 5271 y Fn(2)1460 5263
+y Ft(\):)p Fi(D)1562 5271 y Fg(5)1597 5263 y Ft(\):)p
+Fi(D)1699 5271 y Fg(6)2127 21 y Fo(SOR)m(T)o Ft(\()p
+Fu(S)2339 29 y Fn(1)2371 21 y Ft(\):)p Fi(D)2473 29 y
+Fg(2)2592 21 y Fh(=)-14 b Fk(\))83 b Fo(Null)p Ft(\()p
+Fu(S)2979 29 y Fn(1)3011 21 y Ft(:)p Fi(D)3087 29 y Fg(3)3123
+21 y Ft(\):)p Fi(D)3225 29 y Fg(4)2044 145 y Fo(JOPR)o
+Ft(\()p Fu(S)2246 153 y Fn(1)2279 145 y Fu(;S)2340 153
+y Fn(2)2371 145 y Ft(\):)p Fi(D)2473 153 y Fg(3)2592
+145 y Fh(=)-14 b Fk(\))83 b Fo(Nested)p 2974 145 18 4
+v 20 w(loops)p Ft(\()p Fu(S)3184 153 y Fn(1)3216 145
+y Ft(:)p Fi(D)3292 153 y Fg(4)3328 145 y Fu(;S)3389 153
+y Fn(2)3421 145 y Ft(\):)p Fi(D)3523 153 y Fg(5)2044
+310 y FG(The)24 b(\256rst)g(rule)g(is)h(a)g(T)-8 b(-rule,)24
+b(and)g(the)g(next)f(two)i(are)f(I-rules.)37 b(The)2044
+410 y(P2V)25 b(pre-processor)e(combines)h(the)h(above)g(set)h(of)f
+(Prairie)g(rules)2044 509 y(into)20 b(a)g(single)g(I-rule,)2044
+674 y Fo(JOIN)p Ft(\()p Fu(S)2237 682 y Fn(1)2269 674
+y Fu(;S)2330 682 y Fn(2)2362 674 y Ft(\):)p Fi(D)2464
+682 y Fg(3)2582 674 y Fh(=)-14 b Fk(\))83 b Fo(Nested)p
+2964 674 V 20 w(loops)p Ft(\()p Fu(S)3174 682 y Fn(1)3206
+674 y Ft(:)p Fi(D)3282 682 y Fg(4)3318 674 y Fu(;S)3379
+682 y Fn(2)3411 674 y Ft(\):)p Fi(D)3513 682 y Fg(5)2044
+839 y FG(and)19 b(then)h(translates)g(it)h(into)f(a)h(single)f(V)-11
+b(olcano)19 b(impl)p 3625 839 25 4 v 29 w(rule.)2044
+1119 y FB(4)119 b(Experimental)30 b(r)n(esults)2044 1304
+y FG(This)k(section)g(presents)f(experimental)f(results)i(which)g
+(demon-)2044 1403 y(strate)e(the)g(value)g(of)g(Prairie)g(in)g
+(specifying)f(rule)h(sets)h(of)f(rule-)2044 1503 y(based)g(optimizers.)
+62 b(Our)32 b(experiments)e(consist)j(of)f(specifying)2043
+1603 y(rule-based)18 b(optimizers)h(using)g(Prairie)g(and)g(generating)
+f(optimiz-)2040 1702 y(ers)f(using)f(the)g(P2V)h(pre-processor)d(and)i
+(the)h(optimizer)n(-generator)2044 1802 y(paradigm)h(of)i(Figure)g(5.)
+2120 1901 y(In)14 b([4],)h(we)f(presented)g(an)g(implementation)e(of)i
+(a)h(centralized)e(re-)2041 2001 y(lational)18 b(query)f(optimizer)g
+(using)h(Prairie.)26 b(Using)18 b(the)g(P2V)h(trans-)2036
+2101 y(lator)m(,)14 b(we)g(translated)f(this)h(to)g(V)-11
+b(olcano)12 b(format)h(and)g(optimized)f(sev-)2044 2200
+y(eral)23 b(queries)g(using)f(the)h(resultant)g(optimizer)-5
+b(.)35 b(For)23 b(comparison,)2042 2300 y(we)18 b(hand-coded)e(the)i
+(same)h(optimizer)e(directly)h(in)g(V)-11 b(olcano.)26
+b(The)2039 2400 y(results)17 b(presented)f(there)g(showed)g(that,)h
+(using)f(Prairie)h(\(compared)2044 2499 y(to)30 b(directly)f(using)g(V)
+-11 b(olcano\))29 b(resulted)g(in)h(approximately)d(50\045)2044
+2599 y(savings)f(in)g(lines)g(of)g(code)g(with)g(negligible)f(\(less)i
+(than)e(5\045\))h(in-)2044 2698 y(crease)d(in)g(query)e(optimization)h
+(time.)35 b(However)m(,)22 b(the)h(optimizer)2044 2798
+y(was)i(quite)f(small)h(in)f(terms)h(of)f(the)g(number)f(of)h
+(operators,)g(algo-)2044 2898 y(rithms)c(and)f(rules.)2127
+2997 y(For)j(a)g(more)g(realistic)g(evaluation)f(of)h(Prairie,)g(we)h
+(needed)d(an-)2044 3097 y(swers)h(to)f(the)g(following)f(questions:)
+2106 3262 y(1.)41 b(Is)20 b(Prairie)h(adequate)d(for)i(lar)o(ge-scale)f
+(rule)h(sets?)2106 3427 y(2.)41 b(How)j(is)i(programmer)c(productivity)
+g(enhanced)h(by)h(the)2210 3527 y(high-level)18 b(abstractions)i(of)f
+(Prairie?)2106 3692 y(3.)41 b(Can)14 b(Prairie)h(rule)f(sets)h(be)g
+(translated)e(automatically)g(into)h(ef-)2210 3792 y(\256cient)20
+b(implementations?)2124 3957 y(W)-7 b(e)19 b(addressed)e(the)g(\256rst)
+i(question)e(by)g(using)g(the)h(T)-6 b(exas)18 b(Instru-)2044
+4057 y(ments)i(Open)g(OODB)i(query)d(optimizer)g(rule)i(set,)g(which)f
+(has)h(the)2036 4156 y(lar)o(gest)13 b(publicly)g(available)g(rule)h
+(set.)25 b(W)-7 b(e)15 b(describe)e(this)i(optimizer)2042
+4256 y(in)j(the)h(next)f(section,)g(and)g(then)g(give)g(our)f
+(assessments)i(to)g(the)f(last)2044 4356 y(two)i(questions)f(in)i
+(subsequent)d(sections.)2044 4592 y Fx(4.1)99 b(The)74
+b(T)-9 b(exas)73 b(Instruments)h(Open)g(OODB)2268 4709
+y(query)26 b(optimizer)2044 4864 y FG(The)45 b(T)-6 b(exas)46
+b(Instruments)e(Open)h(Object-Oriented)f(Database)2042
+4964 y(Management)17 b(System)i(is)h(an)f(open,)f(extensible,)g
+(object-oriented)2044 5063 y(database)49 b(system)g(which)g(provides)f
+(users)h(an)h(architectural)2044 5163 y(framework)27
+b(that)i(is)i(con\256gurable)c(in)i(an)g(incremental)f(manner)-5
+b(.)2044 5263 y(The)30 b(query)e(optimizer)h(in)i(the)f(Open)f(OODB)i
+([2])f(is)h(generated)p eop
+%%Page: 7 7
+7 6 bop -112 21 a FG(using)36 b(V)-11 b(olcano.)76 b(It)38
+b(is)g(written)e(as)i(a)g(set)f(of)g(trans)p 1513 21
+25 4 v 29 w(rules)g(and)-112 120 y(impl)p 46 120 V 29
+w(rules)42 b(that)h(de\256ne)f(the)g(algebra)g(of)g(an)h
+(object-oriented)-112 220 y(database)35 b(system.)73
+b(Currently)-5 b(,)38 b(there)d(are)g(17)g(transformation)-112
+319 y(rules)50 b(and)g(9)h(implementation)e(rules)h(together)g(with)h
+(about)-112 419 y Fh(13)p Fv(;)14 b Fh(000)21 b FG(lines)i(of)g(code)g
+(for)f(support)g(functions;)i(this,)g(of)f(course,)-112
+519 y(can)c(be)i(changed)d(by)i(an)g(Open)f(OODB)i(user)g(for)e
+(speci\256c)h(needs.)-112 769 y Fx(4.2)99 b(Pr)n(ogrammer)25
+b(pr)n(oductivity)-119 929 y FG(Programmer)13 b(productivity)f(can)j
+(be)g(measured)e(in)i(dif)o(ferent)e(ways.)-112 1029
+y(An)29 b(admittedly)f(simplistic)j(metric)e(is)h(the)g(number)e(of)h
+(lines)h(of)-112 1128 y(code)24 b(that)i(must)g(be)f(written.)43
+b(But)26 b(there)f(are)g(also)h(less)h(tangible)-116
+1228 y(measures,)17 b(such)h(as)g(the)f(amount)f(of)h(conceptual)f(ef)o
+(fort)g(needed)g(to)-112 1327 y(understand)k(a)k(particular)e
+(programming)d(task.)36 b(Our)23 b(experience)-112 1427
+y(with)d(the)h(Open)f(OODB)i(query)d(optimizer)g(suggests)i(that)g
+(Prairie)-113 1527 y(excels)g(on)e(the)i(latter)m(,)e(while)i(of)o
+(fering)c(modest)j(reductions)e(in)j(the)-112 1626 y(volume)d(of)i
+(code)g(that)g(needs)g(to)g(be)g(written.)-34 1728 y(W)-7
+b(e)17 b(converted)d(by)h(hand)g(the)i(Open)e(OODB)i(query)e(optimizer)
+s(')-5 b(s)-116 1828 y(V)-11 b(olcano)16 b(speci\256cations)g(to)h
+(Prairie.)26 b(This)17 b(was)h(a)f(non-trivial)e(task)-112
+1928 y(because)27 b(of)h(the)g(relatively)f(lar)o(ge)g(size)i(of)f(the)
+g(rule)f(set)i(and)f(the)-112 2027 y(complexity)f(of)j(the)g(support)e
+(functions.)55 b(This)30 b(was)g(where)f(we)-112 2127
+y(found)c(Prairie)j(helped)f(in)g(conceptually)f(simplifying)g(the)i
+(rules)-120 2226 y(and)13 b(actions.)24 b(W)-7 b(e)15
+b(then)e(used)h(our)f(P2V)h(pre-processor)d(to)j(reconsti-)-120
+2326 y(tute)g(these)f(Prairie)h(speci\256cations)f(as)i(V)-11
+b(olcano)13 b(speci\256cations.)24 b(As)-113 2426 y(described)18
+b(in)h(Section)h(3,)f(this)h(process)f(involved)f(a)i(considerable)-112
+2525 y(level)g(of)h(complexity)-5 b(,)19 b(partly)h(because)g(the)h
+(Prairie)g(speci\256cation)-116 2625 y(had)16 b(22)h(T)-8
+b(-rules)17 b(and)g(1)m(1)f(I-rules)h(compared)e(to)i(17)g(trans)p
+1537 2625 V 29 w(rules)g(and)-112 2725 y(9)24 b(impl)p
+112 2725 V 29 w(rules)g(in)g(the)g(V)-11 b(olcano)23
+b(speci\256cation;)i(the)f(reconstituted)-112 2824 y(V)-11
+b(olcano)28 b(speci\256cation)h(had)g(the)h(same)f(number)f(of)i(trans)
+p 1671 2824 V 29 w(rules)-112 2924 y(and)19 b(impl)p
+186 2924 V 29 w(rules)h(as)h(the)g(original)e(hand-coded)e
+(speci\256cation.)-36 3026 y(Converting)12 b(the)i(Open)g(OODB)h
+(optimizer)f(rule)g(set)h(into)f(Prairie)-112 3125 y(format)19
+b(actually)h(simpli\256ed)g(its)h(speci\256cation)f(as)h(the)g
+(complexi-)-112 3225 y(ties)i(of)g(the)g(V)-11 b(olcano)22
+b(model)h(were)f(removed.)34 b(The)22 b(reduction)g(in)-119
+3325 y(lines)16 b(of)e(code)h(was)g(modest)g(\320)g(there)g(was)g
+(about)f(a)i(10\045)e(savings.)1826 3295 y Ft(5)-112
+3424 y FG(However)m(,)24 b(as)h(mentioned)e(above,)h(savings)g(in)h
+(lines)g(of)f(code)g(do)-112 3524 y(not)j(adequately)f(re\257ect)i
+(increases)g(in)g(programmer)c(productiv-)-112 3624 y(ity)-5
+b(.)37 b(W)-7 b(e)24 b(found)e(the)i(encapsulated)e(speci\256cations)h
+(of)h(Prairie)f(\320)-117 3723 y(namely)-5 b(,)15 b(the)h(use)h(of)f(a)
+h(single)f(descriptor)f(and)g(fewer)h(explicit)g(sup-)-112
+3823 y(port)j(functions)g(\320)i(made)e(rule)h(programming)d
+FF(much)i FG(easier)-5 b(.)-112 4073 y Fx(4.3)99 b(Performance)81
+b(r)n(esults)f(using)f(the)i(Open)112 4189 y(OODB)24
+b(optimizer)-32 4349 y FG(The)17 b(acid)h(test)h(of)f(Prairie)g(was)g
+(whether)f(Prairie)h(speci\256cations)-117 4449 y(could)d(be)h
+(translated)g(into)g(ef)o(\256cient)f(optimizer)g(implementations.)-112
+4549 y(Our)24 b(experiments)f(using)h(the)h(Open)f(OODB)i(consisted)e
+(of)g(opti-)-112 4648 y(mizing)j(8)g(dif)o(ferent)f(queries)h(using)h
+(the)f(two)h(query)f(optimizers)-113 4748 y(generated,)19
+b(respectively)-5 b(,)18 b(using)i(Prairie)g(and)f(using)h(V)-11
+b(olcano)19 b(di-)-116 4847 y(rectly)e(\(in)g(the)g(remainder)f(of)h
+(this)h(section,)f(we)h(will)g(use)g(\252Prairie\272)-116
+4947 y(and)f(\252V)-11 b(olcano\272)17 b(to)g(denote)g(these)g(two)h
+(approaches\).)24 b(There)16 b(were)p -112 5028 788 4
+v -28 5081 a Fr(5)7 5105 y Fz(The)e(original)i(V)-9 b(olcano)17
+b(speci\256cation)g(had)e Fc(13)p Fb(;)d Fc(400)i Fz(lines,)i(the)f
+(Prairie)h(speci-)-112 5184 y(\256cation)d(had)g Fc(12)p
+Fb(;)f Fc(100)h Fz(lines,)g(and)g(the)g(P2V)-6 b(-generated)15
+b(V)-9 b(olcano)14 b(speci\256cation)h(had)-112 5263
+y Fc(15)p Fb(;)c Fc(800)18 b Fz(lines.)2042 21 y FG(4)h(distinct)g
+(expressions)e(that)i(were)g(used)f(to)h(generate)f(the)g(queries)2044
+120 y(used)i(in)h(the)g(experiments;)f(these)h(are)g(shown)f(in)h
+(Figure)f(6.)30 b(Each)2044 220 y(expression)19 b(represents)g(an)h
+Fv(N)9 b FG(-way)20 b(join)f(query)g(for)h(varying)e
+Fv(N)9 b FG(.)2127 329 y(The)26 b(\256rst)h(expression)f(E1)g(is)i(a)f
+(simple)f(retrieval)g(and)g(join)g(of)2044 429 y(base)21
+b(classes.)32 b(The)21 b(second,)f(E2,)h(is)i(also)e(a)h(join)f(of)g
+(base)h(classes;)2039 528 y(however)m(,)16 b(after)g(each)g(class)i
+(retrieval,)e(an)h(attribute)f(has)g(to)h(be)g(ma-)2043
+628 y(terialized)h(\(i.e.,)h(brought)e(into)i(view\))g(before)f(the)i
+(join.)26 b(The)19 b(third)2044 727 y(and)g(fourth)f(expressions)h
+(\(E3)h(and)f(E4\))h(are)g(the)g(same)g(as)h(the)f(\256rst)2044
+827 y(and)j(second)g(\(E1)g(and)g(E2\))g(respectively)-5
+b(,)22 b(except)h(that)h(there)f(is)i(a)2044 927 y(selection)e(of)g
+(attributes)g(\(the)g(select)h(operator)e(is)i(the)f(root)g(of)g(the)
+2044 1026 y(expressions\).)2482 996 y Ft(6)2127 1135
+y FG(The)e(algebra)f(that)h(was)h(used)f(in)g(the)h(Prairie)f(and)f(V)
+-11 b(olcano)21 b(op-)2044 1235 y(timizers)h(for)f(our)h(experiments)e
+(consisted)i(of)g(5)g(relational)f(oper)n(-)2044 1335
+y(ators)27 b(SELECT)-6 b(,)27 b(PROJECT)-6 b(,)28 b(JOIN,)f(RET)g(and)g
+(UNNEST)g(\(for)2042 1434 y(set-valued)18 b(attributes\))h(and)f(an)h
+(object-oriented)d(operator)i(called)2038 1534 y(MA)-9
+b(T)15 b(\(for)f(MA)-9 b(T)j(erialize;)16 b(it)g(is)g(fundamentally)c
+(a)k(pointer)n(-chasing)2044 1633 y(operator)i(for)i(attributes)f(of)h
+(a)h(class\).)27 b(There)20 b(were)g(8)g(algorithms.)2119
+1743 y(There)12 b(are)i(many)e(parameters)h(that)g(can)h(be)f(varied)g
+(when)g(bench-)2044 1842 y(marking)19 b(a)j(query)e(optimizer)-5
+b(.)30 b(Since)21 b(our)g(objective)f(was)i(to)f(ver)n(-)2043
+1942 y(ify)f(that)g(the)g(Prairie)g(approach)e(did)i(not)f(sacri\256ce)
+h(ef)o(\256ciency)-5 b(,)18 b(our)2044 2041 y(criteria)26
+b(for)f(the)i(queries)e(was)i(that)f(they)g(test)h(a)g(majority)e(of)h
+(the)2036 2141 y(rules,)14 b(with)g(varying)d(properties)i(of)g(the)g
+(base)h(classes.)25 b(T)-6 b(o)14 b(this)g(end,)2044
+2241 y(we)21 b(tested)h(our)e(optimizer)g(\(and)g(the)h(V)-11
+b(olcano)20 b(optimizer\))g(with)h(8)2044 2340 y(dif)o(ferent)g
+(queries)h(\(shown)g(in)i(T)-6 b(able)23 b(3\).)35 b(The)23
+b(eight)g(queries)f(Q1)2044 2440 y(through)d(Q8)j(are)g(derived)e(from)
+h(the)h(4)g(expressions)e(in)i(Figure)f(6.)2039 2540
+y(Each)16 b(expression)f(E1)i(through)d(E4)i(is)h(used)g(to)f(obtain)g
+(two)g(queries)2044 2639 y(for)k(a)h(\256xed)f(number)f
+Fv(N)29 b FG(of)21 b(JOINs)g(in)g(the)f(expression.)27
+b(The)20 b(only)2039 2739 y(dif)o(ference)13 b(between)i(the)h(two)g
+(queries)f(obtained)g(from)g(an)g(expres-)2043 2838 y(sion)k(is)i(that)
+e(the)h(\256rst)g(one)f(does)g(not)h(contain)e(any)h(indices)g(on)g
+(any)2044 2938 y(classes,)25 b(whereas)d(the)h(second)g(one)f(contains)
+h(a)g(single)g(index)f(on)2044 3038 y(each)f(base)i(class)g(occurring)c
+(in)j(the)g(expression.)31 b(In)22 b(expressions)2041
+3137 y(where)17 b(a)h(SELECT)g(is)g(present)f(\(E3)h(and)f(E4\),)g(the)
+h(selection)f(pred-)2044 3237 y(icate)k(is)g(a)g(conjunction)d(of)i
+(equality)g(predicates)f FF(bc)3584 3249 y Fu(i)3636
+3237 y Fh(==)k FF(const)3964 3249 y Fu(i)3992 3237 y
+FG(,)2042 3337 y(where)17 b FF(bc)2342 3349 y Fu(i)2388
+3337 y FG(is)j(an)e(attribute)g(of)g(class)h FF(C)3179
+3349 y Fu(i)3207 3337 y FG(,)g(and)f FF(const)3561 3349
+y Fu(i)3608 3337 y FG(is)h(a)g(constant)2044 3436 y(\(we)k(arbitrarily)
+e(set)j(this)f(to)g Fv(i)p FG(,)g(because)g(its)g(value)g(doesn')o(t)e
+(af)o(fect)2035 3536 y(the)14 b(correctness)e(or)h(performance)e(of)i
+(the)g(optimizer\).)23 b(In)13 b(addition,)2041 3635
+y(for)18 b(queries)g(with)g(a)h(SELECT)f(and)g(whose)g(base)g(classes)i
+(have)e(in-)2040 3735 y(dices)f(\(Q6)f(and)h(Q8)f(in)h(T)-6
+b(able)17 b(3\),)g(the)g(\(single\))f(index)g(of)g(each)h(base)2044
+3835 y(class)22 b(was)g(chosen)e(to)h(be)g(the)g(attribute)g
+(referenced)e(in)i(the)g(selec-)2044 3934 y(tion)27 b(predicate.)46
+b(For)27 b(example,)h(class)g FF(C)3293 3946 y Fu(i)3348
+3934 y FG(was)g(chosen)e(to)i(have)2042 4034 y(an)18
+b(index)g(on)g(attribute)g FF(bc)2819 4046 y Fu(i)2847
+4034 y FG(.)27 b(The)18 b(join)h(predicates)e(for)h(each)h(JOIN)2037
+4134 y(were)14 b(chosen)f(at)i(random,)f(and)f(were)h(always)h
+(equality)e(predicates.)2039 4233 y(The)j(choice)f(of)h(JOIN)h
+(predicates)e(was)i(such)f(that)g(the)h(queries)e(cor)n(-)2044
+4333 y(responded)j(to)j(linear)g(query)e(graphs.)27 b(In)21
+b(the)f(future,)g(we)h(will)g(ex-)2044 4432 y(periment)e(with)h
+(non-linear)e(\(e.g.,)h(star\))h(query)f(graphs.)2127
+4542 y(T)-6 b(able)52 b(3)g(also)h(shows)f(the)h(number)d(of)i(trans)p
+3654 4542 25 4 v 29 w(rules)h(and)p 2044 4633 788 4 v
+2129 4687 a Fr(6)2163 4710 y Fz(The)17 b(most)g(complex)i(expression)g
+(E4)e(consists)h(of)f(all)h(operators)h(in)f(the)g(alge-)2044
+4789 y(bra,)24 b(except)h(PROJECT)d(and)h(UNNEST)-5 b(.)21
+b(PROJECT)h(was)g(not)i(considered)h(be-)2044 4868 y(cause)16
+b(it)g(appeared)i(in)d(only)h(one)g(impl)p 2948 4868
+20 4 v 25 w(rule)g(and)g(no)f(trans)p 3411 4868 V 25
+w(rules,)h(and)g(thus,)f(would)2044 4947 y(not)22 b(af)o(fect)h(the)f
+(size)g(of)f(the)i(search)f(space)h(of)e(abstract)j(expressions.)37
+b(UNNEST)2044 5026 y(was)20 b(not)h(considered)h(because)g(it)f
+(appeared)i(in)d(exactly)j(one)e(trans)p 3657 5026 V
+25 w(rule)g(and)g(one)2044 5105 y(impl)p 2169 5105 V
+24 w(rule;)g(including)g(it)e(in)g(our)f(queries)i(would)g(have)f
+(increased)i(the)e(number)g(of)2044 5184 y(parameters)f(that)g(could)f
+(af)o(fect)h(our)f(run-times.)23 b(W)-5 b(e)16 b(preferred)i(to)f
+(concentrate)j(on)2044 5263 y(simple)d(JOIN)g(expressions.)p
+eop
+%%Page: 8 8
+8 7 bop -112 24 2130 4 v -112 1001 4 978 v -37 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+
+-37 707 a Fa(C)-10 719 y Fn(1)-47 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ -47 618 a Fm(RET)-7
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 152 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 152 707 a Fa(C)179 719 y Fn(2)142
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 142 618 a Fm(RET)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 42 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoingetcl1getcl2 16 {
+.5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 42
+524 a Fm(JOIN)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 182
+415 a
+ tx@Dict begin 45. Rot end
+ 182 415 a 143 418 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 143 418 a Fl(:)10 b(:)g(:)182
+415 y
+ tx@Dict begin 45. neg Rot end
+ 182 415 a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ -7 699 a 331 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 331 429 a
+Fm(RET)336 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 336 520 a Fa(C)364 528 y Fl(n)-7 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 231 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 231 335 a Fm(JOIN)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ -7 699
+a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 100 881 a Fz(\(a\))17 b(E1)p 447
+976 4 928 v 476 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 476 707 a Fa(C)504 719 y Fn(1)467
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 467 618 a Fm(RET)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 665 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+
+665 707 a Fa(C)693 719 y Fn(2)656 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 656 618 a Fm(RET)506
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 463 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl1 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 463 524 a Fm(MA)-5 b(T)506
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl1
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 652 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl2 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 652 524 a Fm(MA)g(T)506 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 556 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoinmatgetcl1matgetcl2
+16 { .5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 556 429 a Fm(JOIN)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506
+699 a 506 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 695 321 a
+ tx@Dict begin 45. Rot end
+ 695 321 a 656 324
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 656 324 a Fl(:)11 b(:)f(:)695 321 y
+ tx@Dict begin 45. neg Rot end
+ 695 321 a 506 699
+a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 506 699 a 845 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 845 429 a Fm(RET)850 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 850
+520 a Fa(C)878 528 y Fl(n)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 841 335
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcln 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 841 335 a Fm(MA)-5 b(T)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodematgetcln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 745 240
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 745 240 a Fm(JOIN)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 506 699 a 506 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodematgetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506
+699 a 611 881 a Fz(\(b\))17 b(E2)p 961 976 4 928 v 990
+707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 990 707 a Fa(C)1018 719 y Fn(1)981 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 981 618
+a Fm(RET)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1179 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 1179 707 a
+Fa(C)1207 719 y Fn(2)1170 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1170 618 a Fm(RET)1020
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1070 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoingetcl1getcl2 16 {
+.5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1070 524 a Fm(JOIN)1020 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1209 415 a
+ tx@Dict begin 45. Rot end
+ 1209 415
+a 1170 418 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 1170 418 a Fl(:)11 b(:)f(:)1209 415 y
+ tx@Dict begin 45. neg Rot end
+ 1209
+415 a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699 a 1359 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1359 429 a Fm(RET)1364
+520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 1364 520 a Fa(C)1392 528 y Fl(n)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020
+699 a 1259 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1259 335 a Fm(JOIN)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699
+a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1227 240 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodeselect 16 { .5 3.39499
+0.05246 false .5 18.3349 InitRnode } NewNode end end
+ 1227 240 a Fm(SELECT)1020
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodeselect
+/TheNoderoot InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699 a 1127 881 a Fz(\(c\))17 b(E3)p 1474 976
+4 928 v 1504 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 1504 707 a Fa(C)1531 719 y Fn(1)1495
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1495 618 a Fm(RET)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1693 707
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 1693 707 a Fa(C)1720 719 y Fn(2)1684 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1684 618
+a Fm(RET)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1490 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl1 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 1490 524 a
+Fm(MA)-5 b(T)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl1
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1679 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl2 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 1679 524
+a Fm(MA)g(T)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1583 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoinmatgetcl1matgetcl2
+16 { .5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1583 429
+a Fm(JOIN)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a
+1723 321 a
+ tx@Dict begin 45. Rot end
+ 1723 321 a 1684 324 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 1684 324 a Fl(:)10 b(:)h(:)1723
+321 y
+ tx@Dict begin 45. neg Rot end
+ 1723 321 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1873 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1873
+429 a Fm(RET)1878 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 1878 520 a Fa(C)1905 528 y Fl(n)1534
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1868 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcln 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 1868 335 a Fm(MA)-5 b(T)1534
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodematgetcln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1772 240 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1772 240 a Fm(JOIN)1534 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodematgetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1741 146 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodeselect 16 { .5 3.39499
+0.05246 false .5 18.3349 InitRnode } NewNode end end
+ 1741 146
+a Fm(SELECT)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodeselect
+/TheNoderoot InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1639 881 a Fz(\(d\))17
+b(E4)p 2014 1001 4 978 v -112 1004 2130 4 v 2015 1021
+19 984 v -96 1021 2130 19 v -112 1204 a FG(Figure)g(6:)26
+b(Expressions)17 b(used)h(in)g(generating)e(queries)i(for)f
+(experiments)p 2359 357 1644 13 v 2359 423 4 67 v 2412
+437 a Fp(Query)p 2620 423 V 2673 443 a(Indices?)p 2930
+423 V 2983 437 a(Expr)o(ession)p 3306 423 V 3471 403
+a(Rules)e(matched)p 3999 423 V 3309 427 694 4 v 2359
+490 4 67 v 2620 490 V 2930 490 V 3306 490 V 3359 470
+a Fo(trans)p 3475 470 18 4 v 21 w(rules)p 3656 490 4
+67 v 103 w(impl)p 3818 470 18 4 v 22 w(rules)p 3999 490
+4 67 v 2359 502 1644 13 v 2359 569 4 67 v 2456 549 a(Q1)p
+2620 569 V 214 w(No)p 2930 569 V 3087 588 a(E1)p 3306
+569 V 316 w(3)p 3656 569 V 318 w(3)p 3999 569 V 2359
+572 575 4 v 2359 635 4 67 v 2456 615 a(Q2)p 2620 635
+V 207 w(Y)-6 b(es)p 2930 635 V 3306 635 V 3656 635 V
+3999 635 V 2359 638 1644 4 v 2359 705 4 67 v 2456 685
+a(Q3)p 2620 705 V 214 w(No)p 2930 705 V 3087 725 a(E2)p
+3306 705 V 3468 724 a(8)p 3656 705 V 3815 725 a(4)p 3999
+705 V 2359 708 575 4 v 2359 771 4 67 v 2456 751 a(Q4)p
+2620 771 V 207 w(Y)g(es)p 2930 771 V 3306 771 V 3656
+771 V 3999 771 V 2359 775 1644 4 v 2359 841 4 67 v 2456
+821 a(Q5)p 2620 841 V 214 w(No)p 2930 841 V 3087 860
+a(E3)p 3306 841 V 316 w(9)p 3656 841 V 3815 861 a(5)p
+3999 841 V 2359 844 575 4 v 2359 907 4 67 v 2456 887
+a(Q6)p 2620 907 V 207 w(Y)g(es)p 2930 907 V 3306 907
+V 3656 907 V 3999 907 V 2359 911 1644 4 v 2359 977 4
+67 v 2456 957 a(Q7)p 2620 977 V 214 w(No)p 2930 977 V
+3087 997 a(E4)p 3306 977 V 302 w(16)p 3656 977 V 3815
+996 a(7)p 3999 977 V 2359 980 575 4 v 2359 1044 4 67
+v 2456 1024 a(Q8)p 2620 1044 V 207 w(Y)g(es)p 2930 1044
+V 3306 1044 V 3656 1044 V 3999 1044 V 2359 1056 1644
+13 v 2566 1204 a FG(T)g(able)20 b(3:)27 b(Queries)20
+b(used)g(in)h(experiments)-112 1554 y(impl)p 46 1554
+25 4 v 29 w(rules)37 b(that)h(are)f(matched)g(by)g(each)g(expression.)
+78 b(These)-112 1653 y(are)21 b(the)g(rules)g(whose)g(left)g(hand)f
+(sides)i(match)f(a)g(sub-expression.)-112 1753 y(However)m(,)f(not)h
+(all)h(the)g(rules)f(were)h(necessarily)f(applicable.)30
+b(For)-112 1853 y(instance,)25 b(an)g(impl)p 469 1853
+V 29 w(rule)f(with)i(an)e(index)g(scan)h(would)f(not)h(apply)-112
+1952 y(to)20 b(Q3,)g(although)e(it)j(might)f(apply)f(to)h(Q4.)-29
+2054 y(Queries)32 b(Q1)h(through)e(Q8)i(were)g(optimized)f(for)g
+(increasing)-119 2153 y(number)12 b Fv(N)24 b FG(of)15
+b(JOINs.)25 b(For)15 b(a)g(\256xed)f(number)e(of)j(JOINs)g(in)g(a)g
+(query)-5 b(,)-112 2253 y(we)21 b(varied)f(the)g(cardinalities)h(of)f
+(the)h(base)g(classes)h(5)f(times,)g(each)-112 2353 y(time)g
+(generating)f(a)i(query)f(with)h(dif)o(ferent)d(class)k(properties,)d
+(and)-112 2452 y(averaged)e(the)j(run-times)e(over)h(the)h(5)f(query)g
+(instances)g(to)h(gener)n(-)-114 2552 y(ate)d(the)h(per)n(-query)d
+(optimization)h(time.)27 b(Thus,)18 b(each)g(point)g(in)h(our)-112
+2652 y(graphs)25 b(represents)g(the)h(average)f(of)h(5)g(queries.)44
+b(The)26 b(run-times)-112 2751 y(were)f(measured)395
+2721 y Ft(7)457 2751 y FG(using)h(the)g(GNU)g Fd(time)g
+FG(command.)43 b(All)26 b(ex-)-112 2851 y(periments)f(were)h(performed)
+e(on)i(a)h(lightly)f(loaded)f(DECstation)-112 2950 y(5000/200)17
+b(running)h(Ultrix)i(4.2.)-37 3052 y(The)14 b(optimization)e(times)i
+(for)g(each)f(query)g(for)g(both)g(approaches)-120 3152
+y(\(Prairie)h(and)g(V)-11 b(olcano\))13 b(are)h(shown)g(in)g(Figures)g
+(7\(a\))f(through)f(7\(h\).)-112 3251 y(The)25 b(number)f(of)i(joins)g
+(in)g(each)g(set)g(of)g(graphs)f(was)h(varied)f(to)h(a)-112
+3351 y(maximum)18 b(of)i(8,)g(or)g(until)g(virtual)f(memory)g(was)i
+(exhausted.)-29 3452 y(The)i(\256rst)h(set)g(of)f(graphs)f(\(Figures)h
+(7\(a\))g(and)f(7\(b\)\))g(shows)i(the)-112 3552 y(performance)j(of)k
+(a)g(simple)g(relational-type)d(query)-5 b(.)57 b(The)30
+b(opti-)-117 3652 y(mization)16 b(times)h(are)g(almost)g(identical)f
+(between)g(Prairie)h(and)f(V)-11 b(ol-)-112 3751 y(cano,)21
+b(and)h(the)g(notable)f(point)h(is)h(that)f(the)h(presence)e(of)h(an)g
+(index)-120 3851 y(does)14 b(not)g(change)f(the)h(optimizer)s(')-5
+b(s)13 b(behavior)m(,)g(i.e.,)i(the)f(two)g(graphs)-112
+3951 y(are)20 b(identical.)28 b(This)21 b(arises)g(because)f(the)g
+(optimizer)g(algebra)f(had)-118 4050 y(only)d(two)g(join)g(algorithms)e
+(\(pointer)h(join)g(and)h(hash)g(join\),)g(neither)-112
+4150 y(of)j(which)h(makes)g(use)g(of)g(any)g(indices.)-29
+4251 y(The)25 b(second)g(set)i(of)f(graphs)f(\(Figures)g(7\(c\))h(and)f
+(7\(d\)\))g(shows)-118 4351 y(the)16 b(results)g(of)f(optimizing)g(Q3)g
+(and)h(Q4.)25 b(Here,)16 b(as)h(in)f(Figures)f(7\(a\))-114
+4451 y(and)j(7\(b\),)g(the)h(presence)f(\(or)g(absence\))g(of)g
+(indices)h(makes)g(no)f(dif-)-118 4550 y(ference.)24
+b(Both)16 b(the)f(Prairie)h(and)f(V)-11 b(olcano)15 b(approaches)e
+(have)i(com-)-117 4650 y(parable)g(run-times.)24 b(The)16
+b(sharp)f(jump)g(in)i(the)f(graphs)f(from)g(7-way)-115
+4750 y(to)j(8-way)f(joins)h(is)h(due)e(to)h(the)g(fact)g(that)g(since)g
+(all)g(optimization)f(is)-113 4849 y(done)i(in)h(main)f(memory)-5
+b(,)17 b(dynamic)i(memory)f(allocation)g(\(caused)-112
+4949 y(by)j Fd(malloc)h FG(calls\))h(results)f(in)h(a)g(lot)f(of)g
+(thrashing)f(at)i(this)g(point.)p -112 5028 788 4 v -28
+5081 a Fr(7)7 5105 y Fz(Since)j(the)g(run-times)h(were)f(too)f(small)h
+(to)g(be)f(measured)h(accurately)j(with)-112 5184 y Fy(time)p
+Fz(,)19 b(each)i(query)g(instance)h(was)e(optimized)i(3000)f(times)f
+(\(in)h(a)f(loop\))h(and)f(the)-112 5263 y(total)e(time)g(was)f
+(divided)i(by)e(3000)g(to)g(get)h(the)g(per)o(-query)g(optimization)j
+(time.)2042 1554 y FG(W)-7 b(e)20 b(speculate)e(that)h(in)g(systems)g
+(with)g(more)f(virtual)g(memory)-5 b(,)17 b(the)2044
+1653 y(graphs)i(will)i(be)f(smoother)-5 b(.)2122 1758
+y(The)16 b(third)f(and)h(fourth)e(sets)j(of)f(graphs)f(in)h(Figures)g
+(7\(e\))f(through)2043 1857 y(7\(h\))k(are)h(optimizations)f(of)g
+(queries)h(with)g(a)g(selection)g(predicate.)2039 1957
+y(In)c(these)g(cases,)h(the)g(presence)e(of)g(an)i(index)e(makes)g(a)i
+(dif)o(ference)d(if)2044 2057 y(the)20 b(index)g(is)i(referenced)c(in)j
+(the)g(selection)f(predicate)f(\(as)i(we)g(de-)2042 2156
+y(signed\).)26 b(Also,)19 b(in)g(these)h(two)f(\256gures,)f(the)h
+(performance)e(of)h(both)2040 2256 y(Prairie)g(and)e(V)-11
+b(olcano)17 b(was)h(almost)f(identical,)g(except)g(that)h(Prairie)2044
+2356 y(does)29 b(slightly)g(worse)g(due)g(to)h(the)f(lar)o(ger)f
+(number)g(of)h Fd(malloc)2044 2455 y FG(calls)23 b(that)g(the)f(P2V)h
+(translator)f(introduces.)32 b(Also,)24 b(note)e(that)h(we)2043
+2555 y(could)c(only)g(go)g(up)h(to)g(3-way)f(joins)g(before)g(virtual)g
+(memory)f(was)2044 2654 y(exhausted.)31 b(As)23 b(the)f(available)g
+(memory)e(decreases,)i(there)g(is)h(in-)2039 2754 y(creased)16
+b(thrashing)f(\(as)i(shown)f(by)g(the)g(sharp)g(changes)g(in)g(slope)g
+(in)2044 2854 y(the)k(plots\))g(resulting)f(in)i(a)f(much)f(slower)h
+(optimization)f(process.)2127 2958 y(In)j(all)h(four)f(sets)i(of)e
+(plots,)h(we)g(can)f(see)i(that)e(Prairie)h(performs)2044
+3058 y(with)f(almost)g(\(less)h(than)f Fh(5\045)g FG(variation\))e(the)
+j(same)f(ef)o(\256ciency)e(as)2044 3158 y(V)-11 b(olcano.)29
+b(In)21 b(extreme)f(cases,)i(when)e(memory)g(is)i(scarce,)f(Prairie)
+2040 3257 y(runs)c(more)g(slowly)h(\(about)e Fh(15\045)p
+FG(\))h(\(e.g.,)g(Figure)f(7\(f\)\),)h(but)g(we)h(be-)2044
+3357 y(lieve)25 b(that)g(this)h(situation)f(already)f(represents)h(a)h
+(serious)f(bottle-)2044 3456 y(neck)19 b(for)h(both)f(V)-11
+b(olcano)19 b(and)h(Prairie.)2120 3561 y(The)14 b(results)i(presented)d
+(in)i(this)g(section)f(show)h(that)g(Prairie)f(opti-)2039
+3661 y(mizers)i(need)f(not)h(sacri\256ce)g(ef)o(\256ciency)e(for)i
+(clarity)-5 b(,)15 b(even)h(for)f(lar)o(ge)2038 3760
+y(rule)h(sets.)26 b(More)15 b(research)g(and)g(validation)f(is)j
+(necessary)e(to)h(verify)2044 3860 y(that)k(Prairie)g(is)h(an)f(ef)o
+(\256cient)g(tool)g(for)f(optimizer)g(speci\256cation.)2044
+4166 y FB(5)119 b(Related)31 b(r)n(esear)n(ch)2041 4361
+y FG(The)18 b(System)g(R)i(optimizer)d([1)m(1])g(was)h(the)h(most)f
+(important)e(devel-)2044 4461 y(opment)j(in)j(query)d(optimization)h
+(research.)28 b(It)22 b(was)g(a)f(cost-based)2044 4560
+y(centralized)h(relational)g(query)g(optimizer)g(and)g(introduced)f(a)i
+(va-)2044 4660 y(riety)i(of)h(key)f(concepts)g(like)h
+(\252interesting\272)f(expressions,)h(cardi-)2043 4759
+y(nality)20 b(estimation)f(using)h(selectivity)f(factors)h(and)f
+(dynamic)g(pro-)2044 4859 y(gramming)28 b(with)j(pruning)e(of)h(search)
+g(space.)59 b(These)30 b(concepts)2044 4959 y(continue)18
+b(to)j(be)f(important)f(in)h(query)f(optimizer)g(research.)2127
+5063 y(The)29 b(query)g(optimizer)g(in)h(R)3005 5033
+y Ff(\003)3074 5063 y FG([3])f(works)h(in)g(essentially)g(the)2039
+5163 y(same)17 b(way)f(as)h(that)g(of)f(System)g(R,)h(except)f(that)g
+(R)3480 5133 y Ff(\003)3536 5163 y FG(is)h(a)g(distributed)2044
+5263 y(database)32 b(system)g(which)g(introduces)f(some)h(subtle)g
+(complica-)p eop
+%%Page: 9 9
+9 8 bop -104 24 1935 4 v -104 3720 4 3696 v 66 714 a
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q1.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 418 m
+621 537 l
+822 661 l
+1023 789 l
+1225 909 l
+1426 1046 l
+1627 1183 l
+1828 1320 l
+2030 1449 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 537 30 0 360 arc
+gsave fill grestore
+stroke
+822 661 30 0 360 arc
+gsave fill grestore
+stroke
+1023 789 30 0 360 arc
+gsave fill grestore
+stroke
+1225 909 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1046 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1183 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1320 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1449 30 0 360 arc
+gsave fill grestore
+stroke
+420 421 m
+621 541 l
+822 670 l
+1023 801 l
+1225 935 l
+1426 1066 l
+1627 1229 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+420 451 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+621 571 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+822 700 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+1023 831 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+1225 965 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+1426 1096 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+1627 1259 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 843 a Fz(\(a\))17 b(Query)h(1)974 714
+y @beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q2.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+420 418 m
+621 539 l
+822 664 l
+1023 783 l
+1225 906 l
+1426 1037 l
+1627 1176 l
+1828 1304 l
+2030 1451 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 539 30 0 360 arc
+gsave fill grestore
+stroke
+822 664 30 0 360 arc
+gsave fill grestore
+stroke
+1023 783 30 0 360 arc
+gsave fill grestore
+stroke
+1225 906 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1037 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1176 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1304 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1451 30 0 360 arc
+gsave fill grestore
+stroke
+420 412 m
+621 533 l
+822 661 l
+1023 796 l
+1225 926 l
+1426 1063 l
+1627 1212 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+420 442 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+621 563 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+822 691 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+1023 826 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+1225 956 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+1426 1093 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+1627 1242 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 843 a(\(b\))f(Query)h(2)p -34 943 1816
+4 v 66 1633 a @beginspecial 50.187500 @llx 50.187500
+@lly 501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q3.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 401 m
+621 489 l
+822 578 l
+1023 672 l
+1225 762 l
+1426 865 l
+1627 969 l
+1828 1076 l
+2030 1574 l
+stroke
+420 401 30 0 360 arc
+gsave fill grestore
+stroke
+621 489 30 0 360 arc
+gsave fill grestore
+stroke
+822 578 30 0 360 arc
+gsave fill grestore
+stroke
+1023 672 30 0 360 arc
+gsave fill grestore
+stroke
+1225 762 30 0 360 arc
+gsave fill grestore
+stroke
+1426 865 30 0 360 arc
+gsave fill grestore
+stroke
+1627 969 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1076 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1574 30 0 360 arc
+gsave fill grestore
+stroke
+420 402 m
+621 485 l
+822 568 l
+1023 644 l
+1225 736 l
+1426 821 l
+1627 918 l
+1828 1019 l
+2030 1511 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+420 432 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+621 515 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+822 598 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+1023 674 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+1225 766 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+1426 851 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+1627 948 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+1828 1049 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+2030 1541 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 1761 a(\(c\))f(Query)h(3)974 1633 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q4.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+420 400 m
+621 492 l
+822 575 l
+1023 669 l
+1225 759 l
+1426 866 l
+1627 962 l
+1828 1069 l
+2030 1578 l
+stroke
+420 400 30 0 360 arc
+gsave fill grestore
+stroke
+621 492 30 0 360 arc
+gsave fill grestore
+stroke
+822 575 30 0 360 arc
+gsave fill grestore
+stroke
+1023 669 30 0 360 arc
+gsave fill grestore
+stroke
+1225 759 30 0 360 arc
+gsave fill grestore
+stroke
+1426 866 30 0 360 arc
+gsave fill grestore
+stroke
+1627 962 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1069 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1578 30 0 360 arc
+gsave fill grestore
+stroke
+420 400 m
+621 484 l
+822 567 l
+1023 645 l
+1225 735 l
+1426 823 l
+1627 915 l
+1828 1024 l
+2030 1517 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+420 430 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+621 514 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+822 597 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+1023 675 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+1225 765 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+1426 853 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+1627 945 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+1828 1054 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+2030 1547 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 1761 a(\(d\))f(Query)h(4)p -34 1861
+V 66 2551 a @beginspecial 50.187500 @llx 50.187500 @lly
+501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q5.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 552 m
+430 552 l
+420 728 m
+430 728 l
+420 904 m
+430 904 l
+420 1081 m
+430 1081 l
+420 1257 m
+430 1257 l
+420 1433 m
+430 1433 l
+420 1609 m
+430 1609 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 552 m
+2020 552 l
+2030 728 m
+2020 728 l
+2030 904 m
+2020 904 l
+2030 1081 m
+2020 1081 l
+2030 1257 m
+2020 1257 l
+2030 1433 m
+2020 1433 l
+2030 1609 m
+2020 1609 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 728 m
+440 728 l
+420 1081 m
+440 1081 l
+420 1433 m
+440 1433 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 728 m
+2010 728 l
+2030 1081 m
+2010 1081 l
+2030 1433 m
+2010 1433 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 728 m
+gsave
+348 728 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1081 m
+gsave
+348 1081 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1433 m
+gsave
+348 1433 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 424 m
+956 511 l
+1493 671 l
+2030 1778 l
+stroke
+420 424 30 0 360 arc
+gsave fill grestore
+stroke
+956 511 30 0 360 arc
+gsave fill grestore
+stroke
+1493 671 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1778 30 0 360 arc
+gsave fill grestore
+stroke
+420 426 m
+956 522 l
+1493 688 l
+2030 1737 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+420 456 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+956 552 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+1493 718 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+2030 1767 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 2679 a(\(e\))f(Query)h(5)974 2551 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q6.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 386 l
+956 376 m
+956 386 l
+1493 376 m
+1493 386 l
+2030 376 m
+2030 386 l
+420 1785 m
+420 1775 l
+956 1785 m
+956 1775 l
+1493 1785 m
+1493 1775 l
+2030 1785 m
+2030 1775 l
+stroke
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 415 m
+956 490 l
+1493 633 l
+2030 1651 l
+stroke
+420 415 30 0 360 arc
+gsave fill grestore
+stroke
+956 490 30 0 360 arc
+gsave fill grestore
+stroke
+1493 633 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1651 30 0 360 arc
+gsave fill grestore
+stroke
+420 416 m
+956 493 l
+1493 631 l
+2030 1462 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+420 446 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+956 523 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+1493 661 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+2030 1492 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1178 2679 a(\(f\))f(Query)h(6)p -34 2780
+V 66 3469 a @beginspecial 50.187500 @llx 50.187500 @lly
+501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q7.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-83 1080 m
+gsave
+-83 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 425 m
+956 510 l
+1493 670 l
+2030 1637 l
+stroke
+420 425 30 0 360 arc
+gsave fill grestore
+stroke
+956 510 30 0 360 arc
+gsave fill grestore
+stroke
+1493 670 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1637 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 501 l
+1493 648 l
+2030 1470 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+956 531 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+1493 678 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+2030 1500 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 265 3597 a(\(g\))f(Query)h(7)974 3469 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q8.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 421 m
+956 504 l
+1493 650 l
+2030 1549 l
+stroke
+420 421 30 0 360 arc
+gsave fill grestore
+stroke
+956 504 30 0 360 arc
+gsave fill grestore
+stroke
+1493 650 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1549 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 502 l
+1493 647 l
+2030 1475 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+956 532 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+1493 677 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+2030 1505 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 3597 a(\(h\))f(Query)h(8)p 1827 3720
+4 3696 v -104 3723 1935 4 v 1829 3740 19 3703 v -87 3740
+1935 19 v -38 3922 a FG(Figure)i(7:)27 b(Query)19 b(optimization)g
+(times)h(for)g(Q1)g(through)e(Q8)-112 4158 y(tions)i(in)g(its)h(query)e
+(optimizer)-5 b(.)-29 4266 y(The)23 b(Starburst)h(query)e(optimizer)h
+([10])g(uses)h(rules)g(for)g(all)g(de-)-112 4366 y(cisions)j(that)g
+(need)f(to)i(be)f(taken)f(by)h(the)g(query)e(optimizer)-5
+b(.)47 b(The)-116 4466 y(rules)18 b(are)f(functional)f(in)i(nature)e
+(and)h(transform)f(a)i(given)f(operator)-112 4565 y(tree)j(into)g
+(another)-5 b(.)26 b(The)20 b(rules)h(are)f(commonly)e(those)i(that)h
+(re\257ect)-112 4665 y(relational)26 b(calculus)i(facts.)49
+b(In)27 b(Starburst,)i(the)f(query)e(rewriting)-112 4764
+y(phase)21 b(is)i(dif)o(ferent)d(from)i(the)g(optimization)e(phase.)33
+b(The)21 b(rewrit-)-119 4864 y(ing)15 b(phase)f(transforms)f(the)i
+(query)f(itself)h(into)g(equivalent)e(operator)-112 4964
+y(trees)21 b(based)g(on)f(relational)g(calculus)h(rules.)30
+b(The)20 b(plan)h(optimiza-)-114 5063 y(tion)d(phase)h(selects)g
+(algorithms)f(for)g(each)g(operator)f(in)i(the)g(opera-)-114
+5163 y(tor)f(tree)h(that)g(is)g(obtained)e(after)i(rewriting.)25
+b(The)18 b(disadvantage)f(of)-112 5263 y(separating)k(the)h(query)f
+(rewrite)h(and)g(the)h(optimization)e(phases)h(is)2041
+21 y(that)c(pruning)e(of)h(the)h(search)g(space)g(is)h(not)e(possible)h
+(during)e(query)2044 120 y(rewrite,)j(since)i(the)f(rewrite)g(phase)g
+(is)h(non-cost-based.)2127 228 y(Freytag)h([6])h(describes)f(a)i
+(rule-based)d(query)h(optimizer)g(simi-)2044 328 y(lar)f(to)g
+(Starburst.)28 b(The)20 b(rules)h(are)g(based)f(on)g(LISP-like)h
+(represen-)2040 427 y(tations)c(of)f(access)i(plans.)25
+b(The)17 b(rules)f(themselves)h(are)g(recursively)2044
+527 y(de\256ned)26 b(on)g(smaller)i(expressions)e(\(operator)e
+(trees\).)48 b(Although)2044 627 y(several)22 b(expressions)g(can)h
+(contain)e(a)j(common)d(sub-expression,)2044 726 y(Freytag)e(doesn')o
+(t)f(consider)h(the)h(possibility)g(of)g(sharing.)25
+b(Expres-)2044 826 y(sions)c(are)g(evaluated)f(each)h(time)h(they)e
+(are)i(encountered.)27 b(This)21 b(is)2040 926 y(obviously)16
+b(inef)o(\256cient.)25 b(In)17 b(addition,)f(as)j(in)e(Starburst,)g(he)
+h(doesn')o(t)2044 1025 y(consider)i(the)h(cost)h(transformations)d
+(inherent)h(in)h(any)g(query)f(op-)2044 1125 y(timizer;)g(rules)g(are)g
+(syntactic)g(transformation)e(rules.)2127 1233 y(EXODUS)j([9])g
+(provides)e(an)i(optimizer)f(generator)g(which)g(ac-)2044
+1332 y(cepts)k(a)g(rule-based)e(speci\256cation)h(of)g(the)h(data)g
+(model)f(as)h(input.)2042 1432 y(The)19 b(optimizer)f(generator)f
+(compiles)i(these)g(rules,)g(together)f(with)2042 1532
+y(pre-de\256ned)e(rules,)j(to)f(generate)g(an)g(optimizer)g(for)g(the)g
+(particular)2044 1631 y(data)25 b(model)g(and)g(set)h(of)f(operators.)
+41 b(Unlike)25 b(Freytag,)h(the)g(opti-)2043 1731 y(mizer)18
+b(generator)f(for)i(EXODUS)g(allows)h(for)e(C)i(code)f(along)f(with)
+2037 1831 y(de\256nitions)13 b(of)i(new)f(rules.)25 b(This)15
+b(allows)f(the)h(database)f(implemen-)2039 1930 y(tor)i(the)g(freedom)f
+(to)h(associate)h(any)f(action)f(with)i(a)f(particular)f(rule.)2041
+2030 y(Operator)i(trees)h(in)g(EXODUS)g(are)g(constructed)e(bottom-up)g
+(from)2044 2129 y(previously)i(constructed)h(trees.)2121
+2237 y(The)d(V)-11 b(olcano)14 b(optimizer)h(generator)f(project)g([7])
+h(evolved)g(from)2044 2337 y(the)22 b(EXODUS)g(project.)31
+b(It)22 b(is)g(dif)o(ferent)e(from)h(all)h(the)g(above)f(op-)2044
+2437 y(timizers)j(in)h(one)e(signi\256cant)h(way:)35
+b(it)25 b(is)h(a)e(top-down)e(optimizer)2042 2536 y(compared)17
+b(with)i(the)f(bottom-up)f(strategy)h(of)g(the)h(others.)26
+b(Opera-)2041 2636 y(tor)17 b(trees)h(are)f(optimized)f(starting)i
+(from)e(the)i(root)e(while)i(sub-trees)2041 2735 y(are)h(not)e(yet)i
+(optimized.)25 b(This)18 b(leads)g(to)h(a)f(constraint-driven)d(gen-)
+2044 2835 y(eration)23 b(of)h(the)g(search)f(space.)38
+b(While)25 b(this)f(method)f(results)h(in)h(a)2040 2935
+y(tight)17 b(control)e(of)i(the)g(search)g(space,)g(it)h(is)f
+(unconventional)d(and)i(re-)2044 3034 y(quires)24 b(careful)f
+(attention)h(on)g(the)h(part)f(of)g(the)g(optimizer)g(imple-)2043
+3134 y(mentor)19 b(to)h(ensure)g(that)g(legal)g(operator)e(trees)i(are)
+g(not)g(accidently)2044 3234 y(left)25 b(out)f(of)h(the)g(search)f
+(space.)41 b(W)-7 b(e)26 b(have)f(used)f(V)-11 b(olcano)24
+b(as)i(our)2044 3333 y(back-end)18 b(search)i(engine.)2044
+3658 y FB(6)119 b(Conclusion)31 b(and)g(futur)n(e)f(work)2044
+3859 y FG(Current)24 b(rule-based)f(query)g(optimizers)h(do)g(not)h
+(provide)e(a)i(very)2044 3959 y(intuitive)20 b(and)g(conceptually)f
+(streamlined)h(framework)f(to)i(de\256ne)2044 4059 y(rules)26
+b(and)g(actions.)45 b(Our)26 b(experiences)e(with)j(the)f(V)-11
+b(olcano)26 b(opti-)2044 4158 y(mizer)e(generator)e(suggest)i(that)g
+(its)i(model)d(of)h(rules)g(and)g(the)g(ex-)2044 4258
+y(pression)i(of)h(these)g(rules)g(is)h(much)e(more)g(complicated)g(and)
+g(too)2042 4358 y(low-level)19 b(than)f(it)i(needs)f(to)g(be.)26
+b(As)20 b(a)g(consequence,)c(rule)j(sets)h(in)2043 4457
+y(V)-11 b(olcano)19 b(are)g(fragile,)g(hard)g(to)h(write,)f(and)h
+(debug.)25 b(Similar)19 b(prob-)2044 4557 y(lems)i(may)f(exist)h(in)g
+(other)f(contemporary)d(rule-based)i(query)h(op-)2044
+4656 y(timizers.)2126 4764 y(W)-7 b(e)21 b(believe)d(that)i(rule-based)
+e(query)g(optimizers)g(will)j(be)e(stan-)2044 4864 y(dard)i(tools)i(of)
+f(future)g(database)g(systems.)34 b(The)23 b(pragmatic)e(dif)o(\256-)
+2044 4964 y(culties)g(of)h(using)f(existing)f(rule-based)g(optimizers)h
+(led)g(us)h(to)f(de-)2044 5063 y(velop)f(Prairie,)g(an)h(extensible)f
+(and)g(structured)g(algebraic)f(frame-)2044 5163 y(work)j(for)h
+(specifying)f(rules.)36 b(Prairie)23 b(is)h(similar)g(to)f(existing)g
+(op-)2044 5263 y(timizers)33 b(in)g(that)f(it)i(supports)e(both)g
+(transformation)e(rules)j(and)p eop
+%%Page: 10 10
+10 9 bop -112 21 a FG(implementation)21 b(rules.)37 b(However)m(,)23
+b(Prairie)g(makes)h(several)f(im-)-112 120 y(provements:)-50
+291 y(1.)41 b(it)14 b(of)o(fers)e(a)i(conceptually)d(more)h
+(streamlined)h(model)f(for)h(rule)54 390 y(speci\256cation;)-50
+562 y(2.)41 b(rules)18 b(are)g(encapsulated,)e(there)i(are)g(no)g
+(\252hidden\272)e(operators)54 662 y(or)j(\252hidden\272)g(algorithms;)
+-50 834 y(3.)41 b(implementation)19 b(hints)i(\(e.g.,)f(enforcers\))g
+(are)h(deduced)e(au-)54 933 y(tomatically;)-50 1105 y(4.)41
+b(and)19 b(it)i(has)g(ef)o(\256cient)e(implementations.)-29
+1276 y(W)-7 b(e)26 b(have)e(explained)f(how)i(the)f(\256rst)i(three)f
+(points)f(are)h(impor)n(-)-113 1376 y(tant)20 b(for)f(simplifying)f
+(rule)h(speci\256cations)g(and)h(making)e(rule)h(sets)-112
+1475 y(less)27 b(brittle)g(for)f(extensibility)-5 b(.)45
+b(A)27 b(consequence)e(is)i(that)g(Prairie)-112 1575
+y(rules)20 b(are)h(simpler)f(and)g(more)g(robust)f(than)i(rules)f(of)g
+(existing)h(op-)-112 1674 y(timizers)j(\(e.g.,)h(V)-11
+b(olcano\).)40 b(W)-7 b(e)25 b(addressed)f(the)h(fourth)e(point)h(by)
+-112 1774 y(building)g(a)j(P2V)g(pre-processor)c(which)j(uses)h
+(sophisticated)f(al-)-112 1874 y(gorithms)e(to)j(compose)e(and)g
+(compact)g(a)i(Prairie)f(rule)g(set)h(into)e(a)-112 1973
+y(V)-11 b(olcano)23 b(rule)g(set.)39 b(T)-6 b(o)24 b(demonstrate)f(the)
+h(scalability)f(of)h(our)f(ap-)-113 2073 y(proach,)c(we)h(rewrote)g
+(the)g(TI)g(Open)g(OODB)h(rule)e(set)i(as)g(a)g(Prairie)-113
+2173 y(rule)e(set,)h(generated)d(its)k(V)-11 b(olcano)18
+b(counterpart,)f(and)i(showed)g(that)-113 2272 y(the)h(performance)d
+(of)j(the)f(synthesized)g(V)-11 b(olcano)19 b(rule)h(set)g(closely)-112
+2372 y(matches)f(the)i(hand-crafted)c(V)-11 b(olcano)19
+b(rule)h(set.)-29 2473 y(Our)25 b(future)g(work)g(will)i(concentrate)d
+(on)i(developing)d(higher)n(-)-120 2573 y(level)15 b(abstractions)e
+(using)h(Prairie,)h(including)d(automatically)h(gen-)-116
+2672 y(erating)k(Prairie)h(rule)f(sets,)i(and)e(combining)f(multiple)h
+(Prairie)g(rule)-112 2772 y(sets)k(to)f(automatically)f(generate)g(ef)o
+(\256cient)g(optimizers.)-112 3059 y FB(Acknowledgments)-112
+3247 y FG(W)-7 b(e)30 b(wish)g(to)g(thank)f(T)-6 b(exas)30
+b(Instruments,)g(Inc.)f(for)g(making)g(the)-119 3347
+y(Open)14 b(OODB)i(source)e(code)g(available)g(to)h(us.)25
+b(Comments)14 b(by)h(Jos)5 b(\302)-33 b(e)-112 3447 y(Blakeley)-5
+b(,)23 b(Anne)h(Ngu,)g(V)-5 b(ivek)23 b(Singhal,)h(Thomas)f(W)-7
+b(oo)24 b(and)g(the)-113 3546 y(anonymous)18 b(referees)h(greatly)h
+(improved)e(the)i(quality)f(of)h(the)g(pa-)-112 3646
+y(per)-5 b(.)-112 3934 y FB(Refer)n(ences)-71 4122 y
+FG([1])40 b(D.)16 b(S.)f(Batory)-5 b(.)19 b(Building)14
+b(blocks)g(of)h(database)f(management)67 4221 y(systems.)26
+b(T)-6 b(echnical)18 b(Report)g(TR\26187\26123,)e(The)i(University)67
+4321 y(of)i(T)-6 b(exas)20 b(at)h(Austin,)f(February)f(1988.)-71
+4493 y([2])40 b(Jos)5 b(\302)-33 b(e)37 b(A.)g(Blakeley)-5
+b(,)39 b(W)m(illiam)e(J.)g(McKenna,)i(and)d(Goetz)67
+4592 y(Graefe.)j(Experiences)21 b(building)f(the)j(Open)e(OODB)i(query)
+67 4692 y(optimizer)-5 b(.)27 b(In)19 b FF(Pr)m(oceedings)e(1993)h(ACM)
+i(SIGMOD)f(Inter)n(-)67 4792 y(national)27 b(Confer)m(ence)h(on)g
+(Management)e(of)i(Data)p FG(,)i(pages)67 4891 y(287\261296,)17
+b(W)-7 b(ashington,)20 b(May)f(1993.)-71 5063 y([3])40
+b(Dean)33 b(Daniels,)k(Patricia)c(Selinger)m(,)j(Laura)c(Haas,)37
+b(Bruce)67 5163 y(Lindsay)-5 b(,)25 b(C.)g(Mohan,)g(Adrian)f(W)-7
+b(alker)m(,)26 b(and)e(Paul)h(W)m(ilms.)67 5263 y(An)14
+b(introduction)c(to)k(distributed)e(query)g(compilation)f(in)j(R)1797
+5232 y Ff(\003)1835 5263 y FG(.)2224 21 y(In)22 b FF(Pr)m(oceedings)f
+(2nd)h(International)e(Confer)m(ence)i(on)h(Dis-)2224
+120 y(tributed)k(Databases)p FG(,)i(pages)f(291\261309,)f(Berlin,)j
+(Septem-)2224 220 y(ber)19 b(1982.)2085 386 y([4])41
+b(Dinesh)29 b(Das)h(and)e(Don)h(Batory)-5 b(.)74 b(Prairie:)45
+b(An)29 b(algebraic)2224 486 y(framework)37 b(for)j(rule)g
+(speci\256cation)f(in)h(query)f(optimiz-)2224 585 y(ers.)92
+b(In)33 b FF(Pr)m(oceedings)e(of)i(the)g(W)-8 b(orkshop)33
+b(on)f(Database)2224 685 y(Query)14 b(Optimizer)g(Generators)g(and)g
+(Rule-Based)e(Optimiz-)2224 784 y(ers)p FG(,)21 b(pages)e(139\261154,)e
+(Dallas,)k(September)e(1993.)2085 950 y([5])41 b(Dinesh)28
+b(Das)h(and)f(Don)g(Batory)-5 b(.)69 b(Prairie:)43 b(A)29
+b(rule)f(speci-)2224 1050 y(\256cation)h(framework)e(for)i(query)f
+(optimizers.)75 b(T)-6 b(echnical)2224 1150 y(Report)22
+b(TR)h(94\26116,)e(The)h(University)g(of)g(T)-6 b(exas)22
+b(at)h(Austin,)2224 1249 y(May)d(1994.)2085 1415 y([6])41
+b(Johann)15 b(Christoph)h(Freytag.)21 b(A)d(rule-based)d(view)h(of)g
+(query)2224 1515 y(optimization.)80 b(In)30 b FF(Pr)m(oceedings)f(1987)
+h(ACM)h(SIGMOD)2224 1615 y(International)37 b(Confer)m(ence)j(on)f
+(Management)f(of)j(Data)p FG(,)2224 1714 y(pages)19 b(173\261180,)e
+(San)k(Francisco,)e(May)h(1987.)2085 1880 y([7])41 b(Goetz)33
+b(Graefe.)94 b(V)-11 b(olcano,)36 b(an)d(extensible)g(and)g(parallel)
+2224 1980 y(query)23 b(evaluation)g(system.)53 b(T)-6
+b(echnical)24 b(Report)h(CU\261CS\261)2224 2080 y(481\26190,)14
+b(University)i(of)g(Colorado)f(at)i(Boulder)m(,)e(July)i(1990.)2085
+2246 y([8])41 b(Goetz)24 b(Graefe.)48 b(Query)24 b(evaluation)e
+(techniques)h(for)h(lar)o(ge)2224 2345 y(databases.)66
+b FF(ACM)28 b(Computing)f(Surveys)p FG(,)i(25\(2\):73\261170,)2224
+2445 y(June)20 b(1993.)2085 2611 y([9])41 b(Goetz)29
+b(Graefe)h(and)f(David)g(J.)i(DeW)m(itt.)78 b(The)30
+b(EXODUS)2224 2710 y(optimizer)21 b(generator)-5 b(.)42
+b(In)23 b FF(Pr)m(oceedings)e(1987)h(ACM)i(SIG-)2224
+2810 y(MOD)40 b(International)d(Confer)m(ence)i(on)g(Management)f(of)
+2224 2910 y(Data)p FG(,)19 b(pages)h(387\261394,)d(San)j(Francisco,)g
+(May)g(1987.)2044 3076 y([10])40 b(L.)23 b(M.)g(Haas,)h(J.)g(C.)g
+(Freytag,)e(G.)i(M.)f(Lohman,)f(and)g(H.)i(Pi-)2224 3175
+y(rahesh.)31 b(Extensible)20 b(query)f(processing)h(in)h(Starburst.)32
+b(Re-)2224 3275 y(search)20 b(Report)g(RJ)i(6610,)e(IBM)h(Almaden)e
+(Research)i(Cen-)2224 3375 y(ter)m(,)e(December)g(1988.)2047
+3541 y([1)m(1])40 b(P)-9 b(.)33 b(G.)g(Selinger)m(,)h(M.)f(M.)g
+(Astrahan,)i(D.)e(D.)g(Chamberlin,)2224 3640 y(R.)28
+b(A.)h(Lorie,)g(and)f(T)-6 b(.)28 b(G.)g(Price.)69 b(Access)29
+b(path)e(selection)2224 3740 y(in)d(a)g(relational)f(database)g
+(management)f(system.)47 b(In)23 b FF(Pr)m(o-)2224 3840
+y(ceedings)k(1979)g(ACM)i(SIGMOD)f(International)e(Confer)n(-)2224
+3939 y(ence)g(on)h(Management)e(of)i(Data)p FG(,)h(pages)e(23\26134,)g
+(Boston,)2224 4039 y(May)20 b(1979.)2044 4205 y([12])40
+b(Michael)30 b(Stonebraker)f(and)i(Lawrence)f(A.)i(Rowe.)84
+b(The)2224 4305 y(design)25 b(of)h(Postgres.)60 b(In)26
+b FF(Pr)m(oceedings)f(1986)g(ACM)i(SIG-)2224 4404 y(MOD)40
+b(International)d(Confer)m(ence)i(on)g(Management)f(of)2224
+4504 y(Data)p FG(,)19 b(pages)h(340\261355,)d(W)-7 b(ashington,)19
+b(May)h(1986.)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex/contrib/utthesis/ICDE-11/paper.tex b/macros/latex/contrib/utthesis/ICDE-11/paper.tex
new file mode 100644
index 0000000000..369c8ea786
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/paper.tex
@@ -0,0 +1,251 @@
+\documentclass[twocolumn]{article}
+\setlength{\oddsidemargin}{-0.1875in}
+\setlength{\evensidemargin}{-0.1875in}
+\setlength{\columnsep}{0.3125in}
+\setlength{\topmargin}{-0.75in}
+\setlength{\textheight}{8.875in}
+\setlength{\textwidth}{6.875in}
+\setlength{\headheight}{0.3in}
+\setlength{\marginparwidth}{.7in}
+\setcounter{topnumber}{2}
+\setcounter{bottomnumber}{2}
+\renewcommand{\topfraction}{1.0}
+\renewcommand{\bottomfraction}{1.0}
+\renewcommand{\textfraction}{.00}
+\setcounter{totalnumber}{4}
+
+%\setlength{\floatsep}{0pt plus 2pt minus 2pt}
+\setlength{\textfloatsep}{4pt plus 2pt minus 4pt}
+
+\usepackage{amssymb}
+\usepackage{amstext}
+\usepackage{array}
+\usepackage{boxedminipage}
+\usepackage{calc}
+\usepackage{citesort}
+\usepackage[dvips]{epsfig}
+\usepackage{fancybox}
+\usepackage{fancyheadings}
+\usepackage{fleqn}
+\usepackage{hhline}
+\usepackage{multirow}
+\usepackage{psboxit}
+\usepackage{pst-node}
+\usepackage{pstricks}
+\usepackage{stretch}
+\usepackage{subfigure}
+\usepackage{theorem}
+\usepackage{times}
+\usepackage{timestamp}
+\usepackage{verbatim}
+\usepackage{xspace}
+
+\PScommands
+
+\setlength{\mathindent}{0in}
+
+\renewcommand{\baselinestretch}{1.0}
+\newcommand{\eg}{e.g.,\xspace}
+\newcommand{\ie}{i.e.,\xspace}
+\newcommand{\etc}{etc.\@\xspace}
+\makeatletter
+\newcommand{\preprint}
+ {\pagestyle{empty}
+ \newcommand{\firstpage}
+ {\thispagestyle{plain}
+ \makeatletter
+ \renewcommand{\ps@plain}{
+ \renewcommand{\@oddhead}{\fbox{To appear in \textit{Proceedings
+ 11th International Conference on
+ Data Engineering},
+ Taipei, March 1995}}
+ \renewcommand{\@evenhead}{}
+ \renewcommand{\@evenfoot}{}
+ \renewcommand{\@oddfoot}{}}
+ \makeatother}}
+\newcommand{\reprint}
+ {\pagestyle{empty}
+ \newcommand{\firstpage}
+ {\thispagestyle{plain}
+ \makeatletter
+ \renewcommand{\ps@plain}{
+ \renewcommand{\@oddhead}{\fbox{In \textit{Proceedings
+ 11th International Conference on
+ Data Engineering}, pages 201--210,
+ Taipei, March 1995}}
+ \renewcommand{\@evenhead}{}
+ \renewcommand{\@evenfoot}{}
+ \renewcommand{\@oddfoot}{}}
+ \makeatother}}
+\makeatother
+\newcommand{\final}
+ {\pagestyle{empty}
+ \newcommand{\firstpage}{\thispagestyle{empty}}}
+\newcommand{\myshadowsize}{2pt}
+\newcommand{\myshadowbox}{\setlength{\shadowsize}{\myshadowsize}\shadowbox}
+\newcommand{\doubleopenbraces}{\{\{}
+\newcommand{\doubleclosebraces}{\}\}}
+\newcommand{\nodesizes}{\scriptsize}
+\newlength{\edgesizes}
+\setlength{\edgesizes}{6mm}
+\newcommand{\graybox}[3]{\psboxit{box .5 setgray fill}{\makebox[#1][#2]{#3}}}
+
+\theoremstyle{plain}
+\theoremheaderfont{\scshape}
+\theorembodyfont{\rmfamily}
+\newtheorem{myexample}{Example}
+\renewcommand{\themyexample}{\arabic{myexample}.}
+\newenvironment{example}
+ {\begin{myexample}\quad}
+ {\hfill$\Box$\end{myexample}}
+\newenvironment{smalleqnarray*}[1]
+ {#1
+ \begin{eqnarray*}}
+ {\end{eqnarray*}
+ \normalsize}
+
+\newenvironment{quarterminipage}
+ {\begin{minipage}[b]{0.22\linewidth}}
+ {\end{minipage}}
+\newenvironment{halfminipage}
+ {\begin{minipage}[b]{0.44\linewidth}}
+ {\end{minipage}}
+\newenvironment{fullminipage}
+ {\begin{minipage}[b]{0.93\linewidth}}
+ {\end{minipage}}
+
+\newenvironment{fullminipagerule}
+ {\setlength{\topsep}{0pt}
+ \scriptsize
+ \begin{fullminipage}}
+ {\end{fullminipage}}
+\newenvironment{halfminipagerule}
+ {\setlength{\topsep}{0pt}
+ \footnotesize
+ \begin{halfminipage}}
+ {\end{halfminipage}}
+
+% Command to add space to second line of rule definitions.
+\newcommand{\rulespace}{\quad}
+\newenvironment{ruleactions}
+ {$\doubleopenbraces$
+ \begin{tabbing}
+ \hspace{2pc} \= \kill}
+ {\end{tabbing}
+ $\doubleclosebraces$}
+
+\newenvironment{trule}
+ {\begin{equation}}
+ {\end{equation}}
+\newenvironment{trulepretest}
+ {\begin{ruleactions}}
+ {\end{ruleactions} \\}
+\newenvironment{truleposttest}
+ {\\
+ \begin{ruleactions}}
+ {\end{ruleactions}}
+\newenvironment{fullminipagetrule}
+ {\begin{fullminipagerule}}
+ {\end{fullminipagerule}}
+\newenvironment{halfminipagetrule}
+ {\begin{halfminipagerule}}
+ {\end{halfminipagerule}}
+
+\newenvironment{irule}
+ {\begin{equation}}
+ {\end{equation}}
+\newenvironment{irulepreopt}
+ {\\
+ \begin{ruleactions}}
+ {\end{ruleactions}}
+\newenvironment{irulepostopt}
+ {\\
+ \begin{ruleactions}}
+ {\end{ruleactions}}
+\newenvironment{fullminipageirule}
+ {\begin{fullminipagerule}}
+ {\end{fullminipagerule}}
+\newenvironment{halfminipageirule}
+ {\begin{halfminipagerule}}
+ {\end{halfminipagerule}}
+
+\newenvironment{centeredfigure}
+ {\begin{figure}[tb]
+ \begin{center}}
+ {\end{center}
+ \end{figure}}
+\newenvironment{centeredfigure*}
+ {\begin{figure*}[tb]
+ \begin{center}}
+ {\end{center}
+ \end{figure*}}
+
+\newenvironment{centeredtable}
+ {\begin{table}[tb]
+ \begin{center}}
+ {\end{center}
+ \normalsize
+ \end{table}}
+\newenvironment{centeredtable*}
+ {\begin{table*}[tb]
+ \begin{center}}
+ {\end{center}
+ \normalsize
+ \end{table*}}
+
+\newenvironment{centeredinquarterminipage}
+ {\begin{quarterminipage}
+ \begin{center}}
+ {\end{center}
+ \end{quarterminipage}}
+\newenvironment{centeredinhalfminipage}
+ {\begin{halfminipage}
+ \begin{center}}
+ {\end{center}
+ \end{halfminipage}}
+\newenvironment{centeredinfullminipage}
+ {\begin{fullminipage}
+ \begin{center}}
+ {\end{center}
+ \end{fullminipage}}
+
+\title{\textbf{Prairie: A Rule Specification Framework \\
+ for Query Optimizers}\thanks{
+ This research was supported in part by grants from The University
+ of Texas Applied Research Laboratories, Schlumberger, and
+ Digital Equipment Corporation.}\ \thanks{
+ An expanded version of this paper is available as Technical
+ Report TR 94--16 by anonymous ftp from \texttt{ftp.cs.utexas.edu}.}}
+\author{Dinesh Das \hspace{1in} Don Batory \\
+ Department of Computer Sciences \\
+ The University of Texas at Austin \\
+ Austin, Texas 78712--1188 \\
+ \{ddas,batory\}@cs.utexas.edu}
+\date{}
+
+%\final
+%\preprint
+\reprint
+
+\makeatletter
+\def\thickhline{\noalign{\ifnum0=`}\fi\hrule \@height 1.5pt \futurelet
+ \@tempa\@xhline}
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\pagenumbering{arabic}
+\input{abstract.tex}
+\input{intro.tex}
+\input{model.tex}
+\input{p2v.tex}
+\input{results.tex}
+\input{related.tex}
+\input{conclusion.tex}
+
+\bibliographystyle{plain}
+\bibliography{references}
+
+\end{document}
diff --git a/macros/latex/contrib/utthesis/ICDE-11/preprint.ps b/macros/latex/contrib/utthesis/ICDE-11/preprint.ps
new file mode 100644
index 0000000000..00e36a2b29
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/preprint.ps
@@ -0,0 +1,6724 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.55 Copyright 1986, 1994 Radical Eye Software
+%%Title: paper.dvi
+%%CreationDate: Thu Dec 1 10:58:49 1994
+%%Pages: 10
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: Times-Roman Times-Italic Times-Bold Courier
+%%EndComments
+%DVIPSCommandLine: dvips -D 600 paper -o
+%DVIPSParameters: dpi=600, comments removed
+%DVIPSSource: TeX output 1994.12.01:1057
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: /u/ddas/tex/pstricks/ps/pstricks.pro
+% PostScript prologue for pstricks.tex.
+% Created 1993/3/12. Source file was pstricks.doc
+% Version 0.93a, 93/03/12.
+% For use with Rokicki's dvips.
+/tx@Dict 200 dict def tx@Dict begin
+/ADict 25 dict def
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/Atan { /atan load stopped { pop pop 0 } if } def
+/Div { dup 0 eq { pop } { div } ifelse } def
+/NET { neg exch neg exch T } def
+/Pyth { dup mul exch dup mul add sqrt } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def }
+def
+/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
+} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
+pathforall z } def
+/STP { .996264 dup scale } def
+/STV { SDict begin normalscale end STP } def
+/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+/y ED x mul /x ED x 0 eq y 0 eq and { /x 1 def /y 1 def } if [ y x ] 1 a
+sub y mul setdash stroke } def
+/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt
+{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add
+def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if
+] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1
+setlinecap stroke } def
+/LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED
+/x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul
+def newpath 2 setlinecap n { currentstrokeadjust == x1 y1 moveto x2 y1 L
+stroke /y1 y1 a add def } repeat grestore } def
+/LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED
+/x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul
+def newpath 2 setlinecap systemdict /currentstrokeadjust known {
+currentstrokeadjust } { false } ifelse { /t { } def } { /t { transform
+0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform }
+bind def } ifelse n { x1 y1 t moveto x2 y1 t L stroke /y1 y1 a add def }
+repeat grestore } def
+/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg
+exch 3 index sub exch Atan rotate newpath } def
+/EndArrow { @mtrx setmatrix CP grestore end } def
+/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1
+scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill
+grestore } def
+/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0
+CLW moveto } def
+/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2
+div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0
+CLW moveto } def
+/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW
+2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0
+curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto }
+def
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+/closepath load } pathforall ] cvx newpath 3 1 roll T exec } def
+/SD { 0 360 arc fill } def
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+cvi def } def
+/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if
+f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
+/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub
+def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def
+/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
+ifelse { pop } repeat a } def
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+Lineto pop pop closepath } ifelse } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
+def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
+mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
+abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
+/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
+m mul neg def } def
+/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
+ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
+def
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def
+n { NC } repeat EOC } ifelse } def
+/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
+/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
+pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
+/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
+CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
+repeat closepath pop pop } ifelse } def
+/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS
+CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
+sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
+x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
+y0 x0 2 mul x1 sub y1 ] def } def
+/Grid { /a 4 string def /b ED /d ED /n ED cvi dup 1 lt { pop 1 } if /c ED
+c div dup 0 eq { pop 1 } if /cy ED c div dup 0 eq { pop 1 } if /cx ED cy
+div cvi /y ED cx div cvi /x ED cy div cvi /y2 ED cx div cvi /x2 ED cy
+div cvi /y1 ED cx div cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse
+def /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2
+div add def /Helvetica findfont b scalefont setfont /b b .95 mul CLW 2
+div add def } if gsave n 0 gt { 1 setlinecap [ 0 cy n div ] 0 setdash }
+{ 2 setlinecap } ifelse /c x1 def /i 500 w mul x1 add def /e y cy mul
+def /f y1 cy mul def /g y2 cy mul def x1 cx mul 0 T { newpath 0 e moveto
+b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1} {z1 z2
+add neg} ifelse h 0 gt {b neg} {z1} ifelse rmoveto show grestore } if 0
+f moveto 0 g L stroke cx w mul 0 T c x2 eq c i eq or {exit} if /c c w
+add def } loop grestore gsave n 0 gt { 1 setlinecap [ 0 cx n div ] 0
+setdash } { 2 setlinecap } ifelse /c y1 def /i 500 h mul y1 add def /e x
+cx mul def /f x1 cx mul def /g x2 cx mul def 0 y1 cy mul T { newpath e 0
+moveto b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1 z2
+add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto show grestore }
+if f 0 moveto g 0 L stroke 0 cy h mul T c y2 eq c i eq or {exit} if /c c
+h add def } loop grestore } def
+/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0
+1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add
+exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+mul neg d } def
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /lmtrx [ tx@Dict /lmtrx known { lmtrx aload pop } if CM ] def
+CP 4 2 roll T moveto } def
+/PutEnd { CP /lmtrx [ lmtrx aload pop setmatrix ] def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { CP OLUnit T
+moveto /IfVisible true def } if } { IfVisible { CP OLUnit NET moveto
+/IfVisible false def } if } ifelse } def
+/InitOL { /OLUnit [ gsave CM STV 2890.79999 dup moveto setmatrix CP
+grestore ] cvx def /BOL { BeginOL } def /IfVisible true def } def
+end
+%%EndProcSet
+%%BeginProcSet: /u/ddas/tex/pstricks/ps/pst-node.pro
+% PostScript prologue for pst-node.tex.
+% Created 1993/3/12. Source file was pst-node.doc
+% Version 0.93a, 93/03/12.
+% For use with Rokicki's dvips.
+/tx@NodeDict 200 dict def tx@NodeDict begin
+/NewNode { gsave /next ED dict dup 3 -1 roll ED begin tx@Dict begin STV
+CP T exec end /NodeMtrx CM def next end grestore } def
+/InitPnode { /Y ED /X ED /NodePos { Nodesep Cos mul Nodesep Sin mul } def
+} def
+/InitCnode { /r ED /Y ED /X ED /NodePos { Nodesep r add dup Cos mul exch
+Sin mul } def } def
+/GetRnodePos { Cos 0 gt { /dx r Nodesep add def } { /dx l Nodesep sub def
+} ifelse Sin 0 gt { /dy u Nodesep add def } { /dy d Nodesep sub def }
+ifelse dx Sin mul abs dy Cos mul abs gt { dy Cos mul Sin div dy } { dx
+dup Sin mul Cos Div } ifelse } def
+/InitRnode { /r ED r mul neg /l ED /r r l add def /X l neg def { neg /d
+ED /u ED /Y 0 def } { neg /Y ED Y sub /u ED u mul neg /d ED /u u d add
+def /Y Y d sub def } ifelse /NodePos { GetRnodePos } def } def
+/InitRNode { /Y ED /X ED /r ED /X r 2 div X add def /r r X sub def /l X
+neg def Y add neg /d ED Y sub /u ED /NodePos { GetRnodePos } def } def
+/GetOnodePos { /ww w Nodesep add def /hh h Nodesep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+/GetAngle { nodeA GetCenter nodeB GetCenter 3 -1 roll sub 3 1 roll sub
+neg Atan } def
+/GetEdge { begin /Nodesep ED dup 1 0 NodeMtrx dtransform CM idtransform
+exch atan sub dup sin /Sin ED cos /Cos ED NodePos Y add exch X add exch
+NodeMtrx transform CM itransform end 4 2 roll 1 index 0 eq { pop pop } {
+2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse } def
+/GetPos { OffsetA AngleA NodesepA nodeA GetEdge /y1 ED /x1 ED OffsetB
+AngleB NodesepB nodeB GetEdge /y2 ED /x2 ED } def
+/InitNC { /nodeB ED /nodeA ED /NodesepB ED /NodesepA ED /OffsetB ED
+/OffsetA ED tx@NodeDict nodeA known tx@NodeDict nodeB known and dup {
+/nodeA nodeA load def /nodeB nodeB load def } if } def
+/LineMP { 4 copy 1 t sub mul exch t mul add 3 1 roll 1 t sub mul exch t
+mul add exch 6 2 roll sub 3 1 roll sub Atan } def
+/NCCoor { GetAngle /AngleA ED /AngleB AngleA 180 add def GetPos /LPutVar
+[ x2 x1 y2 y1 ] cvx def /LPutPos { LPutVar LineMP } def x1 y1 x2 y2 }
+def
+/NCLine { NCCoor tx@Dict begin ArrowB 4 2 roll ArrowA lineto end } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan } def
+/GetArms { /x1a armA AngleA cos mul x1 add def /y1a armA AngleA sin mul
+y1 add def /x2a armB AngleB cos mul x2 add def /y2a armB AngleB sin mul
+y2 add def } def
+/NCCurve { GetPos x1 x2 sub y1 y2 sub Pyth 2 div dup 3 -1 roll mul /armA
+ED mul /armB ED GetArms x1a y1a x1 y1 tx@Dict begin ArrowA end x2a y2a
+x2 y2 tx@Dict begin ArrowB end curveto /LPutVar [ x1 y1 x1a y1a x2a y2a
+x2 y2 ] cvx def /LPutPos { t LPutVar BezierMidpoint } def } def
+/AnglesMP { LPutVar t 3 gt { /t t 3 sub def } { t 2 gt { /t t 2 sub def
+10 -2 roll } { t 1 gt { /t t 1 sub def 10 -4 roll } { 10 4 roll } ifelse
+} ifelse } ifelse 6 { pop } repeat 3 -1 roll exch LineMP } def
+/NCAngles { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform pop x2a y2a mtrx transform exch pop mtrx itransform /y0 ED /x0
+ED mark armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1a y1a armA 0 ne { x1 y1 }
+if tx@Dict begin false Line end /LPutVar [ x2 y2 x2a y2a x0 y0 x1a y1a
+x1 y1 ] cvx def /LPutPos { AnglesMP } def } def
+/NCAngle { GetPos /x2a armB AngleB cos mul x2 add def /y2a armB AngleB
+sin mul y2 add def /mtrx AngleA matrix rotate def x2a y2a mtrx transform
+pop x1 y1 mtrx transform exch pop mtrx itransform /y0 ED /x0 ED mark
+armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1 y1 tx@Dict begin false Line end
+/LPutVar [ x2 y2 x2 y2 x2a y2a x0 y0 x1 y1 ] cvx def /LPutPos { AnglesMP
+} def } def
+/NCBar { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform pop x2a y2a mtrx transform pop sub dup 0 mtrx itransform 3 -1
+roll 0 gt { /y2a exch y2a add def /x2a exch x2a add def } { /y1a exch
+neg y1a add def /x2a exch neg x2a add def } ifelse mark x2 y2 x2a y2a
+x1a y1a x1 y1 tx@Dict begin false Line end /LPutVar [ x2 y2 x2 y2 x2a
+y2a x1a y1a x1 y1 ] cvx def /LPutPos { LPutVar AnglesMP } def } def
+/NCDiag { GetPos GetArms mark x2 y2 x2a y2a x1a y1a x1 y1 tx@Dict begin
+false Line end /LPutVar [ x2 y2 x2 y2 x2a y2a x1a y1a x1 y1 ] cvx def
+/LPutPos { AnglesMP } def } def
+/NCDiagg { OffsetA AngleA NodesepA nodeA GetEdge /y1 ED /x1 ED /x1a armA
+AngleA cos mul x1 add def /y1a armA AngleA sin mul y1 add def nodeB
+GetCenter y1a sub exch x1a sub Atan 180 add /AngleB ED OffsetB AngleB
+NodesepB nodeB GetEdge /y2 ED /x2 ED mark x2 y2 x1a y1a x1 y1 tx@Dict
+begin false Line end /LPutVar [ x2 y2 x2 y2 x2 y2 x1a y1a x1 y1] cvx def
+/LPutPos { AnglesMP } def } def
+/LoopMP { /t t abs def [ LPutVar ] length 2 div 1 sub dup t lt { /t ED }
+{ pop } ifelse mark LPutVar t cvi { /t t 1 sub def pop pop } repeat
+counttomark 1 add 4 roll cleartomark 3 -1 roll exch LineMP } def
+/NCLoop { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform loopsize add /y1b ED /x1b ED /x2b x2a y2a mtrx transform pop
+def x2b y1b mtrx itransform /y2b ED /x2b ED x1b y1b mtrx itransform /y1b
+ED /x1b ED mark armB 0 ne { x2 y2 } if x2a y2a x2b y2b x1b y1b x1a y1a
+armA 0 ne { x1 y1 } if tx@Dict begin false Line end /LPutVar [ x2 y2 x2a
+y2a x2b y2b x1b y1b x1a y1a x1 y1 ] cvx def /LPutPos { LoopMP } def }
+def
+/NCCircle { nodeA GetCenter 0 0 NodesepA nodeA GetEdge pop 3 1 roll /Y ED
+/X ED X sub 2 div dup 2 exp r r mul sub abs sqrt atan 2 mul /a ED r
+AngleA 90 add PtoC Y add exch X add exch 2 copy /LPutVar [ 4 2 roll r a
+] def /LPutPos { LPutVar aload pop t 360 mul add dup 5 1 roll 90 sub
+PtoC 3 -1 roll add 3 1 roll add exch 3 -1 roll } def r AngleA 90 sub a
+add AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c
+57.2957 r Div def /y ED /x ED } def
+/LPutCoor { tx@NodeDict /LPutPos known { gsave LPutPos tx@Dict begin
+/langle ED CM 3 1 roll STV CP 3 -1 roll sub neg 3 1 roll sub exch moveto
+setmatrix CP end grestore } { 0 0 tx@Dict /langle 0 def end } ifelse }
+def
+end
+%%EndProcSet
+%%BeginProcSet: texps.pro
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont load]cvx def}def
+/ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def
+/ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def
+end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale false def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin @defspecial
+
+ TeXDict begin /box{newpath 2 copy moveto 3 copy pop exch lineto 4
+copy pop pop lineto 4 copy exch pop exch pop lineto closepath } bind
+def /min{ 2 copy gt { exch } if pop } bind def/max{ 2 copy lt { exch
+} if pop } bind def/roundedbox{/radius exch store 3 2 roll 2 copy min
+radius sub /miny exch store max radius add /maxy exch store 2 copy
+min radius sub /minx exch store max radius add /maxx exch store newpath
+minx radius add miny moveto maxx miny maxx maxy radius arcto maxx maxy
+minx maxy radius arcto minx maxy minx miny radius arcto minx miny maxx
+miny radius arcto 16 {pop} repeat closepath }bind def /rectcartouche{box
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def /cartouche{roundedbox
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def end
+
+ TeXDict begin /box{newpath 2 copy moveto 3 copy pop exch lineto 4
+copy pop pop lineto 4 copy exch pop exch pop lineto closepath } bind
+def /min{ 2 copy gt { exch } if pop } bind def/max{ 2 copy lt { exch
+} if pop } bind def/roundedbox{/radius exch store 3 2 roll 2 copy min
+radius sub /miny exch store max radius add /maxy exch store 2 copy
+min radius sub /minx exch store max radius add /maxx exch store newpath
+minx radius add miny moveto maxx miny maxx maxy radius arcto maxx maxy
+minx maxy radius arcto minx maxy minx miny radius arcto minx miny maxx
+miny radius arcto 16 {pop} repeat closepath }bind def /rectcartouche{box
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def /cartouche{roundedbox
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def end
+
+@fedspecial end TeXDict begin
+40258431 52099146 1000 600 600
+(/v/ahhnold/v3/ddas/research/papers/ICDE-11/paper.dvi)
+@start /Fa 188[28 67[{}1 41.666668 /Times-Italic rf /Fb
+1 60 df<38FEFEFFFFFF3B0303030706060E0C1C3830706008147A8614>59
+D E /Fc 7 57 df<003FC00000FFF00003E07C0007C03E000F801F000F000F001E000780
+1E0007803E0007C03E0007C07C0003E07C0003E07C0003E07C0003E07C0003E0FC0003F0
+FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0
+FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C0003E07C0003E07C0003E0
+7E0007E03E0007C03E0007C03E0007C01F000F800F000F000F801F0007C03E0003F0FC00
+00FFF000003FC0001C2D7DAB23>48 D<000C00003C00007C0003FC00FFFC00FC7C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFF
+FE7FFFFE172C7AAB23>I<007F800001FFF0000780FC000E003F001C001F8038000FC070
+000FC0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F000
+0007F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E0000
+007C000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000
+F0003000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FF
+FFFFC0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C00
+1F803F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F800000
+1F8000003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC000000
+3F0000001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C00
+07F0FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E00
+3F000780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E
+0000003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E
+00000C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E
+0003003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E
+00FFFFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E
+0000003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I<0C0001800FC01F80
+0FFFFF000FFFFE000FFFFC000FFFF0000FFFC0000C7E00000C0000000C0000000C000000
+0C0000000C0000000C0000000C0000000C0000000C1FC0000C7FF8000DE07C000F801F00
+0F001F800E000F800C0007C0000007E0000007E0000003E0000003F0000003F0000003F0
+000003F0780003F0FC0003F0FC0003F0FC0003F0FC0003F0F80007E0E00007E0600007C0
+70000FC038000F801C001F000E003E000780F80001FFE000007F80001C2D7DAB23>I<00
+1FC00000FFF00003E07C0007801E000F000F001E0007801E0007803C0003C03C0003C03C
+0003C03C0003C03E0003C03E0007C03F0007801FC00F801FE00F001FF81E000FFC3C0007
+FFF80003FFE00000FFE000003FF80000FFFC0003C7FF000783FF801F00FFC01E003FC03C
+001FE07C0007E0780003F0F80003F0F00001F0F00000F0F00000F0F00000F0F00000F0F8
+0000E0780001E07C0001C03C0003C01E0007800F800F0007E03C0001FFF000003FC0001C
+2D7DAB23>56 D E /Fd 135[50 3[50 50 3[50 50 50 50 2[50
+2[50 50 1[50 50 50 97[{}13 83.333336 /Courier rf /Fe
+1 49 df<038007C007C007C00F800F800F800F001F001E001E003E003C003C0038007800
+780070007000E000E0000A157D9612>48 D E /Ff 6 104 df<FFFFFFFFFEFFFFFFFFFE
+FFFFFFFFFE27037A8F34>0 D<003800003800003800003800003800403804F0381EF810
+3E7E10FC0F11E003938000FE0000380000FE000393800F11E07E10FCF8103EF0381E4038
+0400380000380000380000380000380017197B9A22>3 D<000000003000000000000000
+380000000000000038000000000000003C000000000000001E000000000000000E000000
+000000000F00000000000000078000000000000003C000007FFFFFFFFFE00000FFFFFFFF
+FFF00000FFFFFFFFFFFC000000000000003E000000000000000F8000000000000007E000
+000000000001FC000000000000007F800000000000003F80000000000000FC0000000000
+0003F00000000000000F800000000000001F000000000000003C0000FFFFFFFFFFF80000
+FFFFFFFFFFF000007FFFFFFFFFE000000000000003C00000000000000780000000000000
+0F000000000000000E000000000000001E000000000000003C0000000000000038000000
+0000000038000000000000003000000039237C9F42>41 D<00F001F803F803F803F807F0
+07F007F007E007E00FC00FC00FC00F801F801F001F001F003E003E003C003C007C007800
+78007000F000F000E0000D1D7D9F13>48 D<00007E0003FE0007E0000F00001E00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C0000780000780000F00003E000FF8000FC0000
+FF800003E00000F000007800007800003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+001E00000F000007E00003FE00007E173B7BAB22>102 D<FC0000FF800007E00001F000
+007800003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00001E00001E00000F000007C0
+0001FE00007E0001FE0007C0000F00001E00001E00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C0000780001F00007E000FF8000FC0000173B7BAB22>I
+E /Fg 7 56 df<001C00007C0007FC00FFFC00FFFC00F8FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC007FFFF87FFFF87FFFF8151C7B9B1F>49 D<03FE000FFFC03FFFF0
+7E07F8F803FCFC01FCFC00FEFC00FEFC007E7800FE0000FE0000FE0001FC0001F80003F0
+0007E0000F80003E00007C0000F00E01E00E07801C0FFFFC1FFFFC7FFFFCFFFFFCFFFFF8
+FFFFF8171C7C9B1F>I<00FF800003FFE0000FFFF8001F01FC003E00FE003F007E003F00
+7E003F007E003F00FE000C00FC000001FC000003F00000FFC00000FFF0000001FC000000
+FE0000007F0000003F8000003F8030003F80FC003F80FC003F80FC003F80FC007F00F800
+FF007E01FE003FFFF8000FFFF00001FF8000191D7D9B1F>I<0003F0000003F0000007F0
+00000FF000001DF0000039F0000039F0000071F00000E1F00001C1F0000381F0000701F0
+000701F0000E01F0001C01F0003801F0007001F000F001F000FFFFFF80FFFFFF80FFFFFF
+800003F0000003F0000003F0000003F00000FFFF8000FFFF8000FFFF80191C7D9B1F>I<
+3800783FFFF83FFFF03FFFE03FFF803FFE003FF0003C00003C00003C00003CFF003FFFC0
+3F03F03E01F83C00FC38007C00007E00007E00007E78007EFC007EFC007EFC00FCF800FC
+7801F87E03F03FFFE00FFF8003FE00171D7C9B1F>I<001FE00000FFF80003FFFC0007F0
+3E000FC07E001F807E003F007E003E007E007E003C007E000000FC3F8000FCFFF000FDC0
+FC00FF807E00FF003F00FE001F00FE001F80FC001F80FC001F80FC001F807C001F807E00
+1F807E001F803E003F003F003F001F80FE000FFFF80003FFF000007F8000191D7D9B1F>
+I<380000003FFFFF803FFFFF807FFFFF807FFFFF007FFFFE007FFFFC007000F800E001F0
+00E003E0000007C000000F8000001F0000001F0000003E0000007E0000007C0000007C00
+0000FC000000FC000000F8000001F8000001F8000001F8000001F8000001F8000001F800
+0001F8000000F00000191D7C9B1F>I E /Fh 7 62 df<007C00000000600001FF000000
+00F00003C380000001F0000700C0000001E0000E0060000003E0001E007000000FC0001C
+003C00001F80003C003F00007F80003C001BE003FF00007C0018FFFF9E00007800181FFC
+3E000078000C00007C0000F8000C0000780000F8000C0000F80000F8000C0001F00000F8
+000C0001E00000F8000C0003E00000F8000C0007C00000F8000C0007800000F8000C000F
+800000F8000C001F00000078000C001E000000780018003E0000007C0018007C0000003C
+001800780000003C003000F80000001C003001F00000001E006001E00000000E006003E0
+0000000700C007C000000003C380078000000001FF000F80000000007C001F0000000000
+00001E0007C0000000003E001FF0000000007C003C38000000007800700C00000000F800
+F00600000001F001E00600000001E001E00300000003E003C00300000007C003C0018000
+00078007C0018000000F800780018000001F000780018000001E000F8000C000003E000F
+8000C000007C000F8000C0000078000F8000C00000F8000F8000C00001F0000F8000C000
+01E0000F8000C00003E0000F8000C00007C0000F8000C0000780000F8000C0000F800007
+800180001F000007800180001E000007C00180003E000003C00180007C000003C0030000
+78000001E0030000F8000001E0060001F0000000F0060001E0000000700C0003E0000000
+3C380003C00000001FF000018000000007C0003A437BBD45>37 D<0003F80000001FFF00
+00007E0FC00000F803E00003E000F80003C000780007C0007C000F80003E000F80003E00
+1F00001F001F00001F003F00001F803F00001F803F00001F807E00000FC07E00000FC07E
+00000FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00
+000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000
+0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000F
+C07E00000FC07E00000FC07E00000FC07F00001FC03F00001F803F00001F803F00001F80
+1F00001F001F00001F000F80003E000F80003E0007C0007C0003E000F80003E000F80000
+F803E000007E0FC000001FFF00000007FC000023387DB62A>48 D<000180000007800000
+0F8000003F800001FF8000FFFF8000FFDF8000FE1F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000003FC0007FFFFFE07FFFFFE07FFFFFE01B3779B62A
+>I<0007F80000003FFF000000FFFFC00001F00FE000038003F000070001F8000F0001FC
+000FC001FE001FE000FE001FE000FF001FE000FF001FE000FF000FE000FF000FC000FF00
+038000FF00000000FE00000000FE00000001FE00000001FC00000001F800000003F00000
+0003E000000007C00000000F800000007F0000001FFC0000001FFF800000000FE0000000
+03F000000001FC00000000FE00000000FF000000007F000000007F800000007FC0000000
+3FC00000003FC00000003FE00000003FE03E00003FE07F00003FE0FF80003FE0FF80003F
+E0FF80003FE0FF80003FC0FF00007FC07E00007F807C00007F80300000FF00380000FE00
+1C0001FC000F0003F80007F00FF00001FFFFC000007FFF8000000FFC000023387DB62A>
+51 D<0600000C000780003C0007F003F80007FFFFF00007FFFFE00007FFFFC00007FFFF
+800007FFFF000007FFFC0000067FE0000006000000000600000000060000000006000000
+000600000000060000000006000000000600000000060000000006000000000600000000
+0607F80000063FFF000006F80F800007C003C000070001F000060000F800040000F80000
+00007C000000007E000000007E000000003F000000003F000000003F000000003F800000
+003F800000003F803C00003F807E00003F80FF00003F80FF00003F80FF00003F80FF0000
+3F00FE00003F00FC00007F006000007E006000007E00300000FC00380000F800180001F8
+000E0003F000070007E00003E03F800001FFFF0000007FFC0000001FE0000021387CB62A
+>53 D<1C003E007F00FF80FF80FF807F003E001C00000000000000000000000000000000
+0000000000000000000000000000000000000000001C003E007F00FF80FF80FF807F003E
+001C00092479A317>58 D<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFF
+FFFFFC000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFC
+FFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFFFFFFF836167B9F41>61
+D E /Fi 3 106 df<001FF00000FFFF0003E03FC00F801FE01F000FF01F800FF83FC007
+F83FE007F83FE007F83FE007F83FE00FF83FE00FF01FC00FF007001FE000003FE000007F
+800000FF00007FFC00007FF800007FFF0000003FC000000FF0000007F8000007FC0C0007
+FC3F0003FE7F8003FEFFC003FEFFC003FEFFC003FEFFC003FEFFC003FC7F8007FC7F0007
+F83F000FF01FC03FE007FFFFC001FFFF00003FF0001F277DA526>51
+D<FFFFFFFF000000FFFFFFFFF00000FFFFFFFFFC000003FE0007FF000003FE00007FC000
+03FE00003FE00003FE00000FF00003FE000007F80003FE000003F80003FE000003FC0003
+FE000001FE0003FE000001FE0003FE000000FF0003FE000000FF0003FE000000FF0003FE
+000000FF0003FE000000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE00
+0000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE0000
+00FF0003FE000000FF0003FE000000FF0003FE000001FE0003FE000001FE0003FE000003
+FC0003FE000003FC0003FE000007F80003FE00000FF00003FE00001FE00003FE00007FC0
+0003FE0003FF0000FFFFFFFFFE0000FFFFFFFFF00000FFFFFFFF00000031287DA739>68
+D<0F801FC03FE03FE03FE03FE03FE01FC00F80000000000000000000000000FFE0FFE0FF
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE0FFFCFFFCFFFC0E297CA816>105 D E /Fj 1 69 df<FFFFFFFFFF800000FF
+FFFFFFFFF80000FFFFFFFFFFFF0000FFFFFFFFFFFFC000007FF80007FFF000007FF80000
+7FF800007FF800001FFE00007FF800000FFF00007FF8000003FF80007FF8000001FFC000
+7FF8000001FFC0007FF8000000FFE0007FF80000007FF0007FF80000007FF0007FF80000
+003FF8007FF80000003FF8007FF80000003FFC007FF80000001FFC007FF80000001FFC00
+7FF80000001FFE007FF80000001FFE007FF80000001FFE007FF80000001FFE007FF80000
+001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF00
+7FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000
+001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFE007FF80000001FFE00
+7FF80000001FFE007FF80000001FFE007FF80000001FFC007FF80000003FFC007FF80000
+003FFC007FF80000003FF8007FF80000007FF8007FF80000007FF0007FF8000000FFE000
+7FF8000000FFE0007FF8000001FFC0007FF8000003FF80007FF8000007FF00007FF80000
+1FFE00007FF800007FFC00007FF80007FFF000FFFFFFFFFFFFC000FFFFFFFFFFFF0000FF
+FFFFFFFFFC0000FFFFFFFFFF80000040397DB849>68 D E /Fk 3
+106 df<00000000003C00000000000000003C00000000000000003E0000000000000000
+1E00000000000000001F00000000000000000F8000000000000000078000000000000000
+07C00000000000000003E00000000000000001F00000000000000000F800000000000000
+00FC00007FFFFFFFFFFFFE0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF8000FFFFFFFFFF
+FFFFC00000000000000003E00000000000000001F80000000000000000FE000000000000
+00003F00000000000000001FE00000000000000007F80000000000000001FF0000000000
+000001FF0000000000000007F8000000000000001FE0000000000000003F000000000000
+0000FE0000000000000001F80000000000000003E000FFFFFFFFFFFFFFC000FFFFFFFFFF
+FFFF8000FFFFFFFFFFFFFF00007FFFFFFFFFFFFE0000000000000000FC00000000000000
+00F80000000000000001F00000000000000003E00000000000000007C000000000000000
+0780000000000000000F80000000000000001F00000000000000001E0000000000000000
+3E00000000000000003C00000000000000003C000000482E7BAB53>41
+D<0000C00001E00003E00003E00003C00007C00007C0000780000F80000F80001F00001F
+00001E00003E00003E00007C00007C0000780000F80000F80001F00001F00001E00003E0
+0003E00003C00007C00007C0000F80000F80000F00001F00001F00003E00003E00003C00
+007C00007C0000780000F80000F80000F80000F800007800007C00007C00003C00003E00
+003E00001F00001F00000F00000F80000F800007C00007C00003C00003E00003E00001E0
+0001F00001F00000F80000F800007800007C00007C00003E00003E00001E00001F00001F
+00000F80000F800007800007C00007C00003C00003E00003E00001E00000C0135278BD20
+>104 D<600000F00000F80000F800007800007C00007C00003C00003E00003E00001F00
+001F00000F00000F80000F800007C00007C00003C00003E00003E00001F00001F00000F0
+0000F80000F800007800007C00007C00003E00003E00001E00001F00001F00000F80000F
+800007800007C00007C00003C00003E00003E00003E00003E00003C00007C00007C00007
+80000F80000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F8
+0000F00001F00001F00003E00003E00003C00007C00007C0000F80000F80000F00001F00
+001F00003E00003E00003C00007C00007C0000780000F80000F80000F000006000001352
+7CBD20>I E /Fl 3 111 df<70F8F8F87005057A8413>58 D<03FFFFC00003FFFFF80000
+3C007E00003C001F00003C000F80003C000F800078000F800078000F800078000F800078
+001F0000F0003E0000F000780000F003E00000FFFE000001E007000001E003C00001E001
+C00001E001E00003C001E00003C001E00003C001E00003C001E000078003E000078003E0
+60078003E060078003E0C0FFF801F0C0FFF800F1800000003E00231D7B9B2B>82
+D<0F03F00033861C0021D81E0061F01E00C3E01E00C3C01E0003C01E0003C01E0007803C
+0007803C0007803C00078078200F0078600F00F0600F00F0C00F00F0C01E0071800C003E
+001B127D9125>110 D E /Fm 139[12 16 14 1[21 21 21 1[12
+2[12 1[21 1[18 21 18 1[18 12[25 23 28 2[30 30 37 25 1[16
+14 2[23 25 1[28 1[30 20[10 2[14 14 40[{}29 41.666668
+/Times-Roman rf /Fn 3 52 df<00600001E0000FE000FFE000F1E00001E00001E00001
+E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001
+E00001E00001E00001E00001E00001E00001E0007FFF807FFF80111C7B9B1C>49
+D<03FC000FFF801C0FC03003E06001F0E000F0E000F8F00078F000786000780000F80000
+F00001F00001E00003C0000700000E00001C0000300000E0000180180300180600180800
+383FFFF07FFFF0FFFFF0FFFFF0151C7D9B1C>I<03FC000FFF001C07C03001E07001F078
+01F07800F03001F00001F00001E00003C0000780001E0003FC000007800003C00001E000
+00F00000F80000F86000F8F000F8F000F8E000F06001F07003E03C07C00FFF0003FC0015
+1D7D9B1C>I E /Fo 81[32 51[26 29 29 1[29 29 16 23 19 1[29
+29 29 45 16 1[16 16 29 29 19 26 29 26 29 26 7[42 2[42
+42 36 32 39 42 32 42 42 52 2[23 19 1[42 32 36 42 39 1[42
+1[26 5[29 29 29 29 29 29 29 29 29 3[19 15 2[19 19 40[{}57
+58.333336 /Times-Roman rf /Fp 134[29 29 2[32 19 23 26
+1[32 29 32 48 16 2[16 32 29 1[26 32 26 1[29 14[42 45
+36 45 5[23 3[39 42 2[42 1[29 63[{}27 58.333336 /Times-Bold
+rf /Fq 138[33 18 26 26 1[33 1[33 48 3[18 1[33 1[29 3[33
+97[{}11 66.666664 /Times-Italic rf /Fr 7 56 df<00E00001E00007E000FFE000
+F9E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00003F000FFFFC0FFFFC012217AA01E>49 D<01FC0007FF801C0FC03003E060
+01F06000F8F800F8FC00FCFC00FCFC007C78007C3000FC0000FC0000F80000F80001F000
+03E00003C0000780000F00001E0000380000700000E00001C00C03800C0600180C001818
+00183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00FF0003FFC00F03E01C00F01C00F8
+3E00FC3E007C3E007C1E00FC0C00FC0000F80000F80001F00003E0000FC001FF0001FF00
+0003E00000F000007800007C00003E00003F30003F78003FFC003FFC003FFC003EF8007E
+60007C3800F81E03F00FFFC001FF0018227DA01E>I<0000E00001E00001E00003E00007
+E00007E0000DE0001DE00039E00031E00061E000E1E000C1E00181E00381E00701E00601
+E00C01E01C01E01801E03001E07001E0E001E0FFFFFFFFFFFF0001E00001E00001E00001
+E00001E00001E00003F0003FFF003FFF18227DA11E>I<1000301E01F01FFFE01FFFC01F
+FF801FFE001BF00018000018000018000018000018000018FE001BFF801F03C01C01E018
+00F01800F800007800007800007C00007C30007C78007CF8007CF8007CF80078F000F860
+00F07001E03801E01E078007FF0001F80016227CA01E>I<000FC0007FF001F03803C018
+07803C0F007C1E007C1C00383C00003C00007C0000780000787FC0F8FFE0F980F0FA0038
+FE003CFC001EFC001EF8001FF8001FF8001FF8001F78001F78001F78001F3C001E3C001E
+1C003C1E00380F00700781E001FFC0007F0018227DA01E>I<3000003C00003FFFFF3FFF
+FF7FFFFE7FFFFC60001C600038600070C000E0C000C00001C0000380000700000600000E
+00001C00001C0000380000380000780000780000780000F00000F00000F00000F00001F0
+0001F00001F00001F00001F00001F00001F00000E00018237CA11E>I
+E /Fs 1 4 df<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFCF0
+00000000003CF000000000003CF000000000003CF000000000003CF000000000003CF000
+000000003CF000000000003CF000000000003CF000000000003CF000000000003CF00000
+0000003CF000000000003CF000000000003CF000000000003CF000000000003CF0000000
+00003CF000000000003CF000000000003CF000000000003CF000000000003CF000000000
+003CF000000000003CF000000000003CF000000000003CF000000000003CF00000000000
+3CF000000000003CF000000000003CF000000000003CF000000000003CF000000000003C
+F000000000003CF000000000003CF000000000003CF000000000003CF000000000003CF0
+00000000003CF000000000003CF000000000003CF000000000003CF000000000003CF000
+000000003CF000000000003CF000000000003CF000000000003CF000000000003CF00000
+0000003CF000000000003CFFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFF
+FFFFF836387BB741>3 D E /Ft 18 112 df<387CFEFEFEFEFEFE7C7C7C7C7C7C7C7C7C
+7C3838383838383838383810000000000038FEFEFEFEFE3807297BA813>33
+D<0006000C00180030006000E001C00380038007000F000E001E001E001C003C003C003C
+0078007800780078007800F800F000F000F000F000F000F000F000F000F000F000F000F8
+00780078007800780078003C003C003C001C001E001E000E000F0007000380038001C000
+E0006000300018000C00060F3B7AAB1A>40 D<C0006000300018000C000E000700038003
+8001C001E000E000F000F00070007800780078003C003C003C003C003C003E001E001E00
+1E001E001E001E001E001E001E001E001E003E003C003C003C003C003C00780078007800
+7000F000F000E001E001C00380038007000E000C00180030006000C0000F3B7DAB1A>I<
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E000000FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E0000002B2B7DA333>43 D<00380000780001F8001FF800FEF800E0F80000F80000
+F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
+F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
+F80000F80000F80000F80001FC00FFFFF8FFFFF815267BA521>49
+D<00FF000003FFE0000E03F0001800F80030007C0060003E0078001F00FC001F00FE001F
+80FE001F80FE000F80FE000F807C000F8000001F8000001F0000001F0000003F0000003E
+0000007C00000078000000F0000001E0000003C00000078000000F0000001C0000003800
+000070018000E0018001C0018003800300060003000C0003001FFFFF003FFFFF007FFFFE
+00FFFFFE00FFFFFE0019267DA521>I<00FF000003FFE0000F01F8001C007C0030003E00
+3C003E007E003F007E001F007E001F007E003F003C003F0000003E0000003E0000007C00
+0000F8000001F0000007E00001FF800001FF00000001E0000000F00000007C0000003E00
+00003F0000001F0000001F8000001F8038001F807C001F80FE001F80FE001F80FE001F00
+FC003F0078003E0070007C003800F8001F01F00007FFC00000FF000019277DA521>I<00
+00380000003800000078000000F8000001F8000001F8000003F8000007F8000006F80000
+0CF800001CF8000018F8000030F8000070F8000060F80000C0F80001C0F8000180F80003
+00F8000700F8000E00F8000C00F8001C00F8003800F8003000F8006000F800E000F800FF
+FFFFE0FFFFFFE00000F8000000F8000000F8000000F8000000F8000000F8000000F80000
+01FC00003FFFE0003FFFE01B277EA621>I<18000C001F007C001FFFF8001FFFF0001FFF
+E0001FFF800019FC00001800000018000000180000001800000018000000180000001800
+0000187F000019FFE0001F81F0001E0078001C003C0018003E0000003E0000001F000000
+1F0000001F8000001F8030001F807C001F80FC001F80FC001F80FC001F80FC001F00F000
+1F0060003E0070003E0030007C001C00F8000F03E00003FFC00000FE000019277DA521>
+I<000FE000003FF80000F81C0001E0060003801F0007003F000F003F001E003F001E003F
+003C001E003C0000007C0000007800000078040000783FC000F8FFF000F9807800FB003C
+00FA001E00FC001E00FC000F00FC000F00F8000F80F8000F80F8000F80F8000F8078000F
+8078000F8078000F8078000F803C000F003C000F001C001E001E001E000E003C00070078
+0003C0F00001FFC000007F000019277DA521>I<300000003C0000003FFFFFE03FFFFFE0
+3FFFFFC07FFFFF807FFFFF807000070060000E0060000C00C0001C00C0003800C0007000
+0000E0000000C0000001C000000380000003800000070000000F0000000E0000001E0000
+001E0000001E0000003E0000003C0000003C0000007C0000007C0000007C0000007C0000
+00FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000780000
+1B287DA621>I<387CFEFEFE7C380000000000000000000000387CFEFEFE7C3807197B98
+13>58 D<387CFEFEFE7C380000000000000000000000387CFCFEFE7E3E0606060C0C0C18
+1830702007247B9813>I<7FFFFFFFFFC0FFFFFFFFFFE0FFFFFFFFFFE000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000FFFFFFFFFFE0FFFFFFFFFFE07F
+FFFFFFFFC02B117D9633>61 D<01FF000FFFE01E01F038007860007CF8003EFC003EFC00
+3EFC003E78003E30007C00007C0000F80001F00003C0000780000F00000E00001C000018
+000038000030000030000030000030000030000030000030000020000000000000000000
+0000000000000000700001FC0001FC0001FC0001FC0001FC0000700017297DA81F>63
+D<007E03E001FF8FF00781F8F00F00F0F01E0078001C0038003C003C003C003C003C003C
+003C003C003C003C003C003C001C0038001E0078000F00F0000781E00009FF8000087E00
+0018000000180000001C0000001E0000000FFFF0000FFFFC0007FFFF000FFFFF801C001F
+C0380007C0780003E0F00001E0F00001E0F00001E0F00001E0780003C07C0007C03E000F
+800FC07E0003FFF800007FC0001C277E9921>103 D<0F80FF80FF801F800F800F800F80
+0F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F80
+0F800F800F800F800F800F800F800F800F800F800F800F801FC0FFF8FFF80D287EA713>
+108 D<003F800000FFE00003E0F80007803C000F001E001E000F003C0007803C00078078
+0003C0780003C0780003C0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F8
+0003E0780003C0780003C07C0007C03C0007801E000F001F001F000F803E0003E0F80001
+FFF000003F80001B1C7E9A21>111 D E /Fu 11 121 df<387CFEFEFE7C3807077A8614>
+58 D<387CFEFFFF7F3B0303030606060C1838702008127A8614>I<E000000000F8000000
+00FE000000003F800000000FE000000003F800000000FE000000003F800000000FE00000
+0003F800000000FE000000003F800000000FE000000003F800000000FE000000003F8000
+00000FE000000003F800000000FE000000003E00000000FE00000003F80000000FE00000
+003F80000000FE00000003F80000000FE00000003F80000000FE00000003F80000000FE0
+0000003F80000000FE00000003F80000000FE00000003F80000000FE00000000F8000000
+00E00000000027277AA134>62 D<00000001800000000003800000000007800000000007
+C0000000000FC0000000001FC0000000001FC00000000037C00000000037C00000000067
+C000000000C7C000000000C7E00000000183E00000000383E00000000303E00000000603
+E00000000E03E00000000C03E00000001803F00000001801F00000003001F00000006001
+F00000006001F0000000C001F0000001C001F00000018001F0000003FFFFF8000003FFFF
+F80000060000F800000C0000F800000C0000F80000180000F80000380000F80000300000
+FC00006000007C0000E000007C0000C000007C0001C000007C0003C000007C000FC00000
+FE00FFF8000FFFE0FFF8000FFFE02B2A7DA932>65 D<003FFFFFFFF8003FFFFFFFF80001
+F80003F80001F00000F80001F00000780003F00000300003F00000300003E00000300003
+E00000300007E00000300007E00000300007C00180300007C0018030000FC0038000000F
+C0030000000F80030000000F80070000001F801F0000001FFFFE0000001FFFFE0000001F
+001E0000003F000E0000003F000C0000003E000C0000003E000C0000007E001C01C0007E
+00180180007C00000180007C0000038000FC0000070000FC0000070000F800000E0000F8
+00000E0001F800001C0001F800003C0001F00000780001F00001F80003F0000FF000FFFF
+FFFFF000FFFFFFFFE0002D287CA731>69 D<003FFFFFFFE0003FFFFFFFE00001F80007E0
+0001F00003E00001F00001E00003F00000C00003F00000C00003E00000C00003E00000C0
+0007E00000C00007E00000C00007C00000C00007C00300C0000FC0070000000FC0060000
+000F80060000000F800E0000001F800E0000001F803C0000001FFFFC0000001FFFFC0000
+003F003C0000003F00180000003E00180000003E00180000007E00380000007E00300000
+007C00300000007C0000000000FC0000000000FC0000000000F80000000000F800000000
+01F80000000001F80000000001F00000000001F00000000003F000000000FFFFE0000000
+FFFFE00000002B287CA72A>I<000001FF000000001FFFE00000007E01F8000001F0007E
+000007C0001F00000F80000F80001E000007C0007C000007C000F8000003E001F0000003
+E001F0000001F003E0000001F007C0000001F00FC0000001F00F80000001F81F80000001
+F81F00000001F83F00000001F83F00000001F07E00000003F07E00000003F07E00000003
+F07E00000003F07E00000007E0FC00000007E0FC0000000FC0FC0000000FC0FC0000001F
+80FC0000001F807C0000003F007E0000003E007E0000007E003E000000FC003E000001F8
+001F000003F0001F800007C0000F80000F800007C0003F000003F000FC000000FC03F000
+00003FFFC000000007FC0000002D2A7DA832>79 D<003FFFFFC000003FFFFFF8000001F8
+00FE000001F0001F000001F0000F800003F0000FC00003F00007C00003E00007C00003E0
+0007E00007E00007E00007E0000FC00007C0000FC00007C0000FC0000FC0001F80000FC0
+001F00000F80003E00000F80007C00001F8001F000001F800FE000001FFFFF0000001FFF
+FE0000003F001F0000003F0007C000003E0007C000003E0003E000007E0003E000007E00
+03E000007C0003E000007C0003E00000FC0007E00000FC0007E00000F80007E00000F800
+07E00001F80007E01001F80007E03001F00007E03001F00007E07003F00007E0E0FFFF80
+03F1C0FFFF8001FF80000000007E002C297CA732>82 D<00001FE0080000FFFC180003E0
+1E380007000770000E0003F000180001F000300000F000700000E000E00000E000E00000
+E000E00000E001E00000C001E00000C001E000000001F000000000F800000000FE000000
+007FE00000007FFE0000003FFFE000000FFFF0000001FFF80000001FFC00000001FE0000
+00003E000000001F000000000F000000000F000000000F00180000070018000007003800
+000E003000000E003800000C003800001C0078000038007C000070007E0000E000770003
+C000E3E00F0000C0FFFE0000801FF00000252A7CA829>I<000E00001F00001F00001E00
+000C0000000000000000000000000000000000000000000000000003E00007F0000C7800
+183800303800303800607800607800C07800C0F00000F00001E00001E00001E00003C000
+03C0000780000781800781800F01800F03000F03000F06000F0C000F1C0007F00001E000
+11287DA617>105 D<00F807C001FE1FF0070738380E07B0381C03E0781803C0F83003C0
+F83003C07060078000600780000007800000078000000F0000000F0000000F0000000F00
+00001E0000001E0030001E0030301E0060783E0060F83E00C0F87E00C0F06E038061CF07
+007F83FC001E01F8001D1B7D9926>120 D E /Fv 11 121 df<1C007F00FF80FF80FF80
+FF80FF807F001C000909798817>58 D<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C0
+00C000C000C001C00180018003800300070006000E001C003800700060000A19798817>
+I<00000000006000000000000070000000000000F0000000000001F0000000000001F000
+0000000003F0000000000003F0000000000007F000000000000FF000000000000FF00000
+0000001FF800000000001FF8000000000033F8000000000073F8000000000063F8000000
+0000C3F80000000000C3F8000000000183F8000000000183F8000000000303F800000000
+0603F8000000000603FC000000000C03FC000000000C01FC000000001801FC0000000030
+01FC000000003001FC000000006001FC000000006001FC00000000C001FC00000001C001
+FC000000018001FC000000030001FE000000030001FE000000060000FE0000000E0000FE
+0000000C0000FE000000180000FE0000001FFFFFFE0000003FFFFFFE0000003FFFFFFE00
+0000600000FE000000C00000FE000000C00000FF000001800000FF0000018000007F0000
+030000007F0000060000007F0000060000007F00000C0000007F00000C0000007F000018
+0000007F0000380000007F0000700000007F0000F00000007F8001F80000007F8007F800
+0000FF80FFFF80003FFFFFFFFF80007FFFFFFFFF80007FFFFF383C7DBB3E>65
+D<0003FFFFFFFFFFF00007FFFFFFFFFFF00007FFFFFFFFFFF0000007F800003FF0000007
+F0000007F0000007F0000003E000000FF0000001E000000FF0000000E000000FE0000000
+E000000FE0000000E000001FE0000000E000001FE0000000E000001FC0000000E000001F
+C0000000C000003FC0000000C000003FC0000000C000003F80003000C000003F80003000
+C000007F80007000C000007F800070000000007F000060000000007F0000E000000000FF
+0000E000000000FF0001E000000000FE0003C000000000FE000FC000000001FFFFFFC000
+000001FFFFFFC000000001FFFFFF8000000001FC000F8000000003FC00078000000003FC
+00078000000003F800030000000003F800030000000007F800070000000007F800070003
+000007F000060003000007F00006000700000FF00006000600000FF00000000600000FE0
+0000000E00000FE00000000C00001FE00000001C00001FE00000001800001FC000000038
+00001FC00000003800003FC00000007000003FC0000000F000003F80000001E000003F80
+000001E000007F80000007E000007F8000000FC000007F0000003FC00000FF000003FF80
+00FFFFFFFFFFFF8000FFFFFFFFFFFF8000FFFFFFFFFFFF00003C397DB83D>69
+D<0003FFFFFFFFFFE00007FFFFFFFFFFE00007FFFFFFFFFFE0000007F800003FE0000007
+F000000FE0000007F0000003C000000FF0000003C000000FF0000001C000000FE0000001
+C000000FE0000001C000001FE0000001C000001FE0000001C000001FC0000001C000001F
+C00000018000003FC00000018000003FC00000018000003F800000018000003F80006001
+8000007F8000E0018000007F8000E0000000007F0000C0000000007F0000C000000000FF
+0001C000000000FF0001C000000000FE00038000000000FE00078000000001FE001F8000
+000001FFFFFF8000000001FFFFFF0000000001FFFFFF0000000003FC001F0000000003FC
+000F0000000003F8000E0000000003F8000E0000000007F8000E0000000007F8000E0000
+000007F0000C0000000007F0000C000000000FF0001C000000000FF0001C000000000FE0
+0000000000000FE00000000000001FE00000000000001FE00000000000001FC000000000
+00001FC00000000000003FC00000000000003FC00000000000003F800000000000003F80
+0000000000007F800000000000007F800000000000007F00000000000000FF8000000000
+00FFFFFFC000000000FFFFFFC000000000FFFFFFC0000000003B397DB835>I<0003FFF8
+00001FFFF80007FFFC00003FFFF80007FFFC00003FFFF8000007FC000001FF00000007FE
+0000007C00000006FE000000780000000EFF000000700000000E7F000000700000000C7F
+800000600000000C7F800000600000001C3F800000E00000001C3FC00000C0000000181F
+C00000C0000000181FE00000C0000000381FE00001C0000000380FF0000180000000300F
+F00001800000003007F00001800000007007F80003800000007003F80003000000006003
+FC0003000000006003FC000300000000E001FC000700000000E001FE000600000000C000
+FE000600000000C000FF000600000001C0007F000E00000001C0007F800C000000018000
+7F800C0000000180003F800C0000000380003FC01C0000000380001FC018000000030000
+1FE0180000000300000FE0180000000700000FF0380000000700000FF030000000060000
+07F03000000006000007F8300000000E000003F8700000000E000003FC600000000C0000
+03FC600000000C000001FE600000001C000001FEE00000001C000000FEC0000000180000
+00FFC0000000180000007FC0000000380000007FC0000000380000007F80000000300000
+003F80000000300000003F80000000700000001F80000000700000001F00000000F00000
+000F00000007FC0000000F000000FFFFE000000F000000FFFFE0000006000000FFFFE000
+000600000045397DB843>78 D<00000001FF00000000001FFFF000000000FE01FC000000
+03F0007E00000007C0001F8000001F80000FC000003E000007E00000FC000003F00001F8
+000003F00003F0000001F80007E0000001F8000FC0000000FC001F80000000FC003F0000
+0000FE007F000000007E00FE000000007E00FC000000007F01FC000000007F03F8000000
+007F03F8000000007F07F0000000007F07F0000000007F0FF0000000007F0FE000000000
+7F1FE000000000FF1FE000000000FF3FC000000000FF3FC000000000FF3FC000000000FF
+7F8000000001FE7F8000000001FE7F8000000001FE7F8000000001FEFF8000000003FCFF
+0000000003FCFF0000000003FCFF0000000007F8FF0000000007F8FF000000000FF0FF00
+0000000FF0FF000000000FE0FF000000001FE0FF000000001FC0FF000000003F807F0000
+00007F807F000000007F007F00000000FE007F00000001FC003F80000001F8003F800000
+03F8001F80000007F0001FC000000FE0000FC000001F800007E000003F000007F000007E
+000003F00001F8000001FC0003F00000007E000FC00000003F807F0000000007FFF80000
+000000FF80000000383D7CBA3F>I<0003FFFFFFF800000007FFFFFFFF80000007FFFFFF
+FFE000000007F8001FF800000007F00003FC00000007F00000FE0000000FF000007F0000
+000FF000007F0000000FE000003F8000000FE000003F8000001FE000003FC000001FE000
+003FC000001FC000003FC000001FC000003FC000003FC000003FC000003FC000007F8000
+003F8000007F8000003F8000007F8000007F800000FF0000007F800000FE0000007F0000
+01FC0000007F000003F8000000FF000007F0000000FF00000FE0000000FE00001F800000
+00FE00007F00000001FE0007F800000001FFFFFFE000000001FFFFFF0000000001FC000F
+C000000003FC0003F000000003FC0001F800000003F80000FC00000003F80000FE000000
+07F80000FE00000007F800007E00000007F000007E00000007F000007F0000000FF00000
+FF0000000FF00000FE0000000FE00000FE0000000FE00000FE0000001FE00001FE000000
+1FE00001FE0000001FC00001FE0000001FC00001FE0000003FC00001FE0000003FC00003
+FE0000003F800003FC0060003F800003FC0060007F800003FC00E0007F800003FC00C000
+7F000003FC01C000FF800001FC0180FFFFFF0001FC0380FFFFFF0000FE0700FFFFFF0000
+7E0E0000000000001FFC00000000000007F0003B3B7DB83F>82 D<0000001FE003800000
+00FFFC0300000003FFFE070000000FE01F8F0000003F0007DF0000007E0001FE000000F8
+0000FE000001F00000FE000003E000007E000003E000007C000007C000003C00000F8000
+003C00000F8000003C00001F8000003800001F0000003800001F0000003800001F000000
+3800003F0000003000003F0000003000003F8000003000003F8000000000003FC0000000
+00003FE000000000001FF000000000001FFE00000000001FFFE0000000000FFFFE000000
+0007FFFFC000000003FFFFF000000001FFFFF800000000FFFFFC000000001FFFFE000000
+0003FFFF00000000003FFF000000000003FF800000000000FF8000000000007F80000000
+00003F8000000000001F8000000000001F8000000000001F80000C0000001F80000C0000
+000F80000C0000000F80001C0000001F80001C0000001F00001C0000001F00001C000000
+1F00003C0000003E00003C0000003E00003C0000007C00003E000000F800007E000000F8
+00007F000001F000007F800003E000007FC0000FC00000F9F0001F800000F0FE00FE0000
+00E03FFFF8000000E00FFFE0000000C001FF00000000313D7CBA33>I<0000E00001F800
+03F80003F80003F80003F00001C000000000000000000000000000000000000000000000
+000000000000000000000000000000F80003FE00070F000E0F801C0F80180F80380F8030
+0F80701F80601F80603F80E03F00C03F00C07F00007E00007E0000FE0000FC0001FC0001
+FC0001F80003F80003F00003F00007F01807E01807E0380FE0300FC0300FC0700F80600F
+80E00F80C00F81C00F838007870003FE0000F80015397EB71D>105
+D<0007E001F000001FF807FE0000783E0E0F0000E01F1C0F0001C01F383F8003800FF03F
+8003000FE03F8007000FE03F000E000FC03F000C000FC01C000C001FC000001C001F8000
+0018001F80000018001F80000000003F80000000003F80000000003F00000000003F0000
+0000007F00000000007F00000000007E00000000007E0000000000FE0000000000FE0000
+000000FC000C000000FC000C000001FC001C000001FC0018001C01F80018007E01F80038
+007E03F8007000FE03F8006000FE07F800E000FE0E7C01C000781C7C03800078383E0F00
+003FF00FFC000007C003F0000029267EA42F>120 D E /Fw 139[28
+32 37 1[46 42 46 69 23 2[23 46 42 1[37 46 37 46 42 12[55
+46 2[51 65 8[51 1[60 2[60 18[21 46[{}24 83.333336 /Times-Bold
+rf /Fx 133[44 50 50 1[50 55 33 39 44 55 55 50 55 83 28
+2[28 55 50 33 44 55 44 1[50 12[66 3[61 78 72 4[39 4[72
+1[66 12[50 50 50 50 50 2[25 46[{}35 100.000000 /Times-Bold
+rf /Fy 135[40 2[40 40 40 2[40 2[40 3[40 2[40 40 40 40
+1[40 50[40 46[{}13 66.666664 /Courier rf /Fz 69[29 8[33
+1[37 37 3[29 47[29 33 33 48 33 33 18 26 22 33 33 33 33
+52 18 33 1[18 33 33 22 29 33 29 33 29 8[48 63 48 48 41
+37 44 48 37 48 48 59 41 1[26 22 1[48 37 41 48 44 1[48
+5[18 1[33 33 33 33 33 33 33 33 33 33 1[17 22 17 2[22
+22 40[{}67 66.666664 /Times-Roman rf /FA 2 122 df<0060000070000060000060
+00406020E06070F861F07C63E00F6F0003FC0000600003FC000F6F007C63E0F861F0E060
+7040602000600000600000700000600014157B9620>3 D<00600000F00000F00000F000
+00F00000F00000F0000060000060000060000060000060000060007861E0FFFFF0FFFFF0
+7861E000600000600000600000600000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+006000006000006000006000006000006000006000142F7CA31E>121
+D E /FB 81[66 53[60 86 1[66 40 47 53 1[66 60 66 100 33
+66 1[33 66 60 40 53 66 53 66 60 10[86 1[80 1[86 1[73
+6[47 3[80 1[86 1[86 6[40 3[60 60 60 60 60 60 3[40 45[{}38
+119.999947 /Times-Bold rf /FC 78[50 55[50 50 1[50 50
+28 39 33 1[50 50 50 78 3[28 50 1[33 44 50 44 50 44 11[72
+61 55 14[72 66 66 72 92 7[50 50 4[50 50 2[25 1[25 44[{}34
+100.000000 /Times-Roman rf /FD 4 122 df<00007000000000F800000000F8000000
+00F800000000F800000000F800000000F800000000F800000000F8000000007000007800
+7000F07C007001F0FF007007F87F80700FF03FE0703FE00FF0707F8003F870FE0000FE73
+F800003F77E000000FFF80000003FE00000000F800000003FE0000000FFF8000003F77E0
+0000FE73F80003F870FE000FF0707F803FE0703FE07F80700FF0FF007007F87C007001F0
+78007000F000007000000000F800000000F800000000F800000000F800000000F8000000
+00F800000000F800000000F800000000700000252B7AAD32>3 D<0000000FE0000000FF
+E0000003FC0000000FE00000003FC00000007F80000000FF00000000FE00000001FC0000
+0001FC00000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000007F000000007F00000000FE00000001FE00000
+003FC00000007F80000000FE00000007F8000000FFE0000000FFE000000007F800000000
+FE000000007F800000003FC00000001FE00000000FE000000007F000000007F000000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000001FC00000001FC00000000FE00000000FF000000007F80000000
+3FC00000000FE000000003FC00000000FFE00000000FE0236479CA32>102
+D<FE00000000FFE000000007F800000000FE000000007F800000003FC00000001FE00000
+000FE000000007F000000007F000000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000001FC00000001FC0000
+0000FE00000000FF000000007F800000003FC00000000FE000000003FC00000000FFE000
+0000FFE0000003FC0000000FE00000003FC00000007F80000000FF00000000FE00000001
+FC00000001FC00000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000007F000000007F00000000FE00000001F
+E00000003FC00000007F80000000FE00000007F8000000FFE0000000FE00000000236479
+CA32>I<0001C000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F000000007F000000007F000000003E000000003E000000003E0
+00000003E000000003E000000003E000000003E000000001C000000001C000000001C000
+000001C000000001C000000001C000003E01C03E00FFE1C3FF80FFFFFFFF80FFFFFFFF80
+FFFFFFFF80FFE1C3FF803E01C03E000001C000000001C000000001C000000001C0000000
+03E000000003E000000003E000000003E000000003E000000007F000000007F000000007
+F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
+00000007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
+0007F000000007F000000003E000000003E000000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000003
+E000000003E000000003E000000001C000000001C000000001C000000001C000000001C0
+00000001C000000001C000000001C000000001C000000001C00000215B7BC52C>121
+D E /FE 81[80 51[64 72 1[104 1[80 48 56 64 1[80 72 80
+120 40 80 1[40 2[48 64 1[64 1[72 13[80 104 112 88 112
+8[88 4[104 6[48 58[{}27 144.000000 /Times-Bold rf /FF
+81[42 51[32 37 37 55 37 42 23 32 32 42 42 42 42 60 23
+37 23 23 42 42 23 37 42 37 42 42 9[69 51 60 46 42 51
+60 51 60 1[69 3[28 1[60 51 51 60 55 51 51 6[28 42 42
+42 42 2[42 42 42 2[21 28 21 44[{}56 83.333336 /Times-Italic
+rf /FG 47[83 13[28 7[37 8[42 1[46 46 3[37 47[37 42 42
+60 42 42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28
+37 42 37 42 37 3[28 1[28 2[60 78 60 60 51 46 55 60 46
+60 60 74 51 60 32 28 60 60 46 51 60 55 55 60 1[37 3[23
+23 42 42 42 42 42 42 42 42 42 42 23 21 28 21 47 1[28
+28 28 1[69 37[{}81 83.333336 /Times-Roman rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -112 -353 3343 4 v -112 -227 4 126 v -84 -270
+a FG(T)-7 b(o)20 b(appear)f(in)h FF(Pr)l(oceedings)f(11th)h
+(International)e(Confer)m(ence)h(on)h(Data)g(Engineering)p
+FG(,)e(T)-7 b(aipei,)20 b(March)f(1995)p 3227 -227 V
+-112 -224 3343 4 v 684 286 a FE(Prairie:)49 b(A)36 b(Rule)f
+(Speci\256cation)e(Framew)o(ork)1268 469 y(f)l(or)j(Query)e(Optimizers)
+2598 417 y FD(\003)-16 b(y)1160 710 y FC(Dinesh)24 b(Das)650
+b(Don)25 b(Batory)1262 826 y(Department)g(of)g(Computer)f(Sciences)1277
+942 y(The)h(Uni)n(v)o(ersity)d(of)j(T)-7 b(e)o(xas)25
+b(at)f(Austin)1416 1058 y(Austin,)g(T)-7 b(e)o(xas)24
+b(78712\2611188)1358 1175 y FD(f)p FC(ddas,batory)p FD(g)p
+FC(@cs.ute)o(xas.edu)-112 1500 y FB(Abstract)-112 1692
+y FF(F)-5 b(r)l(om)28 b(our)f(e)n(xperience)o(,)h(curr)m(ent)f
+(rule-based)f(query)h(optimizer)o(s)-112 1792 y(do)22
+b(not)g(pr)l(o)o(vide)h(a)f(very)i(intuitive)e(and)g(well-de\256ned)f
+(fr)o(ame)o(work)-112 1891 y(to)30 b(de\256ne)f(rules)i(and)e(actions.)
+59 b(T)-8 b(o)31 b(r)m(emedy)f(this)h(situation,)h(we)-112
+1991 y(pr)l(opose)24 b(an)h(e)n(xtensible)g(and)g(structur)m(ed)g(alg)o
+(ebr)o(aic)f(fr)o(ame)o(work)-112 2090 y(called)e(Pr)o(airie)h(for)g
+(specifying)g(rules.)38 b(Pr)o(airie)23 b(facilitates)g(rule-)-112
+2190 y(writing)h(by)f(enabling)f(a)i(user)g(to)g(write)h(rules)f(and)f
+(actions)g(mor)m(e)-112 2290 y(quic)n(kly)-5 b(,)30 b(corr)m(ectly)f
+(and)e(in)i(an)f(easy-to-under)o(stand)d(and)j(easy-)-112
+2389 y(to-deb)n(ug)18 b(manner)-9 b(.)-29 2492 y(Query)24
+b(optimizer)o(s)h(consist)g(of)g(thr)m(ee)g(major)f(parts:)39
+b(a)24 b(sear)m(c)o(h)-112 2592 y(space)o(,)17 b(a)g(cost)h(model)e
+(and)h(a)g(sear)m(c)o(h)g(str)o(ate)m(gy)-5 b(.)28 b(The)17
+b(appr)l(oac)o(h)e(we)-112 2692 y(tak)o(e)20 b(is)h(only)f(to)g(de)o
+(velop)f(the)h(alg)o(ebr)o(a)f(whic)o(h)h(de\256nes)f(the)h(sear)m(c)o
+(h)-112 2791 y(space)29 b(and)g(the)h(cost)g(model)f(and)g(use)h(the)g
+(V)-9 b(olcano)28 b(optimizer)n(-)-112 2891 y(g)o(ener)o(ator)c(as)j
+(our)e(sear)m(c)o(h)h(engine)o(.)45 b(Using)26 b(Pr)o(airie)g(as)g(a)g
+(fr)l(ont-)-112 2990 y(end,)i(we)h(tr)o(anslate)f(Pr)o(airie)g(rules)g
+(to)g(V)-9 b(olcano)26 b(to)i(validate)f(our)-112 3090
+y(claim)20 b(that)g(Pr)o(airie)g(mak)o(es)g(it)h(easier)g(to)f(write)i
+(rules.)-29 3193 y(W)-8 b(e)17 b(describe)f(our)g(alg)o(ebr)o(a)f(and)h
+(pr)m(esent)g(e)n(xperimental)g(r)m(esults)-112 3293
+y(whic)o(h)e(show)h(that)g(using)g(a)g(high-le)o(vel)e(fr)o(ame)o(work)
+i(lik)o(e)g(Pr)o(airie)h(to)-112 3392 y(design)d(lar)m(g)o(e-scale)g
+(optimizer)o(s)h(does)g(not)f(sacri\256ce)h(ef)o(\256ciency)-5
+b(.)-112 3691 y FB(1)119 b(Intr)n(oduction)-112 3883
+y FG(Query)30 b(optimization)f([8])i(is)h(a)f(fundamental)e(part)i(of)f
+(database)-112 3982 y(systems.)43 b(It)26 b(is)g(the)f(process)f(of)h
+(generating)e(an)i(ef)n(\256cient)f(access)-112 4082
+y(plan)f(for)h(a)g(database)g(query)-5 b(.)39 b(Informally)-5
+b(,)22 b(an)i(access)g(plan)g(is)h(an)-112 4182 y(e)o(x)o(ecution)12
+b(strate)o(gy)i(for)h(a)g(query;)g(it)h(is)g(the)f(sequence)e(of)i(lo)n
+(w-le)n(v)o(el)-112 4281 y(database)24 b(retrie)n(v)n(al)h(operations)f
+(that,)i(when)f(e)o(x)o(ecuted,)g(produce)-112 4381 y(the)e(database)f
+(records)g(that)i(satisfy)f(the)g(query)-5 b(.)37 b(There)22
+b(are)h(three)-112 4481 y(basic)h(aspects)h(that)f(de\256ne)g(and)g
+(in\257uence)f(query)g(optimization:)-112 4580 y(the)d(search)g(space,)
+f(the)i(cost)f(model,)f(and)h(the)g(search)g(strate)o(gy)-5
+b(.)-29 4683 y(The)20 b FF(sear)m(c)o(h)f(space)h FG(is)i(the)e(set)h
+(of)f(logically)g(equi)n(v)n(alent)e(access)-112 4783
+y(plans)27 b(that)h(can)f(be)h(used)f(to)h(e)n(v)n(aluate)e(a)i(query)
+-5 b(.)50 b(All)28 b(plans)g(in)f(a)p -112 4867 788 4
+v -29 4921 a FA(\003)7 4944 y Fz(This)18 b(research)i(w)o(as)e
+(supported)i(in)f(part)g(by)f(grants)h(from)f(The)g(Uni)n(v)o(ersity)j
+(of)-112 5023 y(T)-5 b(e)o(xas)23 b(Applied)h(Research)h(Laboratories,)
+h(Schlumber)o(ger)m(,)g(and)e(Digital)g(Equip-)-112 5102
+y(ment)17 b(Corporation.)-26 5160 y FA(y)7 5184 y Fz(An)e(e)o(xpanded)i
+(v)o(ersion)f(of)f(this)h(paper)g(is)f(a)o(v)n(ailable)k(as)c(T)-5
+b(echnical)18 b(Report)e(TR)-112 5263 y(94\26116)h(by)g(anon)o(ymous)h
+(ftp)f(from)g Fy(ftp.cs.utexas.edu)p Fz(.)2044 1500 y
+FG(query')-5 b(s)20 b(search)h(space)h(return)e(the)h(same)h(result;)g
+(ho)n(we)n(v)o(er)m(,)d(some)2044 1600 y(plans)f(are)g(more)f(ef)n
+(\256cient)h(than)g(others.)28 b(The)17 b FF(cost)i(model)f
+FG(assigns)2044 1699 y(a)h(cost)h(to)g(each)f(plan)f(in)i(the)f(search)
+g(space.)29 b(The)19 b(cost)h(of)f(a)g(plan)g(is)2044
+1799 y(an)e(estimate)h(of)g(the)f(resources)g(used)g(when)g(the)h(plan)
+f(is)i(e)o(x)o(ecuted;)2044 1899 y(the)k(lo)n(wer)h(the)f(cost,)i(the)f
+(better)f(the)h(plan.)39 b(The)23 b FF(sear)m(c)o(h)h(str)o(ate)m(gy)
+2044 1998 y FG(is)i(a)f(speci\256cation)f(of)h(which)f(plans)h(in)g
+(the)g(search)g(space)g(are)g(to)2044 2098 y(be)20 b(e)o(xamined.)2127
+2197 y(T)m(raditionally)-5 b(,)19 b(query)h(optimizers)g(ha)n(v)o(e)h
+(been)f(b)n(uilt)i(as)g(mono-)2044 2297 y(lithic)i(subsystems)f(of)h(a)
+g(DBMS.)h(This)f(simply)f(re\257ects)h(the)g(f)o(act)2044
+2397 y(that)16 b(traditional)g(database)g(systems)g(are)h(themselv)o
+(es)f(monolithic:)2044 2496 y(the)j(algorithms)f(used)h(for)f(storing)g
+(and)h(retrie)n(ving)e(data)i(are)g(hard-)2044 2596 y(wired)25
+b(and)g(are)g(rather)g(dif)n(\256cult)f(to)i(change.)43
+b(The)25 b(need)g(to)h(ha)n(v)o(e)2044 2696 y(e)o(xtensible)16
+b(database)i(systems,)g(and)f(in)h(turn)f(e)o(xtensible)g(optimiz-)2044
+2795 y(ers,)27 b(has)g(long)e(been)g(recognized)f(in)i(systems)g(lik)o
+(e)h(Genesis)f([1],)2044 2895 y(EXODUS)15 b([9],)g(Starb)n(urst)g
+([10],)f(and)h(Postgres)g([12].)26 b(Rule-based)2044
+2994 y(query)18 b(optimizers)i(are)g(among)e(the)j(major)e(conceptual)f
+(adv)n(ances)2044 3094 y(that)29 b(ha)n(v)o(e)f(been)h(proposed)e(to)i
+(deal)g(with)g(query)f(optimizer)g(e)o(x-)2044 3194 y(tensibility)c
+([6,)13 b(7,)g(9,)g(10].)40 b(The)24 b(e)o(xtensibility)g(translates)g
+(into)g(the)2044 3293 y(ability)e(to)h(incorporate)d(ne)n(w)i
+(operators,)g(algorithms,)f(cost)i(mod-)2044 3393 y(els,)k(or)e(search)
+g(strate)o(gies)g(without)g(changing)e(the)j(optimization)2044
+3493 y(algorithm.)2127 3592 y(In)21 b(this)i(paper)m(,)d(we)i(describe)
+f(an)h(algebraic)f(frame)n(w)o(ork)e(called)2044 3692
+y FF(Pr)o(airie)g FG(for)f(specifying)f(rules)i(in)g(a)g(rule-based)f
+(query)f(optimizer)-5 b(.)2044 3791 y(Prairie)27 b(is)h(similar)f(to)h
+(other)e(rule)h(speci\256cation)f(languages)g(lik)o(e)2044
+3891 y(Starb)n(urst)d([10])g(and)h(V)-11 b(olcano)23
+b([7],)h(and)f(indeed,)h(we)g(ha)n(v)o(e)f(based)2044
+3991 y(our)h(w)o(ork)h(on)g(V)-11 b(olcano)24 b(to)h(capture)f(most)i
+(of)f(the)g(adv)n(antages)e(of)2044 4090 y(rule-based)15
+b(optimizers.)27 b(Ho)n(we)n(v)o(er)m(,)15 b(Prairie)i(attempts)f(to)h
+(pro)o(vide)2044 4190 y(some)26 b(k)o(e)o(y)f(features)g(that,)j(we)e
+(ha)n(v)o(e)f(found,)h(simplify)f(the)h(ef)n(fort)2044
+4290 y(in)20 b(writing)g(rules:)2106 4466 y(1.)41 b(A)27
+b(frame)n(w)o(ork)d(in)i(which)g(users)h(can)f(de\256ne)g(a)h(query)e
+(opti-)2210 4565 y(mizer)i(concisely)h(in)g(terms)g(of)g(a)g
+(well-de\256ned)f(set)i(of)f(op-)2210 4665 y(erators)g(and)g
+(algorithms.)52 b FF(All)29 b FG(operators)e(and)h(algorithms)2210
+4764 y(are)21 b(considered)e(\256rst-class)j(objects,)f(i.e.,)h
+FF(any)e FG(of)h(them)g(can)2210 4864 y(occur)26 b(in)h(an)o(y)g(rule,)
+h(and)f FF(only)g FG(these)g(operators)f(and)h(algo-)2210
+4964 y(rithms)19 b(can)g(appear)f(in)h(rules.)29 b(This)19
+b(scheme)g(eliminates)g(the)2210 5063 y(need)29 b(for)h(special)g
+(classes)h(of)f(operators)e(and)i(algorithms,)2210 5163
+y(such)17 b(as)i(enforcers)d(in)i(V)-11 b(olcano)17 b(and)h(glue)f(in)h
+(Starb)n(urst,)g(that)2210 5263 y(signi\256cantly)h(complicate)g(rule)h
+(speci\256cation.)p eop
+%%Page: 2 2
+2 1 bop -50 21 a FG(2.)41 b(A)17 b(frame)n(w)o(ork)e(in)i(which)f
+(users)h(can)g(de\256ne)g(a)g(list)h(of)f(proper)n(-)54
+120 y(ties)g(to)f(characterize)f(the)h(e)o(xpressions)f(generated)g(in)
+h(the)h(op-)54 220 y(timization)g(process.)28 b(Again,)18
+b(the)h(goal)e(here)h(is)i(to)e(allo)n(w)h(the)54 319
+y(user)h(to)h(treat)g FF(all)g FG(properties)e(as)j(ha)n(ving)d(equal)h
+(status.)32 b(This)54 419 y(is)22 b(dif)n(ferent)d(from)h(V)-11
+b(olcano)21 b(where)f(the)h(user)g(must)h(classify)54
+519 y(properties)30 b(as)i(logical,)h(physical,)g(or)f
+(operator/algorithm)54 618 y(ar)o(guments.)-50 789 y(3.)41
+b(A)15 b(frame)n(w)o(ork)d(in)j(which)g(users)g(can)f(specify)g
+(mapping)f(func-)54 889 y(tions)k(between)g(properties)g(concomitantly)
+e(with)j(the)g(corre-)54 988 y(sponding)13 b(rules.)23
+b(This)13 b(contrasts)g(with)g(e)o(xisting)g(approach)o(es)54
+1088 y(in)20 b(which)f(mappings)g(between)g(properties)g(are)h
+(fragmented)54 1188 y(into)d(multiple)g(functions)f(and)g(at)i
+(logically)f(dif)n(ferent)f(places)54 1287 y(than)h(the)h
+(corresponding)d(rules.)28 b(Research)18 b(into)f(rule-based)54
+1387 y(optimizers)31 b(has)i(re)n(v)o(ealed)d(that)j(property-mapping)
+27 b(func-)54 1487 y(tions)k(are)g(a)h(major)f(source)g(of)g(user)g(ef)
+n(fort,)i(so)f(this)g(is)g(an)54 1586 y(important)18
+b(goal.)-50 1757 y(4.)41 b(The)16 b(format)h(\(Prairie\))f(in)i(which)e
+(users)i(can)f(cleanly)f(specify)54 1857 y(rules)e(is)i(not)e
+(necessarily)h(the)f(same)h(format)f(needed)g(for)g(gen-)54
+1956 y(erating)24 b(ef)n(\256cient)i(optimizers.)45 b(Thus,)26
+b(there)f(is)i(a)f(need)f(for)54 2056 y(a)c(pre-processor)e(\(written)h
+(by)h(us\))g(that)g(translates)h(between)54 2156 y(these)e(competing)e
+(representations.)-29 2343 y(Prairie)26 b(stri)n(v)o(es)h(for)f
+(uniformity)f(in)i(dealing)f(with)h(issues)h(that)-112
+2443 y(ha)n(v)o(e)h(been)g(a)h(source)f(of)h(most)g(user)g(ef)n(fort)f
+(and)g(potential)g(user)-112 2542 y(errors.)69 b(In)33
+b(the)h(follo)n(wing)f(sections,)k(we)d(present)f(the)h(Prairie)-112
+2642 y(frame)n(w)o(ork.)45 b(W)-7 b(e)27 b(e)o(xplain)e(ho)n(w)h(our)f
+(P2V)h(pre-processor)e(maps)-112 2742 y(Prairie)30 b(rule)g
+(speci\256cations)g(into)g(V)-11 b(olcano)29 b(rule)h(speci\256cations)
+-112 2841 y(that)g(can)g(be)g(processed)f(ef)n(\256ciently)-5
+b(.)58 b(Experimental)28 b(results)j(to)-112 2941 y(support)26
+b(this)i(claim)g(are)g(gi)n(v)o(en)f(in)h(Section)f(4,)j(where)d(we)i
+(com-)-112 3041 y(pare)13 b(implementations)f(of)i(the)h(T)-6
+b(e)o(xas)14 b(Instruments)e(Open)i(OODB)-112 3140 y(query)25
+b(optimizer)h(using)h(both)f(Prairie)h(and)g(V)-11 b(olcano.)49
+b(W)-7 b(e)29 b(con-)-112 3240 y(clude)19 b(with)h(a)h(summary)e(and)g
+(related)h(research.)-112 3527 y FB(2)119 b(Prairie:)55
+b(A)37 b(language)f(f)m(or)f(rule)i(speci-)67 3676 y(\256cation)-112
+3864 y FG(The)22 b(basic)h(concepts)f(and)h(de\256nitions)f(that)h
+(underlie)f(the)h(Prairie)-112 3964 y(model)13 b(are)h(presented)f(in)h
+(this)h(section.)27 b(The)14 b(goal)g(is)h(to)f(lay)h(a)f(foun-)-112
+4063 y(dation)g(for)h(reasoning)f(about)g(query)h(optimization)e
+(algebraically;)-112 4163 y(this)21 b(is)i(necessary)d(for)h(our)f
+(subsequent)g(discussion)h(about)f(trans-)-112 4262 y(lating)f(Prairie)
+h(speci\256cations)g(to)h(those)f(of)f(V)-11 b(olcano.)-112
+4507 y Fx(2.1)99 b(Notation)24 b(and)i(assumptions)-112
+4665 y Fw(Stor)o(ed)k(Files)i(and)g(Str)o(eams.)81 b
+FG(A)32 b(\256le)g(is)g FF(stor)m(ed)i FG(if)e(its)g(tuples)-112
+4764 y(reside)c(on)g(disk.)54 b(In)29 b(the)f(case)h(of)g(relational)e
+(databases,)j(stored)-112 4864 y(\256les)i(are)f(sometimes)g(called)g
+FF(base)g(r)m(elations)p FG(;)37 b(we)32 b(will)g(denote)-112
+4964 y(them)25 b(by)h Fv(R)h FG(or)e Fv(R)438 4976 y
+Fu(i)466 4964 y FG(.)47 b(In)25 b(object-oriented)f(schemas,)i(stored)g
+(\256les)-112 5063 y(are)g FF(classes)p FG(;)j(we)e(will)g(denote)e
+(them)g(by)h FF(C)h FG(or)f FF(C)1366 5075 y Fu(i)1394
+5063 y FG(.)47 b(Henceforth,)-112 5163 y(whene)n(v)o(er)21
+b(we)j(refer)f(to)h(a)g(stored)f(\256le,)i(we)f(mean)f(a)h(relation)f
+(or)g(a)-112 5263 y(class;)d(when)f(the)g(distinction)g(is)h
+(unimportant,)d(we)j(will)g(use)f Fv(F)32 b FG(or)2044
+21 y Fv(F)2097 33 y Fu(i)2125 21 y FG(.)44 b(A)26 b FF(str)m(eam)f
+FG(is)i(a)e(sequence)f(of)h(tuples)g(and)f(is)j(the)e(result)g(of)g(a)
+2044 120 y(computation)d(on)i(one)f(or)h(more)g(streams)g(or)g(stored)g
+(\256les;)j(tuples)2044 220 y(of)21 b(streams)i(are)e(returned)g(one)g
+(at)i(a)f(time,)g(typically)f(on)h(demand.)2044 319 y(Streams)e(can)g
+(be)g FF(named)p FG(,)f(denoted)g(by)g Fv(S)3268 331
+y Fu(i)3296 319 y FG(,)h(or)g FF(unnamed)p FG(.)2044
+559 y Fw(Database)f(Operations.)82 b FG(An)21 b FF(oper)o(ation)d
+FG(is)k(a)f(computation)d(on)2044 659 y(one)j(or)h(more)f(streams)h(or)
+g(stored)g(\256les.)35 b(There)21 b(are)h(tw)o(o)h(types)e(of)2044
+759 y(database)d(operations)e(in)j(Prairie:)29 b(abstract)18
+b(\(or)g(implementation-)2044 858 y(unspeci\256ed\))34
+b(operators)f(and)i(concrete)g(algorithms.)73 b(Each)35
+b(is)2044 958 y(detailed)19 b(belo)n(w)-5 b(.)2210 1157
+y Fw(Operators.)39 b FG(Abstract)13 b(\(or)g(conceptual\))g
+FF(op)o(er)o(ato)o(r)o(s)g FG(specify)2392 1257 y(computations)20
+b(on)i(streams)g(or)g(stored)g(\256les;)i(the)o(y)d(are)2392
+1357 y(denoted)d(by)h(all)h(capital)g(letters)f(\(e.g.,)g(JOIN\).)g
+(Opera-)2392 1456 y(tors)24 b(ha)n(v)o(e)f(tw)o(o)h(types)f(of)g
+(parameters:)35 b(essential)24 b(and)2392 1556 y(additional.)49
+b FF(Essential)28 b(par)o(ameter)o(s)f FG(are)g(the)g(stream)2392
+1656 y(or)18 b(\256le)g(inputs)f(to)g(an)h(operator;)e(these)i(are)f
+(the)h(primary)2392 1755 y(inputs)g(to)h(be)f(processed)f(by)h(an)g
+(operator)-5 b(.)27 b FF(Additional)2392 1855 y(par)o(ameter)o(s)j
+FG(are)f(\252\256ne-grain\272)f(quali\256cations)h(of)g(an)2392
+1954 y(operator;)21 b(their)g(purpose)e(is)k(to)e(describe)g(an)g
+(operator)2392 2054 y(in)g(more)e(detail)h(than)g(essential)h
+(parameters.)2210 2194 y Fw(Algorithms.)40 b FF(Algorithms)55
+b FG(are)h(concrete)e(implementa-)2392 2293 y(tions)21
+b(of)g(conceptual)e(operators;)h(the)o(y)g(will)i(be)e(repre-)2392
+2393 y(sented)13 b(in)g(lo)n(wer)g(case)g(with)g(the)g(\256rst)g
+(letter)g(capitalized)2392 2493 y(\(e.g.,)k(Nested)p
+2815 2493 25 4 v 29 w(loops\).)28 b(Algorithms)15 b(ha)n(v)o(e)i(at)g
+(least)h(the)2392 2592 y(same)30 b(essential)f(and)f(additional)g
+(parameters)f(as)j(the)2392 2692 y(conceptual)21 b(operators)h(that)g
+(the)o(y)g(implement.)3798 2662 y Ft(1)3871 2692 y FG(Fur)n(-)2392
+2792 y(thermore,)28 b(there)g(can)g(be,)h(and)f(usually)f(are,)j(se)n
+(v)o(eral)2392 2891 y(algorithms)19 b(for)h(a)h(particular)d(operator)
+-5 b(.)2044 3091 y(T)e(able)26 b(1)h(lists)h(some)f(operators)e(and)h
+(algorithms)f(implementing)2044 3191 y(them)20 b(together)e(with)j
+(their)f(additional)f(parameters.)2044 3430 y Fw(Operator)i(T)-6
+b(r)o(ees.)82 b FG(An)23 b FF(oper)o(ator)e(tr)m(ee)i
+FG(is)h(a)f(rooted)e(tree)h(whose)2044 3530 y(non-leaf,)27
+b(or)g FF(interior)p FG(,)i(nodes)e(are)h(database)e(operations)g
+(\(oper)n(-)2044 3630 y(ators)g(or)g(algorithms\))f(and)g(whose)h(leaf)
+h(nodes)e(are)i(stored)e(\256les.)2044 3729 y(The)e(children)g(of)g(an)
+h(interior)e(node)h(in)h(an)g(operator)e(tree)h(are)h(the)2044
+3829 y(essential)i(parameters)e(\(i.e.,)i(the)g(stream)f(or)g(\256le)h
+(parameters\))e(of)2044 3928 y(the)h(node.)43 b(Additional)24
+b(parameters)g(are)i(implicitly)e(attached)h(to)2044
+4028 y(each)h(node.)49 b(Algebraically)-5 b(,)26 b(operator)f(trees)j
+(are)f(compositions)2044 4128 y(of)18 b(database)g(operations;)g(thus,)
+g(we)h(will)g(also)g(call)g(operator)e(trees)2044 4227
+y FF(e)n(xpr)m(essions)p FG(;)j(both)g(terms)g(will)h(be)f(used)g
+(interchangeably)-5 b(.)2044 4447 y(E)p Fz(XAMPLE)19
+b FG(1.)153 b(A)29 b(simple)f(e)o(xpression)f(and)h(its)h(operator)e
+(tree)2044 4547 y(representation)22 b(are)h(sho)n(wn)h(in)g(Figure)f
+(1\(a\).)40 b(Relations)24 b Fv(R)3831 4559 y Ft(1)3893
+4547 y FG(and)2044 4646 y Fv(R)2107 4658 y Ft(2)2172
+4646 y FG(are)j(\256rst)h(RET)m(rie)n(v)o(ed,)f(then)g(JOINed,)h(and)f
+(\256nally)g(SOR)-5 b(T)f(ed)2044 4746 y(resulting)13
+b(in)h(a)h(stream)f(sorted)g(on)f(a)i(speci\256c)f(attrib)n(ute.)27
+b(The)14 b(\256gure)2044 4846 y(sho)n(ws)g(only)g(the)h(essential)g
+(parameters)e(of)i(the)f(v)n(arious)g(operators,)2044
+4945 y(not)20 b(the)g(additional)f(parameters.)915 b
+Fs(\003)p 2044 5107 788 4 v 2129 5160 a Fr(1)2163 5184
+y Fz(Algorithms)20 b(may)f(ha)o(v)o(e)g Fq(tuning)h(par)o(ameter)o(s)g
+Fz(which)f(are)h(not)f(parameters)h(of)2044 5263 y(the)e(operators)g
+(the)o(y)g(implement.)p eop
+%%Page: 3 3
+3 2 bop -112 71 2323 13 v -112 138 4 67 v -59 118 a Fp(Operator)p
+330 138 V 211 w(Description)p 912 138 V 294 w(Additional)17
+b(P)o(arameters)p 1581 138 V 102 w(Algorithm)p 2206 138
+V -112 150 2323 13 v -112 216 4 67 v -59 231 a Fo(JOIN\()p
+Fu(S)127 239 y Fn(1)159 231 y Fo(,)d Fu(S)229 239 y Fn(2)261
+231 y Fo(\))p 330 216 V 384 232 a(Join)g(streams)g Fu(S)728
+240 y Fn(1)760 232 y Fo(,)g Fu(S)830 240 y Fn(2)p 912
+216 V 965 197 a Fo(tuple)p 1084 197 18 4 v 22 w(order)p
+1581 216 4 67 v 409 w(Nested)p 1799 197 18 4 v 21 w(loops\()p
+Fu(S)2003 205 y Fn(1)2035 197 y Fo(,)g Fu(S)2105 205
+y Fn(2)2137 197 y Fo(\))p 2206 216 4 67 v 1585 220 626
+4 v -112 283 4 67 v 330 283 V 912 283 V 965 263 a(join)p
+1058 263 18 4 v 22 w(predicate)p 1581 283 4 67 v 344
+w(Mer)o(ge)p 1788 263 18 4 v 21 w(join\()p Fu(S)1956
+271 y Fn(1)1989 263 y Fo(,)g Fu(S)2059 271 y Fn(2)2091
+263 y Fo(\))p 2206 283 4 67 v -112 286 2323 4 v -112
+363 4 77 v -59 407 a(RET\()p Fu(F)9 b Fo(\))p 330 363
+V 384 412 a(Retrie)o(v)o(e)14 b(\256le)g Fu(F)p 912 363
+V 965 339 a Fo(tuple)p 1084 339 18 4 v 22 w(order)p 1581
+363 4 77 v 1634 352 a(File)p 1727 352 18 4 v 22 w(scan\()p
+Fu(F)9 b Fo(\))p 2206 363 4 77 v -112 429 4 67 v 330
+429 V 912 429 V 965 410 a(selection)p 1175 410 18 4 v
+21 w(predicate)p 1581 429 4 67 v 1585 397 622 4 v 2206
+429 4 67 v -112 497 4 68 v 330 497 V 912 497 V 965 477
+a(projected)p 1184 477 18 4 v 22 w(attrib)o(utes)p 1581
+497 4 68 v 1634 469 a(Inde)o(x)p 1768 469 18 4 v 22 w(scan\()p
+Fu(F)g Fo(\))p 2206 497 4 68 v -112 500 2323 4 v -112
+567 4 67 v -59 582 a(SOR)m(T\()p Fu(S)147 590 y Fn(1)178
+582 y Fo(\))p 330 567 V 384 583 a(Sort)15 b(stream)f
+Fu(S)705 591 y Fn(1)p 912 567 V 965 580 a Fo(tuple)p
+1084 580 18 4 v 22 w(order)p 1581 567 4 67 v 1634 547
+a(Mer)o(ge)p 1788 547 18 4 v 21 w(sort\()p Fu(S)1953
+555 y Fn(1)1986 547 y Fo(\))p 2206 567 4 67 v 1585 570
+626 4 v -112 633 4 67 v 330 633 V 912 633 V 1581 633
+V 1634 613 a(Null\()p Fu(S)1797 621 y Fn(1)1830 613 y
+Fo(\))p 2206 633 V -112 646 2323 13 v -112 793 a FG(T)-7
+b(able)18 b(1:)28 b(Operators)17 b(and)g(algorithms)g(in)h(a)h
+(centralized)e(query)f(optimizer)h(and)-112 893 y(their)i(additional)g
+(parameters)p 2477 33 1523 13 v 2477 99 4 67 v 2530 80
+a Fp(Pr)o(operty)p 3032 99 V 333 w(Description)p 3996
+99 V 2477 112 1523 13 v 2477 178 4 67 v 2530 158 a Fo(join)p
+2623 158 18 4 v 22 w(predicate)p 3032 178 4 67 v 230
+w(join)c(predicate)g(for)g(JOIN)g(operator)p 3996 178
+V 2477 182 1523 4 v 2477 248 4 67 v 2530 228 a(selection)p
+2740 228 18 4 v 21 w(predicate)p 3032 248 4 67 v 114
+w(selection)g(predicate)f(for)h(RET)f(operator)p 3996
+248 V 2477 251 1523 4 v 2477 318 4 67 v 2530 331 a(tuple)p
+2649 331 18 4 v 21 w(order)p 3032 318 4 67 v 3085 298
+a(tuple)h(order)g(of)g(resulting)g(stream,)p 3996 318
+V 2477 384 V 3032 384 V 3085 364 a(DONT)p 3250 364 18
+4 v 21 w(CARE)e(if)i(none)p 3996 384 4 67 v 2477 388
+1523 4 v 2477 454 4 67 v 2530 434 a(num)p 2636 434 18
+4 v 21 w(records)p 3032 454 4 67 v 260 w(number)h(of)e(tuples)h(of)g
+(resulting)g(stream)p 3996 454 V 2477 457 1523 4 v 2477
+524 4 67 v 2530 504 a(tuple)p 2649 504 18 4 v 21 w(size)p
+3032 524 4 67 v 327 w(size)f(of)h(indi)o(vidual)g(tuple)g(in)g(stream)p
+3996 524 V 2477 527 1523 4 v 2477 593 4 67 v 2530 574
+a(projected)p 2749 574 18 4 v 21 w(attrib)o(utes)p 3032
+593 4 67 v 103 w(projected)g(attrib)o(utes)g(for)g(RET)f(operator)p
+3996 593 V 2477 597 1523 4 v 2477 663 4 67 v 2530 643
+a(attrib)o(utes)p 3032 663 V 340 w(list)h(of)g(attrib)o(utes)p
+3996 663 V 2477 666 1523 4 v 2477 733 4 67 v 2530 713
+a(cost)p 3032 733 V 461 w(estimated)g(cost)f(of)h(algorithm)p
+3996 733 V 2477 745 1523 13 v 2477 893 a FG(T)-7 b(able)16
+b(2:)28 b(Properties)15 b(of)h(nodes)f(in)i(an)f(operator)e(tree)p
+-105 1246 1938 4 v -105 2116 4 870 v 61 1362 a Fm(SOR)n(T)c(\(JOIN)g
+(\(RET)h(\()p Fl(R)449 1374 y Fn(1)481 1362 y Fm(\),)f(RET)h(\()p
+Fl(R)661 1374 y Fn(2)693 1362 y Fm(\)\)\))346 1462 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodesort 16 { .5 3.36499
+0.06248 false .5 12.47998 InitRnode } NewNode end end
+
+346 1462 a Fm(SOR)n(T)353 1557 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoin 16 { .5 3.36499
+0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 353 1557 a Fm(JOIN)303
+1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodesort
+/TheNodejoin InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303 1732 a 264 1651 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderetr1 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 264 1651 a Fm(RET)453 1651
+y
+ tx@Dict begin tx@NodeDict begin { } /TheNoderetr2 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 453 1651 a Fm(RET)303 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoin
+/TheNoderetr1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 303 1732 a 303 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoin
+/TheNoderetr2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+
+303 1732 a 265 1740 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoder1 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 265 1740 a Fl(R)308 1752 y Fn(1)455
+1740 y
+ tx@Dict begin tx@NodeDict begin { } /TheNoder2 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 455 1740 a Fl(R)498 1752 y Fn(2)303 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderetr1
+/TheNoder1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303
+1732 a 303 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderetr2
+/TheNoder2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303 1732 a 27 1914 a Fz(\(a\))37 b(An)f(e)o
+(xpression)j(and)e(its)27 1993 y(corresponding)19 b(operator)g(tree)p
+872 2091 4 820 v 1237 1457 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodemergesort 16 { .5 3.36499
+1.09 false .5 22.25996 InitRnode } NewNode end end
+ 1237 1457 a Fm(Mer)o(ge)p
+1346 1457 13 4 v 16 w(sort)1219 1552 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodenestedloops 16 { .5 3.36499
+1.07999 false .5 26.51999 InitRnode } NewNode end end
+ 1219 1552 a Fm(Nested)p
+1336 1552 13 4 v 16 w(loops)1235 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodemergesort
+/TheNodenestedloops InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1158
+1651 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodefilescanr1 16 { .5 3.36499
+0.04 false .5 18.465 InitRnode } NewNode end end
+ 1158 1651 a Fm(File)p 1225 1651 13 4 v 15 w(scan)1347
+1651 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodefilescanr2 16 { .5 3.36499
+0.04 false .5 18.465 InitRnode } NewNode end end
+ 1347 1651 a Fm(File)p 1414 1651 13 4 v 15 w(scan)1235
+1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodenestedloops
+/TheNodefilescanr1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1235 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodenestedloops
+/TheNodefilescanr2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1197 1740
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNoder1 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 1197 1740 a Fl(R)1240 1752 y Fn(1)1386 1740 y
+ tx@Dict begin tx@NodeDict begin { } /TheNoder2 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 1386
+1740 a Fl(R)1429 1752 y Fn(2)1235 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodefilescanr1
+/TheNoder1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1235 1732 a
+1235 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodefilescanr2
+/TheNoder2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1235 1732 a 959 1914 a Fz(\(b\))h(Possible)i(access)g(plan)
+g(for)959 1993 y(operator)d(tree)f(in)f(\(a\))p 1829
+2116 4 870 v -105 2119 1938 4 v 1831 2136 19 877 v -89
+2136 1938 19 v -26 2318 a FG(Figure)i(1:)30 b(Example)19
+b(of)h(an)g(operator)e(tree)i(and)g(access)h(plan)-112
+2520 y Fw(Descriptors.)82 b FG(A)16 b FF(pr)l(operty)g
+FG(of)g(a)h(node)e(is)i(a)g(\(user)n(-de\256ned\))d(v)n(ari-)-112
+2620 y(able)31 b(that)g(contains)g(information)e(used)i(by)g(an)h
+(optimizer)-5 b(.)62 b(An)-112 2720 y FF(annotation)25
+b FG(is)k(a)f Fk(h)p FF(pr)l(operty)-5 b(,)21 b(value)n
+Fk(i)29 b FG(pair)f(that)g(is)h(assigned)e(to)h(a)-112
+2819 y(node.)40 b(A)25 b FF(descriptor)h FG(is)g(a)f(list)g(of)f
+(annotations)f(that)h(describes)g(a)-112 2919 y(node)j(of)h(an)h
+(operator)e(tree;)33 b(e)n(v)o(ery)27 b(node)g(has)i(its)h(o)n(wn)e
+(descrip-)-112 3019 y(tor)-5 b(.)56 b(As)30 b(an)f(e)o(xample,)h(T)-7
+b(able)29 b(2)h(lists)g(some)f(typical)g(properties)-112
+3118 y(that)20 b(might)g(be)h(used)g(in)f(a)i(descriptor)-5
+b(.)29 b(Note)21 b(that)g(descriptors)e(for)-112 3218
+y(stream)24 b(and)h(stored)f(\256les)i(may)f(ha)n(v)o(e)f(dif)n(ferent)
+g(properties.)42 b(The)-112 3317 y(follo)n(wing)17 b(notations)g(will)j
+(be)e(useful)g(in)h(our)f(subsequent)f(discus-)-112 3417
+y(sions.)27 b(If)14 b Fv(S)228 3429 y Fu(i)268 3417 y
+FG(is)g(a)g(stream,)g(then)g Fj(D)876 3429 y Fi(i)913
+3417 y FG(is)g(its)g(descriptor)-5 b(.)26 b(Annotations)-112
+3517 y(of)20 b Fv(S)29 3529 y Fu(i)78 3517 y FG(are)h(accessed)g(by)f
+(a)i(structure)e(member)f(relationship,)h(e.g.,)-112
+3616 y Fj(D)-39 3628 y Fi(i)-14 3616 y Fv(:)p FG(num)p
+163 3616 25 4 v 29 w(records)n(.)29 b(Also,)20 b(let)h
+Fv(E)k FG(be)20 b(an)g(e)o(xpression)e(and)h(let)h Fj(D)h
+FG(be)-112 3716 y(its)g(descriptor)-5 b(.)28 b(W)-7 b(e)21
+b(will)g(write)g(this)f(as)h Fv(E)28 b Fh(:)23 b Fj(D)p
+FG(.)-112 3904 y(E)p Fz(XAMPLE)c FG(2.)145 b(The)19 b(e)o(xpression,)
+-112 4055 y Fo(SOR)m(T)o Ft(\()p Fo(JOIN)o Ft(\()p Fo(RET)o
+Ft(\()p Fu(R)396 4063 y Fn(1)428 4055 y Ft(\):)p Fi(D)530
+4063 y Fg(3)566 4055 y Fu(;)p Fo(RET)o Ft(\()p Fu(R)772
+4063 y Fn(2)804 4055 y Ft(\):)p Fi(D)906 4063 y Fg(4)942
+4055 y Ft(\):)p Fi(D)1044 4063 y Fg(5)1079 4055 y Ft(\):)p
+Fi(D)1181 4063 y Fg(6)-112 4206 y FG(corresponds)k(to)j(the)g(operator)
+e(tree)i(in)g(Figure)f(1\(a\),)h(and)g(sho)n(ws)-112
+4305 y(the)20 b(descriptors)f(of)h(the)g(v)n(arious)f(nodes.)706
+b Fs(\003)-29 4466 y FG(A)19 b(notational)e(simpli\256cation)h(can)g
+(be)h(made)f(here.)28 b(Additional)-112 4565 y(parameters)13
+b(of)i(operators)f(can)h(be)g(treated)g(the)g(same)g(w)o(ay)h(as)g
+(other)-112 4665 y(properties)j(of)i(a)h(node;)f(essential)h
+(parameters,)e(ho)n(we)n(v)o(er)m(,)f(are)j FF(e)n(x-)-112
+4764 y(pr)m(essions)p FG(.)28 b(Thus,)17 b(the)h(term)f(descriptor)f
+(in)h(the)h(remainder)d(of)i(this)-112 4864 y(paper)24
+b(will)i(refer)f(to)h(a)g(set)h(of)e(properties,)g(including)f
+(additional)-112 4964 y(parameters,)18 b(as)j(sho)n(wn)f(in)g(T)-7
+b(able)20 b(2.)-29 5063 y(Currently)-5 b(,)34 b(descriptor)e
+(properties)g(are)h(de\256ned)f(entirely)g(by)-112 5163
+y(the)i(user;)42 b(ho)n(we)n(v)o(er)m(,)36 b(we)f(en)m(vision)e(pro)o
+(viding)f(a)j(hierarchy)d(of)-112 5263 y(pre-de\256ned)17
+b(descriptor)i(types)h(to)g(aid)h(this)f(process.)2044
+1243 y Fw(Access)f(Plans.)82 b FG(An)18 b FF(access)h(plan)e
+FG(is)i(an)f(operator)e(tree)i(in)h(which)2044 1342 y(all)i(interior)e
+(nodes)g(are)h(algorithms.)2044 1593 y(E)p Fz(XAMPLE)f
+FG(3.)144 b(An)19 b(access)h(plan)f(for)g(the)g(operator)e(tree)j(in)f
+(Fig-)2044 1692 y(ure)h(1\(a\))f(is)i(sho)n(wn)f(in)g(Figure)f(1\(b\).)
+828 b Fs(\003)2044 1977 y Fx(2.2)99 b(Prairie)25 b(optimization)f
+(paradigm)2044 2149 y FG(Prairie)k(admits)g(tw)o(o)g(rather)g(dif)n
+(ferent)e(means)i(of)g(optimization:)2044 2248 y(top-do)n(wn)20
+b(and)h(bottom-up.)33 b(A)22 b(top-do)n(wn)e(query)h(optimizer)g(op-)
+2044 2348 y(timizes)27 b(the)f(parents)g(of)h(a)g(node)e(prior)h(to)h
+(optimizing)d(the)j(node)2044 2447 y(itself.)54 b(A)28
+b(bottom-up)e(optimizer)h(optimizes)h(the)g(children)f(of)h(a)2044
+2547 y(node)i(prior)h(to)g(optimizing)f(the)h(node.)62
+b(The)31 b(earliest)h(optimiz-)2044 2647 y(ers)g(\(System)g(R)h([11])e
+(and)h(R)2945 2617 y Ff(\003)3016 2647 y FG([3]\))f(emplo)o(yed)f(the)j
+(bottom-up)2044 2746 y(approach.)2127 2854 y(Our)19 b(research)f
+(concentrates)g(on)h(a)h(top-do)n(wn)e(optimization)f(of)2044
+2954 y(operator)24 b(trees.)49 b(W)-7 b(e)27 b(ha)n(v)o(e)f(chosen)g
+(this)h(approach)d(because)i(we)2044 3054 y(intend)d(to)h(translate)g
+(Prairie)g(rules)g(into)f(the)h(format)f(required)f(by)2044
+3153 y(the)28 b(V)-11 b(olcano)28 b(query)f(optimizer)g(generator)f
+([7])i(which)g(is)h(based)2044 3253 y(on)h(a)h(top-do)n(wn)e(strate)o
+(gy)-5 b(.)60 b(Gi)n(v)o(en)30 b(an)h(appropriate)d(search)i(en-)2044
+3353 y(gine,)24 b(Prairie)f(can)g(potentially)g(also)h(be)f(used)h
+(with)f(a)i(bottom-up)2044 3452 y(optimization)19 b(strate)o(gy;)g(ho)n
+(we)n(v)o(er)m(,)f(we)j(will)g(not)g(discuss)f(this)h(ap-)2044
+3552 y(proach)d(in)j(this)f(paper)-5 b(.)2127 3660 y(In)18
+b(query)e(optimization,)h(there)h(are)g(certain)f(annotations)g(\(such)
+2044 3760 y(as)30 b(additional)e(parameters\))f(that)j(are)f(kno)n(wn)e
+(before)h(an)o(y)h(opti-)2044 3859 y(mization)c(is)j(be)o(gun.)46
+b(These)26 b(annotations)f(can)i(be)f(computed)f(at)2044
+3959 y(the)32 b(time)g(that)g(the)g(operator)f(tree)h(is)h
+(initialized,)h(and)e(will)g(not)2044 4059 y(change)16
+b(with)i(application)e(of)h(rules.)28 b(Our)17 b(follo)n(wing)f
+(discussions)2044 4158 y(assume)k(operator)e(trees)j(are)f
+(initialized.)2127 4266 y(There)41 b(are)i(tw)o(o)f(types)g(of)g
+(algebraic)g(transformations)e(\(or)2044 4366 y FF(r)m(e)o(write)33
+b(rules)p FG(\))g(in)f(Prairie:)54 b(T)-8 b(-rules)32
+b(\(\252transformation)e(rules\272\))2044 4466 y(and)21
+b(I-rules)h(\(\252implementation)d(rules\272\).)35 b(Each)22
+b(rule)f(transforms)2044 4565 y(an)26 b(e)o(xpression)e(into)i(another)
+e(based)h(on)h(additional)e(conditions;)2044 4665 y(the)h
+(transformation)d(also)j(results)g(in)g(a)g(mapping)e(of)h(descriptors)
+2044 4764 y(between)13 b(e)o(xpressions.)24 b(W)-7 b(e)13
+b(de\256ne)g(T)-8 b(-rules)13 b(and)g(I-rules)g(precisely)2044
+4864 y(in)19 b(the)g(follo)n(wing)f(sections)h(and)f(illustrate)h(them)
+g(with)g(e)o(xamples.)2044 4964 y(Our)f(e)o(xamples)f(are)i(chosen)e
+(from)h(rules)g(that)h(w)o(ould)e(be)i(used)f(in)h(a)2044
+5063 y(centralized)24 b(relational)g(query)g(optimizer;)j(the)e
+(operators,)g(algo-)2044 5163 y(rithms,)h(and)e(properties)g(are)h
+(subsets)g(of)g(those)g(in)g(T)-7 b(ables)25 b(1)h(and)2044
+5263 y(2.)p eop
+%%Page: 4 4
+4 3 bop -110 24 1947 4 v -110 1928 4 1905 v 31 101 a
+Fu(E)s Ft(\()p Fu(x)147 109 y Fn(1)178 101 y Fu(;)11
+b(:)h(:)f(:)g(;)g(x)372 109 y Fl(n)412 101 y Ft(\))19
+b(:)g Fi(D)552 109 y Fg(1)606 101 y Ft(=)-11 b Ff(\))19
+b Fu(E)783 72 y Fe(0)805 101 y Ft(\()p Fu(x)869 109 y
+Fn(1)901 101 y Fu(;)12 b(:)f(:)g(:)g(;)g(x)1095 109 y
+Fl(n)1135 101 y Ft(\))19 b(:)g Fi(D)1275 109 y Fg(2)1656
+101 y Fo(\(1\))31 167 y Ff(ff)244 234 y Fo(pre-test)c(statements)31
+300 y Ff(gg)31 367 y Fo(test)31 433 y Ff(ff)244 500 y
+Fo(post-test)g(statements)31 566 y Ff(gg)493 708 y Fz(\(a\))j(General)g
+(form)f(of)g(a)g(T)-6 b(-rule)p -61 806 1849 4 v 31 883
+a Fo(JOIN)o Ft(\()p Fo(JOIN)p Ft(\()p Fu(S)375 891 y
+Fn(1)407 883 y Fu(;)11 b(S)479 891 y Fn(2)512 883 y Ft(\))18
+b(:)h Fi(D)651 891 y Fg(4)687 883 y Fu(;)11 b(S)759 891
+y Fn(3)791 883 y Ft(\))19 b(:)g Fi(D)931 891 y Fg(5)1656
+883 y Fo(\(2\))89 983 y Ft(=)-11 b Ff(\))18 b Fo(JOIN)p
+Ft(\()p Fu(S)406 991 y Fn(1)438 983 y Fu(;)11 b Fo(JOIN)p
+Ft(\()p Fu(S)662 991 y Fn(2)694 983 y Fu(;)g(S)766 991
+y Fn(3)799 983 y Ft(\))18 b(:)h Fi(D)938 991 y Fg(6)974
+983 y Ft(\))g(:)g Fi(D)1114 991 y Fg(7)31 1066 y Ff(ff)244
+1132 y Fi(D)301 1140 y Fg(6)337 1132 y Fu(:)p Fo(attrib)o(utes)g
+Ft(=)g Fo(union)c Ft(\()p Fi(D)891 1140 y Fg(2)927 1132
+y Fu(:)p Fo(attrib)o(utes)o Fu(;)c Fi(D)1249 1140 y Fg(3)1285
+1132 y Fu(:)p Fo(attrib)o(utes)p Ft(\))k(;)31 1199 y
+Ff(gg)31 1265 y Fo(is)p 73 1265 18 4 v 20 w(associati)o(v)o(e)e
+Ft(\()p Fi(D)440 1273 y Fg(6)476 1265 y Fu(:)p Fo(join)p
+589 1265 V 21 w(predicate)p Fu(;)e Fi(D)908 1273 y Fg(6)944
+1265 y Fu(:)p Fo(attrib)o(utes)p Fu(;)g Fi(D)1267 1273
+y Fg(5)1303 1265 y Fu(:)p Fo(join)p 1416 1265 V 21 w(predicate)p
+Ft(\))31 1332 y Ff(ff)244 1398 y Fi(D)301 1406 y Fg(7)356
+1398 y Ft(=)19 b Fi(D)483 1406 y Fg(5)533 1398 y Ft(;)244
+1464 y Fi(D)301 1472 y Fg(7)337 1464 y Fu(:)p Fo(join)p
+450 1464 V 21 w(predicate)g Ft(=)g Fi(D)827 1472 y Fg(4)863
+1464 y Fu(:)p Fo(join)p 976 1464 V 21 w(predicate)14
+b Ft(;)244 1531 y Fi(D)301 1539 y Fg(6)337 1531 y Fu(:)p
+Fo(tuple)p 476 1531 V 21 w(size)k Ft(=)h Fi(D)730 1539
+y Fg(2)766 1531 y Fu(:)p Fo(tuple)p 905 1531 V 21 w(size)14
+b Ft(+)h Fi(D)1151 1539 y Fg(3)1187 1531 y Fu(:)p Fo(tuple)p
+1326 1531 V 21 w(size)f Ft(;)244 1597 y Fi(D)301 1605
+y Fg(6)337 1597 y Fu(:)p Fo(num)p 463 1597 V 21 w(records)19
+b Ft(=)g Fo(cardinality)c Ft(\()p Fi(D)1087 1605 y Fg(2)1123
+1597 y Fu(;)c Fi(D)1211 1605 y Fg(3)1247 1597 y Ft(\))j(;)31
+1664 y Ff(gg)588 1806 y Fz(\(b\))j(Join)g(associati)n(vity)p
+1834 1928 4 1905 v -110 1931 1947 4 v 1835 1948 19 1912
+v -93 1948 1947 19 v 606 2131 a FG(Figure)i(2:)30 b(T)-8
+b(-rule)-112 2371 y Fx(2.3)99 b(T)-7 b(ransf)n(ormation)24
+b(rules)-112 2549 y FG(T)m(ransformation)30 b(rules,)35
+b(or)e(T)-8 b(-rules)32 b(for)h(short,)i(de\256ne)d(equi)n(v)n(a-)-112
+2649 y(lences)f(among)f(pairs)h(of)g(e)o(xpressions;)k(the)o(y)c
+(de\256ne)f(mappings)-112 2748 y(from)g(one)h(operator)f(tree)i(to)g
+(another)-5 b(.)63 b(Let)32 b Fv(E)37 b FG(and)31 b Fv(E)1585
+2718 y Ff(0)1641 2748 y FG(be)g(e)o(x-)-112 2848 y(pressions)20
+b(that)h(in)m(v)n(olv)o(e)e(only)h(abstract)h(operators.)29
+b(Equation)19 b(\(1\))-112 2948 y(\(sho)n(wn)j(in)i(Figure)g(2\(a\)\))e
+(sho)n(ws)i(the)g(general)f(form)g(of)g(a)i(T)-8 b(-rule.)-112
+3047 y(The)20 b(actions)g(of)h(a)g(T)-8 b(-rule)20 b(de\256ne)g(the)h
+(equi)n(v)n(alences)e(between)h(the)-112 3147 y(descriptors)d(of)i
+(nodes)g(of)f(the)i(original)d(operator)h(tree)h Fv(E)25
+b FG(with)19 b(the)-112 3246 y(nodes)g(of)g(the)h(output)e(tree)i
+Fv(E)756 3216 y Ff(0)780 3246 y FG(;)g(these)g(actions)g(consist)g(of)f
+(a)h(series)-112 3346 y(of)h(\(C)i(or)f(C++\))g(assignment)751
+3316 y Ft(2)809 3346 y FG(statements.)35 b(The)22 b(left-hand)e(sides)
+-112 3446 y(of)30 b(these)i(statements)f(refer)g(to)g(descriptors)f(of)
+h(e)o(xpressions)f(on)-112 3545 y(the)20 b(right-hand)e(side)j(of)f
+(the)g(T)-8 b(-rule;)20 b(the)h(right-hand)d(sides)j(of)f(the)-112
+3645 y(statements)14 b(can)h(refer)e(to)i(an)o(y)f(descriptor)f(in)i
+(the)f(T)-8 b(-rule.)27 b(Function)-112 3745 y(\(called)d
+FF(helper)i FG(functions\))d(calls)j(can)e(also)i(appear)d(on)i(the)f
+(right)-112 3844 y(side)d(of)g(the)g(assignment)f(statements.)32
+b(Thus,)20 b(descriptors)g(on)h(the)-112 3944 y FF(left-hand)29
+b(side)i FG(of)g(a)g(T)-8 b(-rule)31 b(are)g FF(ne)o(ver)h
+FG(changed)e(in)h(the)g(rule')-5 b(s)-112 4043 y(actions.)28
+b(A)18 b FF(test)i FG(is)f(needed)d(to)i(determine)e(if)i(the)g
+(transformations)-112 4143 y(of)h(the)i(T)-8 b(-rule)19
+b(are)h(in)h(f)o(act)f(applicable.)-29 4254 y(Purely)15
+b(as)h(an)g(optimization,)f(it)h(is)h(usually)f(the)f(case)i(that)f
+(not)f(all)-112 4354 y(statements)g(in)g(a)g(T)-8 b(-rule')j(s)15
+b(actions)g(need)f(to)h(be)g(e)o(x)o(ecuted)e(prior)h(to)h(a)-112
+4454 y(T)-8 b(-rule')j(s)18 b(test.)29 b(F)o(or)18 b(this)h(reason,)f
+(the)g(actions)g(of)g(a)h(T)-8 b(-rule)18 b(are)g(split)-112
+4553 y(into)j(tw)o(o)h(groups;)f(those)h(that)g(need)f(to)h(be)g(e)o(x)
+o(ecuted)e(prior)h(to)h(the)-112 4653 y(T)-8 b(-rule')j(s)13
+b(test,)i(and)e(those)g(that)h(can)f(be)g(e)o(x)o(ecuted)f(after)h(a)h
+(successful)-112 4752 y(test.)29 b(These)19 b(groups)f(of)h(statements)
+g(comprise,)g(respecti)n(v)o(ely)-5 b(,)17 b(the)p -112
+4870 788 4 v -28 4924 a Fr(2)7 4947 y Fz(The)c(actions)i(can)f(be)f
+(non-assignment)j(statements)f(\(lik)o(e)g(function)g(calls\),)g(b)o
+(ut)-112 5026 y(in)23 b(this)h(case,)i(the)e(P2V)f(pre-processor)j
+(\(described)f(in)f(Section)h(3\))f(needs)g(some)-112
+5105 y(hints)h(about)i(the)f(properties)h(that)g(are)f(changed)h(by)e
+(the)h(statement)h(in)f(order)g(to)-112 5184 y(correctly)17
+b(cate)o(gorize)h(each)d(property)l(.)25 b(F)o(or)14
+b(simplicity)l(,)j(in)d(this)h(paper)m(,)h(we)f(assume)-112
+5263 y(all)j(actions)g(consist)g(of)f(assignment)i(statements.)p
+2046 24 1947 4 v 2046 1687 4 1664 v 2187 92 a Fu(E)s
+Ft(\()p Fu(x)2303 100 y Fn(1)2335 92 y Fu(;)11 b(:)g(:)g(:)g(;)g(x)2528
+100 y Fl(n)2568 92 y Ft(\))19 b(:)g Fi(D)2708 100 y Fg(1)2763
+92 y Ft(=)-11 b Ff(\))18 b Fu(A)p Ft(\()p Fu(x)3001 100
+y Fn(1)3033 92 y Fu(;)11 b(:)g(:)g(:)g(;)h(x)3227 100
+y Fl(n)3267 92 y Ft(\))19 b(:)f Fi(D)3406 100 y Fg(2)3812
+92 y Fo(\(3\))2187 159 y(test)2187 225 y Ff(ff)2401 292
+y Fo(pre-opt)d(statements)2187 358 y Ff(gg)2187 424 y(ff)2401
+491 y Fo(post-opt)g(statements)2187 557 y Ff(gg)2639
+700 y Fz(\(a\))i(General)i(form)e(of)g(an)g(I-rule)p
+2095 798 1849 4 v 2187 875 a Fo(SOR)m(T)o Ft(\()p Fu(S)2399
+883 y Fn(1)2431 875 y Ft(\))i(:)f Fi(D)2570 883 y Fg(2)2625
+875 y Ft(=)-11 b Ff(\))19 b Fo(Mer)o(ge)p 2904 875 18
+4 v 21 w(sort)p Ft(\()p Fu(S)3076 883 y Fn(1)3108 875
+y Ft(\))g(:)f Fi(D)3247 883 y Fg(3)3812 875 y Fo(\(4\))2187
+958 y Ft(\()p Fi(D)2270 966 y Fg(2)2306 958 y Fu(:)p
+Fo(tuple)p 2445 958 V 20 w(order)e Ft(!)9 b(=)18 b Fo(DONT)p
+2862 958 V 21 w(CARE)o Ft(\))2187 1024 y Ff(ff)2401 1090
+y Fi(D)2458 1098 y Fg(3)2512 1090 y Ft(=)h Fi(D)2639
+1098 y Fg(2)2690 1090 y Ft(;)2187 1157 y Ff(gg)2187 1223
+y(ff)2401 1290 y Fi(D)2458 1298 y Fg(3)2493 1290 y Fu(:)p
+Fo(cost)g Ft(=)g Fi(D)2753 1298 y Fg(1)2788 1290 y Fu(:)p
+Fo(cost)2699 1356 y Ft(+\()p Fi(D)2833 1364 y Fg(3)2868
+1356 y Fu(:)p Fo(num)p 2994 1356 V 21 w(records)p Ft(\))c
+Ff(\003)h Ft(log\()p Fi(D)3442 1364 y Fg(3)3478 1356
+y Fu(:)p Fo(num)p 3604 1356 V 21 w(records)p Ft(\))f(;)2187
+1423 y Ff(gg)2630 1565 y Fz(\(b\))i(Mer)o(ge-sort)i(sort)e(algorithm)p
+3990 1687 4 1664 v 2046 1690 1947 4 v 3992 1707 19 1670
+v 2063 1707 1947 19 v 2770 1890 a FG(Figure)i(3:)30 b(I-rule)2044
+2113 y FF(pr)m(e-test)22 b FG(and)d FF(post-test)j FG(statements)e(of)g
+(the)g(T)-8 b(-rule.)3566 2083 y Ft(3)2044 2330 y FG(E)p
+Fz(XAMPLE)19 b FG(4.)145 b(The)21 b(associati)n(vity)f(of)h(JOINs)g(is)
+h(e)o(xpressed)d(by)2044 2429 y(T)-8 b(-rule)19 b(\(2\))h(in)g(Figure)g
+(2\(b\).)1082 b Fs(\003)2044 2683 y Fx(2.4)99 b(Implementation)26
+b(rules)2044 2844 y FG(Implementation)k(rules,)37 b(or)c(I-rules)f(for)
+h(short,)j(de\256ne)d(equi)n(v)n(a-)2044 2944 y(lences)f(between)f(e)o
+(xpressions)f(and)i(their)f(implementing)f(algo-)2044
+3043 y(rithms.)k(Let)23 b Fv(E)k FG(be)22 b(an)g(e)o(xpression)f(and)g
+Fv(A)i FG(be)f(an)g(algorithm)f(that)2044 3143 y(implements)27
+b Fv(E)5 b FG(.)52 b(The)28 b(general)e(form)h(of)h(an)f(I-rule)g(is)i
+(gi)n(v)o(en)d(by)2044 3243 y(Equation)18 b(\(3\))i(\(sho)n(wn)f(in)h
+(Figure)g(3\(a\)\).)2127 3345 y(The)g(actions)h(associated)g(with)g(an)
+g(I-rule)f(are)h(de\256ned)e(in)j(three)2044 3445 y(parts.)37
+b(The)23 b(\256rst)h(part,)f(or)g FF(test)p FG(,)h(is)g(a)g(boolean)d
+(e)o(xpression)g(whose)2044 3544 y(v)n(alue)e(determines)g(whether)g
+(or)h(not)g(the)g(rule)g(can)g(be)g(applied.)2127 3647
+y(The)c(second)g(part,)h(or)f FF(pr)m(e-opt)f(statements)p
+FG(,)j(is)f(a)g(set)h(of)e(descrip-)2044 3747 y(tor)23
+b(assignment)g(statements)h(that)g(are)g(e)o(x)o(ecuted)d(only)i(if)h
+(the)g(test)2044 3846 y(is)h(true)f(and)g FF(befor)m(e)g
+FG(an)o(y)f(of)h(the)h(inputs)e Fv(x)3295 3858 y Fu(i)3348
+3846 y FG(of)h Fv(E)30 b FG(are)25 b(optimized.)2044
+3946 y(Additional)d(parameters)g(of)i(nodes)f(are)g(usually)g(assigned)
+g(in)h(the)2044 4045 y(pre-opt)f(section.)45 b(This)25
+b(is)h(necessary)f(before)f(an)o(y)g(of)h(the)h(nodes)2044
+4145 y(on)20 b(the)g(right)f(side)i(can)f(be)g(optimized.)2127
+4248 y(The)g(third)h(part,)g(or)f FF(post-opt)g(statements)p
+FG(,)h(is)h(a)g(set)f(of)g(descrip-)2044 4347 y(tor)i(assignment)g
+(statements)g(that)h(are)f(e)o(x)o(ecuted)e FF(after)26
+b FG(all)e Fv(x)3859 4359 y Fu(i)3911 4347 y FG(are)2044
+4447 y(optimized.)29 b(Normally)-5 b(,)19 b(the)i(post-opt)f
+(statements)g(compute)g(cost)2044 4546 y(properties)15
+b(that)h(can)h(only)e(be)i(determined)d(once)i(the)g(inputs)g(to)h(the)
+2044 4646 y(algorithm)k(are)h(completely)f(optimized)g(and)h(their)g
+(costs)h(kno)n(wn.)2044 4746 y(This)34 b FF(does)f(not)p
+FG(,)k(ho)n(we)n(v)o(er)m(,)e(imply)e(a)h(bottom-up)e(optimization)2044
+4845 y(strate)o(gy)-5 b(.)43 b(It)25 b(simply)g(means)g(that)g
+(although)f(I-rules)g(are)h(applied)2044 4945 y(to)20
+b(parents)g(before)f(their)i(children)e(are)h(optimized,)f(the)i
+FF(cost)h FG(\(and)p 2044 5028 788 4 v 2129 5081 a Fr(3)2163
+5105 y Fz(W)-5 b(e)28 b(suspect)h(it)g(is)f(possible)i(to)f(use)f
+(data-\257o)n(w)i(analysis)g(to)e(partition)j(the)2044
+5184 y(assignment)17 b(statements)h(automatically)l(,)h(b)o(ut)d(for)g
+(no)n(w)l(,)g(we)f(let)i(the)g(rule-writer)h(do)2044
+5263 y(the)g(partitioning.)p eop
+%%Page: 5 5
+5 4 bop -112 21 a FG(other)17 b(properties)f(in)i(the)g(post-opt)e
+(section\))i(of)f(the)h(parent)f(cannot)-112 120 y(be)j(computed)e
+(until)i(the)g(children)f(ha)n(v)o(e)g(been)h(optimized.)-112
+325 y(E)p Fz(XAMPLE)f FG(5.)149 b(Equation)24 b(\(4\))g(\(in)g(Figure)h
+(3\(b\)\))e(sho)n(ws)i(the)g(I-)-112 425 y(rule)19 b(that)i(implements)
+e(the)h(SOR)-5 b(T)21 b(operator)d(by)i(Mer)o(ge)p 1564
+425 25 4 v 28 w(sort.)59 b Fs(\003)-112 668 y Fx(2.5)99
+b(Null)24 b(algorithm)-112 826 y FG(Recall)h(that,)g(in)g(Section)f(1,)
+h(we)g(mentioned)e(that)h(Prairie)h(allo)n(ws)-112 925
+y(users)f(to)g(treat)g(all)g(operators)f(and)g(algorithms)g(as)i
+(\256rst-class)g(ob-)-112 1025 y(jects,)g(i.e.,)g(all)f(operators)f
+(and)h(algorithms)e(are)i(e)o(xplicit,)h(in)f(con-)-112
+1125 y(trast)36 b(to)h(enforcers)e(in)h(V)-11 b(olcano)36
+b(or)g(glue)g(in)g(Starb)n(urst.)78 b(This)-112 1224
+y(requires)23 b(that)h(Prairie)h(pro)o(vide)d(a)j(mechanism)e(where)g
+(users)i(can)-112 1324 y(also)20 b(\252delete\272)g(one)g(or)g(more)g
+(of)g(the)g(e)o(xplicit)g(operators)f(from)g(e)o(x-)-112
+1423 y(pressions.)37 b(This)24 b(is)g(done)e(by)h(ha)n(ving)f(a)h
+(special)h(class)g(of)f(I-rules)-112 1523 y(that)16 b(ha)n(v)o(e)g(the)
+h(form)f(gi)n(v)o(en)f(by)i(Equation)e(\(5\))h(in)h(Figure)f(4\(a\).)27
+b(The)-112 1623 y(left)21 b(side)h(of)g(the)f(rule)g(is)i(a)f(single)g
+(abstract)f(operator)f Fv(O)25 b FG(with)c(one)-112 1722
+y(stream)j(input)f Fv(S)380 1734 y Ft(1)418 1722 y FG(.)42
+b(The)24 b(right)g(side)g(of)g(the)h(rule)f(is)h(an)f(algorithm)-112
+1822 y(called)f(\252Null\272)g(with)h(the)f(same)h(stream)f(input)g(b)n
+(ut)g(with)h(a)g(dif)n(fer)n(-)-112 1922 y(ent)d(descriptor)-5
+b(.)34 b(As)23 b(the)f(name)f(suggests,)h(the)g(Null)g(algorithm)f(is)
+-112 2021 y(supposed)26 b(to)i(pass)h(its)f(input)g(unchanged)d(to)j
+(algorithms)e(abo)o(v)o(e)-112 2121 y(it)e(in)f(an)g(operator)f(tree.)
+39 b(This)23 b(is)h(accomplished)e(in)h(the)h(I-rule)e(as)-112
+2220 y(follo)n(ws.)-29 2321 y(The)g(test)h(for)f(this)h(I-rule)f(is)h
+(al)o(w)o(ays)g(TR)m(UE,)f(i.e.,)h(an)o(y)f(node)g(in)-112
+2421 y(an)f(operator)f(tree)i(with)g Fv(O)k FG(as)c(its)h(operator)d
+(can)i(be)g(implemented)-112 2520 y(by)d(the)g(Null)h(algorithm.)27
+b(The)20 b(actions)f(associated)g(with)h(this)g(rule)-112
+2620 y(ha)n(v)o(e)c(a)i(speci\256c)f(pattern.)27 b(The)17
+b(pre-opt)f(section)h(consists)g(of)g(three)-112 2720
+y(statements.)38 b(The)22 b(\256rst)i(statement)f(copies)g(the)g
+(descriptor)f(of)h(the)-112 2819 y(operator)29 b Fv(O)35
+b FG(to)d(the)g(algorithm)e(Null.)65 b(The)31 b(second)g(statement)-112
+2919 y(sets)36 b(the)f(descriptor)e(of)i(the)g(stream)g
+Fv(S)1102 2931 y Ft(1)1174 2919 y FG(on)g(the)g(right)f(side)i(to)-112
+3018 y(the)31 b(descriptor)g(of)g(the)h(stream)g Fv(S)926
+3030 y Ft(1)996 3018 y FG(on)f(the)h(left)g(side.)64
+b(Why)32 b(is)-112 3118 y(it)23 b(necessary)f(to)h(do)f(this?)38
+b(The)22 b(k)o(e)o(y)h(lies)g(in)g(the)g(third)f(statement.)-112
+3218 y(This)13 b(statement)g(copies)g(the)g(property)g(\252prop)o(erty)
+o(\272)g(of)g(the)f(oper)o(ator)-112 3317 y Fv(O)21 b
+FG(node)d(on)g(the)g(left)h(side)g(to)g(the)f(\252property\272)e(of)j
+(the)f(input)g(stream)-112 3417 y Fv(S)-61 3429 y Ft(1)-5
+3417 y FG(on)g(the)g(right)g(side.)29 b(Since)18 b(left-hand)f(side)i
+(descriptors)e(cannot)-112 3517 y(be)25 b(changed)g(in)h(an)g(I-rule,)g
+(a)h(ne)n(w)e(descriptor)g Fj(D)1383 3529 y Fi(3)1452
+3517 y FG(is)i(necessary)-112 3616 y(for)19 b Fv(S)56
+3628 y Ft(1)114 3616 y FG(to)h(con)m(v)o(e)o(y)e(the)i(property)e
+(propagation)f(information.)-29 3717 y(The)48 b(post-opt)f(section)h
+(in)h(the)g(I-rule)e(has)i(only)f(a)h(cost-)-112 3816
+y(assignment)23 b(statement;)k(this)e(simply)g(sets)h(the)e(cost)h(of)g
+(the)g(Null)-112 3916 y(node)19 b(to)h(the)g(cost)h(of)f(its)h
+(optimized)e(input)g(stream.)-29 4017 y(The)f(Null)h(algorithm,)e
+(therefore,)g(serv)o(es)h(to)h(ef)n(fecti)n(v)o(ely)e(trans-)-112
+4116 y(form)i(a)h(single)g(operator)f(to)h(a)h(no-op.)-112
+4322 y(E)p Fz(XAMPLE)e FG(6.)149 b(Equation)24 b(\(6\))g(\(in)g(Figure)
+h(4\(b\)\))e(sho)n(ws)i(the)g(I-)-112 4421 y(rule)15
+b(that)g(re)n(writes)h(the)f(SOR)-5 b(T)17 b(operator)c(to)j(use)g(a)g
+(Null)g(algorithm.)-112 4521 y Fs(\003)-112 4876 y FB(3)119
+b(The)30 b(P2V)g(pr)n(e-pr)n(ocessor)-112 5063 y FG(In)38
+b(Section)g(1,)43 b(we)c(enumerated)e(the)h(four)g(primary)f(goals)h
+(of)-112 5163 y(Prairie,)22 b(viz.,)g(uniformity)e(in)i(operator)e(and)
+i(algorithms;)f(unifor)n(-)-112 5263 y(mity)i(in)h(properties;)h
+(uniformity)c(in)j(property-transformations;)p 2046 24
+1947 4 v 2046 1886 4 1863 v 2187 92 a Fu(O)r Ft(\()p
+Fu(S)2306 100 y Fn(1)2338 92 y Ft(\))19 b(:)g Fi(D)2478
+100 y Fg(2)2532 92 y Ft(=)-11 b Ff(\))19 b Fo(Null)q
+Ft(\()p Fu(S)2828 100 y Fn(1)2879 92 y Ft(:)f Fi(D)2973
+100 y Fg(3)3009 92 y Ft(\))h(:)g Fi(D)3149 100 y Fg(4)3812
+92 y Fo(\(5\))2187 159 y(TR)n(UE)2187 225 y Ff(ff)2401
+292 y Fi(D)2458 300 y Fg(4)2512 292 y Ft(=)g Fi(D)2639
+300 y Fg(2)2690 292 y Ft(;)2401 358 y Fi(D)2458 366 y
+Fg(3)2512 358 y Ft(=)g Fi(D)2639 366 y Fg(1)2690 358
+y Ft(;)2401 424 y Fi(D)2458 432 y Fg(3)2493 424 y Fu(:)p
+Fo(property)h Ft(=)f Fi(D)2856 432 y Fg(2)2892 424 y
+Fu(:)p Fo(property)c Ft(;)2187 491 y Ff(gg)2187 557 y(ff)2401
+624 y Fi(D)2458 632 y Fg(4)2493 624 y Fu(:)p Fo(cost)k
+Ft(=)g Fi(D)2753 632 y Fg(3)2788 624 y Fu(:)p Fo(cost)14
+b Ft(;)2187 690 y Ff(gg)2559 832 y Fz(\(a\))j(General)i(form)e(of)g(a)g
+(\252Null\272)h(I-rule)p 2095 931 1849 4 v 2187 1007
+a Fo(SOR)m(T)o Ft(\()p Fu(S)2399 1015 y Fn(1)2431 1007
+y Ft(\))h(:)f Fi(D)2570 1015 y Fg(2)2683 1007 y Ft(=)-11
+b Ff(\))19 b Fo(Null)p Ft(\()p Fu(S)2978 1015 y Fn(1)3029
+1007 y Ft(:)g Fi(D)3124 1015 y Fg(3)3160 1007 y Ft(\))g(:)g
+Fi(D)3300 1015 y Fg(4)3812 1007 y Fo(\(6\))2187 1090
+y(TR)n(UE)2187 1157 y Ff(ff)2401 1223 y Fi(D)2458 1231
+y Fg(4)2512 1223 y Ft(=)g Fi(D)2639 1231 y Fg(2)2690
+1223 y Ft(;)2401 1290 y Fi(D)2458 1298 y Fg(3)2512 1290
+y Ft(=)g Fi(D)2639 1298 y Fg(1)2690 1290 y Ft(;)2401
+1356 y Fi(D)2458 1364 y Fg(3)2493 1356 y Fu(:)p Fo(tuple)p
+2632 1356 18 4 v 21 w(order)h Ft(=)f Fi(D)2919 1364 y
+Fg(2)2955 1356 y Fu(:)p Fo(tuple)p 3094 1356 V 20 w(order)d
+Ft(;)2187 1423 y Ff(gg)2187 1489 y(ff)2401 1555 y Fi(D)2458
+1563 y Fg(4)2493 1555 y Fu(:)p Fo(cost)j Ft(=)g Fi(D)2753
+1563 y Fg(3)2788 1555 y Fu(:)p Fo(cost)14 b Ft(;)2187
+1622 y Ff(gg)2718 1764 y Fz(\(b\))j(Null)h(sort)f(algorithm)p
+3990 1886 4 1863 v 2046 1889 1947 4 v 3992 1906 19 1870
+v 2063 1906 1947 19 v 2365 2089 a FG(Figure)j(4:)29 b(The)20
+b(\252Null\272)g(algorithm)f(concept)2044 2301 y(and)36
+b(ef)n(\256cient)h(generation)f(of)h(Prairie)g(optimizers.)79
+b(The)37 b(\256rst)2044 2401 y(three)17 b(goals)h(are)f(dri)n(v)o(en)f
+(by)i(the)f(need)g(for)g(conceptual)f(simplicity;)2044
+2500 y(ho)n(we)n(v)o(er)m(,)34 b(the)o(y)e(alone)h(do)g(not)g
+(necessarily)f(generate)h(ef)n(\256cient)2044 2600 y(optimizers.)62
+b(The)32 b(P2V)g(pre-processor)d(ensures)i(that)h(ef)n(\256cient)2044
+2699 y(optimizers)e(can)h(be)f(realized)h(from)f(Prairie)h
+(speci\256cations,)h(by)2044 2799 y(translating)d(them)g(to)h(the)g(V)
+-11 b(olcano)29 b(frame)n(w)o(ork)f(and)i(then)f(gen-)2044
+2899 y(erating)22 b(an)h(optimizer)f(by)h(compiling)f(with)h(the)g(V)
+-11 b(olcano)22 b(search)2044 2998 y(engine.)27 b(This)17
+b(Prairie)g(optimizer)n(-generator)c(paradigm)i(is)j(sho)n(wn)2044
+3098 y(schematically)k(in)g(Figure)g(5.)37 b(The)22 b(pre-processor)f
+(itself)i(is)g(4500)2044 3198 y(lines)f(of)j Fd(flex)d
+FG(and)f Fd(bison)g FG(code.)33 b(In)21 b(this)h(section,)g(we)g
+(brie\257y)2044 3297 y(describe)13 b(the)h(pre-processor)d(steps)k(and)
+f(e)o(xplain)e(why)h(the)i(Prairie-)2044 3397 y(to-V)-11
+b(olcano)26 b(transformation)g(is)k(non-tri)n(vial.)51
+b(A)29 b(more)f(detailed)2044 3496 y(description)18 b(of)i(the)h
+(pre-processor)c(is)k(gi)n(v)o(en)e(in)i([5].)2127 3596
+y(The)c(speci\256cation)h(of)f(an)h(optimizer)f(in)h(V)-11
+b(olcano)17 b(consists)i(of)f(a)2044 3696 y(set)i(of)f(transformation)e
+(rules)j(\(called)f(\252trans)p 3386 3696 25 4 v 29 w(rules\272\))g
+(and)g(imple-)2044 3795 y(mentation)14 b(rules)g(\(called)g(\252impl)p
+3004 3795 V 24 w(rules\272\),)g(a)g(set)g(of)g(properties,)e(and)2044
+3895 y(some)i(support)g(functions.)22 b(The)14 b(join)g(associati)n
+(vity)g(trans)p 3736 3895 V 26 w(rule)g(\(cf.)2044 3995
+y(Figure)19 b(2\(b\)\))g(in)h(V)-11 b(olcano)20 b(is)h(as)g(follo)n(ws)
+3259 3964 y Ft(4)3295 3995 y FG(:)2210 4155 y Ft(\()p
+Fo(JOIN)f(?op)p 2469 4155 18 4 v 21 w(ar)o(g5)h Ft(\(\()p
+Fo(JOIN)g(?op)p 2896 4155 V 21 w(ar)o(g4)g Ft(\(?1)g(?2\)\))g(?3\)\))
+2293 4280 y Ff(\000)-23 b Fu(>)p Ft(\()p Fo(JOIN)20 b(?op)p
+2633 4280 V 21 w(ar)o(g7)h Ft(\(?1)g(\()p Fo(JOIN)g(?op)p
+3145 4280 V 21 w(ar)o(g6)g Ft(\(?2)g(?3\)\)\)\))2044
+4440 y FG(The)32 b(important)f(point)h(to)g(note)h(is)g(the)g(use)f(of)
+h FF(oper)o(ator)e(ar)m(gu-)2044 4540 y(ments)21 b FG(\(denoted)e(by)h
+(\252op)p 2801 4540 25 4 v 29 w(ar)o(g\272)g(in)g(rules\);)h(these)g
+(ar)o(guments)e(con-)2044 4640 y(tain)i(properties)g(used)g(in)h(the)g
+(rule')-5 b(s)21 b(actions,)h(b)n(ut)f(unlik)o(e)g(Prairie,)2044
+4739 y(the)o(y)31 b(do)g(not)h(contain)e FF(all)j FG(the)e(properties)g
+(of)g(an)h(operator)e(tree)2044 4839 y(node.)e(There)18
+b(are)h(other)f(property)f(classes,)k(lik)o(e)e(algorithm)f(ar)o(gu-)
+2044 4939 y(ment,)26 b(logical)f(property)-5 b(,)23 b(system)j
+(property)-5 b(,)24 b(physical)g(property)-5 b(,)2044
+5038 y(and)25 b(cost.)46 b(Thus,)26 b(while)g(Prairie)g(uses)g(a)g
+(uniform)e(descriptor)g(to)p 2044 5107 788 4 v 2129 5160
+a Fr(4)2163 5184 y Fz(There)15 b(are)f(conditions)j(and)d(actions)i
+(associated)g(with)f(V)-9 b(olcano)16 b(rules)e(that)h(are)2044
+5263 y(not)i(sho)n(wn)h(here.)p eop
+%%Page: 6 6
+6 5 bop -98 24 1923 4 v -98 1420 4 1397 v 371 1324 a
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 17.07164 128.0373
+119.50148 128.0373 119.50148 25.60745 17.07164 25.60745 /Lineto /lineto
+load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 153.64476
+102.42984 153.64476 102.42984 136.57312 34.14328 136.57312 /Lineto
+/lineto load def false Polygon gsave 1. setgray fill grestore gsave
+0.8 SLW 0. setgray 0 setlinecap stroke grestore end
+
+@endspecial 754 139 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 3.0875
+neg 47.33098 7.711 .5 Frame gsave 1. setgray fill grestore end
+
+
+@endspecial Fo(Prairie)15 b(Rule)f(Set)371 1324 y @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 119.50148 68.28656 136.57312
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 34.14328 119.50148
+102.42984 119.50148 102.42984 102.42984 34.14328 102.42984 /Lineto
+/lineto load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap
+stroke grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial
+719 416 a(P2V)h(Pre-processor)371 1324 y @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 85.3582 68.28656 102.42984
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 85.3582 102.42984
+85.3582 102.42984 68.28656 34.14328 68.28656 /Lineto /lineto load
+def false Polygon gsave 0.5 setgray fill grestore gsave 0.8 SLW 0.
+setgray 0 setlinecap stroke grestore end
+
+@endspecial
+736 706 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 3.0875
+neg 51.482 7.711 .5 Frame gsave 1. setgray fill grestore end
+
+@endspecial(V)-7
+b(olcano)14 b(Rule)h(Set)371 1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 51.21492 68.28656 68.28656
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 34.14328 51.21492
+102.42984 51.21492 102.42984 34.14328 34.14328 34.14328 /Lineto /lineto
+load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial 843
+950 a(V)-7 b(olcano)694 1017 y(Optimizer)o(-Generator)371
+1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 17.07164 68.28656 34.14328
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 17.07164
+102.42984 17.07164 102.42984 0.0 34.14328 0.0 /Lineto /lineto load
+def false Polygon gsave 0.5 setgray fill grestore gsave 0.8 SLW 0.
+setgray 0 setlinecap stroke grestore end
+
+@endspecial 740 1267 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 4.526
+neg 50.62799 7.711 .5 Frame gsave 1. setgray fill grestore end
+
+
+@endspecial(Query)15 b(Optimizer)-948 b(Operator)15
+b(T)n(ree)371 1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 34.14328 8.53581 17.07164 8.53581
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 119.50148 8.53581 102.42984 8.53581
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial 1363 1273 a(Access)e(Plan)p
+1822 1420 V -98 1423 1923 4 v 1823 1440 19 1403 v -81
+1440 1923 19 v -112 1623 a FG(Figure)58 b(5:)107 b(The)58
+b(Prairie)h(optimizer)n(-generator)c(paradigm.)-112 1722
+y(Double-box)o(ed)60 b(modules)j(represent)f(softw)o(are)i(generators,)
+-112 1822 y(shaded)17 b(box)o(es)g(represent)g(generated)g(programs.)26
+b(The)18 b(outermost)-112 1922 y(double-box)o(ed)e(portion)k(denotes)g
+(the)h(Prairie)g(optimizer)f(genera-)-112 2021 y(tor)-5
+b(.)-112 2214 y(encode)14 b(properties,)h(V)-11 b(olcano)14
+b(partitions)h(the)h(properties)e(into)h(dif-)-112 2314
+y(ferent)27 b(classes.)53 b(The)27 b(P2V)h(pre-processor)e(partitions)h
+(a)h(Prairie)-112 2414 y(descriptor)33 b(into)i(the)h(dif)n(ferent)d
+(property)g(classes)k(required)c(by)-112 2513 y(V)-11
+b(olcano.)30 b(This)22 b(is)g(a)f(non-tri)n(vial)e(task,)j(since)f(it)h
+(requires)e(parsing)-112 2613 y(the)g(Prairie)g(rules)g(and)g(their)g
+(actions.)-29 2713 y(Impl)p 134 2713 25 4 v 28 w(rules)15
+b(in)g(V)-11 b(olcano)14 b(defer)g(most)h(of)g(the)f(actions)h
+(associated)-112 2812 y(with)j(the)g(rules)f(to)h(support)f(functions.)
+27 b(Each)17 b(algorithm)g(has)h(four)-112 2912 y(support)d(functions)g
+(associated)i(with)g(it.)29 b(A)17 b(Prairie)g(speci\256cation,)-112
+3011 y(on)f(the)g(other)g(hand,)g(contains)g(all)h(the)g(actions)f(in)h
+(the)g(correspond-)-112 3111 y(ing)i(rule.)29 b(The)19
+b(P2V)h(pre-processor)e(parses)i(a)g(Prairie)g(I-rule,)e(and)-112
+3211 y(automatically)29 b(generates)h(all)i(the)f(V)-11
+b(olcano)30 b(support)g(functions)-112 3310 y(from)24
+b(the)h(rule.)44 b(This)26 b(is)g(also)g(a)f(comple)o(x)f(process,)i
+(since)f(it)h(de-)-112 3410 y(pends)c(partly)h(on)g(the)h(partitioning)
+e(of)h(properties)f(mentioned)g(in)-112 3510 y(the)28
+b(last)i(paragraph,)e(and)h(also)g(because)f(it)h(requires)f
+(relocating)-112 3609 y(pieces)d(of)g(code)f(from)g(Prairie)h(rules)h
+(to)f(V)-11 b(olcano)24 b(support)g(func-)-112 3709 y(tions.)-29
+3808 y(The)d(third)g(salient)h(feature)e(of)i(a)g(V)-11
+b(olcano)20 b(speci\256cation)h(is)i(the)-112 3908 y(presence)13
+b(of)h(implicit,)i(or)e(hidden,)g(algorithms,)g(called)h
+FF(enfor)m(cer)o(s)p FG(.)-112 4008 y(In)f(Prairie,)h(all)g(algorithms)
+e(are)h(e)o(xplicit.)26 b(Consider)m(,)15 b(for)e(e)o(xample,)-112
+4107 y(the)18 b(Mer)o(ge)p 230 4107 V 28 w(sort)h(algorithm)e(in)i
+(Figure)f(3\(b\).)27 b(In)18 b(a)h(V)-11 b(olcano)18
+b(spec-)-112 4207 y(i\256cation,)24 b(this)g(algorithm)f(w)o(ould)g(be)
+h(classi\256ed)h(as)f(an)g(enforcer)m(,)-112 4307 y(since)34
+b(it)h(enforces)e(the)h(sortedness)g(property)-5 b(.)69
+b(The)34 b(P2V)h(pre-)-112 4406 y(processor)27 b(determines)h(the)h
+(Prairie)g(algorithms)f(that)h(are)g(func-)-112 4506
+y(tionally)g(V)-11 b(olcano)30 b(enforcers,)h(and)e(deletes)i(the)f
+(corresponding)-112 4605 y(Prairie)k(rules)g(to)g(generate)f(the)h(V)
+-11 b(olcano)33 b(speci\256cation.)71 b(This)-112 4705
+y(requires)33 b(the)i(pre-processor)e(to)i(migrate)f(the)h(\(deleted\))
+f(rule')-5 b(s)-112 4805 y(actions)19 b(to)i(V)-11 b(olcano)19
+b(support)g(functions.)-29 4904 y(The)27 b(P2V)i(pre-processor)c(also)k
+(generates)e(a)i(set)g(of)f(compact)-112 5004 y(V)-11
+b(olcano)24 b(rules)i(by)f(mer)o(ging)f(Prairie)h(rules)h(whene)n(v)o
+(er)d(possible.)-112 5104 y(Consider)m(,)18 b(for)i(e)o(xample,)f(the)h
+(follo)n(wing)e(set)j(of)f(rules)g(in)h(Prairie:)-103
+5263 y Fo(JOIN)p Ft(\()p Fu(S)90 5271 y Fn(1)122 5263
+y Fu(;S)183 5271 y Fn(2)215 5263 y Ft(\):)p Fi(D)317
+5271 y Fg(3)436 5263 y Fh(=)-14 b Fk(\))83 b Fo(JOPR)o
+Ft(\()p Fo(SOR)m(T)o Ft(\()p Fu(S)1026 5271 y Fn(1)1058
+5263 y Ft(\):)p Fi(D)1160 5271 y Fg(4)1196 5263 y Fu(;)p
+Fo(SOR)m(T)o Ft(\()p Fu(S)1428 5271 y Fn(2)1460 5263
+y Ft(\):)p Fi(D)1562 5271 y Fg(5)1597 5263 y Ft(\):)p
+Fi(D)1699 5271 y Fg(6)2127 21 y Fo(SOR)m(T)o Ft(\()p
+Fu(S)2339 29 y Fn(1)2371 21 y Ft(\):)p Fi(D)2473 29 y
+Fg(2)2592 21 y Fh(=)-14 b Fk(\))83 b Fo(Null)p Ft(\()p
+Fu(S)2979 29 y Fn(1)3011 21 y Ft(:)p Fi(D)3087 29 y Fg(3)3123
+21 y Ft(\):)p Fi(D)3225 29 y Fg(4)2044 145 y Fo(JOPR)o
+Ft(\()p Fu(S)2246 153 y Fn(1)2279 145 y Fu(;S)2340 153
+y Fn(2)2371 145 y Ft(\):)p Fi(D)2473 153 y Fg(3)2592
+145 y Fh(=)-14 b Fk(\))83 b Fo(Nested)p 2974 145 18 4
+v 20 w(loops)p Ft(\()p Fu(S)3184 153 y Fn(1)3216 145
+y Ft(:)p Fi(D)3292 153 y Fg(4)3328 145 y Fu(;S)3389 153
+y Fn(2)3421 145 y Ft(\):)p Fi(D)3523 153 y Fg(5)2044
+316 y FG(The)24 b(\256rst)g(rule)g(is)h(a)g(T)-8 b(-rule,)24
+b(and)f(the)i(ne)o(xt)e(tw)o(o)h(are)g(I-rules.)40 b(The)2044
+416 y(P2V)26 b(pre-processor)d(combines)h(the)i(abo)o(v)o(e)e(set)i(of)
+g(Prairie)f(rules)2044 515 y(into)20 b(a)g(single)g(I-rule,)2044
+686 y Fo(JOIN)p Ft(\()p Fu(S)2237 694 y Fn(1)2269 686
+y Fu(;S)2330 694 y Fn(2)2362 686 y Ft(\):)p Fi(D)2464
+694 y Fg(3)2582 686 y Fh(=)-14 b Fk(\))83 b Fo(Nested)p
+2964 686 V 20 w(loops)p Ft(\()p Fu(S)3174 694 y Fn(1)3206
+686 y Ft(:)p Fi(D)3282 694 y Fg(4)3318 686 y Fu(;S)3379
+694 y Fn(2)3411 686 y Ft(\):)p Fi(D)3513 694 y Fg(5)2044
+857 y FG(and)19 b(then)h(translates)g(it)h(into)f(a)h(single)f(V)-11
+b(olcano)19 b(impl)p 3625 857 25 4 v 29 w(rule.)2044
+1151 y FB(4)119 b(Experimental)30 b(r)n(esults)2044 1341
+y FG(This)k(section)g(presents)g(e)o(xperimental)e(results)i(which)g
+(demon-)2044 1441 y(strate)e(the)h(v)n(alue)f(of)g(Prairie)g(in)g
+(specifying)f(rule)h(sets)i(of)e(rule-)2044 1541 y(based)f(optimizers.)
+64 b(Our)32 b(e)o(xperiments)e(consist)j(of)f(specifying)2044
+1640 y(rule-based)17 b(optimizers)i(using)g(Prairie)g(and)g(generating)
+e(optimiz-)2044 1740 y(ers)f(using)f(the)g(P2V)h(pre-processor)c(and)j
+(the)h(optimizer)n(-generator)2044 1839 y(paradigm)i(of)i(Figure)g(5.)
+2127 1942 y(In)26 b([4],)g(we)h(presented)d(an)i(implementation)e(of)i
+(a)g(centralized)2044 2041 y(relational)33 b(query)f(optimizer)h(using)
+h(Prairie.)70 b(Using)34 b(the)g(P2V)2044 2141 y(translator)m(,)g(we)e
+(translated)g(this)g(to)h(V)-11 b(olcano)31 b(format)g(and)h(opti-)2044
+2240 y(mized)h(se)n(v)o(eral)h(queries)f(using)g(the)h(resultant)g
+(optimizer)-5 b(.)69 b(F)o(or)2044 2340 y(comparison,)22
+b(we)h(hand-coded)d(the)k(same)f(optimizer)f(directly)h(in)2044
+2440 y(V)-11 b(olcano.)66 b(The)32 b(results)h(presented)f(there)g(sho)
+n(wed)g(that,)k(using)2044 2539 y(Prairie)19 b(\(compared)f(to)i
+(directly)f(using)g(V)-11 b(olcano\))18 b(resulted)i(in)f(ap-)2044
+2639 y(proximately)27 b(50\045)j(sa)n(vings)f(in)h(lines)g(of)g(code)f
+(with)h(ne)o(gligible)2044 2739 y(\(less)d(than)e(5\045\))h(increase)g
+(in)g(query)f(optimization)f(time.)48 b(Ho)n(w-)2044
+2838 y(e)n(v)o(er)m(,)23 b(the)h(optimizer)e(w)o(as)j(quite)e(small)i
+(in)f(terms)g(of)f(the)h(number)2044 2938 y(of)c(operators,)e
+(algorithms)h(and)h(rules.)2127 3040 y(F)o(or)i(a)h(more)f(realistic)h
+(e)n(v)n(aluation)e(of)i(Prairie,)g(we)g(needed)e(an-)2044
+3139 y(swers)g(to)f(the)g(follo)n(wing)f(questions:)2106
+3313 y(1.)41 b(Is)20 b(Prairie)h(adequate)d(for)i(lar)o(ge-scale)f
+(rule)h(sets?)2106 3489 y(2.)41 b(Ho)n(w)13 b(is)i(programmer)c
+(producti)n(vity)g(enhanced)h(by)h(the)h(high-)2210 3588
+y(le)n(v)o(el)20 b(abstractions)f(of)h(Prairie?)2106
+3764 y(3.)41 b(Can)30 b(Prairie)f(rule)h(sets)g(be)g(translated)f
+(automatically)f(into)2210 3864 y(ef)n(\256cient)20 b(implementations?)
+2127 4037 y(W)-7 b(e)18 b(addressed)e(the)i(\256rst)g(question)e(by)h
+(using)g(the)g(T)-6 b(e)o(xas)17 b(Instru-)2044 4137
+y(ments)j(Open)g(OODB)i(query)d(optimizer)g(rule)i(set,)g(which)f(has)h
+(the)2044 4237 y(lar)o(gest)29 b(publicly)h(a)n(v)n(ailable)f(rule)h
+(set.)61 b(W)-7 b(e)31 b(describe)f(this)h(opti-)2044
+4336 y(mizer)22 b(in)i(the)f(ne)o(xt)f(section,)h(and)g(then)f(gi)n(v)o
+(e)h(our)f(assessments)i(to)2044 4436 y(the)c(last)h(tw)o(o)f
+(questions)g(in)g(subsequent)f(sections.)2044 4687 y
+Fx(4.1)99 b(The)74 b(T)-9 b(exas)73 b(Instruments)h(Open)g(OODB)2268
+4803 y(query)26 b(optimizer)2044 4964 y FG(The)45 b(T)-6
+b(e)o(xas)46 b(Instruments)f(Open)g(Object-Oriented)f(Database)2044
+5063 y(Management)16 b(System)j(is)h(an)e(open,)g(e)o(xtensible,)g
+(object-oriented)2044 5163 y(database)49 b(system)g(which)h(pro)o
+(vides)d(users)j(an)g(architectural)2044 5263 y(frame)n(w)o(ork)27
+b(that)j(is)h(con\256gurable)c(in)j(an)g(incremental)e(manner)-5
+b(.)p eop
+%%Page: 7 7
+7 6 bop -112 21 a FG(The)42 b(query)f(optimizer)g(in)i(the)g(Open)f
+(OODB)h([2])f(is)i(gener)n(-)-112 120 y(ated)35 b(using)f(V)-11
+b(olcano.)74 b(It)36 b(is)g(written)f(as)h(a)f(set)i(of)e(trans)p
+1671 120 25 4 v 29 w(rules)-112 220 y(and)21 b(impl)p
+188 220 V 29 w(rules)h(that)h(de\256ne)e(the)i(algebra)e(of)h(an)g
+(object-oriented)-112 319 y(database)34 b(system.)75
+b(Currently)-5 b(,)37 b(there)e(are)g(17)g(transformation)-112
+419 y(rules)13 b(and)g(9)h(implementation)e(rules)i(together)e(with)i
+(about)f Fh(13)p Fv(;)h Fh(000)-112 519 y FG(lines)26
+b(of)f(code)g(for)g(support)f(functions;)j(this,)g(of)f(course,)f(can)h
+(be)-112 618 y(changed)18 b(by)i(an)g(Open)f(OODB)i(user)f(for)g
+(speci\256c)g(needs.)-112 895 y Fx(4.2)99 b(Pr)n(ogrammer)25
+b(pr)n(oducti)o(vity)-112 1064 y FG(Programmer)11 b(producti)n(vity)g
+(can)i(be)h(measured)e(in)i(dif)n(ferent)e(w)o(ays.)-112
+1164 y(An)29 b(admittedly)f(simplistic)j(metric)e(is)h(the)g(number)e
+(of)h(lines)h(of)-112 1263 y(code)24 b(that)i(must)f(be)g(written.)45
+b(But)26 b(there)e(are)i(also)f(less)i(tangible)-112
+1363 y(measures,)16 b(such)h(as)g(the)g(amount)e(of)i(conceptual)e(ef)n
+(fort)g(needed)h(to)-112 1463 y(understand)k(a)k(particular)d
+(programming)f(task.)37 b(Our)23 b(e)o(xperience)-112
+1562 y(with)d(the)h(Open)f(OODB)i(query)d(optimizer)g(suggests)i(that)g
+(Prairie)-112 1662 y(e)o(xcels)f(on)g(the)g(latter)m(,)g(while)g(of)n
+(fering)f(modest)g(reductions)g(in)i(the)-112 1762 y(v)n(olume)e(of)h
+(code)f(that)h(needs)g(to)h(be)f(written.)-29 1868 y(W)-7
+b(e)16 b(con)m(v)o(erted)e(by)h(hand)g(the)h(Open)f(OODB)h(query)f
+(optimizer')-5 b(s)-112 1968 y(V)-11 b(olcano)15 b(speci\256cations)g
+(to)h(Prairie.)28 b(This)16 b(w)o(as)h(a)f(non-tri)n(vial)f(task)-112
+2068 y(because)27 b(of)h(the)h(relati)n(v)o(ely)e(lar)o(ge)g(size)i(of)
+f(the)h(rule)f(set)h(and)f(the)-112 2167 y(comple)o(xity)f(of)j(the)g
+(support)e(functions.)57 b(This)30 b(w)o(as)g(where)f(we)-112
+2267 y(found)c(Prairie)j(helped)f(in)g(conceptually)f(simplifying)g
+(the)i(rules)-112 2366 y(and)j(actions.)63 b(W)-7 b(e)33
+b(then)e(used)g(our)g(P2V)h(pre-processor)d(to)j(re-)-112
+2466 y(constitute)22 b(these)i(Prairie)f(speci\256cations)g(as)i(V)-11
+b(olcano)22 b(speci\256ca-)-112 2566 y(tions.)59 b(As)31
+b(described)e(in)i(Section)f(3,)i(this)f(process)f(in)m(v)n(olv)o(ed)e
+(a)-112 2665 y(considerable)19 b(le)n(v)o(el)i(of)h(comple)o(xity)-5
+b(,)19 b(partly)i(because)f(the)i(Prairie)-112 2765 y(speci\256cation)h
+(had)g(22)g(T)-8 b(-rules)24 b(and)f(11)g(I-rules)h(compared)d(to)j(17)
+-112 2865 y(trans)p 55 2865 V 29 w(rules)32 b(and)g(9)h(impl)p
+659 2865 V 29 w(rules)g(in)f(the)h(V)-11 b(olcano)31
+b(speci\256cation;)-112 2964 y(the)25 b(reconstituted)f(V)-11
+b(olcano)24 b(speci\256cation)g(had)h(the)h(same)f(num-)-112
+3064 y(ber)19 b(of)g(trans)p 270 3064 V 29 w(rules)h(and)f(impl)p
+774 3064 V 29 w(rules)h(as)g(the)g(original)e(hand-coded)-112
+3163 y(speci\256cation.)-29 3270 y(Con)m(v)o(erting)c(the)g(Open)g
+(OODB)g(op)o(timizer)f(ru)o(le)h(set)g(into)f(Prair)o(ie)-112
+3370 y(format)19 b(actually)h(simpli\256ed)g(its)i(speci\256cation)e
+(as)h(the)g(comple)o(xi-)-112 3469 y(ties)i(of)g(the)g(V)-11
+b(olcano)22 b(model)h(were)f(remo)o(v)o(ed.)36 b(The)22
+b(reduction)g(in)-112 3569 y(lines)14 b(of)g(code)f(w)o(as)i(modest)f
+(\320)h(there)e(w)o(as)i(about)e(a)i(10\045)f(sa)n(vings.)1820
+3539 y Ft(5)-112 3669 y FG(Ho)n(we)n(v)o(er)m(,)24 b(as)j(mentioned)c
+(abo)o(v)o(e,)j(sa)n(vings)f(in)h(lines)g(of)f(code)g(do)-112
+3768 y(not)i(adequately)g(re\257ect)h(increases)g(in)g(programmer)d
+(producti)n(v-)-112 3868 y(ity)-5 b(.)38 b(W)-7 b(e)25
+b(found)d(the)h(encapsulated)f(speci\256cations)h(of)g(Prairie)g(\320)
+-112 3968 y(namely)-5 b(,)34 b(the)f(use)h(of)e(a)i(single)f
+(descriptor)e(and)i(fe)n(wer)f(e)o(xplicit)-112 4067
+y(support)18 b(functions)h(\320)i(made)e(rule)h(programming)d
+FF(muc)o(h)i FG(easier)-5 b(.)-112 4344 y Fx(4.3)99 b(P)n(erf)n
+(ormance)81 b(r)n(esults)g(using)g(the)h(Open)112 4460
+y(OODB)24 b(optimizer)-29 4629 y FG(The)17 b(acid)g(test)h(of)f
+(Prairie)g(w)o(as)i(whether)d(Prairie)h(speci\256cations)-112
+4729 y(could)c(be)i(translated)f(into)g(ef)n(\256cient)h(optimizer)e
+(implementations.)-112 4828 y(Our)24 b(e)o(xperiments)f(using)h(the)h
+(Open)g(OODB)g(consisted)g(of)f(opti-)-112 4928 y(mizing)j(8)h(dif)n
+(ferent)e(queries)h(using)h(the)g(tw)o(o)g(query)f(optimizers)p
+-112 5028 788 4 v -28 5081 a Fr(5)7 5105 y Fz(The)16
+b(original)j(V)-9 b(olcano)18 b(speci\256cation)i(had)c
+Fc(13)p Fb(;)c Fc(400)17 b Fz(lines,)g(the)g(Prairie)h(spec-)-112
+5184 y(i\256cation)25 b(had)f Fc(12)p Fb(;)12 b Fc(100)23
+b Fz(lines,)j(and)e(the)g(P2V)-7 b(-generated)26 b(V)-9
+b(olcano)26 b(speci\256cation)-112 5263 y(had)17 b Fc(15)p
+Fb(;)12 b Fc(800)17 b Fz(lines.)2044 21 y FG(generated,)h(respecti)n(v)
+o(ely)-5 b(,)19 b(using)h(Prairie)g(and)g(using)h(V)-11
+b(olcano)19 b(di-)2044 120 y(rectly)d(\(in)g(the)h(remainder)e(of)h
+(this)h(section,)g(we)g(will)h(use)e(\252Prairie\272)2044
+220 y(and)g(\252V)-11 b(olcano\272)15 b(to)h(denote)g(these)g(tw)o(o)h
+(approaches\).)26 b(There)15 b(were)2044 319 y(4)j(distinct)h(e)o
+(xpressions)e(that)i(were)f(used)g(to)h(generate)e(the)i(queries)2044
+419 y(used)h(in)i(the)f(e)o(xperiments;)e(these)i(are)g(sho)n(wn)f(in)i
+(Figure)e(6.)32 b(Each)2044 519 y(e)o(xpression)18 b(represents)i(an)g
+Fv(N)9 b FG(-w)o(ay)19 b(join)h(query)f(for)h(v)n(arying)e
+Fv(N)9 b FG(.)2127 627 y(The)27 b(\256rst)g(e)o(xpression)f(E1)h(is)h
+(a)g(simple)f(retrie)n(v)n(al)f(and)g(join)h(of)2044
+726 y(base)21 b(classes.)33 b(The)21 b(second,)f(E2,)h(is)i(also)e(a)h
+(join)f(of)g(base)g(classes;)2044 826 y(ho)n(we)n(v)o(er)m(,)33
+b(after)f(each)h(class)g(retrie)n(v)n(al,)i(an)d(attrib)n(ute)g(has)h
+(to)g(be)2044 926 y(materialized)25 b(\(i.e.,)j(brought)d(into)h(vie)n
+(w\))g(before)f(the)i(join.)48 b(The)2044 1025 y(third)17
+b(and)g(fourth)f(e)o(xpressions)g(\(E3)h(and)g(E4\))g(are)g(the)h(same)
+g(as)g(the)2044 1125 y(\256rst)23 b(and)f(second)g(\(E1)g(and)h(E2\))f
+(respecti)n(v)o(ely)-5 b(,)21 b(e)o(xcept)h(that)h(there)2044
+1224 y(is)g(a)g(selection)e(of)h(attrib)n(utes)g(\(the)g(select)h
+(operator)d(is)k(the)e(root)f(of)2044 1324 y(the)f(e)o(xpressions\).)
+2603 1294 y Ft(6)2127 1432 y FG(The)35 b(algebra)g(that)i(w)o(as)f
+(used)g(in)g(the)g(Prairie)g(and)g(V)-11 b(olcano)2044
+1532 y(optimizers)19 b(for)g(our)g(e)o(xperiments)e(consisted)j(of)f(5)
+h(relational)f(op-)2044 1631 y(erators)f(SELECT)-6 b(,)18
+b(PR)m(OJECT)-6 b(,)18 b(JOIN,)h(RET)g(and)f(UNNEST)g(\(for)2044
+1731 y(set-v)n(alued)g(attrib)n(utes\))h(and)f(an)h(object-oriented)e
+(operator)g(called)2044 1831 y(MA)-9 b(T)13 b(\(for)f(MA)-9
+b(T)j(erialize;)15 b(it)f(is)g(fundamentally)d(a)j(pointer)n(-chasing)
+2044 1930 y(operator)k(for)i(attrib)n(utes)g(of)g(a)g(class\).)30
+b(There)19 b(were)i(8)f(algorithms.)2127 2038 y(There)13
+b(are)g(man)o(y)g(param)o(eters)g(th)o(at)g(can)f(be)g(v)m(aried)g(whe)
+o(n)h(b)o(en)o(ch-)2044 2138 y(marking)f(a)j(query)e(optimizer)-5
+b(.)26 b(Since)14 b(our)f(objecti)n(v)o(e)g(w)o(as)i(to)f(v)o(erify)
+2044 2237 y(that)j(the)h(Prairie)f(approach)f(did)h(not)g(sacri\256ce)h
+(ef)n(\256cienc)o(y)-5 b(,)16 b(our)g(cri-)2044 2337
+y(teria)g(for)g(the)g(queries)g(w)o(as)h(that)f(the)o(y)g(test)h(a)g
+(majority)e(of)h(the)g(rules,)2044 2437 y(with)32 b(v)n(arying)d
+(properties)i(of)g(the)h(base)f(classes.)65 b(T)-7 b(o)32
+b(this)g(end,)2044 2536 y(we)21 b(tested)h(our)e(optimizer)g(\(and)g
+(the)h(V)-11 b(olcano)20 b(optimizer\))g(with)h(8)2044
+2636 y(dif)n(ferent)g(queries)i(\(sho)n(wn)f(in)h(T)-7
+b(able)24 b(3\).)38 b(The)23 b(eight)f(queries)h(Q1)2044
+2736 y(through)d(Q8)i(are)g(deri)n(v)o(ed)f(from)g(the)h(4)g(e)o
+(xpressions)f(in)i(Figure)e(6.)2044 2835 y(Each)15 b(e)o(xpression)f
+(E1)i(through)d(E4)j(is)g(used)g(to)g(obtain)f(tw)o(o)h(queries)2044
+2935 y(for)k(a)h(\256x)o(ed)f(number)e Fv(N)30 b FG(of)20
+b(JOINs)i(in)e(the)h(e)o(xpression.)29 b(The)20 b(only)2044
+3034 y(dif)n(ference)13 b(between)h(the)h(tw)o(o)g(queries)f(obtained)g
+(from)g(an)g(e)o(xpres-)2044 3134 y(sion)19 b(is)i(that)e(the)h
+(\256rst)g(one)f(does)h(not)f(contain)g(an)o(y)f(indices)i(on)f(an)o(y)
+2044 3234 y(classes,)25 b(whereas)e(the)g(second)f(one)h(contains)g(a)g
+(single)g(inde)o(x)f(on)2044 3333 y(each)f(base)i(class)g(occurring)c
+(in)j(the)h(e)o(xpression.)33 b(In)21 b(e)o(xpressions)2044
+3433 y(where)16 b(a)i(SELECT)f(is)h(present)e(\(E3)h(and)f(E4\),)h(the)
+h(selection)e(pred-)2044 3533 y(icate)21 b(is)g(a)g(conjunction)e(of)h
+(equality)g(predicates)f FF(bc)3585 3545 y Fu(i)3636
+3533 y Fh(==)k FF(const)3964 3545 y Fu(i)3992 3533 y
+FG(,)2044 3632 y(where)17 b FF(bc)2344 3644 y Fu(i)2390
+3632 y FG(is)i(an)f(attrib)n(ute)g(of)g(class)h FF(C)3178
+3644 y Fu(i)3206 3632 y FG(,)g(and)e FF(const)3560 3644
+y Fu(i)3606 3632 y FG(is)i(a)g(constant)2044 3732 y(\(we)k(arbitrarily)
+f(set)h(this)h(to)f Fv(i)p FG(,)h(because)e(its)j(v)n(alue)d(doesn')o
+(t)g(af)n(fect)2044 3831 y(the)j(correctness)g(or)g(performance)d(of)k
+(the)f(optimizer\).)44 b(In)25 b(addi-)2044 3931 y(tion,)32
+b(for)e(queries)g(with)h(a)g(SELECT)g(and)f(whose)g(base)h(classes)2044
+4031 y(ha)n(v)o(e)24 b(indices)h(\(Q6)g(and)g(Q8)g(in)h(T)-7
+b(able)25 b(3\),)h(the)f(\(single\))f(inde)o(x)g(of)2044
+4130 y(each)c(base)h(class)h(w)o(as)g(chosen)e(to)h(be)g(the)g(attrib)n
+(ute)f(referenced)f(in)2044 4230 y(the)25 b(selection)g(predicate.)44
+b(F)o(or)25 b(e)o(xample,)g(class)i FF(C)3574 4242 y
+Fu(i)3628 4230 y FG(w)o(as)f(chosen)2044 4330 y(to)i(ha)n(v)o(e)g(an)g
+(inde)o(x)f(on)g(attrib)n(ute)h FF(bc)3132 4342 y Fu(i)3160
+4330 y FG(.)54 b(The)28 b(join)f(predicates)h(for)2044
+4429 y(each)13 b(JOIN)i(were)f(chosen)f(at)i(random,)e(and)h(were)f(al)
+o(w)o(ays)i(equality)2044 4529 y(predicates.)27 b(The)17
+b(choice)g(of)g(JOIN)h(predicates)f(w)o(as)h(such)f(that)h(the)p
+2044 4633 V 2129 4687 a Fr(6)2163 4710 y Fz(The)23 b(most)g(comple)o(x)
+i(e)o(xpression)f(E4)f(consists)h(of)f(all)h(operators)h(in)f(the)f
+(al-)2044 4789 y(gebra,)17 b(e)o(xcept)i(PR)m(OJECT)d(and)h(UNNEST)-5
+b(.)15 b(PR)m(OJECT)h(w)o(as)h(not)h(considered)h(be-)2044
+4868 y(cause)d(it)g(appeared)i(in)d(only)h(one)g(impl)p
+2948 4868 20 4 v 25 w(rule)g(and)g(no)g(trans)p 3412
+4868 V 25 w(rules,)g(and)g(thus,)f(w)o(ould)2044 4947
+y(not)22 b(af)n(fect)h(the)f(size)h(of)e(the)h(search)h(space)f(of)f
+(abstract)j(e)o(xpressions.)39 b(UNNEST)2044 5026 y(w)o(as)20
+b(not)h(considered)i(because)f(it)f(appeared)i(in)e(e)o(xactly)h(one)f
+(trans)p 3656 5026 V 25 w(rule)h(and)f(one)2044 5105
+y(impl)p 2169 5105 V 24 w(rule;)g(including)h(it)d(in)g(our)g(queries)h
+(w)o(ould)g(ha)o(v)o(e)f(increased)i(the)f(number)f(of)2044
+5184 y(parameters)f(that)f(could)h(af)n(fect)g(our)f(run-times.)25
+b(W)-5 b(e)15 b(preferred)k(to)d(concentrate)k(on)2044
+5263 y(simple)d(JOIN)g(e)o(xpressions.)p eop
+%%Page: 8 8
+8 7 bop -112 24 2130 4 v -112 1001 4 978 v -37 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+
+-37 707 a Fa(C)-10 719 y Fn(1)-47 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ -47 618 a Fm(RET)-7
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 152 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+ 152 707 a Fa(C)179 719 y Fn(2)142
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 142 618 a Fm(RET)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 42 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoingetcl1getcl2 16 {
+.5 3.36499 0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 42
+524 a Fm(JOIN)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 182
+415 a
+ tx@Dict begin 45. Rot end
+ 182 415 a 143 418 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 143 418 a Fl(:)10 b(:)g(:)182
+415 y
+ tx@Dict begin 45. neg Rot end
+ 182 415 a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ -7 699 a 331 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 331 429 a
+Fm(RET)336 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.37999 0.99998
+false .5 8.23898 InitRnode } NewNode end end
+ 336 520 a Fa(C)364 528 y Fl(n)-7 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 231 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.36499
+0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 231 335 a Fm(JOIN)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ -7 699
+a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 100 881 a Fz(\(a\))17 b(E1)p 447
+976 4 928 v 476 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+ 476 707 a Fa(C)504 719 y Fn(1)467
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 467 618 a Fm(RET)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 665 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+
+665 707 a Fa(C)693 719 y Fn(2)656 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 656 618 a Fm(RET)506
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 463 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl1 16 { .5 3.36499
+0.0 false .5 10.55498 InitRnode } NewNode end end
+ 463 524 a Fm(MA)-5 b(T)506
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl1
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 652 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl2 16 { .5 3.36499
+0.0 false .5 10.55498 InitRnode } NewNode end end
+ 652 524 a Fm(MA)g(T)506 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 556 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoinmatgetcl1matgetcl2
+16 { .5 3.36499 0.06248 false .5 10.82999 InitRnode } NewNode end
+end
+ 556 429 a Fm(JOIN)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506
+699 a 506 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 695 321 a
+ tx@Dict begin 45. Rot end
+ 695 321 a 656 324
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 656 324 a Fl(:)11 b(:)f(:)695 321 y
+ tx@Dict begin 45. neg Rot end
+ 695 321 a 506 699
+a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 506 699 a 845 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 845 429 a Fm(RET)850 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.37999 0.99998
+false .5 8.23898 InitRnode } NewNode end end
+ 850
+520 a Fa(C)878 528 y Fl(n)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 841 335
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcln 16 { .5 3.36499
+0.0 false .5 10.55498 InitRnode } NewNode end end
+ 841 335 a Fm(MA)-5 b(T)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodematgetcln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 745 240
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.36499
+0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 745 240 a Fm(JOIN)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 506 699 a 506 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodematgetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506
+699 a 611 881 a Fz(\(b\))17 b(E2)p 961 976 4 928 v 990
+707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+ 990 707 a Fa(C)1018 719 y Fn(1)981 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 981 618
+a Fm(RET)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1179 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+ 1179 707 a
+Fa(C)1207 719 y Fn(2)1170 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 1170 618 a Fm(RET)1020
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1070 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoingetcl1getcl2 16 {
+.5 3.36499 0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 1070 524 a Fm(JOIN)1020 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1209 415 a
+ tx@Dict begin 45. Rot end
+ 1209 415
+a 1170 418 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 1170 418 a Fl(:)11 b(:)f(:)1209 415 y
+ tx@Dict begin 45. neg Rot end
+ 1209
+415 a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699 a 1359 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 1359 429 a Fm(RET)1364
+520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.37999 0.99998
+false .5 8.23898 InitRnode } NewNode end end
+ 1364 520 a Fa(C)1392 528 y Fl(n)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020
+699 a 1259 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.36499
+0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 1259 335 a Fm(JOIN)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699
+a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1227 240 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodeselect 16 { .5 3.36499
+0.06248 false .5 18.33496 InitRnode } NewNode end end
+ 1227 240 a Fm(SELECT)1020
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodeselect
+/TheNoderoot InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699 a 1127 881 a Fz(\(c\))17 b(E3)p 1474 976
+4 928 v 1504 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+ 1504 707 a Fa(C)1531 719 y Fn(1)1495
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 1495 618 a Fm(RET)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1693 707
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.37999 1.5
+false .5 7.23782 InitRnode } NewNode end end
+ 1693 707 a Fa(C)1720 719 y Fn(2)1684 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 1684 618
+a Fm(RET)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1490 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl1 16 { .5 3.36499
+0.0 false .5 10.55498 InitRnode } NewNode end end
+ 1490 524 a
+Fm(MA)-5 b(T)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl1
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1679 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl2 16 { .5 3.36499
+0.0 false .5 10.55498 InitRnode } NewNode end end
+ 1679 524
+a Fm(MA)g(T)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1583 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoinmatgetcl1matgetcl2
+16 { .5 3.36499 0.06248 false .5 10.82999 InitRnode } NewNode end
+end
+ 1583 429
+a Fm(JOIN)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a
+1723 321 a
+ tx@Dict begin 45. Rot end
+ 1723 321 a 1684 324 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 1684 324 a Fl(:)10 b(:)h(:)1723
+321 y
+ tx@Dict begin 45. neg Rot end
+ 1723 321 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1873 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.36499
+0.0 false .5 9.44498 InitRnode } NewNode end end
+ 1873
+429 a Fm(RET)1878 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.37999 0.99998
+false .5 8.23898 InitRnode } NewNode end end
+ 1878 520 a Fa(C)1905 528 y Fl(n)1534
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1868 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcln 16 { .5 3.36499
+0.0 false .5 10.55498 InitRnode } NewNode end end
+ 1868 335 a Fm(MA)-5 b(T)1534
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodematgetcln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1772 240 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.36499
+0.06248 false .5 10.82999 InitRnode } NewNode end end
+ 1772 240 a Fm(JOIN)1534 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodematgetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1741 146 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodeselect 16 { .5 3.36499
+0.06248 false .5 18.33496 InitRnode } NewNode end end
+ 1741 146
+a Fm(SELECT)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodeselect
+/TheNoderoot InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1639 881 a Fz(\(d\))17
+b(E4)p 2014 1001 4 978 v -112 1004 2130 4 v 2015 1021
+19 984 v -96 1021 2130 19 v -112 1204 a FG(Figure)g(6:)28
+b(Expressions)17 b(used)h(in)g(generating)e(queries)h(for)h(e)o
+(xperiments)p 2359 358 1644 13 v 2359 424 4 67 v 2412
+438 a Fp(Query)p 2620 424 V 2673 443 a(Indices?)p 2930
+424 V 2983 438 a(Expr)o(ession)p 3306 424 V 3471 404
+a(Rules)d(matched)p 3999 424 V 3309 427 694 4 v 2359
+491 4 67 v 2620 491 V 2930 491 V 3306 491 V 3359 471
+a Fo(trans)p 3475 471 18 4 v 21 w(rules)p 3656 491 4
+67 v 103 w(impl)p 3818 471 18 4 v 22 w(rules)p 3999 491
+4 67 v 2359 503 1644 13 v 2359 569 4 67 v 2456 549 a(Q1)p
+2620 569 V 214 w(No)p 2930 569 V 3087 589 a(E1)p 3306
+569 V 316 w(3)p 3656 569 V 318 w(3)p 3999 569 V 2359
+573 575 4 v 2359 636 4 67 v 2456 616 a(Q2)p 2620 636
+V 207 w(Y)-6 b(es)p 2930 636 V 3306 636 V 3656 636 V
+3999 636 V 2359 639 1644 4 v 2359 706 4 67 v 2456 686
+a(Q3)p 2620 706 V 214 w(No)p 2930 706 V 3087 725 a(E2)p
+3306 706 V 316 w(8)p 3656 706 V 318 w(4)p 3999 706 V
+2359 709 575 4 v 2359 772 4 67 v 2456 752 a(Q4)p 2620
+772 V 207 w(Y)g(es)p 2930 772 V 3306 772 V 3656 772 V
+3999 772 V 2359 775 1644 4 v 2359 842 4 67 v 2456 822
+a(Q5)p 2620 842 V 214 w(No)p 2930 842 V 3087 861 a(E3)p
+3306 842 V 316 w(9)p 3656 842 V 3815 862 a(5)p 3999 842
+V 2359 845 575 4 v 2359 908 4 67 v 2456 888 a(Q6)p 2620
+908 V 207 w(Y)g(es)p 2930 908 V 3306 908 V 3656 908 V
+3999 908 V 2359 911 1644 4 v 2359 978 4 67 v 2456 958
+a(Q7)p 2620 978 V 214 w(No)p 2930 978 V 3087 997 a(E4)p
+3306 978 V 302 w(16)p 3656 978 V 303 w(7)p 3999 978 V
+2359 981 575 4 v 2359 1044 4 67 v 2456 1024 a(Q8)p 2620
+1044 V 207 w(Y)g(es)p 2930 1044 V 3306 1044 V 3656 1044
+V 3999 1044 V 2359 1057 1644 13 v 2566 1204 a FG(T)f(able)20
+b(3:)30 b(Queries)20 b(used)g(in)g(e)o(xperiments)-112
+1554 y(queries)i(corresponded)e(to)k(linear)f(query)f(graphs.)38
+b(In)23 b(the)g(future,)-112 1654 y(we)16 b(will)h(e)o(xperiment)d
+(with)i(non-linear)e(\(e.g.,)i(star\))g(query)f(graphs.)-29
+1755 y(T)-7 b(able)52 b(3)h(also)g(sho)n(ws)g(the)f(number)f(of)h
+(trans)p 1497 1755 25 4 v 30 w(rules)g(and)-112 1855
+y(impl)p 46 1855 V 29 w(rules)23 b(that)h(are)f(matched)g(by)g(each)g
+(e)o(xpression.)38 b(These)23 b(are)-112 1954 y(the)36
+b(rules)h(whose)f(left)h(hand)f(sides)h(match)g(a)g(sub-e)o(xpression.)
+-112 2054 y(Ho)n(we)n(v)o(er)m(,)20 b(not)i(all)g(the)g(rules)g(were)g
+(necessarily)g(applicable.)33 b(F)o(or)-112 2153 y(instance,)25
+b(an)g(impl)p 469 2153 V 29 w(rule)g(with)g(an)h(inde)o(x)d(scan)j(w)o
+(ould)e(not)h(apply)-112 2253 y(to)20 b(Q3,)g(although)e(it)j(might)f
+(apply)f(to)h(Q4.)-29 2354 y(Queries)32 b(Q1)h(through)e(Q8)i(were)g
+(optimized)f(for)g(increasing)-112 2454 y(number)d Fv(N)41
+b FG(of)31 b(JOINs.)64 b(F)o(or)32 b(a)g(\256x)o(ed)e(number)g(of)h
+(JOINs)i(in)e(a)-112 2554 y(query)-5 b(,)14 b(we)i(v)n(aried)f(the)h
+(cardinalities)f(of)g(the)h(base)g(classes)h(5)f(times,)-112
+2653 y(each)h(time)h(generating)e(a)i(query)f(with)h(dif)n(ferent)e
+(class)i(properties,)-112 2753 y(and)30 b(a)n(v)o(eraged)g(the)h
+(run-times)f(o)o(v)o(er)g(the)h(5)h(query)d(instances)j(to)-112
+2852 y(generate)20 b(the)h(per)n(-query)f(optimization)g(time.)33
+b(Thus,)21 b(each)h(point)-112 2952 y(in)g(our)f(graphs)g(represents)h
+(the)g(a)n(v)o(erage)f(of)h(5)g(queries.)34 b(The)22
+b(run-)-112 3052 y(times)c(were)f(measured)585 3022 y
+Ft(7)639 3052 y FG(using)g(the)h(GNU)g Fd(time)g FG(command.)26
+b(All)-112 3151 y(e)o(xperiments)13 b(were)i(performed)e(on)i(a)h
+(lightly)f(loaded)f(DECstation)-112 3251 y(5000/200)j(running)h(Ultrix)
+i(4.2.)-29 3352 y(The)13 b(optimization)g(times)g(for)g(ea)o(ch)f(qu)o
+(ery)g(fo)o(r)h(b)o(oth)f(ap)o(pr)o(oach)o(es)-112 3452
+y(\(Prairie)h(and)g(V)-11 b(olcano\))13 b(are)g(sho)n(wn)g(in)g
+(Figures)g(7\(a\))g(thro)o(ug)o(h)g(7\()o(h\))o(.)-112
+3552 y(The)25 b(number)g(of)h(joins)g(in)g(each)g(set)h(of)f(graphs)f
+(w)o(as)i(v)n(aried)e(to)h(a)-112 3651 y(maximum)18 b(of)i(8,)g(or)g
+(until)g(virtual)f(memory)g(w)o(as)i(e)o(xhausted.)-29
+3753 y(The)i(\256rst)h(set)h(of)e(graphs)f(\(Figures)h(7\(a\))g(and)g
+(7\(b\)\))f(sho)n(ws)i(the)-112 3852 y(performance)32
+b(of)k(a)g(simple)f(relational-type)f(query)-5 b(.)73
+b(The)36 b(op-)-112 3952 y(timization)30 b(times)j(are)e(almost)h
+(identical)f(between)g(Prairie)g(and)-112 4051 y(V)-11
+b(olcano,)32 b(and)f(the)h(notable)e(point)h(is)h(that)f(the)h
+(presence)e(of)h(an)-112 4151 y(inde)o(x)16 b(does)h(not)g(change)f
+(the)i(optimizer')-5 b(s)16 b(beha)n(vior)m(,)g(i.e.,)i(the)g(tw)o(o)
+-112 4251 y(graphs)24 b(are)i(identical.)46 b(This)26
+b(arises)h(because)e(the)h(optimizer)f(al-)-112 4350
+y(gebra)g(had)h(only)g(tw)o(o)h(join)f(algorithms)g(\(pointer)f(join)h
+(and)g(hash)-112 4450 y(join\),)19 b(neither)g(of)h(which)g(mak)o(es)g
+(use)g(of)g(an)o(y)f(indices.)-29 4551 y(The)13 b(second)f(set)i(of)g
+(graphs)e(\(Figures)h(7\(c\))f(and)h(7\(d\)\))f(sho)n(ws)i(the)-112
+4651 y(results)25 b(of)g(optimizing)f(Q3)i(and)f(Q4.)44
+b(Here,)27 b(as)f(in)g(Figures)f(7\(a\))-112 4750 y(and)33
+b(7\(b\),)i(the)f(presence)f(\(or)g(absence\))g(of)g(indices)h(mak)o
+(es)f(no)-112 4850 y(dif)n(ference.)46 b(Both)26 b(the)h(Prairie)f(and)
+g(V)-11 b(olcano)26 b(approaches)e(ha)n(v)o(e)-112 4950
+y(comparable)d(run-times.)40 b(The)24 b(sharp)f(jump)h(in)g(the)g
+(graphs)f(from)p -112 5028 788 4 v -28 5081 a Fr(7)7
+5105 y Fz(Since)j(the)g(run-times)h(were)f(too)f(small)h(to)g(be)f
+(measured)h(accurately)j(with)-112 5184 y Fy(time)p Fz(,)19
+b(each)i(query)g(instance)h(w)o(as)f(optimized)h(3000)f(times)f(\(in)h
+(a)f(loop\))h(and)f(the)-112 5263 y(total)e(time)g(w)o(as)f(di)n(vided)
+i(by)e(3000)h(to)f(get)h(the)g(per)o(-query)g(optimization)i(time.)2044
+1554 y FG(7-w)o(ay)12 b(to)i(8-w)o(ay)f(joins)g(is)i(due)d(to)i(the)f
+(f)o(act)h(that)g(since)f(all)h(optimiza-)2044 1654 y(tion)25
+b(is)h(done)f(in)h(main)f(memory)-5 b(,)24 b(dynamic)g(memory)g
+(allocation)2044 1753 y(\(caused)29 b(by)h Fd(malloc)g
+FG(calls\))h(results)g(in)f(a)h(lot)f(of)h(thrashing)e(at)2044
+1853 y(this)d(point.)44 b(W)-7 b(e)26 b(speculate)f(that)g(in)h
+(systems)g(with)f(more)g(virtual)2044 1952 y(memory)-5
+b(,)18 b(the)i(graphs)f(will)i(be)f(smoother)-5 b(.)2127
+2057 y(The)15 b(third)f(and)g(fourth)g(sets)i(of)f(graphs)f(in)h
+(Figures)g(7\(e\))f(through)2044 2157 y(7\(h\))k(are)i(optimizations)f
+(of)g(queries)h(with)g(a)g(selection)f(predicate.)2044
+2257 y(In)c(these)h(cases,)g(the)g(presence)e(of)i(an)f(inde)o(x)f(mak)
+o(es)h(a)h(dif)n(ference)e(if)2044 2356 y(the)21 b(inde)o(x)e(is)j
+(referenced)c(in)j(the)g(selection)g(predicate)e(\(as)i(we)g(de-)2044
+2456 y(signed\).)27 b(Also,)19 b(in)g(these)g(tw)o(o)f(\256gures,)h
+(the)f(performance)e(of)i(both)2044 2556 y(Prairie)e(and)h(V)-11
+b(olcano)16 b(w)o(as)h(almost)g(identical,)g(e)o(xcept)e(that)i
+(Prairie)2044 2655 y(does)29 b(slightly)f(w)o(orse)h(due)g(to)g(the)g
+(lar)o(ger)f(number)f(of)33 b Fd(malloc)2044 2755 y FG(calls)23
+b(that)f(the)h(P2V)f(translator)g(introduces.)34 b(Also,)23
+b(note)f(that)h(we)2044 2854 y(could)c(only)g(go)g(up)h(to)g(3-w)o(ay)f
+(joins)g(before)g(virtual)g(memory)f(w)o(as)2044 2954
+y(e)o(xhausted.)34 b(As)23 b(the)g(a)n(v)n(ailable)f(memory)e
+(decreases,)j(there)f(is)h(in-)2044 3054 y(creased)15
+b(thrashing)f(\(as)i(sho)n(wn)f(by)h(the)g(sharp)f(changes)f(in)i
+(slope)g(in)2044 3153 y(the)k(plots\))g(resulting)f(in)i(a)f(much)f
+(slo)n(wer)h(optimization)f(process.)2127 3258 y(In)j(all)h(four)f
+(sets)i(of)e(plots,)h(we)g(can)f(see)i(that)e(Prairie)h(performs)2044
+3358 y(with)34 b(almost)g(\(less)h(than)e Fh(5\045)i
+FG(v)n(ariation\))d(the)i(same)g(ef)n(\256cienc)o(y)2044
+3457 y(as)i(V)-11 b(olcano.)76 b(In)36 b(e)o(xtreme)e(cases,)41
+b(when)35 b(memory)f(is)j(scarce,)2044 3557 y(Prairie)17
+b(runs)f(more)h(slo)n(wly)g(\(about)e Fh(15\045)p FG(\))i(\(e.g.,)f
+(Figure)h(7\(f\)\),)f(b)n(ut)2044 3657 y(we)31 b(belie)n(v)o(e)f(that)h
+(this)h(situation)e(already)g(represents)g(a)h(serious)2044
+3756 y(bottleneck)18 b(for)i(both)f(V)-11 b(olcano)20
+b(and)f(Prairie.)2127 3861 y(The)13 b(results)h(presented)e(in)h(this)h
+(section)g(sho)n(w)f(that)g(Prairie)h(opti-)2044 3961
+y(mizers)h(need)g(not)g(sacri\256ce)h(ef)n(\256cienc)o(y)e(for)g
+(clarity)-5 b(,)16 b(e)n(v)o(en)e(for)h(lar)o(ge)2044
+4060 y(rule)f(sets.)28 b(More)14 b(research)g(and)g(v)n(alidation)f(is)
+i(necessary)f(to)g(v)o(erify)2044 4160 y(that)20 b(Prairie)g(is)h(an)f
+(ef)n(\256cient)g(tool)g(for)g(optimizer)f(speci\256cation.)2044
+4469 y FB(5)119 b(Related)31 b(r)n(esear)n(ch)2044 4665
+y FG(The)d(System)h(R)g(optimizer)f([11])f(w)o(as)j(the)f(most)f
+(important)f(de-)2044 4764 y(v)o(elopment)g(in)j(query)f(optimization)f
+(research.)57 b(It)30 b(w)o(as)h(a)f(cost-)2044 4864
+y(based)19 b(centralized)f(relational)g(query)g(optimizer)h(and)f
+(introduced)2044 4964 y(a)g(v)n(ariety)e(of)h(k)o(e)o(y)g(concepts)f
+(lik)o(e)i(\252interesting\272)e(e)o(xpressions,)g(car)n(-)2044
+5063 y(dinality)35 b(estimation)g(using)h(selecti)n(vity)g(f)o(actors)f
+(and)h(dynamic)2044 5163 y(programming)14 b(with)j(pruning)e(of)i
+(search)g(space.)28 b(These)17 b(concepts)2044 5263 y(continue)h(to)j
+(be)f(important)f(in)h(query)f(optimizer)g(research.)p
+eop
+%%Page: 9 9
+9 8 bop -104 24 1935 4 v -104 3720 4 3696 v 66 714 a
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q1.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 418 m
+621 537 l
+822 661 l
+1023 789 l
+1225 909 l
+1426 1046 l
+1627 1183 l
+1828 1320 l
+2030 1449 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 537 30 0 360 arc
+gsave fill grestore
+stroke
+822 661 30 0 360 arc
+gsave fill grestore
+stroke
+1023 789 30 0 360 arc
+gsave fill grestore
+stroke
+1225 909 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1046 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1183 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1320 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1449 30 0 360 arc
+gsave fill grestore
+stroke
+420 421 m
+621 541 l
+822 670 l
+1023 801 l
+1225 935 l
+1426 1066 l
+1627 1229 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+420 451 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+621 571 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+822 700 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+1023 831 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+1225 965 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+1426 1096 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+1627 1259 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 842 a Fz(\(a\))17 b(Query)h(1)974 714
+y @beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q2.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+420 418 m
+621 539 l
+822 664 l
+1023 783 l
+1225 906 l
+1426 1037 l
+1627 1176 l
+1828 1304 l
+2030 1451 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 539 30 0 360 arc
+gsave fill grestore
+stroke
+822 664 30 0 360 arc
+gsave fill grestore
+stroke
+1023 783 30 0 360 arc
+gsave fill grestore
+stroke
+1225 906 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1037 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1176 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1304 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1451 30 0 360 arc
+gsave fill grestore
+stroke
+420 412 m
+621 533 l
+822 661 l
+1023 796 l
+1225 926 l
+1426 1063 l
+1627 1212 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+420 442 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+621 563 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+822 691 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+1023 826 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+1225 956 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+1426 1093 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+1627 1242 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 842 a(\(b\))f(Query)h(2)p -34 943 1816
+4 v 66 1632 a @beginspecial 50.187500 @llx 50.187500
+@lly 501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q3.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 401 m
+621 489 l
+822 578 l
+1023 672 l
+1225 762 l
+1426 865 l
+1627 969 l
+1828 1076 l
+2030 1574 l
+stroke
+420 401 30 0 360 arc
+gsave fill grestore
+stroke
+621 489 30 0 360 arc
+gsave fill grestore
+stroke
+822 578 30 0 360 arc
+gsave fill grestore
+stroke
+1023 672 30 0 360 arc
+gsave fill grestore
+stroke
+1225 762 30 0 360 arc
+gsave fill grestore
+stroke
+1426 865 30 0 360 arc
+gsave fill grestore
+stroke
+1627 969 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1076 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1574 30 0 360 arc
+gsave fill grestore
+stroke
+420 402 m
+621 485 l
+822 568 l
+1023 644 l
+1225 736 l
+1426 821 l
+1627 918 l
+1828 1019 l
+2030 1511 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+420 432 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+621 515 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+822 598 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+1023 674 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+1225 766 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+1426 851 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+1627 948 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+1828 1049 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+2030 1541 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 1760 a(\(c\))f(Query)h(3)974 1632 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q4.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+420 400 m
+621 492 l
+822 575 l
+1023 669 l
+1225 759 l
+1426 866 l
+1627 962 l
+1828 1069 l
+2030 1578 l
+stroke
+420 400 30 0 360 arc
+gsave fill grestore
+stroke
+621 492 30 0 360 arc
+gsave fill grestore
+stroke
+822 575 30 0 360 arc
+gsave fill grestore
+stroke
+1023 669 30 0 360 arc
+gsave fill grestore
+stroke
+1225 759 30 0 360 arc
+gsave fill grestore
+stroke
+1426 866 30 0 360 arc
+gsave fill grestore
+stroke
+1627 962 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1069 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1578 30 0 360 arc
+gsave fill grestore
+stroke
+420 400 m
+621 484 l
+822 567 l
+1023 645 l
+1225 735 l
+1426 823 l
+1627 915 l
+1828 1024 l
+2030 1517 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+420 430 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+621 514 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+822 597 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+1023 675 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+1225 765 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+1426 853 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+1627 945 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+1828 1054 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+2030 1547 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 1760 a(\(d\))f(Query)h(4)p -34 1861
+V 66 2550 a @beginspecial 50.187500 @llx 50.187500 @lly
+501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q5.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 552 m
+430 552 l
+420 728 m
+430 728 l
+420 904 m
+430 904 l
+420 1081 m
+430 1081 l
+420 1257 m
+430 1257 l
+420 1433 m
+430 1433 l
+420 1609 m
+430 1609 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 552 m
+2020 552 l
+2030 728 m
+2020 728 l
+2030 904 m
+2020 904 l
+2030 1081 m
+2020 1081 l
+2030 1257 m
+2020 1257 l
+2030 1433 m
+2020 1433 l
+2030 1609 m
+2020 1609 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 728 m
+440 728 l
+420 1081 m
+440 1081 l
+420 1433 m
+440 1433 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 728 m
+2010 728 l
+2030 1081 m
+2010 1081 l
+2030 1433 m
+2010 1433 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 728 m
+gsave
+348 728 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1081 m
+gsave
+348 1081 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1433 m
+gsave
+348 1433 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 424 m
+956 511 l
+1493 671 l
+2030 1778 l
+stroke
+420 424 30 0 360 arc
+gsave fill grestore
+stroke
+956 511 30 0 360 arc
+gsave fill grestore
+stroke
+1493 671 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1778 30 0 360 arc
+gsave fill grestore
+stroke
+420 426 m
+956 522 l
+1493 688 l
+2030 1737 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+420 456 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+956 552 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+1493 718 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+2030 1767 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 2680 a(\(e\))f(Query)h(5)974 2550 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q6.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 386 l
+956 376 m
+956 386 l
+1493 376 m
+1493 386 l
+2030 376 m
+2030 386 l
+420 1785 m
+420 1775 l
+956 1785 m
+956 1775 l
+1493 1785 m
+1493 1775 l
+2030 1785 m
+2030 1775 l
+stroke
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 415 m
+956 490 l
+1493 633 l
+2030 1651 l
+stroke
+420 415 30 0 360 arc
+gsave fill grestore
+stroke
+956 490 30 0 360 arc
+gsave fill grestore
+stroke
+1493 633 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1651 30 0 360 arc
+gsave fill grestore
+stroke
+420 416 m
+956 493 l
+1493 631 l
+2030 1462 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+420 446 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+956 523 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+1493 661 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+2030 1492 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1178 2678 a(\(f\))f(Query)h(6)p -34 2780
+V 66 3470 a @beginspecial 50.187500 @llx 50.187500 @lly
+501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q7.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-83 1080 m
+gsave
+-83 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 425 m
+956 510 l
+1493 670 l
+2030 1637 l
+stroke
+420 425 30 0 360 arc
+gsave fill grestore
+stroke
+956 510 30 0 360 arc
+gsave fill grestore
+stroke
+1493 670 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1637 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 501 l
+1493 648 l
+2030 1470 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+956 531 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+1493 678 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+2030 1500 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 265 3597 a(\(g\))f(Query)h(7)974 3470 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q8.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 421 m
+956 504 l
+1493 650 l
+2030 1549 l
+stroke
+420 421 30 0 360 arc
+gsave fill grestore
+stroke
+956 504 30 0 360 arc
+gsave fill grestore
+stroke
+1493 650 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1549 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 502 l
+1493 647 l
+2030 1475 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+956 532 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+1493 677 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+2030 1505 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 3597 a(\(h\))f(Query)h(8)p 1827 3720
+4 3696 v -104 3723 1935 4 v 1829 3740 19 3703 v -87 3740
+1935 19 v -39 3922 a FG(Figure)i(7:)29 b(Query)19 b(optimization)g
+(times)h(for)g(Q1)g(through)e(Q8)-29 4158 y(The)29 b(query)g(optimizer)
+g(in)h(R)849 4128 y Ff(\003)918 4158 y FG([3])g(w)o(orks)f(in)i
+(essentially)f(the)-112 4257 y(same)16 b(w)o(ay)g(as)g(that)g(of)g
+(System)g(R,)h(e)o(xcept)d(that)i(R)1322 4227 y Ff(\003)1378
+4257 y FG(is)g(a)h(distrib)n(uted)-112 4357 y(database)31
+b(system)i(which)f(introduces)f(some)h(subtle)g(complica-)-112
+4457 y(tions)20 b(in)g(its)h(query)e(optimizer)-5 b(.)-29
+4565 y(The)23 b(Starb)n(urst)h(query)f(optimizer)g([10])g(uses)i(rules)
+f(for)f(all)i(de-)-112 4665 y(cisions)i(that)g(need)f(to)h(be)g(tak)o
+(en)f(by)h(the)g(query)e(optimizer)-5 b(.)49 b(The)-112
+4764 y(rules)17 b(are)g(functional)e(in)j(nature)e(and)g(transform)g(a)
+i(gi)n(v)o(en)e(operator)-112 4864 y(tree)k(into)g(another)-5
+b(.)28 b(The)19 b(rules)i(are)f(commonly)e(those)i(that)g(re\257ect)
+-112 4964 y(relational)27 b(calculus)g(f)o(acts.)53 b(In)27
+b(Starb)n(urst,)j(the)d(query)g(re)n(writing)-112 5063
+y(phase)21 b(is)i(dif)n(ferent)e(from)g(the)h(optimization)f(phase.)35
+b(The)21 b(re)n(writ-)-112 5163 y(ing)13 b(phase)g(transforms)g(the)g
+(query)g(itself)h(into)g(equi)n(v)n(alent)e(operator)-112
+5263 y(trees)21 b(based)f(on)h(relational)f(calculus)g(rules.)31
+b(The)21 b(plan)f(optimiza-)2044 21 y(tion)e(phase)g(selects)h
+(algorithms)e(for)h(each)g(operator)f(in)h(the)g(opera-)2044
+120 y(tor)g(tree)g(that)h(is)g(obtained)e(after)h(re)n(writing.)28
+b(The)18 b(disadv)n(antage)e(of)2044 220 y(separating)21
+b(the)i(query)e(re)n(write)i(and)f(the)g(optimization)g(phases)g(is)
+2044 319 y(that)17 b(pruning)e(of)j(the)f(search)g(space)g(is)i(not)e
+(possible)g(during)e(query)2044 419 y(re)n(write,)k(since)i(the)f(re)n
+(write)g(phase)f(is)j(non-cost-based.)2127 519 y(Fre)o(ytag)13
+b([6])i(describes)f(a)h(rule-based)e(query)g(optimizer)h(similar)2044
+618 y(to)26 b(Starb)n(urst.)45 b(The)25 b(rules)h(are)g(based)f(on)g
+(LISP-lik)o(e)h(representa-)2044 718 y(tions)d(of)g(access)h(plans.)37
+b(The)23 b(rules)g(themselv)o(es)g(are)g(recursi)n(v)o(ely)2044
+818 y(de\256ned)j(on)g(smaller)h(e)o(xpressions)f(\(operator)f
+(trees\).)49 b(Although)2044 917 y(se)n(v)o(eral)23 b(e)o(xpressions)f
+(can)i(contain)f(a)h(common)e(sub-e)o(xpression,)2044
+1017 y(Fre)o(ytag)d(doesn')o(t)f(consider)g(the)i(possibility)g(of)f
+(sharing.)28 b(Expres-)2044 1116 y(sions)22 b(are)f(e)n(v)n(aluated)f
+(each)h(time)h(the)o(y)f(are)g(encountered.)30 b(This)22
+b(is)2044 1216 y(ob)o(viously)14 b(inef)n(\256cient.)27
+b(In)17 b(addition,)f(as)h(in)g(Starb)n(urst,)g(he)g(doesn')o(t)2044
+1316 y(consider)j(the)i(cost)f(transformations)e(inherent)i(in)g(an)o
+(y)g(query)f(op-)2044 1415 y(timizer;)g(rules)g(are)g(syntactic)g
+(transformation)e(rules.)2127 1515 y(EXODUS)j([9])g(pro)o(vides)f(an)h
+(optimizer)f(generator)f(which)i(ac-)2044 1615 y(cepts)j(a)g
+(rule-based)e(speci\256cation)h(of)g(the)h(data)g(model)f(as)h(input.)
+2044 1714 y(The)18 b(optimizer)g(generator)f(compiles)h(these)h(rules,)
+f(together)g(with)2044 1814 y(pre-de\256ned)d(rules,)k(to)f(generate)f
+(an)h(optimizer)f(for)g(the)h(particular)2044 1913 y(data)25
+b(model)g(and)g(set)h(of)f(operators.)44 b(Unlik)o(e)25
+b(Fre)o(ytag,)g(the)h(opti-)2044 2013 y(mizer)18 b(generator)g(for)g
+(EXODUS)h(allo)n(ws)h(for)e(C)i(code)f(along)f(with)2044
+2113 y(de\256nitions)28 b(of)h(ne)n(w)g(rules.)56 b(This)29
+b(allo)n(ws)g(the)g(database)g(imple-)2044 2212 y(mentor)17
+b(the)h(freedom)e(to)i(associate)g(an)o(y)f(action)h(with)g(a)g
+(particular)2044 2312 y(rule.)28 b(Operator)15 b(trees)j(in)f(EXODUS)h
+(are)f(constructed)f(bottom-up)2044 2412 y(from)j(pre)n(viously)f
+(constructed)h(trees.)2127 2511 y(The)14 b(V)-11 b(olcano)14
+b(optimizer)g(generator)f(project)h([7])g(e)n(v)n(olv)o(ed)f(from)2044
+2611 y(the)22 b(EXODUS)g(project.)33 b(It)22 b(is)h(dif)n(ferent)d
+(from)h(all)i(the)f(abo)o(v)o(e)e(op-)2044 2710 y(timizers)k(in)h(one)e
+(signi\256cant)h(w)o(ay:)38 b(it)25 b(is)g(a)g(top-do)n(wn)d(optimizer)
+2044 2810 y(compared)16 b(with)i(the)g(bottom-up)e(strate)o(gy)h(of)h
+(the)g(others.)28 b(Opera-)2044 2910 y(tor)16 b(trees)i(are)e
+(optimized)g(starting)g(from)g(the)h(root)f(while)h(sub-trees)2044
+3009 y(are)g(not)h(yet)g(optimized.)27 b(This)18 b(leads)g(to)g(a)g
+(constraint-dri)n(v)o(en)c(gen-)2044 3109 y(eration)23
+b(of)g(the)h(search)f(space.)40 b(While)25 b(this)f(method)f(results)h
+(in)g(a)2044 3209 y(tight)k(control)g(of)g(the)h(search)f(space,)i(it)g
+(is)f(uncon)m(v)o(entional)c(and)2044 3308 y(requires)16
+b(careful)g(attention)h(on)g(the)g(part)g(of)g(the)h(optimizer)e
+(imple-)2044 3408 y(mentor)j(to)h(ensure)f(that)h(le)o(gal)g(operator)e
+(trees)i(are)h(not)e(accidently)2044 3508 y(left)25 b(out)g(of)f(the)h
+(search)g(space.)43 b(W)-7 b(e)26 b(ha)n(v)o(e)e(used)h(V)-11
+b(olcano)24 b(as)i(our)2044 3607 y(back-end)18 b(search)i(engine.)2044
+3881 y FB(6)119 b(Conclusion)31 b(and)g(futur)n(e)f(w)o(ork)2044
+4067 y FG(Current)24 b(rule-based)f(query)h(optimizers)g(do)h(not)g
+(pro)o(vide)e(a)i(v)o(ery)2044 4167 y(intuiti)n(v)o(e)c(and)g
+(conceptually)f(streamlined)h(frame)n(w)o(ork)f(to)i(de\256ne)2044
+4266 y(rules)31 b(and)f(actions.)61 b(Our)30 b(e)o(xperiences)f(with)i
+(the)g(V)-11 b(olcano)30 b(op-)2044 4366 y(timizer)j(generator)f
+(suggest)h(that)h(its)h(model)e(of)g(rules)h(and)f(the)2044
+4466 y(e)o(xpression)17 b(of)h(these)h(rules)f(is)h(much)f(more)g
+(complicated)e(and)i(too)2044 4565 y(lo)n(w-le)n(v)o(el)25
+b(than)h(it)h(needs)e(to)i(be.)47 b(As)27 b(a)g(consequence,)e(rule)h
+(sets)2044 4665 y(in)k(V)-11 b(olcano)28 b(are)i(fragile,)h(hard)e(to)h
+(write,)i(and)d(deb)n(ug.)56 b(Similar)2044 4764 y(problems)16
+b(may)i(e)o(xist)g(in)g(other)f(contemporary)e(rule-based)h(query)2044
+4864 y(optimizers.)2127 4964 y(W)-7 b(e)21 b(belie)n(v)o(e)d(that)i
+(rule-based)e(query)g(optimizers)h(will)h(be)g(stan-)2044
+5063 y(dard)h(tools)i(of)f(future)f(database)h(systems.)36
+b(The)23 b(pragmatic)e(dif)n(\256-)2044 5163 y(culties)h(of)f(using)g
+(e)o(xisting)g(rule-based)f(optimizers)g(led)i(us)g(to)f(de-)2044
+5263 y(v)o(elop)f(Prairie,)h(an)g(e)o(xtensible)f(and)h(structured)e
+(algebraic)h(frame-)p eop
+%%Page: 10 10
+10 9 bop -112 21 a FG(w)o(ork)36 b(for)g(specifying)f(rules.)78
+b(Prairie)37 b(is)h(similar)f(to)g(e)o(xisting)-112 120
+y(optimizers)21 b(in)i(that)f(it)h(supports)f(both)f(transformation)f
+(rules)i(and)-112 220 y(implementation)g(rules.)42 b(Ho)n(we)n(v)o(er)m
+(,)23 b(Prairie)i(mak)o(es)f(se)n(v)o(eral)g(im-)-112
+319 y(pro)o(v)o(ements:)-50 503 y(1.)41 b(it)14 b(of)n(fers)e(a)i
+(conceptually)e(more)g(streamlined)h(model)f(for)h(rule)54
+603 y(speci\256cation;)-50 793 y(2.)41 b(rules)18 b(are)g
+(encapsulated,)e(there)i(are)g(no)g(\252hidden\272)e(operators)54
+893 y(or)j(\252hidden\272)g(algorithms;)-50 1083 y(3.)41
+b(implementation)19 b(hints)i(\(e.g.,)f(enforcers\))g(are)h(deduced)e
+(au-)54 1182 y(tomatically;)-50 1372 y(4.)41 b(and)19
+b(it)i(has)g(ef)n(\256cient)e(implementations.)-29 1556
+y(W)-7 b(e)26 b(ha)n(v)o(e)f(e)o(xplained)f(ho)n(w)h(the)h(\256rst)g
+(three)f(points)g(are)h(impor)n(-)-112 1656 y(tant)19
+b(for)g(simplifying)f(rule)h(speci\256cations)g(and)g(making)g(rule)g
+(sets)-112 1755 y(less)27 b(brittle)g(for)f(e)o(xtensibility)-5
+b(.)46 b(A)27 b(consequence)e(is)i(that)g(Prairie)-112
+1855 y(rules)20 b(are)h(simpler)g(and)f(more)g(rob)n(ust)h(than)f
+(rules)h(of)f(e)o(xisting)h(op-)-112 1955 y(timizers)j(\(e.g.,)h(V)-11
+b(olcano\).)41 b(W)-7 b(e)25 b(addressed)f(the)g(fourth)f(point)h(by)
+-112 2054 y(b)n(uilding)h(a)i(P2V)g(pre-processor)d(which)i(uses)h
+(sophisticated)f(al-)-112 2154 y(gorithms)e(to)j(compose)e(and)g
+(compact)g(a)i(Prairie)f(rule)g(set)h(into)e(a)-112 2253
+y(V)-11 b(olcano)22 b(rule)i(set.)41 b(T)-7 b(o)24 b(demonstrate)e(the)
+i(scalability)g(of)f(our)g(ap-)-112 2353 y(proach,)18
+b(we)j(re)n(wrote)e(the)i(TI)f(Open)g(OODB)h(rule)f(set)h(as)g(a)g
+(Prairie)-112 2453 y(rule)e(set,)h(generated)d(its)k(V)-11
+b(olcano)18 b(counterpart,)f(and)i(sho)n(wed)g(that)-112
+2552 y(the)g(performance)e(of)j(the)f(synthesized)g(V)-11
+b(olcano)19 b(rule)g(set)i(closely)-112 2652 y(matches)e(the)i
+(hand-crafted)c(V)-11 b(olcano)19 b(rule)h(set.)-29 2758
+y(Our)26 b(future)f(w)o(ork)h(will)h(concentrate)e(on)h(de)n(v)o
+(eloping)e(higher)n(-)-112 2857 y(le)n(v)o(el)13 b(abstractions)g
+(using)g(Prairie,)c(including)k(automatically)g(gen-)-112
+2957 y(erating)i(Prairie)i(rule)g(sets,)h(and)f(combining)d(multiple)i
+(Prairie)h(rule)-112 3056 y(sets)k(to)f(automatically)f(generate)g(ef)n
+(\256cient)h(optimizers.)-112 3369 y FB(Ackno)o(wledgments)-112
+3566 y FG(W)-7 b(e)31 b(wish)f(to)g(thank)f(T)-6 b(e)o(xas)29
+b(Instruments,)i(Inc.)e(for)g(making)g(the)-112 3666
+y(Open)h(OODB)h(source)g(code)f(a)n(v)n(ailable)g(to)h(us.)62
+b(Comments)30 b(by)-112 3766 y(Jos)-1 3765 y(\302)-6
+3766 y(e)20 b(Blak)o(ele)o(y)-5 b(,)19 b(Anne)g(Ngu,)g(V)-5
+b(i)n(v)o(ek)19 b(Singhal,)g(Thomas)f(W)-7 b(oo)20 b(and)-112
+3865 y(the)h(anon)o(ymous)d(referees)i(greatly)h(impro)o(v)o(ed)d(the)j
+(quality)g(of)g(the)-112 3965 y(paper)-5 b(.)-112 4278
+y FB(Refer)n(ences)-71 4475 y FG([1])40 b(D.)15 b(S.)h(Batory)-5
+b(.)19 b(Building)14 b(blocks)g(of)h(database)f(management)67
+4574 y(systems.)28 b(T)-6 b(echnical)18 b(Report)g(TR\26187\26123,)f
+(The)h(Uni)n(v)o(ersity)67 4674 y(of)i(T)-6 b(e)o(xas)20
+b(at)h(Austin,)f(February)e(1988.)-71 4864 y([2])40 b(Jos)178
+4863 y(\302)173 4864 y(e)e(A.)f(Blak)o(ele)o(y)-5 b(,)40
+b(W)m(illiam)d(J.)h(McK)n(enna,)i(and)c(Goetz)67 4964
+y(Graefe.)h(Experiences)21 b(b)n(uilding)h(the)h(Open)f(OODB)i(query)67
+5063 y(optimizer)-5 b(.)28 b(In)19 b FF(Pr)l(oceedings)f(1993)h(A)n(CM)
+h(SIGMOD)f(Inter)n(-)67 5163 y(national)27 b(Confer)m(ence)h(on)g(Mana)
+o(g)o(ement)f(of)i(Data)p FG(,)h(pages)67 5263 y(287\261296,)17
+b(W)-7 b(ashington,)20 b(May)f(1993.)2085 21 y([3])41
+b(Dean)33 b(Daniels,)k(P)o(atricia)c(Selinger)m(,)j(Laura)c(Haas,)37
+b(Bruce)2224 120 y(Lindsay)-5 b(,)24 b(C.)i(Mohan,)f(Adrian)g(W)-7
+b(alk)o(er)m(,)26 b(and)f(P)o(aul)g(W)m(ilms.)2224 220
+y(An)13 b(introduction)e(to)j(distrib)n(uted)f(query)f(compilation)f
+(in)j(R)3953 190 y Ff(\003)3992 220 y FG(.)2224 319 y(In)22
+b FF(Pr)l(oceedings)g(2nd)g(International)e(Confer)m(ence)i(on)h(Dis-)
+2224 419 y(trib)n(uted)14 b(Databases)p FG(,)e(pages)i(291\261309,)c
+(Berlin,)k(September)2224 519 y(1982.)2085 685 y([4])41
+b(Dinesh)31 b(Das)g(and)g(Don)g(Batory)-5 b(.)57 b(Prairie:)52
+b(An)31 b(algebraic)2224 784 y(frame)n(w)o(ork)38 b(for)i(rule)g
+(speci\256cation)g(in)h(query)e(optimiz-)2224 884 y(ers.)72
+b(In)36 b FF(Pr)l(oceedings)f(of)i(the)f(W)-8 b(orkshop)36
+b(on)g(Database)2224 984 y(Query)14 b(Optimizer)h(Gener)o(ator)o(s)f
+(and)g(Rule-Based)f(Optimiz-)2224 1083 y(er)o(s)p FG(,)21
+b(pages)f(139\261154,)d(Dallas,)j(September)f(1993.)2085
+1249 y([5])41 b(Dinesh)31 b(Das)i(and)f(Don)g(Batory)-5
+b(.)60 b(Prairie:)53 b(A)33 b(rule)e(spec-)2224 1349
+y(i\256cation)e(frame)n(w)o(ork)f(for)h(query)f(optimizers.)54
+b(T)-6 b(echnical)2224 1449 y(Report)22 b(TR)i(94\26116,)e(The)g(Uni)n
+(v)o(ersity)g(of)h(T)-6 b(e)o(xas)23 b(at)g(Austin,)2224
+1548 y(May)d(1994.)2085 1714 y([6])41 b(Johann)15 b(Christoph)h(Fre)o
+(ytag.)23 b(A)18 b(rule-based)d(vie)n(w)i(of)f(query)2224
+1814 y(optimization.)22 b(In)17 b FF(Pr)l(oceedings)f(1987)g(A)n(CM)i
+(SIGMOD)f(In-)2224 1913 y(ternational)12 b(Confer)m(ence)g(on)h(Mana)o
+(g)o(ement)f(of)h(Data)p FG(,)h(pages)2224 2013 y(173\261180,)j(San)j
+(Francisco,)f(May)h(1987.)2085 2179 y([7])41 b(Goetz)c(Graefe.)74
+b(V)-11 b(olcano,)41 b(an)c(e)o(xtensible)g(and)g(parallel)2224
+2279 y(query)25 b(e)n(v)n(aluation)h(system.)48 b(T)-6
+b(echnical)26 b(Report)h(CU\261CS\261)2224 2378 y(481\26190,)15
+b(Uni)n(v)o(ersity)g(of)i(Colorado)e(at)j(Boulder)m(,)e(July)h(1990.)
+2085 2544 y([8])41 b(Goetz)25 b(Graefe.)44 b(Query)26
+b(e)n(v)n(aluation)e(techniques)h(for)g(lar)o(ge)2224
+2644 y(databases.)58 b FF(A)n(CM)32 b(Computing)e(Surve)n(ys)p
+FG(,)k(25\(2\):73\261170,)2224 2744 y(June)20 b(1993.)2085
+2910 y([9])41 b(Goetz)32 b(Graefe)g(and)g(Da)n(vid)h(J.)g(DeW)m(itt.)63
+b(The)33 b(EXODUS)2224 3009 y(optimizer)23 b(generator)-5
+b(.)38 b(In)24 b FF(Pr)l(oceedings)f(1987)g(A)n(CM)i(SIG-)2224
+3109 y(MOD)40 b(International)e(Confer)m(ence)h(on)h(Mana)o(g)o(ement)e
+(of)2224 3209 y(Data)p FG(,)19 b(pages)h(387\261394,)d(San)j
+(Francisco,)g(May)g(1987.)2044 3375 y([10])40 b(L.)23
+b(M.)g(Haas,)h(J.)g(C.)g(Fre)o(ytag,)f(G.)g(M.)h(Lohman,)e(and)g(H.)i
+(Pi-)2224 3474 y(rahesh.)31 b(Extensible)20 b(query)g(processing)g(in)i
+(Starb)n(urst.)32 b(Re-)2224 3574 y(search)20 b(Report)g(RJ)i(6610,)e
+(IBM)h(Almaden)e(Research)i(Cen-)2224 3674 y(ter)m(,)e(December)g
+(1988.)2044 3840 y([11])40 b(P)-9 b(.)33 b(G.)g(Selinger)m(,)h(M.)f(M.)
+g(Astrahan,)i(D.)e(D.)g(Chamberlin,)2224 3939 y(R.)17
+b(A.)g(Lorie,)g(and)f(T)-6 b(.)17 b(G.)g(Price.)24 b(Access)18
+b(path)e(selection)h(in)g(a)2224 4039 y(relational)24
+b(database)g(management)f(system.)41 b(In)25 b FF(Pr)l(oceed-)2224
+4138 y(ings)34 b(1979)f(A)n(CM)i(SIGMOD)g(International)d(Confer)m
+(ence)2224 4238 y(on)26 b(Mana)o(g)o(ement)f(of)i(Data)p
+FG(,)h(pages)f(23\26134,)f(Boston,)i(May)2224 4338 y(1979.)2044
+4504 y([12])40 b(Michael)18 b(Stonebrak)o(er)e(and)i(La)o(wrence)g(A.)h
+(Ro)n(we.)26 b(The)18 b(de-)2224 4603 y(sign)g(of)g(Postgres.)27
+b(In)18 b FF(Pr)l(oceedings)f(1986)g(A)n(CM)i(SIGMOD)2224
+4703 y(International)38 b(Confer)m(ence)h(on)h(Mana)o(g)o(ement)f(of)i
+(Data)p FG(,)2224 4803 y(pages)19 b(340\261355,)e(W)-7
+b(ashington,)20 b(May)g(1986.)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex/contrib/utthesis/ICDE-11/related.tex b/macros/latex/contrib/utthesis/ICDE-11/related.tex
new file mode 100644
index 0000000000..76f83db64e
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/related.tex
@@ -0,0 +1,59 @@
+\section{Related research}
+\label{sec:related}
+
+The System R optimizer \cite{Seli79} was the most important development
+in query optimization research. It was a cost-based centralized
+relational query optimizer and introduced a variety of key concepts
+like ``interesting'' expressions, cardinality estimation using
+selectivity factors and dynamic programming with pruning of search
+space. These concepts continue to be important in query optimizer
+research.
+
+The query optimizer in R$^*$ \cite{Dani82} works in essentially
+the same way as that of System R, except that R$^*$ is a distributed
+database system which introduces some subtle complications in its query
+optimizer.
+
+The Starburst query optimizer \cite{Haas88} uses rules for all
+decisions that need to be taken by the query optimizer. The rules are
+functional in nature and transform a given operator tree into another.
+The rules are commonly those that reflect relational calculus facts.
+In Starburst, the query rewriting phase is different from the
+optimization phase. The rewriting phase transforms the query itself
+into equivalent operator trees based on relational calculus rules. The
+plan optimization phase selects algorithms for each operator in the
+operator tree that is obtained after rewriting. The disadvantage of
+separating the query rewrite and the optimization phases is that
+pruning of the search space is not possible during query rewrite, since
+the rewrite phase is non-cost-based.
+
+Freytag \cite{Frey87a} describes a rule-based query optimizer similar
+to Starburst. The rules are based on LISP-like representations of
+access plans. The rules themselves are recursively defined on smaller
+expressions (operator trees). Although several expressions can contain
+a common sub-expression, Freytag doesn't consider the possibility of
+sharing. Expressions are evaluated each time they are encountered.
+This is obviously inefficient. In addition, as in Starburst, he
+doesn't consider the cost transformations inherent in any query
+optimizer; rules are syntactic transformation rules.
+
+EXODUS \cite{Grae87b} provides an optimizer generator which accepts a
+rule-based specification of the data model as input. The optimizer
+generator compiles these rules, together with pre-defined rules, to
+generate an optimizer for the particular data model and set of
+operators. Unlike Freytag, the optimizer generator for EXODUS allows
+for C code along with definitions of new rules. This allows the
+database implementor the freedom to associate any action with a
+particular rule. Operator trees in EXODUS are constructed bottom-up
+from previously constructed trees.
+
+The Volcano optimizer generator project \cite{Grae90b} evolved from the
+EXODUS project. It is different from all the above optimizers in one
+significant way: it is a top-down optimizer compared with the bottom-up
+strategy of the others. Operator trees are optimized starting from the
+root while sub-trees are not yet optimized. This leads to a
+constraint-driven generation of the search space. While this method
+results in a tight control of the search space, it is unconventional
+and requires careful attention on the part of the optimizer implementor
+to ensure that legal operator trees are not accidently left out of
+the search space. We have used Volcano as our back-end search engine.
diff --git a/macros/latex/contrib/utthesis/ICDE-11/reprint.ps b/macros/latex/contrib/utthesis/ICDE-11/reprint.ps
new file mode 100644
index 0000000000..9ff44af284
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/reprint.ps
@@ -0,0 +1,6693 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.55 Copyright 1986, 1994 Radical Eye Software
+%%Title: paper.dvi
+%%CreationDate: Mon Mar 20 11:33:02 1995
+%%Pages: 10
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: Times-Roman Times-Italic Times-Bold Courier
+%%EndComments
+%DVIPSCommandLine: dvips -D 600 paper -o
+%DVIPSParameters: dpi=600, comments removed
+%DVIPSSource: TeX output 1995.03.20:1132
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: /u/ddas/tex/pstricks/ps/pstricks.pro
+% PostScript prologue for pstricks.tex.
+% Created 1993/3/12. Source file was pstricks.doc
+% Version 0.93a, 93/03/12.
+% For use with Rokicki's dvips.
+/tx@Dict 200 dict def tx@Dict begin
+/ADict 25 dict def
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/Atan { /atan load stopped { pop pop 0 } if } def
+/Div { dup 0 eq { pop } { div } ifelse } def
+/NET { neg exch neg exch T } def
+/Pyth { dup mul exch dup mul add sqrt } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def }
+def
+/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
+} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
+pathforall z } def
+/STP { .996264 dup scale } def
+/STV { SDict begin normalscale end STP } def
+/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+/y ED x mul /x ED x 0 eq y 0 eq and { /x 1 def /y 1 def } if [ y x ] 1 a
+sub y mul setdash stroke } def
+/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt
+{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add
+def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if
+] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1
+setlinecap stroke } def
+/LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED
+/x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul
+def newpath 2 setlinecap n { currentstrokeadjust == x1 y1 moveto x2 y1 L
+stroke /y1 y1 a add def } repeat grestore } def
+/LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED
+/x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul
+def newpath 2 setlinecap systemdict /currentstrokeadjust known {
+currentstrokeadjust } { false } ifelse { /t { } def } { /t { transform
+0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform }
+bind def } ifelse n { x1 y1 t moveto x2 y1 t L stroke /y1 y1 a add def }
+repeat grestore } def
+/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg
+exch 3 index sub exch Atan rotate newpath } def
+/EndArrow { @mtrx setmatrix CP grestore end } def
+/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1
+scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill
+grestore } def
+/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0
+CLW moveto } def
+/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2
+div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0
+CLW moveto } def
+/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW
+2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0
+curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto }
+def
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+/closepath load } pathforall ] cvx newpath 3 1 roll T exec } def
+/SD { 0 360 arc fill } def
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+cvi def } def
+/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if
+f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
+/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub
+def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def
+/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
+ifelse { pop } repeat a } def
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+Lineto pop pop closepath } ifelse } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
+def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
+mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
+abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
+/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
+m mul neg def } def
+/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
+ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
+def
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def
+n { NC } repeat EOC } ifelse } def
+/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
+/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
+pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
+/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
+CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
+repeat closepath pop pop } ifelse } def
+/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS
+CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
+sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
+x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
+y0 x0 2 mul x1 sub y1 ] def } def
+/Grid { /a 4 string def /b ED /d ED /n ED cvi dup 1 lt { pop 1 } if /c ED
+c div dup 0 eq { pop 1 } if /cy ED c div dup 0 eq { pop 1 } if /cx ED cy
+div cvi /y ED cx div cvi /x ED cy div cvi /y2 ED cx div cvi /x2 ED cy
+div cvi /y1 ED cx div cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse
+def /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2
+div add def /Helvetica findfont b scalefont setfont /b b .95 mul CLW 2
+div add def } if gsave n 0 gt { 1 setlinecap [ 0 cy n div ] 0 setdash }
+{ 2 setlinecap } ifelse /c x1 def /i 500 w mul x1 add def /e y cy mul
+def /f y1 cy mul def /g y2 cy mul def x1 cx mul 0 T { newpath 0 e moveto
+b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1} {z1 z2
+add neg} ifelse h 0 gt {b neg} {z1} ifelse rmoveto show grestore } if 0
+f moveto 0 g L stroke cx w mul 0 T c x2 eq c i eq or {exit} if /c c w
+add def } loop grestore gsave n 0 gt { 1 setlinecap [ 0 cx n div ] 0
+setdash } { 2 setlinecap } ifelse /c y1 def /i 500 h mul y1 add def /e x
+cx mul def /f x1 cx mul def /g x2 cx mul def 0 y1 cy mul T { newpath e 0
+moveto b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1 z2
+add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto show grestore }
+if f 0 moveto g 0 L stroke 0 cy h mul T c y2 eq c i eq or {exit} if /c c
+h add def } loop grestore } def
+/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0
+1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add
+exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+mul neg d } def
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /lmtrx [ tx@Dict /lmtrx known { lmtrx aload pop } if CM ] def
+CP 4 2 roll T moveto } def
+/PutEnd { CP /lmtrx [ lmtrx aload pop setmatrix ] def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { CP OLUnit T
+moveto /IfVisible true def } if } { IfVisible { CP OLUnit NET moveto
+/IfVisible false def } if } ifelse } def
+/InitOL { /OLUnit [ gsave CM STV 2890.79999 dup moveto setmatrix CP
+grestore ] cvx def /BOL { BeginOL } def /IfVisible true def } def
+end
+%%EndProcSet
+%%BeginProcSet: /u/ddas/tex/pstricks/ps/pst-node.pro
+% PostScript prologue for pst-node.tex.
+% Created 1993/3/12. Source file was pst-node.doc
+% Version 0.93a, 93/03/12.
+% For use with Rokicki's dvips.
+/tx@NodeDict 200 dict def tx@NodeDict begin
+/NewNode { gsave /next ED dict dup 3 -1 roll ED begin tx@Dict begin STV
+CP T exec end /NodeMtrx CM def next end grestore } def
+/InitPnode { /Y ED /X ED /NodePos { Nodesep Cos mul Nodesep Sin mul } def
+} def
+/InitCnode { /r ED /Y ED /X ED /NodePos { Nodesep r add dup Cos mul exch
+Sin mul } def } def
+/GetRnodePos { Cos 0 gt { /dx r Nodesep add def } { /dx l Nodesep sub def
+} ifelse Sin 0 gt { /dy u Nodesep add def } { /dy d Nodesep sub def }
+ifelse dx Sin mul abs dy Cos mul abs gt { dy Cos mul Sin div dy } { dx
+dup Sin mul Cos Div } ifelse } def
+/InitRnode { /r ED r mul neg /l ED /r r l add def /X l neg def { neg /d
+ED /u ED /Y 0 def } { neg /Y ED Y sub /u ED u mul neg /d ED /u u d add
+def /Y Y d sub def } ifelse /NodePos { GetRnodePos } def } def
+/InitRNode { /Y ED /X ED /r ED /X r 2 div X add def /r r X sub def /l X
+neg def Y add neg /d ED Y sub /u ED /NodePos { GetRnodePos } def } def
+/GetOnodePos { /ww w Nodesep add def /hh h Nodesep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+/GetAngle { nodeA GetCenter nodeB GetCenter 3 -1 roll sub 3 1 roll sub
+neg Atan } def
+/GetEdge { begin /Nodesep ED dup 1 0 NodeMtrx dtransform CM idtransform
+exch atan sub dup sin /Sin ED cos /Cos ED NodePos Y add exch X add exch
+NodeMtrx transform CM itransform end 4 2 roll 1 index 0 eq { pop pop } {
+2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse } def
+/GetPos { OffsetA AngleA NodesepA nodeA GetEdge /y1 ED /x1 ED OffsetB
+AngleB NodesepB nodeB GetEdge /y2 ED /x2 ED } def
+/InitNC { /nodeB ED /nodeA ED /NodesepB ED /NodesepA ED /OffsetB ED
+/OffsetA ED tx@NodeDict nodeA known tx@NodeDict nodeB known and dup {
+/nodeA nodeA load def /nodeB nodeB load def } if } def
+/LineMP { 4 copy 1 t sub mul exch t mul add 3 1 roll 1 t sub mul exch t
+mul add exch 6 2 roll sub 3 1 roll sub Atan } def
+/NCCoor { GetAngle /AngleA ED /AngleB AngleA 180 add def GetPos /LPutVar
+[ x2 x1 y2 y1 ] cvx def /LPutPos { LPutVar LineMP } def x1 y1 x2 y2 }
+def
+/NCLine { NCCoor tx@Dict begin ArrowB 4 2 roll ArrowA lineto end } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan } def
+/GetArms { /x1a armA AngleA cos mul x1 add def /y1a armA AngleA sin mul
+y1 add def /x2a armB AngleB cos mul x2 add def /y2a armB AngleB sin mul
+y2 add def } def
+/NCCurve { GetPos x1 x2 sub y1 y2 sub Pyth 2 div dup 3 -1 roll mul /armA
+ED mul /armB ED GetArms x1a y1a x1 y1 tx@Dict begin ArrowA end x2a y2a
+x2 y2 tx@Dict begin ArrowB end curveto /LPutVar [ x1 y1 x1a y1a x2a y2a
+x2 y2 ] cvx def /LPutPos { t LPutVar BezierMidpoint } def } def
+/AnglesMP { LPutVar t 3 gt { /t t 3 sub def } { t 2 gt { /t t 2 sub def
+10 -2 roll } { t 1 gt { /t t 1 sub def 10 -4 roll } { 10 4 roll } ifelse
+} ifelse } ifelse 6 { pop } repeat 3 -1 roll exch LineMP } def
+/NCAngles { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform pop x2a y2a mtrx transform exch pop mtrx itransform /y0 ED /x0
+ED mark armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1a y1a armA 0 ne { x1 y1 }
+if tx@Dict begin false Line end /LPutVar [ x2 y2 x2a y2a x0 y0 x1a y1a
+x1 y1 ] cvx def /LPutPos { AnglesMP } def } def
+/NCAngle { GetPos /x2a armB AngleB cos mul x2 add def /y2a armB AngleB
+sin mul y2 add def /mtrx AngleA matrix rotate def x2a y2a mtrx transform
+pop x1 y1 mtrx transform exch pop mtrx itransform /y0 ED /x0 ED mark
+armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1 y1 tx@Dict begin false Line end
+/LPutVar [ x2 y2 x2 y2 x2a y2a x0 y0 x1 y1 ] cvx def /LPutPos { AnglesMP
+} def } def
+/NCBar { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform pop x2a y2a mtrx transform pop sub dup 0 mtrx itransform 3 -1
+roll 0 gt { /y2a exch y2a add def /x2a exch x2a add def } { /y1a exch
+neg y1a add def /x2a exch neg x2a add def } ifelse mark x2 y2 x2a y2a
+x1a y1a x1 y1 tx@Dict begin false Line end /LPutVar [ x2 y2 x2 y2 x2a
+y2a x1a y1a x1 y1 ] cvx def /LPutPos { LPutVar AnglesMP } def } def
+/NCDiag { GetPos GetArms mark x2 y2 x2a y2a x1a y1a x1 y1 tx@Dict begin
+false Line end /LPutVar [ x2 y2 x2 y2 x2a y2a x1a y1a x1 y1 ] cvx def
+/LPutPos { AnglesMP } def } def
+/NCDiagg { OffsetA AngleA NodesepA nodeA GetEdge /y1 ED /x1 ED /x1a armA
+AngleA cos mul x1 add def /y1a armA AngleA sin mul y1 add def nodeB
+GetCenter y1a sub exch x1a sub Atan 180 add /AngleB ED OffsetB AngleB
+NodesepB nodeB GetEdge /y2 ED /x2 ED mark x2 y2 x1a y1a x1 y1 tx@Dict
+begin false Line end /LPutVar [ x2 y2 x2 y2 x2 y2 x1a y1a x1 y1] cvx def
+/LPutPos { AnglesMP } def } def
+/LoopMP { /t t abs def [ LPutVar ] length 2 div 1 sub dup t lt { /t ED }
+{ pop } ifelse mark LPutVar t cvi { /t t 1 sub def pop pop } repeat
+counttomark 1 add 4 roll cleartomark 3 -1 roll exch LineMP } def
+/NCLoop { GetPos GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx
+transform loopsize add /y1b ED /x1b ED /x2b x2a y2a mtrx transform pop
+def x2b y1b mtrx itransform /y2b ED /x2b ED x1b y1b mtrx itransform /y1b
+ED /x1b ED mark armB 0 ne { x2 y2 } if x2a y2a x2b y2b x1b y1b x1a y1a
+armA 0 ne { x1 y1 } if tx@Dict begin false Line end /LPutVar [ x2 y2 x2a
+y2a x2b y2b x1b y1b x1a y1a x1 y1 ] cvx def /LPutPos { LoopMP } def }
+def
+/NCCircle { nodeA GetCenter 0 0 NodesepA nodeA GetEdge pop 3 1 roll /Y ED
+/X ED X sub 2 div dup 2 exp r r mul sub abs sqrt atan 2 mul /a ED r
+AngleA 90 add PtoC Y add exch X add exch 2 copy /LPutVar [ 4 2 roll r a
+] def /LPutPos { LPutVar aload pop t 360 mul add dup 5 1 roll 90 sub
+PtoC 3 -1 roll add 3 1 roll add exch 3 -1 roll } def r AngleA 90 sub a
+add AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c
+57.2957 r Div def /y ED /x ED } def
+/LPutCoor { tx@NodeDict /LPutPos known { gsave LPutPos tx@Dict begin
+/langle ED CM 3 1 roll STV CP 3 -1 roll sub neg 3 1 roll sub exch moveto
+setmatrix CP end grestore } { 0 0 tx@Dict /langle 0 def end } ifelse }
+def
+end
+%%EndProcSet
+%%BeginProcSet: texps.pro
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont load]cvx def}def
+/ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def
+/ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def
+end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale false def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin @defspecial
+
+ TeXDict begin /box{newpath 2 copy moveto 3 copy pop exch lineto 4
+copy pop pop lineto 4 copy exch pop exch pop lineto closepath } bind
+def /min{ 2 copy gt { exch } if pop } bind def/max{ 2 copy lt { exch
+} if pop } bind def/roundedbox{/radius exch store 3 2 roll 2 copy min
+radius sub /miny exch store max radius add /maxy exch store 2 copy
+min radius sub /minx exch store max radius add /maxx exch store newpath
+minx radius add miny moveto maxx miny maxx maxy radius arcto maxx maxy
+minx maxy radius arcto minx maxy minx miny radius arcto minx miny maxx
+miny radius arcto 16 {pop} repeat closepath }bind def /rectcartouche{box
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def /cartouche{roundedbox
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def end
+
+ TeXDict begin /box{newpath 2 copy moveto 3 copy pop exch lineto 4
+copy pop pop lineto 4 copy exch pop exch pop lineto closepath } bind
+def /min{ 2 copy gt { exch } if pop } bind def/max{ 2 copy lt { exch
+} if pop } bind def/roundedbox{/radius exch store 3 2 roll 2 copy min
+radius sub /miny exch store max radius add /maxy exch store 2 copy
+min radius sub /minx exch store max radius add /maxx exch store newpath
+minx radius add miny moveto maxx miny maxx maxy radius arcto maxx maxy
+minx maxy radius arcto minx maxy minx miny radius arcto minx miny maxx
+miny radius arcto 16 {pop} repeat closepath }bind def /rectcartouche{box
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def /cartouche{roundedbox
+gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def end
+
+@fedspecial end TeXDict begin
+40258431 52099146 1000 600 600
+(/v/ahhnold/v3/ddas/research/papers/ICDE-11/paper.dvi)
+@start /Fa 188[28 67[{}1 41.666668 /Times-Italic rf /Fb
+1 60 df<38FEFEFFFFFF3B0303030706060E0C1C3830706008147A8614>59
+D E /Fc 7 57 df<003FC00000FFF00003E07C0007C03E000F801F000F000F001E000780
+1E0007803E0007C03E0007C07C0003E07C0003E07C0003E07C0003E07C0003E0FC0003F0
+FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0
+FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C0003E07C0003E07C0003E0
+7E0007E03E0007C03E0007C03E0007C01F000F800F000F000F801F0007C03E0003F0FC00
+00FFF000003FC0001C2D7DAB23>48 D<000C00003C00007C0003FC00FFFC00FC7C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
+00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFF
+FE7FFFFE172C7AAB23>I<007F800001FFF0000780FC000E003F001C001F8038000FC070
+000FC0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F000
+0007F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E0000
+007C000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000
+F0003000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FF
+FFFFC0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C00
+1F803F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F800000
+1F8000003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC000000
+3F0000001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C00
+07F0FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E00
+3F000780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E
+0000003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E
+00000C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E
+0003003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E
+00FFFFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E
+0000003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I<0C0001800FC01F80
+0FFFFF000FFFFE000FFFFC000FFFF0000FFFC0000C7E00000C0000000C0000000C000000
+0C0000000C0000000C0000000C0000000C0000000C1FC0000C7FF8000DE07C000F801F00
+0F001F800E000F800C0007C0000007E0000007E0000003E0000003F0000003F0000003F0
+000003F0780003F0FC0003F0FC0003F0FC0003F0FC0003F0F80007E0E00007E0600007C0
+70000FC038000F801C001F000E003E000780F80001FFE000007F80001C2D7DAB23>I<00
+1FC00000FFF00003E07C0007801E000F000F001E0007801E0007803C0003C03C0003C03C
+0003C03C0003C03E0003C03E0007C03F0007801FC00F801FE00F001FF81E000FFC3C0007
+FFF80003FFE00000FFE000003FF80000FFFC0003C7FF000783FF801F00FFC01E003FC03C
+001FE07C0007E0780003F0F80003F0F00001F0F00000F0F00000F0F00000F0F00000F0F8
+0000E0780001E07C0001C03C0003C01E0007800F800F0007E03C0001FFF000003FC0001C
+2D7DAB23>56 D E /Fd 135[50 3[50 50 3[50 50 50 50 2[50
+2[50 50 1[50 50 50 97[{}13 83.333336 /Courier rf /Fe
+1 49 df<038007C007C007C00F800F800F800F001F001E001E003E003C003C0038007800
+780070007000E000E0000A157D9612>48 D E /Ff 6 104 df<FFFFFFFFFEFFFFFFFFFE
+FFFFFFFFFE27037A8F34>0 D<003800003800003800003800003800403804F0381EF810
+3E7E10FC0F11E003938000FE0000380000FE000393800F11E07E10FCF8103EF0381E4038
+0400380000380000380000380000380017197B9A22>3 D<000000003000000000000000
+380000000000000038000000000000003C000000000000001E000000000000000E000000
+000000000F00000000000000078000000000000003C000007FFFFFFFFFE00000FFFFFFFF
+FFF00000FFFFFFFFFFFC000000000000003E000000000000000F8000000000000007E000
+000000000001FC000000000000007F800000000000003F80000000000000FC0000000000
+0003F00000000000000F800000000000001F000000000000003C0000FFFFFFFFFFF80000
+FFFFFFFFFFF000007FFFFFFFFFE000000000000003C00000000000000780000000000000
+0F000000000000000E000000000000001E000000000000003C0000000000000038000000
+0000000038000000000000003000000039237C9F42>41 D<00F001F803F803F803F807F0
+07F007F007E007E00FC00FC00FC00F801F801F001F001F003E003E003C003C007C007800
+78007000F000F000E0000D1D7D9F13>48 D<00007E0003FE0007E0000F00001E00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C0000780000780000F00003E000FF8000FC0000
+FF800003E00000F000007800007800003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+001E00000F000007E00003FE00007E173B7BAB22>102 D<FC0000FF800007E00001F000
+007800003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00001E00001E00000F000007C0
+0001FE00007E0001FE0007C0000F00001E00001E00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C0000780001F00007E000FF8000FC0000173B7BAB22>I
+E /Fg 7 56 df<001C00007C0007FC00FFFC00FFFC00F8FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC007FFFF87FFFF87FFFF8151C7B9B1F>49 D<03FE000FFFC03FFFF0
+7E07F8F803FCFC01FCFC00FEFC00FEFC007E7800FE0000FE0000FE0001FC0001F80003F0
+0007E0000F80003E00007C0000F00E01E00E07801C0FFFFC1FFFFC7FFFFCFFFFFCFFFFF8
+FFFFF8171C7C9B1F>I<00FF800003FFE0000FFFF8001F01FC003E00FE003F007E003F00
+7E003F007E003F00FE000C00FC000001FC000003F00000FFC00000FFF0000001FC000000
+FE0000007F0000003F8000003F8030003F80FC003F80FC003F80FC003F80FC007F00F800
+FF007E01FE003FFFF8000FFFF00001FF8000191D7D9B1F>I<0003F0000003F0000007F0
+00000FF000001DF0000039F0000039F0000071F00000E1F00001C1F0000381F0000701F0
+000701F0000E01F0001C01F0003801F0007001F000F001F000FFFFFF80FFFFFF80FFFFFF
+800003F0000003F0000003F0000003F00000FFFF8000FFFF8000FFFF80191C7D9B1F>I<
+3800783FFFF83FFFF03FFFE03FFF803FFE003FF0003C00003C00003C00003CFF003FFFC0
+3F03F03E01F83C00FC38007C00007E00007E00007E78007EFC007EFC007EFC00FCF800FC
+7801F87E03F03FFFE00FFF8003FE00171D7C9B1F>I<001FE00000FFF80003FFFC0007F0
+3E000FC07E001F807E003F007E003E007E007E003C007E000000FC3F8000FCFFF000FDC0
+FC00FF807E00FF003F00FE001F00FE001F80FC001F80FC001F80FC001F807C001F807E00
+1F807E001F803E003F003F003F001F80FE000FFFF80003FFF000007F8000191D7D9B1F>
+I<380000003FFFFF803FFFFF807FFFFF807FFFFF007FFFFE007FFFFC007000F800E001F0
+00E003E0000007C000000F8000001F0000001F0000003E0000007E0000007C0000007C00
+0000FC000000FC000000F8000001F8000001F8000001F8000001F8000001F8000001F800
+0001F8000000F00000191D7C9B1F>I E /Fh 7 62 df<007C00000000600001FF000000
+00F00003C380000001F0000700C0000001E0000E0060000003E0001E007000000FC0001C
+003C00001F80003C003F00007F80003C001BE003FF00007C0018FFFF9E00007800181FFC
+3E000078000C00007C0000F8000C0000780000F8000C0000F80000F8000C0001F00000F8
+000C0001E00000F8000C0003E00000F8000C0007C00000F8000C0007800000F8000C000F
+800000F8000C001F00000078000C001E000000780018003E0000007C0018007C0000003C
+001800780000003C003000F80000001C003001F00000001E006001E00000000E006003E0
+0000000700C007C000000003C380078000000001FF000F80000000007C001F0000000000
+00001E0007C0000000003E001FF0000000007C003C38000000007800700C00000000F800
+F00600000001F001E00600000001E001E00300000003E003C00300000007C003C0018000
+00078007C0018000000F800780018000001F000780018000001E000F8000C000003E000F
+8000C000007C000F8000C0000078000F8000C00000F8000F8000C00001F0000F8000C000
+01E0000F8000C00003E0000F8000C00007C0000F8000C0000780000F8000C0000F800007
+800180001F000007800180001E000007C00180003E000003C00180007C000003C0030000
+78000001E0030000F8000001E0060001F0000000F0060001E0000000700C0003E0000000
+3C380003C00000001FF000018000000007C0003A437BBD45>37 D<0003F80000001FFF00
+00007E0FC00000F803E00003E000F80003C000780007C0007C000F80003E000F80003E00
+1F00001F001F00001F003F00001F803F00001F803F00001F807E00000FC07E00000FC07E
+00000FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00
+000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000
+0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000F
+C07E00000FC07E00000FC07E00000FC07F00001FC03F00001F803F00001F803F00001F80
+1F00001F001F00001F000F80003E000F80003E0007C0007C0003E000F80003E000F80000
+F803E000007E0FC000001FFF00000007FC000023387DB62A>48 D<000180000007800000
+0F8000003F800001FF8000FFFF8000FFDF8000FE1F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000003FC0007FFFFFE07FFFFFE07FFFFFE01B3779B62A
+>I<0007F80000003FFF000000FFFFC00001F00FE000038003F000070001F8000F0001FC
+000FC001FE001FE000FE001FE000FF001FE000FF001FE000FF000FE000FF000FC000FF00
+038000FF00000000FE00000000FE00000001FE00000001FC00000001F800000003F00000
+0003E000000007C00000000F800000007F0000001FFC0000001FFF800000000FE0000000
+03F000000001FC00000000FE00000000FF000000007F000000007F800000007FC0000000
+3FC00000003FC00000003FE00000003FE03E00003FE07F00003FE0FF80003FE0FF80003F
+E0FF80003FE0FF80003FC0FF00007FC07E00007F807C00007F80300000FF00380000FE00
+1C0001FC000F0003F80007F00FF00001FFFFC000007FFF8000000FFC000023387DB62A>
+51 D<0600000C000780003C0007F003F80007FFFFF00007FFFFE00007FFFFC00007FFFF
+800007FFFF000007FFFC0000067FE0000006000000000600000000060000000006000000
+000600000000060000000006000000000600000000060000000006000000000600000000
+0607F80000063FFF000006F80F800007C003C000070001F000060000F800040000F80000
+00007C000000007E000000007E000000003F000000003F000000003F000000003F800000
+003F800000003F803C00003F807E00003F80FF00003F80FF00003F80FF00003F80FF0000
+3F00FE00003F00FC00007F006000007E006000007E00300000FC00380000F800180001F8
+000E0003F000070007E00003E03F800001FFFF0000007FFC0000001FE0000021387CB62A
+>53 D<1C003E007F00FF80FF80FF807F003E001C00000000000000000000000000000000
+0000000000000000000000000000000000000000001C003E007F00FF80FF80FF807F003E
+001C00092479A317>58 D<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFF
+FFFFFC000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFC
+FFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFFFFFFF836167B9F41>61
+D E /Fi 3 106 df<001FF00000FFFF0003E03FC00F801FE01F000FF01F800FF83FC007
+F83FE007F83FE007F83FE007F83FE00FF83FE00FF01FC00FF007001FE000003FE000007F
+800000FF00007FFC00007FF800007FFF0000003FC000000FF0000007F8000007FC0C0007
+FC3F0003FE7F8003FEFFC003FEFFC003FEFFC003FEFFC003FEFFC003FC7F8007FC7F0007
+F83F000FF01FC03FE007FFFFC001FFFF00003FF0001F277DA526>51
+D<FFFFFFFF000000FFFFFFFFF00000FFFFFFFFFC000003FE0007FF000003FE00007FC000
+03FE00003FE00003FE00000FF00003FE000007F80003FE000003F80003FE000003FC0003
+FE000001FE0003FE000001FE0003FE000000FF0003FE000000FF0003FE000000FF0003FE
+000000FF0003FE000000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE00
+0000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE000000FF8003FE0000
+00FF0003FE000000FF0003FE000000FF0003FE000001FE0003FE000001FE0003FE000003
+FC0003FE000003FC0003FE000007F80003FE00000FF00003FE00001FE00003FE00007FC0
+0003FE0003FF0000FFFFFFFFFE0000FFFFFFFFF00000FFFFFFFF00000031287DA739>68
+D<0F801FC03FE03FE03FE03FE03FE01FC00F80000000000000000000000000FFE0FFE0FF
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE0FFFCFFFCFFFC0E297CA816>105 D E /Fj 1 69 df<FFFFFFFFFF800000FF
+FFFFFFFFF80000FFFFFFFFFFFF0000FFFFFFFFFFFFC000007FF80007FFF000007FF80000
+7FF800007FF800001FFE00007FF800000FFF00007FF8000003FF80007FF8000001FFC000
+7FF8000001FFC0007FF8000000FFE0007FF80000007FF0007FF80000007FF0007FF80000
+003FF8007FF80000003FF8007FF80000003FFC007FF80000001FFC007FF80000001FFC00
+7FF80000001FFE007FF80000001FFE007FF80000001FFE007FF80000001FFE007FF80000
+001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF00
+7FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFF007FF80000
+001FFF007FF80000001FFF007FF80000001FFF007FF80000001FFE007FF80000001FFE00
+7FF80000001FFE007FF80000001FFE007FF80000001FFC007FF80000003FFC007FF80000
+003FFC007FF80000003FF8007FF80000007FF8007FF80000007FF0007FF8000000FFE000
+7FF8000000FFE0007FF8000001FFC0007FF8000003FF80007FF8000007FF00007FF80000
+1FFE00007FF800007FFC00007FF80007FFF000FFFFFFFFFFFFC000FFFFFFFFFFFF0000FF
+FFFFFFFFFC0000FFFFFFFFFF80000040397DB849>68 D E /Fk 3
+106 df<00000000003C00000000000000003C00000000000000003E0000000000000000
+1E00000000000000001F00000000000000000F8000000000000000078000000000000000
+07C00000000000000003E00000000000000001F00000000000000000F800000000000000
+00FC00007FFFFFFFFFFFFE0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF8000FFFFFFFFFF
+FFFFC00000000000000003E00000000000000001F80000000000000000FE000000000000
+00003F00000000000000001FE00000000000000007F80000000000000001FF0000000000
+000001FF0000000000000007F8000000000000001FE0000000000000003F000000000000
+0000FE0000000000000001F80000000000000003E000FFFFFFFFFFFFFFC000FFFFFFFFFF
+FFFF8000FFFFFFFFFFFFFF00007FFFFFFFFFFFFE0000000000000000FC00000000000000
+00F80000000000000001F00000000000000003E00000000000000007C000000000000000
+0780000000000000000F80000000000000001F00000000000000001E0000000000000000
+3E00000000000000003C00000000000000003C000000482E7BAB53>41
+D<0000C00001E00003E00003E00003C00007C00007C0000780000F80000F80001F00001F
+00001E00003E00003E00007C00007C0000780000F80000F80001F00001F00001E00003E0
+0003E00003C00007C00007C0000F80000F80000F00001F00001F00003E00003E00003C00
+007C00007C0000780000F80000F80000F80000F800007800007C00007C00003C00003E00
+003E00001F00001F00000F00000F80000F800007C00007C00003C00003E00003E00001E0
+0001F00001F00000F80000F800007800007C00007C00003E00003E00001E00001F00001F
+00000F80000F800007800007C00007C00003C00003E00003E00001E00000C0135278BD20
+>104 D<600000F00000F80000F800007800007C00007C00003C00003E00003E00001F00
+001F00000F00000F80000F800007C00007C00003C00003E00003E00001F00001F00000F0
+0000F80000F800007800007C00007C00003E00003E00001E00001F00001F00000F80000F
+800007800007C00007C00003C00003E00003E00003E00003E00003C00007C00007C00007
+80000F80000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F8
+0000F00001F00001F00003E00003E00003C00007C00007C0000F80000F80000F00001F00
+001F00003E00003E00003C00007C00007C0000780000F80000F80000F000006000001352
+7CBD20>I E /Fl 3 111 df<70F8F8F87005057A8413>58 D<03FFFFC00003FFFFF80000
+3C007E00003C001F00003C000F80003C000F800078000F800078000F800078000F800078
+001F0000F0003E0000F000780000F003E00000FFFE000001E007000001E003C00001E001
+C00001E001E00003C001E00003C001E00003C001E00003C001E000078003E000078003E0
+60078003E060078003E0C0FFF801F0C0FFF800F1800000003E00231D7B9B2B>82
+D<0F03F00033861C0021D81E0061F01E00C3E01E00C3C01E0003C01E0003C01E0007803C
+0007803C0007803C00078078200F0078600F00F0600F00F0C00F00F0C01E0071800C003E
+001B127D9125>110 D E /Fm 139[12 16 14 1[21 21 21 1[12
+2[12 1[21 1[18 21 18 1[18 12[25 23 28 2[30 30 37 25 1[16
+14 2[23 25 1[28 1[30 20[10 2[14 14 40[{}29 41.666668
+/Times-Roman rf /Fn 3 52 df<00600001E0000FE000FFE000F1E00001E00001E00001
+E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001
+E00001E00001E00001E00001E00001E00001E0007FFF807FFF80111C7B9B1C>49
+D<03FC000FFF801C0FC03003E06001F0E000F0E000F8F00078F000786000780000F80000
+F00001F00001E00003C0000700000E00001C0000300000E0000180180300180600180800
+383FFFF07FFFF0FFFFF0FFFFF0151C7D9B1C>I<03FC000FFF001C07C03001E07001F078
+01F07800F03001F00001F00001E00003C0000780001E0003FC000007800003C00001E000
+00F00000F80000F86000F8F000F8F000F8E000F06001F07003E03C07C00FFF0003FC0015
+1D7D9B1C>I E /Fo 81[32 51[26 29 29 1[29 29 16 23 19 1[29
+29 29 45 16 1[16 16 29 29 19 26 29 26 29 26 7[42 2[42
+42 36 32 39 42 32 42 42 52 2[23 19 1[42 32 36 42 39 1[42
+1[26 5[29 29 29 29 29 29 29 29 29 3[19 15 2[19 19 40[{}57
+58.333336 /Times-Roman rf /Fp 134[29 29 2[32 19 23 26
+1[32 29 32 48 16 2[16 32 29 1[26 32 26 1[29 14[42 45
+36 45 5[23 3[39 42 2[42 1[29 63[{}27 58.333336 /Times-Bold
+rf /Fq 138[33 18 26 26 1[33 1[33 48 3[18 1[33 1[29 3[33
+97[{}11 66.666664 /Times-Italic rf /Fr 7 56 df<00E00001E00007E000FFE000
+F9E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00003F000FFFFC0FFFFC012217AA01E>49 D<01FC0007FF801C0FC03003E060
+01F06000F8F800F8FC00FCFC00FCFC007C78007C3000FC0000FC0000F80000F80001F000
+03E00003C0000780000F00001E0000380000700000E00001C00C03800C0600180C001818
+00183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00FF0003FFC00F03E01C00F01C00F8
+3E00FC3E007C3E007C1E00FC0C00FC0000F80000F80001F00003E0000FC001FF0001FF00
+0003E00000F000007800007C00003E00003F30003F78003FFC003FFC003FFC003EF8007E
+60007C3800F81E03F00FFFC001FF0018227DA01E>I<0000E00001E00001E00003E00007
+E00007E0000DE0001DE00039E00031E00061E000E1E000C1E00181E00381E00701E00601
+E00C01E01C01E01801E03001E07001E0E001E0FFFFFFFFFFFF0001E00001E00001E00001
+E00001E00001E00003F0003FFF003FFF18227DA11E>I<1000301E01F01FFFE01FFFC01F
+FF801FFE001BF00018000018000018000018000018000018FE001BFF801F03C01C01E018
+00F01800F800007800007800007C00007C30007C78007CF8007CF8007CF80078F000F860
+00F07001E03801E01E078007FF0001F80016227CA01E>I<000FC0007FF001F03803C018
+07803C0F007C1E007C1C00383C00003C00007C0000780000787FC0F8FFE0F980F0FA0038
+FE003CFC001EFC001EF8001FF8001FF8001FF8001F78001F78001F78001F3C001E3C001E
+1C003C1E00380F00700781E001FFC0007F0018227DA01E>I<3000003C00003FFFFF3FFF
+FF7FFFFE7FFFFC60001C600038600070C000E0C000C00001C0000380000700000600000E
+00001C00001C0000380000380000780000780000780000F00000F00000F00000F00001F0
+0001F00001F00001F00001F00001F00001F00000E00018237CA11E>I
+E /Fs 1 4 df<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFCF0
+00000000003CF000000000003CF000000000003CF000000000003CF000000000003CF000
+000000003CF000000000003CF000000000003CF000000000003CF000000000003CF00000
+0000003CF000000000003CF000000000003CF000000000003CF000000000003CF0000000
+00003CF000000000003CF000000000003CF000000000003CF000000000003CF000000000
+003CF000000000003CF000000000003CF000000000003CF000000000003CF00000000000
+3CF000000000003CF000000000003CF000000000003CF000000000003CF000000000003C
+F000000000003CF000000000003CF000000000003CF000000000003CF000000000003CF0
+00000000003CF000000000003CF000000000003CF000000000003CF000000000003CF000
+000000003CF000000000003CF000000000003CF000000000003CF000000000003CF00000
+0000003CF000000000003CFFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFF
+FFFFF836387BB741>3 D E /Ft 18 112 df<387CFEFEFEFEFEFE7C7C7C7C7C7C7C7C7C
+7C3838383838383838383810000000000038FEFEFEFEFE3807297BA813>33
+D<0006000C00180030006000E001C00380038007000F000E001E001E001C003C003C003C
+0078007800780078007800F800F000F000F000F000F000F000F000F000F000F000F000F8
+00780078007800780078003C003C003C001C001E001E000E000F0007000380038001C000
+E0006000300018000C00060F3B7AAB1A>40 D<C0006000300018000C000E000700038003
+8001C001E000E000F000F00070007800780078003C003C003C003C003C003E001E001E00
+1E001E001E001E001E001E001E001E001E003E003C003C003C003C003C00780078007800
+7000F000F000E001E001C00380038007000E000C00180030006000C0000F3B7DAB1A>I<
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E000000FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E00000000000E00000000000E00000000000E00000000000E00000000000E000000
+00000E0000002B2B7DA333>43 D<00380000780001F8001FF800FEF800E0F80000F80000
+F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
+F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
+F80000F80000F80000F80001FC00FFFFF8FFFFF815267BA521>49
+D<00FF000003FFE0000E03F0001800F80030007C0060003E0078001F00FC001F00FE001F
+80FE001F80FE000F80FE000F807C000F8000001F8000001F0000001F0000003F0000003E
+0000007C00000078000000F0000001E0000003C00000078000000F0000001C0000003800
+000070018000E0018001C0018003800300060003000C0003001FFFFF003FFFFF007FFFFE
+00FFFFFE00FFFFFE0019267DA521>I<00FF000003FFE0000F01F8001C007C0030003E00
+3C003E007E003F007E001F007E001F007E003F003C003F0000003E0000003E0000007C00
+0000F8000001F0000007E00001FF800001FF00000001E0000000F00000007C0000003E00
+00003F0000001F0000001F8000001F8038001F807C001F80FE001F80FE001F80FE001F00
+FC003F0078003E0070007C003800F8001F01F00007FFC00000FF000019277DA521>I<00
+00380000003800000078000000F8000001F8000001F8000003F8000007F8000006F80000
+0CF800001CF8000018F8000030F8000070F8000060F80000C0F80001C0F8000180F80003
+00F8000700F8000E00F8000C00F8001C00F8003800F8003000F8006000F800E000F800FF
+FFFFE0FFFFFFE00000F8000000F8000000F8000000F8000000F8000000F8000000F80000
+01FC00003FFFE0003FFFE01B277EA621>I<18000C001F007C001FFFF8001FFFF0001FFF
+E0001FFF800019FC00001800000018000000180000001800000018000000180000001800
+0000187F000019FFE0001F81F0001E0078001C003C0018003E0000003E0000001F000000
+1F0000001F8000001F8030001F807C001F80FC001F80FC001F80FC001F80FC001F00F000
+1F0060003E0070003E0030007C001C00F8000F03E00003FFC00000FE000019277DA521>
+I<000FE000003FF80000F81C0001E0060003801F0007003F000F003F001E003F001E003F
+003C001E003C0000007C0000007800000078040000783FC000F8FFF000F9807800FB003C
+00FA001E00FC001E00FC000F00FC000F00F8000F80F8000F80F8000F80F8000F8078000F
+8078000F8078000F8078000F803C000F003C000F001C001E001E001E000E003C00070078
+0003C0F00001FFC000007F000019277DA521>I<300000003C0000003FFFFFE03FFFFFE0
+3FFFFFC07FFFFF807FFFFF807000070060000E0060000C00C0001C00C0003800C0007000
+0000E0000000C0000001C000000380000003800000070000000F0000000E0000001E0000
+001E0000001E0000003E0000003C0000003C0000007C0000007C0000007C0000007C0000
+00FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000780000
+1B287DA621>I<387CFEFEFE7C380000000000000000000000387CFEFEFE7C3807197B98
+13>58 D<387CFEFEFE7C380000000000000000000000387CFCFEFE7E3E0606060C0C0C18
+1830702007247B9813>I<7FFFFFFFFFC0FFFFFFFFFFE0FFFFFFFFFFE000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000FFFFFFFFFFE0FFFFFFFFFFE07F
+FFFFFFFFC02B117D9633>61 D<01FF000FFFE01E01F038007860007CF8003EFC003EFC00
+3EFC003E78003E30007C00007C0000F80001F00003C0000780000F00000E00001C000018
+000038000030000030000030000030000030000030000030000020000000000000000000
+0000000000000000700001FC0001FC0001FC0001FC0001FC0000700017297DA81F>63
+D<007E03E001FF8FF00781F8F00F00F0F01E0078001C0038003C003C003C003C003C003C
+003C003C003C003C003C003C001C0038001E0078000F00F0000781E00009FF8000087E00
+0018000000180000001C0000001E0000000FFFF0000FFFFC0007FFFF000FFFFF801C001F
+C0380007C0780003E0F00001E0F00001E0F00001E0F00001E0780003C07C0007C03E000F
+800FC07E0003FFF800007FC0001C277E9921>103 D<0F80FF80FF801F800F800F800F80
+0F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F80
+0F800F800F800F800F800F800F800F800F800F800F800F801FC0FFF8FFF80D287EA713>
+108 D<003F800000FFE00003E0F80007803C000F001E001E000F003C0007803C00078078
+0003C0780003C0780003C0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F8
+0003E0780003C0780003C07C0007C03C0007801E000F001F001F000F803E0003E0F80001
+FFF000003F80001B1C7E9A21>111 D E /Fu 11 121 df<387CFEFEFE7C3807077A8614>
+58 D<387CFEFFFF7F3B0303030606060C1838702008127A8614>I<E000000000F8000000
+00FE000000003F800000000FE000000003F800000000FE000000003F800000000FE00000
+0003F800000000FE000000003F800000000FE000000003F800000000FE000000003F8000
+00000FE000000003F800000000FE000000003E00000000FE00000003F80000000FE00000
+003F80000000FE00000003F80000000FE00000003F80000000FE00000003F80000000FE0
+0000003F80000000FE00000003F80000000FE00000003F80000000FE00000000F8000000
+00E00000000027277AA134>62 D<00000001800000000003800000000007800000000007
+C0000000000FC0000000001FC0000000001FC00000000037C00000000037C00000000067
+C000000000C7C000000000C7E00000000183E00000000383E00000000303E00000000603
+E00000000E03E00000000C03E00000001803F00000001801F00000003001F00000006001
+F00000006001F0000000C001F0000001C001F00000018001F0000003FFFFF8000003FFFF
+F80000060000F800000C0000F800000C0000F80000180000F80000380000F80000300000
+FC00006000007C0000E000007C0000C000007C0001C000007C0003C000007C000FC00000
+FE00FFF8000FFFE0FFF8000FFFE02B2A7DA932>65 D<003FFFFFFFF8003FFFFFFFF80001
+F80003F80001F00000F80001F00000780003F00000300003F00000300003E00000300003
+E00000300007E00000300007E00000300007C00180300007C0018030000FC0038000000F
+C0030000000F80030000000F80070000001F801F0000001FFFFE0000001FFFFE0000001F
+001E0000003F000E0000003F000C0000003E000C0000003E000C0000007E001C01C0007E
+00180180007C00000180007C0000038000FC0000070000FC0000070000F800000E0000F8
+00000E0001F800001C0001F800003C0001F00000780001F00001F80003F0000FF000FFFF
+FFFFF000FFFFFFFFE0002D287CA731>69 D<003FFFFFFFE0003FFFFFFFE00001F80007E0
+0001F00003E00001F00001E00003F00000C00003F00000C00003E00000C00003E00000C0
+0007E00000C00007E00000C00007C00000C00007C00300C0000FC0070000000FC0060000
+000F80060000000F800E0000001F800E0000001F803C0000001FFFFC0000001FFFFC0000
+003F003C0000003F00180000003E00180000003E00180000007E00380000007E00300000
+007C00300000007C0000000000FC0000000000FC0000000000F80000000000F800000000
+01F80000000001F80000000001F00000000001F00000000003F000000000FFFFE0000000
+FFFFE00000002B287CA72A>I<000001FF000000001FFFE00000007E01F8000001F0007E
+000007C0001F00000F80000F80001E000007C0007C000007C000F8000003E001F0000003
+E001F0000001F003E0000001F007C0000001F00FC0000001F00F80000001F81F80000001
+F81F00000001F83F00000001F83F00000001F07E00000003F07E00000003F07E00000003
+F07E00000003F07E00000007E0FC00000007E0FC0000000FC0FC0000000FC0FC0000001F
+80FC0000001F807C0000003F007E0000003E007E0000007E003E000000FC003E000001F8
+001F000003F0001F800007C0000F80000F800007C0003F000003F000FC000000FC03F000
+00003FFFC000000007FC0000002D2A7DA832>79 D<003FFFFFC000003FFFFFF8000001F8
+00FE000001F0001F000001F0000F800003F0000FC00003F00007C00003E00007C00003E0
+0007E00007E00007E00007E0000FC00007C0000FC00007C0000FC0000FC0001F80000FC0
+001F00000F80003E00000F80007C00001F8001F000001F800FE000001FFFFF0000001FFF
+FE0000003F001F0000003F0007C000003E0007C000003E0003E000007E0003E000007E00
+03E000007C0003E000007C0003E00000FC0007E00000FC0007E00000F80007E00000F800
+07E00001F80007E01001F80007E03001F00007E03001F00007E07003F00007E0E0FFFF80
+03F1C0FFFF8001FF80000000007E002C297CA732>82 D<00001FE0080000FFFC180003E0
+1E380007000770000E0003F000180001F000300000F000700000E000E00000E000E00000
+E000E00000E001E00000C001E00000C001E000000001F000000000F800000000FE000000
+007FE00000007FFE0000003FFFE000000FFFF0000001FFF80000001FFC00000001FE0000
+00003E000000001F000000000F000000000F000000000F00180000070018000007003800
+000E003000000E003800000C003800001C0078000038007C000070007E0000E000770003
+C000E3E00F0000C0FFFE0000801FF00000252A7CA829>I<000E00001F00001F00001E00
+000C0000000000000000000000000000000000000000000000000003E00007F0000C7800
+183800303800303800607800607800C07800C0F00000F00001E00001E00001E00003C000
+03C0000780000781800781800F01800F03000F03000F06000F0C000F1C0007F00001E000
+11287DA617>105 D<00F807C001FE1FF0070738380E07B0381C03E0781803C0F83003C0
+F83003C07060078000600780000007800000078000000F0000000F0000000F0000000F00
+00001E0000001E0030001E0030301E0060783E0060F83E00C0F87E00C0F06E038061CF07
+007F83FC001E01F8001D1B7D9926>120 D E /Fv 11 121 df<1C007F00FF80FF80FF80
+FF80FF807F001C000909798817>58 D<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C0
+00C000C000C001C00180018003800300070006000E001C003800700060000A19798817>
+I<00000000006000000000000070000000000000F0000000000001F0000000000001F000
+0000000003F0000000000003F0000000000007F000000000000FF000000000000FF00000
+0000001FF800000000001FF8000000000033F8000000000073F8000000000063F8000000
+0000C3F80000000000C3F8000000000183F8000000000183F8000000000303F800000000
+0603F8000000000603FC000000000C03FC000000000C01FC000000001801FC0000000030
+01FC000000003001FC000000006001FC000000006001FC00000000C001FC00000001C001
+FC000000018001FC000000030001FE000000030001FE000000060000FE0000000E0000FE
+0000000C0000FE000000180000FE0000001FFFFFFE0000003FFFFFFE0000003FFFFFFE00
+0000600000FE000000C00000FE000000C00000FF000001800000FF0000018000007F0000
+030000007F0000060000007F0000060000007F00000C0000007F00000C0000007F000018
+0000007F0000380000007F0000700000007F0000F00000007F8001F80000007F8007F800
+0000FF80FFFF80003FFFFFFFFF80007FFFFFFFFF80007FFFFF383C7DBB3E>65
+D<0003FFFFFFFFFFF00007FFFFFFFFFFF00007FFFFFFFFFFF0000007F800003FF0000007
+F0000007F0000007F0000003E000000FF0000001E000000FF0000000E000000FE0000000
+E000000FE0000000E000001FE0000000E000001FE0000000E000001FC0000000E000001F
+C0000000C000003FC0000000C000003FC0000000C000003F80003000C000003F80003000
+C000007F80007000C000007F800070000000007F000060000000007F0000E000000000FF
+0000E000000000FF0001E000000000FE0003C000000000FE000FC000000001FFFFFFC000
+000001FFFFFFC000000001FFFFFF8000000001FC000F8000000003FC00078000000003FC
+00078000000003F800030000000003F800030000000007F800070000000007F800070003
+000007F000060003000007F00006000700000FF00006000600000FF00000000600000FE0
+0000000E00000FE00000000C00001FE00000001C00001FE00000001800001FC000000038
+00001FC00000003800003FC00000007000003FC0000000F000003F80000001E000003F80
+000001E000007F80000007E000007F8000000FC000007F0000003FC00000FF000003FF80
+00FFFFFFFFFFFF8000FFFFFFFFFFFF8000FFFFFFFFFFFF00003C397DB83D>69
+D<0003FFFFFFFFFFE00007FFFFFFFFFFE00007FFFFFFFFFFE0000007F800003FE0000007
+F000000FE0000007F0000003C000000FF0000003C000000FF0000001C000000FE0000001
+C000000FE0000001C000001FE0000001C000001FE0000001C000001FC0000001C000001F
+C00000018000003FC00000018000003FC00000018000003F800000018000003F80006001
+8000007F8000E0018000007F8000E0000000007F0000C0000000007F0000C000000000FF
+0001C000000000FF0001C000000000FE00038000000000FE00078000000001FE001F8000
+000001FFFFFF8000000001FFFFFF0000000001FFFFFF0000000003FC001F0000000003FC
+000F0000000003F8000E0000000003F8000E0000000007F8000E0000000007F8000E0000
+000007F0000C0000000007F0000C000000000FF0001C000000000FF0001C000000000FE0
+0000000000000FE00000000000001FE00000000000001FE00000000000001FC000000000
+00001FC00000000000003FC00000000000003FC00000000000003F800000000000003F80
+0000000000007F800000000000007F800000000000007F00000000000000FF8000000000
+00FFFFFFC000000000FFFFFFC000000000FFFFFFC0000000003B397DB835>I<0003FFF8
+00001FFFF80007FFFC00003FFFF80007FFFC00003FFFF8000007FC000001FF00000007FE
+0000007C00000006FE000000780000000EFF000000700000000E7F000000700000000C7F
+800000600000000C7F800000600000001C3F800000E00000001C3FC00000C0000000181F
+C00000C0000000181FE00000C0000000381FE00001C0000000380FF0000180000000300F
+F00001800000003007F00001800000007007F80003800000007003F80003000000006003
+FC0003000000006003FC000300000000E001FC000700000000E001FE000600000000C000
+FE000600000000C000FF000600000001C0007F000E00000001C0007F800C000000018000
+7F800C0000000180003F800C0000000380003FC01C0000000380001FC018000000030000
+1FE0180000000300000FE0180000000700000FF0380000000700000FF030000000060000
+07F03000000006000007F8300000000E000003F8700000000E000003FC600000000C0000
+03FC600000000C000001FE600000001C000001FEE00000001C000000FEC0000000180000
+00FFC0000000180000007FC0000000380000007FC0000000380000007F80000000300000
+003F80000000300000003F80000000700000001F80000000700000001F00000000F00000
+000F00000007FC0000000F000000FFFFE000000F000000FFFFE0000006000000FFFFE000
+000600000045397DB843>78 D<00000001FF00000000001FFFF000000000FE01FC000000
+03F0007E00000007C0001F8000001F80000FC000003E000007E00000FC000003F00001F8
+000003F00003F0000001F80007E0000001F8000FC0000000FC001F80000000FC003F0000
+0000FE007F000000007E00FE000000007E00FC000000007F01FC000000007F03F8000000
+007F03F8000000007F07F0000000007F07F0000000007F0FF0000000007F0FE000000000
+7F1FE000000000FF1FE000000000FF3FC000000000FF3FC000000000FF3FC000000000FF
+7F8000000001FE7F8000000001FE7F8000000001FE7F8000000001FEFF8000000003FCFF
+0000000003FCFF0000000003FCFF0000000007F8FF0000000007F8FF000000000FF0FF00
+0000000FF0FF000000000FE0FF000000001FE0FF000000001FC0FF000000003F807F0000
+00007F807F000000007F007F00000000FE007F00000001FC003F80000001F8003F800000
+03F8001F80000007F0001FC000000FE0000FC000001F800007E000003F000007F000007E
+000003F00001F8000001FC0003F00000007E000FC00000003F807F0000000007FFF80000
+000000FF80000000383D7CBA3F>I<0003FFFFFFF800000007FFFFFFFF80000007FFFFFF
+FFE000000007F8001FF800000007F00003FC00000007F00000FE0000000FF000007F0000
+000FF000007F0000000FE000003F8000000FE000003F8000001FE000003FC000001FE000
+003FC000001FC000003FC000001FC000003FC000003FC000003FC000003FC000007F8000
+003F8000007F8000003F8000007F8000007F800000FF0000007F800000FE0000007F0000
+01FC0000007F000003F8000000FF000007F0000000FF00000FE0000000FE00001F800000
+00FE00007F00000001FE0007F800000001FFFFFFE000000001FFFFFF0000000001FC000F
+C000000003FC0003F000000003FC0001F800000003F80000FC00000003F80000FE000000
+07F80000FE00000007F800007E00000007F000007E00000007F000007F0000000FF00000
+FF0000000FF00000FE0000000FE00000FE0000000FE00000FE0000001FE00001FE000000
+1FE00001FE0000001FC00001FE0000001FC00001FE0000003FC00001FE0000003FC00003
+FE0000003F800003FC0060003F800003FC0060007F800003FC00E0007F800003FC00C000
+7F000003FC01C000FF800001FC0180FFFFFF0001FC0380FFFFFF0000FE0700FFFFFF0000
+7E0E0000000000001FFC00000000000007F0003B3B7DB83F>82 D<0000001FE003800000
+00FFFC0300000003FFFE070000000FE01F8F0000003F0007DF0000007E0001FE000000F8
+0000FE000001F00000FE000003E000007E000003E000007C000007C000003C00000F8000
+003C00000F8000003C00001F8000003800001F0000003800001F0000003800001F000000
+3800003F0000003000003F0000003000003F8000003000003F8000000000003FC0000000
+00003FE000000000001FF000000000001FFE00000000001FFFE0000000000FFFFE000000
+0007FFFFC000000003FFFFF000000001FFFFF800000000FFFFFC000000001FFFFE000000
+0003FFFF00000000003FFF000000000003FF800000000000FF8000000000007F80000000
+00003F8000000000001F8000000000001F8000000000001F80000C0000001F80000C0000
+000F80000C0000000F80001C0000001F80001C0000001F00001C0000001F00001C000000
+1F00003C0000003E00003C0000003E00003C0000007C00003E000000F800007E000000F8
+00007F000001F000007F800003E000007FC0000FC00000F9F0001F800000F0FE00FE0000
+00E03FFFF8000000E00FFFE0000000C001FF00000000313D7CBA33>I<0000E00001F800
+03F80003F80003F80003F00001C000000000000000000000000000000000000000000000
+000000000000000000000000000000F80003FE00070F000E0F801C0F80180F80380F8030
+0F80701F80601F80603F80E03F00C03F00C07F00007E00007E0000FE0000FC0001FC0001
+FC0001F80003F80003F00003F00007F01807E01807E0380FE0300FC0300FC0700F80600F
+80E00F80C00F81C00F838007870003FE0000F80015397EB71D>105
+D<0007E001F000001FF807FE0000783E0E0F0000E01F1C0F0001C01F383F8003800FF03F
+8003000FE03F8007000FE03F000E000FC03F000C000FC01C000C001FC000001C001F8000
+0018001F80000018001F80000000003F80000000003F80000000003F00000000003F0000
+0000007F00000000007F00000000007E00000000007E0000000000FE0000000000FE0000
+000000FC000C000000FC000C000001FC001C000001FC0018001C01F80018007E01F80038
+007E03F8007000FE03F8006000FE07F800E000FE0E7C01C000781C7C03800078383E0F00
+003FF00FFC000007C003F0000029267EA42F>120 D E /Fw 139[28
+32 37 1[46 42 46 69 23 2[23 46 42 1[37 46 37 46 42 12[55
+46 2[51 65 8[51 1[60 2[60 18[21 46[{}24 83.333336 /Times-Bold
+rf /Fx 133[44 50 50 1[50 55 33 39 44 55 55 50 55 83 28
+2[28 55 50 33 44 55 44 1[50 12[66 3[61 78 72 4[39 4[72
+1[66 12[50 50 50 50 50 2[25 46[{}35 100.000000 /Times-Bold
+rf /Fy 135[40 2[40 40 40 2[40 2[40 3[40 2[40 40 40 40
+1[40 50[40 46[{}13 66.666664 /Courier rf /Fz 69[29 8[33
+1[37 37 3[29 47[29 33 33 48 33 33 18 26 22 33 33 33 33
+52 18 33 1[18 33 33 22 29 33 29 33 29 8[48 63 48 48 41
+37 44 48 37 48 48 59 41 1[26 22 1[48 37 41 48 44 1[48
+5[18 1[33 33 33 33 33 33 33 33 33 33 1[17 22 17 2[22
+22 40[{}67 66.666664 /Times-Roman rf /FA 2 122 df<0060000070000060000060
+00406020E06070F861F07C63E00F6F0003FC0000600003FC000F6F007C63E0F861F0E060
+7040602000600000600000700000600014157B9620>3 D<00600000F00000F00000F000
+00F00000F00000F0000060000060000060000060000060000060007861E0FFFFF0FFFFF0
+7861E000600000600000600000600000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+006000006000006000006000006000006000006000142F7CA31E>121
+D E /FB 81[66 53[60 86 1[66 40 47 53 1[66 60 66 100 33
+66 1[33 66 60 40 53 66 53 66 60 10[86 1[80 1[86 1[73
+6[47 3[80 1[86 1[86 6[40 3[60 60 60 60 60 60 3[40 45[{}38
+119.999947 /Times-Bold rf /FC 78[50 55[50 50 1[50 50
+28 39 33 1[50 50 50 78 3[28 50 1[33 44 50 44 50 44 11[72
+61 55 14[72 66 66 72 92 7[50 50 4[50 50 2[25 1[25 44[{}34
+100.000000 /Times-Roman rf /FD 4 122 df<00007000000000F800000000F8000000
+00F800000000F800000000F800000000F800000000F800000000F8000000007000007800
+7000F07C007001F0FF007007F87F80700FF03FE0703FE00FF0707F8003F870FE0000FE73
+F800003F77E000000FFF80000003FE00000000F800000003FE0000000FFF8000003F77E0
+0000FE73F80003F870FE000FF0707F803FE0703FE07F80700FF0FF007007F87C007001F0
+78007000F000007000000000F800000000F800000000F800000000F800000000F8000000
+00F800000000F800000000F800000000700000252B7AAD32>3 D<0000000FE0000000FF
+E0000003FC0000000FE00000003FC00000007F80000000FF00000000FE00000001FC0000
+0001FC00000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000007F000000007F00000000FE00000001FE00000
+003FC00000007F80000000FE00000007F8000000FFE0000000FFE000000007F800000000
+FE000000007F800000003FC00000001FE00000000FE000000007F000000007F000000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000001FC00000001FC00000000FE00000000FF000000007F80000000
+3FC00000000FE000000003FC00000000FFE00000000FE0236479CA32>102
+D<FE00000000FFE000000007F800000000FE000000007F800000003FC00000001FE00000
+000FE000000007F000000007F000000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000001FC00000001FC0000
+0000FE00000000FF000000007F800000003FC00000000FE000000003FC00000000FFE000
+0000FFE0000003FC0000000FE00000003FC00000007F80000000FF00000000FE00000001
+FC00000001FC00000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000007F000000007F00000000FE00000001F
+E00000003FC00000007F80000000FE00000007F8000000FFE0000000FE00000000236479
+CA32>I<0001C000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F000000007F000000007F000000003E000000003E000000003E0
+00000003E000000003E000000003E000000003E000000001C000000001C000000001C000
+000001C000000001C000000001C000003E01C03E00FFE1C3FF80FFFFFFFF80FFFFFFFF80
+FFFFFFFF80FFE1C3FF803E01C03E000001C000000001C000000001C000000001C0000000
+03E000000003E000000003E000000003E000000003E000000007F000000007F000000007
+F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
+00000007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
+0007F000000007F000000003E000000003E000000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000003
+E000000003E000000003E000000001C000000001C000000001C000000001C000000001C0
+00000001C000000001C000000001C000000001C000000001C00000215B7BC52C>121
+D E /FE 81[80 51[64 72 1[104 1[80 48 56 64 1[80 72 80
+120 40 80 1[40 2[48 64 1[64 1[72 13[80 104 112 88 112
+8[88 4[104 6[48 58[{}27 144.000000 /Times-Bold rf /FF
+81[42 51[32 37 37 55 37 42 23 32 32 42 42 42 42 60 23
+37 23 23 42 42 23 37 42 37 42 42 9[69 51 60 46 42 51
+60 51 60 1[69 3[28 1[60 51 51 60 55 51 51 6[28 42 42
+42 42 2[42 42 42 2[21 28 21 44[{}56 83.333336 /Times-Italic
+rf /FG 47[83 13[28 7[37 8[42 1[46 46 3[37 47[37 42 42
+60 42 42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28
+37 42 37 42 37 3[28 1[28 2[60 78 60 60 51 46 55 60 46
+60 60 74 51 60 32 28 60 60 46 51 60 55 55 60 1[37 3[23
+23 42 42 42 42 42 42 42 42 42 42 23 21 28 21 47 1[28
+28 28 1[69 37[{}81 83.333336 /Times-Roman rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -112 -352 3537 4 v -112 -227 4 125 v -84 -270
+a FG(In)20 b FF(Pr)m(oceedings)e(1)-6 b(1th)20 b(International)e
+(Confer)m(ence)h(on)h(Data)f(Engineering)p FG(,)f(pages)i(201\261210,)d
+(T)-6 b(aipei,)20 b(March)g(1995)p 3421 -227 V -112 -224
+3537 4 v 685 286 a FE(Prairie:)46 b(A)35 b(Rule)g(Speci\256cation)e
+(Framework)1267 469 y(for)i(Query)f(Optimizers)2600 417
+y FD(\003)-17 b(y)1160 710 y FC(Dinesh)24 b(Das)650 b(Don)25
+b(Batory)1262 826 y(Department)g(of)g(Computer)f(Sciences)1274
+942 y(The)h(University)f(of)g(T)-7 b(exas)25 b(at)g(Austin)1417
+1058 y(Austin,)f(T)-7 b(exas)24 b(78712\2611)l(188)1358
+1175 y FD(f)p FC(ddas,batory)p FD(g)p FC(@cs.utexas.edu)-112
+1500 y FB(Abstract)-112 1692 y FF(Fr)m(om)h(our)h(experience,)g(curr)m
+(ent)g(rule-based)f(query)g(optimizers)-112 1791 y(do)c(not)h(pr)m
+(ovide)g(a)g(very)h(intuitive)f(and)f(well-de\256ned)g(framework)-112
+1891 y(to)30 b(de\256ne)g(rules)h(and)e(actions.)57 b(T)-8
+b(o)32 b(r)m(emedy)e(this)h(situation,)h(we)-112 1991
+y(pr)m(opose)23 b(an)g(extensible)h(and)g(structur)m(ed)g(algebraic)f
+(framework)-112 2090 y(called)f(Prairie)h(for)h(specifying)e(rules.)35
+b(Prairie)24 b(facilitates)f(rule-)-112 2190 y(writing)h(by)f(enabling)
+f(a)i(user)g(to)g(write)h(rules)f(and)f(actions)g(mor)m(e)-116
+2289 y(quickly)-5 b(,)16 b(corr)m(ectly)g(and)g(in)h(an)f
+(easy-to-understand)d(and)i(easy-to-)-112 2389 y(debug)j(manner)-9
+b(.)-29 2492 y(Query)24 b(optimizers)h(consist)g(of)g(thr)m(ee)g(major)
+f(parts:)36 b(a)25 b(sear)m(ch)-116 2592 y(space,)17
+b(a)h(cost)f(model)g(and)f(a)i(sear)m(ch)f(strategy)-5
+b(.)26 b(The)18 b(appr)m(oach)d(we)-113 2691 y(take)k(is)i(only)e(to)h
+(develop)e(the)i(algebra)f(which)g(de\256nes)g(the)h(sear)m(ch)-112
+2791 y(space)29 b(and)g(the)h(cost)g(model)f(and)g(use)h(the)g(V)-9
+b(olcano)28 b(optimizer)n(-)-112 2891 y(generator)c(as)i(our)f(sear)m
+(ch)h(engine.)41 b(Using)26 b(Prairie)g(as)g(a)f(fr)m(ont-)-112
+2990 y(end,)j(we)h(translate)e(Prairie)h(rules)g(to)g(V)-9
+b(olcano)26 b(to)h(validate)g(our)-112 3090 y(claim)20
+b(that)g(Prairie)g(makes)g(it)h(easier)g(to)f(write)i(rules.)-33
+3193 y(W)-8 b(e)18 b(describe)e(our)h(algebra)f(and)g(pr)m(esent)h
+(experimental)f(r)m(esults)-118 3293 y(which)f(show)h(that)f(using)g(a)
+h(high-level)e(framework)i(like)f(Prairie)h(to)-117 3392
+y(design)e(lar)m(ge-scale)h(optimizers)i(does)e(not)h(sacri\256ce)f
+(ef\256ciency)-5 b(.)-112 3691 y FB(1)119 b(Intr)n(oduction)-119
+3883 y FG(Query)13 b(optimization)f([8])i(is)h(a)g(fundamental)d(part)i
+(of)g(database)g(sys-)-112 3982 y(tems.)26 b(It)20 b(is)h(the)f
+(process)g(of)f(generating)f(an)i(ef)o(\256cient)f(access)i(plan)-112
+4082 y(for)i(a)i(database)f(query)-5 b(.)37 b(Informally)-5
+b(,)22 b(an)i(access)h(plan)f(is)h(an)f(exe-)-112 4181
+y(cution)g(strategy)h(for)g(a)h(query;)g(it)g(is)h(the)e(sequence)g(of)
+g(low-level)-112 4281 y(database)e(retrieval)h(operations)f(that,)i
+(when)f(executed,)g(produce)-112 4381 y(the)f(database)g(records)f
+(that)i(satisfy)f(the)h(query)-5 b(.)34 b(There)23 b(are)g(three)-112
+4480 y(basic)h(aspects)h(that)f(de\256ne)g(and)g(in\257uence)f(query)g
+(optimization:)-112 4580 y(the)d(search)f(space,)h(the)h(cost)f(model,)
+f(and)h(the)g(search)g(strategy)-5 b(.)-30 4683 y(The)20
+b FF(sear)m(ch)f(space)h FG(is)g(the)g(set)h(of)e(logically)g
+(equivalent)g(access)-112 4783 y(plans)27 b(that)g(can)h(be)f(used)g
+(to)h(evaluate)f(a)g(query)-5 b(.)47 b(All)28 b(plans)g(in)f(a)p
+-112 4867 788 4 v -29 4921 a FA(\003)7 4944 y Fz(This)18
+b(research)h(was)f(supported)i(in)e(part)h(by)f(grants)h(from)e(The)h
+(University)i(of)-112 5023 y(T)-5 b(exas)23 b(Applied)h(Research)h
+(Laboratories,)h(Schlumber)o(ger)m(,)g(and)d(Digital)h(Equip-)-112
+5102 y(ment)17 b(Corporation.)-26 5160 y FA(y)7 5184
+y Fz(An)d(expanded)j(version)f(of)f(this)g(paper)h(is)e(available)k(as)
+d(T)-5 b(echnical)17 b(Report)f(TR)-112 5263 y(94\26116)h(by)g
+(anonymous)h(ftp)f(from)g Fy(ftp.cs.utexas.edu)p Fz(.)2044
+1500 y FG(query')-5 b(s)20 b(search)g(space)h(return)e(the)i(same)g
+(result;)g(however)m(,)e(some)2042 1600 y(plans)g(are)f(more)g(ef)o
+(\256cient)g(than)h(others.)25 b(The)19 b FF(cost)g(model)f
+FG(assigns)2043 1699 y(a)i(cost)g(to)g(each)f(plan)g(in)h(the)f(search)
+h(space.)26 b(The)19 b(cost)h(of)g(a)g(plan)f(is)2041
+1799 y(an)f(estimate)g(of)g(the)g(resources)f(used)g(when)h(the)g(plan)
+f(is)i(executed;)2040 1899 y(the)e(lower)g(the)g(cost,)h(the)f(better)g
+(the)g(plan.)25 b(The)17 b FF(sear)m(ch)g(strategy)g
+FG(is)2044 1998 y(a)23 b(speci\256cation)f(of)h(which)f(plans)h(in)g
+(the)g(search)f(space)h(are)g(to)g(be)2044 2098 y(examined.)2127
+2197 y(T)m(raditionally)-5 b(,)18 b(query)h(optimizers)h(have)g(been)g
+(built)g(as)i(mono-)2044 2297 y(lithic)i(subsystems)f(of)h(a)g(DBMS.)g
+(This)g(simply)f(re\257ects)h(the)g(fact)2040 2397 y(that)18
+b(traditional)e(database)h(systems)h(are)f(themselves)g(monolithic:)
+2043 2496 y(the)i(algorithms)f(used)g(for)h(storing)f(and)h(retrieving)
+e(data)i(are)h(hard-)2044 2596 y(wired)25 b(and)f(are)i(rather)e(dif)o
+(\256cult)g(to)i(change.)41 b(The)25 b(need)f(to)i(have)2041
+2696 y(extensible)18 b(database)f(systems,)i(and)f(in)g(turn)f
+(extensible)h(optimiz-)2044 2795 y(ers,)27 b(has)f(long)f(been)h
+(recognized)d(in)j(systems)h(like)f(Genesis)g([1],)2039
+2895 y(EXODUS)17 b([9],)g(Starburst)e([10],)h(and)g(Postgres)h([12].)24
+b(Rule-based)2043 2994 y(query)19 b(optimizers)g(are)h(among)e(the)i
+(major)f(conceptual)g(advances)2044 3094 y(that)28 b(have)g(been)g
+(proposed)f(to)i(deal)f(with)h(query)e(optimizer)g(ex-)2044
+3194 y(tensibility)d([6,)13 b(7,)g(9,)g(10].)39 b(The)24
+b(extensibility)f(translates)i(into)f(the)2044 3293 y(ability)e(to)g
+(incorporate)e(new)i(operators,)f(algorithms,)h(cost)g(mod-)2044
+3393 y(els,)27 b(or)e(search)g(strategies)g(without)f(changing)g(the)h
+(optimization)2044 3493 y(algorithm.)2127 3592 y(In)c(this)h(paper)m(,)
+e(we)i(describe)e(an)i(algebraic)e(framework)f(called)2042
+3692 y FF(Prairie)h FG(for)e(specifying)g(rules)h(in)g(a)g(rule-based)f
+(query)f(optimizer)-5 b(.)2044 3791 y(Prairie)27 b(is)h(similar)f(to)g
+(other)f(rule)h(speci\256cation)f(languages)g(like)2044
+3891 y(Starburst)d([10])f(and)h(V)-11 b(olcano)22 b([7],)i(and)f
+(indeed,)g(we)h(have)e(based)2044 3991 y(our)i(work)g(on)h(V)-11
+b(olcano)24 b(to)h(capture)e(most)i(of)g(the)g(advantages)e(of)2040
+4090 y(rule-based)16 b(optimizers.)25 b(However)m(,)16
+b(Prairie)h(attempts)g(to)g(provide)2040 4190 y(some)g(key)g(features)f
+(that,)i(we)g(have)e(found,)g(simplify)h(the)g(ef)o(fort)e(in)2044
+4290 y(writing)k(rules:)2106 4466 y(1.)41 b(A)26 b(framework)e(in)i
+(which)g(users)g(can)g(de\256ne)g(a)g(query)f(opti-)2210
+4565 y(mizer)c(concisely)f(in)h(terms)g(of)g(a)h(well-de\256ned)d(set)j
+(of)f(oper)n(-)2210 4665 y(ators)g(and)g(algorithms.)29
+b FF(All)22 b FG(operators)e(and)h(algorithms)f(are)2210
+4764 y(considered)f(\256rst-class)i(objects,)g(i.e.,)f
+FF(any)g FG(of)h(them)f(can)g(oc-)2210 4864 y(cur)15
+b(in)g(any)g(rule,)h(and)f FF(only)g FG(these)h(operators)d(and)i
+(algorithms)2210 4964 y(can)25 b(appear)f(in)h(rules.)42
+b(This)26 b(scheme)e(eliminates)i(the)f(need)2210 5063
+y(for)17 b(special)h(classes)i(of)d(operators)g(and)h(algorithms,)f
+(such)g(as)2210 5163 y(enforcers)i(in)i(V)-11 b(olcano)19
+b(and)h(glue)g(in)h(Starburst,)f(that)h(signif-)2210
+5263 y(icantly)f(complicate)f(rule)g(speci\256cation.)p
+eop
+%%Page: 2 2
+2 1 bop -50 21 a FG(2.)41 b(A)17 b(framework)d(in)j(which)f(users)h
+(can)f(de\256ne)g(a)h(list)h(of)f(proper)n(-)54 120 y(ties)g(to)f
+(characterize)f(the)h(expressions)f(generated)f(in)i(the)h(op-)54
+220 y(timization)g(process.)26 b(Again,)18 b(the)h(goal)e(here)h(is)i
+(to)e(allow)h(the)54 319 y(user)h(to)h(treat)g FF(all)g
+FG(properties)e(as)j(having)d(equal)h(status.)30 b(This)54
+419 y(is)22 b(dif)o(ferent)d(from)h(V)-11 b(olcano)20
+b(where)g(the)i(user)e(must)i(classify)54 519 y(properties)30
+b(as)i(logical,)h(physical,)h(or)d(operator/algorithm)54
+618 y(ar)o(guments.)-50 790 y(3.)41 b(A)h(framework)d(in)j(which)f
+(users)g(can)h(specify)f(mapping)54 889 y(functions)30
+b(between)h(properties)f(concomitantly)f(with)j(the)54
+989 y(corresponding)23 b(rules.)47 b(This)28 b(contrasts)e(with)i
+(existing)e(ap-)54 1088 y(proaches)32 b(in)i(which)g(mappings)e
+(between)h(properties)g(are)54 1188 y(fragmented)14 b(into)i(multiple)g
+(functions)f(and)h(at)h(logically)e(dif-)54 1288 y(ferent)27
+b(places)h(than)g(the)g(corresponding)d(rules.)51 b(Research)54
+1387 y(into)24 b(rule-based)f(optimizers)h(has)h(revealed)e(that)i
+(property-)54 1487 y(mapping)16 b(functions)h(are)h(a)h(major)e(source)
+h(of)f(user)i(ef)o(fort,)d(so)54 1587 y(this)k(is)h(an)g(important)d
+(goal.)-50 1758 y(4.)41 b(The)16 b(format)h(\(Prairie\))f(in)i(which)e
+(users)i(can)f(cleanly)f(specify)54 1857 y(rules)e(is)i(not)e
+(necessarily)h(the)f(same)h(format)f(needed)g(for)g(gen-)54
+1957 y(erating)25 b(ef)o(\256cient)g(optimizers.)43 b(Thus,)27
+b(there)e(is)i(a)f(need)f(for)54 2057 y(a)c(pre-processor)e(\(written)h
+(by)h(us\))g(that)g(translates)h(between)54 2156 y(these)e(competing)e
+(representations.)-29 2344 y(Prairie)26 b(strives)h(for)e(uniformity)g
+(in)h(dealing)g(with)g(issues)i(that)-114 2444 y(have)18
+b(been)g(a)i(source)e(of)g(most)h(user)g(ef)o(fort)e(and)i(potential)f
+(user)g(er)n(-)-117 2543 y(rors.)26 b(In)16 b(the)h(following)e
+(sections,)i(we)g(present)f(the)h(Prairie)f(frame-)-112
+2643 y(work.)26 b(W)-7 b(e)22 b(explain)d(how)h(our)f(P2V)i
+(pre-processor)d(maps)i(Prairie)-112 2742 y(rule)i(speci\256cations)h
+(into)g(V)-11 b(olcano)23 b(rule)g(speci\256cations)g(that)g(can)-118
+2842 y(be)16 b(processed)f(ef)o(\256ciently)-5 b(.)24
+b(Experimental)14 b(results)i(to)g(support)e(this)-120
+2942 y(claim)g(are)g(given)f(in)h(Section)g(4,)h(where)e(we)i(compare)d
+(implementa-)-117 3041 y(tions)17 b(of)g(the)f(T)-6 b(exas)17
+b(Instruments)e(Open)h(OODB)i(query)d(optimizer)-112
+3141 y(using)24 b(both)h(Prairie)g(and)g(V)-11 b(olcano.)41
+b(W)-7 b(e)26 b(conclude)e(with)h(a)h(sum-)-112 3241
+y(mary)19 b(and)h(related)f(research.)-117 3527 y FB(2)120
+b(Prairie:)37 b(A)26 b(language)f(for)g(rule)h(speci\256-)67
+3677 y(cation)-112 3864 y FG(The)c(basic)h(concepts)f(and)h
+(de\256nitions)f(that)h(underlie)f(the)h(Prairie)-118
+3964 y(model)14 b(are)i(presented)e(in)i(this)g(section.)25
+b(The)15 b(goal)g(is)h(to)g(lay)f(a)h(foun-)-117 4064
+y(dation)g(for)h(reasoning)e(about)h(query)f(optimization)g
+(algebraically;)-112 4163 y(this)21 b(is)i(necessary)d(for)h(our)f
+(subsequent)g(discussion)h(about)f(trans-)-112 4263 y(lating)f(Prairie)
+h(speci\256cations)g(to)h(those)f(of)f(V)-11 b(olcano.)-112
+4507 y Fx(2.1)99 b(Notation)24 b(and)i(assumptions)-114
+4665 y Fw(Stor)o(ed)19 b(Files)h(and)f(Str)o(eams.)82
+b FG(A)20 b(\256le)f(is)i FF(stor)m(ed)g FG(if)e(its)h(tuples)f(re-)
+-112 4764 y(side)h(on)g(disk.)27 b(In)20 b(the)h(case)g(of)f
+(relational)f(databases,)h(stored)g(\256les)-116 4864
+y(are)c(sometimes)h(called)g FF(base)f(r)m(elations)p
+FG(;)i(we)f(will)h(denote)e(them)g(by)-118 4964 y Fv(R)i
+FG(or)d Fv(R)111 4976 y Fu(i)139 4964 y FG(.)26 b(In)16
+b(object-oriented)d(schemas,)k(stored)e(\256les)i(are)f
+FF(classes)p FG(;)-112 5063 y(we)21 b(will)i(denote)d(them)h(by)g
+FF(C)i FG(or)e FF(C)918 5075 y Fu(i)946 5063 y FG(.)31
+b(Henceforth,)20 b(whenever)f(we)-115 5163 y(refer)f(to)g(a)h(stored)f
+(\256le,)h(we)g(mean)e(a)i(relation)f(or)g(a)g(class;)i(when)e(the)-118
+5263 y(distinction)c(is)i(unimportant,)d(we)j(will)g(use)f
+Fv(F)28 b FG(or)15 b Fv(F)1365 5275 y Fu(i)1393 5263
+y FG(.)26 b(A)16 b FF(str)m(eam)f FG(is)h(a)2042 21 y(sequence)i(of)h
+(tuples)g(and)f(is)i(the)f(result)g(of)g(a)g(computation)e(on)h(one)
+2037 120 y(or)d(more)f(streams)h(or)f(stored)h(\256les;)i(tuples)e(of)g
+(streams)g(are)f(returned)2044 220 y(one)20 b(at)i(a)f(time,)g
+(typically)f(on)g(demand.)28 b(Streams)21 b(can)g(be)f
+FF(named)p FG(,)2044 319 y(denoted)e(by)i Fv(S)2482 331
+y Fu(i)2510 319 y FG(,)g(or)g FF(unnamed)p FG(.)2044
+536 y Fw(Database)f(Operations.)82 b FG(An)20 b FF(operation)f
+FG(is)i(a)g(computation)d(on)2044 635 y(one)j(or)h(more)f(streams)i(or)
+f(stored)f(\256les.)34 b(There)21 b(are)h(two)g(types)g(of)2043
+735 y(database)c(operations)g(in)h(Prairie:)27 b(abstract)19
+b(\(or)g(implementation-)2043 835 y(unspeci\256ed\))g(operators)f(and)h
+(concrete)g(algorithms.)26 b(Each)19 b(is)i(de-)2044
+934 y(tailed)f(below)-5 b(.)2210 1103 y Fw(Operators.)39
+b FG(Abstract)28 b(\(or)f(conceptual\))e FF(operators)i
+FG(spec-)2392 1203 y(ify)c(computations)e(on)i(streams)g(or)g(stored)g
+(\256les;)j(they)2392 1302 y(are)38 b(denoted)d(by)i(all)h(capital)f
+(letters)h(\(e.g.,)i(JOIN\).)2392 1402 y(Operators)25
+b(have)h(two)g(types)g(of)f(parameters:)38 b(essen-)2392
+1502 y(tial)k(and)f(additional.)88 b FF(Essential)41
+b(parameters)g FG(are)2392 1601 y(the)c(stream)g(or)f(\256le)h(inputs)f
+(to)h(an)g(operator;)43 b(these)2392 1701 y(are)d(the)f(primary)f
+(inputs)h(to)g(be)h(processed)e(by)h(an)2392 1800 y(operator)-5
+b(.)31 b FF(Additional)20 b(parameters)i FG(are)g(\252\256ne-grain\272)
+2392 1900 y(quali\256cations)k(of)g(an)g(operator;)h(their)f(purpose)f
+(is)i(to)2392 2000 y(describe)19 b(an)g(operator)f(in)i(more)e(detail)i
+(than)f(essential)2392 2099 y(parameters.)2210 2223 y
+Fw(Algorithms.)40 b FF(Algorithms)75 b FG(are)h(concrete)e(implemen-)
+2392 2323 y(tations)46 b(of)f(conceptual)e(operators;)56
+b(they)45 b(will)h(be)2392 2422 y(represented)40 b(in)h(lower)g(case)g
+(with)h(the)f(\256rst)h(letter)2392 2522 y(capitalized)50
+b(\(e.g.,)56 b(Nested)p 3265 2522 25 4 v 29 w(loops\).)115
+b(Algorithms)2392 2621 y(have)34 b(at)g(least)h(the)f(same)g(essential)
+g(and)f(additional)2392 2721 y(parameters)24 b(as)h(the)f(conceptual)e
+(operators)h(that)i(they)2392 2821 y(implement.)2770
+2791 y Ft(1)2897 2821 y FG(Furthermore,)45 b(there)c(can)g(be,)47
+b(and)2392 2920 y(usually)35 b(are,)j(several)c(algorithms)g(for)g(a)h
+(particular)2392 3020 y(operator)-5 b(.)2044 3189 y(T)f(able)26
+b(1)h(lists)h(some)e(operators)f(and)h(algorithms)f(implementing)2044
+3288 y(them)20 b(together)e(with)j(their)f(additional)f(parameters.)
+2044 3505 y Fw(Operator)i(T)-6 b(r)o(ees.)82 b FG(An)22
+b FF(operator)g(tr)m(ee)h FG(is)g(a)g(rooted)e(tree)h(whose)2044
+3604 y(non-leaf,)27 b(or)g FF(interior)p FG(,)i(nodes)e(are)h(database)
+e(operations)g(\(oper)n(-)2044 3704 y(ators)g(or)g(algorithms\))f(and)g
+(whose)h(leaf)h(nodes)e(are)i(stored)e(\256les.)2044
+3804 y(The)e(children)g(of)g(an)h(interior)e(node)h(in)h(an)g(operator)
+e(tree)h(are)h(the)2044 3903 y(essential)i(parameters)e(\(i.e.,)i(the)g
+(stream)f(or)g(\256le)h(parameters\))e(of)2044 4003 y(the)h(node.)42
+b(Additional)24 b(parameters)h(are)g(implicitly)g(attached)g(to)2039
+4102 y(each)16 b(node.)25 b(Algebraically)-5 b(,)15 b(operator)g(trees)
+i(are)f(compositions)f(of)2039 4202 y(database)g(operations;)h(thus,)g
+(we)h(will)f(also)h(call)f(operator)e(trees)i FF(ex-)2044
+4302 y(pr)m(essions)p FG(;)k(both)g(terms)g(will)h(be)f(used)g
+(interchangeably)-5 b(.)2046 4487 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)24
+b FG(1)t(.)150 b(A)23 b(simple)g(expression)f(and)g(its)i(operator)d
+(tree)2044 4587 y(representation)h(are)h(shown)h(in)g(Figure)f(1\(a\).)
+38 b(Relations)24 b Fv(R)3831 4599 y Ft(1)3893 4587 y
+FG(and)2044 4686 y Fv(R)2107 4698 y Ft(2)2171 4686 y
+FG(are)j(\256rst)h(RET)m(rieved,)f(then)f(JOINed,)i(and)e(\256nally)h
+(SOR)-5 b(T)f(ed)2044 4786 y(resulting)13 b(in)h(a)h(stream)f(sorted)g
+(on)g(a)g(speci\256c)h(attribute.)24 b(The)14 b(\256gure)2044
+4886 y(shows)g(only)f(the)h(essential)h(parameters)e(of)h(the)g
+(various)f(operators,)2044 4985 y(not)20 b(the)g(additional)f
+(parameters.)915 b Fs(\003)p 2044 5107 788 4 v 2129 5160
+a Fr(1)2163 5184 y Fz(Algorithms)20 b(may)e(have)h Fq(tuning)g
+(parameters)h Fz(which)f(are)f(not)h(parameters)h(of)2044
+5263 y(the)e(operators)g(they)g(implement.)p eop
+%%Page: 3 3
+3 2 bop -112 71 2323 13 v -112 138 4 67 v -59 118 a Fp(Operator)p
+330 138 V 211 w(Description)p 912 138 V 294 w(Additional)17
+b(Parameters)p 1582 138 V 102 w(Algorithm)p 2207 138
+V -112 150 2323 13 v -112 217 4 67 v -59 232 a Fo(JOIN\()p
+Fu(S)127 240 y Fn(1)159 232 y Fo(,)d Fu(S)229 240 y Fn(2)261
+232 y Fo(\))p 330 217 V 104 w(Join)g(streams)g Fu(S)728
+240 y Fn(1)760 232 y Fo(,)g Fu(S)830 240 y Fn(2)p 912
+217 V 965 197 a Fo(tuple)p 1084 197 18 4 v 22 w(order)p
+1582 217 4 67 v 410 w(Nested)p 1800 197 18 4 v 20 w(loops\()p
+Fu(S)2003 205 y Fn(1)2036 197 y Fo(,)g Fu(S)2106 205
+y Fn(2)2138 197 y Fo(\))p 2207 217 4 67 v 1585 220 626
+4 v -112 283 4 67 v 330 283 V 912 283 V 965 263 a(join)p
+1058 263 18 4 v 22 w(predicate)p 1582 283 4 67 v 345
+w(Mer)o(ge)p 1789 263 18 4 v 20 w(join\()p Fu(S)1956
+271 y Fn(1)1989 263 y Fo(,)g Fu(S)2059 271 y Fn(2)2092
+263 y Fo(\))p 2207 283 4 67 v -112 286 2323 4 v -112
+363 4 77 v -59 407 a(RET\()p Fu(F)9 b Fo(\))p 330 363
+V 384 412 a(Retrieve)14 b(\256le)h Fu(F)p 912 363 V 965
+339 a Fo(tuple)p 1084 339 18 4 v 22 w(order)p 1582 363
+4 77 v 1635 353 a(File)p 1728 353 18 4 v 21 w(scan\()p
+Fu(F)9 b Fo(\))p 2207 363 4 77 v -112 429 4 67 v 330
+429 V 912 429 V 965 410 a(selection)p 1175 410 18 4 v
+21 w(predicate)p 1582 429 4 67 v 1585 397 622 4 v 2207
+429 4 67 v -112 497 4 68 v 330 497 V 912 497 V 965 477
+a(projected)p 1184 477 18 4 v 22 w(attributes)p 1582
+497 4 68 v 1635 469 a(Index)p 1770 469 18 4 v 21 w(scan\()p
+Fu(F)g Fo(\))p 2207 497 4 68 v -112 500 2323 4 v -112
+567 4 67 v -59 582 a(SOR)m(T\()p Fu(S)147 590 y Fn(1)178
+582 y Fo(\))p 330 567 V 384 583 a(Sort)15 b(stream)f
+Fu(S)705 591 y Fn(1)p 912 567 V 965 580 a Fo(tuple)p
+1084 580 18 4 v 22 w(order)p 1582 567 4 67 v 1635 547
+a(Mer)o(ge)p 1789 547 18 4 v 20 w(sort\()p Fu(S)1953
+555 y Fn(1)1986 547 y Fo(\))p 2207 567 4 67 v 1585 570
+626 4 v -112 633 4 67 v 330 633 V 912 633 V 1582 633
+V 1635 613 a(Null\()p Fu(S)1798 621 y Fn(1)1831 613 y
+Fo(\))p 2207 633 V -112 646 2323 13 v -112 793 a FG(T)-6
+b(able)17 b(1:)27 b(Operators)17 b(and)h(algorithms)e(in)j(a)f
+(centralized)f(query)g(optimizer)g(and)-112 893 y(their)i(additional)g
+(parameters)p 2477 33 1525 13 v 2477 99 4 67 v 2530 80
+a Fp(Pr)o(operty)p 3033 99 V 335 w(Description)p 3998
+99 V 2477 112 1525 13 v 2477 178 4 67 v 2530 158 a Fo(join)p
+2623 158 18 4 v 22 w(predicate)p 3033 178 4 67 v 232
+w(join)c(predicate)f(for)h(JOIN)g(operator)p 3998 178
+V 2477 182 1525 4 v 2477 248 4 67 v 2530 228 a(selection)p
+2740 228 18 4 v 21 w(predicate)p 3033 248 4 67 v 116
+w(selection)f(predicate)g(for)i(RET)d(operator)p 3998
+248 V 2477 251 1525 4 v 2477 318 4 67 v 2530 331 a(tuple)p
+2649 331 18 4 v 21 w(order)p 3033 318 4 67 v 3087 298
+a(tuple)h(order)i(of)e(resulting)h(stream,)p 3998 318
+V 2477 384 V 3033 384 V 3087 364 a(DONT)p 3252 364 18
+4 v 20 w(CARE)e(if)i(none)p 3998 384 4 67 v 2477 388
+1525 4 v 2477 454 4 67 v 2530 434 a(num)p 2636 434 18
+4 v 21 w(records)p 3033 454 4 67 v 262 w(number)g(of)g(tuples)f(of)h
+(resulting)g(stream)p 3998 454 V 2477 457 1525 4 v 2477
+524 4 67 v 2530 504 a(tuple)p 2649 504 18 4 v 21 w(size)p
+3033 524 4 67 v 329 w(size)f(of)g(individual)i(tuple)e(in)h(stream)p
+3998 524 V 2477 527 1525 4 v 2477 593 4 67 v 2530 574
+a(projected)p 2749 574 18 4 v 21 w(attributes)p 3033
+593 4 67 v 104 w(projected)f(attributes)h(for)h(RET)d(operator)p
+3998 593 V 2477 597 1525 4 v 2477 663 4 67 v 2530 643
+a(attributes)p 3033 663 V 341 w(list)h(of)h(attributes)p
+3998 663 V 2477 666 1525 4 v 2477 733 4 67 v 2530 713
+a(cost)p 3033 733 V 463 w(estimated)f(cost)g(of)h(algorithm)p
+3998 733 V 2477 745 1525 13 v 2477 893 a FG(T)-6 b(able)16
+b(2:)26 b(Properties)15 b(of)h(nodes)g(in)g(an)h(operator)d(tree)p
+-105 1246 1938 4 v -105 2116 4 870 v 61 1362 a Fm(SOR)n(T)c(\(JOIN)g
+(\(RET)h(\()p Fl(R)449 1374 y Fn(1)481 1362 y Fm(\),)f(RET)h(\()p
+Fl(R)661 1374 y Fn(2)693 1362 y Fm(\)\)\))346 1463 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodesort 16 { .5 3.39499
+0.05246 false .5 12.4799 InitRnode } NewNode end end
+
+346 1463 a Fm(SOR)n(T)353 1557 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoin 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 353 1557 a Fm(JOIN)303
+1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodesort
+/TheNodejoin InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303 1732 a 264 1652 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderetr1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 264 1652 a Fm(RET)453 1652
+y
+ tx@Dict begin tx@NodeDict begin { } /TheNoderetr2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 453 1652 a Fm(RET)303 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoin
+/TheNoderetr1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 303 1732 a 303 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoin
+/TheNoderetr2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+
+303 1732 a 265 1740 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoder1 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 265 1740 a Fl(R)308 1752 y Fn(1)455
+1740 y
+ tx@Dict begin tx@NodeDict begin { } /TheNoder2 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 455 1740 a Fl(R)498 1752 y Fn(2)303 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderetr1
+/TheNoder1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303
+1732 a 303 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderetr2
+/TheNoder2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 303 1732 a 27 1915 a Fz(\(a\))37 b(An)f(expression)i
+(and)f(its)27 1994 y(corresponding)19 b(operator)g(tree)p
+872 2091 4 820 v 1237 1458 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodemergesort 16 { .5 3.34
+1.07994 false .5 22.25977 InitRnode } NewNode end end
+ 1237 1458 a Fm(Mer)o(ge)p
+1346 1458 13 4 v 16 w(sort)1219 1553 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodenestedloops 16 { .5 3.39499
+1.07994 false .5 26.5197 InitRnode } NewNode end end
+ 1219 1553 a Fm(Nested)p
+1336 1553 13 4 v 16 w(loops)1235 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodemergesort
+/TheNodenestedloops InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1158
+1652 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodefilescanr1 16 { .5 3.39499
+0.05246 false .5 18.4647 InitRnode } NewNode end end
+ 1158 1652 a Fm(File)p 1225 1652 13 4 v 15 w(scan)1347
+1652 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodefilescanr2 16 { .5 3.39499
+0.05246 false .5 18.4647 InitRnode } NewNode end end
+ 1347 1652 a Fm(File)p 1414 1652 13 4 v 15 w(scan)1235
+1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodenestedloops
+/TheNodefilescanr1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1235 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodenestedloops
+/TheNodefilescanr2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1235 1732 a 1197 1740
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNoder1 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 1197 1740 a Fl(R)1240 1752 y Fn(1)1386 1740 y
+ tx@Dict begin tx@NodeDict begin { } /TheNoder2 16 { .5 3.41667 1.5
+false .5 9.05264 InitRnode } NewNode end end
+ 1386
+1740 a Fl(R)1429 1752 y Fn(2)1235 1732 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodefilescanr1
+/TheNoder1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1235 1732 a
+1235 1732 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodefilescanr2
+/TheNoder2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1235 1732 a 959 1915 a Fz(\(b\))h(Possible)i(access)g(plan)
+g(for)959 1994 y(operator)d(tree)f(in)f(\(a\))p 1829
+2116 4 870 v -105 2119 1938 4 v 1831 2136 19 877 v -89
+2136 1938 19 v -25 2319 a FG(Figure)j(1:)27 b(Example)19
+b(of)h(an)g(operator)e(tree)i(and)g(access)h(plan)-117
+2521 y Fw(Descriptors.)83 b FG(A)17 b FF(pr)m(operty)f
+FG(of)h(a)g(node)f(is)i(a)f(\(user)n(-de\256ned\))e(vari-)-112
+2620 y(able)31 b(that)h(contains)f(information)e(used)i(by)h(an)f
+(optimizer)-5 b(.)61 b(An)-112 2720 y FF(annotation)25
+b FG(is)k(a)f Fk(h)p FF(pr)m(operty)-5 b(,)20 b(value)o
+Fk(i)29 b FG(pair)e(that)h(is)h(assigned)e(to)h(a)-112
+2819 y(node.)39 b(A)25 b FF(descriptor)g FG(is)h(a)f(list)h(of)e
+(annotations)f(that)i(describes)f(a)-112 2919 y(node)j(of)g(an)h
+(operator)f(tree;)32 b(every)27 b(node)g(has)h(its)h(own)f(descrip-)
+-112 3019 y(tor)-5 b(.)54 b(As)30 b(an)f(example,)h(T)-6
+b(able)29 b(2)h(lists)g(some)f(typical)g(properties)-112
+3118 y(that)21 b(might)f(be)h(used)f(in)h(a)h(descriptor)-5
+b(.)28 b(Note)21 b(that)g(descriptors)e(for)-112 3218
+y(stream)24 b(and)h(stored)f(\256les)i(may)e(have)h(dif)o(ferent)e
+(properties.)39 b(The)-114 3318 y(following)17 b(notations)h(will)h(be)
+g(useful)f(in)h(our)f(subsequent)g(discus-)-119 3417
+y(sions.)26 b(If)14 b Fv(S)220 3429 y Fu(i)263 3417 y
+FG(is)i(a)g(stream,)f(then)g Fj(D)877 3429 y Fi(i)918
+3417 y FG(is)h(its)g(descriptor)-5 b(.)24 b(Annotations)-112
+3517 y(of)c Fv(S)29 3529 y Fu(i)78 3517 y FG(are)h(accessed)g(by)f(a)i
+(structure)e(member)f(relationship,)h(e.g.,)-113 3616
+y Fj(D)-40 3628 y Fi(i)-14 3616 y Fv(:)p FG(num)p 163
+3616 25 4 v 28 w(records)o(.)27 b(Also,)20 b(let)h Fv(E)k
+FG(be)20 b(an)g(expression)f(and)g(let)h Fj(D)h FG(be)-112
+3716 y(its)g(descriptor)-5 b(.)26 b(W)-7 b(e)21 b(will)g(write)f(this)h
+(as)g Fv(E)28 b Fh(:)23 b Fj(D)p FG(.)-110 3904 y(E)t
+Fz(X)t(A)t(M)t(P)t(L)t(E)h FG(2)t(.)147 b(The)19 b(expression,)-112
+4055 y Fo(SOR)m(T)o Ft(\()p Fo(JOIN)o Ft(\()p Fo(RET)o
+Ft(\()p Fu(R)396 4063 y Fn(1)428 4055 y Ft(\):)p Fi(D)530
+4063 y Fg(3)566 4055 y Fu(;)p Fo(RET)o Ft(\()p Fu(R)772
+4063 y Fn(2)804 4055 y Ft(\):)p Fi(D)906 4063 y Fg(4)942
+4055 y Ft(\):)p Fi(D)1044 4063 y Fg(5)1079 4055 y Ft(\):)p
+Fi(D)1181 4063 y Fg(6)-112 4206 y FG(corresponds)k(to)j(the)f(operator)
+f(tree)i(in)g(Figure)f(1\(a\),)h(and)f(shows)-112 4305
+y(the)20 b(descriptors)f(of)h(the)g(various)f(nodes.)704
+b Fs(\003)-30 4466 y FG(A)19 b(notational)f(simpli\256cation)h(can)g
+(be)g(made)g(here.)26 b(Additional)-117 4565 y(parameters)14
+b(of)i(operators)f(can)h(be)g(treated)f(the)h(same)h(way)f(as)h(other)
+-112 4665 y(properties)i(of)h(a)h(node;)f(essential)h(parameters,)e
+(however)m(,)f(are)j FF(ex-)-115 4764 y(pr)m(essions)p
+FG(.)27 b(Thus,)18 b(the)g(term)g(descriptor)f(in)h(the)g(remainder)f
+(of)h(this)-112 4864 y(paper)24 b(will)i(refer)f(to)h(a)g(set)h(of)e
+(properties,)g(including)f(additional)-112 4964 y(parameters,)18
+b(as)j(shown)f(in)g(T)-6 b(able)20 b(2.)-35 5063 y(Currently)-5
+b(,)15 b(descriptor)f(properties)h(are)g(de\256ned)g(entirely)g(by)g
+(the)-112 5163 y(user;)34 b(however)m(,)c(we)g(envision)f(providing)e
+(a)j(hierarchy)e(of)i(pre-)-112 5263 y(de\256ned)19 b(descriptor)f
+(types)i(to)h(aid)f(this)h(process.)2042 1243 y Fw(Access)e(Plans.)83
+b FG(An)18 b FF(access)h(plan)f FG(is)h(an)g(operator)d(tree)j(in)g
+(which)2044 1343 y(all)i(interior)e(nodes)g(are)h(algorithms.)2046
+1630 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)k FG(3)t(.)142 b(An)15
+b(access)h(plan)f(for)f(the)h(operator)f(tree)h(in)g(Fig-)2044
+1729 y(ure)20 b(1\(a\))f(is)i(shown)f(in)g(Figure)f(1\(b\).)826
+b Fs(\003)2044 2047 y Fx(2.2)99 b(Prairie)25 b(optimization)f(paradigm)
+2044 2230 y FG(Prairie)k(admits)f(two)h(rather)g(dif)o(ferent)d(means)j
+(of)g(optimization:)2044 2329 y(top-down)19 b(and)j(bottom-up.)29
+b(A)23 b(top-down)d(query)g(optimizer)h(op-)2041 2429
+y(timizes)d(the)g(parents)g(of)f(a)i(node)d(prior)h(to)h(optimizing)f
+(the)h(node)e(it-)2038 2529 y(self.)25 b(A)16 b(bottom-up)d(optimizer)h
+(optimizes)g(the)i(children)e(of)g(a)i(node)2044 2628
+y(prior)22 b(to)i(optimizing)d(the)j(node.)35 b(The)23
+b(earliest)h(optimizers)e(\(Sys-)2044 2728 y(tem)e(R)h([1)m(1])e(and)h
+(R)2617 2698 y Ff(\003)2676 2728 y FG([3]\))f(employed)f(the)j
+(bottom-up)c(approach.)2126 2842 y(Our)i(research)f(concentrates)g(on)h
+(a)h(top-down)e(optimization)f(of)2044 2942 y(operator)24
+b(trees.)46 b(W)-7 b(e)28 b(have)d(chosen)h(this)h(approach)d(because)i
+(we)2044 3042 y(intend)d(to)h(translate)g(Prairie)g(rules)g(into)f(the)
+h(format)f(required)f(by)2044 3141 y(the)28 b(V)-11 b(olcano)28
+b(query)f(optimizer)g(generator)f([7])i(which)g(is)h(based)2044
+3241 y(on)h(a)h(top-down)d(strategy)-5 b(.)56 b(Given)30
+b(an)g(appropriate)e(search)i(en-)2044 3340 y(gine,)24
+b(Prairie)f(can)g(potentially)g(also)h(be)f(used)h(with)f(a)i
+(bottom-up)2043 3440 y(optimization)18 b(strategy;)i(however)m(,)d(we)k
+(will)f(not)g(discuss)g(this)g(ap-)2044 3540 y(proach)e(in)j(this)f
+(paper)-5 b(.)2125 3654 y(In)18 b(query)g(optimization,)f(there)h(are)g
+(certain)g(annotations)g(\(such)2044 3754 y(as)29 b(additional)f
+(parameters\))f(that)i(are)g(known)e(before)g(any)i(opti-)2037
+3853 y(mization)14 b(is)i(begun.)23 b(These)15 b(annotations)e(can)i
+(be)f(computed)f(at)j(the)2043 3953 y(time)j(that)g(the)g(operator)f
+(tree)h(is)h(initialized,)f(and)g(will)h(not)f(change)2040
+4052 y(with)f(application)d(of)i(rules.)26 b(Our)17 b(following)f
+(discussions)h(assume)2044 4152 y(operator)h(trees)j(are)f
+(initialized.)2127 4266 y(There)41 b(are)h(two)h(types)f(of)g
+(algebraic)f(transformations)f(\(or)2044 4366 y FF(r)m(ewrite)34
+b(rules)p FG(\))e(in)h(Prairie:)52 b(T)-8 b(-rules)32
+b(\(\252transformation)e(rules\272\))2044 4466 y(and)22
+b(I-rules)f(\(\252implementation)f(rules\272\).)33 b(Each)22
+b(rule)g(transforms)2044 4565 y(an)j(expression)g(into)g(another)f
+(based)i(on)f(additional)f(conditions;)2044 4665 y(the)h
+(transformation)d(also)j(results)g(in)g(a)g(mapping)e(of)h(descriptors)
+2037 4764 y(between)14 b(expressions.)24 b(W)-7 b(e)16
+b(de\256ne)e(T)-8 b(-rules)14 b(and)g(I-rules)g(precisely)2042
+4864 y(in)20 b(the)f(following)e(sections)i(and)g(illustrate)g(them)f
+(with)i(examples.)2044 4964 y(Our)33 b(examples)g(are)h(chosen)f(from)f
+(rules)i(that)g(would)f(be)g(used)2044 5063 y(in)e(a)h(centralized)e
+(relational)g(query)g(optimizer;)36 b(the)31 b(operators,)2044
+5163 y(algorithms,)25 b(and)f(properties)g(are)h(subsets)h(of)f(those)g
+(in)h(T)-6 b(ables)25 b(1)2044 5263 y(and)19 b(2.)p eop
+%%Page: 4 4
+4 3 bop -110 24 1947 4 v -110 1929 4 1905 v 31 101 a
+Fu(E)s Ft(\()p Fu(x)147 109 y Fn(1)178 101 y Fu(;)11
+b(:)h(:)f(:)g(;)g(x)372 109 y Fl(n)412 101 y Ft(\))19
+b(:)g Fi(D)552 109 y Fg(1)606 101 y Ft(=)-11 b Ff(\))19
+b Fu(E)783 72 y Fe(0)805 101 y Ft(\()p Fu(x)869 109 y
+Fn(1)901 101 y Fu(;)12 b(:)f(:)g(:)g(;)g(x)1095 109 y
+Fl(n)1135 101 y Ft(\))19 b(:)g Fi(D)1275 109 y Fg(2)1656
+101 y Fo(\(1\))31 167 y Ff(ff)244 234 y Fo(pre-test)c(statements)31
+300 y Ff(gg)31 367 y Fo(test)31 433 y Ff(ff)244 500 y
+Fo(post-test)g(statements)31 566 y Ff(gg)493 709 y Fz(\(a\))j(General)g
+(form)f(of)g(a)g(T)-6 b(-rule)p -61 807 1849 4 v 31 884
+a Fo(JOIN)o Ft(\()p Fo(JOIN)p Ft(\()p Fu(S)375 892 y
+Fn(1)407 884 y Fu(;)11 b(S)479 892 y Fn(2)512 884 y Ft(\))18
+b(:)h Fi(D)651 892 y Fg(4)687 884 y Fu(;)11 b(S)759 892
+y Fn(3)791 884 y Ft(\))19 b(:)g Fi(D)931 892 y Fg(5)1656
+884 y Fo(\(2\))89 983 y Ft(=)-11 b Ff(\))18 b Fo(JOIN)p
+Ft(\()p Fu(S)406 991 y Fn(1)438 983 y Fu(;)11 b Fo(JOIN)p
+Ft(\()p Fu(S)662 991 y Fn(2)694 983 y Fu(;)g(S)766 991
+y Fn(3)799 983 y Ft(\))18 b(:)h Fi(D)938 991 y Fg(6)974
+983 y Ft(\))g(:)g Fi(D)1114 991 y Fg(7)31 1066 y Ff(ff)244
+1133 y Fi(D)301 1141 y Fg(6)337 1133 y Fu(:)p Fo(attributes)g
+Ft(=)g Fo(union)c Ft(\()p Fi(D)892 1141 y Fg(2)928 1133
+y Fu(:)p Fo(attributes)p Fu(;)c Fi(D)1252 1141 y Fg(3)1288
+1133 y Fu(:)p Fo(attributes)p Ft(\))j(;)31 1199 y Ff(gg)31
+1265 y Fo(is)p 73 1265 18 4 v 20 w(associative)g Ft(\()p
+Fi(D)443 1273 y Fg(6)479 1265 y Fu(:)p Fo(join)p 592
+1265 V 21 w(predicate)p Fu(;)d Fi(D)911 1273 y Fg(6)947
+1265 y Fu(:)p Fo(attributes)p Fu(;)g Fi(D)1271 1273 y
+Fg(5)1306 1265 y Fu(:)p Fo(join)p 1419 1265 V 22 w(predicate)p
+Ft(\))31 1332 y Ff(ff)244 1398 y Fi(D)301 1406 y Fg(7)356
+1398 y Ft(=)19 b Fi(D)483 1406 y Fg(5)533 1398 y Ft(;)244
+1465 y Fi(D)301 1473 y Fg(7)337 1465 y Fu(:)p Fo(join)p
+450 1465 V 21 w(predicate)g Ft(=)g Fi(D)827 1473 y Fg(4)863
+1465 y Fu(:)p Fo(join)p 976 1465 V 21 w(predicate)14
+b Ft(;)244 1531 y Fi(D)301 1539 y Fg(6)337 1531 y Fu(:)p
+Fo(tuple)p 476 1531 V 21 w(size)k Ft(=)h Fi(D)730 1539
+y Fg(2)766 1531 y Fu(:)p Fo(tuple)p 905 1531 V 21 w(size)14
+b Ft(+)h Fi(D)1151 1539 y Fg(3)1187 1531 y Fu(:)p Fo(tuple)p
+1326 1531 V 21 w(size)f Ft(;)244 1598 y Fi(D)301 1606
+y Fg(6)337 1598 y Fu(:)p Fo(num)p 463 1598 V 21 w(records)19
+b Ft(=)g Fo(cardinality)c Ft(\()p Fi(D)1087 1606 y Fg(2)1123
+1598 y Fu(;)c Fi(D)1211 1606 y Fg(3)1247 1598 y Ft(\))j(;)31
+1664 y Ff(gg)587 1807 y Fz(\(b\))j(Join)g(associativity)p
+1834 1929 4 1905 v -110 1932 1947 4 v 1835 1949 19 1912
+v -93 1949 1947 19 v 607 2131 a FG(Figure)j(2:)27 b(T)-8
+b(-rule)-112 2372 y Fx(2.3)99 b(T)-7 b(ransformation)25
+b(rules)-112 2549 y FG(T)m(ransformation)k(rules,)35
+b(or)d(T)-8 b(-rules)32 b(for)g(short,)i(de\256ne)e(equiva-)-112
+2649 y(lences)e(among)g(pairs)h(of)f(expressions;)36
+b(they)30 b(de\256ne)g(mappings)-112 2748 y(from)g(one)i(operator)e
+(tree)h(to)h(another)-5 b(.)61 b(Let)32 b Fv(E)37 b FG(and)32
+b Fv(E)1584 2718 y Ff(0)1639 2748 y FG(be)g(ex-)-112
+2848 y(pressions)19 b(that)i(involve)e(only)h(abstract)g(operators.)26
+b(Equation)18 b(\(1\))-112 2948 y(\(shown)k(in)i(Figure)e(2\(a\)\))h
+(shows)g(the)h(general)e(form)h(of)g(a)h(T)-8 b(-rule.)-112
+3047 y(The)19 b(actions)h(of)g(a)h(T)-8 b(-rule)20 b(de\256ne)f(the)i
+(equivalences)d(between)i(the)-114 3147 y(descriptors)f(of)g(nodes)f
+(of)h(the)h(original)e(operator)f(tree)i Fv(E)25 b FG(with)20
+b(the)-112 3247 y(nodes)27 b(of)g(the)h(output)f(tree)g
+Fv(E)796 3216 y Ff(0)820 3247 y FG(;)32 b(these)c(actions)g(consist)g
+(of)f(a)h(se-)-112 3346 y(ries)f(of)f(\(C)i(or)f(C++\))g(assignment)918
+3316 y Ft(2)981 3346 y FG(statements.)47 b(The)27 b(left-hand)-112
+3446 y(sides)21 b(of)f(these)h(statements)g(refer)f(to)h(descriptors)e
+(of)i(expressions)-112 3545 y(on)g(the)h(right-hand)e(side)j(of)f(the)g
+(T)-8 b(-rule;)22 b(the)h(right-hand)c(sides)k(of)-119
+3645 y(the)14 b(statements)h(can)f(refer)g(to)h(any)f(descriptor)f(in)h
+(the)h(T)-8 b(-rule.)24 b(Func-)-112 3745 y(tion)j(\(called)h
+FF(helper)g FG(functions\))e(calls)j(can)f(also)g(appear)f(on)h(the)
+-118 3844 y(right)15 b(side)h(of)f(the)h(assignment)e(statements.)26
+b(Thus,)15 b(descriptors)g(on)-114 3944 y(the)k FF(left-hand)f(side)i
+FG(of)e(a)i(T)-8 b(-rule)19 b(are)g FF(never)g FG(changed)e(in)j(the)f
+(rule')-5 b(s)-114 4044 y(actions.)26 b(A)19 b FF(test)h
+FG(is)f(needed)f(to)g(determine)g(if)g(the)h(transformations)-112
+4143 y(of)g(the)i(T)-8 b(-rule)19 b(are)h(in)h(fact)f(applicable.)-34
+4254 y(Purely)c(as)i(an)e(optimization,)g(it)h(is)h(usually)e(the)g
+(case)h(that)g(not)f(all)-118 4354 y(statements)g(in)g(a)g(T)-8
+b(-rule')j(s)16 b(actions)f(need)g(to)h(be)g(executed)e(prior)h(to)h(a)
+-114 4454 y(T)-8 b(-rule')j(s)18 b(test.)28 b(For)18
+b(this)i(reason,)e(the)h(actions)f(of)h(a)g(T)-8 b(-rule)18
+b(are)h(split)-112 4553 y(into)i(two)g(groups;)g(those)h(that)f(need)g
+(to)h(be)f(executed)g(prior)f(to)i(the)-119 4653 y(T)-8
+b(-rule')j(s)14 b(test,)i(and)e(those)h(that)f(can)h(be)f(executed)g
+(after)g(a)h(successful)-113 4753 y(test.)27 b(These)19
+b(groups)f(of)h(statements)h(comprise,)e(respectively)-5
+b(,)18 b(the)p -112 4870 788 4 v -28 4924 a Fr(2)7 4947
+y Fz(The)13 b(actions)i(can)e(be)g(non-assignment)j(statements)e
+(\(like)h(function)g(calls\),)f(but)-112 5026 y(in)23
+b(this)h(case,)i(the)e(P2V)f(pre-processor)j(\(described)f(in)f
+(Section)h(3\))f(needs)g(some)-112 5105 y(hints)15 b(about)i(the)f
+(properties)h(that)f(are)g(changed)h(by)f(the)g(statement)h(in)e(order)
+h(to)g(cor)o(-)-112 5184 y(rectly)g(categorize)j(each)d(property)l(.)22
+b(For)15 b(simplicity)l(,)i(in)e(this)h(paper)m(,)g(we)f(assume)g(all)
+-112 5263 y(actions)j(consist)g(of)f(assignment)i(statements.)p
+2046 24 1947 4 v 2046 1688 4 1664 v 2187 92 a Fu(E)s
+Ft(\()p Fu(x)2303 100 y Fn(1)2335 92 y Fu(;)11 b(:)g(:)g(:)g(;)g(x)2528
+100 y Fl(n)2568 92 y Ft(\))19 b(:)g Fi(D)2708 100 y Fg(1)2763
+92 y Ft(=)-11 b Ff(\))18 b Fu(A)p Ft(\()p Fu(x)3001 100
+y Fn(1)3033 92 y Fu(;)11 b(:)g(:)g(:)g(;)h(x)3227 100
+y Fl(n)3267 92 y Ft(\))19 b(:)f Fi(D)3406 100 y Fg(2)3812
+92 y Fo(\(3\))2187 159 y(test)2187 225 y Ff(ff)2401 292
+y Fo(pre-opt)d(statements)2187 358 y Ff(gg)2187 424 y(ff)2401
+491 y Fo(post-opt)g(statements)2187 557 y Ff(gg)2639
+700 y Fz(\(a\))i(General)i(form)e(of)g(an)g(I-rule)p
+2095 798 1849 4 v 2187 875 a Fo(SOR)m(T)o Ft(\()p Fu(S)2399
+883 y Fn(1)2431 875 y Ft(\))i(:)f Fi(D)2570 883 y Fg(2)2625
+875 y Ft(=)-11 b Ff(\))19 b Fo(Mer)o(ge)p 2904 875 18
+4 v 21 w(sort)p Ft(\()p Fu(S)3076 883 y Fn(1)3108 875
+y Ft(\))g(:)f Fi(D)3247 883 y Fg(3)3812 875 y Fo(\(4\))2187
+958 y Ft(\()p Fi(D)2270 966 y Fg(2)2306 958 y Fu(:)p
+Fo(tuple)p 2445 958 V 20 w(order)e Ft(!)9 b(=)18 b Fo(DONT)p
+2862 958 V 21 w(CARE)o Ft(\))2187 1024 y Ff(ff)2401 1091
+y Fi(D)2458 1099 y Fg(3)2512 1091 y Ft(=)h Fi(D)2639
+1099 y Fg(2)2690 1091 y Ft(;)2187 1157 y Ff(gg)2187 1224
+y(ff)2401 1290 y Fi(D)2458 1298 y Fg(3)2493 1290 y Fu(:)p
+Fo(cost)g Ft(=)g Fi(D)2753 1298 y Fg(1)2788 1290 y Fu(:)p
+Fo(cost)2699 1356 y Ft(+\()p Fi(D)2833 1364 y Fg(3)2868
+1356 y Fu(:)p Fo(num)p 2994 1356 V 21 w(records)p Ft(\))c
+Ff(\003)h Ft(log\()p Fi(D)3442 1364 y Fg(3)3478 1356
+y Fu(:)p Fo(num)p 3604 1356 V 21 w(records)p Ft(\))f(;)2187
+1423 y Ff(gg)2630 1565 y Fz(\(b\))i(Mer)o(ge-sort)i(sort)e(algorithm)p
+3990 1688 4 1664 v 2046 1691 1947 4 v 3992 1708 19 1671
+v 2063 1708 1947 19 v 2771 1890 a FG(Figure)j(3:)27 b(I-rule)2044
+2113 y FF(pr)m(e-test)21 b FG(and)f FF(post-test)g FG(statements)h(of)f
+(the)g(T)-8 b(-rule.)3565 2083 y Ft(3)2046 2330 y FG(E)t
+Fz(X)t(A)t(M)t(P)t(L)t(E)24 b FG(4)t(.)142 b(The)14 b(associativity)h
+(of)g(JOINs)h(is)g(expressed)d(by)2044 2430 y(T)-8 b(-rule)19
+b(\(2\))h(in)g(Figure)g(2\(b\).)1082 b Fs(\003)2044 2683
+y Fx(2.4)99 b(Implementation)26 b(rules)2044 2844 y FG(Implementation)k
+(rules,)35 b(or)e(I-rules)f(for)g(short,)j(de\256ne)e(equiva-)2044
+2944 y(lences)e(between)g(expressions)g(and)g(their)g(implementing)f
+(algo-)2044 3043 y(rithms.)i(Let)23 b Fv(E)k FG(be)c(an)f(expression)f
+(and)g Fv(A)i FG(be)f(an)g(algorithm)f(that)2044 3143
+y(implements)26 b Fv(E)5 b FG(.)51 b(The)27 b(general)g(form)f(of)i(an)
+f(I-rule)g(is)i(given)d(by)2044 3242 y(Equation)18 b(\(3\))i(\(shown)f
+(in)h(Figure)g(3\(a\)\).)2127 3345 y(The)g(actions)h(associated)g(with)
+g(an)g(I-rule)f(are)h(de\256ned)e(in)j(three)2044 3445
+y(parts.)35 b(The)23 b(\256rst)h(part,)f(or)g FF(test)p
+FG(,)i(is)f(a)f(boolean)f(expression)f(whose)2044 3544
+y(value)e(determines)g(whether)h(or)f(not)h(the)h(rule)e(can)h(be)g
+(applied.)2123 3647 y(The)d(second)g(part,)g(or)g FF(pr)m(e-opt)f
+(statements)p FG(,)i(is)h(a)e(set)h(of)g(descrip-)2044
+3746 y(tor)23 b(assignment)g(statements)g(that)h(are)f(executed)f(only)
+h(if)h(the)f(test)2044 3846 y(is)i(true)f(and)f FF(befor)m(e)h
+FG(any)g(of)g(the)g(inputs)g Fv(x)3296 3858 y Fu(i)3349
+3846 y FG(of)g Fv(E)30 b FG(are)24 b(optimized.)2044
+3946 y(Additional)e(parameters)g(of)i(nodes)f(are)g(usually)g(assigned)
+g(in)h(the)2039 4045 y(pre-opt)15 b(section.)25 b(This)16
+b(is)h(necessary)f(before)f(any)h(of)f(the)i(nodes)e(on)2044
+4145 y(the)20 b(right)g(side)g(can)g(be)g(optimized.)2127
+4248 y(The)g(third)h(part,)g(or)f FF(post-opt)g(statements)p
+FG(,)h(is)h(a)g(set)f(of)g(descrip-)2044 4347 y(tor)i(assignment)f
+(statements)i(that)f(are)g(executed)f FF(after)i FG(all)g
+Fv(x)3859 4359 y Fu(i)3911 4347 y FG(are)2044 4447 y(optimized.)k
+(Normally)-5 b(,)19 b(the)i(post-opt)f(statements)h(compute)f(cost)2040
+4546 y(properties)c(that)h(can)g(only)g(be)g(determined)e(once)h(the)i
+(inputs)e(to)i(the)2044 4646 y(algorithm)i(are)i(completely)f
+(optimized)g(and)g(their)h(costs)h(known.)2044 4746 y(This)33
+b FF(does)g(not)p FG(,)j(however)m(,)e(imply)f(a)g(bottom-up)e
+(optimization)2044 4845 y(strategy)-5 b(.)41 b(It)26
+b(simply)e(means)h(that)h(although)d(I-rules)i(are)g(applied)2044
+4945 y(to)20 b(parents)g(before)g(their)g(children)f(are)i(optimized,)e
+(the)h FF(cost)i FG(\(and)p 2044 5028 788 4 v 2129 5081
+a Fr(3)2163 5105 y Fz(W)-5 b(e)19 b(suspect)i(it)e(is)h(possible)g(to)g
+(use)g(data-\257ow)g(analysis)h(to)f(partition)i(the)e(as-)2044
+5184 y(signment)i(statements)h(automatically)l(,)i(but)c(for)g(now)l(,)
+g(we)g(let)h(the)g(rule-writer)h(do)2044 5263 y(the)18
+b(partitioning.)p eop
+%%Page: 5 5
+5 4 bop -115 21 a FG(other)18 b(properties)f(in)h(the)h(post-opt)e
+(section\))g(of)h(the)h(parent)e(cannot)-112 120 y(be)j(computed)e
+(until)i(the)g(children)f(have)g(been)h(optimized.)-110
+326 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)k FG(5)t(.)146 b(Equation)19
+b(\(4\))g(\(in)h(Figure)f(3\(b\)\))g(shows)h(the)g(I-)-112
+425 y(rule)f(that)i(implements)e(the)h(SOR)-5 b(T)21
+b(operator)d(by)i(Mer)o(ge)p 1564 425 25 4 v 28 w(sort.)59
+b Fs(\003)-112 668 y Fx(2.5)99 b(Null)24 b(algorithm)-112
+826 y FG(Recall)g(that,)i(in)e(Section)g(1,)h(we)g(mentioned)d(that)i
+(Prairie)g(allows)-112 925 y(users)g(to)g(treat)g(all)g(operators)f
+(and)g(algorithms)g(as)i(\256rst-class)g(ob-)-112 1025
+y(jects,)g(i.e.,)g(all)f(operators)e(and)i(algorithms)f(are)g
+(explicit,)i(in)f(con-)-112 1125 y(trast)i(to)g(enforcers)e(in)h(V)-11
+b(olcano)25 b(or)h(glue)f(in)h(Starburst.)42 b(This)26
+b(re-)-119 1224 y(quires)15 b(that)g(Prairie)g(provide)f(a)h(mechanism)
+f(where)g(users)i(can)f(also)-112 1324 y(\252delete\272)21
+b(one)g(or)h(more)f(of)h(the)g(explicit)g(operators)e(from)h(expres-)
+-112 1423 y(sions.)33 b(This)23 b(is)g(done)f(by)g(having)f(a)i
+(special)f(class)i(of)e(I-rules)g(that)-115 1523 y(have)c(the)g(form)f
+(given)g(by)h(Equation)e(\(5\))i(in)g(Figure)g(4\(a\).)25
+b(The)18 b(left)-120 1623 y(side)c(of)f(the)h(rule)f(is)i(a)f(single)g
+(abstract)f(operator)f Fv(O)17 b FG(with)d(one)f(stream)-112
+1722 y(input)25 b Fv(S)136 1734 y Ft(1)173 1722 y FG(.)46
+b(The)26 b(right)g(side)g(of)g(the)h(rule)f(is)h(an)f(algorithm)f
+(called)-112 1822 y(\252Null\272)f(with)h(the)g(same)g(stream)g(input)f
+(but)h(with)g(a)g(dif)o(ferent)e(de-)-112 1922 y(scriptor)-5
+b(.)42 b(As)26 b(the)g(name)e(suggests,)j(the)e(Null)h(algorithm)e(is)i
+(sup-)-112 2021 y(posed)21 b(to)i(pass)g(its)g(input)f(unchanged)e(to)i
+(algorithms)f(above)h(it)h(in)-112 2121 y(an)h(operator)f(tree.)41
+b(This)25 b(is)h(accomplished)c(in)j(the)g(I-rule)f(as)h(fol-)-112
+2220 y(lows.)-29 2321 y(The)c(test)i(for)e(this)i(I-rule)e(is)i(always)
+f(TRUE,)g(i.e.,)g(any)g(node)f(in)-112 2421 y(an)g(operator)f(tree)i
+(with)g Fv(O)k FG(as)c(its)h(operator)d(can)i(be)g(implemented)-113
+2520 y(by)e(the)g(Null)g(algorithm.)25 b(The)20 b(actions)f(associated)
+h(with)g(this)g(rule)-115 2620 y(have)d(a)h(speci\256c)g(pattern.)25
+b(The)18 b(pre-opt)e(section)h(consists)i(of)e(three)-112
+2720 y(statements.)36 b(The)23 b(\256rst)h(statement)f(copies)g(the)h
+(descriptor)e(of)h(the)-116 2819 y(operator)16 b Fv(O)21
+b FG(to)d(the)g(algorithm)e(Null.)26 b(The)17 b(second)g(statement)h
+(sets)-112 2919 y(the)25 b(descriptor)e(of)i(the)g(stream)g
+Fv(S)892 2931 y Ft(1)955 2919 y FG(on)g(the)g(right)f(side)i(to)f(the)g
+(de-)-117 3018 y(scriptor)15 b(of)h(the)g(stream)g Fv(S)646
+3030 y Ft(1)700 3018 y FG(on)f(the)h(left)h(side.)26
+b(Why)16 b(is)h(it)f(necessary)-119 3118 y(to)e(do)g(this?)26
+b(The)14 b(key)g(lies)h(in)f(the)h(third)f(statement.)24
+b(This)15 b(statement)-117 3218 y(copies)h(the)g(property)f
+(\252property\272)e(of)k(the)f(operator)f Fv(O)k FG(node)c(on)h(the)
+-116 3317 y(left)i(side)g(to)g(the)f(\252property\272)e(of)j(the)f
+(input)g(stream)h Fv(S)1427 3329 y Ft(1)1482 3317 y FG(on)f(the)h
+(right)-112 3417 y(side.)32 b(Since)22 b(left-hand)e(side)j
+(descriptors)e(cannot)g(be)g(changed)g(in)-115 3517 y(an)c(I-rule,)g(a)
+h(new)g(descriptor)e Fj(D)840 3529 y Fi(3)900 3517 y
+FG(is)j(necessary)e(for)g Fv(S)1481 3529 y Ft(1)1537
+3517 y FG(to)g(convey)-112 3616 y(the)j(property)e(propagation)f
+(information.)-29 3717 y(The)48 b(post-opt)f(section)h(in)h(the)g
+(I-rule)e(has)i(only)f(a)h(cost-)-112 3817 y(assignment)44
+b(statement;)57 b(this)46 b(simply)e(sets)j(the)e(cost)g(of)g(the)-112
+3916 y(Null)20 b(node)f(to)h(the)h(cost)f(of)g(its)h(optimized)e(input)
+g(stream.)-31 4017 y(The)f(Null)g(algorithm,)g(therefore,)e(serves)j
+(to)g(ef)o(fectively)d(trans-)-112 4116 y(form)j(a)h(single)g(operator)
+f(to)h(a)h(no-op.)-110 4322 y(E)t Fz(X)t(A)t(M)t(P)t(L)t(E)j
+FG(6)t(.)146 b(Equation)19 b(\(6\))g(\(in)h(Figure)f(4\(b\)\))g(shows)h
+(the)g(I-)-112 4422 y(rule)15 b(that)g(rewrites)g(the)h(SOR)-5
+b(T)16 b(operator)d(to)j(use)f(a)h(Null)g(algorithm.)-112
+4521 y Fs(\003)-112 4876 y FB(3)119 b(The)30 b(P2V)g(pr)n(e-pr)n
+(ocessor)-112 5063 y FG(In)38 b(Section)g(1,)43 b(we)c(enumerated)e
+(the)h(four)g(primary)f(goals)h(of)-112 5163 y(Prairie,)22
+b(viz.,)g(uniformity)e(in)i(operator)e(and)i(algorithms;)f(unifor)n(-)
+-112 5263 y(mity)i(in)h(properties;)h(uniformity)c(in)j
+(property-transformations;)p 2046 24 1947 4 v 2046 1887
+4 1864 v 2187 92 a Fu(O)r Ft(\()p Fu(S)2306 100 y Fn(1)2338
+92 y Ft(\))19 b(:)g Fi(D)2478 100 y Fg(2)2532 92 y Ft(=)-11
+b Ff(\))19 b Fo(Null)q Ft(\()p Fu(S)2828 100 y Fn(1)2879
+92 y Ft(:)f Fi(D)2973 100 y Fg(3)3009 92 y Ft(\))h(:)g
+Fi(D)3149 100 y Fg(4)3812 92 y Fo(\(5\))2187 159 y(TRUE)2187
+225 y Ff(ff)2401 292 y Fi(D)2458 300 y Fg(4)2512 292
+y Ft(=)g Fi(D)2639 300 y Fg(2)2690 292 y Ft(;)2401 358
+y Fi(D)2458 366 y Fg(3)2512 358 y Ft(=)g Fi(D)2639 366
+y Fg(1)2690 358 y Ft(;)2401 424 y Fi(D)2458 432 y Fg(3)2493
+424 y Fu(:)p Fo(property)h Ft(=)f Fi(D)2856 432 y Fg(2)2892
+424 y Fu(:)p Fo(property)c Ft(;)2187 491 y Ff(gg)2187
+557 y(ff)2401 624 y Fi(D)2458 632 y Fg(4)2493 624 y Fu(:)p
+Fo(cost)k Ft(=)g Fi(D)2753 632 y Fg(3)2788 624 y Fu(:)p
+Fo(cost)14 b Ft(;)2187 690 y Ff(gg)2559 833 y Fz(\(a\))j(General)i
+(form)e(of)g(a)g(\252Null\272)h(I-rule)p 2095 931 1849
+4 v 2187 1008 a Fo(SOR)m(T)o Ft(\()p Fu(S)2399 1016 y
+Fn(1)2431 1008 y Ft(\))h(:)f Fi(D)2570 1016 y Fg(2)2683
+1008 y Ft(=)-11 b Ff(\))19 b Fo(Null)p Ft(\()p Fu(S)2978
+1016 y Fn(1)3029 1008 y Ft(:)g Fi(D)3124 1016 y Fg(3)3160
+1008 y Ft(\))g(:)g Fi(D)3300 1016 y Fg(4)3812 1008 y
+Fo(\(6\))2187 1091 y(TRUE)2187 1157 y Ff(ff)2401 1224
+y Fi(D)2458 1232 y Fg(4)2512 1224 y Ft(=)g Fi(D)2639
+1232 y Fg(2)2690 1224 y Ft(;)2401 1290 y Fi(D)2458 1298
+y Fg(3)2512 1290 y Ft(=)g Fi(D)2639 1298 y Fg(1)2690
+1290 y Ft(;)2401 1356 y Fi(D)2458 1364 y Fg(3)2493 1356
+y Fu(:)p Fo(tuple)p 2632 1356 18 4 v 21 w(order)h Ft(=)f
+Fi(D)2919 1364 y Fg(2)2955 1356 y Fu(:)p Fo(tuple)p 3094
+1356 V 20 w(order)d Ft(;)2187 1423 y Ff(gg)2187 1489
+y(ff)2401 1556 y Fi(D)2458 1564 y Fg(4)2493 1556 y Fu(:)p
+Fo(cost)j Ft(=)g Fi(D)2753 1564 y Fg(3)2788 1556 y Fu(:)p
+Fo(cost)14 b Ft(;)2187 1622 y Ff(gg)2718 1765 y Fz(\(b\))j(Null)h(sort)
+f(algorithm)p 3990 1887 4 1864 v 2046 1890 1947 4 v 3992
+1907 19 1870 v 2063 1907 1947 19 v 2366 2090 a FG(Figure)j(4:)27
+b(The)20 b(\252Null\272)g(algorithm)f(concept)2044 2301
+y(and)37 b(ef)o(\256cient)f(generation)g(of)h(Prairie)g(optimizers.)78
+b(The)37 b(\256rst)2041 2401 y(three)18 b(goals)f(are)h(driven)f(by)g
+(the)h(need)g(for)f(conceptual)f(simplicity;)2044 2500
+y(however)m(,)33 b(they)f(alone)f(do)h(not)g(necessarily)g(generate)f
+(ef)o(\256cient)2044 2600 y(optimizers.)61 b(The)31 b(P2V)h
+(pre-processor)e(ensures)h(that)h(ef)o(\256cient)2044
+2700 y(optimizers)e(can)h(be)f(realized)h(from)f(Prairie)h
+(speci\256cations,)h(by)2044 2799 y(translating)c(them)i(to)f(the)h(V)
+-11 b(olcano)29 b(framework)e(and)i(then)g(gen-)2044
+2899 y(erating)22 b(an)h(optimizer)f(by)h(compiling)f(with)h(the)g(V)
+-11 b(olcano)22 b(search)2041 2999 y(engine.)j(This)18
+b(Prairie)g(optimizer)n(-generator)c(paradigm)i(is)j(shown)2044
+3098 y(schematically)j(in)h(Figure)f(5.)35 b(The)23 b(pre-processor)d
+(itself)k(is)f(4500)2044 3198 y(lines)f(of)g Fd(flex)g
+FG(and)g Fd(bison)f FG(code.)33 b(In)21 b(this)i(section,)f(we)h
+(brie\257y)2038 3297 y(describe)14 b(the)i(pre-processor)c(steps)k(and)
+f(explain)f(why)h(the)g(Prairie-)2044 3397 y(to-V)-11
+b(olcano)27 b(transformation)e(is)30 b(non-trivial.)49
+b(A)29 b(more)f(detailed)2044 3497 y(description)18 b(of)i(the)h
+(pre-processor)c(is)k(given)e(in)i([5].)2125 3596 y(The)d
+(speci\256cation)g(of)g(an)g(optimizer)f(in)i(V)-11 b(olcano)18
+b(consists)h(of)f(a)2043 3696 y(set)j(of)e(transformation)e(rules)j
+(\(called)f(\252trans)p 3386 3696 25 4 v 29 w(rules\272\))g(and)g
+(imple-)2037 3796 y(mentation)14 b(rules)h(\(called)f(\252impl)p
+2998 3796 V 29 w(rules\272\),)h(a)g(set)h(of)f(properties,)f(and)2038
+3895 y(some)h(support)e(functions.)24 b(The)15 b(join)g(associativity)g
+(trans)p 3737 3895 V 29 w(rule)g(\(cf.)2044 3995 y(Figure)k(2\(b\)\))g
+(in)h(V)-11 b(olcano)20 b(is)h(as)g(follows)3261 3965
+y Ft(4)3297 3995 y FG(:)2210 4155 y Ft(\()p Fo(JOIN)f(?op)p
+2469 4155 18 4 v 21 w(ar)o(g5)h Ft(\(\()p Fo(JOIN)g(?op)p
+2896 4155 V 21 w(ar)o(g4)g Ft(\(?1)g(?2\)\))g(?3\)\))2293
+4280 y Ff(\000)-23 b Fu(>)p Ft(\()p Fo(JOIN)20 b(?op)p
+2633 4280 V 21 w(ar)o(g7)h Ft(\(?1)g(\()p Fo(JOIN)g(?op)p
+3145 4280 V 21 w(ar)o(g6)g Ft(\(?2)g(?3\)\)\)\))2044
+4440 y FG(The)32 b(important)f(point)g(to)i(note)f(is)h(the)g(use)f(of)
+h FF(operator)e(ar)m(gu-)2044 4540 y(ments)21 b FG(\(denoted)e(by)h
+(\252op)p 2801 4540 25 4 v 29 w(ar)o(g\272)g(in)g(rules\);)h(these)g
+(ar)o(guments)e(con-)2044 4640 y(tain)i(properties)f(used)h(in)h(the)f
+(rule')-5 b(s)22 b(actions,)f(but)g(unlike)f(Prairie,)2044
+4739 y(they)31 b(do)g(not)h(contain)e FF(all)i FG(the)g(properties)e
+(of)i(an)f(operator)f(tree)2043 4839 y(node.)c(There)18
+b(are)i(other)f(property)e(classes,)k(like)e(algorithm)g(ar)o(gu-)2044
+4939 y(ment,)26 b(logical)e(property)-5 b(,)24 b(system)i(property)-5
+b(,)23 b(physical)i(property)-5 b(,)2044 5038 y(and)25
+b(cost.)44 b(Thus,)27 b(while)f(Prairie)g(uses)g(a)g(uniform)e
+(descriptor)h(to)p 2044 5107 788 4 v 2129 5160 a Fr(4)2163
+5184 y Fz(There)15 b(are)f(conditions)j(and)d(actions)i(associated)g
+(with)f(V)-9 b(olcano)16 b(rules)e(that)h(are)2044 5263
+y(not)i(shown)g(here.)p eop
+%%Page: 6 6
+6 5 bop -98 24 1923 4 v -98 1420 4 1397 v 371 1324 a
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 17.07164 128.0373
+119.50148 128.0373 119.50148 25.60745 17.07164 25.60745 /Lineto /lineto
+load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 153.64476
+102.42984 153.64476 102.42984 136.57312 34.14328 136.57312 /Lineto
+/lineto load def false Polygon gsave 1. setgray fill grestore gsave
+0.8 SLW 0. setgray 0 setlinecap stroke grestore end
+
+@endspecial 754 139 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 3.07344
+neg 47.33029 7.75298 .5 Frame gsave 1. setgray fill grestore end
+
+
+@endspecial Fo(Prairie)15 b(Rule)f(Set)371 1324 y @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 119.50148 68.28656 136.57312
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 34.14328 119.50148
+102.42984 119.50148 102.42984 102.42984 34.14328 102.42984 /Lineto
+/lineto load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap
+stroke grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial
+719 416 a(P2V)h(Pre-processor)371 1324 y @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 85.3582 68.28656 102.42984
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 85.3582 102.42984
+85.3582 102.42984 68.28656 34.14328 68.28656 /Lineto /lineto load
+def false Polygon gsave 0.5 setgray fill grestore gsave 0.8 SLW 0.
+setgray 0 setlinecap stroke grestore end
+
+@endspecial
+736 706 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 3.07344
+neg 51.4815 7.75298 .5 Frame gsave 1. setgray fill grestore end
+
+@endspecial(V)-7
+b(olcano)14 b(Rule)h(Set)371 1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 51.21492 68.28656 68.28656
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 2.6 SLW 0. setgray [ 34.14328 51.21492
+102.42984 51.21492 102.42984 34.14328 34.14328 34.14328 /Lineto /lineto
+load def false Polygon gsave 2.6 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave 1.0 SLW 1. setgray stroke grestore end
+
+@endspecial 843
+950 a(V)-7 b(olcano)694 1017 y(Optimizer)o(-Generator)371
+1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 68.28656 17.07164 68.28656 34.14328
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray [ 34.14328 17.07164
+102.42984 17.07164 102.42984 0.0 34.14328 0.0 /Lineto /lineto load
+def false Polygon gsave 0.5 setgray fill grestore gsave 0.8 SLW 0.
+setgray 0 setlinecap stroke grestore end
+
+@endspecial 740 1267 a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.0 SLW 1. setgray 0. true 3.0 neg 4.51193
+neg 50.62743 7.75298 .5 Frame gsave 1. setgray fill grestore end
+
+
+@endspecial(Query)15 b(Optimizer)-948 b(Operator)15
+b(T)n(ree)371 1324 y @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 34.14328 8.53581 17.07164 8.53581
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0. setgray /ArrowA { moveto } def
+/ArrowB { /ArrowBc [ 6 2 roll ] cvx def ArrowBc BeginArrow false 0.4
+1.4 2.0 3. Arrow EndArrow } def [ 119.50148 8.53581 102.42984 8.53581
+ /Lineto /lineto load def false Line gsave 2.0 2 mul CLW add SLW 1.
+setgray stroke grestore gsave 0.8 SLW 0. setgray 0 setlinecap stroke
+ grestore gsave ArrowBc ArrowB pop pop pop pop grestore end
+
+@endspecial 1363 1273 a(Access)e(Plan)p
+1822 1420 V -98 1423 1923 4 v 1823 1440 19 1403 v -81
+1440 1923 19 v -112 1623 a FG(Figure)58 b(5:)105 b(The)59
+b(Prairie)g(optimizer)n(-generator)d(paradigm.)-112 1722
+y(Double-boxed)j(modules)k(represent)f(software)h(generators,)-112
+1822 y(shaded)35 b(boxes)g(represent)g(generated)f(programs.)72
+b(The)36 b(outer)n(-)-112 1922 y(most)f(double-boxed)d(portion)h
+(denotes)i(the)h(Prairie)f(optimizer)-112 2021 y(generator)-5
+b(.)-117 2223 y(encode)16 b(properties,)g(V)-11 b(olcano)16
+b(partitions)g(the)h(properties)e(into)h(dif-)-119 2323
+y(ferent)d(classes.)26 b(The)15 b(P2V)f(pre-processor)e(partitions)i(a)
+h(Prairie)f(de-)-112 2422 y(scriptor)22 b(into)g(the)h(dif)o(ferent)e
+(property)f(classes)k(required)d(by)i(V)-11 b(ol-)-112
+2522 y(cano.)26 b(This)21 b(is)g(a)g(non-trivial)d(task,)j(since)f(it)h
+(requires)e(parsing)h(the)-112 2621 y(Prairie)g(rules)g(and)f(their)h
+(actions.)-29 2721 y(Impl)p 134 2721 25 4 v 28 w(rules)29
+b(in)g(V)-11 b(olcano)28 b(defer)f(most)i(of)g(the)f(actions)h(associ-)
+-114 2821 y(ated)18 b(with)h(the)g(rules)f(to)h(support)e(functions.)25
+b(Each)18 b(algorithm)f(has)-119 2920 y(four)c(support)g(functions)g
+(associated)h(with)h(it.)26 b(A)15 b(Prairie)f(speci\256ca-)-113
+3020 y(tion,)19 b(on)g(the)h(other)f(hand,)f(contains)h(all)h(the)g
+(actions)f(in)h(the)g(corre-)-120 3120 y(sponding)13
+b(rule.)24 b(The)14 b(P2V)g(pre-processor)e(parses)i(a)h(Prairie)f
+(I-rule,)-112 3219 y(and)28 b(automatically)f(generates)g(all)j(the)e
+(V)-11 b(olcano)28 b(support)f(func-)-112 3319 y(tions)f(from)g(the)h
+(rule.)46 b(This)27 b(is)h(also)f(a)g(complex)e(process,)j(since)-116
+3418 y(it)17 b(depends)f(partly)g(on)h(the)g(partitioning)e(of)i
+(properties)f(mentioned)-114 3518 y(in)j(the)g(last)h(paragraph,)c(and)
+j(also)g(because)f(it)i(requires)e(relocating)-112 3618
+y(pieces)25 b(of)g(code)f(from)g(Prairie)h(rules)h(to)f(V)-11
+b(olcano)24 b(support)g(func-)-112 3717 y(tions.)-29
+3817 y(The)36 b(third)h(salient)g(feature)f(of)h(a)g(V)-11
+b(olcano)37 b(speci\256cation)f(is)-112 3917 y(the)27
+b(presence)g(of)h(implicit,)h(or)e(hidden,)h(algorithms,)h(called)e
+FF(en-)-112 4016 y(for)m(cers)p FG(.)59 b(In)30 b(Prairie,)j(all)f
+(algorithms)d(are)i(explicit.)58 b(Consider)m(,)-112
+4116 y(for)22 b(example,)h(the)g(Mer)o(ge)p 682 4116
+V 28 w(sort)h(algorithm)e(in)h(Figure)g(3\(b\).)35 b(In)23
+b(a)-112 4215 y(V)-11 b(olcano)20 b(speci\256cation,)g(this)h
+(algorithm)f(would)g(be)h(classi\256ed)g(as)-112 4315
+y(an)k(enforcer)m(,)f(since)h(it)h(enforces)e(the)i(sortedness)f
+(property)-5 b(.)39 b(The)-112 4415 y(P2V)33 b(pre-processor)d
+(determines)i(the)i(Prairie)f(algorithms)f(that)-112
+4514 y(are)d(functionally)f(V)-11 b(olcano)29 b(enforcers,)i(and)e
+(deletes)h(the)g(corre-)-115 4614 y(sponding)16 b(Prairie)h(rules)h(to)
+g(generate)f(the)h(V)-11 b(olcano)17 b(speci\256cation.)-112
+4714 y(This)40 b(requires)f(the)h(pre-processor)e(to)i(migrate)g(the)g
+(\(deleted\))-112 4813 y(rule')-5 b(s)20 b(actions)g(to)g(V)-11
+b(olcano)19 b(support)g(functions.)-29 4913 y(The)27
+b(P2V)i(pre-processor)c(also)k(generates)e(a)i(set)g(of)f(compact)-112
+5012 y(V)-11 b(olcano)24 b(rules)h(by)g(mer)o(ging)e(Prairie)i(rules)g
+(whenever)e(possible.)-112 5112 y(Consider)m(,)18 b(for)i(example,)f
+(the)h(following)f(set)i(of)f(rules)g(in)g(Prairie:)-103
+5263 y Fo(JOIN)p Ft(\()p Fu(S)90 5271 y Fn(1)122 5263
+y Fu(;S)183 5271 y Fn(2)215 5263 y Ft(\):)p Fi(D)317
+5271 y Fg(3)436 5263 y Fh(=)-14 b Fk(\))83 b Fo(JOPR)o
+Ft(\()p Fo(SOR)m(T)o Ft(\()p Fu(S)1026 5271 y Fn(1)1058
+5263 y Ft(\):)p Fi(D)1160 5271 y Fg(4)1196 5263 y Fu(;)p
+Fo(SOR)m(T)o Ft(\()p Fu(S)1428 5271 y Fn(2)1460 5263
+y Ft(\):)p Fi(D)1562 5271 y Fg(5)1597 5263 y Ft(\):)p
+Fi(D)1699 5271 y Fg(6)2127 21 y Fo(SOR)m(T)o Ft(\()p
+Fu(S)2339 29 y Fn(1)2371 21 y Ft(\):)p Fi(D)2473 29 y
+Fg(2)2592 21 y Fh(=)-14 b Fk(\))83 b Fo(Null)p Ft(\()p
+Fu(S)2979 29 y Fn(1)3011 21 y Ft(:)p Fi(D)3087 29 y Fg(3)3123
+21 y Ft(\):)p Fi(D)3225 29 y Fg(4)2044 145 y Fo(JOPR)o
+Ft(\()p Fu(S)2246 153 y Fn(1)2279 145 y Fu(;S)2340 153
+y Fn(2)2371 145 y Ft(\):)p Fi(D)2473 153 y Fg(3)2592
+145 y Fh(=)-14 b Fk(\))83 b Fo(Nested)p 2974 145 18 4
+v 20 w(loops)p Ft(\()p Fu(S)3184 153 y Fn(1)3216 145
+y Ft(:)p Fi(D)3292 153 y Fg(4)3328 145 y Fu(;S)3389 153
+y Fn(2)3421 145 y Ft(\):)p Fi(D)3523 153 y Fg(5)2044
+310 y FG(The)24 b(\256rst)g(rule)g(is)h(a)g(T)-8 b(-rule,)24
+b(and)g(the)g(next)f(two)i(are)f(I-rules.)37 b(The)2044
+410 y(P2V)25 b(pre-processor)e(combines)h(the)h(above)g(set)h(of)f
+(Prairie)g(rules)2044 509 y(into)20 b(a)g(single)g(I-rule,)2044
+674 y Fo(JOIN)p Ft(\()p Fu(S)2237 682 y Fn(1)2269 674
+y Fu(;S)2330 682 y Fn(2)2362 674 y Ft(\):)p Fi(D)2464
+682 y Fg(3)2582 674 y Fh(=)-14 b Fk(\))83 b Fo(Nested)p
+2964 674 V 20 w(loops)p Ft(\()p Fu(S)3174 682 y Fn(1)3206
+674 y Ft(:)p Fi(D)3282 682 y Fg(4)3318 674 y Fu(;S)3379
+682 y Fn(2)3411 674 y Ft(\):)p Fi(D)3513 682 y Fg(5)2044
+839 y FG(and)19 b(then)h(translates)g(it)h(into)f(a)h(single)f(V)-11
+b(olcano)19 b(impl)p 3625 839 25 4 v 29 w(rule.)2044
+1119 y FB(4)119 b(Experimental)30 b(r)n(esults)2044 1304
+y FG(This)k(section)g(presents)f(experimental)f(results)i(which)g
+(demon-)2044 1403 y(strate)e(the)g(value)g(of)g(Prairie)g(in)g
+(specifying)f(rule)h(sets)h(of)f(rule-)2044 1503 y(based)g(optimizers.)
+62 b(Our)32 b(experiments)e(consist)j(of)f(specifying)2043
+1603 y(rule-based)18 b(optimizers)h(using)g(Prairie)g(and)g(generating)
+f(optimiz-)2040 1702 y(ers)f(using)f(the)g(P2V)h(pre-processor)d(and)i
+(the)h(optimizer)n(-generator)2044 1802 y(paradigm)h(of)i(Figure)g(5.)
+2120 1901 y(In)14 b([4],)h(we)f(presented)g(an)g(implementation)e(of)i
+(a)h(centralized)e(re-)2041 2001 y(lational)18 b(query)f(optimizer)g
+(using)h(Prairie.)26 b(Using)18 b(the)g(P2V)h(trans-)2036
+2101 y(lator)m(,)14 b(we)g(translated)f(this)h(to)g(V)-11
+b(olcano)12 b(format)h(and)g(optimized)f(sev-)2044 2200
+y(eral)23 b(queries)g(using)f(the)h(resultant)g(optimizer)-5
+b(.)35 b(For)23 b(comparison,)2042 2300 y(we)18 b(hand-coded)e(the)i
+(same)h(optimizer)e(directly)h(in)g(V)-11 b(olcano.)26
+b(The)2039 2400 y(results)17 b(presented)f(there)g(showed)g(that,)h
+(using)f(Prairie)h(\(compared)2044 2499 y(to)30 b(directly)f(using)g(V)
+-11 b(olcano\))29 b(resulted)g(in)h(approximately)d(50\045)2044
+2599 y(savings)f(in)g(lines)g(of)g(code)g(with)g(negligible)f(\(less)i
+(than)e(5\045\))h(in-)2044 2698 y(crease)d(in)g(query)e(optimization)h
+(time.)35 b(However)m(,)22 b(the)h(optimizer)2044 2798
+y(was)i(quite)f(small)h(in)f(terms)h(of)f(the)g(number)f(of)h
+(operators,)g(algo-)2044 2898 y(rithms)c(and)f(rules.)2127
+2997 y(For)j(a)g(more)g(realistic)g(evaluation)f(of)h(Prairie,)g(we)h
+(needed)d(an-)2044 3097 y(swers)h(to)f(the)g(following)f(questions:)
+2106 3262 y(1.)41 b(Is)20 b(Prairie)h(adequate)d(for)i(lar)o(ge-scale)f
+(rule)h(sets?)2106 3427 y(2.)41 b(How)j(is)i(programmer)c(productivity)
+g(enhanced)h(by)h(the)2210 3527 y(high-level)18 b(abstractions)i(of)f
+(Prairie?)2106 3692 y(3.)41 b(Can)14 b(Prairie)h(rule)f(sets)h(be)g
+(translated)e(automatically)g(into)h(ef-)2210 3792 y(\256cient)20
+b(implementations?)2124 3957 y(W)-7 b(e)19 b(addressed)e(the)g(\256rst)
+i(question)e(by)g(using)g(the)h(T)-6 b(exas)18 b(Instru-)2044
+4057 y(ments)i(Open)g(OODB)i(query)d(optimizer)g(rule)i(set,)g(which)f
+(has)h(the)2036 4156 y(lar)o(gest)13 b(publicly)g(available)g(rule)h
+(set.)25 b(W)-7 b(e)15 b(describe)e(this)i(optimizer)2042
+4256 y(in)j(the)h(next)f(section,)g(and)g(then)g(give)g(our)f
+(assessments)i(to)g(the)f(last)2044 4356 y(two)i(questions)f(in)i
+(subsequent)d(sections.)2044 4592 y Fx(4.1)99 b(The)74
+b(T)-9 b(exas)73 b(Instruments)h(Open)g(OODB)2268 4709
+y(query)26 b(optimizer)2044 4864 y FG(The)45 b(T)-6 b(exas)46
+b(Instruments)e(Open)h(Object-Oriented)f(Database)2042
+4964 y(Management)17 b(System)i(is)h(an)f(open,)f(extensible,)g
+(object-oriented)2044 5063 y(database)49 b(system)g(which)g(provides)f
+(users)h(an)h(architectural)2044 5163 y(framework)27
+b(that)i(is)i(con\256gurable)c(in)i(an)g(incremental)f(manner)-5
+b(.)2044 5263 y(The)30 b(query)e(optimizer)h(in)i(the)f(Open)f(OODB)i
+([2])f(is)h(generated)p eop
+%%Page: 7 7
+7 6 bop -112 21 a FG(using)36 b(V)-11 b(olcano.)76 b(It)38
+b(is)g(written)e(as)i(a)g(set)f(of)g(trans)p 1513 21
+25 4 v 29 w(rules)g(and)-112 120 y(impl)p 46 120 V 29
+w(rules)42 b(that)h(de\256ne)f(the)g(algebra)g(of)g(an)h
+(object-oriented)-112 220 y(database)35 b(system.)73
+b(Currently)-5 b(,)38 b(there)d(are)g(17)g(transformation)-112
+319 y(rules)50 b(and)g(9)h(implementation)e(rules)h(together)g(with)h
+(about)-112 419 y Fh(13)p Fv(;)14 b Fh(000)21 b FG(lines)i(of)g(code)g
+(for)f(support)g(functions;)i(this,)g(of)f(course,)-112
+519 y(can)c(be)i(changed)d(by)i(an)g(Open)f(OODB)i(user)g(for)e
+(speci\256c)h(needs.)-112 769 y Fx(4.2)99 b(Pr)n(ogrammer)25
+b(pr)n(oductivity)-119 929 y FG(Programmer)13 b(productivity)f(can)j
+(be)g(measured)e(in)i(dif)o(ferent)e(ways.)-112 1029
+y(An)29 b(admittedly)f(simplistic)j(metric)e(is)h(the)g(number)e(of)h
+(lines)h(of)-112 1128 y(code)24 b(that)i(must)g(be)f(written.)43
+b(But)26 b(there)f(are)g(also)h(less)h(tangible)-116
+1228 y(measures,)17 b(such)h(as)g(the)f(amount)f(of)h(conceptual)f(ef)o
+(fort)g(needed)g(to)-112 1327 y(understand)k(a)k(particular)e
+(programming)d(task.)36 b(Our)23 b(experience)-112 1427
+y(with)d(the)h(Open)f(OODB)i(query)d(optimizer)g(suggests)i(that)g
+(Prairie)-113 1527 y(excels)g(on)e(the)i(latter)m(,)e(while)i(of)o
+(fering)c(modest)j(reductions)e(in)j(the)-112 1626 y(volume)d(of)i
+(code)g(that)g(needs)g(to)g(be)g(written.)-34 1728 y(W)-7
+b(e)17 b(converted)d(by)h(hand)g(the)i(Open)e(OODB)i(query)e(optimizer)
+s(')-5 b(s)-116 1828 y(V)-11 b(olcano)16 b(speci\256cations)g(to)h
+(Prairie.)26 b(This)17 b(was)h(a)f(non-trivial)e(task)-112
+1928 y(because)27 b(of)h(the)g(relatively)f(lar)o(ge)g(size)i(of)f(the)
+g(rule)f(set)i(and)f(the)-112 2027 y(complexity)f(of)j(the)g(support)e
+(functions.)55 b(This)30 b(was)g(where)f(we)-112 2127
+y(found)c(Prairie)j(helped)f(in)g(conceptually)f(simplifying)g(the)i
+(rules)-120 2226 y(and)13 b(actions.)24 b(W)-7 b(e)15
+b(then)e(used)h(our)f(P2V)h(pre-processor)d(to)j(reconsti-)-120
+2326 y(tute)g(these)f(Prairie)h(speci\256cations)f(as)i(V)-11
+b(olcano)13 b(speci\256cations.)24 b(As)-113 2426 y(described)18
+b(in)h(Section)h(3,)f(this)h(process)f(involved)f(a)i(considerable)-112
+2525 y(level)g(of)h(complexity)-5 b(,)19 b(partly)h(because)g(the)h
+(Prairie)g(speci\256cation)-116 2625 y(had)16 b(22)h(T)-8
+b(-rules)17 b(and)g(1)m(1)f(I-rules)h(compared)e(to)i(17)g(trans)p
+1537 2625 V 29 w(rules)g(and)-112 2725 y(9)24 b(impl)p
+112 2725 V 29 w(rules)g(in)g(the)g(V)-11 b(olcano)23
+b(speci\256cation;)i(the)f(reconstituted)-112 2824 y(V)-11
+b(olcano)28 b(speci\256cation)h(had)g(the)h(same)f(number)f(of)i(trans)
+p 1671 2824 V 29 w(rules)-112 2924 y(and)19 b(impl)p
+186 2924 V 29 w(rules)h(as)h(the)g(original)e(hand-coded)e
+(speci\256cation.)-36 3026 y(Converting)12 b(the)i(Open)g(OODB)h
+(optimizer)f(rule)g(set)h(into)f(Prairie)-112 3125 y(format)19
+b(actually)h(simpli\256ed)g(its)h(speci\256cation)f(as)h(the)g
+(complexi-)-112 3225 y(ties)i(of)g(the)g(V)-11 b(olcano)22
+b(model)h(were)f(removed.)34 b(The)22 b(reduction)g(in)-119
+3325 y(lines)16 b(of)e(code)h(was)g(modest)g(\320)g(there)g(was)g
+(about)f(a)i(10\045)e(savings.)1826 3295 y Ft(5)-112
+3424 y FG(However)m(,)24 b(as)h(mentioned)e(above,)h(savings)g(in)h
+(lines)g(of)f(code)g(do)-112 3524 y(not)j(adequately)f(re\257ect)i
+(increases)g(in)g(programmer)c(productiv-)-112 3624 y(ity)-5
+b(.)37 b(W)-7 b(e)24 b(found)e(the)i(encapsulated)e(speci\256cations)h
+(of)h(Prairie)f(\320)-117 3723 y(namely)-5 b(,)15 b(the)h(use)h(of)f(a)
+h(single)f(descriptor)f(and)g(fewer)h(explicit)g(sup-)-112
+3823 y(port)j(functions)g(\320)i(made)e(rule)h(programming)d
+FF(much)i FG(easier)-5 b(.)-112 4073 y Fx(4.3)99 b(Performance)81
+b(r)n(esults)f(using)f(the)i(Open)112 4189 y(OODB)24
+b(optimizer)-32 4349 y FG(The)17 b(acid)h(test)h(of)f(Prairie)g(was)g
+(whether)f(Prairie)h(speci\256cations)-117 4449 y(could)d(be)h
+(translated)g(into)g(ef)o(\256cient)f(optimizer)g(implementations.)-112
+4549 y(Our)24 b(experiments)f(using)h(the)h(Open)f(OODB)i(consisted)e
+(of)g(opti-)-112 4648 y(mizing)j(8)g(dif)o(ferent)f(queries)h(using)h
+(the)f(two)h(query)f(optimizers)-113 4748 y(generated,)19
+b(respectively)-5 b(,)18 b(using)i(Prairie)g(and)f(using)h(V)-11
+b(olcano)19 b(di-)-116 4847 y(rectly)e(\(in)g(the)g(remainder)f(of)h
+(this)h(section,)f(we)h(will)g(use)g(\252Prairie\272)-116
+4947 y(and)f(\252V)-11 b(olcano\272)17 b(to)g(denote)g(these)g(two)h
+(approaches\).)24 b(There)16 b(were)p -112 5028 788 4
+v -28 5081 a Fr(5)7 5105 y Fz(The)e(original)i(V)-9 b(olcano)17
+b(speci\256cation)g(had)e Fc(13)p Fb(;)d Fc(400)i Fz(lines,)i(the)f
+(Prairie)h(speci-)-112 5184 y(\256cation)d(had)g Fc(12)p
+Fb(;)f Fc(100)h Fz(lines,)g(and)g(the)g(P2V)-6 b(-generated)15
+b(V)-9 b(olcano)14 b(speci\256cation)h(had)-112 5263
+y Fc(15)p Fb(;)c Fc(800)18 b Fz(lines.)2042 21 y FG(4)h(distinct)g
+(expressions)e(that)i(were)g(used)f(to)h(generate)f(the)g(queries)2044
+120 y(used)i(in)h(the)g(experiments;)f(these)h(are)g(shown)f(in)h
+(Figure)f(6.)30 b(Each)2044 220 y(expression)19 b(represents)g(an)h
+Fv(N)9 b FG(-way)20 b(join)f(query)g(for)h(varying)e
+Fv(N)9 b FG(.)2127 329 y(The)26 b(\256rst)h(expression)f(E1)g(is)i(a)f
+(simple)f(retrieval)g(and)g(join)g(of)2044 429 y(base)21
+b(classes.)32 b(The)21 b(second,)f(E2,)h(is)i(also)e(a)h(join)f(of)g
+(base)h(classes;)2039 528 y(however)m(,)16 b(after)g(each)g(class)i
+(retrieval,)e(an)h(attribute)f(has)g(to)h(be)g(ma-)2043
+628 y(terialized)h(\(i.e.,)h(brought)e(into)i(view\))g(before)f(the)i
+(join.)26 b(The)19 b(third)2044 727 y(and)g(fourth)f(expressions)h
+(\(E3)h(and)f(E4\))h(are)g(the)g(same)g(as)h(the)f(\256rst)2044
+827 y(and)j(second)g(\(E1)g(and)g(E2\))g(respectively)-5
+b(,)22 b(except)h(that)h(there)f(is)i(a)2044 927 y(selection)e(of)g
+(attributes)g(\(the)g(select)h(operator)e(is)i(the)f(root)g(of)g(the)
+2044 1026 y(expressions\).)2482 996 y Ft(6)2127 1135
+y FG(The)e(algebra)f(that)h(was)h(used)f(in)g(the)h(Prairie)f(and)f(V)
+-11 b(olcano)21 b(op-)2044 1235 y(timizers)h(for)f(our)h(experiments)e
+(consisted)i(of)g(5)g(relational)f(oper)n(-)2044 1335
+y(ators)27 b(SELECT)-6 b(,)27 b(PROJECT)-6 b(,)28 b(JOIN,)f(RET)g(and)g
+(UNNEST)g(\(for)2042 1434 y(set-valued)18 b(attributes\))h(and)f(an)h
+(object-oriented)d(operator)i(called)2038 1534 y(MA)-9
+b(T)15 b(\(for)f(MA)-9 b(T)j(erialize;)16 b(it)g(is)g(fundamentally)c
+(a)k(pointer)n(-chasing)2044 1633 y(operator)i(for)i(attributes)f(of)h
+(a)h(class\).)27 b(There)20 b(were)g(8)g(algorithms.)2119
+1743 y(There)12 b(are)i(many)e(parameters)h(that)g(can)h(be)f(varied)g
+(when)g(bench-)2044 1842 y(marking)19 b(a)j(query)e(optimizer)-5
+b(.)30 b(Since)21 b(our)g(objective)f(was)i(to)f(ver)n(-)2043
+1942 y(ify)f(that)g(the)g(Prairie)g(approach)e(did)i(not)f(sacri\256ce)
+h(ef)o(\256ciency)-5 b(,)18 b(our)2044 2041 y(criteria)26
+b(for)f(the)i(queries)e(was)i(that)f(they)g(test)h(a)g(majority)e(of)h
+(the)2036 2141 y(rules,)14 b(with)g(varying)d(properties)i(of)g(the)g
+(base)h(classes.)25 b(T)-6 b(o)14 b(this)g(end,)2044
+2241 y(we)21 b(tested)h(our)e(optimizer)g(\(and)g(the)h(V)-11
+b(olcano)20 b(optimizer\))g(with)h(8)2044 2340 y(dif)o(ferent)g
+(queries)h(\(shown)g(in)i(T)-6 b(able)23 b(3\).)35 b(The)23
+b(eight)g(queries)f(Q1)2044 2440 y(through)d(Q8)j(are)g(derived)e(from)
+h(the)h(4)g(expressions)e(in)i(Figure)f(6.)2039 2540
+y(Each)16 b(expression)f(E1)i(through)d(E4)i(is)h(used)g(to)f(obtain)g
+(two)g(queries)2044 2639 y(for)k(a)h(\256xed)f(number)f
+Fv(N)29 b FG(of)21 b(JOINs)g(in)g(the)f(expression.)27
+b(The)20 b(only)2039 2739 y(dif)o(ference)13 b(between)i(the)h(two)g
+(queries)f(obtained)g(from)g(an)g(expres-)2043 2838 y(sion)k(is)i(that)
+e(the)h(\256rst)g(one)f(does)g(not)h(contain)e(any)h(indices)g(on)g
+(any)2044 2938 y(classes,)25 b(whereas)d(the)h(second)g(one)f(contains)
+h(a)g(single)g(index)f(on)2044 3038 y(each)f(base)i(class)g(occurring)c
+(in)j(the)g(expression.)31 b(In)22 b(expressions)2041
+3137 y(where)17 b(a)h(SELECT)g(is)g(present)f(\(E3)h(and)f(E4\),)g(the)
+h(selection)f(pred-)2044 3237 y(icate)k(is)g(a)g(conjunction)d(of)i
+(equality)g(predicates)f FF(bc)3584 3249 y Fu(i)3636
+3237 y Fh(==)k FF(const)3964 3249 y Fu(i)3992 3237 y
+FG(,)2042 3337 y(where)17 b FF(bc)2342 3349 y Fu(i)2388
+3337 y FG(is)j(an)e(attribute)g(of)g(class)h FF(C)3179
+3349 y Fu(i)3207 3337 y FG(,)g(and)f FF(const)3561 3349
+y Fu(i)3608 3337 y FG(is)h(a)g(constant)2044 3436 y(\(we)k(arbitrarily)
+e(set)j(this)f(to)g Fv(i)p FG(,)g(because)g(its)g(value)g(doesn')o(t)e
+(af)o(fect)2035 3536 y(the)14 b(correctness)e(or)h(performance)e(of)i
+(the)g(optimizer\).)23 b(In)13 b(addition,)2041 3635
+y(for)18 b(queries)g(with)g(a)h(SELECT)f(and)g(whose)g(base)g(classes)i
+(have)e(in-)2040 3735 y(dices)f(\(Q6)f(and)h(Q8)f(in)h(T)-6
+b(able)17 b(3\),)g(the)g(\(single\))f(index)g(of)g(each)h(base)2044
+3835 y(class)22 b(was)g(chosen)e(to)h(be)g(the)g(attribute)g
+(referenced)e(in)i(the)g(selec-)2044 3934 y(tion)27 b(predicate.)46
+b(For)27 b(example,)h(class)g FF(C)3293 3946 y Fu(i)3348
+3934 y FG(was)g(chosen)e(to)i(have)2042 4034 y(an)18
+b(index)g(on)g(attribute)g FF(bc)2819 4046 y Fu(i)2847
+4034 y FG(.)27 b(The)18 b(join)h(predicates)e(for)h(each)h(JOIN)2037
+4134 y(were)14 b(chosen)f(at)i(random,)f(and)f(were)h(always)h
+(equality)e(predicates.)2039 4233 y(The)j(choice)f(of)h(JOIN)h
+(predicates)e(was)i(such)f(that)g(the)h(queries)e(cor)n(-)2044
+4333 y(responded)j(to)j(linear)g(query)e(graphs.)27 b(In)21
+b(the)f(future,)g(we)h(will)g(ex-)2044 4432 y(periment)e(with)h
+(non-linear)e(\(e.g.,)h(star\))h(query)f(graphs.)2127
+4542 y(T)-6 b(able)52 b(3)g(also)h(shows)f(the)h(number)d(of)i(trans)p
+3654 4542 25 4 v 29 w(rules)h(and)p 2044 4633 788 4 v
+2129 4687 a Fr(6)2163 4710 y Fz(The)17 b(most)g(complex)i(expression)g
+(E4)e(consists)h(of)f(all)h(operators)h(in)f(the)g(alge-)2044
+4789 y(bra,)24 b(except)h(PROJECT)d(and)h(UNNEST)-5 b(.)21
+b(PROJECT)h(was)g(not)i(considered)h(be-)2044 4868 y(cause)16
+b(it)g(appeared)i(in)d(only)h(one)g(impl)p 2948 4868
+20 4 v 25 w(rule)g(and)g(no)f(trans)p 3411 4868 V 25
+w(rules,)h(and)g(thus,)f(would)2044 4947 y(not)22 b(af)o(fect)h(the)f
+(size)g(of)f(the)i(search)f(space)h(of)e(abstract)j(expressions.)37
+b(UNNEST)2044 5026 y(was)20 b(not)h(considered)h(because)g(it)f
+(appeared)i(in)d(exactly)j(one)e(trans)p 3657 5026 V
+25 w(rule)g(and)g(one)2044 5105 y(impl)p 2169 5105 V
+24 w(rule;)g(including)g(it)e(in)g(our)f(queries)i(would)g(have)f
+(increased)i(the)e(number)g(of)2044 5184 y(parameters)f(that)g(could)f
+(af)o(fect)h(our)f(run-times.)23 b(W)-5 b(e)16 b(preferred)i(to)f
+(concentrate)j(on)2044 5263 y(simple)d(JOIN)g(expressions.)p
+eop
+%%Page: 8 8
+8 7 bop -112 24 2130 4 v -112 1001 4 978 v -37 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+
+-37 707 a Fa(C)-10 719 y Fn(1)-47 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ -47 618 a Fm(RET)-7
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 152 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 152 707 a Fa(C)179 719 y Fn(2)142
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 142 618 a Fm(RET)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 42 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoingetcl1getcl2 16 {
+.5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 42
+524 a Fm(JOIN)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 182
+415 a
+ tx@Dict begin 45. Rot end
+ 182 415 a 143 418 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 143 418 a Fl(:)10 b(:)g(:)182
+415 y
+ tx@Dict begin 45. neg Rot end
+ 182 415 a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ -7 699 a 331 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 331 429 a
+Fm(RET)336 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 336 520 a Fa(C)364 528 y Fl(n)-7 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 231 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 231 335 a Fm(JOIN)-7 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ -7 699
+a -7 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ -7 699 a 100 881 a Fz(\(a\))17 b(E1)p 447
+976 4 928 v 476 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 476 707 a Fa(C)504 719 y Fn(1)467
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 467 618 a Fm(RET)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 665 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+
+665 707 a Fa(C)693 719 y Fn(2)656 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 656 618 a Fm(RET)506
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 463 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl1 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 463 524 a Fm(MA)-5 b(T)506
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl1
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 652 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl2 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 652 524 a Fm(MA)g(T)506 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 556 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoinmatgetcl1matgetcl2
+16 { .5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 556 429 a Fm(JOIN)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506
+699 a 506 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506 699 a 695 321 a
+ tx@Dict begin 45. Rot end
+ 695 321 a 656 324
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 656 324 a Fl(:)11 b(:)f(:)695 321 y
+ tx@Dict begin 45. neg Rot end
+ 695 321 a 506 699
+a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 506 699 a 845 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 845 429 a Fm(RET)850 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 850
+520 a Fa(C)878 528 y Fl(n)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 841 335
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcln 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 841 335 a Fm(MA)-5 b(T)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodematgetcln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 506 699 a 745 240
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 745 240 a Fm(JOIN)506 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 506 699 a 506 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodematgetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 506
+699 a 611 881 a Fz(\(b\))17 b(E2)p 961 976 4 928 v 990
+707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 990 707 a Fa(C)1018 719 y Fn(1)981 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 981 618
+a Fm(RET)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1179 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 1179 707 a
+Fa(C)1207 719 y Fn(2)1170 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1170 618 a Fm(RET)1020
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1070 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoingetcl1getcl2 16 {
+.5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1070 524 a Fm(JOIN)1020 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1209 415 a
+ tx@Dict begin 45. Rot end
+ 1209 415
+a 1170 418 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 1170 418 a Fl(:)11 b(:)f(:)1209 415 y
+ tx@Dict begin 45. neg Rot end
+ 1209
+415 a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoingetcl1getcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699 a 1359 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1359 429 a Fm(RET)1364
+520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 1364 520 a Fa(C)1392 528 y Fl(n)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020
+699 a 1259 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1259 335 a Fm(JOIN)1020 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699
+a 1020 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1020 699 a 1227 240 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodeselect 16 { .5 3.39499
+0.05246 false .5 18.3349 InitRnode } NewNode end end
+ 1227 240 a Fm(SELECT)1020
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodeselect
+/TheNoderoot InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1020 699 a 1127 881 a Fz(\(c\))17 b(E3)p 1474 976
+4 928 v 1504 707 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl1 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 1504 707 a Fa(C)1531 719 y Fn(1)1495
+618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl1 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1495 618 a Fm(RET)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl1
+/TheNodegetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1693 707
+a
+ tx@Dict begin tx@NodeDict begin { } /TheNodecl2 16 { .5 3.32748 1.5
+false .5 7.2378 InitRnode } NewNode end end
+ 1693 707 a Fa(C)1720 719 y Fn(2)1684 618 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcl2 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1684 618
+a Fm(RET)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecl2
+/TheNodegetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1490 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl1 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 1490 524 a
+Fm(MA)-5 b(T)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl1
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1679 524 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcl2 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 1679 524
+a Fm(MA)g(T)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodegetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1583 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodejoinmatgetcl1matgetcl2
+16 { .5 3.39499 0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1583 429
+a Fm(JOIN)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl1 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodematgetcl2 InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a
+1723 321 a
+ tx@Dict begin 45. Rot end
+ 1723 321 a 1684 324 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodedots 16 { .5 0.61111
+0.0 false .5 9.32877 InitRnode } NewNode end end
+ 1684 324 a Fl(:)10 b(:)h(:)1723
+321 y
+ tx@Dict begin 45. neg Rot end
+ 1723 321 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodejoinmatgetcl1matgetcl2
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1873 429 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodegetcln 16 { .5 3.34 0.0
+false .5 9.44495 InitRnode } NewNode end end
+ 1873
+429 a Fm(RET)1878 520 y
+ tx@Dict begin tx@NodeDict begin { } /TheNodecln 16 { .5 3.32748 0.99998
+false .5 8.23895 InitRnode } NewNode end end
+ 1878 520 a Fa(C)1905 528 y Fl(n)1534
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodecln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1868 335 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodematgetcln 16 { .5 3.39499
+0.0 false .5 10.55492 InitRnode } NewNode end end
+ 1868 335 a Fm(MA)-5 b(T)1534
+699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodematgetcln
+/TheNodegetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0
+setlinecap stroke grestore grestore end
+ 1534 699 a 1772 240 a
+ tx@Dict begin tx@NodeDict begin { } /TheNoderoot 16 { .5 3.39499
+0.05246 false .5 10.8299 InitRnode } NewNode end end
+ 1772 240 a Fm(JOIN)1534 699
+y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodedots InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1534 699 a
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNoderoot
+/TheNodematgetcln InitNC { NCLine } if end gsave 0.8 SLW 0. setgray
+0 setlinecap stroke grestore grestore end
+ 1534 699 a 1741 146 a
+ tx@Dict begin tx@NodeDict begin { } /TheNodeselect 16 { .5 3.39499
+0.05246 false .5 18.3349 InitRnode } NewNode end end
+ 1741 146
+a Fm(SELECT)1534 699 y
+ tx@Dict begin gsave STV newpath 0.8 SLW 0. setgray /ArrowA { moveto
+} def /ArrowB { } def tx@NodeDict begin 0.0 0.0 neg 1.0 1.0 /TheNodeselect
+/TheNoderoot InitNC { NCLine } if end gsave 0.8 SLW 0. setgray 0 setlinecap
+stroke grestore grestore end
+ 1534 699 a 1639 881 a Fz(\(d\))17
+b(E4)p 2014 1001 4 978 v -112 1004 2130 4 v 2015 1021
+19 984 v -96 1021 2130 19 v -112 1204 a FG(Figure)g(6:)26
+b(Expressions)17 b(used)h(in)g(generating)e(queries)i(for)f
+(experiments)p 2359 357 1644 13 v 2359 423 4 67 v 2412
+437 a Fp(Query)p 2620 423 V 2673 443 a(Indices?)p 2930
+423 V 2983 437 a(Expr)o(ession)p 3306 423 V 3471 403
+a(Rules)e(matched)p 3999 423 V 3309 427 694 4 v 2359
+490 4 67 v 2620 490 V 2930 490 V 3306 490 V 3359 470
+a Fo(trans)p 3475 470 18 4 v 21 w(rules)p 3656 490 4
+67 v 103 w(impl)p 3818 470 18 4 v 22 w(rules)p 3999 490
+4 67 v 2359 502 1644 13 v 2359 569 4 67 v 2456 549 a(Q1)p
+2620 569 V 214 w(No)p 2930 569 V 3087 588 a(E1)p 3306
+569 V 316 w(3)p 3656 569 V 318 w(3)p 3999 569 V 2359
+572 575 4 v 2359 635 4 67 v 2456 615 a(Q2)p 2620 635
+V 207 w(Y)-6 b(es)p 2930 635 V 3306 635 V 3656 635 V
+3999 635 V 2359 638 1644 4 v 2359 705 4 67 v 2456 685
+a(Q3)p 2620 705 V 214 w(No)p 2930 705 V 3087 725 a(E2)p
+3306 705 V 3468 724 a(8)p 3656 705 V 3815 725 a(4)p 3999
+705 V 2359 708 575 4 v 2359 771 4 67 v 2456 751 a(Q4)p
+2620 771 V 207 w(Y)g(es)p 2930 771 V 3306 771 V 3656
+771 V 3999 771 V 2359 775 1644 4 v 2359 841 4 67 v 2456
+821 a(Q5)p 2620 841 V 214 w(No)p 2930 841 V 3087 860
+a(E3)p 3306 841 V 316 w(9)p 3656 841 V 3815 861 a(5)p
+3999 841 V 2359 844 575 4 v 2359 907 4 67 v 2456 887
+a(Q6)p 2620 907 V 207 w(Y)g(es)p 2930 907 V 3306 907
+V 3656 907 V 3999 907 V 2359 911 1644 4 v 2359 977 4
+67 v 2456 957 a(Q7)p 2620 977 V 214 w(No)p 2930 977 V
+3087 997 a(E4)p 3306 977 V 302 w(16)p 3656 977 V 3815
+996 a(7)p 3999 977 V 2359 980 575 4 v 2359 1044 4 67
+v 2456 1024 a(Q8)p 2620 1044 V 207 w(Y)g(es)p 2930 1044
+V 3306 1044 V 3656 1044 V 3999 1044 V 2359 1056 1644
+13 v 2566 1204 a FG(T)g(able)20 b(3:)27 b(Queries)20
+b(used)g(in)h(experiments)-112 1554 y(impl)p 46 1554
+25 4 v 29 w(rules)37 b(that)h(are)f(matched)g(by)g(each)g(expression.)
+78 b(These)-112 1653 y(are)21 b(the)g(rules)g(whose)g(left)g(hand)f
+(sides)i(match)f(a)g(sub-expression.)-112 1753 y(However)m(,)f(not)h
+(all)h(the)g(rules)f(were)h(necessarily)f(applicable.)30
+b(For)-112 1853 y(instance,)25 b(an)g(impl)p 469 1853
+V 29 w(rule)f(with)i(an)e(index)g(scan)h(would)f(not)h(apply)-112
+1952 y(to)20 b(Q3,)g(although)e(it)j(might)f(apply)f(to)h(Q4.)-29
+2054 y(Queries)32 b(Q1)h(through)e(Q8)i(were)g(optimized)f(for)g
+(increasing)-119 2153 y(number)12 b Fv(N)24 b FG(of)15
+b(JOINs.)25 b(For)15 b(a)g(\256xed)f(number)e(of)j(JOINs)g(in)g(a)g
+(query)-5 b(,)-112 2253 y(we)21 b(varied)f(the)g(cardinalities)h(of)f
+(the)h(base)g(classes)h(5)f(times,)g(each)-112 2353 y(time)g
+(generating)f(a)i(query)f(with)h(dif)o(ferent)d(class)k(properties,)d
+(and)-112 2452 y(averaged)e(the)j(run-times)e(over)h(the)h(5)f(query)g
+(instances)g(to)h(gener)n(-)-114 2552 y(ate)d(the)h(per)n(-query)d
+(optimization)h(time.)27 b(Thus,)18 b(each)g(point)g(in)h(our)-112
+2652 y(graphs)25 b(represents)g(the)h(average)f(of)h(5)g(queries.)44
+b(The)26 b(run-times)-112 2751 y(were)f(measured)395
+2721 y Ft(7)457 2751 y FG(using)h(the)g(GNU)g Fd(time)g
+FG(command.)43 b(All)26 b(ex-)-112 2851 y(periments)f(were)h(performed)
+e(on)i(a)h(lightly)f(loaded)f(DECstation)-112 2950 y(5000/200)17
+b(running)h(Ultrix)i(4.2.)-37 3052 y(The)14 b(optimization)e(times)i
+(for)g(each)f(query)g(for)g(both)g(approaches)-120 3152
+y(\(Prairie)h(and)g(V)-11 b(olcano\))13 b(are)h(shown)g(in)g(Figures)g
+(7\(a\))f(through)f(7\(h\).)-112 3251 y(The)25 b(number)f(of)i(joins)g
+(in)g(each)g(set)g(of)g(graphs)f(was)h(varied)f(to)h(a)-112
+3351 y(maximum)18 b(of)i(8,)g(or)g(until)g(virtual)f(memory)g(was)i
+(exhausted.)-29 3452 y(The)i(\256rst)h(set)g(of)f(graphs)f(\(Figures)h
+(7\(a\))g(and)f(7\(b\)\))g(shows)i(the)-112 3552 y(performance)j(of)k
+(a)g(simple)g(relational-type)d(query)-5 b(.)57 b(The)30
+b(opti-)-117 3652 y(mization)16 b(times)h(are)g(almost)g(identical)f
+(between)g(Prairie)h(and)f(V)-11 b(ol-)-112 3751 y(cano,)21
+b(and)h(the)g(notable)f(point)h(is)h(that)f(the)h(presence)e(of)h(an)g
+(index)-120 3851 y(does)14 b(not)g(change)f(the)h(optimizer)s(')-5
+b(s)13 b(behavior)m(,)g(i.e.,)i(the)f(two)g(graphs)-112
+3951 y(are)20 b(identical.)28 b(This)21 b(arises)g(because)f(the)g
+(optimizer)g(algebra)f(had)-118 4050 y(only)d(two)g(join)g(algorithms)e
+(\(pointer)h(join)g(and)h(hash)g(join\),)g(neither)-112
+4150 y(of)j(which)h(makes)g(use)g(of)g(any)g(indices.)-29
+4251 y(The)25 b(second)g(set)i(of)f(graphs)f(\(Figures)g(7\(c\))h(and)f
+(7\(d\)\))g(shows)-118 4351 y(the)16 b(results)g(of)f(optimizing)g(Q3)g
+(and)h(Q4.)25 b(Here,)16 b(as)h(in)f(Figures)f(7\(a\))-114
+4451 y(and)j(7\(b\),)g(the)h(presence)f(\(or)g(absence\))g(of)g
+(indices)h(makes)g(no)f(dif-)-118 4550 y(ference.)24
+b(Both)16 b(the)f(Prairie)h(and)f(V)-11 b(olcano)15 b(approaches)e
+(have)i(com-)-117 4650 y(parable)g(run-times.)24 b(The)16
+b(sharp)f(jump)g(in)i(the)f(graphs)f(from)g(7-way)-115
+4750 y(to)j(8-way)f(joins)h(is)h(due)e(to)h(the)g(fact)g(that)g(since)g
+(all)g(optimization)f(is)-113 4849 y(done)i(in)h(main)f(memory)-5
+b(,)17 b(dynamic)i(memory)f(allocation)g(\(caused)-112
+4949 y(by)j Fd(malloc)h FG(calls\))h(results)f(in)h(a)g(lot)f(of)g
+(thrashing)f(at)i(this)g(point.)p -112 5028 788 4 v -28
+5081 a Fr(7)7 5105 y Fz(Since)j(the)g(run-times)h(were)f(too)f(small)h
+(to)g(be)f(measured)h(accurately)j(with)-112 5184 y Fy(time)p
+Fz(,)19 b(each)i(query)g(instance)h(was)e(optimized)i(3000)f(times)f
+(\(in)h(a)f(loop\))h(and)f(the)-112 5263 y(total)e(time)g(was)f
+(divided)i(by)e(3000)g(to)g(get)h(the)g(per)o(-query)g(optimization)j
+(time.)2042 1554 y FG(W)-7 b(e)20 b(speculate)e(that)h(in)g(systems)g
+(with)g(more)f(virtual)g(memory)-5 b(,)17 b(the)2044
+1653 y(graphs)i(will)i(be)f(smoother)-5 b(.)2122 1758
+y(The)16 b(third)f(and)h(fourth)e(sets)j(of)f(graphs)f(in)h(Figures)g
+(7\(e\))f(through)2043 1857 y(7\(h\))k(are)h(optimizations)f(of)g
+(queries)h(with)g(a)g(selection)g(predicate.)2039 1957
+y(In)c(these)g(cases,)h(the)g(presence)e(of)g(an)i(index)e(makes)g(a)i
+(dif)o(ference)d(if)2044 2057 y(the)20 b(index)g(is)i(referenced)c(in)j
+(the)g(selection)f(predicate)f(\(as)i(we)g(de-)2042 2156
+y(signed\).)26 b(Also,)19 b(in)g(these)h(two)f(\256gures,)f(the)h
+(performance)e(of)h(both)2040 2256 y(Prairie)g(and)e(V)-11
+b(olcano)17 b(was)h(almost)f(identical,)g(except)g(that)h(Prairie)2044
+2356 y(does)29 b(slightly)g(worse)g(due)g(to)h(the)f(lar)o(ger)f
+(number)g(of)h Fd(malloc)2044 2455 y FG(calls)23 b(that)g(the)f(P2V)h
+(translator)f(introduces.)32 b(Also,)24 b(note)e(that)h(we)2043
+2555 y(could)c(only)g(go)g(up)h(to)g(3-way)f(joins)g(before)g(virtual)g
+(memory)f(was)2044 2654 y(exhausted.)31 b(As)23 b(the)f(available)g
+(memory)e(decreases,)i(there)g(is)h(in-)2039 2754 y(creased)16
+b(thrashing)f(\(as)i(shown)f(by)g(the)g(sharp)g(changes)g(in)g(slope)g
+(in)2044 2854 y(the)k(plots\))g(resulting)f(in)i(a)f(much)f(slower)h
+(optimization)f(process.)2127 2958 y(In)j(all)h(four)f(sets)i(of)e
+(plots,)h(we)g(can)f(see)i(that)e(Prairie)h(performs)2044
+3058 y(with)f(almost)g(\(less)h(than)f Fh(5\045)g FG(variation\))e(the)
+j(same)f(ef)o(\256ciency)e(as)2044 3158 y(V)-11 b(olcano.)29
+b(In)21 b(extreme)f(cases,)i(when)e(memory)g(is)i(scarce,)f(Prairie)
+2040 3257 y(runs)c(more)g(slowly)h(\(about)e Fh(15\045)p
+FG(\))h(\(e.g.,)g(Figure)f(7\(f\)\),)h(but)g(we)h(be-)2044
+3357 y(lieve)25 b(that)g(this)h(situation)f(already)f(represents)h(a)h
+(serious)f(bottle-)2044 3456 y(neck)19 b(for)h(both)f(V)-11
+b(olcano)19 b(and)h(Prairie.)2120 3561 y(The)14 b(results)i(presented)d
+(in)i(this)g(section)f(show)h(that)g(Prairie)f(opti-)2039
+3661 y(mizers)i(need)f(not)h(sacri\256ce)g(ef)o(\256ciency)e(for)i
+(clarity)-5 b(,)15 b(even)h(for)f(lar)o(ge)2038 3760
+y(rule)h(sets.)26 b(More)15 b(research)g(and)g(validation)f(is)j
+(necessary)e(to)h(verify)2044 3860 y(that)k(Prairie)g(is)h(an)f(ef)o
+(\256cient)g(tool)g(for)f(optimizer)g(speci\256cation.)2044
+4166 y FB(5)119 b(Related)31 b(r)n(esear)n(ch)2041 4361
+y FG(The)18 b(System)g(R)i(optimizer)d([1)m(1])g(was)h(the)h(most)f
+(important)e(devel-)2044 4461 y(opment)j(in)j(query)d(optimization)h
+(research.)28 b(It)22 b(was)g(a)f(cost-based)2044 4560
+y(centralized)h(relational)g(query)g(optimizer)g(and)g(introduced)f(a)i
+(va-)2044 4660 y(riety)i(of)h(key)f(concepts)g(like)h
+(\252interesting\272)f(expressions,)h(cardi-)2043 4759
+y(nality)20 b(estimation)f(using)h(selectivity)f(factors)h(and)f
+(dynamic)g(pro-)2044 4859 y(gramming)28 b(with)j(pruning)e(of)h(search)
+g(space.)59 b(These)30 b(concepts)2044 4959 y(continue)18
+b(to)j(be)f(important)f(in)h(query)f(optimizer)g(research.)2127
+5063 y(The)29 b(query)g(optimizer)g(in)h(R)3005 5033
+y Ff(\003)3074 5063 y FG([3])f(works)h(in)g(essentially)g(the)2039
+5163 y(same)17 b(way)f(as)h(that)g(of)f(System)g(R,)h(except)f(that)g
+(R)3480 5133 y Ff(\003)3536 5163 y FG(is)h(a)g(distributed)2044
+5263 y(database)32 b(system)g(which)g(introduces)f(some)h(subtle)g
+(complica-)p eop
+%%Page: 9 9
+9 8 bop -104 24 1935 4 v -104 3720 4 3696 v 66 714 a
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q1.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 418 m
+621 537 l
+822 661 l
+1023 789 l
+1225 909 l
+1426 1046 l
+1627 1183 l
+1828 1320 l
+2030 1449 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 537 30 0 360 arc
+gsave fill grestore
+stroke
+822 661 30 0 360 arc
+gsave fill grestore
+stroke
+1023 789 30 0 360 arc
+gsave fill grestore
+stroke
+1225 909 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1046 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1183 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1320 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1449 30 0 360 arc
+gsave fill grestore
+stroke
+420 421 m
+621 541 l
+822 670 l
+1023 801 l
+1225 935 l
+1426 1066 l
+1627 1229 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+420 451 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+621 571 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+822 700 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+1023 831 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+1225 965 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+1426 1096 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+1627 1259 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 843 a Fz(\(a\))17 b(Query)h(1)974 714
+y @beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q2.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+420 418 m
+621 539 l
+822 664 l
+1023 783 l
+1225 906 l
+1426 1037 l
+1627 1176 l
+1828 1304 l
+2030 1451 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 539 30 0 360 arc
+gsave fill grestore
+stroke
+822 664 30 0 360 arc
+gsave fill grestore
+stroke
+1023 783 30 0 360 arc
+gsave fill grestore
+stroke
+1225 906 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1037 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1176 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1304 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1451 30 0 360 arc
+gsave fill grestore
+stroke
+420 412 m
+621 533 l
+822 661 l
+1023 796 l
+1225 926 l
+1426 1063 l
+1627 1212 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+420 442 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+621 563 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+822 691 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+1023 826 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+1225 956 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+1426 1093 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+1627 1242 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 843 a(\(b\))f(Query)h(2)p -34 943 1816
+4 v 66 1633 a @beginspecial 50.187500 @llx 50.187500
+@lly 501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q3.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 401 m
+621 489 l
+822 578 l
+1023 672 l
+1225 762 l
+1426 865 l
+1627 969 l
+1828 1076 l
+2030 1574 l
+stroke
+420 401 30 0 360 arc
+gsave fill grestore
+stroke
+621 489 30 0 360 arc
+gsave fill grestore
+stroke
+822 578 30 0 360 arc
+gsave fill grestore
+stroke
+1023 672 30 0 360 arc
+gsave fill grestore
+stroke
+1225 762 30 0 360 arc
+gsave fill grestore
+stroke
+1426 865 30 0 360 arc
+gsave fill grestore
+stroke
+1627 969 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1076 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1574 30 0 360 arc
+gsave fill grestore
+stroke
+420 402 m
+621 485 l
+822 568 l
+1023 644 l
+1225 736 l
+1426 821 l
+1627 918 l
+1828 1019 l
+2030 1511 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+420 432 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+621 515 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+822 598 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+1023 674 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+1225 766 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+1426 851 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+1627 948 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+1828 1049 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+2030 1541 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 1761 a(\(c\))f(Query)h(3)974 1633 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q4.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+420 400 m
+621 492 l
+822 575 l
+1023 669 l
+1225 759 l
+1426 866 l
+1627 962 l
+1828 1069 l
+2030 1578 l
+stroke
+420 400 30 0 360 arc
+gsave fill grestore
+stroke
+621 492 30 0 360 arc
+gsave fill grestore
+stroke
+822 575 30 0 360 arc
+gsave fill grestore
+stroke
+1023 669 30 0 360 arc
+gsave fill grestore
+stroke
+1225 759 30 0 360 arc
+gsave fill grestore
+stroke
+1426 866 30 0 360 arc
+gsave fill grestore
+stroke
+1627 962 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1069 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1578 30 0 360 arc
+gsave fill grestore
+stroke
+420 400 m
+621 484 l
+822 567 l
+1023 645 l
+1225 735 l
+1426 823 l
+1627 915 l
+1828 1024 l
+2030 1517 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+420 430 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+621 514 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+822 597 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+1023 675 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+1225 765 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+1426 853 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+1627 945 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+1828 1054 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+2030 1547 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 1761 a(\(d\))f(Query)h(4)p -34 1861
+V 66 2551 a @beginspecial 50.187500 @llx 50.187500 @lly
+501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q5.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 552 m
+430 552 l
+420 728 m
+430 728 l
+420 904 m
+430 904 l
+420 1081 m
+430 1081 l
+420 1257 m
+430 1257 l
+420 1433 m
+430 1433 l
+420 1609 m
+430 1609 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 552 m
+2020 552 l
+2030 728 m
+2020 728 l
+2030 904 m
+2020 904 l
+2030 1081 m
+2020 1081 l
+2030 1257 m
+2020 1257 l
+2030 1433 m
+2020 1433 l
+2030 1609 m
+2020 1609 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 728 m
+440 728 l
+420 1081 m
+440 1081 l
+420 1433 m
+440 1433 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 728 m
+2010 728 l
+2030 1081 m
+2010 1081 l
+2030 1433 m
+2010 1433 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 728 m
+gsave
+348 728 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1081 m
+gsave
+348 1081 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1433 m
+gsave
+348 1433 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 424 m
+956 511 l
+1493 671 l
+2030 1778 l
+stroke
+420 424 30 0 360 arc
+gsave fill grestore
+stroke
+956 511 30 0 360 arc
+gsave fill grestore
+stroke
+1493 671 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1778 30 0 360 arc
+gsave fill grestore
+stroke
+420 426 m
+956 522 l
+1493 688 l
+2030 1737 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+420 456 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+956 552 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+1493 718 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+2030 1767 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 267 2679 a(\(e\))f(Query)h(5)974 2551 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q6.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 386 l
+956 376 m
+956 386 l
+1493 376 m
+1493 386 l
+2030 376 m
+2030 386 l
+420 1785 m
+420 1775 l
+956 1785 m
+956 1775 l
+1493 1785 m
+1493 1775 l
+2030 1785 m
+2030 1775 l
+stroke
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 415 m
+956 490 l
+1493 633 l
+2030 1651 l
+stroke
+420 415 30 0 360 arc
+gsave fill grestore
+stroke
+956 490 30 0 360 arc
+gsave fill grestore
+stroke
+1493 633 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1651 30 0 360 arc
+gsave fill grestore
+stroke
+420 416 m
+956 493 l
+1493 631 l
+2030 1462 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+420 446 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+956 523 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+1493 661 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+2030 1492 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1178 2679 a(\(f\))f(Query)h(6)p -34 2780
+V 66 3469 a @beginspecial 50.187500 @llx 50.187500 @lly
+501.875000 @urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q7.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-83 1080 m
+gsave
+-83 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 425 m
+956 510 l
+1493 670 l
+2030 1637 l
+stroke
+420 425 30 0 360 arc
+gsave fill grestore
+stroke
+956 510 30 0 360 arc
+gsave fill grestore
+stroke
+1493 670 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1637 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 501 l
+1493 648 l
+2030 1470 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+956 531 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+1493 678 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+2030 1500 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 265 3597 a(\(g\))f(Query)h(7)974 3469 y
+@beginspecial 50.187500 @llx 50.187500 @lly 501.875000
+@urx 376.406250 @ury 850 @rwi @setspecial
+%%BeginDocument: runtime_Q8.ps
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 421 m
+956 504 l
+1493 650 l
+2030 1549 l
+stroke
+420 421 30 0 360 arc
+gsave fill grestore
+stroke
+956 504 30 0 360 arc
+gsave fill grestore
+stroke
+1493 650 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1549 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 502 l
+1493 647 l
+2030 1475 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+956 532 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+1493 677 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+2030 1505 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%EndDocument
+ @endspecial 1173 3597 a(\(h\))f(Query)h(8)p 1827 3720
+4 3696 v -104 3723 1935 4 v 1829 3740 19 3703 v -87 3740
+1935 19 v -38 3922 a FG(Figure)i(7:)27 b(Query)19 b(optimization)g
+(times)h(for)g(Q1)g(through)e(Q8)-112 4158 y(tions)i(in)g(its)h(query)e
+(optimizer)-5 b(.)-29 4266 y(The)23 b(Starburst)h(query)e(optimizer)h
+([10])g(uses)h(rules)g(for)g(all)g(de-)-112 4366 y(cisions)j(that)g
+(need)f(to)i(be)f(taken)f(by)h(the)g(query)e(optimizer)-5
+b(.)47 b(The)-116 4466 y(rules)18 b(are)f(functional)f(in)i(nature)e
+(and)h(transform)f(a)i(given)f(operator)-112 4565 y(tree)j(into)g
+(another)-5 b(.)26 b(The)20 b(rules)h(are)f(commonly)e(those)i(that)h
+(re\257ect)-112 4665 y(relational)26 b(calculus)i(facts.)49
+b(In)27 b(Starburst,)i(the)f(query)e(rewriting)-112 4764
+y(phase)21 b(is)i(dif)o(ferent)d(from)i(the)g(optimization)e(phase.)33
+b(The)21 b(rewrit-)-119 4864 y(ing)15 b(phase)f(transforms)f(the)i
+(query)f(itself)h(into)g(equivalent)e(operator)-112 4964
+y(trees)21 b(based)g(on)f(relational)g(calculus)h(rules.)30
+b(The)20 b(plan)h(optimiza-)-114 5063 y(tion)d(phase)h(selects)g
+(algorithms)f(for)g(each)g(operator)f(in)i(the)g(opera-)-114
+5163 y(tor)f(tree)h(that)g(is)g(obtained)e(after)i(rewriting.)25
+b(The)18 b(disadvantage)f(of)-112 5263 y(separating)k(the)h(query)f
+(rewrite)h(and)g(the)h(optimization)e(phases)h(is)2041
+21 y(that)c(pruning)e(of)h(the)h(search)g(space)g(is)h(not)e(possible)h
+(during)e(query)2044 120 y(rewrite,)j(since)i(the)f(rewrite)g(phase)g
+(is)h(non-cost-based.)2127 228 y(Freytag)h([6])h(describes)f(a)i
+(rule-based)d(query)h(optimizer)g(simi-)2044 328 y(lar)f(to)g
+(Starburst.)28 b(The)20 b(rules)h(are)g(based)f(on)g(LISP-like)h
+(represen-)2040 427 y(tations)c(of)f(access)i(plans.)25
+b(The)17 b(rules)f(themselves)h(are)g(recursively)2044
+527 y(de\256ned)26 b(on)g(smaller)i(expressions)e(\(operator)e
+(trees\).)48 b(Although)2044 627 y(several)22 b(expressions)g(can)h
+(contain)e(a)j(common)d(sub-expression,)2044 726 y(Freytag)e(doesn')o
+(t)f(consider)h(the)h(possibility)g(of)g(sharing.)25
+b(Expres-)2044 826 y(sions)c(are)g(evaluated)f(each)h(time)h(they)e
+(are)i(encountered.)27 b(This)21 b(is)2040 926 y(obviously)16
+b(inef)o(\256cient.)25 b(In)17 b(addition,)f(as)j(in)e(Starburst,)g(he)
+h(doesn')o(t)2044 1025 y(consider)i(the)h(cost)h(transformations)d
+(inherent)h(in)h(any)g(query)f(op-)2044 1125 y(timizer;)g(rules)g(are)g
+(syntactic)g(transformation)e(rules.)2127 1233 y(EXODUS)j([9])g
+(provides)e(an)i(optimizer)f(generator)g(which)g(ac-)2044
+1332 y(cepts)k(a)g(rule-based)e(speci\256cation)h(of)g(the)h(data)g
+(model)f(as)h(input.)2042 1432 y(The)19 b(optimizer)f(generator)f
+(compiles)i(these)g(rules,)g(together)f(with)2042 1532
+y(pre-de\256ned)e(rules,)j(to)f(generate)g(an)g(optimizer)g(for)g(the)g
+(particular)2044 1631 y(data)25 b(model)g(and)g(set)h(of)f(operators.)
+41 b(Unlike)25 b(Freytag,)h(the)g(opti-)2043 1731 y(mizer)18
+b(generator)f(for)i(EXODUS)g(allows)h(for)e(C)i(code)f(along)f(with)
+2037 1831 y(de\256nitions)13 b(of)i(new)f(rules.)25 b(This)15
+b(allows)f(the)h(database)f(implemen-)2039 1930 y(tor)i(the)g(freedom)f
+(to)h(associate)h(any)f(action)f(with)i(a)f(particular)f(rule.)2041
+2030 y(Operator)i(trees)h(in)g(EXODUS)g(are)g(constructed)e(bottom-up)g
+(from)2044 2129 y(previously)i(constructed)h(trees.)2121
+2237 y(The)d(V)-11 b(olcano)14 b(optimizer)h(generator)f(project)g([7])
+h(evolved)g(from)2044 2337 y(the)22 b(EXODUS)g(project.)31
+b(It)22 b(is)g(dif)o(ferent)e(from)h(all)h(the)g(above)f(op-)2044
+2437 y(timizers)j(in)h(one)e(signi\256cant)h(way:)35
+b(it)25 b(is)h(a)e(top-down)e(optimizer)2042 2536 y(compared)17
+b(with)i(the)f(bottom-up)f(strategy)h(of)g(the)h(others.)26
+b(Opera-)2041 2636 y(tor)17 b(trees)h(are)f(optimized)f(starting)i
+(from)e(the)i(root)e(while)i(sub-trees)2041 2735 y(are)h(not)e(yet)i
+(optimized.)25 b(This)18 b(leads)g(to)h(a)f(constraint-driven)d(gen-)
+2044 2835 y(eration)23 b(of)h(the)g(search)f(space.)38
+b(While)25 b(this)f(method)f(results)h(in)h(a)2040 2935
+y(tight)17 b(control)e(of)i(the)g(search)g(space,)g(it)h(is)f
+(unconventional)d(and)i(re-)2044 3034 y(quires)24 b(careful)f
+(attention)h(on)g(the)h(part)f(of)g(the)g(optimizer)g(imple-)2043
+3134 y(mentor)19 b(to)h(ensure)g(that)g(legal)g(operator)e(trees)i(are)
+g(not)g(accidently)2044 3234 y(left)25 b(out)f(of)h(the)g(search)f
+(space.)41 b(W)-7 b(e)26 b(have)f(used)f(V)-11 b(olcano)24
+b(as)i(our)2044 3333 y(back-end)18 b(search)i(engine.)2044
+3658 y FB(6)119 b(Conclusion)31 b(and)g(futur)n(e)f(work)2044
+3859 y FG(Current)24 b(rule-based)f(query)g(optimizers)h(do)g(not)h
+(provide)e(a)i(very)2044 3959 y(intuitive)20 b(and)g(conceptually)f
+(streamlined)h(framework)f(to)i(de\256ne)2044 4059 y(rules)26
+b(and)g(actions.)45 b(Our)26 b(experiences)e(with)j(the)f(V)-11
+b(olcano)26 b(opti-)2044 4158 y(mizer)e(generator)e(suggest)i(that)g
+(its)i(model)d(of)h(rules)g(and)g(the)g(ex-)2044 4258
+y(pression)i(of)h(these)g(rules)g(is)h(much)e(more)g(complicated)g(and)
+g(too)2042 4358 y(low-level)19 b(than)f(it)i(needs)f(to)g(be.)26
+b(As)20 b(a)g(consequence,)c(rule)j(sets)h(in)2043 4457
+y(V)-11 b(olcano)19 b(are)g(fragile,)g(hard)g(to)h(write,)f(and)h
+(debug.)25 b(Similar)19 b(prob-)2044 4557 y(lems)i(may)f(exist)h(in)g
+(other)f(contemporary)d(rule-based)i(query)h(op-)2044
+4656 y(timizers.)2126 4764 y(W)-7 b(e)21 b(believe)d(that)i(rule-based)
+e(query)g(optimizers)g(will)j(be)e(stan-)2044 4864 y(dard)i(tools)i(of)
+f(future)g(database)g(systems.)34 b(The)23 b(pragmatic)e(dif)o(\256-)
+2044 4964 y(culties)g(of)h(using)f(existing)f(rule-based)g(optimizers)h
+(led)g(us)h(to)f(de-)2044 5063 y(velop)f(Prairie,)g(an)h(extensible)f
+(and)g(structured)g(algebraic)f(frame-)2044 5163 y(work)j(for)h
+(specifying)f(rules.)36 b(Prairie)23 b(is)h(similar)g(to)f(existing)g
+(op-)2044 5263 y(timizers)33 b(in)g(that)f(it)i(supports)e(both)g
+(transformation)e(rules)j(and)p eop
+%%Page: 10 10
+10 9 bop -112 21 a FG(implementation)21 b(rules.)37 b(However)m(,)23
+b(Prairie)g(makes)h(several)f(im-)-112 120 y(provements:)-50
+291 y(1.)41 b(it)14 b(of)o(fers)e(a)i(conceptually)d(more)h
+(streamlined)h(model)f(for)h(rule)54 390 y(speci\256cation;)-50
+562 y(2.)41 b(rules)18 b(are)g(encapsulated,)e(there)i(are)g(no)g
+(\252hidden\272)e(operators)54 662 y(or)j(\252hidden\272)g(algorithms;)
+-50 834 y(3.)41 b(implementation)19 b(hints)i(\(e.g.,)f(enforcers\))g
+(are)h(deduced)e(au-)54 933 y(tomatically;)-50 1105 y(4.)41
+b(and)19 b(it)i(has)g(ef)o(\256cient)e(implementations.)-29
+1276 y(W)-7 b(e)26 b(have)e(explained)f(how)i(the)f(\256rst)i(three)f
+(points)f(are)h(impor)n(-)-113 1376 y(tant)20 b(for)f(simplifying)f
+(rule)h(speci\256cations)g(and)h(making)e(rule)h(sets)-112
+1475 y(less)27 b(brittle)g(for)f(extensibility)-5 b(.)45
+b(A)27 b(consequence)e(is)i(that)g(Prairie)-112 1575
+y(rules)20 b(are)h(simpler)f(and)g(more)g(robust)f(than)i(rules)f(of)g
+(existing)h(op-)-112 1674 y(timizers)j(\(e.g.,)h(V)-11
+b(olcano\).)40 b(W)-7 b(e)25 b(addressed)f(the)h(fourth)e(point)h(by)
+-112 1774 y(building)g(a)j(P2V)g(pre-processor)c(which)j(uses)h
+(sophisticated)f(al-)-112 1874 y(gorithms)e(to)j(compose)e(and)g
+(compact)g(a)i(Prairie)f(rule)g(set)h(into)e(a)-112 1973
+y(V)-11 b(olcano)23 b(rule)g(set.)39 b(T)-6 b(o)24 b(demonstrate)f(the)
+h(scalability)f(of)h(our)f(ap-)-113 2073 y(proach,)c(we)h(rewrote)g
+(the)g(TI)g(Open)g(OODB)h(rule)e(set)i(as)g(a)g(Prairie)-113
+2173 y(rule)e(set,)h(generated)d(its)k(V)-11 b(olcano)18
+b(counterpart,)f(and)i(showed)g(that)-113 2272 y(the)h(performance)d
+(of)j(the)f(synthesized)g(V)-11 b(olcano)19 b(rule)h(set)g(closely)-112
+2372 y(matches)f(the)i(hand-crafted)c(V)-11 b(olcano)19
+b(rule)h(set.)-29 2473 y(Our)25 b(future)g(work)g(will)i(concentrate)d
+(on)i(developing)d(higher)n(-)-120 2573 y(level)15 b(abstractions)e
+(using)h(Prairie,)h(including)d(automatically)h(gen-)-116
+2672 y(erating)k(Prairie)h(rule)f(sets,)i(and)e(combining)f(multiple)h
+(Prairie)g(rule)-112 2772 y(sets)k(to)f(automatically)f(generate)g(ef)o
+(\256cient)g(optimizers.)-112 3059 y FB(Acknowledgments)-112
+3247 y FG(W)-7 b(e)30 b(wish)g(to)g(thank)f(T)-6 b(exas)30
+b(Instruments,)g(Inc.)f(for)g(making)g(the)-119 3347
+y(Open)14 b(OODB)i(source)e(code)g(available)g(to)h(us.)25
+b(Comments)14 b(by)h(Jos)5 b(\302)-33 b(e)-112 3447 y(Blakeley)-5
+b(,)23 b(Anne)h(Ngu,)g(V)-5 b(ivek)23 b(Singhal,)h(Thomas)f(W)-7
+b(oo)24 b(and)g(the)-113 3546 y(anonymous)18 b(referees)h(greatly)h
+(improved)e(the)i(quality)f(of)h(the)g(pa-)-112 3646
+y(per)-5 b(.)-112 3934 y FB(Refer)n(ences)-71 4122 y
+FG([1])40 b(D.)16 b(S.)f(Batory)-5 b(.)19 b(Building)14
+b(blocks)g(of)h(database)f(management)67 4221 y(systems.)26
+b(T)-6 b(echnical)18 b(Report)g(TR\26187\26123,)e(The)i(University)67
+4321 y(of)i(T)-6 b(exas)20 b(at)h(Austin,)f(February)f(1988.)-71
+4493 y([2])40 b(Jos)5 b(\302)-33 b(e)37 b(A.)g(Blakeley)-5
+b(,)39 b(W)m(illiam)e(J.)g(McKenna,)i(and)d(Goetz)67
+4592 y(Graefe.)j(Experiences)21 b(building)f(the)j(Open)e(OODB)i(query)
+67 4692 y(optimizer)-5 b(.)27 b(In)19 b FF(Pr)m(oceedings)e(1993)h(ACM)
+i(SIGMOD)f(Inter)n(-)67 4792 y(national)27 b(Confer)m(ence)h(on)g
+(Management)e(of)i(Data)p FG(,)i(pages)67 4891 y(287\261296,)17
+b(W)-7 b(ashington,)20 b(May)f(1993.)-71 5063 y([3])40
+b(Dean)33 b(Daniels,)k(Patricia)c(Selinger)m(,)j(Laura)c(Haas,)37
+b(Bruce)67 5163 y(Lindsay)-5 b(,)25 b(C.)g(Mohan,)g(Adrian)f(W)-7
+b(alker)m(,)26 b(and)e(Paul)h(W)m(ilms.)67 5263 y(An)14
+b(introduction)c(to)k(distributed)e(query)g(compilation)f(in)j(R)1797
+5232 y Ff(\003)1835 5263 y FG(.)2224 21 y(In)22 b FF(Pr)m(oceedings)f
+(2nd)h(International)e(Confer)m(ence)i(on)h(Dis-)2224
+120 y(tributed)k(Databases)p FG(,)i(pages)f(291\261309,)f(Berlin,)j
+(Septem-)2224 220 y(ber)19 b(1982.)2085 386 y([4])41
+b(Dinesh)29 b(Das)h(and)e(Don)h(Batory)-5 b(.)74 b(Prairie:)45
+b(An)29 b(algebraic)2224 486 y(framework)37 b(for)j(rule)g
+(speci\256cation)f(in)h(query)f(optimiz-)2224 585 y(ers.)92
+b(In)33 b FF(Pr)m(oceedings)e(of)i(the)g(W)-8 b(orkshop)33
+b(on)f(Database)2224 685 y(Query)14 b(Optimizer)g(Generators)g(and)g
+(Rule-Based)e(Optimiz-)2224 784 y(ers)p FG(,)21 b(pages)e(139\261154,)e
+(Dallas,)k(September)e(1993.)2085 950 y([5])41 b(Dinesh)28
+b(Das)h(and)f(Don)g(Batory)-5 b(.)69 b(Prairie:)43 b(A)29
+b(rule)f(speci-)2224 1050 y(\256cation)h(framework)e(for)i(query)f
+(optimizers.)75 b(T)-6 b(echnical)2224 1150 y(Report)22
+b(TR)h(94\26116,)e(The)h(University)g(of)g(T)-6 b(exas)22
+b(at)h(Austin,)2224 1249 y(May)d(1994.)2085 1415 y([6])41
+b(Johann)15 b(Christoph)h(Freytag.)21 b(A)d(rule-based)d(view)h(of)g
+(query)2224 1515 y(optimization.)80 b(In)30 b FF(Pr)m(oceedings)f(1987)
+h(ACM)h(SIGMOD)2224 1615 y(International)37 b(Confer)m(ence)j(on)f
+(Management)f(of)j(Data)p FG(,)2224 1714 y(pages)19 b(173\261180,)e
+(San)k(Francisco,)e(May)h(1987.)2085 1880 y([7])41 b(Goetz)33
+b(Graefe.)94 b(V)-11 b(olcano,)36 b(an)d(extensible)g(and)g(parallel)
+2224 1980 y(query)23 b(evaluation)g(system.)53 b(T)-6
+b(echnical)24 b(Report)h(CU\261CS\261)2224 2080 y(481\26190,)14
+b(University)i(of)g(Colorado)f(at)i(Boulder)m(,)e(July)i(1990.)2085
+2246 y([8])41 b(Goetz)24 b(Graefe.)48 b(Query)24 b(evaluation)e
+(techniques)h(for)h(lar)o(ge)2224 2345 y(databases.)66
+b FF(ACM)28 b(Computing)f(Surveys)p FG(,)i(25\(2\):73\261170,)2224
+2445 y(June)20 b(1993.)2085 2611 y([9])41 b(Goetz)29
+b(Graefe)h(and)f(David)g(J.)i(DeW)m(itt.)78 b(The)30
+b(EXODUS)2224 2710 y(optimizer)21 b(generator)-5 b(.)42
+b(In)23 b FF(Pr)m(oceedings)e(1987)h(ACM)i(SIG-)2224
+2810 y(MOD)40 b(International)d(Confer)m(ence)i(on)g(Management)f(of)
+2224 2910 y(Data)p FG(,)19 b(pages)h(387\261394,)d(San)j(Francisco,)g
+(May)g(1987.)2044 3076 y([10])40 b(L.)23 b(M.)g(Haas,)h(J.)g(C.)g
+(Freytag,)e(G.)i(M.)f(Lohman,)f(and)g(H.)i(Pi-)2224 3175
+y(rahesh.)31 b(Extensible)20 b(query)f(processing)h(in)h(Starburst.)32
+b(Re-)2224 3275 y(search)20 b(Report)g(RJ)i(6610,)e(IBM)h(Almaden)e
+(Research)i(Cen-)2224 3375 y(ter)m(,)e(December)g(1988.)2047
+3541 y([1)m(1])40 b(P)-9 b(.)33 b(G.)g(Selinger)m(,)h(M.)f(M.)g
+(Astrahan,)i(D.)e(D.)g(Chamberlin,)2224 3640 y(R.)28
+b(A.)h(Lorie,)g(and)f(T)-6 b(.)28 b(G.)g(Price.)69 b(Access)29
+b(path)e(selection)2224 3740 y(in)d(a)g(relational)f(database)g
+(management)f(system.)47 b(In)23 b FF(Pr)m(o-)2224 3840
+y(ceedings)k(1979)g(ACM)i(SIGMOD)f(International)e(Confer)n(-)2224
+3939 y(ence)g(on)h(Management)e(of)i(Data)p FG(,)h(pages)e(23\26134,)g
+(Boston,)2224 4039 y(May)20 b(1979.)2044 4205 y([12])40
+b(Michael)30 b(Stonebraker)f(and)i(Lawrence)f(A.)i(Rowe.)84
+b(The)2224 4305 y(design)25 b(of)h(Postgres.)60 b(In)26
+b FF(Pr)m(oceedings)f(1986)g(ACM)i(SIG-)2224 4404 y(MOD)40
+b(International)d(Confer)m(ence)i(on)g(Management)f(of)2224
+4504 y(Data)p FG(,)19 b(pages)h(340\261355,)d(W)-7 b(ashington,)19
+b(May)h(1986.)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex/contrib/utthesis/ICDE-11/results.tex b/macros/latex/contrib/utthesis/ICDE-11/results.tex
new file mode 100644
index 0000000000..d9ae183329
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/results.tex
@@ -0,0 +1,473 @@
+\section{Experimental results}
+\label{sec:results}
+
+This section presents experimental results which demonstrate the value
+of Prairie in specifying rule sets of rule-based optimizers. Our
+experiments consist of specifying rule-based optimizers using Prairie
+and generating optimizers using the P2V pre-processor and the
+optimizer-generator paradigm of Figure~\ref{fig:ptovmodel}.
+
+In \cite{Das93}, we presented an implementation of a centralized
+relational query optimizer using Prairie. Using the P2V translator, we
+translated this to Volcano format and optimized several queries using
+the resultant optimizer. For comparison, we hand-coded the same
+optimizer directly in Volcano. The results presented there showed
+that, using Prairie (compared to directly using Volcano) resulted in
+approximately 50\% savings in lines of code with negligible (less than
+5\%) increase in query optimization time. However, the optimizer was
+quite small in terms of the number of operators, algorithms and rules.
+
+For a more realistic evaluation of Prairie, we needed answers to
+the following questions:
+\begin{enumerate}
+\item Is Prairie adequate for large-scale rule sets?
+\item How is programmer productivity enhanced by the high-level
+ abstractions of Prairie?
+\item Can Prairie rule sets be translated automatically into
+ efficient implementations?
+\end{enumerate}
+
+We addressed the first question by using the Texas Instruments Open
+OODB query optimizer rule set, which has the largest publicly
+available rule set. We describe this optimizer in the next section,
+and then give our assessments to the last two questions in subsequent
+sections.
+
+\subsection{The Texas Instruments Open OODB query optimizer}
+\label{sec:oodb}
+
+The Texas Instruments Open Object-Oriented Database Management System
+is an open, extensible, object-oriented database system which provides
+users an architectural framework that is configurable in an incremental
+manner. The query optimizer in the Open OODB \cite{Blak93} is
+generated using Volcano. It is written as a set of trans\_rules and
+impl\_rules that define the algebra of an object-oriented database
+system. Currently, there are 17 transformation rules and 9
+implementation rules together with about $13,000$ lines of code for
+support functions; this, of course, can be changed by an Open OODB user
+for specific needs.
+
+\subsection{Programmer productivity}
+\label{sec:productivity}
+
+Programmer productivity can be measured in different ways. An
+admittedly simplistic metric is the number of lines of code that must
+be written. But there are also less tangible measures, such as the
+amount of conceptual effort needed to understand a particular
+programming task. Our experience with the Open OODB query optimizer
+suggests that Prairie excels on the latter, while offering modest
+reductions in the volume of code that needs to be written.
+
+We converted by hand the Open OODB query optimizer's Volcano
+specifications to Prairie. This was a non-trivial task because of the
+relatively large size of the rule set and the complexity of the support
+functions. This was where we found Prairie helped in conceptually
+simplifying the rules and actions. We then used our P2V pre-processor
+to reconstitute these Prairie specifications as Volcano
+specifications. As described in Section~\ref{sec:ptov}, this process
+involved a considerable level of complexity, partly because the Prairie
+specification had 22 T-rules and 11 I-rules compared to 17 trans\_rules
+and 9 impl\_rules in the Volcano specification; the reconstituted
+Volcano specification had the same number of trans\_rules and
+impl\_rules as the original hand-coded specification.
+
+Converting the Open OODB optimizer rule set into Prairie format
+actually simplified its specification as the complexities of the
+Volcano model were removed. The reduction in lines of code was modest
+--- there was about a 10\% savings.\footnote{The original Volcano
+specification had $13,400$ lines, the Prairie specification had
+$12,100$ lines, and the P2V-generated Volcano specification had
+$15,800$ lines.} However, as mentioned above, savings in lines of code
+do not adequately reflect increases in programmer productivity. We
+found the encapsulated specifications of Prairie --- namely, the use of
+a single descriptor and fewer explicit support functions --- made rule
+programming \emph{much} easier.
+
+\subsection{Performance results using the Open OODB optimizer}
+\label{sec:oodbexp}
+
+\newsavebox{\Eone}
+\newsavebox{\Etwo}
+\newsavebox{\Ethree}
+\newsavebox{\Efour}
+
+\begin{lrbox}{\Eone}
+\begin{minipage}[b]{1.9cm}
+\psset{unit=4mm}
+\psset{nodesep=1pt}
+\tiny
+\begin{center}
+\begin{pspicture}(0,0)(4,4)
+\rput(0,0){\rnode{cl1}{$\textit{C}_1$}}
+\rput(0,1){\rnode{getcl1}{RET}}
+\ncline{-}{cl1}{getcl1}
+\rput(2,0){\rnode{cl2}{$\textit{C}_2$}}
+\rput(2,1){\rnode{getcl2}{RET}}
+\ncline{-}{cl2}{getcl2}
+\rput(1,2){\rnode{joingetcl1getcl2}{JOIN}}
+\ncline{-}{joingetcl1getcl2}{getcl1}
+\ncline{-}{joingetcl1getcl2}{getcl2}
+\rput{45}(2,3){\rnode{dots}{$\ldots$}}
+\ncline{-}{joingetcl1getcl2}{dots}
+\rput(4,3){\rnode{getcln}{RET}}
+\rput(4,2){\rnode{cln}{$\textit{C}_n$}}
+\ncline{-}{cln}{getcln}
+\rput(3,4){\rnode{root}{JOIN}}
+\ncline{-}{root}{dots}
+\ncline{-}{root}{getcln}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\Etwo}
+\begin{minipage}[b]{1.9cm}
+\psset{unit=4mm}
+\psset{nodesep=1pt}
+\tiny
+\begin{center}
+\begin{pspicture}(0,0)(4,5)
+\rput(0,0){\rnode{cl1}{$\textit{C}_1$}}
+\rput(0,1){\rnode{getcl1}{RET}}
+\ncline{-}{cl1}{getcl1}
+\rput(2,0){\rnode{cl2}{$\textit{C}_2$}}
+\rput(2,1){\rnode{getcl2}{RET}}
+\ncline{-}{cl2}{getcl2}
+\rput(0,2){\rnode{matgetcl1}{MAT}}
+\ncline{-}{getcl1}{matgetcl1}
+\rput(2,2){\rnode{matgetcl2}{MAT}}
+\ncline{-}{getcl2}{matgetcl2}
+\rput(1,3){\rnode{joinmatgetcl1matgetcl2}{JOIN}}
+\ncline{-}{joinmatgetcl1matgetcl2}{matgetcl1}
+\ncline{-}{joinmatgetcl1matgetcl2}{matgetcl2}
+\rput{45}(2,4){\rnode{dots}{$\ldots$}}
+\ncline{-}{joinmatgetcl1matgetcl2}{dots}
+\rput(4,3){\rnode{getcln}{RET}}
+\rput(4,2){\rnode{cln}{$\textit{C}_n$}}
+\ncline{-}{cln}{getcln}
+\rput(4,4){\rnode{matgetcln}{MAT}}
+\ncline{-}{matgetcln}{getcln}
+\rput(3,5){\rnode{root}{JOIN}}
+\ncline{-}{root}{dots}
+\ncline{-}{root}{matgetcln}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\Ethree}
+\begin{minipage}[b]{1.9cm}
+\psset{unit=4mm}
+\psset{nodesep=1pt}
+\tiny
+\begin{center}
+\begin{pspicture}(0,0)(4,5)
+\rput(0,0){\rnode{cl1}{$\textit{C}_1$}}
+\rput(0,1){\rnode{getcl1}{RET}}
+\ncline{-}{cl1}{getcl1}
+\rput(2,0){\rnode{cl2}{$\textit{C}_2$}}
+\rput(2,1){\rnode{getcl2}{RET}}
+\ncline{-}{cl2}{getcl2}
+\rput(1,2){\rnode{joingetcl1getcl2}{JOIN}}
+\ncline{-}{joingetcl1getcl2}{getcl1}
+\ncline{-}{joingetcl1getcl2}{getcl2}
+\rput{45}(2,3){\rnode{dots}{$\ldots$}}
+\ncline{-}{joingetcl1getcl2}{dots}
+\rput(4,3){\rnode{getcln}{RET}}
+\rput(4,2){\rnode{cln}{$\textit{C}_n$}}
+\ncline{-}{cln}{getcln}
+\rput(3,4){\rnode{root}{JOIN}}
+\ncline{-}{root}{dots}
+\ncline{-}{root}{getcln}
+\rput(3,5){\rnode{select}{SELECT}}
+\ncline{-}{select}{root}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{lrbox}{\Efour}
+\begin{minipage}[b]{1.9cm}
+\psset{unit=4mm}
+\psset{nodesep=1pt}
+\tiny
+\begin{center}
+\begin{pspicture}(0,0)(4,6)
+\rput(0,0){\rnode{cl1}{$\textit{C}_1$}}
+\rput(0,1){\rnode{getcl1}{RET}}
+\ncline{-}{cl1}{getcl1}
+\rput(2,0){\rnode{cl2}{$\textit{C}_2$}}
+\rput(2,1){\rnode{getcl2}{RET}}
+\ncline{-}{cl2}{getcl2}
+\rput(0,2){\rnode{matgetcl1}{MAT}}
+\ncline{-}{getcl1}{matgetcl1}
+\rput(2,2){\rnode{matgetcl2}{MAT}}
+\ncline{-}{getcl2}{matgetcl2}
+\rput(1,3){\rnode{joinmatgetcl1matgetcl2}{JOIN}}
+\ncline{-}{joinmatgetcl1matgetcl2}{matgetcl1}
+\ncline{-}{joinmatgetcl1matgetcl2}{matgetcl2}
+\rput{45}(2,4){\rnode{dots}{$\ldots$}}
+\ncline{-}{joinmatgetcl1matgetcl2}{dots}
+\rput(4,3){\rnode{getcln}{RET}}
+\rput(4,2){\rnode{cln}{$\textit{C}_n$}}
+\ncline{-}{cln}{getcln}
+\rput(4,4){\rnode{matgetcln}{MAT}}
+\ncline{-}{matgetcln}{getcln}
+\rput(3,5){\rnode{root}{JOIN}}
+\ncline{-}{root}{dots}
+\ncline{-}{root}{matgetcln}
+\rput(3,6){\rnode{select}{SELECT}}
+\ncline{-}{select}{root}
+\end{pspicture}
+\end{center}
+\end{minipage}
+\end{lrbox}
+
+\begin{centeredfigure*}
+\begin{minipage}[b]{9.1cm}
+\myshadowbox{
+\begin{minipage}[b]{8.6cm}
+\subfigure[E1] { \usebox{\Eone} \label{fig:Eone} }
+\vrule
+\subfigure[E2] { \usebox{\Etwo} \label{fig:Etwo} }
+\vrule
+\subfigure[E3] { \usebox{\Ethree} \label{fig:Ethree} }
+\vrule
+\subfigure[E4] { \usebox{\Efour} \label{fig:Efour} }
+\normalsize
+\end{minipage}
+}
+\caption{Expressions used in generating queries for experiments}
+\label{fig:exps}
+\end{minipage}
+\hfill
+\begin{minipage}[b]{7.0cm}
+% Save current figure counter
+\newcounter{savectr}
+\setcounter{savectr}{\value{figure}}
+% Temporarily change the figure to a table.
+\renewcommand{\figurename}{\tablename}
+\setcounter{figure}{\value{table}}
+\scriptsize
+\renewcommand{\multirowsetup}{\centering}
+\newlength{\Lone}
+\settowidth{\Lone}{E4}
+\newlength{\Ltwo}
+\settowidth{\Ltwo}{\textbf{Query}}
+\newlength{\Lthree}
+\settowidth{\Lthree}{\textbf{Indices?}}
+\newlength{\Lfour}
+\settowidth{\Lfour}{\textbf{Expression}}
+\newlength{\Lnum}
+\settowidth{\Lnum}{99}
+\begin{tabular}{|c|c|c|c|c|} \thickhline
+\multirow{2}{\Ltwo}{\textbf{Query}}
+ & \multirow{2}{\Lthree}{\textbf{Indices?}}
+ & \multirow{2}{\Lfour}{\textbf{Expression}}
+ & \multicolumn{2}{c|}{\textbf{Rules matched}} \\ \cline{4-5}
+& & & trans\_rules & impl\_rules \\ \thickhline
+Q1 & No & \multirow{2}{\Lone}{E1} & \multirow{2}{\Lnum}{3}
+ & \multirow{2}{\Lnum}{3} \\ \cline{1-2}
+Q2 & Yes & & & \\ \hline
+Q3 & No & \multirow{2}{\Lone}{E2} & \multirow{2}{\Lnum}{8}
+ & \multirow{2}{\Lnum}{4} \\ \cline{1-2}
+Q4 & Yes & & & \\ \hline
+Q5 & No & \multirow{2}{\Lone}{E3} & \multirow{2}{\Lnum}{9}
+ & \multirow{2}{\Lnum}{5} \\ \cline{1-2}
+Q6 & Yes & & & \\ \hline
+Q7 & No & \multirow{2}{\Lone}{E4} & \multirow{2}{\Lnum}{16}
+ & \multirow{2}{\Lnum}{7} \\ \cline{1-2}
+Q8 & Yes & & & \\ \thickhline
+\end{tabular}
+\caption{Queries used in experiments}
+\label{tab:queries}
+% Change figure back as usual.
+\renewcommand{\figurename}{Figure}
+\setcounter{figure}{\value{savectr}}
+\end{minipage}
+\end{centeredfigure*}
+
+The acid test of Prairie was whether Prairie specifications could be
+translated into efficient optimizer implementations. Our experiments
+using the Open OODB consisted of optimizing 8 different queries using
+the two query optimizers generated, respectively, using Prairie and
+using Volcano directly (in the remainder of this section, we will use
+``Prairie'' and ``Volcano'' to denote these two approaches). There
+were 4 distinct expressions that were used to generate the queries used
+in the experiments; these are shown in Figure~\ref{fig:exps}. Each
+expression represents an $N$-way join query for varying $N$.
+
+The first expression E1 is a simple retrieval and join of base
+classes. The second, E2, is also a join of base classes; however,
+after each class retrieval, an attribute has to be materialized (\ie
+brought into view) before the join. The third and fourth expressions
+(E3 and E4) are the same as the first and second (E1 and E2)
+respectively, except that there is a selection of attributes (the
+select operator is the root of the expressions).\footnote{ The most
+complex expression E4 consists of all operators in the algebra, except
+PROJECT and UNNEST. PROJECT was not considered because it appeared in
+only one impl\_rule and no trans\_rules, and thus, would not affect the
+size of the search space of abstract expressions. UNNEST was not
+considered because it appeared in exactly one trans\_rule and one
+impl\_rule; including it in our queries would have increased the number
+of parameters that could affect our run-times. We preferred to
+concentrate on simple JOIN expressions.}
+
+The algebra that was used in the Prairie and Volcano optimizers for our
+experiments consisted of 5 relational operators SELECT, PROJECT, JOIN,
+RET and UNNEST (for set-valued attributes) and an object-oriented
+operator called MAT (for MATerialize; it is fundamentally a
+pointer-chasing operator for attributes of a class). There were 8
+algorithms.
+
+There are many parameters that can be varied when benchmarking a query
+optimizer. Since our objective was to verify that the Prairie approach
+did not sacrifice efficiency, our criteria for the queries was that
+they test a majority of the rules, with varying properties of the base
+classes. To this end, we tested our optimizer (and the Volcano
+optimizer) with 8 different queries (shown in Table~\ref{tab:queries}).
+The eight queries Q1 through Q8 are derived from the 4 expressions in
+Figure~\ref{fig:exps}. Each expression E1 through E4 is used to obtain
+two queries for a fixed number $N$ of JOINs in the expression. The
+only difference between the two queries obtained from an expression is
+that the first one does not contain any indices on any classes, whereas
+the second one contains a single index on each base class occurring in
+the expression. In expressions where a SELECT is present (E3 and E4),
+the selection predicate is a conjunction of equality predicates
+$\textit{bc}_i == \textit{const}_i$, where $\textit{bc}_i$ is an
+attribute of class $\textit{C}_i$, and $\textit{const}_i$ is a constant
+(we arbitrarily set this to $i$, because its value doesn't affect the
+correctness or performance of the optimizer). In addition, for queries
+with a SELECT and whose base classes have indices (Q6 and Q8 in
+Table~\ref{tab:queries}), the (single) index of each base class was
+chosen to be the attribute referenced in the selection predicate. For
+example, class $\textit{C}_i$ was chosen to have an index on attribute
+$\textit{bc}_i$. The join predicates for each JOIN were chosen at
+random, and were always equality predicates. The choice of JOIN
+predicates was such that the queries corresponded to linear query
+graphs. In the future, we will experiment with non-linear (\eg star)
+query graphs.
+
+Table~\ref{tab:queries} also shows the number of trans\_rules and
+impl\_rules that are matched by each expression. These are the rules
+whose left hand sides match a sub-expression. However, not all the
+rules were necessarily applicable. For instance, an impl\_rule with an
+index scan would not apply to Q3, although it might apply to Q4.
+
+Queries Q1 through Q8 were optimized for increasing number $N$ of
+JOINs. For a fixed number of JOINs in a query, we varied the
+cardinalities of the base classes 5 times, each time generating a query
+with different class properties, and averaged the run-times over the 5
+query instances to generate the per-query optimization time. Thus,
+each point in our graphs represents the average of 5 queries. The
+run-times were measured\footnote{Since the run-times were too small to
+be measured accurately with \texttt{time}, each query instance was
+optimized 3000 times (in a loop) and the total time was divided by 3000
+to get the per-query optimization time.} using the GNU \texttt{time}
+command. All experiments were performed on a lightly loaded DECstation
+5000/200 running Ultrix 4.2.
+
+The optimization times for each query for both approaches (Prairie and
+Volcano) are shown in Figures~\ref{fig:q1} through \ref{fig:q8}. The
+number of joins in each set of graphs was varied to a maximum of 8, or
+until virtual memory was exhausted.
+
+The first set of graphs (Figures~\ref{fig:q1} and \ref{fig:q2})
+shows the performance of a simple relational-type query. The
+optimization times are almost identical between Prairie and Volcano,
+and the notable point is that the presence of an index does not change
+the optimizer's behavior, \ie the two graphs are identical. This
+arises because the optimizer algebra had only two join algorithms
+(pointer join and hash join), neither of which makes use of any
+indices.
+
+The second set of graphs (Figures~\ref{fig:q3} and \ref{fig:q4}) shows
+the results of optimizing Q3 and Q4. Here, as in Figures~\ref{fig:q1}
+and \ref{fig:q2}, the presence (or absence) of indices makes no
+difference. Both the Prairie and Volcano approaches have comparable
+run-times. The sharp jump in the graphs from 7-way to 8-way joins is
+due to the fact that since all optimization is done in main memory,
+dynamic memory allocation (caused by \texttt{malloc} calls) results in
+a lot of thrashing at this point. We speculate that in systems with
+more virtual memory, the graphs will be smoother.
+
+The third and fourth sets of graphs in Figures~\ref{fig:q5} through
+\ref{fig:q8} are optimizations of queries with a selection predicate.
+In these cases, the presence of an index makes a difference if the
+index is referenced in the selection predicate (as we designed). Also,
+in these two figures, the performance of both Prairie and Volcano was
+almost identical, except that Prairie does slightly worse due to the
+larger number of \texttt{malloc} calls that the P2V translator
+introduces. Also, note that we could only go up to 3-way joins before
+virtual memory was exhausted. As the available memory decreases, there
+is increased thrashing (as shown by the sharp changes in slope in the
+plots) resulting in a much slower optimization process.
+
+\begin{centeredfigure}
+\myshadowbox
+{
+\setlength{\tabcolsep}{0pt}
+\begin{tabular}{ll}
+\subfigure[Query 1] { \begin{centeredinhalfminipage}
+ \vspace{3mm}
+ \epsfig{file=runtime_Q1.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q1} }
+&
+\subfigure[Query 2] { \begin{centeredinhalfminipage}
+ \vspace{3mm}
+ \epsfig{file=runtime_Q2.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q2} }
+\\ \hline
+\subfigure[Query 3] { \begin{centeredinhalfminipage}
+ \vspace{4mm}
+ \epsfig{file=runtime_Q3.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q3} }
+&
+\subfigure[Query 4] { \begin{centeredinhalfminipage}
+ \vspace{4mm}
+ \epsfig{file=runtime_Q4.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q4} }
+\\ \hline
+\subfigure[Query 5] { \begin{centeredinhalfminipage}
+ \vspace{4mm}
+ \epsfig{file=runtime_Q5.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q5} }
+&
+\subfigure[Query 6] { \begin{centeredinhalfminipage}
+ \vspace{4mm}
+ \epsfig{file=runtime_Q6.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q6} }
+\\ \hline
+\subfigure[Query 7] { \begin{centeredinhalfminipage}
+ \vspace{4mm}
+ \epsfig{file=runtime_Q7.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q7} }
+&
+\subfigure[Query 8] { \begin{centeredinhalfminipage}
+ \vspace{4mm}
+ \epsfig{file=runtime_Q8.ps,width=3.0cm}
+ \end{centeredinhalfminipage}
+ \label{fig:q8} }
+\end{tabular}
+}
+\caption{Query optimization times for Q1 through Q8}
+\label{fig:e4}
+\end{centeredfigure}
+
+In all four sets of plots, we can see that Prairie performs with almost
+(less than $5\%$ variation) the same efficiency as Volcano. In extreme
+cases, when memory is scarce, Prairie runs more slowly (about $15\%$)
+(\eg Figure~\ref{fig:q6}), but we believe that this situation already
+represents a serious bottleneck for both Volcano and Prairie.
+
+The results presented in this section show that Prairie optimizers
+need not sacrifice efficiency for clarity, even for large rule sets.
+More research and validation is necessary to verify that Prairie is
+an efficient tool for optimizer specification.
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q1.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q1.ps
new file mode 100644
index 0000000000..3d1d8e2ff0
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q1.ps
@@ -0,0 +1,519 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q1.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 418 m
+621 537 l
+822 661 l
+1023 789 l
+1225 909 l
+1426 1046 l
+1627 1183 l
+1828 1320 l
+2030 1449 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 537 30 0 360 arc
+gsave fill grestore
+stroke
+822 661 30 0 360 arc
+gsave fill grestore
+stroke
+1023 789 30 0 360 arc
+gsave fill grestore
+stroke
+1225 909 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1046 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1183 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1320 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1449 30 0 360 arc
+gsave fill grestore
+stroke
+420 421 m
+621 541 l
+822 670 l
+1023 801 l
+1225 935 l
+1426 1066 l
+1627 1229 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 451 m
+390 421 l
+420 391 l
+450 421 l
+420 451 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 571 m
+591 541 l
+621 511 l
+651 541 l
+621 571 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 700 m
+792 670 l
+822 640 l
+852 670 l
+822 700 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 831 m
+993 801 l
+1023 771 l
+1053 801 l
+1023 831 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 965 m
+1195 935 l
+1225 905 l
+1255 935 l
+1225 965 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1096 m
+1396 1066 l
+1426 1036 l
+1456 1066 l
+1426 1096 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1259 m
+1597 1229 l
+1627 1199 l
+1657 1229 l
+1627 1259 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q2.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q2.ps
new file mode 100644
index 0000000000..2ae8c69fd1
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q2.ps
@@ -0,0 +1,507 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q2.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 611 m
+430 611 l
+420 846 m
+430 846 l
+420 1081 m
+430 1081 l
+420 1315 m
+430 1315 l
+420 1550 m
+430 1550 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 611 m
+2020 611 l
+2030 846 m
+2020 846 l
+2030 1081 m
+2020 1081 l
+2030 1315 m
+2020 1315 l
+2030 1550 m
+2020 1550 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 846 m
+440 846 l
+420 1315 m
+440 1315 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 846 m
+2010 846 l
+2030 1315 m
+2010 1315 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 846 m
+gsave
+348 846 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 1315 m
+gsave
+348 1315 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+420 418 m
+621 539 l
+822 664 l
+1023 783 l
+1225 906 l
+1426 1037 l
+1627 1176 l
+1828 1304 l
+2030 1451 l
+stroke
+420 418 30 0 360 arc
+gsave fill grestore
+stroke
+621 539 30 0 360 arc
+gsave fill grestore
+stroke
+822 664 30 0 360 arc
+gsave fill grestore
+stroke
+1023 783 30 0 360 arc
+gsave fill grestore
+stroke
+1225 906 30 0 360 arc
+gsave fill grestore
+stroke
+1426 1037 30 0 360 arc
+gsave fill grestore
+stroke
+1627 1176 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1304 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1451 30 0 360 arc
+gsave fill grestore
+stroke
+420 412 m
+621 533 l
+822 661 l
+1023 796 l
+1225 926 l
+1426 1063 l
+1627 1212 l
+1828 1355 l
+2030 1504 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 442 m
+390 412 l
+420 382 l
+450 412 l
+420 442 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 563 m
+591 533 l
+621 503 l
+651 533 l
+621 563 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 691 m
+792 661 l
+822 631 l
+852 661 l
+822 691 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 826 m
+993 796 l
+1023 766 l
+1053 796 l
+1023 826 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 956 m
+1195 926 l
+1225 896 l
+1255 926 l
+1225 956 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 1093 m
+1396 1063 l
+1426 1033 l
+1456 1063 l
+1426 1093 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 1242 m
+1597 1212 l
+1627 1182 l
+1657 1212 l
+1627 1242 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1385 m
+1798 1355 l
+1828 1325 l
+1858 1355 l
+1828 1385 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1534 m
+2000 1504 l
+2030 1474 l
+2060 1504 l
+2030 1534 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q3.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q3.ps
new file mode 100644
index 0000000000..8ad7f6b23a
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q3.ps
@@ -0,0 +1,561 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q3.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 401 m
+621 489 l
+822 578 l
+1023 672 l
+1225 762 l
+1426 865 l
+1627 969 l
+1828 1076 l
+2030 1574 l
+stroke
+420 401 30 0 360 arc
+gsave fill grestore
+stroke
+621 489 30 0 360 arc
+gsave fill grestore
+stroke
+822 578 30 0 360 arc
+gsave fill grestore
+stroke
+1023 672 30 0 360 arc
+gsave fill grestore
+stroke
+1225 762 30 0 360 arc
+gsave fill grestore
+stroke
+1426 865 30 0 360 arc
+gsave fill grestore
+stroke
+1627 969 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1076 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1574 30 0 360 arc
+gsave fill grestore
+stroke
+420 402 m
+621 485 l
+822 568 l
+1023 644 l
+1225 736 l
+1426 821 l
+1627 918 l
+1828 1019 l
+2030 1511 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 432 m
+390 402 l
+420 372 l
+450 402 l
+420 432 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 515 m
+591 485 l
+621 455 l
+651 485 l
+621 515 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 598 m
+792 568 l
+822 538 l
+852 568 l
+822 598 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 674 m
+993 644 l
+1023 614 l
+1053 644 l
+1023 674 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 766 m
+1195 736 l
+1225 706 l
+1255 736 l
+1225 766 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 851 m
+1396 821 l
+1426 791 l
+1456 821 l
+1426 851 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 948 m
+1597 918 l
+1627 888 l
+1657 918 l
+1627 948 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1049 m
+1798 1019 l
+1828 989 l
+1858 1019 l
+1828 1049 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1541 m
+2000 1511 l
+2030 1481 l
+2060 1511 l
+2030 1541 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q4.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q4.ps
new file mode 100644
index 0000000000..cab28dc420
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q4.ps
@@ -0,0 +1,549 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q4.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+621 376 m
+621 396 l
+822 376 m
+822 396 l
+1023 376 m
+1023 396 l
+1225 376 m
+1225 396 l
+1426 376 m
+1426 396 l
+1627 376 m
+1627 396 l
+1828 376 m
+1828 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+621 1785 m
+621 1765 l
+822 1785 m
+822 1765 l
+1023 1785 m
+1023 1765 l
+1225 1785 m
+1225 1765 l
+1426 1785 m
+1426 1765 l
+1627 1785 m
+1627 1765 l
+1828 1785 m
+1828 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+621 276 m
+gsave
+621 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+822 276 m
+gsave
+822 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+1023 276 m
+gsave
+1023 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+1225 276 m
+gsave
+1225 276 translate
+0 rotate
+0 -40 m
+(4) CS
+(4) show
+grestore
+newpath
+1426 276 m
+gsave
+1426 276 translate
+0 rotate
+0 -40 m
+(5) CS
+(5) show
+grestore
+newpath
+1627 276 m
+gsave
+1627 276 translate
+0 rotate
+0 -40 m
+(6) CS
+(6) show
+grestore
+newpath
+1828 276 m
+gsave
+1828 276 translate
+0 rotate
+0 -40 m
+(7) CS
+(7) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(8) CS
+(8) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(1000) RJ
+(1000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(3000) RJ
+(3000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(5000) RJ
+(5000) show
+grestore
+newpath
+420 400 m
+621 492 l
+822 575 l
+1023 669 l
+1225 759 l
+1426 866 l
+1627 962 l
+1828 1069 l
+2030 1578 l
+stroke
+420 400 30 0 360 arc
+gsave fill grestore
+stroke
+621 492 30 0 360 arc
+gsave fill grestore
+stroke
+822 575 30 0 360 arc
+gsave fill grestore
+stroke
+1023 669 30 0 360 arc
+gsave fill grestore
+stroke
+1225 759 30 0 360 arc
+gsave fill grestore
+stroke
+1426 866 30 0 360 arc
+gsave fill grestore
+stroke
+1627 962 30 0 360 arc
+gsave fill grestore
+stroke
+1828 1069 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1578 30 0 360 arc
+gsave fill grestore
+stroke
+420 400 m
+621 484 l
+822 567 l
+1023 645 l
+1225 735 l
+1426 823 l
+1627 915 l
+1828 1024 l
+2030 1517 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 430 m
+390 400 l
+420 370 l
+450 400 l
+420 430 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+621 514 m
+591 484 l
+621 454 l
+651 484 l
+621 514 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+822 597 m
+792 567 l
+822 537 l
+852 567 l
+822 597 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1023 675 m
+993 645 l
+1023 615 l
+1053 645 l
+1023 675 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1225 765 m
+1195 735 l
+1225 705 l
+1255 735 l
+1225 765 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1426 853 m
+1396 823 l
+1426 793 l
+1456 823 l
+1426 853 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1627 945 m
+1597 915 l
+1627 885 l
+1657 915 l
+1627 945 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1828 1054 m
+1798 1024 l
+1828 994 l
+1858 1024 l
+1828 1054 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1547 m
+2000 1517 l
+2030 1487 l
+2060 1517 l
+2030 1547 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q5.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q5.ps
new file mode 100644
index 0000000000..93af8edb1f
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q5.ps
@@ -0,0 +1,375 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q5.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 552 m
+430 552 l
+420 728 m
+430 728 l
+420 904 m
+430 904 l
+420 1081 m
+430 1081 l
+420 1257 m
+430 1257 l
+420 1433 m
+430 1433 l
+420 1609 m
+430 1609 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 552 m
+2020 552 l
+2030 728 m
+2020 728 l
+2030 904 m
+2020 904 l
+2030 1081 m
+2020 1081 l
+2030 1257 m
+2020 1257 l
+2030 1433 m
+2020 1433 l
+2030 1609 m
+2020 1609 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 728 m
+440 728 l
+420 1081 m
+440 1081 l
+420 1433 m
+440 1433 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 728 m
+2010 728 l
+2030 1081 m
+2010 1081 l
+2030 1433 m
+2010 1433 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 728 m
+gsave
+348 728 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 1081 m
+gsave
+348 1081 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1433 m
+gsave
+348 1433 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-2 1080 m
+gsave
+-2 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 424 m
+956 511 l
+1493 671 l
+2030 1778 l
+stroke
+420 424 30 0 360 arc
+gsave fill grestore
+stroke
+956 511 30 0 360 arc
+gsave fill grestore
+stroke
+1493 671 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1778 30 0 360 arc
+gsave fill grestore
+stroke
+420 426 m
+956 522 l
+1493 688 l
+2030 1737 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 456 m
+390 426 l
+420 396 l
+450 426 l
+420 456 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 552 m
+926 522 l
+956 492 l
+986 522 l
+956 552 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 718 m
+1463 688 l
+1493 658 l
+1523 688 l
+1493 718 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1767 m
+2000 1737 l
+2030 1707 l
+2060 1737 l
+2030 1767 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q6.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q6.ps
new file mode 100644
index 0000000000..b504816dfd
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q6.ps
@@ -0,0 +1,401 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q6.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 386 l
+956 376 m
+956 386 l
+1493 376 m
+1493 386 l
+2030 376 m
+2030 386 l
+420 1785 m
+420 1775 l
+956 1785 m
+956 1775 l
+1493 1785 m
+1493 1775 l
+2030 1785 m
+2030 1775 l
+stroke
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 415 m
+956 490 l
+1493 633 l
+2030 1651 l
+stroke
+420 415 30 0 360 arc
+gsave fill grestore
+stroke
+956 490 30 0 360 arc
+gsave fill grestore
+stroke
+1493 633 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1651 30 0 360 arc
+gsave fill grestore
+stroke
+420 416 m
+956 493 l
+1493 631 l
+2030 1462 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 446 m
+390 416 l
+420 386 l
+450 416 l
+420 446 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 523 m
+926 493 l
+956 463 l
+986 493 l
+956 523 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 661 m
+1463 631 l
+1493 601 l
+1523 631 l
+1493 661 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1492 m
+2000 1462 l
+2030 1432 l
+2060 1462 l
+2030 1492 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q7.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q7.ps
new file mode 100644
index 0000000000..a5cda8ee82
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q7.ps
@@ -0,0 +1,396 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q7.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+-83 1080 m
+gsave
+-83 1080 translate
+90 rotate
+0 0 m
+(CPU time \(microseconds\)) CS
+(CPU time \(microseconds\)) show
+grestore
+newpath
+420 425 m
+956 510 l
+1493 670 l
+2030 1637 l
+stroke
+420 425 30 0 360 arc
+gsave fill grestore
+stroke
+956 510 30 0 360 arc
+gsave fill grestore
+stroke
+1493 670 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1637 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 501 l
+1493 648 l
+2030 1470 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 531 m
+926 501 l
+956 471 l
+986 501 l
+956 531 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 678 m
+1463 648 l
+1493 618 l
+1523 648 l
+1493 678 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1500 m
+2000 1470 l
+2030 1440 l
+2060 1470 l
+2030 1500 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/runtime_Q8.ps b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q8.ps
new file mode 100644
index 0000000000..f3054db88b
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/runtime_Q8.ps
@@ -0,0 +1,384 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 50 50 500 375
+%%Creator: ACE/gr (xmgr) v2.10
+%%Title: runtime.Q8.ps
+%%EndComments
+/m {moveto} bind def
+/l {lineto} bind def
+/RJ {
+ stringwidth neg exch neg exch
+ rmoveto
+} bind def
+/CS {
+ stringwidth
+ 2 div neg exch 2 div neg exch
+ rmoveto
+} bind def
+0.25 0.25 scale
+1 setlinecap
+/Times-Italic findfont
+120 scalefont
+ setfont
+[] 0 setdash
+420 376 m
+420 1785 l
+2030 1785 l
+2030 376 l
+420 376 l
+stroke
+[] 0 setdash
+420 376 m
+420 396 l
+956 376 m
+956 396 l
+1493 376 m
+1493 396 l
+2030 376 m
+2030 396 l
+420 1785 m
+420 1765 l
+956 1785 m
+956 1765 l
+1493 1785 m
+1493 1765 l
+2030 1785 m
+2030 1765 l
+/Times-Italic findfont
+120 scalefont
+ setfont
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+420 276 m
+gsave
+420 276 translate
+0 rotate
+0 -40 m
+(0) CS
+(0) show
+grestore
+newpath
+956 276 m
+gsave
+956 276 translate
+0 rotate
+0 -40 m
+(1) CS
+(1) show
+grestore
+newpath
+1493 276 m
+gsave
+1493 276 translate
+0 rotate
+0 -40 m
+(2) CS
+(2) show
+grestore
+newpath
+2030 276 m
+gsave
+2030 276 translate
+0 rotate
+0 -40 m
+(3) CS
+(3) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+1225 76 m
+gsave
+1225 76 translate
+0 rotate
+0 0 m
+(Number of joins) CS
+(Number of joins) show
+grestore
+newpath
+420 376 m
+430 376 l
+420 517 m
+430 517 l
+420 658 m
+430 658 l
+420 799 m
+430 799 l
+420 940 m
+430 940 l
+420 1081 m
+430 1081 l
+420 1221 m
+430 1221 l
+420 1362 m
+430 1362 l
+420 1503 m
+430 1503 l
+420 1644 m
+430 1644 l
+420 1785 m
+430 1785 l
+2030 376 m
+2020 376 l
+2030 517 m
+2020 517 l
+2030 658 m
+2020 658 l
+2030 799 m
+2020 799 l
+2030 940 m
+2020 940 l
+2030 1081 m
+2020 1081 l
+2030 1221 m
+2020 1221 l
+2030 1362 m
+2020 1362 l
+2030 1503 m
+2020 1503 l
+2030 1644 m
+2020 1644 l
+2030 1785 m
+2020 1785 l
+stroke
+420 376 m
+440 376 l
+420 658 m
+440 658 l
+420 940 m
+440 940 l
+420 1221 m
+440 1221 l
+420 1503 m
+440 1503 l
+420 1785 m
+440 1785 l
+2030 376 m
+2010 376 l
+2030 658 m
+2010 658 l
+2030 940 m
+2010 940 l
+2030 1221 m
+2010 1221 l
+2030 1503 m
+2010 1503 l
+2030 1785 m
+2010 1785 l
+/Times-Roman findfont
+120 scalefont
+ setfont
+stroke
+348 376 m
+gsave
+348 376 translate
+0 rotate
+0 -40 m
+(0) RJ
+(0) show
+grestore
+newpath
+348 658 m
+gsave
+348 658 translate
+0 rotate
+0 -40 m
+(2000) RJ
+(2000) show
+grestore
+newpath
+348 940 m
+gsave
+348 940 translate
+0 rotate
+0 -40 m
+(4000) RJ
+(4000) show
+grestore
+newpath
+348 1221 m
+gsave
+348 1221 translate
+0 rotate
+0 -40 m
+(6000) RJ
+(6000) show
+grestore
+newpath
+348 1503 m
+gsave
+348 1503 translate
+0 rotate
+0 -40 m
+(8000) RJ
+(8000) show
+grestore
+newpath
+348 1785 m
+gsave
+348 1785 translate
+0 rotate
+0 -40 m
+(10000) RJ
+(10000) show
+grestore
+newpath
+420 421 m
+956 504 l
+1493 650 l
+2030 1549 l
+stroke
+420 421 30 0 360 arc
+gsave fill grestore
+stroke
+956 504 30 0 360 arc
+gsave fill grestore
+stroke
+1493 650 30 0 360 arc
+gsave fill grestore
+stroke
+2030 1549 30 0 360 arc
+gsave fill grestore
+stroke
+420 420 m
+956 502 l
+1493 647 l
+2030 1475 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+420 450 m
+390 420 l
+420 390 l
+450 420 l
+420 450 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+956 532 m
+926 502 l
+956 472 l
+986 502 l
+956 532 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1493 677 m
+1463 647 l
+1493 617 l
+1523 647 l
+1493 677 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+2030 1505 m
+2000 1475 l
+2030 1445 l
+2060 1475 l
+2030 1505 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+929 1359 m
+929 1659 l
+1771 1659 l
+1771 1359 l
+929 1359 l
+stroke
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1584 m
+1259 1584 l
+stroke
+995 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1259 1584 30 0 360 arc
+gsave fill grestore
+stroke
+1325 1584 m
+gsave
+1325 1584 translate
+0 rotate
+0 -40 m
+(Prairie) show
+grestore
+newpath
+/Times-Roman findfont
+120 scalefont
+ setfont
+995 1434 m
+1259 1434 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+995 1464 m
+965 1434 l
+995 1404 l
+1025 1434 l
+995 1464 l
+stroke
+1.000000 1.000000 1.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+closepath
+gsave eofill grestore
+stroke
+0.000000 0.000000 0.000000 setrgbcolor
+1259 1464 m
+1229 1434 l
+1259 1404 l
+1289 1434 l
+1259 1464 l
+stroke
+1325 1434 m
+gsave
+1325 1434 translate
+0 rotate
+0 -40 m
+(Volcano) show
+grestore
+newpath
+showpage
+%%Trailer
diff --git a/macros/latex/contrib/utthesis/ICDE-11/stretch.sty b/macros/latex/contrib/utthesis/ICDE-11/stretch.sty
new file mode 100644
index 0000000000..202eec903d
--- /dev/null
+++ b/macros/latex/contrib/utthesis/ICDE-11/stretch.sty
@@ -0,0 +1,10 @@
+% Package to implement looser stretch and shrink between words;
+% the new PostScript metrics in PSNFSS implements very tight
+% setting, resulting in a lot of hyphenation and overfull boxes.
+
+\tolerance800
+\emergencystretch2em
+\doublehyphendemerits5000
+\hfuzz0pt
+\leftskip0pt minus 1pt
+\rightskip0pt minus 1pt