Adaptive midpoint tiles in an open polyhedron #
Select the first triangle in each midpoint-descendant chain whose complete carrier lies in an open set. These triangles cover the open set and form a locally finite hierarchical tiling. Their edges need not yet form a conforming simplicial complex: a coarse edge may contain several edges of finer adjacent tiles. The next layer resolves precisely those hanging vertices.
A maximal face at midpoint level n.
Equations
- K.LevelFace n = (K.safeSubdivision n).refined.Face
Instances For
The carrier of a level face, transported back to the original realization.
Equations
- K.levelFaceCarrier t = ⇑(K.safeSubdivision n).homeo '' (K.safeSubdivision n).refined.faceCarrier ↑t
Instances For
A hereditary rule selecting sufficiently small level faces inside U.
The default rule is simple containment in U. A stricter local rule can be installed as a
local instance, allowing the conforming adaptive fan construction to be reused for open-cover,
oscillation, separation, and boundary-control requirements.
The
safedeclaration.- hereditary {n m : ℕ} {s : K.LevelFace n} {t : K.LevelFace m} : K.levelFaceCarrier t ⊆ K.levelFaceCarrier s → safe U s → safe U t
Instances
The original safety rule: a face is safe exactly when its carrier lies in U. Its low
priority lets a quantitative chart-control rule override it locally without changing any of the
adaptive combinatorial APIs.
Equations
- K.defaultAdaptiveSafety U = { safe := fun {n : ℕ} (t : K.LevelFace n) => K.levelFaceCarrier t ⊆ U, carrier_subset := ⋯, hereditary := ⋯ }
The active safety predicate.
Equations
Instances For
The chosen parent one level above an iterated midpoint face.
Equations
- K.levelParentFace n t = id (fun (t : (K.safeSubdivision n).refined.midpointComplex.Face) => (K.safeSubdivision n).refined.midpointParentFace t) t
Instances For
Local attainability hypotheses for an adaptive safety rule. The first field guarantees coverage. The second says that sufficiently fine children meeting a fixed neighborhood have a safe parent; this is exactly the condition that makes first-safe faces locally finite.
- exists_safe : IsOpen U → ∀ {p : K.realization}, p ∈ U → ∃ (n : ℕ) (t : K.LevelFace n), LevelFace.IsSafe K U t ∧ p ∈ K.levelFaceCarrier t
- locally_parent_safe : IsOpen U → ∀ (p : ↑U), ∃ (ε : ℝ), 0 < ε ∧ ∃ (N : ℕ), ∀ (n : ℕ), N ≤ n → ∀ (t : K.LevelFace (n + 1)), (K.levelFaceCarrier t ∩ Metric.ball (↑p) (ε / 2)).Nonempty → LevelFace.IsSafe K U (K.levelParentFace n t)
Instances
Every point of a level face lies in a child face at the next midpoint level whose entire transported carrier remains in the parent carrier.
Containment in an open set is an admissible adaptive safety rule.
Iterating the preceding child-cover lemma gives a face at every later level through a chosen point, with carrier contained in the original face.
A level face is exactly the union of its faces at any prescribed later midpoint level. The descendant condition is stated geometrically, which avoids choosing a combinatorial parent for faces meeting an old edge.
Exact intersection formula for two transported faces at the same midpoint level.
Distinct maximal faces at one level share at most two vertices.
A barycentric realization point supported on one face vertex is that face's canonical vertex point.
Two two-vertex subfaces of a triangle which share a nonvertex point are equal.
Relative interior of a transported level face, expressed by positive barycentric coordinates on all three face vertices.
Equations
- K.levelFaceRelInterior t = ⇑(K.safeSubdivision n).homeo '' {x : (K.safeSubdivision n).refined.realization | x ∈ (K.safeSubdivision n).refined.faceCarrier ↑t ∧ ∀ v ∈ ↑t, 0 < ↑x v}
Instances For
Midpoint subdivision sends a child's relative interior into its parent's relative interior.
At a fixed midpoint level, the relative interior of one maximal face misses the carrier of every distinct maximal face.
The ancestor at level n of a face at level n + k.
Equations
- K.levelAncestor n 0 t = t
- K.levelAncestor n k.succ t = K.levelAncestor n k (K.levelParentFace (n + k) t)
Instances For
A first-safe face is safe, but at a positive level its chosen parent is not safe.
Equations
- One or more equations did not get rendered due to their size.
- LeanEval.Topology.ClassificationOfSurfaces.Moise.IntrinsicTwoComplex.LevelFace.IsFirstSafe K U t = LeanEval.Topology.ClassificationOfSurfaces.Moise.IntrinsicTwoComplex.LevelFace.IsSafe K U t
Instances For
A later first-safe face cannot meet the relative interior of an earlier first-safe face. If its ancestor were the earlier face, that safe ancestor would make its immediate parent safe; otherwise the fixed-level face-to-face property separates them.
The relative interior of a later first-safe face also misses the entire earlier carrier.
The countable type of first-safe adaptive triangles.
Equations
- K.AdaptiveFace U = ((n : ℕ) × { t : K.LevelFace n // LeanEval.Topology.ClassificationOfSurfaces.Moise.IntrinsicTwoComplex.LevelFace.IsFirstSafe K U t })
Instances For
One common midpoint level dominating a finite family of adaptive tiles.
Equations
- K.adaptiveFaceCommonLevel U F = F.sup fun (t : K.AdaptiveFace U) => t.fst
Instances For
Carrier of one adaptive triangle in the original realization.
Equations
- K.adaptiveFaceCarrier U t = K.levelFaceCarrier ↑t.snd
Instances For
Every tile in a finite adaptive family is a union of faces of the family's common midpoint level. This is the finite source-subcomplex reduction used in the Radó crossing weld.
Relative interior of one adaptive face.
Equations
- K.adaptiveFaceRelInterior U t = K.levelFaceRelInterior ↑t.snd
Instances For
Distinct first-safe adaptive faces meet only on their relative boundaries.
Some safe level face contains every point of the open set.
The least midpoint level at which a safe face carries p.
Equations
- K.firstSafeLevel U hU p = Nat.find ⋯
Instances For
A chosen least-level safe face through p.
Equations
- K.firstSafeFace U hU p = Classical.choose ⋯
Instances For
The first-safe adaptive triangles cover the whole open set.
The transported diameter of every level-n face is at most 2⁻ⁿ.
If a child face meets a half-radius ball and its parent mesh is below that half-radius, then the parent is already safe.
Only finitely many adaptive faces occur below a fixed midpoint level.
Carrier of an adaptive face in the open subspace itself.
Equations
- K.adaptiveFaceCarrierInOpen U t = Subtype.val ⁻¹' K.adaptiveFaceCarrier U t
Instances For
The first-safe adaptive triangle family is locally finite in the open set.
Finite boundary data on each adaptive tile #
The geometric point represented by one vertex of a level face.
Equations
- K.levelFaceVertexPoint t v = (K.safeSubdivision n).homeo ((K.safeSubdivision n).refined.facePoint t v)
Instances For
A vertex occurrence on an adaptive tile. Geometrically equal occurrences on adjacent
tiles are deliberately not quotiented here; boundaryVertices takes their finite image as
actual points.
Equations
- K.AdaptiveVertexOccurrence U t = ↥↑↑t.snd
Instances For
The adaptiveVertexPoint declaration.
Equations
- K.adaptiveVertexPoint U t v = K.levelFaceVertexPoint (↑t.snd) v
Instances For
Adaptive tiles touching a fixed tile.
Equations
- K.TouchingFace U t = { u : K.AdaptiveFace U // (K.adaptiveFaceCarrierInOpen U u ∩ K.adaptiveFaceCarrierInOpen U t).Nonempty }
Instances For
Every tile touches itself.
Equations
- K.selfTouchingFace U t = ⟨t, ⋯⟩
Instances For
All vertex occurrences belonging to tiles which touch t.
Equations
- K.TouchingVertexOccurrence U t = ((u : K.TouchingFace U t) × K.AdaptiveVertexOccurrence U ↑u)
Instances For
The finite set of all touching-tile vertices which lie in t. It contains the original
three corners of t and every hanging midpoint introduced by a finer neighboring tile.
Equations
- K.boundaryVertices U hU t = {p ∈ Finset.image (fun (v : K.TouchingVertexOccurrence U t) => K.adaptiveVertexPoint U (↑v.fst) v.snd) Finset.univ | p ∈ K.adaptiveFaceCarrier U t}
Instances For
On the overlap of two adaptive tiles, their finite sets of collected boundary marks agree pointwise. Indeed a vertex occurrence whose tile touches one of the two tiles at the shared point also touches the other there.
Distinct first-safe tiles meet only in the relative boundary of each tile.
Every collected touching vertex lies on the relative boundary of the fixed tile.
All three original corners of a tile occur in its resolved boundary vertex set.
Carrier of one cyclic edge of a level face.
Equations
- K.levelFaceEdgeCarrier t i = ⇑(K.safeSubdivision n).homeo '' (K.safeSubdivision n).refined.faceCarrier ↑((K.safeSubdivision n).refined.faceEdge t i)
Instances For
Every point of a closed level face outside its relative interior lies on a cyclic edge.
Resolved boundary vertices lying on one cyclic edge.
Equations
- K.boundaryEdgeVertices U hU t i = {p ∈ K.boundaryVertices U hU t | p ∈ K.levelFaceEdgeCarrier (↑t.snd) i}
Instances For
Barycentric parameter along a cyclic level-face edge, from vertex i to vertex i+1.
Equations
- K.levelFaceEdgeParameter t i p = ↑((K.safeSubdivision n).homeo.symm p) ((K.safeSubdivision n).refined.faceVertex t (i + 1))
Instances For
A resolved vertex on one adaptive edge.
Equations
- K.BoundaryEdgeVertex U hU t i = ↥(K.boundaryEdgeVertices U hU t i)
Instances For
The parameter order on the finite set of vertices of one resolved edge.
Equations
- K.boundaryEdgeVertexLE U hU t i p q = (K.levelFaceEdgeParameter (↑t.snd) i ↑p ≤ K.levelFaceEdgeParameter (↑t.snd) i ↑q)
Instances For
Equations
Canonically ordered vertices on one resolved adaptive edge.
Equations
- K.boundaryEdgeVertexList U hU t i = List.map Subtype.val ((K.boundaryEdgeVertices U hU t i).attach.sort (K.boundaryEdgeVertexLE U hU t i))
Instances For
A monotone finite list with at least two entries covers every parameter between its endpoints by one of its consecutive intervals.
The first corner of a cyclic adaptive edge.
Equations
- K.adaptiveEdgeFirstCorner U t i = K.levelFaceVertexPoint ↑t.snd ⟨(K.safeSubdivision t.fst).refined.faceVertex (↑t.snd) i, ⋯⟩
Instances For
The second corner of a cyclic adaptive edge.
Equations
- K.adaptiveEdgeSecondCorner U t i = K.levelFaceVertexPoint ↑t.snd ⟨(K.safeSubdivision t.fst).refined.faceVertex (↑t.snd) (i + 1), ⋯⟩
Instances For
The equal-weight point of the standard simplex on an intrinsic face.
Equations
- K.faceCenterSimplex t = ⟨fun (x : ↥↑t) => 1 / 3, ⋯⟩
Instances For
The barycentric center of an arbitrary level face, transported to the original realization.
Equations
- K.levelFaceCenter t = (K.safeSubdivision n).homeo ((K.safeSubdivision n).refined.faceStandardMap t ((K.safeSubdivision n).refined.faceCenterSimplex t))
Instances For
If a later-level edge meets an earlier face at a point which is not a later-level vertex, and the two face interiors are disjoint, then the whole later edge lies in the earlier face. This is the no-crossing fact for nested midpoint subdivisions.
Adaptive-tile specialization of nested-edge no crossing. At a common point which is not a resolved vertex of the later tile, the later edge is contained in the earlier tile.
The barycentric center of one adaptive tile, transported to the original realization.
Equations
- K.adaptiveFaceCenter U t = (K.safeSubdivision t.fst).homeo ((K.safeSubdivision t.fst).refined.faceStandardMap (↑t.snd) ((K.safeSubdivision t.fst).refined.faceCenterSimplex ↑t.snd))
Instances For
One of the consecutive intervals in the ordered subdivision of an adaptive edge.
Equations
- K.AdaptiveEdgeInterval U hU t i = Fin ((K.boundaryEdgeVertexList U hU t i).length - 1)
Instances For
First endpoint of a resolved adaptive-edge interval.
Equations
- K.adaptiveEdgeIntervalFirst U hU t i j = (K.boundaryEdgeVertexList U hU t i).get ⟨↑j, ⋯⟩
Instances For
Second endpoint of a resolved adaptive-edge interval.
Equations
- K.adaptiveEdgeIntervalSecond U hU t i j = (K.boundaryEdgeVertexList U hU t i).get ⟨↑j + 1, ⋯⟩
Instances For
Consecutive vertices in the resolved edge order have strictly increasing edge parameter.
Every parameter on an adaptive edge lies between the parameters of two consecutive resolved boundary vertices.
No resolved boundary mark lies strictly between the two consecutive marks of an adaptive edge interval.
The countable family of fan triangles before identifying their shared geometric edges.
Equations
- K.AdaptiveFanFace U hU = ((t : K.AdaptiveFace U) × (i : ZMod 3) × K.AdaptiveEdgeInterval U hU t i)
Instances For
The finite family of all resolved fan triangles over one adaptive tile.
Equations
- K.adaptiveFanFacesOver U hU t = Finset.map { toFun := fun (p : (i : ZMod 3) × K.AdaptiveEdgeInterval U hU t i) => ⟨t, p⟩, inj' := ⋯ } (Finset.univ.sigma fun (i : ZMod 3) => Finset.univ)
Instances For
The adaptiveFanFaceVertices declaration.
Equations
- K.adaptiveFanFaceVertices U hU f = {K.adaptiveFaceCenter U f.fst, K.adaptiveEdgeIntervalFirst U hU f.fst f.snd.fst f.snd.snd, K.adaptiveEdgeIntervalSecond U hU f.fst f.snd.fst f.snd.snd}