<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Pro jective Beth Definability and Craig Interpolation for Relational Query Optimization</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>David Toman</string-name>
          <email>david@uwaterloo.ca</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Grant Weddell</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>The Problem</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Cheriton School of CS, University of Waterloo</institution>
          ,
          <country country="CA">Canada</country>
        </aff>
      </contrib-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>via operations that are entirely devoid of any need to understand low-level disk
layout issues.</p>
      <p>
        The idea of data independence gained popularity in the 70s, both in the area
of programming languages, e.g., with languages such as SETL [
        <xref ref-type="bibr" rid="ref10 ref14 ref8">8,14,10</xref>
        ], and in
the area of information and database systems mainly due to the development of
the relational model (RM) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] with accompanying data manipulation language(s)
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] based on first-order logic. However, with the passing of time (50 years later),
approaches that use lower levels of abstraction, such as C or the various recent
NoSQL database systems, have often displaced approaches that promote data
independence, often at the cost of increasing development time and/or lowering
the quality of deployed systems. The most common reason for this phenomenon
is the need for massive scaleability and flexibility, capabilities often missing in
systems with high levels of abstraction such as RM.
      </p>
      <p>
        The goal of this presentation is to outline a direction of research that, in
the realm of database and information systems, enables simultaneous high level
abstractions at the user level and extreme flexibility at the physical design level,
that is, in the choice of concrete data structures and their access algorithms.
Indeed, our ultimate goal of this direction of research is to compete with
handwritten code in low-level languages such as C, while providing the high level
of abstraction in the original RM [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] that are not yet fully realized in existing
relational database management systems.
2
      </p>
      <p>Data Independence (through an Example)
We begin outlining how data independence can be understood more formally in
terms of first-order (relational) signatures and integrity constraints (i.e.,
firstorder sentences over these signatures).
2.1</p>
      <p>The Logical Schema
The logical schema is a first order signature SL and an accompanying set of
integrity constraints ΣL that are specific to the domain of the application (that
require user familiarity). The situation can be depicted as follows:
ΣL</p>
      <p>SL
o
ϕ</p>
      <p>Logical Schema
and User Queries
The users interacting with the data use queries, in our case open first order
formulae over SL, to formulate their requests (we will deal with modifying the
data later in Section 4). There are two important observations that follow from
this arrangement:
1. The user only requires familiarity with SL and ΣL to be able to develop
applications; and
2. The user can assume that the actual data is a single interpretation on SL
that is a model of ΣL over which her requests are evaluated (i.e., without
the need to comprehend subtle issues related to logical entailment and/or
belief revision). We call such interpretations instances of the schema.</p>
    </sec>
    <sec id="sec-2">
      <title>Example 1 (Logical Schema)</title>
      <p>We will use the following logical schema formulated in SQL as our running
example.</p>
      <sec id="sec-2-1">
        <title>CREATE TABLE employee (</title>
        <p>num INTEGER NOT NULL,
name CHAR(20),
worksin INTEGER NOT NULL
PRIMARY KEY (num),
FOREIGN KEY (worksin)</p>
        <p>REFERENCES department
)</p>
      </sec>
      <sec id="sec-2-2">
        <title>CREATE TABLE department (</title>
        <p>num INTEGER NOT NULL,
name CHAR(50),
manager INTEGER NOT NULL,
PRIMARY KEY (num),
FOREIGN KEY (manager)</p>
        <p>REFERENCES employee
)
The (instances of) employee and department relation declarations are
intuitively meant to store information about employee numbers, names and
departments they work in, and about departments, their names and managers. In our
formalism, this is simply a syntactic sugar for a signature</p>
        <p>SL = {employee/3, department/3}
(where “/i” indicates predicate arity) and integrity constraints
ΣL = { employee(x, y1, z1) ∧ employee(x, y2, z2) → y1 = y2 ∧ z1 = z2,
employee(x, y, z) → ∃u, v.department(z, u, v), . . .
}
stating that employees are identified by their number, that they must work for
exactly one department, and so on.</p>
        <p>The ability of specifying integrity constraints in ΣL allows one to go beyond what
is available in typical implementations of the relational model, for example:
– managers are employees that manage a department (a view)</p>
        <p>manager(x, y, z) ↔ employee(x, y, z) ∧ ∃u, v.department(u, v, x)
– managers work in their own departnemts (business rule)</p>
        <p>employee(x, y, z) ∧ department(u, v, x) → z = u
– workers and managers partition employees (partition)
employee(x, y, z) ↔ (manager(x, y, z) ∨ worker(x, y, z))
manager(x, y, z) ∧ worker(x, y, z) → ⊥
Observe that this extends the signature of the logical schema with additional
predicate symbols manager/3 and worker/3 that a user can now reference in
queries.
2.2</p>
        <p>The Physical Schema
We use a similar strategy to define the physical schema where we again use
relational signatures and constraints for this purpose. However, these symbols
will correspond to actual data structures that are called access paths in database
literature. These access paths correspond to various ways to access data, ranging
from dereferencing a pointer in main memory or extracting a field from a main
memory record (abstracted by binary predicate symbols whose interpretations
are address-value pairs) to using main memory data structures such as linked
lists (again abstracted by appropriate predicate symbols) to reading data from
external storage, and to communicating with other agents. The situation can be
again depicted as follows:
ΣL
ΣP</p>
        <p>SL
ΣLP</p>
        <p>o
SA ⊆ SP o
(compile)
ϕ
ψ</p>
        <p>Logical Schema
and User Queries
Physical Schema
and Query Plans
Note that there can be additional helper predicate symbols in SP in addition to
the access paths SA.</p>
        <p>
          There are two issues with this strategy that must be addressed:
1. Will it suffice to associate access paths (data structures and their associated
search algorithms) with predicate symbols?
2. Is it reasonable to also think about generated code using access paths as
formulae (ψ above)?
To address the 1st question, we annotate the symbols in SA with so called binding
patterns [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] indicating which arguments of the particular access path must be
bound to a value before the access path can be executed. We indicate this by an
additional integer in the signature specification, for example “pointer-nav/2/1”
indicates that the access path representing address-value pairs in main memory
can be only used when we have a value for the first component (i.e., an address).
The implementation then consists of a simple statement for dereferencing this
address to produce the a value of the second argument. This observation also
leads to restrictions on the form of ψ [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Example 2 (Physical Schema)</title>
      <p>We illustrate the first issue by defining the physical schema for our running
example. Our physical design consists of a linked list of employee records that
use pointers (references) to indicate department records an employee works in.</p>
      <p>In a similar fashion, the department records use a pointer to indicate which
employee is a manager. The records in a Pascal-like notation are as follows:
record emp of
integer num
string name
reference dept
record dept of
integer num
string name
reference mgr
In our formalism this looks as follows: we define the following predicates to be
associated with access paths (i.e., in SA):
– empfile/1/0: set of addresses of emp records; this access path abstracts
navigating a linked list (of emp records) in main memory.
– emp-num/2/1: a set of address of emp records paired with the emp
numbers; this access path corresponds to extracting a field (num in this case)
from an emp record (given an address of such a record). The access paths
emp-name/2/1 and emp-dept/2/1 and dept-num/2/1, dept-name/2/1, and
dept-mgr/2/1 similarly abstract the field extraction of the remaining fields
from the emp and dept records.</p>
      <p>We also use two auxiliary predicates emp/1 and dept/1 to stand for the sets of
addresses of emp and dept records. Integrity constraints (ΣP ∪ΣLP) then capture
the properties of instances of the physical schema and how they relate to the
logical schema. For example the fact that records have appropriate fields can be
specified as follows:
emp(e) → ∃d.emp-dept(e, d) emp records have a dept field
emp-dept(e, d1) ∧ emp-dept(e, d2) → d1 = d2 the dept field is functional
emp-dept(e, d) → dept(d) the value of the dept field is
a pointer to a dept record
For full listing of the constraints see Appendix A. This completes our description
of the physical schema for our example.
2.3</p>
      <p>
        Queries and Plans
Now we are ready to give an answer to our 2nd question, how to interpret
formulae as query plans. This is straightforward: atomic formulae are mapped to
(the code associated with) access paths and logical connectives and quantifiers
to “control flow code fragments” as follows:
atomic formula 7→
conjunction 7→
existential quantifier 7→
disjunction
negation
7→
7→
access path (a get-first / get-next iterator)
nested loops join
projection (with optional duplicate information)
concatenation
simple complement
For a formula to correspond to a plan (i.e., executable code), it is also necessary
to obey binding patterns [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. While such a procedural interpretation of atoms
and logical connectives might seem over simplistic, we discuss in Section 3.2
below how this simple fine-grained interpretation suffices for most of the
hardcoded solutions in other database systems.
      </p>
    </sec>
    <sec id="sec-4">
      <title>Example 3</title>
      <p>We illustrate this framework by worked examples of several user queries together
with possible query plans for these queries over our running physical design case.
Q1: List employee numbers, names, and departments (employee(x, y, z)). We
can show that this user query is logically equivalent under the integrity
constraints to the following formula over SA:
∃e, d.empfile(e) ∧ emp-num(e, x) ∧ emp-name(e, y)</p>
      <p>∧ emp-dept(e, d) ∧ dept-num(d, z)
Assuming our formulas as plans mapping, this formula would correspond to the
following C-like code (with trivial simplifications and inlining of the ea-xxx(x, y)
access paths to y := x-&gt;xxx):
for e in empfile do
x := e-&gt;num; y := e-&gt;name;
d := e-&gt;dept; z := d-&gt;num; return (x, y, z);
Note also that the formula above satisfies the binding patterns associated with
the access paths used as it retrieves the address of an emp record before
attempting to extract the values of it’s fields.</p>
      <p>Q2: List worker numbers and names (∃z.worker(x, y, z)). Again, this query is
equivalent to the following formula over SA:
∃e, d.empfile(e) ∧ emp-num(e, x) ∧ emp-name(e, y)</p>
      <p>∧ emp-dept(e, d) ∧ ¬dept-mgr(d, e)
Note that a negation, ¬dept-mgr(d, e), is required, and that there is no negation
in the query nor in the schema that provides any direct clue that it is needed.
(We are not aware of any system that can synthesize this plan, that is, that
compiles queries using this framwork.)
Q3: List all department numbers and their names (∃z.department(x, y, z)).
Finding a plan for this query is more difficult since we do not have a direct
way to “scan” dept records. However, it is an easy exercise to verify that the
following two formulae over SA are logically equivalent to the query:
∃d, e.empfile(e) ∧ emp-dept(e, d)</p>
      <p>∧ dept-num(d, x) ∧ dept-name(d, y)
(relying on the constraint that “departments have at least one employee”)
∃d, e.empfile(e) ∧ emp-dept(e, d)</p>
      <p>∧ dept-num(d, x) ∧ dept-name(d, y) ∧ dept-mgr(d, e)
(relying on the constraint that “managers work in their own departments”)
Both correspond to plans. However, while the second might seem to be less
efficient than the first, a query optimizer should prefer it on the grounds that,
in this case, the quantified variables d and e are functionally determined by the
answer variable x. Hence, the final projection generated for the second has no
need to eliminate duplicate answers. This is not the case for the first of these
formulae since it would return a copy of the department information for every
employee of the department should duplicate elimination in the final projection
not be performed.</p>
      <p>
        Many other problems and issues in physical design and query plans can be
revolved in this framework, including standard RDBMS physical designs (and
more), access to search structures (index access and selection), horizontal
partitioning/sharding, column store/index-only plans, hash-based access to data
(including hash-joins), multi-level storage (aka disk/remote/distributed files),
materialized views, etc., all without any need for coding in C beyond the need
for the generic specifications of get-first / get-next templates for concrete
data structures [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
3
      </p>
      <p>Interpolation and Query Optimization
Now we turn our attention to the description of a query compiler/optimizer that,
given the logical and physical schemata and a user query, generates a query plan
that correctly implements the user request.
3.1</p>
      <p>What Queries Make Sense ?? (to users)
However, before we begin, it is important to resolve what queries make sense
to a user who presumes there is a single interpretation of symbols in SL at any
point in time, no matter how it is represented/stored physically. To satisfy to
this expectation, the queries that make sense should have the same answer in
every model of the overall physical design Σ in which the interpretation of SA is
fixed, that is, where the stored data is always the same. This arrangement also
guarantees that artifacts facilitating efficient storage and retrieval of information
won’t be leaked in the results of queries (since they do not exist in the logical
view of the data). The consequence of this observation is that either
1. there are situations in which a seemingly reasonable user query cannot be
answered (that would be the case for Q3 in Section 2.3, were the constraint
“departments have at least one employee” absent from the schema), or
2. queries must adhere to syntactic restrictions in which, e.g., symbols
corresponding to built-in operations cannot be used completely freely, and
physical designs must also adhere to syntactic restrictions such as so-called
standard designs (i.e., where an access path exists for every logical table in ΣL,
thus guaranteeing that every user query can be answered).</p>
      <p>
        To make the definition of sensible queries more formal, we appeal to a well-known
notion of definability:
Proposition 4 (Projective Beth Definability [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ])
Let Σ ∪ {ϕ} be a FO theory over symbols in L and L0 ⊆ L. Then t.f.a.e.:
1. For all M1, M2 models of Σ such that M1|L0 = M2|L0 , and all a tuples of
individuals, it holds that M1 |= ϕ[a] iff M2 |= ϕ[a], and
2. ϕ is equivalent under Σ to some formula ψ in L0.
      </p>
      <p>We say that ϕ is explicitly definable w.r.t. Σ and L0.</p>
      <p>Definability (over SA w.r.t. Σ) formally captures the idea of (physical) data
independence, the illusion of a single interpretation of the logical schema that
satisfies integrity constraints that is presented to the users, and therefore
provides the means of determining which queries can be answered over a particular
physical design.</p>
      <p>The first question is how to test for definability. The following observation
reduces this test to determining whether a particular formula constructed from
the user query is entailed by a theory constructed from the schema: ϕ is explicitly
definable (w.r.t. Σ and over SA) if and only if
Σ ∪ Σ0 |= ϕ → ϕ0
(1)
where Σ0 (ϕ0) is Σ (ϕ) in which symbols NOT in SA are primed, respectively.</p>
      <p>
        The next question is how to find a plan for a given query. Our observations
on how formulae can be interpreted as query plans in Section 2.3 then mostly
reduces query compilation to a search for the formula ψ in Proposition 4(2). To
find ψ, we rely on a variant of the following result [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]:
      </p>
      <p>
        If Σ ∪ Σ0 |= ϕ → ϕ0 then there is ψ s.t. Σ ∪ Σ0 |= ϕ → ψ → ϕ0
where L(ψ) ⊆ L(SA). Here, ψ is called the Craig interpolant. Moreover, we can
extract any such ψ from a Tableau proof of (1) in linear time [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
3.2
      </p>
      <p>
        Architecture
The above discussion might seem to solve the query compilation problem.
However there are additional issues that need to be addressed:
1. The search for interpolants and their implied query plans must consider
that alternative but logically equivalent plans might have vastly different
performance characteristics.1 Hudek et al. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] introduce an approach that
separates the tableau-based search for interpolants from the cost-based2
exploration of alternative query plans.
1 This holds even for conjunctive formulae: hence database literature often focuses on
the so-called join-order problem [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
2 Cost-based query optimization is the cornerstone of relational systems [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ];
advancements in the area of query plan cost estimation are easily incorporated in this
framework.
2. Binding patterns for access paths (see Section 2.2) further restrict the space
of executable query plans (and in turn of sensible queries). Benedikt et al.[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]
have shown how the binding patterns can be accommodated in the search
for interpolants (i.e., in the search for proofs of definability).
3. In addition, during the search for optimal query plans, we consider the
impact of duplicate elimination as illustrated by plans for Q3 in Section 2.3. A
detailed account for this facet of query compilation can be found in [
        <xref ref-type="bibr" rid="ref16 ref18">16,18</xref>
        ].
and the user query into a normal form and generates a bytecode that drives a
virtual machine-based (VM) tableau theorem prover [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. Unlike standard theorem
provers, including those that can generate interpolants [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], the tableau VM
generates an intermediate representation of a space of equivalent interpolants called
closing sets [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Closing sets are then explored by an A∗-based planner to find
a query plan with the lowest estimated cost. The planner also explores ways to
avoid duplicate elimination in the process. The planner is then followed by a
code generator that produces the ultimate query plans in a form of C source.
4
      </p>
      <sec id="sec-4-1">
        <title>Updates</title>
        <p>In this section, we sketch how the problem of compiling updates on a logical
design can be translated to the problem of compiling queries on a related logical
design, thus enabling the same framework above to also be used to compile
inserts, updates and deletes on logical tables.</p>
        <p>As already mentioned in Section 2.1, user updates are formulated with
respect to the logical schema (SL and ΣL). Moreover, physical data independence
presents the user with a illusion that he is modifying an instance of SL by
adding/removing ground tuples to/from the interpretations of symbols in SL.
This process can be formalized in three parts as follows:
1. For every symbol R ∈ SL, introduce two additional symbols, R+ and R−,
whose (disjoint) interpretations correspond to the ground tuples the user
wants to add or remove to/from the current instance;
2. The updated instance is then defined by executing an simultaneous
assignments R := (R ∪ R+) − R− for all R ∈ SL; and
3. At the end of the assignment the new interpretation must be a model of ΣL.
The symbols R+ and R− are commonly called the delta relations and Part 3
of this process on user updates ensures so-called consistency preserving
transactions.
formulae</p>
        <p>To convert the update problem to the problem of synthesizing plans for
queries, consider two copies of the schema Σ, in which all symbols are
superscripted by o and n</p>
        <p>, respectively. The intuition is that the o and n symbols
correspond to the interpretations of SL before and after the update. The actual
assignment (Part 2 of the above process) can be then captured as additional</p>
        <p>Ro(x) ∨ R−(x) ↔ Rn(x) ∨ R+(x)
for each R ∈ SL as depicted below.</p>
        <p>Σo</p>
        <p>L
ΣPo</p>
        <p>S
o</p>
        <p>L
ΣLoP
SA ⊆ SP
o</p>
        <p>U+,U−
compile</p>
        <p>A+,A−
Σn</p>
        <p>L
ΣPn
In the same way, the changes to access paths in SA can be captured by
analogous constraints, as depicted in the lower half of the figure. Thus, user inserts,
updates and deletes on logical tables (comprising a transaction) are mapped to
a definability question of the following form:</p>
        <p>SA and of all delta relations for SL?
Is An (or A+, A−) definable in terms of Aio and Uj+, Uj− (user updates)
for every access path A ∈ SA, given the instance of all access paths in
A positive answer to this question yields a update plan that applies the delta
relations corresponding to the access paths to their current interpretations.
5</p>
      </sec>
      <sec id="sec-4-2">
        <title>Summary</title>
        <p>We have outlined how projective Beth definability can be used in database and
information systems to facilitate physical data independence. Moreover, we have
shown how a variation on Craig interpolation can be used to compile and
optimize user queries and user updates that are formulated over a logical schema to
an executable plan over a fine-grained physical design. There are many avenues
for further research and development, including: (1) admitting more powerful
languages for user requests, such as languages with aggregation; (2)
enhancements to the tableau provers, as well as alternatives such as superposition-based
provers; and (3) improvements to the planning component of query compilation
responsible for exploring the search space of alternative query plans.</p>
        <p>A</p>
        <p>Constraints for the Running Example
The following listing is a complete specification of constraints needed for our
running example. Note that some of the constraints in Section 2.1 are entailed
by the constraints below (and are thus omited).
%
% logical schema (entailed constraints omited)
%
% a (virtual) view for managers
manager(x,y,z) &lt;-&gt; (employee(x,y,z) and ex(n,department(z,n,x))),
%
% disjoint partition of employees to managers and workers
employee(x,y,z) &lt;-&gt; (manager(x,y,z) or worker(x,y,z)),
manager(x,y,z) and worker(x,u,v) -&gt; bot,
%
% businness logic: managers work for their own departments
(department(x,y,z) and employee(z,u,w)) -&gt; x=w,
%
% physical schema and mappings
%
% design of emp and dept structs; emp/dept addresses, fields functional
emp(e) -&gt; ex(y,emp_num(e,y)), emp_num(e,y) and emp_num(e,z)-&gt; y=z,
emp_num(y,x) and emp_num(z,x)-&gt; y=z,
emp(e) -&gt; ex(y,emp_name(e,y)), emp_name(e,y) and emp_name(e,z)-&gt; y=z,
emp(e) -&gt; ex(y,emp_dept(e,y)), emp_dept(e,y) and emp_dept(e,z)-&gt; y=z,
emp_dept(e,d) -&gt; dept(d),
%
dept(d) -&gt; ex(y,dept_num(d,y)), dept_num(d,y) and dept_num(d,z)-&gt; y=z,
dept_num(y,x) and dept_num(z,x)-&gt; y=z,
dept(d) -&gt; ex(y,dept_name(d,y)), dept_name(d,y) and dept_name(d,z)-&gt; y=z,
dept(d) -&gt; ex(y,dept_mgr(d,y)), dept_mgr(d,y) and dept_mgr(d,z)-&gt; y=z,
dept_mgr(d,e) -&gt; emp(e),</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Charles</surname>
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Bachman</surname>
          </string-name>
          . CODASYL data base task group:
          <year>October 1969</year>
          report,
          <year>1969</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Charles</surname>
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Bachman</surname>
          </string-name>
          . Summary of current work - ANSI/X3/SPARC/Study Group-Database
          <string-name>
            <surname>Systems</surname>
          </string-name>
          .
          <source>FDT Bull. ACM SIGFIDET SIGMOD</source>
          ,
          <volume>6</volume>
          (
          <issue>3</issue>
          ):
          <fpage>16</fpage>
          -
          <lpage>39</lpage>
          ,
          <year>1974</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Michael</given-names>
            <surname>Benedikt</surname>
          </string-name>
          , Julien Leblay,
          <article-title>Balder ten Cate, and Efthymia Tsamoura. Generating Plans from Proofs: The Interpolation-based Approach to Query Reformulation</article-title>
          .
          <source>Synthesis Lectures on Data Management</source>
          . Morgan &amp; Claypool Publishers,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Evert</given-names>
            <surname>Willem Beth</surname>
          </string-name>
          .
          <article-title>On Padoa's method in the theory of definition</article-title>
          .
          <source>Indagationes Mathematicae</source>
          ,
          <volume>15</volume>
          :
          <fpage>330</fpage>
          -
          <lpage>339</lpage>
          ,
          <year>1953</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>E. F.</given-names>
            <surname>Codd</surname>
          </string-name>
          .
          <article-title>A relational model of data for large shared data banks</article-title>
          .
          <source>Commun. ACM</source>
          ,
          <volume>13</volume>
          (
          <issue>6</issue>
          ):
          <fpage>377</fpage>
          -
          <lpage>387</lpage>
          ,
          <year>1970</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>E. F.</given-names>
            <surname>Codd</surname>
          </string-name>
          .
          <article-title>Relational completeness of data base sublanguages</article-title>
          .
          <source>IBM Research Report, RJ987</source>
          ,
          <year>1972</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>William</given-names>
            <surname>Craig</surname>
          </string-name>
          .
          <article-title>Three uses of the Herbrand-Genzen theorem in relating model theory and proof theory</article-title>
          .
          <source>Journal of Symbolic Logic</source>
          ,
          <volume>22</volume>
          :
          <fpage>269</fpage>
          -
          <lpage>285</lpage>
          ,
          <year>1957</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Robert</surname>
            <given-names>B. K.</given-names>
          </string-name>
          <string-name>
            <surname>Dewar</surname>
            , Arthur Grand, Ssu-Cheng Liu, Jacob T. Schwartz, and
            <given-names>Edmond</given-names>
          </string-name>
          <string-name>
            <surname>Schonberg</surname>
          </string-name>
          .
          <article-title>Programming by refinement, as exemplified by the SETL representation sublanguage</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst.</source>
          ,
          <volume>1</volume>
          (
          <issue>1</issue>
          ):
          <fpage>27</fpage>
          -
          <lpage>49</lpage>
          ,
          <year>1979</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Melvin</given-names>
            <surname>Fitting</surname>
          </string-name>
          .
          <source>First-Order Logic and Automated Theorem Proving, Second Edition</source>
          . Graduate Texts in Computer Science. Springer Publishers,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Stefan M. Freudenberger</surname>
          </string-name>
          ,
          <string-name>
            <surname>Jacob</surname>
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Schwartz</surname>
            , and
            <given-names>Micha</given-names>
          </string-name>
          <string-name>
            <surname>Sharir</surname>
          </string-name>
          .
          <article-title>Experience with the SETL optimizer</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst.</source>
          ,
          <volume>5</volume>
          (
          <issue>1</issue>
          ):
          <fpage>26</fpage>
          -
          <lpage>45</lpage>
          ,
          <year>1983</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Alexander</surname>
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Hudek</surname>
            , David Toman, and
            <given-names>Grant E.</given-names>
          </string-name>
          <string-name>
            <surname>Weddell</surname>
          </string-name>
          .
          <article-title>On enumerating query plans using analytic tableau</article-title>
          .
          <source>In Automated Reasoning with Analytic Tableaux and Related Methods - 24th International Conference, TABLEAUX</source>
          <year>2015</year>
          , Wroclaw, Poland,
          <source>September 21-24</source>
          , pages
          <fpage>339</fpage>
          -
          <lpage>354</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Laura</surname>
          </string-name>
          <article-title>Kova´cs and Andrei Voronkov. Interpolation and symbol elimination</article-title>
          . In Renate A. Schmidt, editor,
          <source>Automated Deduction - CADE-22, 22nd International Conference on Automated Deduction, Montreal, Canada, August 2-7</source>
          ,
          <year>2009</year>
          . Proceedings, volume
          <volume>5663</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>199</fpage>
          -
          <lpage>213</lpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Barbara</surname>
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Liskov</surname>
            and
            <given-names>Stephen N.</given-names>
          </string-name>
          <string-name>
            <surname>Zilles</surname>
          </string-name>
          .
          <article-title>Programming with abstract data types</article-title>
          .
          <source>SIGPLAN Notices</source>
          ,
          <volume>9</volume>
          (
          <issue>4</issue>
          ):
          <fpage>50</fpage>
          -
          <lpage>59</lpage>
          ,
          <year>1974</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Edmond</surname>
            <given-names>Schonberg</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jacob</surname>
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Schwartz</surname>
            , and
            <given-names>Micha</given-names>
          </string-name>
          <string-name>
            <surname>Sharir</surname>
          </string-name>
          .
          <article-title>An automatic technique for selection of data structures in SETL programs</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst.</source>
          ,
          <volume>3</volume>
          (
          <issue>2</issue>
          ):
          <fpage>126</fpage>
          -
          <lpage>143</lpage>
          ,
          <year>1981</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Patricia</surname>
            <given-names>G</given-names>
          </string-name>
          . Selinger,
          <string-name>
            <surname>Morton M. Astrahan</surname>
            ,
            <given-names>Donald D.</given-names>
          </string-name>
          <string-name>
            <surname>Chamberlin</surname>
          </string-name>
          , Raymond A.
          <string-name>
            <surname>Lorie</surname>
          </string-name>
          , and Thomas G. Price.
          <article-title>Access Path Selection in a Relational Database Management System</article-title>
          .
          <source>In ACM SIGMOD International Conference on Management of Data</source>
          , pages
          <fpage>23</fpage>
          -
          <lpage>34</lpage>
          ,
          <year>1979</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16. David Toman and
          <string-name>
            <surname>Grant E. Weddell.</surname>
          </string-name>
          <article-title>Fundamentals of Physical Design and Query Compilation</article-title>
          .
          <source>Synthesis Lectures on Data Management</source>
          . Morgan &amp; Claypool Publishers,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. David Toman and
          <string-name>
            <surname>Grant E. Weddell.</surname>
          </string-name>
          <article-title>An interpolation-based compiler and optimizer for relational queries (system design report)</article-title>
          .
          <source>In IWIL@LPAR 2017 Workshop and LPAR-21 Short Presentations</source>
          , Maun, Botswana, May 7-
          <issue>12</issue>
          ,
          <year>2017</year>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18. David Toman and
          <string-name>
            <surname>Grant E. Weddell.</surname>
          </string-name>
          <article-title>Using feature-based description logics to avoid duplicate elimination in object-relational query languages</article-title>
          .
          <source>Ku¨nstliche Intell</source>
          .,
          <volume>34</volume>
          (
          <issue>3</issue>
          ):
          <fpage>355</fpage>
          -
          <lpage>363</lpage>
          ,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Jeffrey</surname>
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Ullman</surname>
          </string-name>
          .
          <article-title>Implementation of logical query languages for databases</article-title>
          .
          <source>ACM Trans. Database Syst</source>
          .,
          <volume>10</volume>
          (
          <issue>3</issue>
          ):
          <fpage>289</fpage>
          -
          <lpage>321</lpage>
          ,
          <year>1985</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>