Non-crossing constraint for two-layer association lines #
A Finset (ι × κ) of links between two ordered tiers is non-crossing
when k₁ < k₂ → i₁ ≤ i₂ for any two links (k₁, i₁), (k₂, i₂) — i.e. the
index coordinates monovary, which in a two-layer drawing is exactly the
absence of crossing segments; equivalently (over linear tiers), the
componentwise order is total on the link set, [YJ15]'s edge-order
axiom. This is the discrete-index
[Gol76] / [Sag86] No-Crossing Constraint ([Sag88] derives
it from association-as-temporal-overlap) and the canonical
filter on autosegmental GEN.
Main definitions #
IsNonCrossing links: the link set monovaries ([Preorder]-general).Crosses a b/IndexCrosses links p: two links cross;pcrosses some link already inlinks— the decidable GEN filter.
Main results #
isNonCrossing_insert_iff_not_indexCrosses: a candidate may be added iff it crosses nothing (IsNonCrossing.insert_of_not_indexCrossesis the GEN direction).isNonCrossing_image/IsNonCrossing.image_monotone:IsNonCrossingcommutes withFinset.image, and survives monotone reindexing of the upper coordinate.
Set-level non-crossing property (via mathlib MonovaryOn) #
The link set has no crossings: its two index coordinates monovary.
Equations
- Autosegmental.IsNonCrossing links = MonovaryOn Prod.snd Prod.fst ↑links
Instances For
IsNonCrossing in elementary form.
A pair is non-crossing iff its two links agree in tier- and backbone-order.
A subset of a non-crossing link set is non-crossing.
Inserting p keeps non-crossing iff p crosses no existing link: the
insert-algebra form, Set.pairwise_insert specialised to IsNonCrossing
via monovaryOn_insert.
Equations
- Autosegmental.instDecidableIsNonCrossingOfDecidableLTOfDecidableLE = decidable_of_iff (∀ l₁ ∈ links, ∀ l₂ ∈ links, l₁.1 < l₂.1 → l₁.2 ≤ l₂.2) ⋯
Reindexing along Finset.image #
IsNonCrossing transports across a Finset.image: the image link set is
non-crossing iff the index coordinates monovary after reindexing by f. The
Finset companion of monovaryOn_image, and the single place the definition
is unfolded against an image.
Pushing a non-crossing link set forward along a monotone map on the upper
(first) coordinate keeps it non-crossing: the autosegmental analogue of
SimpleGraph.map along a monotone vertex map. The upper index needs a
LinearOrder (the run-collapse domain is ℕ) so that ρ reflects <. Used to
lift planarity through the OCP run-collapse ρ (Autosegmental/Collapse.lean).
Relational composition through a shared tier #
Association relations compose through a shared middle tier — the Finset
companion of SetRel.comp. Planarity is not closed under composition:
fan-in followed by fan-out at a single middle position (an autosegment
multiply-linked from above whose position multiply-links onward) composes to a
crossing — see the counterexample below. It is closed when the middle tier does
not fan through, in either direction: IsNonCrossing.relComp_of_injOn_fst
(no fan-out) and IsNonCrossing.relComp_of_injOn_snd (no fan-in).
Relational composition of link sets through a shared middle tier.
Equations
- Autosegmental.relComp R S = Finset.image (fun (p : (ι × κ) × κ × μ) => (p.1.1, p.2.2)) ({p ∈ R ×ˢ S | p.1.2 = p.2.1})
Instances For
Composition preserves non-crossing when the middle tier does not fan out:
S is functional on middle positions (Set.InjOn Prod.fst), so a middle tie
forces equal outputs.
Composition preserves non-crossing when the middle tier does not fan in:
R is injective onto middle positions (Set.InjOn Prod.snd), so a middle tie
contradicts the strict order on inputs.
The crossing relation and the GEN filter #
Two links cross: as a pair they fail to be non-crossing (equivalently their
endpoints straddle in opposite tier- and backbone-order — crosses_iff).
Equations
- Autosegmental.Crosses a b = ¬Autosegmental.IsNonCrossing {a, b}
Instances For
p crosses some link already in links — the decidable GEN filter.
Equations
- Autosegmental.IndexCrosses links p = ∃ l ∈ links, Autosegmental.Crosses p l
Instances For
p crosses nothing iff it is pairwise non-crossing with every existing link.
Adding p keeps non-crossing iff it crosses no existing link: the GEN-filter
form of isNonCrossing_insert_iff.
GEN direction of isNonCrossing_insert_iff_not_indexCrosses.
IndexCrosses in elementary index-ordering form.
Link shift (the concatenation offset) #
The coordinate offset that places a morpheme's links past the preceding tiers under
concatenation ([JH15]). Shared by the bipartite Graph and the n-tier
MultiGraph, which apply it to their one / each tier-pair respectively.
Shift a link's two endpoints by (δ₁, δ₂).
Equations
- Autosegmental.shiftLink δ₁ δ₂ p = (p.1 + δ₁, p.2 + δ₂)
Instances For
Shifting a link set preserves non-crossing: shiftLink is a coordinatewise
order-embedding, so via isNonCrossing_image it preserves monovariance.