<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Geoffrey Irving - Various Theory Questions</title>
<style type="text/css">
.equation{padding-left: 30pt;}
.proof{padding-left: 20pt;}
</style>
</head>
<body>

<h1>Various Theory Questions</h1>

<p>
This page contains a few theory/algorithm questions, some of which have answers.
</p>
<ul>
<li><a href="#cfls">Intersections with CFLs</a></li>
<li><a href="#turing">Linear Time Turing Machines</a></li>
<li><a href="#storage">Verifiable Third Party Data Storage</a></li>
<li><a href="#equipartition">Orthogonal Equipartitions in the Plane</a></li>
<li><a href="#visibility">Visibility in a Static Homogenous Universe</a></li>
</ul>
<p>
If you have firefox or another <a href="http://www.w3.org/Math">MathML</a> capable browser and you
are not already viewing it, <a href="theory.xml">here is a much prettier version of this page</a>
generated with <a href="http://golem.ph.utexas.edu/~distler/blog/itex2MML.html">itex2MML</a>.
</p>

<hr/><h3 id="cfls">Intersections with CFLs<br/><small>23jun2007</small></h3>

<p>
The intersection of a regular language and a context free language is always context free.  The question
is whether the converse of this is true: if <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> is a language such that the intersection of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> with every CFL is a CFL,
is <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> necessarily regular?
</p><p>
I believed this is true, but did not know how to prove it.  <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> must be a CFL since it is the intersection of itself
and the language of all strings.  Intuitively, a language which is a nonregular CFL must require some particular
use of the stack for correct recognition, and two stacks cannot be simulated with one stack except in very special
cases...
</p><p>
While writing the above paragraph, I just figured out one of the special cases: <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi><mo>=</mo><mo stretchy="false">{</mo><msup><mi>a</mi> <mi>n</mi></msup><msup><mi>b</mi> <mi>n</mi></msup><mo stretchy="false">&VerticalBar;</mo><mi>n</mi><mo>&ge;</mo><mn>0 </mn><mo stretchy="false">}</mo></math>.
All intersections of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> and a CFL are equivalent to intersections of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> and regular languages, since PDAs are equivalent
to finite automata when applied to alphabets with only one element.  So the answer is no.
</p>

<hr/><h3 id="turing">Linear Time Turing Machines<br/><small>24jun2007</small></h3>

<p>
<b>Theorem.</b> Let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> be a language recognized by a Turing machine which always halts in time linear in the input size.
Then <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> is regular.
</p>
<div class="proof">
<p>
<i>Proof:</i><br/>
Let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> be a TM, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi><mo>=</mo><mi>L</mi><mo stretchy="false">(</mo><mi>M</mi><mo stretchy="false">)</mo></math>, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>T</mi><mo stretchy="false">(</mo><mi>w</mi><mo stretchy="false">)</mo></math> the time to halt on input <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi></math>, and assume <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>T</mi><mo stretchy="false">(</mo><mi>w</mi><mo stretchy="false">)</mo><mo>&le;</mo><mi>c</mi><mrow><mo>&VerticalBar;</mo><mi>w</mi><mo>&VerticalBar;</mo></mrow></math> for some integer <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>c</mi></math>.  Here we count only the number of
tape moves required, so recognizing or not recognizing the empty string takes zero time.  We will construct an NFA <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math> which simulates the
action of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> on any substring where <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> visits each cell at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> times for some integer <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> which will be specified later.  The states of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math> will
include <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> copies of the states of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math>, corresponding to the state of the Turing machine all the times it visited the current cell, and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> bits
describing which direction the machine moved to or from the left each time.  At each moment, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math> nondeterministically guesses the values of the tape
during each visitation, checks that all transitions to and from the left cell over the history are consistent, and predicts the transitions to
the cell to the right.  Some of the state copies may be the halt state if <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math> guesses that <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> will visit a cell fewer than <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> times.
</p><p>
Let q(M) be the number of states of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math>, so that <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>q</mi><mo>=</mo><mi>q</mi><mo stretchy="false">(</mo><mi>N</mi><mo stretchy="false">)</mo><mo>=</mo><msup><mn>2 </mn> <mi>k</mi></msup><mi>q</mi><mo stretchy="false">(</mo><mi>M</mi><msup><mo stretchy="false">)</mo> <mi>k</mi></msup></math> is the number of states of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math>.  Given an input string
<math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi></math>, we can label each position in w visited at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> times with the corresponding state of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math>.  For any two positions with matching states, we
can remove that substring of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi></math> without affecting the execution history on the rest of the tape.  By the pidgeon hole principle, any string <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi></math>
containing at least <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>q</mi></math> positions visited at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> times can be decomposed as <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi><mo>=</mo><mi>xaybz</mi></math>, where <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>a</mi></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>b</mi></math> are single letters visited at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math>
times with matching histories, and each letter in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>x</mi></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>z</mi></math> is visited more than <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> times except for up to <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>q</mi></math> positions total between <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>x</mi></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>z</mi></math>.
In the first case, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>T</mi><mo stretchy="false">(</mo><mi>w</mi><mo stretchy="false">)</mo><mo>&ge;</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>1 </mn><mo stretchy="false">)</mo><mrow><mo>&VerticalBar;</mo><mi>w</mi><mo>&VerticalBar;</mo></mrow><mo>&minus;</mo><mi>kq</mi></math>, and in the second case we can remove <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>yb</mi></math> to get <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi><mo>&prime;</mo><mo>=</mo><mi>xaz</mi></math> with <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>T</mi><mo stretchy="false">(</mo><mi>w</mi><mo>&prime;</mo><mo stretchy="false">)</mo><mo>&ge;</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>1 </mn><mo stretchy="false">)</mo><mrow><mo>&VerticalBar;</mo><mi>w</mi><mo>&prime;</mo><mo>&VerticalBar;</mo></mrow><mo>&minus;</mo><mi>q</mi><mo>&minus;</mo><mi>k</mi></math>.  In
either case, any string <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi></math> can be reduced to a string <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi><mo>&prime;</mo></math> with <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>T</mi><mo stretchy="false">(</mo><mi>w</mi><mo>&prime;</mo><mo stretchy="false">)</mo><mo>&ge;</mo><mo stretchy="false">(</mo><mi>k</mi><mo>+</mo><mn>1 </mn><mo stretchy="false">)</mo><mrow><mo>&VerticalBar;</mo><mi>w</mi><mo>&prime;</mo><mo>&VerticalBar;</mo></mrow><mo>&minus;</mo><mi>q</mi><mo>&minus;</mo><mi>k</mi></math> where <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi><mo>&prime;</mo></math> have the same execution history
at their left and right ends.
</p><p>
If the number of visits <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> makes to a cell is bounded, we can exactly simulate <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> with <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>N</mi></math> for some <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math>.  Otherwise, set <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi><mo>=</mo><mi>c</mi></math> and choose a string
w = uav with some position a visited more than <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mn>2 </mn><mi>q</mi><mo>+</mo><mn>2 </mn><mi>c</mi></math> times.  Applying the above reduction to <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>u</mi></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>v</mi></math>, we get <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>w</mi><mo>&prime;</mo><mo>=</mo><mi>u</mi><mo>&prime;</mo><mi>av</mi><mo>&prime;</mo></math> with
</p>
<math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><mi>T</mi><mo stretchy="false">(</mo><mi>w</mi><mo>&prime;</mo><mo stretchy="false">)</mo><mo>&ge;</mo><mo stretchy="false">(</mo><mi>c</mi><mo>+</mo><mn>1 </mn><mo stretchy="false">)</mo><mrow><mo>&VerticalBar;</mo><mi>u</mi><mo>&prime;</mo><mo>&VerticalBar;</mo></mrow><mo>&minus;</mo><mi>q</mi><mo>&minus;</mo><mi>c</mi><mo>+</mo><mn>2 </mn><mi>q</mi><mo>+</mo><mn>2 </mn><mi>c</mi><mo>+</mo><mo stretchy="false">(</mo><mi>c</mi><mo>+</mo><mn>1 </mn><mo stretchy="false">)</mo><mrow><mo>&VerticalBar;</mo><mi>v</mi><mo>&prime;</mo><mo>&VerticalBar;</mo></mrow><mo>&minus;</mo><mi>q</mi><mo>&minus;</mo><mi>c</mi><mo>&ge;</mo><mo stretchy="false">(</mo><mi>c</mi><mo>+</mo><mn>1 </mn><mo stretchy="false">)</mo><mrow><mo>&VerticalBar;</mo><mi>w</mi><mo>&prime;</mo><mo>&VerticalBar;</mo></mrow></math>
<p>
which is a contradiction.  Thus <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>M</mi></math> can be simulated by a DFA, and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> is regular.
</p></div>

<hr/><h3 id="storage">Verifiable Third Party Data Storage<br/><small>25jun2007</small></h3>

<p>
Say I have a large amount of information, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>d</mi></math>, and would like to give the information to someone else to store for me.  I want to be able to
compute a small hash value <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>h</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>d</mi><mo stretchy="false">)</mo></math> that allows me to make an exponential number of challenge response queries proving the other party is
still storing all the data (with large probability).
</p><p>
Note that if only a few challenge response iterations are required, it suffices to compute several cryptographic hashes of the data combined
with a few random seed values, and store the hash values and seeds.  If the hashed result of each hash was used as the next seed, and the
hashes were used as challenges in reversed order, the cost of the storing the seeds is constant.  A megabyte of this hash data would be
sufficient to ask challenge questions every day for over 100 years if 160-bit SHA1 hashes were used, so this question is probably of
purely academic interest.
</p>

<hr/><h3 id="equipartition">Orthogonal Equipartitions in the Plane<br/><small>26jun2007</small></h3>

<p>
Consider a set of points in the plane.  We want to find two orthogonal lines which partition the set into four nearly equal
pieces (differing in size by at most 1).  To avoid degeneracies, we assign points lying on the chosen lines to whichever side is convenient.
The following result can be found in<br/>
<a href="http://paul.rutgers.edu/~samroy/Papers/BUmain.pdf">S. Roy and W. Steiger. Combinatorial and Algorithmic Implications of the Borsuk-Ulam
Theorem. In Fall Workshop on Computational Geometry, 2005</a>:
</p>

<p>
<b>Theorem.</b> Let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> be a set of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>n</mi></math> points in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>&Ropf;</mi> <mn>2 </mn></msup></math>.  Then an orthogonal equipartition of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> exists, and can be found in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> time.
</p>
<div class="proof"><p>
<i>Proof:</i><br/>
Let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> be the set of oriented lines in the plane, and consider the function <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>f</mi><mo>:</mo><msup><mi>S</mi> <mn>1 </mn></msup><mo>&rightarrow;</mo><mi>L</mi></math> mapping an angle <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&alpha;</mi></math> to the line of angle <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&alpha;</mi></math>
dividing <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> into equal subsets.  For any line <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>l</mi></math>, let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msub><mi>P</mi> <mi>L</mi></msub><mo stretchy="false">(</mo><mi>l</mi><mo stretchy="false">)</mo></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msub><mi>P</mi> <mi>R</mi></msub><mo stretchy="false">(</mo><mi>l</mi><mo stretchy="false">)</mo></math> be the sets of points to the left and right of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>l</mi></math>, and define
a function
</p>
<math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><mi>g</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo>&VerticalBar;</mo><msub><mi>P</mi> <mi>L</mi></msub><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>&cap;</mo><msub><mi>P</mi> <mi>L</mi></msub><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo>+</mo><mi>&pi;</mi><mo stretchy="false">/</mo><mn>4 </mn><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>&VerticalBar;</mo></mrow><mo>&minus;</mo><mrow><mo>&VerticalBar;</mo><msub><mi>P</mi> <mi>L</mi></msub><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>&cap;</mo><msub><mi>P</mi> <mi>R</mi></msub><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo>+</mo><mi>&pi;</mi><mo stretchy="false">/</mo><mn>4 </mn><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>&VerticalBar;</mo></mrow><mo>.</mo></math>
<p>
The two lines <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>f</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>f</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo>+</mo><mi>&pi;</mi><mo stretchy="false">/</mo><mn>4 </mn><mo stretchy="false">)</mo></math> form an orthogonal equipartition iff <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mrow><mo>&VerticalBar;</mo><mi>g</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo><mo>&VerticalBar;</mo></mrow><mo>&le;</mo><mn>1 </mn></math>.  Since <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>g</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo>+</mo><mi>&pi;</mi><mo stretchy="false">/</mo><mn>4 </mn><mo stretchy="false">)</mo><mo>=</mo><mo lspace="verythinmathspace" rspace="0em">&minus;</mo><mi>g</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>g</mi></math> has jumps
of at most 2, such an <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&alpha;</mi></math> always exists by discrete continuity.
</p><p>
To find an orthogonal equipartition in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> time, we perform a binary search on the set of angles formed by all pairs of points in the set.  This takes
<math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><msup><mi>n</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> iterations each of which costs <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></math> time to find the two median lines and evaluate <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>g</mi></math>, for a total of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> time.
</p></div>

<p>
The same paper also shows that any algorithm which operates by testing whether there exists orthgonal equipartitions through specific points must take at
least <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> time.  However, this result does not apply to all algorithms, or even to the algorithm given in the above proof.  In fact, the expensive
part of the above algorithm, computing values of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>g</mi></math>, seems to involve a large amount of redundant work.  In order to speed up this algorithm, we require the
following conjecture, which is hopefully true.
</p><p>
<b>Conjecture.</b> Let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> be a set of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>n</mi></math> points in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>&Ropf;</mi> <mn>2 </mn></msup></math> in general position, and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> the set of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>n</mi><mo stretchy="false">(</mo><mi>n</mi><mo>&minus;</mo><mn>1 </mn><mo stretchy="false">)</mo><mo stretchy="false">/</mo><mn>2 </mn></math> lines between the points.  Then for sufficiently
small <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>r</mi></math>, say <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>r</mi><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math>, the arrangement formed by choosing <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>r</mi><mi>log</mi><mi>r</mi><mo stretchy="false">)</mo></math> random lines from <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>L</mi></math> has at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>n</mi><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup></math> points of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> in each face of the
arrangement, with probability at least <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mn>1 </mn><mo stretchy="false">/</mo><mn>2 </mn></math>.
</p><p>
This is plausible since if we divide the partition the set of points into subsets of size <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo></math>, the random set of lines will hit each one of these
subsets several times with probability at least <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mn>1 </mn><mo stretchy="false">/</mo><mn>2 </mn></math> (with appropriately chosen constants).  
</p><p>
Assuming this conjecture is true, we can speed up the previous algorithm as follows.  Set <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>r</mi><mo>=</mo><mi>log</mi><mi>n</mi></math>, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>s</mi><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>r</mi><mi>log</mi><mi>r</mi><mo stretchy="false">)</mo></math>, and choose an arrangement <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>A</mi></math> of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>m</mi></math> lines between
points of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> such that each face of A contains at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>n</mi><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup></math> points in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math>.  Guessing such a set of lines and computing the arrangement <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>A</mi></math> takes <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><msup><mi>m</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mo lspace="0em" rspace="thinmathspace">polylog</mo><mi>n</mi><mo stretchy="false">)</mo></math>
time, and locating each point of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> in the arrangement costs <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>m</mi><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math>.  This process can be repeated until the desired bound is
achieved.  We also compute and store the number of points in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> contained in each face.
</p><p>
By the zone theorem, every line touches at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo></math> faces of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>A</mi></math>, containing at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>m</mi><mi>n</mi><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">/</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> points of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math>.  Thus, given any line, we can
compute the number of points in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>P</mi></math> above the line to a guaranteed accuracy of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">/</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><msup><mi>m</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo></math> time.  Moreover, given a fixed
angle, performing this approximate count for the line of that angle through every vertex in the arrangement takes <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><msup><mi>m</mi> <mn>4 </mn></msup><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mo lspace="0em" rspace="thinmathspace">polylog</mo><mi>n</mi><mo stretchy="false">)</mo></math> time and gives us two lines
bracketing the median line with at most <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">/</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> points between them.  The exact median line can then be found using kth element selection, for a total cost
of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">/</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math>.  Counting the number of points in a quadrant formed by two lines (i.e., computing <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>g</mi><mo stretchy="false">(</mo><mi>&alpha;</mi><mo stretchy="false">)</mo></math>) has the same cost, so each step of the binary search
in the previous algorithm takes time <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">/</mo><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math>, for a total cost of <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math>.
</p><p>
Thus, if the conjecture is true, an orthogonal equipartition can be found in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></math> time using a randomized algorithm.
</p>

<hr/><h3 id="visibility">Visibility in a Static Homogenous Universe<br/><small>26jun2007</small></h3>

<p>
Assume stars of radius <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>r</mi></math> are distributed throughout <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>&Ropf;</mi> <mn>3 </mn></msup></math> with independent uniform density <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&rho;</mi></math>.  I.e., the expected number of star centers within
a set <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>U</mi></math> is <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&rho;</mi><mrow><mo>&VerticalBar;</mo><mi>U</mi><mo>&VerticalBar;</mo></mrow></math>, and the distributions of stars in disjoint sets are independent.
</p><p>
Let <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msub><mi>d</mi> <mi>n</mi></msub><mo>=</mo><mi>k</mi><mi>n</mi><mi>log</mi><mi>n</mi></math>, with the constant <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> to be chosen later, and consider the spherical shell A centered at the origin with radii between <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msub><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow></msub></math>
and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msub><mi>d</mi> <mi>n</mi></msub></math>.  The set of stars within this shell will be opaque if their projection onto to the unit sphere centered at the origin is the entire
sphere.  With probability <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&Omega;</mi><mo stretchy="false">(</mo><mn>1 </mn><mo stretchy="false">)</mo></math>, the number of stars in the shell is
</p>
<math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><mrow><mtable columnalign="right left right left right left right left right left" columnspacing="0em"><mtr><mtd><mi>c</mi><mo>=</mo></mtd> <mtd><mi>&rho;</mi><mrow><mo>&VerticalBar;</mo><mi>A</mi><mo>&VerticalBar;</mo></mrow><mo>=</mo><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>&rho;</mi><mo stretchy="false">(</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>3 </mn></msubsup><mo>&minus;</mo><msubsup><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow> <mn>3 </mn></msubsup><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>=</mo><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>&rho;</mi><mo stretchy="false">(</mo><msub><mi>d</mi> <mi>n</mi></msub><mo>&minus;</mo><msub><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow></msub><mo stretchy="false">)</mo><msubsup><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow> <mn>2 </mn></msubsup><mo stretchy="false">)</mo></mtd></mtr> <mtr><mtd><mo>=</mo></mtd> <mtd><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>&rho;</mi><mo stretchy="false">(</mo><msub><mi>d</mi> <mi>n</mi></msub><mo>&minus;</mo><msub><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow></msub><mo stretchy="false">)</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>2 </mn></msubsup><mo stretchy="false">)</mo></mtd></mtr></mtable></mrow></math>
<p>
The projection of each star has area <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&Omega;</mi><mo stretchy="false">(</mo><msup><mi>r</mi> <mn>2 </mn></msup><mo stretchy="false">/</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>2 </mn></msubsup><mo stretchy="false">)</mo></math> on the sphere, and we can pick <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>m</mi><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>2 </mn></msubsup><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo></math>
points on the sphere s.t. the projection covers the sphere if there is a star center within <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>r</mi><mo stretchy="false">/</mo><mrow><mn>2 </mn><msub><mi>d</mi> <mi>n</mi></msub></mrow></math> of each point.  Since the probability of containing any
such point is <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&Omega;</mi><mo stretchy="false">(</mo><msup><mi>r</mi> <mn>2 </mn></msup><mo stretchy="false">/</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>2 </mn></msubsup><mo stretchy="false">)</mo></math>, the expected number of randomly placed stars required to cover all such points is <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>m</mi><mi>log</mi><mi>m</mi><mo stretchy="false">)</mo></math>.  Thus
with probability <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&Omega;</mi><mo stretchy="false">(</mo><mn>1 </mn><mo stretchy="false">)</mo></math>, the sphere will be covered and the shell will be opaque if there are at least <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>O</mi><mo stretchy="false">(</mo><mi>m</mi><mi>log</mi><mi>m</mi><mo stretchy="false">)</mo></math> stars in the shell.  This requires
</p>
<math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><mrow><mtable columnalign="right left right left right left right left right left" columnspacing="0em"><mtr><mtd><mi>O</mi><mo stretchy="false">(</mo><mi>m</mi><mi>log</mi><mi>m</mi><mo stretchy="false">)</mo><mo>&lt;</mo></mtd> <mtd><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>c</mi><mo stretchy="false">)</mo></mtd></mtr> <mtr><mtd><mi>O</mi><mo stretchy="false">(</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>2 </mn></msubsup><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup><mi>log</mi><mo stretchy="false">(</mo><msub><mi>d</mi> <mi>n</mi></msub><mo stretchy="false">/</mo><mi>r</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>&lt;</mo></mtd> <mtd><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>&rho;</mi><mo stretchy="false">(</mo><msub><mi>d</mi> <mi>n</mi></msub><mo>&minus;</mo><msub><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow></msub><mo stretchy="false">)</mo><msubsup><mi>d</mi> <mi>n</mi> <mn>2 </mn></msubsup><mo stretchy="false">)</mo></mtd></mtr> <mtr><mtd><mi>O</mi><mo stretchy="false">(</mo><msup><mi>r</mi> <mrow><mo lspace="verythinmathspace" rspace="0em">&minus;</mo><mn>2 </mn></mrow></msup><mi>log</mi><msub><mi>d</mi> <mi>n</mi></msub><mo stretchy="false">)</mo><mo>&lt;</mo></mtd> <mtd><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>&rho;</mi><mo stretchy="false">(</mo><msub><mi>d</mi> <mi>n</mi></msub><mo>&minus;</mo><msub><mi>d</mi> <mrow><mi>n</mi><mo>&minus;</mo><mn>1 </mn></mrow></msub><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mtd></mtr></mtable></mrow></math>
<p>
Plugging in <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msub><mi>d</mi> <mi>n</mi></msub><mo>=</mo><mi>k</mi><mi>n</mi><mi>log</mi><mi>n</mi></math> gives
</p>
<math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><mrow><mtable columnalign="right left right left right left right left right left" columnspacing="0em"><mtr><mtd><mi>O</mi><mo stretchy="false">(</mo><msup><mi>r</mi> <mrow><mo lspace="verythinmathspace" rspace="0em">&minus;</mo><mn>2 </mn></mrow></msup><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo><mo>&lt;</mo></mtd> <mtd><mi>&Omega;</mi><mo stretchy="false">(</mo><mi>k</mi><mi>&rho;</mi><mi>log</mi><mi>n</mi><mo stretchy="false">)</mo></mtd></mtr> <mtr><mtd><mi>k</mi><mo>&lt;</mo></mtd> <mtd><mi>O</mi><mo stretchy="false">(</mo><mi>&rho;</mi><mo stretchy="false">/</mo><msup><mi>r</mi> <mn>2 </mn></msup><mo stretchy="false">)</mo></mtd></mtr></mtable></mrow></math>
<p>
A sufficiently large <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>k</mi></math> ensures that the probability that each such shell is opaque is <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>&Omega;</mi><mo stretchy="false">(</mo><mn>1 </mn><mo stretchy="false">)</mo></math> (i.e., is bounded away from zero), so the probability that some shell is opaque is 1.
</p><p>
The assumptions on the distributions can probably be weakened to the assumption that the correlation between sets goes to zero as the separation between
them increases (for example, this is true of a Poisson disk distribution where stars are not allowed to overlap), since projecting onto a sphere
reduces this correlation as much as desired for sufficiently large log n.
</p><p>
Thus, in a static homogenous universe, you can only see finitely many stars.
</p>

<hr/>
<p><a href="mailto:irving@naml.us">irving@naml.us</a></p>
</body>
</html>
