Complementary cyclic intervals in finite grids #
This file records finite-set bookkeeping for the clockwise cyclic intervals used by toroidal
grid rectangles. For distinct endpoints a and b, the two open arcs cIoo a b and cIoo b a
are disjoint and together contain exactly the points other than a and b. The half-open arc
cIco a b restores the initial endpoint, except in the degenerate case, and indexes the columns
or rows of squares covered by a rectangle.
These lemmas are deliberately stated at the one-dimensional Fin n level. Rectangle-pair
arguments for the grid differential can then apply them independently in the column and row
directions before taking products.
Main definitions #
TauCeti.Grid.cIco: the clockwise half-open arc, the one-dimensional shape of the squares a toroidal rectangle covers.TauCeti.Grid.cyclicPosition: the position of a point on the cycle read clockwise from the successor of a basepoint.
Main results #
TauCeti.Grid.disjoint_cIoo_swap: opposite open arcs are disjoint.TauCeti.Grid.mem_cIoo_or_mem_cIoo_swap_iff: a point lies in one opposite arc exactly when it is not an endpoint.TauCeti.Grid.cIoo_union_swap: the two opposite arcs cover the endpoint complement.TauCeti.Grid.mem_cIoo_cyclic_left,TauCeti.Grid.mem_cIoo_cyclic_right: the two rotations of a cyclic order of three points.TauCeti.Grid.notMem_cIoo_of_mem_cIoo: ifalies on the arc fromdtob, thendis not on the arc fromatob.TauCeti.Grid.mem_cIoo_swap_of_notMem: a point off both endpoints that misses one arc lies on the opposite arc.TauCeti.Grid.mem_cIoo_of_mem_cIoo_of_mem_cIoo_swap: ifaandblie on opposite arcs fromctod, thendlies on the clockwise arc fromatob.TauCeti.Grid.mem_cIoo_and_mem_cIoo_swap_of_notMem: cyclic separation is symmetric, socanddthen lie on the two opposite arcs betweenaandb.TauCeti.Grid.card_cIoo_add_card_cIoo_swap: the two arc lengths add ton - 2.TauCeti.Grid.cIoo_image_rev: reversing a clockwise open arc byFin.revgives the clockwise open arc with reversed, exchanged endpoints.TauCeti.Grid.mem_cIoo_finRotate_finRotate,TauCeti.Grid.mem_cIco_finRotate_finRotate: the cyclic permutationfinRotate npreserves the open and half-open arcs, as do its powers (TauCeti.Grid.mem_cIoo_finRotate_pow_finRotate_pow,TauCeti.Grid.mem_cIco_finRotate_pow_finRotate_pow).TauCeti.Grid.mem_cIoo_finRotate_rev,TauCeti.Grid.rev_mem_cIco_finRotate_rev: the half-turnx ↦ finRotate n x.revof the grid points reverses the open arcs of points, and acts on the half-open arcs of squares asFin.rev.TauCeti.Grid.finRotate_ne_self: on a cycle of length at least two, the cyclic successor has no fixed point.TauCeti.Grid.cIoo_finRotate_eq_empty,TauCeti.Grid.cIco_eq_singleton_iff: the arcs from a point to its cyclic successor are empty and a single point, and these are the only one-point half-open arcs;TauCeti.Grid.cIoo_castSucc_succis the case ofr.castSuccandr.succ.TauCeti.Grid.mem_cIco: membership in the clockwise half-open arc.TauCeti.Grid.card_cIco: the length of a half-open arc in standard representatives.TauCeti.Grid.cIco_union_swap: opposite nondegenerate half-open arcs partition the grid.TauCeti.Grid.cIco_union_cIco_eq_cIco_of_mem_cIoo: an interior point cuts a half-open arc into two adjacent half-open arcs.TauCeti.Grid.disjoint_cIco_cIco_of_mem_cIoo: the two pieces of such a cut are disjoint.TauCeti.Grid.ite_eq_or_mem_cIoo_eq_add_add: a cut at two points partitions a closed-end cyclic-order test into three disjoint cases, counted inℕ.TauCeti.Grid.cIoo_union_insert_cIoo_eq_cIoo_of_mem_cIoo: an interior point cuts an open arc into two open arcs and the cutting point itself.TauCeti.Grid.cIoo_subset_cIoo_right_of_mem_cIoo,TauCeti.Grid.cIoo_subset_cIoo_left_of_mem_cIoo: the two pieces of that cut are contained in the arc they cut.TauCeti.Grid.Noninterleaving: two endpoint pairs lie on the same cyclic side of each other.TauCeti.Grid.noninterleaving_rev: non-interleaving is preserved by reversing every endpoint withFin.rev, exchanging the two endpoints within each pair.TauCeti.Grid.noninterleaving_of_eq_finRotate,TauCeti.Grid.noninterleaving_of_finRotate_eq: an endpoint pair of two cyclically adjacent points is non-interleaving with every endpoint pair that avoids its endpoints suitably, usingTauCeti.Grid.finRotate_mem_cIoo_iff(stepping to the cyclic successor stays on the same side of an arc) andTauCeti.Grid.mem_cIoo_finRotate_left_iff(the arc from the successor ofaback toamisses only these two points).TauCeti.Grid.mem_cIoo_succAbove_succAbove,TauCeti.Grid.mem_cIco_succAbove_succAbove: inserting a point into the cycle withFin.succAbovepreserves the arcs between old points, andTauCeti.Grid.mem_cIoo_succ_succAbove_succ_succAbove_ifflocates the inserted point.TauCeti.Grid.mem_cIco_succ_succAbove_succ_succAbove_iff: after inserting a point immediately afteri, a half-open arc between old points is the preimage of the old arc under the collapseFin.predAbove i.TauCeti.Grid.cIco_subset_of_mem_cIoo: a half-open arc starting strictly inside another is contained in it.TauCeti.Grid.mem_cIco_of_mem_cIco_of_mem_cIoo: the membership form of that nesting.TauCeti.Grid.notMem_cIco_finRotate_left: a point is never in the half-open arc starting at its own cyclic successor.TauCeti.Grid.self_mem_cIco_finRotate: a point always lies in a nondegenerate half-open arc ending at its own cyclic successor.TauCeti.Grid.notMem_cIco_of_mem_cIoo_finRotate: a point and its cyclic successor both miss the half-open arc ending strictly before the successor.TauCeti.Grid.mem_cIco_finRotate_iff_mem_insert_cIoo: the half-open arc between cyclic successors is the open arc with its terminal endpoint restored.TauCeti.Grid.ite_mem_cIco_finRotate_sub_ite_mem_cIco_finRotate: moving fromptoqenters the arc fromfinRotate n αtofinRotate n βwhen passingαand leaves it when passingβ.TauCeti.Grid.ite_mem_cIco_finRotate_eq: the arc fromfinRotate n αtofinRotate n βis the complement ofαand of the open arc fromβtoα.TauCeti.Grid.ite_mem_cIco_finRotate_sub_one_add_two_mul_eq: the crossing count for a shifted arc after cutting a half-open arc at an interior point.TauCeti.Grid.notMem_cIco_of_cIco_union: a point missing both halves of a half-open arc cut at an interior point misses the whole arc.TauCeti.Grid.notMem_cIoo_and_notMem_cIco_of_mem_insert_cIco_of_notMem_cIco,TauCeti.Grid.notMem_cIoo_and_notMem_cIco_of_mem_insert_cIco_of_mem_cIoo,TauCeti.Grid.notMem_cIco_of_mem_insert_cIco_of_notMem_cIco,TauCeti.Grid.notMem_cIoo_of_mem_insert_cIco_of_notMem_cIco: a point of the closed arc between two points of an arc misses the pieces of that arc outside them.TauCeti.Grid.mem_cIco_of_mem_insert_cIco,TauCeti.Grid.notMem_cIoo_of_mem_insert_cIco,TauCeti.Grid.notMem_cIco_of_mem_insert_cIco,TauCeti.Grid.notMem_cIco_of_noninterleaving: the cyclic order of points on the two closed arcs betweenaandb.TauCeti.Grid.cyclicPosition_lt_of_notMem_cIco: two distinct points whose half-open arc avoids the basepoint come in increasing order of cyclic position.
References #
This supplies a prerequisite for TauCetiRoadmap/HeegaardFloer/README.md, Lane G.3, "The
complexes and ∂² = 0", where the annular cases in the juxtaposition proof use the fact that
the two complementary cyclic intervals partition the non-endpoint columns or rows. The
terminology follows Ozsváth--Stipsicz--Szabó, Grid Homology for Knots and Links, Chapter 3.
The clockwise open cyclic interval from a to b in Fin n.
If a < b in the standard representatives, this is the ordinary open interval
a < x < b. If b ≤ a and a ≠ b, it wraps around 0, so it is the union of
a < x and x < b. The interval from a point to itself is empty.
Instances For
The initial endpoint is not in its open cyclic interval.
The terminal endpoint is not in its open cyclic interval.
The clockwise half-open cyclic interval from a to b in Fin n.
This is the arc that starts at a and stops just before b, so it is the open arc cIoo a b
with its initial endpoint restored, and it is empty when the two endpoints agree. It is the
one-dimensional shape of the set of squares a toroidal rectangle covers, whereas cIoo is the
shape of the set of grid points strictly inside it. Mathlib's circular-order intervals stop at
Set.cIcc and Set.cIoo precisely because a half-open circular interval cannot be described
without separating the degenerate case, which is why the definition below is by cases.
Instances For
Membership in a clockwise half-open cyclic interval, unfolded as inequalities between the
standard representatives. Only the comparison against the initial endpoint is weakened relative
to Grid.mem_cIoo.
The non-wrapping description of a half-open cyclic interval: when the initial endpoint precedes the terminal one, the arc is the ordinary half-open interval between them.
The wrapping description of a half-open cyclic interval: when the terminal endpoint precedes the initial one, the arc runs off the top and reappears at the bottom.
The terminal endpoint is not in its half-open cyclic interval.
A non-wrapping half-open cyclic interval is the ordinary half-open interval in Fin n.
A wrapping half-open cyclic interval is the union of the final segment starting at its initial endpoint and the initial segment ending before its terminal endpoint.
Opposite nondegenerate half-open cyclic intervals partition the grid.
Two oriented cyclic intervals have non-interleaving endpoint pairs.
The endpoints a₀, a₁ lie on the same side of the pair b₀, b₁, and conversely. This
two-sided formulation handles shared-endpoint cases uniformly.
Instances For
An endpoint pair is non-interleaving with itself.
Non-interleaving is symmetric in the two endpoint pairs.
Of two distinct points of arcs with a common start, one lies in the arc of the other, and the other lies strictly between it and the end of that arc.
A point v strictly inside the arc from u to w cuts the open arc from a point s of the
arc from u to v to w into the open arc from s to v and the arc from v to w,
counted.
Cutting the circle at distinct points u and v splits the event that v lies after s
and at or before t into three disjoint cyclic orders. The first two place both t and s
on one side of the cut, with t before s; the third separates them across the cut.
If a and b lie on opposite arcs from c to d, then d lies on the clockwise arc from
a to b.
If a lies on the clockwise arc from c to d while b lies on the opposite arc, then the four
points occur in the cyclic order c, a, d, b, so d lies on the clockwise arc from a to
b.
Cyclic separation is symmetric: if a lies on the clockwise arc from c to d while b,
distinct from both endpoints, lies off it, then c and d lie on the two opposite arcs between
a and b.
A clockwise open cyclic interval reversed by Fin.rev is the clockwise open cyclic interval
with the two endpoints reversed and exchanged.
Coordinate reversal reverses the cyclic order, so it turns the clockwise arc from a to b into
the clockwise arc from bᵒ to aᵒ.
Membership in a clockwise open arc with both endpoints and the queried point reversed by
Fin.rev. Since coordinate reversal reverses the cyclic order, the reversed point lies in the
reversed arc exactly when the original point lies in the opposite arc.
The half-turn x ↦ finRotate n x.rev of the cycle, which is negation modulo n, reverses
the cyclic order: it carries the clockwise open arc from a to b onto the clockwise open arc
between the images of b and a.
On squares named by their lower-left grid points, the half-turn x ↦ finRotate n x.rev of
the grid points acts as Fin.rev: it carries the clockwise half-open arc of squares from a to
b onto the one between the images of b and a under the half-turn of the grid points.
Between distinct endpoints, the half-open cyclic interval between the cyclic successors of a
and b is the open interval from a to b with its terminal endpoint b restored. On a grid,
with a and b naming rows of squares, these are the lines a + 1, …, b.
Crossing count for a shifted arc. For distinct α and β, going from p to q enters
the half-open arc from finRotate n α to finRotate n β once if the arc from p to q passes
α, and leaves it once if it passes β. On a grid, with α and β naming rows of squares and
p, q horizontal grid lines, the shifted arc is the band of lines α + 1, …, β strictly above
the centre of square row α and below the centre of square row β.
For distinct α and β, a point s lies on the half-open arc from finRotate n α to
finRotate n β unless it is α or lies strictly between β and α. On a grid, with α and β
naming rows of squares, the band of lines α + 1, …, β is the complement of the lines
β + 1, …, α.
Cutting a half-open arc at an interior point. Let s lie on the half-open arc from B
to T and let α ≠ β. The crossing count of T for the arc from finRotate n α to
finRotate n β, corrected by the positions of α and β relative to the cut at s, vanishes
unless s lies strictly between β and α. On a grid this is the bookkeeping of a pentagon at
the replaced grid line: its terminal side runs from row B up to row T through the turn row
s, and α, β are the square rows of two markings next to the line. The total also vanishes
when α and β lie in the two bigons below and above the turn of a column commutation.
An endpoint pair whose second point is the cyclic successor of its first is non-interleaving with every endpoint pair whose first point avoids the first and whose second point avoids the second.
An endpoint pair whose first point is the cyclic successor of its second is non-interleaving with every endpoint pair disjoint from it.
Non-interleaving is preserved by reversing every endpoint with Fin.rev, with the cyclic
orientation reversal accounted for by exchanging the two endpoints within each pair.
Inserting a point into a cycle #
A point inserted immediately after i lies strictly inside the arc between two old points
exactly when the arc passes from i to its successor, that is, when i lies in the half-open
arc.
Collapsing the point inserted immediately after i back onto i with Fin.predAbove
identifies the half-open arcs between old points before and after the insertion.
Moving the initial endpoint of a half-open cyclic interval covers it by the interval from the
new initial endpoint and the interval between the two initial endpoints: every point of
cIco t u lies in cIco w u ∪ cIco t w. With no hypothesis on w the two intervals may overlap,
so this is a covering by a union, not a partition; the strict cut is
cIco_union_cIco_eq_cIco_of_mem_cIoo.
A point is never in the half-open cyclic interval starting at its own successor.
Going clockwise from c + 1, the point c is the last point reached — only after a full
cycle. The half-open arc cIco (c + 1) r stops before r, hence before completing the
cycle, so it never reaches c.
Stated with c + 1 rather than finRotate n c so the left-hand side is already
in simp normal form (finRotate_apply would otherwise rewrite it). The NeZero n
instance needed for c + 1 is supplied locally from c itself (as in finRotate_apply),
so no typeclass hypothesis is required.
A point lies in every nondegenerate half-open cyclic interval ending at its own cyclic
successor: going clockwise, a is the last point reached before finRotate n a, so any arc
that stops there and does not start there has already passed through a.
Let m lie strictly between a and c, let s lie in the half-open cyclic interval from a
to m and s' in the one from m to c. Then s lies in the half-open interval from a to c
and s' strictly between s and c.
Let m lie strictly between a and c, let s lie in the half-open cyclic interval from a
to m and s' in the one from m to c. A point lies in the half-open interval from a to s
or strictly between s' and c exactly when it lies in the half-open interval from a to c
outside the closed interval from s to s', and it never lies in both.
Let m lie strictly between a and c, let s lie in the half-open cyclic interval from a
to m and s' in the one from m to c. A point lies strictly between s and m or in the
half-open interval from m to s' exactly when it lies strictly between s and s', and it
never lies in both.
A point of the closed arc from s' to s misses the open arc from s to b, and a point of
the closed arc from s to s' misses the arc from a to s, when s but not s' lies in the
arc from a to b.
A point of the closed arc between two points s and then s' of the arc from a to b
misses the arc after the second point and the arc before the first.
A point of the closed arc from s to s' misses the arc from a to s when s' precedes
s in the arc from a to b, and the point misses an arc from a containing s'.
A point of the closed arc from s' to s misses the open arc from s to b when s'
follows s in that arc, and the point misses an arc ending at b containing s'.
If c lies on the closed arc from b to a and d lies on the closed arc from a to b,
with c ≠ d, then a lies on the half-open arc from c to d unless a = d.
Let the distinct points c₀, c₁ lie on the closed arc from b to a and the distinct
points d₀, d₁ on the closed arc from a to b. If the pairs do not interleave and a ≠ d₁,
then d₀ is not on the half-open arc from c₁ to a.
Positions on the cycle #
The cyclic successor p + 1 of p (that is, finRotate n p) comes first, in position
0.
The point p itself comes last, in position n - 1.
Two distinct points whose half-open arc avoids p come in strictly increasing order of
position read from the cyclic successor of p.