Simplicial complexes #
In this file, we define simplicial complexes in 𝕜
-modules. A simplicial complex is a collection
of simplices closed by inclusion (of vertices) and intersection (of underlying sets).
We model them by a downward-closed set of affine independent finite sets whose convex hulls "glue nicely", each finite set and its convex hull corresponding respectively to the vertices and the underlying set of a simplex.
Main declarations #
SimplicialComplex 𝕜 E
: A simplicial complex in the𝕜
-moduleE
.SimplicialComplex.vertices
: The zero dimensional faces of a simplicial complex.SimplicialComplex.facets
: The maximal faces of a simplicial complex.
Notation #
s ∈ K
means that s
is a face of K
.
K ≤ L
means that the faces of K
are faces of L
.
Implementation notes #
"glue nicely" usually means that the intersection of two faces (as sets in the ambient space) is a
face. Given that we store the vertices, not the faces, this would be a bit awkward to spell.
Instead, SimplicialComplex.inter_subset_convexHull
is an equivalent condition which works on the
vertices.
TODO #
Simplicial complexes can be generalized to affine spaces once ConvexHull
has been ported.
A simplicial complex in a 𝕜
-module is a collection of simplices which glue nicely together.
Note that the textbook meaning of "glue nicely" is given in
Geometry.SimplicialComplex.disjoint_or_exists_inter_eq_convexHull
. It is mostly useless, as
Geometry.SimplicialComplex.convexHull_inter_convexHull
is enough for all purposes.
the faces of this simplicial complex: currently, given by their spanning vertices
- not_empty_mem : ∅ ∉ self.faces
the empty set is not a face: hence, all faces are non-empty
- indep : ∀ {s : Finset E}, s ∈ self.faces → AffineIndependent 𝕜 Subtype.val
the vertices in each face are affine independent: this is an implementation detail
faces are downward closed: a non-empty subset of its spanning vertices spans another face
- inter_subset_convexHull : ∀ {s t : Finset E}, s ∈ self.faces → t ∈ self.faces → (convexHull 𝕜) ↑s ∩ (convexHull 𝕜) ↑t ⊆ (convexHull 𝕜) (↑s ∩ ↑t)
Instances For
the empty set is not a face: hence, all faces are non-empty
the vertices in each face are affine independent: this is an implementation detail
faces are downward closed: a non-empty subset of its spanning vertices spans another face
A Finset
belongs to a SimplicialComplex
if it's a face of it.
Equations
- Geometry.SimplicialComplex.instMembershipFinset = { mem := fun (K : Geometry.SimplicialComplex 𝕜 E) (s : Finset E) => s ∈ K.faces }
The underlying space of a simplicial complex is the union of its faces.
Equations
- K.space = ⋃ s ∈ K.faces, (convexHull 𝕜) ↑s
Instances For
The conclusion is the usual meaning of "glue nicely" in textbooks. It turns out to be quite
unusable, as it's about faces as sets in space rather than simplices. Further, additional structure
on 𝕜
means the only choice of u
is s ∩ t
(but it's hard to prove).
Construct a simplicial complex by removing the empty face for you.
Equations
- Geometry.SimplicialComplex.ofErase faces indep down_closed inter_subset_convexHull = { faces := faces \ {∅}, not_empty_mem := ⋯, indep := ⋯, down_closed := ⋯, inter_subset_convexHull := ⋯ }
Instances For
Construct a simplicial complex as a subset of a given simplicial complex.
Equations
- K.ofSubcomplex faces subset down_closed = { faces := faces, not_empty_mem := ⋯, indep := ⋯, down_closed := ⋯, inter_subset_convexHull := ⋯ }
Instances For
Vertices #
The vertices of a simplicial complex are its zero dimensional faces.
Instances For
A face is a subset of another one iff its vertices are.
Facets #
A facet of a simplicial complex is a maximal face.
Instances For
The complex consisting of only the faces present in both of its arguments.
Equations
- One or more equations did not get rendered due to their size.
Equations
Equations
- Geometry.SimplicialComplex.hasBot 𝕜 E = { bot := { faces := ∅, not_empty_mem := ⋯, indep := ⋯, down_closed := ⋯, inter_subset_convexHull := ⋯ } }
Equations
Equations
- Geometry.SimplicialComplex.instInhabited 𝕜 E = { default := ⊥ }