# Documentation

Mathlib.Analysis.Convex.SimplicialComplex.Basic

# 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 𝕜-module E.
• 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.

theorem Geometry.SimplicialComplex.ext_iff {𝕜 : Type u_1} {E : Type u_2} :
∀ {inst : } {inst_1 : } {inst_2 : Module 𝕜 E} (x y : ), x = y x.faces = y.faces
theorem Geometry.SimplicialComplex.ext {𝕜 : Type u_1} {E : Type u_2} :
∀ {inst : } {inst_1 : } {inst_2 : Module 𝕜 E} (x y : ), x.faces = y.facesx = y
structure Geometry.SimplicialComplex (𝕜 : Type u_1) (E : Type u_2) [] [] [Module 𝕜 E] :
Type u_2
• faces : Set ()
• not_empty_mem : ¬ s.faces
• indep : ∀ {s_1 : }, s_1 s.facesAffineIndependent 𝕜 Subtype.val
• down_closed : ∀ {s_1 t : }, s_1 s.facest s_1t t s.faces
• inter_subset_convexHull : ∀ {s_1 t : }, s_1 s.facest s.faces↑() s_1 ↑() t ↑() (s_1 t)

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.

Instances For

A Finset belongs to a SimplicialComplex if it's a face of it.

def Geometry.SimplicialComplex.space {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (K : ) :
Set E

The underlying space of a simplicial complex is the union of its faces.

Instances For
theorem Geometry.SimplicialComplex.mem_space_iff {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {x : E} :
s x, x ↑() s
theorem Geometry.SimplicialComplex.convexHull_subset_space {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } (hs : s K.faces) :
theorem Geometry.SimplicialComplex.subset_space {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } (hs : s K.faces) :
theorem Geometry.SimplicialComplex.convexHull_inter_convexHull {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } {t : } (hs : s K.faces) (ht : t K.faces) :
↑() s ↑() t = ↑() (s t)
theorem Geometry.SimplicialComplex.disjoint_or_exists_inter_eq_convexHull {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } {t : } (hs : s K.faces) (ht : t K.faces) :
Disjoint (↑() s) (↑() t) u, u K.faces ↑() s ↑() t = ↑() u

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).

@[simp]
theorem Geometry.SimplicialComplex.ofErase_faces {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (faces : Set ()) (indep : ∀ (s : ), s facesAffineIndependent 𝕜 Subtype.val) (down_closed : ∀ (s : ), s faces∀ (t : ), t st faces) (inter_subset_convexHull : ∀ (s : ), s faces∀ (t : ), t faces↑() s ↑() t ↑() (s t)) :
(Geometry.SimplicialComplex.ofErase faces indep down_closed inter_subset_convexHull).faces = faces \ {}
def Geometry.SimplicialComplex.ofErase {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (faces : Set ()) (indep : ∀ (s : ), s facesAffineIndependent 𝕜 Subtype.val) (down_closed : ∀ (s : ), s faces∀ (t : ), t st faces) (inter_subset_convexHull : ∀ (s : ), s faces∀ (t : ), t faces↑() s ↑() t ↑() (s t)) :

Construct a simplicial complex by removing the empty face for you.

Instances For
@[simp]
theorem Geometry.SimplicialComplex.ofSubcomplex_faces {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (K : ) (faces : Set ()) (subset : faces K.faces) (down_closed : ∀ {s t : }, s facest st faces) :
(Geometry.SimplicialComplex.ofSubcomplex K faces subset down_closed).faces = faces
def Geometry.SimplicialComplex.ofSubcomplex {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (K : ) (faces : Set ()) (subset : faces K.faces) (down_closed : ∀ {s t : }, s facest st faces) :

Construct a simplicial complex as a subset of a given simplicial complex.

Instances For

### Vertices #

def Geometry.SimplicialComplex.vertices {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (K : ) :
Set E

The vertices of a simplicial complex are its zero dimensional faces.

Instances For
theorem Geometry.SimplicialComplex.mem_vertices {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {x : E} :
{x} K.faces
theorem Geometry.SimplicialComplex.vertices_eq {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } :
= ⋃ (k : ) (_ : k K.faces), k
theorem Geometry.SimplicialComplex.vertices_subset_space {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } :
theorem Geometry.SimplicialComplex.vertex_mem_convexHull_iff {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } {x : E} (hx : ) (hs : s K.faces) :
x ↑() s x s
theorem Geometry.SimplicialComplex.face_subset_face_iff {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } {t : } (hs : s K.faces) (ht : t K.faces) :
↑() s ↑() t s t

A face is a subset of another one iff its vertices are.

### Facets #

def Geometry.SimplicialComplex.facets {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] (K : ) :
Set ()

A facet of a simplicial complex is a maximal face.

Instances For
theorem Geometry.SimplicialComplex.mem_facets {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } :
s K.faces ∀ (t : ), t K.facess ts = t
theorem Geometry.SimplicialComplex.facets_subset {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } :
K.faces
theorem Geometry.SimplicialComplex.not_facet_iff_subface {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] {K : } {s : } (hs : s K.faces) :
t, t K.faces s t

### The semilattice of simplicial complexes #

K ≤ L means that K.faces ⊆ L.faces.

instance Geometry.SimplicialComplex.instInfSimplicialComplex (𝕜 : Type u_1) (E : Type u_2) [] [] [Module 𝕜 E] :

The complex consisting of only the faces present in both of its arguments.

instance Geometry.SimplicialComplex.hasBot (𝕜 : Type u_1) (E : Type u_2) [] [] [Module 𝕜 E] :
instance Geometry.SimplicialComplex.instInhabitedSimplicialComplex (𝕜 : Type u_1) (E : Type u_2) [] [] [Module 𝕜 E] :
theorem Geometry.SimplicialComplex.faces_bot {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] :
.faces =
theorem Geometry.SimplicialComplex.space_bot {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] :
theorem Geometry.SimplicialComplex.facets_bot {𝕜 : Type u_1} {E : Type u_2} [] [] [Module 𝕜 E] :