Revision of Prop 2.4 and proof, Lemma 2.6 proof, etc.

master
Aaron Huber 2022-04-28 10:58:27 -04:00
parent 1ca2c00cd0
commit 78c73d91d9
7 changed files with 47 additions and 27 deletions

View File

@ -129,10 +129,16 @@ Note that any $\poly$ in factorized form is equivalent to its \abbrSMB expansion
Let $\poly$ be a polynomial of $\numvar$ variables with highest degree $= \hideg$, defined as follows:
\[\poly(X_1,\ldots, X_\numvar) = \sum_{\vct{d} \in \{0,\ldots, \hideg\}^\numvar}c_{\vct{d}}\cdot \prod_{\substack{i = 1\\s.t. d_i \geq 1}}^\numvar X_i^{d_i}.\]
If we can prove that $\poly\inparen{\vct{W}} = \rpoly\inparen{\vct{W}}$ for any $\poly\inparen{\vct{X}}$ and any $\vct{W}$, then the proof holds for any $\refpoly{}\inparen{\vct{W}}$ since $\refpoly{}\inparen{\vct{W}}$ is \emph{itself} a polynomial as defined above.\footnote{This can be seen in converting $\refpoly{}\inparen{\vct{X}}$ into \abbrSMB.}
Let the boolean function $\isInd{\cdot}$ take $\vct{d}$ as input and return true if there does not exist any dependent variables in $\vct{d}$, i.e., for block $\block$ and $i, j\in\pbox{\numvar}$, $\not\exists ~\block, i\neq j\suchthat \block\supseteq\inset{\tup_i, \tup_j} \wedge d_{i}, d_{j} \geq 1$.\footnote{For generality of the proof, we are using a slightly different notation than the main paper, which treats a specific form of \abbrBIDB} For clarity, a \abbrOneBIDB polynomial $\poly\inparen{\vct{X}}$ with any variable $X_i$ such that $X_i\in\inset{0, \bound_\tup}, \bound_\tup\neq 1$ can equivalently replace $X_i$ with $\bound_\tup X_i$ while coercing the domain of $X_i$ to be $\inset{0, 1}$. Note that this setup addresses the general \abbrBIDB. In what follows, we assume that $\vct{X}$ (and hence $\vct{W}$) has a domain of $\inset{0, 1}$.
%If we can prove that $\poly\inparen{\vct{W}} = \rpoly\inparen{\vct{W}}$ for any $\poly\inparen{\vct{X}}$ and any $\vct{W}$, then the proof holds for any $\refpoly{}\inparen{\vct{W}}$ since $\refpoly{}\inparen{\vct{W}}$ is \emph{itself} a polynomial as defined above.\footnote{This can be seen in converting $\refpoly{}\inparen{\vct{X}}$ into \abbrSMB.}
Let the boolean function $\isInd{\cdot}$ take $\vct{d}$ as input and return true if there does not exist any dependent variables in $\vct{d}$, i.e., for block $\block$ and $i, j\in\pbox{\numvar}$, $\not\exists ~\block, i\neq j\suchthat \block\supseteq\inset{\tup_i, \tup_j} \wedge d_{i}, d_{j} \geq 1$.
Then in expectation we have
%\footnote{For generality of the proof, we are using a slightly different notation than the main paper, which treats a specific form of \abbrBIDB} For clarity, a \abbrOneBIDB polynomial $\poly\inparen{\vct{X}}$ with any variable $X_i$ such that $X_i\in\inset{0, \bound_\tup}, \bound_\tup\neq 1$ can equivalently replace $X_i$ with $\bound_\tup X_i$ while coercing the domain of $X_i$ to be $\inset{0, 1}$. Note that this setup addresses the general \abbrBIDB. In what follows, we assume that $\vct{X}$ (and hence $\vct{W}$) has a domain of $\inset{0, 1}$.
Note that when computing the expectation of a \abbrOneBIDB polynomial over the set of worlds, any world $\vct{W}\in \bigtimes_{\tup \in \tupset}\inset{0, \bound_\tup}$ with $W_\tup \geq 2$ for $W_\tup\in\vct{W}$ can equivalently be replaced with $\bound_\tup^{d_t}\cdot W_\tup$ with domain of $W_t$ $\domain\inparen{W_\tup} = \inset{0, 1}$. In what follows, we replace all such $W_\tup$ with their equivalents and without loss of generality assume that $c_{\vct{d}}$ has absorbed all such $\bound_\tup^{d_\tup}$ factors.
Then, given \abbrOneBIDB $\pdb$, query $\query$, and polynomial $\poly\inparen{\vct{W}} = \poly\pbox{\query, \tupset, \tup}$, in expectation we have
\AH{Two considerations:\begin{itemize}\item I suggest that we change the domain of $\vct{d}$ to $\vct{d}\in\inset{1,\cdots\hideg}$.\item It seems `bulky' to try and use the paper's conventional $\tup_{i, j}$ notation in this proof, since the proof is for general \abbrOneBIDB; therefore the notation is cleaner to iterate through $\pbox{\numvar}$ imo.\end{itemize}
}
\begin{align}
\expct_{\vct{\randWorld}}\pbox{\poly(\vct{\randWorld})} &= \expct_{\vct{\randWorld}}\pbox{\sum_{\substack{\vct{d} \in \{0,\ldots,\hideg\}^\numvar\\\wedge~\isInd{\vct{d}}}}c_{\vct{d}}\cdot \prod_{\substack{i = 1\\s.t. d_i \geq 1}}^\numvar \randWorld_i^{d_i} + \sum_{\substack{\vct{d} \in \{0,\ldots, \hideg\}^\numvar\\\wedge ~\neg\isInd{\vct{d}}}} c_{\vct{d}}\cdot\prod_{\substack{i = 1\\s.t. d_i \geq 1}}^\numvar\randWorld_i^{d_i}}\label{p1-s1a}\\
&= \sum_{\substack{\vct{d} \in \{0,\ldots,\hideg\}^\numvar\\\wedge~\isInd{\vct{d}}}}c_{\vct{d}}\cdot \expct_{\vct{\randWorld}}\pbox{\prod_{\substack{i = 1\\s.t. d_i \geq 1}}^\numvar \randWorld_i^{d_i}} + \sum_{\substack{\vct{d} \in \{0,\ldots, \hideg\}^\numvar\\\wedge ~\neg\isInd{\vct{d}}}} c_{\vct{d}}\cdot\expct_{\vct{\randWorld}}\pbox{\prod_{\substack{i = 1\\s.t. d_i \geq 1}}^\numvar\randWorld_i^{d_i}}\label{p1-s1b}\\

View File

@ -75,7 +75,8 @@ encodes a polynomial, realized as
We define the circuit for a $\raPlus$ query $\query$ recursively by cases as follows. In each case, let $\tuple{V_{Q_i,\pxdb}, E_{Q_i,\pxdb}, \phi_{Q_{i},\pxdb}, \ell_{Q_i,\pxdb}}$ denote the circuit for subquery $Q_i$. We implicitly include in all circuits a global zero node $v_0$ s.t., $\ell_{Q, \pxdb}(v_0) = 0$ for any $Q,\pxdb$.
\AH{Questions for below:\par\begin{enumerate}\item Why did we choose the name \abbrStepOne?\item What is $\domain\inparen{\phi'}$?\item Unsure of $\ell\gets\ell\cup\inset{v_t, \rel\inparen{\tup}}$ since $\ell$ is defined as a function with a range of $\inset{+, \times}\cup\mathbb{N}\cup\vct{X}$. Since $\rel\in\tupset$ where $\tupset$ is the deterministic bounding database for $\mathbb{N}\pbox{\vct{X}}$-PDB $\mathcal{D}_{\mathbb{N}\pbox{\vct{X}}}$, then $\rel\inparen{\tup}\in\mathbb{N}\pbox{\vct{X}}\not\subseteq\inset{+, \times}\cup\mathbb{N}\cup\vct{X}$ \emph{unless} it is implicit that each tuple in a base relation is annotated with an element $X\in \vct{X}$. OR are we thinking of $\tupset$ as an $\mathbb{N}$ bounding database, which upperbounds the multiplicity of every possible tuple?\item The comment on garbage collecting for \textbf{Selection}: it seems to me, that with or without garbage collection, the upperbound would still hold.\item Are we using the notation $\project_{\vec{A}}$ to mean anything different than $\project_A$?\item In pseudocode, is it okay to start using new variables without first declaring or defining them?\item The ``output'' of Algo 4 is \circuit, yet nothing is returned. Are we assuming a data structure that is modified in place, like e.g. passing a pointer to the data structure in a C-language method?\item On the surface it appears that line 23 should overwrite $V, E, \ell$ modifications in line 22, but really should be accumulating them. Is the $\gets$ symbol okay here since we have already stated that the variables are accumulators?\item Should line 37 be $i\in\pbox{m}$?\item Shouldn't the first inequality RHS of m-ary join have the $k$'s subscripted? \end{enumerate}
}
\begin{algorithm}
\caption{\abbrStepOne$(\query, \tupset, E, V, \ell)$}
\label{alg:lc}
@ -239,10 +240,10 @@ The property holds for all recursive queries, and the proof holds.
We next need to show that we can construct the circuit in time linear in the deterministic runtime.
\begin{Lemma}\label{lem:tlc-is-the-same-as-det}
Given a query $\query$ over a \dbbaseName $\dbbase$ and the $\circuit^*$ output by \Cref{alg:lc}, the runtime $\timeOf{\abbrStepOne}(\query,\dbbase,\circuit^*) \le O(\qruntime{\query, \dbbase})$.
Given a query $\query$ over a \dbbaseName $\tupset$ and the $\circuit^*$ output by \Cref{alg:lc}, the runtime $\timeOf{\abbrStepOne}(\query,\tupset,\circuit^*) \le O(\qruntime{\query, \tupset})$.
\end{Lemma}
\begin{proof}
By analysis of \Cref{alg:lc}, invoked as $\circuit^*\gets\abbrStepOne(\query, \dbbase, \{v_0\}, \emptyset, \{(v_0, 0)\})$.
By analysis of \Cref{alg:lc}, invoked as $\circuit^*\gets\abbrStepOne(\query, \tupset, \{v_0\}, \emptyset, \{(v_0, 0)\})$.
We assume that the vertex list $V$, edge list $E$, and vertex label list $\ell$ are mutable accumulators with $O(1)$ ammortized append.
We assume that the tuple to sink mapping $\phi$ is a linked hashmap, with $O(1)$ insertions and retrievals, and $O(n)$ iteration over the domain of keys.
@ -252,25 +253,27 @@ We assume that the n-ary join $\domain(\phi_1) \bowtie \ldots \bowtie\domain(\ph
Before proving our runtime bound, we first observe that $\qruntime{\query, \db} \geq \Omega(|\query(\db)|)$.
This is true by construction for the relation, projection, and union cases, by \Cref{def:join-cost} for joins, and by the observation that $|\sigma(R)| \leq |R|$.
We showthat $\qruntime{\query, \dbbase}$ is an upper-bound for the runtime of \Cref{alg:lc} by recursion.
The base case of a relation atom requires only an $O(|\dbbase.R|)$ iteration over the source tuples.
For the remaining cases, we make the recursive assumption that for every subquery $\query'$, it holds that $O(\qruntime{\query', \dbbase})$ bounds the runtime of \Cref{alg:lc}.
We showthat $\qruntime{\query, \tupset}$ is an upper-bound for the runtime of \Cref{alg:lc} by recursion.
The base case of a relation atom requires only an $O(|\tupset.R|)$ iteration over the source tuples.
For the remaining cases, we make the recursive assumption that for every subquery $\query'$, it holds that $O(\qruntime{\query', \tupset})$ bounds the runtime of \Cref{alg:lc}.
\AH{What is meant by recursive assumption and how is this valid?}
\caseheading{Selection}
Selection requires a recursive call to \Cref{alg:lc}, which by the recursive assumption is bounded by $O(\qruntime{\query', \dbbase})$.
\Cref{alg:lc} requires a loop over every element of $\query'(\dbbase)$.
By the observation above that $\qruntime{\query, \db} \geq \Omega(|\query(\db)|)$, this iteration is also bounded by $O(\qruntime{\query', \dbbase})$.
Selection requires a recursive call to \Cref{alg:lc}, which by the recursive assumption is bounded by $O(\qruntime{\query', \tupset})$.
\Cref{alg:lc} requires a loop over every element of $\query'(\tupset)$.
By the observation above that $\qruntime{\query, \db} \geq \Omega(|\query(\db)|)$, this iteration is also bounded by $O(\qruntime{\query', \tupset})$.
\caseheading{Projection}
Projection requires a recursive call to \Cref{alg:lc}, which by the recursive assumption is bounded by $O(\qruntime{\query', \dbbase})$, which in turn is a term in $\qruntime{\pi_{\vec{A}}\query', \dbbase}$.
What remains is an iteration over $\pi_{\vec A}(\query(\dbbase))$ (lines 13--16), an iteration over $\query'(\dbbase)$ (lines 17--19), and the construction of a fan-in tree (line 20).
The first iteration is $O(|\query(\dbbase)|) \leq O(\qruntime{\query, \dbbase})$.
The second iteration and the construction of the bounded fan-in tree are both $O(|\query'(\dbbase)|) \leq O(\qruntime{\query', \dbbase}) \leq O(\qruntime{\query, \dbbase}) $, by the the observation above that $\qruntime{\query, \db} \geq \Omega(|\query(\db)|)$.
Projection requires a recursive call to \Cref{alg:lc}, which by the recursive assumption is bounded by $O(\qruntime{\query', \tupset})$, which in turn is a term in $\qruntime{\pi_{\vec{A}}\query', \tupset}$.
What remains is an iteration over $\pi_{\vec A}(\query(\tupset))$ (lines 13--16), an iteration over $\query'(\tupset)$ (lines 17--19), and the construction of a fan-in tree (line 20).
The first iteration is $O(|\query(\tupset)|) \leq O(\qruntime{\query, \tupset})$.
The second iteration and the construction of the bounded fan-in tree are both $O(|\query'(\tupset)|) \leq O(\qruntime{\query', \tupset}) \leq O(\qruntime{\query, \tupset}) $, by the the observation above that $\qruntime{\query, \db} \geq \Omega(|\query(\db)|)$.
\caseheading{Bag Union}
As above, the recursive calls explicitly correspond to terms in the expansion of $\qruntime{\query_1 \cup \query_2, \dbbase}$.
Initializing $\phi$ (line 24) can be accomplished in $O(\domain(\phi_1) + \domain(\phi_2)) = O(|\query_1(\dbbase)| + |\query_2(\dbbase)|) \leq O(\qruntime{\query_1, \dbbase} + \qruntime{\query_2, \dbbase})$.
The remainder requires computing $\query_1 \cup \query_2$ (line 25) and iterating over it (lines 25--29), which is $O(|\query_1| + |\query_2|)$ as noted above --- this directly corresponds to terms in $\qruntime{\query_1 \cup \query_2, \dbbase}$.
As above, the recursive calls explicitly correspond to terms in the expansion of $\qruntime{\query_1 \cup \query_2, \tupset}$.
Initializing $\phi$ (line 24) can be accomplished in $O(\domain(\phi_1) + \domain(\phi_2)) = O(|\query_1(\tupset)| + |\query_2(\tupset)|) \leq O(\qruntime{\query_1, \tupset} + \qruntime{\query_2, \tupset})$.
The remainder requires computing $\query_1 \cup \query_2$ (line 25) and iterating over it (lines 25--29), which is $O(|\query_1| + |\query_2|)$ as noted above --- this directly corresponds to terms in $\qruntime{\query_1 \cup \query_2, \tupset}$.
\caseheading{$m$-ary Join}
@ -278,8 +281,8 @@ As in the prior cases, recursive calls explicitly correspond to terms in our tar
The remaining logic involves (i) computing $\domain(\phi_1) \bowtie \ldots \bowtie \domain(\phi_m)$, (ii) iterating over the results, and (iii) creating a fan-in tree.
Respectively, these are: \\
~(i)~$\jointime{\domain(\phi_1), \ldots, \domain(\phi_m)}$\\
~(ii)~$O(|\query_1(\dbbase) \bowtie \ldots \bowtie \query_m(\dbbase)|) \leq O(\jointime{\domain(\phi_1), \ldots, \domain(\phi_m)})$ (\Cref{def:join-cost})\\
~(iii)~$O(m|\query_1(\dbbase) \bowtie \ldots \bowtie \query_m(\dbbase)|)$ (as (ii), noting that $m \leq k = O(1)$)
~(ii)~$O(|\query_1(\tupset) \bowtie \ldots \bowtie \query_m(\tupset)|) \leq O(\jointime{\domain(\phi_1), \ldots, \domain(\phi_m)})$ (\Cref{def:join-cost})\\
~(iii)~$O(m|\query_1(\tupset) \bowtie \ldots \bowtie \query_m(\tupset)|)$ (as (ii), noting that $m \leq k = O(1)$)
\qed
\end{proof}
@ -305,7 +308,14 @@ Specifically, if $\mathcal P$ is the joint distribution over $\vct{W}$, the esti
$$\mathcal O = \underset{\vct{W} \sim \mathcal P}{\expct}\Big[
\left|\comprehension{i}{\vct{W}_i = 1, i \in [\ell]}\right|
\Big].$$
\AH{Why are we computing the cardinality of variables that equal 1?}
The accuracy of this estimate is improved by conditioning $\mathcal P$ on a $W_i$ chosen uniformly at random (which ensures that the sampled count will be at least 1) and correcting the resulting estimate by $\probOf\inparen{W_i}$. With an estimate of $\mathcal O$, it can easily be verified that the probability of the disjunction can be computed as:
\AH{A bit confused on the above sentence:
\par
i) what is meant by conditioning $\mathcal{P}$ on a $W_i$,
ii) what about $\vct{W} = \pbox{0}^\ell$?
}
$$\probOf\inparen{\vct{W}_1 \vee \ldots \vee\vct{W}_\ell} = \probOf\inparen{\vct{W}_1} + \ldots + \probOf\inparen{\vct{W}_\ell} - \mathcal O$$
The Karp-Luby estimator is employed on the \abbrSMB representation\footnote{Note that since we are in the set semantics, in the lineage polynomial/formula, addition is logical OR and multiplication is logical AND.} of $\circuit$ (to solve the set-PDB version of \Cref{prob:intro-stmt}), where each $W_i$ represents the event that one monomial is true.

View File

@ -53,14 +53,17 @@ We slightly abuse notation here, denoting a world vector as $W$ rather than $\wo
\Cref{fig:lin-poly-bidb} shows the lineage construction of $\poly'\inparen{\vct{X}}$ given $\raPlus$ query $\query$ for arbitrary deterministic $\gentupset'$. Note that the semantics differ from~\Cref{fig:nxDBSemantics} only in the base case.
\begin{Proposition}[\abbrCTIDB reduction]\label{prop:ctidb-reduct}
Given \abbrCTIDB $\pdb =$\newline $\inparen{\worlds, \bpd}$, let $\pdb' = \inparen{\onebidbworlds{\tupset'}, \bpd'}$ be the \emph{\abbrOneBIDB} obtained in the following manner: for each $\tup\in\tupset$, create block $\block_\tup = \inset{\intuple{\tup, j}_{j\in\pbox{\bound}}}$ of disjoint tuples, for all $j\in\pbox{\bound}$.
Given \abbrCTIDB $\pdb =$\newline $\inparen{\worlds, \bpd}$, let $\pdb' = \inparen{\onebidbworlds{\tupset'}, \bpd'}$ be the \emph{\abbrOneBIDB} obtained in the following manner: for each $\tup\in\tupset$, create block $\block_\tup = \inset{\intuple{\tup, j}_{j\in\pbox{\bound}}}$ of disjoint tuples, for all $j\in\pbox{\bound}$ where $\bound_{\tup_j} = j$ for each $\tup_j$ in $\tupset'$.
The probability distribution $\bpd'$ is the characterized by the vector $\vct{p} = \inparen{\inparen{\prob_{\tup, j}}_{\tup\in\tupset, j\in\pbox{\bound}}}$.
Then, the distributions $\mathcal{P}$ and $\mathcal{P}'$ are equivalent.
\end{Proposition}
\AH{Not entirely sure if I the notation above $\bound_{\tup_j} = j$ for each $\tup_j$ in $\tupset'$.}
{\color{red}
\begin{proof}[Proof of~\Cref{prop:ctidb-reduct}]
The distribution $\bpd$ is a distribution disjoint across the set of multiplicities $\pbox{\bound}$ and independent across all $\tup\in\tupset$. By definition,~\Cref{prop:ctidb-reduct} creates $\pdb'$ by producing a block of disjoint tuples $\tup_j = \intuple{\tup, j}$ for each $\tup\in\tupset$ and $j\in\pbox{\bound}$, where $\vct{\prob} = \inparen{\prob_{\tup, j}}_{\tup\in\tupset, j\in\pbox{\bound}}$. Since the probability vector $\vct{\prob_{\pdb}} = \inparen{\prob_{\tup, j}}_{\tup\in\tupset, j\in\pbox{\bound}}$ \emph{and} each $\prob_{\tup, j}, \prob_{\tup, j'}$ for $j\neq j'\in\pbox{\bound}$ are disjoint, the distributions are hence the same.
We first need to prove that any \abbrCTIDB $\pdb$ can be reduced to the \abbrOneBIDB created by~\Cref{prop:ctidb-reduct}. By definition, any $\tup\in\tupset$ can be present $c'\in\pbox{\bound}$ times in the possible worlds it appears in, with a disjoint probability distribution across the multiplicities $\pbox{\bound}$. Then the construction of~\Cref{prop:ctidb-reduct} of the block of tuples $\inset{\intuple{\tup, j}_{j\in\pbox{\bound}}}$ for each $\tup\in\tupset$ indeed encodes the disjoint behavior across multiplicities. $\pdb$ further requires that all $\tup\in\tupset$ are independent, a property which is enforced by independence constraint across all blocks of tuples in~\Cref{def:one-bidb}. Then the construction of $\pdb'$ in~\Cref{prop:ctidb-reduct} is an equivalent representation of $\pdb$.
Next we need to show that the distributions over $\pdb$ and $\pdb'$ are equivalent. The distribution $\bpd$ is a distribution disjoint across the set of multiplicities $\pbox{\bound}$ and independent across all $\tup\in\tupset$. By definition,~\Cref{prop:ctidb-reduct} creates $\pdb'$ by producing a block of disjoint tuples $\tup_j = \intuple{\tup, j}$ for each $\tup\in\tupset$ and $j\in\pbox{\bound}$, where $\vct{\prob} = \inparen{\prob_{\tup, j}}_{\tup\in\tupset, j\in\pbox{\bound}}$. Since the probability vector $\vct{\prob_{\pdb}} = \inparen{\prob_{\tup, j}}_{\tup\in\tupset, j\in\pbox{\bound}}$ \emph{and} each $\prob_{\tup, j}, \prob_{\tup, j'}$ for $j\neq j'\in\pbox{\bound}$ are disjoint, the distributions are hence the same.
\end{proof}
}

View File

@ -163,9 +163,10 @@ Note that we have argued that for our specific example the expectation that we w
\begin{Lemma}\label{lem:tidb-reduce-poly}
For any \abbrCTIDB $\pdb$, $\raPlus$ query $\query$, and lineage polynomial
$\poly\inparen{\vct{X}}=\poly\pbox{\query,\tupset,\tup}\inparen{\vct{X}}$, it holds that $
\expct_{\vct{W} \sim \pdassign}\pbox{\refpoly{}\inparen{\vct{W}}} = \rpoly\inparen{\probAllTup}
$, where $\probAllTup = \inparen{\inparen{\prob_{\tup, j}}_{\tup\in\tupset, j\in\pbox{c}}}.$
\expct_{\vct{W} \sim \pdassign}\pbox{\poly\inparen{\vct{W}}} = \rpoly\inparen{\probAllTup}
$, where $\probAllTup = \inparen{\prob_{\tup}}_{\tup\in\tupset}.$
\end{Lemma}
The proof follows by~\Cref{prop:ctidb-reduct} and~\Cref{lem:bin-bidb-phi-eq-redphi}.
\subsection{Our Techniques}
\mypar{Lower Bound Proof Techniques}

View File

@ -16,8 +16,8 @@
\BOOKMARK [2][-]{subsection.4.2}{\376\377\0004\000.\0002\000\040\000O\000u\000r\000\040\000m\000a\000i\000n\000\040\000r\000e\000s\000u\000l\000t}{section.4}% 16
\BOOKMARK [1][-]{section.5}{\376\377\0005\000\040\000R\000e\000l\000a\000t\000e\000d\000\040\000W\000o\000r\000k}{}% 17
\BOOKMARK [1][-]{section.6}{\376\377\0006\000\040\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n\000s\000\040\000a\000n\000d\000\040\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{}% 18
\BOOKMARK [1][-]{section*.11}{\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000m\000e\000n\000t\000s}{}% 19
\BOOKMARK [1][-]{section*.13}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 20
\BOOKMARK [1][-]{section*.12}{\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000m\000e\000n\000t\000s}{}% 19
\BOOKMARK [1][-]{section*.14}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 20
\BOOKMARK [1][-]{appendix.A}{\376\377\000A\000\040\000M\000i\000s\000s\000i\000n\000g\000\040\000d\000e\000t\000a\000i\000l\000s\000\040\000f\000r\000o\000m\000\040\000S\000e\000c\000t\000i\000o\000n\000\040\0002}{}% 21
\BOOKMARK [2][-]{subsection.A.1}{\376\377\000A\000.\0001\000\040\000B\000a\000c\000k\000g\000r\000o\000u\000n\000d\000\040\000d\000e\000t\000a\000i\000l\000s\000\040\000f\000o\000r\000\040\000p\000r\000o\000o\000f\000\040\000o\000f\000\040\000p\000r\000o\000p\000:\000e\000x\000p\000e\000c\000t\000i\000o\000n\000-\000o\000f\000-\000p\000o\000l\000y\000n\000o\000m}{appendix.A}% 22
\BOOKMARK [2][-]{subsection.A.2}{\376\377\000A\000.\0002\000\040\000P\000r\000o\000o\000f\000\040\000o\000f\000\040\000p\000r\000o\000p\000:\000e\000x\000p\000e\000c\000t\000i\000o\000n\000-\000o\000f\000-\000p\000o\000l\000y\000n\000o\000m}{appendix.A}% 23

BIN
main.pdf

Binary file not shown.

Binary file not shown.