Documentation

Mathlib.LinearAlgebra.AffineSpace.Simplex.Basic

Simplex in affine space #

This file defines n-dimensional simplices in affine space.

Main definitions #

References #

structure Affine.Simplex (k : Type u_1) {V : Type u_2} (P : Type u_5) [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (n : โ„•) :
Type u_5

A Simplex k P n is a collection of n + 1 affinely independent points.

Instances For
    @[reducible, inline]
    abbrev Affine.Triangle (k : Type u_1) {V : Type u_2} (P : Type u_5) [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] :
    Type u_5

    A Triangle k P is a collection of three affinely independent points.

    Instances For
      def Affine.Simplex.mkOfPoint (k : Type u_1) {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (p : P) :
      Simplex k P 0

      Construct a 0-simplex from a point.

      Instances For
        @[simp]
        theorem Affine.Simplex.mkOfPoint_points (k : Type u_1) {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (p : P) (i : Fin 1) :
        (mkOfPoint k p).points i = p

        The point in a simplex constructed with mkOfPoint.

        @[implicit_reducible]
        instance Affine.Simplex.instInhabitedOfNatNat (k : Type u_1) {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [Inhabited P] :
        Inhabited (Simplex k P 0)
        instance Affine.Simplex.nonempty (k : Type u_1) {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] :
        Nonempty (Simplex k P 0)
        @[simp]
        theorem Affine.Simplex.range_mkOfPoint_points (k : Type u_1) {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (p : P) :

        The set of points in a simplex constructed with mkOfPoint.

        theorem Affine.Simplex.ext {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} {s1 s2 : Simplex k P n} (h : โˆ€ (i : Fin (n + 1)), s1.points i = s2.points i) :
        s1 = s2

        Two simplices are equal if they have the same points.

        theorem Affine.Simplex.ext_iff {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} {s1 s2 : Simplex k P n} :
        s1 = s2 โ†” โˆ€ (i : Fin (n + 1)), s1.points i = s2.points i

        Two simplices are equal if and only if they have the same points.

        def Affine.Simplex.face {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) :
        Simplex k P m

        A face of a simplex is a simplex with the given subset of points.

        Instances For
          theorem Affine.Simplex.face_points {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) (i : Fin (m + 1)) :
          (s.face h).points i = s.points ((fs.orderEmbOfFin h) i)

          The points of a face of a simplex are given by mono_of_fin.

          theorem Affine.Simplex.face_points' {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) :
          (s.face h).points = s.points โˆ˜ โ‡‘(fs.orderEmbOfFin h)

          The points of a face of a simplex are given by mono_of_fin.

          @[simp]
          theorem Affine.Simplex.face_eq_mkOfPoint {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) (i : Fin (n + 1)) :
          s.face โ‹ฏ = mkOfPoint k (s.points i)

          A single-point face equals the 0-simplex constructed with mkOfPoint.

          @[simp]
          theorem Affine.Simplex.range_face_points {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) :
          Set.range (s.face h).points = s.points '' โ†‘fs

          The set of points of a face.

          theorem Affine.Simplex.affineSpan_face_le {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) :
          theorem Affine.Simplex.points_mem_affineSpan_face {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [Nontrivial k] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) {i : Fin (n + 1)} :
          s.points i โˆˆ affineSpan k (Set.range (s.face h).points) โ†” i โˆˆ fs
          def Affine.Simplex.faceOpposite {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex k P n) (i : Fin (n + 1)) :
          Simplex k P (n - 1)

          The face of a simplex with all but one point.

          Instances For
            @[simp]
            theorem Affine.Simplex.range_faceOpposite_points {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex k P n) (i : Fin (n + 1)) :
            theorem Affine.Simplex.affineSpan_faceOpposite_le {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex k P n) (i : Fin (n + 1)) :
            theorem Affine.Simplex.points_mem_affineSpan_faceOpposite {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [Nontrivial k] {n : โ„•} [NeZero n] (s : Simplex k P n) {i j : Fin (n + 1)} :
            s.points j โˆˆ affineSpan k (Set.range (s.faceOpposite i).points) โ†” j โ‰  i
            theorem Affine.Simplex.points_notMem_affineSpan_faceOpposite {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [Nontrivial k] {n : โ„•} [NeZero n] (s : Simplex k P n) (i : Fin (n + 1)) :
            theorem Affine.Simplex.faceOpposite_point_eq_point_succAbove {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex k P n) (i : Fin (n + 1)) (j : Fin (n - 1 + 1)) :
            (s.faceOpposite i).points j = s.points (i.succAbove (Fin.cast โ‹ฏ j))
            theorem Affine.Simplex.faceOpposite_point_eq_point_rev {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (s : Simplex k P 1) (i : Fin 2) (n : Fin 1) :
            (s.faceOpposite i).points n = s.points i.rev
            @[simp]
            theorem Affine.Simplex.faceOpposite_point_eq_point_one {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (s : Simplex k P 1) (n : Fin 1) :
            (s.faceOpposite 0).points n = s.points 1
            @[simp]
            theorem Affine.Simplex.faceOpposite_point_eq_point_zero {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (s : Simplex k P 1) (n : Fin 1) :
            (s.faceOpposite 1).points n = s.points 0
            instance Affine.Simplex.instNonemptyElemComplSetSingletonOfNontrivial {ฮฑ : Type u_8} [Nontrivial ฮฑ] (i : ฮฑ) :
            Nonempty โ†‘{i}แถœ

            Needed to make affineSpan (s.points '' {i}แถœ) nonempty.

            @[simp]
            theorem Affine.Simplex.mem_affineSpan_image_iff {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [Nontrivial k] {n : โ„•} (s : Simplex k P n) {fs : Set (Fin (n + 1))} {i : Fin (n + 1)} :
            s.points i โˆˆ affineSpan k (s.points '' fs) โ†” i โˆˆ fs
            theorem Affine.Simplex.affineCombination_mem_affineSpan_faceOpposite_iff {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex k P n} {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) {i : Fin (n + 1)} :
            def Affine.Simplex.map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} (s : Simplex k P n) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) :
            Simplex k Pโ‚‚ n

            Push forward an affine simplex under an injective affine map.

            Instances For
              @[simp]
              theorem Affine.Simplex.map_points {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} (s : Simplex k P n) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) :
              (s.map f hf).points = โ‡‘f โˆ˜ s.points
              @[simp]
              theorem Affine.Simplex.map_id {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) :
              s.map (AffineMap.id k P) โ‹ฏ = s
              theorem Affine.Simplex.map_comp {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {Vโ‚ƒ : Type u_4} {P : Type u_5} {Pโ‚‚ : Type u_6} {Pโ‚ƒ : Type u_7} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [AddCommGroup Vโ‚ƒ] [Module k V] [Module k Vโ‚‚] [Module k Vโ‚ƒ] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] [AddTorsor Vโ‚ƒ Pโ‚ƒ] {n : โ„•} (s : Simplex k P n) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) (g : Pโ‚‚ โ†’แตƒ[k] Pโ‚ƒ) (hg : Function.Injective โ‡‘g) :
              s.map (g.comp f) โ‹ฏ = (s.map f hf).map g hg
              @[simp]
              theorem Affine.Simplex.face_map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} (s : Simplex k P n) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) :
              (s.map f hf).face h = (s.face h).map f hf
              @[simp]
              theorem Affine.Simplex.faceOpposite_map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex k P n) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) (i : Fin (n + 1)) :
              (s.map f hf).faceOpposite i = (s.faceOpposite i).map f hf
              @[simp]
              theorem Affine.Simplex.map_mkOfPoint {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) (p : P) :
              (mkOfPoint k p).map f hf = mkOfPoint k (f p)
              def Affine.Simplex.reindex {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) :
              Simplex k P n

              Remap a simplex along an Equiv of index types.

              Instances For
                @[simp]
                theorem Affine.Simplex.reindex_points {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) (aโœ : Fin (n + 1)) :
                (s.reindex e).points aโœ = (s.points โˆ˜ โ‡‘e.symm) aโœ
                @[simp]
                theorem Affine.Simplex.reindex_refl {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) :
                s.reindex (Equiv.refl (Fin (n + 1))) = s

                Reindexing by Equiv.refl yields the original simplex.

                @[simp]
                theorem Affine.Simplex.reindex_trans {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {nโ‚ nโ‚‚ nโ‚ƒ : โ„•} (eโ‚โ‚‚ : Fin (nโ‚ + 1) โ‰ƒ Fin (nโ‚‚ + 1)) (eโ‚‚โ‚ƒ : Fin (nโ‚‚ + 1) โ‰ƒ Fin (nโ‚ƒ + 1)) (s : Simplex k P nโ‚) :
                s.reindex (eโ‚โ‚‚.trans eโ‚‚โ‚ƒ) = (s.reindex eโ‚โ‚‚).reindex eโ‚‚โ‚ƒ

                Reindexing by the composition of two equivalences is the same as reindexing twice.

                @[simp]
                theorem Affine.Simplex.reindex_reindex_symm {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) :
                (s.reindex e).reindex e.symm = s

                Reindexing by an equivalence and its inverse yields the original simplex.

                @[simp]
                theorem Affine.Simplex.reindex_symm_reindex {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P m) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
                (s.reindex e.symm).reindex e = s

                Reindexing by the inverse of an equivalence and that equivalence yields the original simplex.

                @[simp]
                theorem Affine.Simplex.reindex_range_points {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) :

                Reindexing a simplex produces one with the same set of points.

                theorem Affine.Simplex.reindex_map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] {m n : โ„•} (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) :
                (s.map f hf).reindex e = (s.reindex e).map f hf
                theorem Affine.Simplex.range_face_reindex {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) {fs : Finset (Fin (n + 1))} {n' : โ„•} (h : fs.card = n' + 1) :
                Set.range ((s.reindex e).face h).points = Set.range (s.face โ‹ฏ).points
                theorem Affine.Simplex.range_faceOpposite_reindex {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex k P m) (e : Fin (m + 1) โ‰ƒ Fin (n + 1)) (i : Fin (n + 1)) :
                def Affine.Simplex.restrict {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) (S : AffineSubspace k P) (hS : affineSpan k (Set.range s.points) โ‰ค S) :
                Simplex k (โ†ฅS) n

                Restrict an affine simplex to an affine subspace that contains it.

                Instances For
                  @[simp]
                  theorem Affine.Simplex.restrict_points_coe {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) (S : AffineSubspace k P) (hS : affineSpan k (Set.range s.points) โ‰ค S) (i : Fin (n + 1)) :
                  โ†‘((s.restrict S hS).points i) = s.points i
                  @[simp]
                  theorem Affine.Simplex.restrict_map_inclusion {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) (Sโ‚ Sโ‚‚ : AffineSubspace k P) (hSโ‚ : affineSpan k (Set.range s.points) โ‰ค Sโ‚) (hSโ‚‚ : Sโ‚ โ‰ค Sโ‚‚) :
                  (s.restrict Sโ‚ hSโ‚).map (AffineSubspace.inclusion hSโ‚‚) โ‹ฏ = s.restrict Sโ‚‚ โ‹ฏ

                  Restricting to Sโ‚ then mapping to a larger Sโ‚‚ is the same as restricting to Sโ‚‚.

                  @[simp]
                  theorem Affine.Simplex.map_subtype_restrict {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (S : AffineSubspace k P) [Nonempty โ†ฅS] (s : Simplex k (โ†ฅS) n) :
                  (s.map S.subtype โ‹ฏ).restrict S โ‹ฏ = s
                  theorem Affine.Simplex.restrict_map_restrict {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_5} {Pโ‚‚ : Type u_6} [Ring k] [AddCommGroup V] [AddCommGroup Vโ‚‚] [Module k V] [Module k Vโ‚‚] [AddTorsor V P] [AddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} (s : Simplex k P n) (f : P โ†’แตƒ[k] Pโ‚‚) (hf : Function.Injective โ‡‘f) (Sโ‚ : AffineSubspace k P) (Sโ‚‚ : AffineSubspace k Pโ‚‚) (hSโ‚ : affineSpan k (Set.range s.points) โ‰ค Sโ‚) (hfS : AffineSubspace.map f Sโ‚ โ‰ค Sโ‚‚) :
                  (s.restrict Sโ‚ hSโ‚).map (f.restrict hfS) โ‹ฏ = (s.map f hf).restrict Sโ‚‚ โ‹ฏ

                  Restricting to Sโ‚ then mapping through the restriction of f to Sโ‚ โ†’แตƒ[k] Sโ‚‚ is the same as mapping through unrestricted f, then restricting to Sโ‚‚.

                  @[simp]
                  theorem Affine.Simplex.restrict_map_subtype {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) :
                  (s.restrict (affineSpan k (Set.range s.points)) โ‹ฏ).map (affineSpan k (Set.range s.points)).subtype โ‹ฏ = s

                  Restricting to affineSpan k (Set.range s.points) can be reversed by mapping through AffineSubspace.subtype.

                  theorem Affine.Simplex.restrict_reindex {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {m n : โ„•} (s : Simplex k P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) {S : AffineSubspace k P} (hS : affineSpan k (Set.range s.points) โ‰ค S) :
                  (s.reindex e).restrict S โ‹ฏ = (s.restrict S hS).reindex e
                  theorem Affine.Simplex.face_restrict {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} (s : Simplex k P n) {S : AffineSubspace k P} (hS : affineSpan k (Set.range s.points) โ‰ค S) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) :
                  (s.restrict S hS).face h = (s.face h).restrict S โ‹ฏ
                  theorem Affine.Simplex.faceOpposite_restrict {k : Type u_1} {V : Type u_2} {P : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex k P n) {S : AffineSubspace k P} (hS : affineSpan k (Set.range s.points) โ‰ค S) (i : Fin (n + 1)) :
                  (s.restrict S hS).faceOpposite i = (s.faceOpposite i).restrict S โ‹ฏ
                  def Affine.Simplex.setInterior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (I : Set k) {n : โ„•} (s : Simplex k P n) :
                  Set P

                  The interior of a simplex is the set of points that can be expressed as an affine combination of the vertices with weights in a set I.

                  Instances For
                    theorem Affine.Simplex.affineCombination_mem_setInterior_iff {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {I : Set k} {n : โ„•} {s : Simplex k P n} {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                    (Finset.affineCombination k Finset.univ s.points) w โˆˆ Simplex.setInterior I s โ†” โˆ€ (i : Fin (n + 1)), w i โˆˆ I
                    @[simp]
                    theorem Affine.Simplex.setInterior_reindex {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (I : Set k) {m n : โ„•} (s : Simplex k P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
                    theorem Affine.Simplex.setInterior_mono {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {I J : Set k} (hij : I โІ J) {n : โ„•} (s : Simplex k P n) :
                    theorem Affine.Simplex.setInterior_subset_affineSpan {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] {I : Set k} {n : โ„•} {s : Simplex k P n} :
                    Simplex.setInterior I s โІ โ†‘(affineSpan k (Set.range s.points))
                    theorem Affine.Simplex.setInterior_map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_4} {Pโ‚‚ : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [AddCommGroup Vโ‚‚] [Module k Vโ‚‚] [AddTorsor Vโ‚‚ Pโ‚‚] (I : Set k) {n : โ„•} (s : Simplex k P n) {f : P โ†’แตƒ[k] Pโ‚‚} (hf : Function.Injective โ‡‘f) :
                    Simplex.setInterior I (s.map f hf) = โ‡‘f '' Simplex.setInterior I s
                    theorem Affine.Simplex.setInterior_restrict {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (I : Set k) {n : โ„•} (s : Simplex k P n) {S : AffineSubspace k P} (hS : affineSpan k (Set.range s.points) โ‰ค S) :
                    def Affine.Simplex.interior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) :
                    Set P

                    The interior of a simplex is the set of points that can be expressed as an affine combination of the vertices with weights strictly between 0 and 1. This is equivalent to the intrinsic interior of the convex hull of the vertices.

                    Instances For
                      @[simp]
                      theorem Affine.Simplex.interior_reindex {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {m n : โ„•} (s : Simplex k P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
                      theorem Affine.Simplex.affineCombination_mem_interior_iff {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} {s : Simplex k P n} {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                      (Finset.affineCombination k Finset.univ s.points) w โˆˆ s.interior โ†” โˆ€ (i : Fin (n + 1)), w i โˆˆ Set.Ioo 0 1
                      def Affine.Simplex.closedInterior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) :
                      Set P

                      s.closedInterior is the set of points that can be expressed as an affine combination of the vertices with weights between 0 and 1 inclusive. This is equivalent to the convex hull of the vertices or the closure of the interior.

                      Instances For
                        @[simp]
                        theorem Affine.Simplex.closedInterior_reindex {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {m n : โ„•} (s : Simplex k P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
                        theorem Affine.Simplex.affineCombination_mem_closedInterior_iff {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} {s : Simplex k P n} {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                        (Finset.affineCombination k Finset.univ s.points) w โˆˆ s.closedInterior โ†” โˆ€ (i : Fin (n + 1)), w i โˆˆ Set.Icc 0 1
                        theorem Affine.Simplex.interior_subset_closedInterior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) :
                        theorem Affine.Simplex.point_notMem_interior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) (i : Fin (n + 1)) :
                        s.points i โˆ‰ s.interior
                        theorem Affine.Simplex.point_mem_closedInterior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] [ZeroLEOneClass k] {n : โ„•} (s : Simplex k P n) (i : Fin (n + 1)) :
                        s.points i โˆˆ s.closedInterior
                        theorem Affine.Simplex.interior_ssubset_closedInterior {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] [ZeroLEOneClass k] {n : โ„•} (s : Simplex k P n) :
                        theorem Affine.Simplex.closedInterior_subset_affineSpan {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} {s : Simplex k P n} :
                        s.closedInterior โІ โ†‘(affineSpan k (Set.range s.points))
                        @[simp]
                        theorem Affine.Simplex.interior_eq_empty {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] (s : Simplex k P 0) :
                        s.interior = โˆ…
                        @[simp]
                        theorem Affine.Simplex.closedInterior_eq_singleton {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] [ZeroLEOneClass k] (s : Simplex k P 0) :
                        theorem Affine.Simplex.affineCombination_mem_setInterior_face_iff_mem {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] (I : Set k) {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                        (Finset.affineCombination k Finset.univ s.points) w โˆˆ Simplex.setInterior I (s.face h) โ†” (โˆ€ i โˆˆ fs, w i โˆˆ I) โˆง โˆ€ i โˆ‰ fs, w i = 0
                        theorem Affine.Simplex.affineCombination_mem_interior_face_iff_mem_Ioo {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                        (Finset.affineCombination k Finset.univ s.points) w โˆˆ (s.face h).interior โ†” (โˆ€ i โˆˆ fs, w i โˆˆ Set.Ioo 0 1) โˆง โˆ€ i โˆ‰ fs, w i = 0
                        theorem Affine.Simplex.affineCombination_mem_closedInterior_face_iff_mem_Icc {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                        (Finset.affineCombination k Finset.univ s.points) w โˆˆ (s.face h).closedInterior โ†” (โˆ€ i โˆˆ fs, w i โˆˆ Set.Icc 0 1) โˆง โˆ€ i โˆ‰ fs, w i = 0
                        theorem Affine.Simplex.affineCombination_mem_interior_face_iff_pos {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] [IsOrderedAddMonoid k] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} [NeZero m] (h : fs.card = m + 1) {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                        (Finset.affineCombination k Finset.univ s.points) w โˆˆ (s.face h).interior โ†” (โˆ€ i โˆˆ fs, 0 < w i) โˆง โˆ€ i โˆ‰ fs, w i = 0
                        theorem Affine.Simplex.affineCombination_mem_closedInterior_face_iff_nonneg {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] [IsOrderedAddMonoid k] {n : โ„•} (s : Simplex k P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (h : fs.card = m + 1) {w : Fin (n + 1) โ†’ k} (hw : โˆ‘ i : Fin (n + 1), w i = 1) :
                        (Finset.affineCombination k Finset.univ s.points) w โˆˆ (s.face h).closedInterior โ†” (โˆ€ i โˆˆ fs, 0 โ‰ค w i) โˆง โˆ€ i โˆ‰ fs, w i = 0
                        theorem Affine.Simplex.interior_map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_4} {Pโ‚‚ : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [AddCommGroup Vโ‚‚] [Module k Vโ‚‚] [AddTorsor Vโ‚‚ Pโ‚‚] [PartialOrder k] {n : โ„•} (s : Simplex k P n) {f : P โ†’แตƒ[k] Pโ‚‚} (hf : Function.Injective โ‡‘f) :
                        (s.map f hf).interior = โ‡‘f '' s.interior
                        theorem Affine.Simplex.closedInterior_map {k : Type u_1} {V : Type u_2} {Vโ‚‚ : Type u_3} {P : Type u_4} {Pโ‚‚ : Type u_5} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [AddCommGroup Vโ‚‚] [Module k Vโ‚‚] [AddTorsor Vโ‚‚ Pโ‚‚] [PartialOrder k] {n : โ„•} (s : Simplex k P n) {f : P โ†’แตƒ[k] Pโ‚‚} (hf : Function.Injective โ‡‘f) :
                        (s.map f hf).closedInterior = โ‡‘f '' s.closedInterior
                        theorem Affine.Simplex.interior_restrict {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) {S : AffineSubspace k P} (hS : affineSpan k (Set.range s.points) โ‰ค S) :
                        theorem Affine.Simplex.closedInterior_restrict {k : Type u_1} {V : Type u_2} {P : Type u_4} [Ring k] [AddCommGroup V] [Module k V] [AddTorsor V P] [PartialOrder k] {n : โ„•} (s : Simplex k P n) {S : AffineSubspace k P} (hS : affineSpan k (Set.range s.points) โ‰ค S) :