Documentation

Mathlib.Geometry.Euclidean.Incenter

Incenters and excenters of simplices. #

This file defines the insphere and exspheres of a simplex (tangent to the faces of the simplex), and the center and radius of such spheres.

The terms "exsphere", "excenter" and "exradius" are used in this file in a general sense where a Finset signs of indices is given that determine, up to negating all the signs, which vertices of the simplex lie on the same side of the opposite face as the excenter and which lie on the opposite side of that face. This includes the cases of the insphere, incenter and inradius, when signs is โˆ… (or univ); the insphere always exists. It also includes the case of an exsphere opposite a vertex, when signs is a singleton (or its complement), which always exists in two or more dimensions. In three or more dimensions, there are further possibilities for signs, and the corresponding excenters may or may not exist, depending on the choice of simplex. For convenience, the most common definitions exsphere, excenter and exradius have corresponding insphere, incenter and inradius definitions, and various lemmas are duplicated for the case of the insphere to avoid needing to pass an ExcenterExists hypothesis in that case. However, other definitions such as excenterWeights, touchpoint and touchpointWeights are not duplicated.

Main definitions #

References #

noncomputable def Affine.Simplex.excenterWeightsUnnorm {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :

The unnormalized weights of the vertices in an affine combination that gives an excenter with signs determined by the given set of indices (for the empty set, this is the incenter; for a singleton set, this is the excenter opposite a vertex). An excenter with those signs exists if and only if the sum of these weights is nonzero (so the normalized weights sum to 1).

Instances For
    theorem Affine.Simplex.excenterWeightsUnnorm_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) :
    @[simp]
    theorem Affine.Simplex.excenterWeightsUnnorm_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
    @[simp]
    theorem Affine.Simplex.excenterWeightsUnnorm_empty_apply {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
    theorem Affine.Simplex.excenterWeightsUnnorm_ne_zero {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :
    s.excenterWeightsUnnorm signs i โ‰  0
    def Affine.Simplex.ExcenterExists {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :

    Whether an excenter exists with a given choice of signs.

    Instances For
      theorem Affine.Simplex.excenterExists_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) {e : Fin (n + 1) โ‰ƒ Fin (m + 1)} {signs : Finset (Fin (m + 1))} :
      @[simp]
      theorem Affine.Simplex.excenterExists_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
      noncomputable def Affine.Simplex.excenterWeights {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
      Fin (n + 1) โ†’ โ„

      The normalized weights of the vertices in an affine combination that gives an excenter with signs determined by the given set of indices. An excenter with those signs exists if and only if the sum of these weights is 1.

      Instances For
        theorem Affine.Simplex.excenterWeights_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) :
        (s.reindex e).excenterWeights signs = s.excenterWeights (Finset.map e.symm.toEmbedding signs) โˆ˜ โ‡‘e.symm
        @[simp]
        theorem Affine.Simplex.excenterWeights_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
        theorem Affine.Simplex.ExcenterExists.excenterWeights_ne_zero {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
        s.excenterWeights signs i โ‰  0
        @[simp]
        theorem Affine.Simplex.excenterWeightsUnnorm_compl {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
        @[simp]
        theorem Affine.Simplex.excenterWeights_compl {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
        @[simp]
        theorem Affine.Simplex.excenterExists_compl {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {signs : Finset (Fin (n + 1))} :
        s.ExcenterExists signsแถœ โ†” s.ExcenterExists signs
        theorem Affine.Simplex.sum_excenterWeights {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) [Decidable (s.ExcenterExists signs)] :
        โˆ‘ i : Fin (n + 1), s.excenterWeights signs i = if s.ExcenterExists signs then 1 else 0
        @[simp]
        theorem Affine.Simplex.sum_excenterWeights_eq_one_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {signs : Finset (Fin (n + 1))} :
        โˆ‘ i : Fin (n + 1), s.excenterWeights signs i = 1 โ†” s.ExcenterExists signs
        theorem Affine.Simplex.ExcenterExists.sum_excenterWeights_eq_one {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {signs : Finset (Fin (n + 1))} :
        s.ExcenterExists signs โ†’ โˆ‘ i : Fin (n + 1), s.excenterWeights signs i = 1

        Alias of the reverse direction of Affine.Simplex.sum_excenterWeights_eq_one_iff.

        theorem Affine.Simplex.sum_excenterWeightsUnnorm_empty_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
        0 < โˆ‘ i : Fin (n + 1), s.excenterWeightsUnnorm โˆ… i
        theorem Affine.Simplex.excenterWeights_empty_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
        0 < s.excenterWeights โˆ… i
        @[simp]
        theorem Affine.Simplex.sign_excenterWeights_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
        SignType.sign (s.excenterWeights โˆ… i) = 1
        @[simp]
        theorem Affine.Simplex.excenterExists_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
        s.ExcenterExists โˆ…

        The existence of the incenter, expressed in terms of ExcenterExists.

        theorem Affine.Simplex.sum_inv_height_sq_smul_vsub_eq_zero {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
        โˆ‘ i : Fin (n + 1), (s.height i)โปยน ^ 2 โ€ข (s.points i -แตฅ s.altitudeFoot i) = 0
        theorem Affine.Simplex.inv_height_eq_sum_mul_inv_dist {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
        (s.height i)โปยน = โˆ‘ j : Fin (n + 1) with j โ‰  i, -(inner โ„ (s.points i -แตฅ s.altitudeFoot i) (s.points j -แตฅ s.altitudeFoot j) / (s.height i * s.height j)) * (s.height j)โปยน

        The inverse of the distance from one vertex to the opposite face, expressed as a sum of multiples of that quantity for the other vertices. The multipliers, expressed here in terms of inner products, are equal to the cosines of angles between faces (informally, the inverse distances are proportional to the volumes of the faces and this is equivalent to expressing the volume of a face as the sum of the signed volumes of projections of the other faces onto that face).

        theorem Affine.Simplex.inv_height_lt_sum_inv_height {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :
        (s.height i)โปยน < โˆ‘ j : Fin (n + 1) with j โ‰  i, (s.height j)โปยน

        The inverse of the distance from one vertex to the opposite face is less than the sum of that quantity for the other vertices. This implies the existence of the excenter opposite that vertex; it also gives information about the location of the incenter (see excenterWeights_empty_lt_inv_two).

        theorem Affine.Simplex.sum_excenterWeightsUnnorm_singleton_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :
        0 < โˆ‘ j : Fin (n + 1), s.excenterWeightsUnnorm {i} j
        theorem Affine.Simplex.sign_excenterWeights_singleton_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (h : i โ‰  j) :
        theorem Affine.Simplex.excenterExists_singleton {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :

        The existence of the excenter opposite a vertex (in two or more dimensions), expressed in terms of ExcenterExists.

        theorem Affine.Simplex.excenterWeights_empty_lt_inv_two {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :

        The barycentric coordinates of the incenter are less than 2โปยน (thus, it lies closer on an angle bisector to the opposite side than to the vertex, or equivalently the image of the incenter under a homothety with scale factor 2 about a vertex lies outside the simplex).

        noncomputable def Affine.Simplex.exsphere {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :

        The exsphere with signs determined by the given set of indices (for the empty set, this is the insphere; for a singleton set, this is the exsphere opposite a vertex). This is only meaningful if s.ExcenterExists; otherwise, it is a sphere of radius zero at some arbitrary point.

        Instances For
          theorem Affine.Simplex.exsphere_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) :
          noncomputable def Affine.Simplex.insphere {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :

          The insphere of a simplex.

          Instances For
            @[simp]
            theorem Affine.Simplex.insphere_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
            noncomputable def Affine.Simplex.excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
            P

            The excenter with signs determined by the given set of indices (for the empty set, this is the incenter; for a singleton set, this is the excenter opposite a vertex). This is only meaningful if s.ExcenterExists signs; otherwise, it is some arbitrary point.

            Instances For
              theorem Affine.Simplex.excenter_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) :
              @[simp]
              theorem Affine.Simplex.ExcenterExists.excenter_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
              (s.map f.toAffineMap โ‹ฏ).excenter signs = f (s.excenter signs)
              @[simp]
              theorem Affine.Simplex.ExcenterExists.excenter_restrict {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (S : AffineSubspace โ„ P) (hS : affineSpan โ„ (Set.range s.points) โ‰ค S) :
              โ†‘((s.restrict S hS).excenter signs) = s.excenter signs
              noncomputable def Affine.Simplex.incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
              P

              The incenter of a simplex.

              Instances For
                @[simp]
                theorem Affine.Simplex.incenter_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
                @[simp]
                theorem Affine.Simplex.incenter_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
                (s.map f.toAffineMap โ‹ฏ).incenter = f s.incenter
                noncomputable def Affine.Simplex.exradius {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :

                The distance between an excenter and a face of the simplex (zero if no such excenter exists).

                Instances For
                  theorem Affine.Simplex.exradius_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) :
                  @[simp]
                  theorem Affine.Simplex.exradius_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
                  (s.map f.toAffineMap โ‹ฏ).exradius = s.exradius
                  noncomputable def Affine.Simplex.inradius {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :

                  The distance between the incenter and a face of the simplex.

                  Instances For
                    @[simp]
                    theorem Affine.Simplex.inradius_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) :
                    @[simp]
                    theorem Affine.Simplex.inradius_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
                    (s.map f.toAffineMap โ‹ฏ).inradius = s.inradius
                    @[simp]
                    theorem Affine.Simplex.exsphere_center {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    (s.exsphere signs).center = s.excenter signs
                    @[simp]
                    theorem Affine.Simplex.exsphere_radius {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    (s.exsphere signs).radius = s.exradius signs
                    @[simp]
                    theorem Affine.Simplex.exsphere_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
                    s.exsphere โˆ… = s.insphere
                    @[simp]
                    theorem Affine.Simplex.excenter_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
                    s.excenter โˆ… = s.incenter
                    @[simp]
                    theorem Affine.Simplex.exradius_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
                    s.exradius โˆ… = s.inradius
                    @[simp]
                    theorem Affine.Simplex.exsphere_compl {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    s.exsphere signsแถœ = s.exsphere signs
                    @[simp]
                    theorem Affine.Simplex.excenter_compl {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    s.excenter signsแถœ = s.excenter signs
                    @[simp]
                    theorem Affine.Simplex.exradius_compl {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    s.exradius signsแถœ = s.exradius signs
                    theorem Affine.Simplex.exradius_eq_abs_inv_sum {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    s.exradius signs = |(โˆ‘ i : Fin (n + 1), s.excenterWeightsUnnorm signs i)โปยน|
                    theorem Affine.Simplex.inradius_eq_abs_inv_sum {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
                    s.inradius = |(โˆ‘ i : Fin (n + 1), s.excenterWeightsUnnorm โˆ… i)โปยน|
                    theorem Affine.Simplex.exradius_nonneg {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) :
                    0 โ‰ค s.exradius signs
                    theorem Affine.Simplex.ExcenterExists.exradius_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) :
                    0 < s.exradius signs
                    theorem Affine.Simplex.exradius_singleton_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :
                    0 < s.exradius {i}
                    theorem Affine.Simplex.ExcenterExists.excenter_mem_affineSpan_range {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) :
                    theorem Affine.Simplex.ExcenterExists.signedInfDist_excenter_eq_mul_sum_inv {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                    (s.signedInfDist i) (s.excenter signs) = (if i โˆˆ signs then -1 else 1) * (โˆ‘ j : Fin (n + 1), s.excenterWeightsUnnorm signs j)โปยน
                    theorem Affine.Simplex.ExcenterExists.sign_signedInfDist_excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                    theorem Affine.Simplex.sign_signedInfDist_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
                    theorem Affine.Simplex.ExcenterExists.affineCombination_eq_excenter_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {w : Fin (n + 1) โ†’ โ„} (hw : โˆ‘ j : Fin (n + 1), w j = 1) :
                    theorem Affine.Simplex.ExcenterExists.excenter_notMem_affineSpan_face {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {fs : Finset (Fin (n + 1))} {m : โ„•} (hfs : fs.card = m + 1) (hne : m โ‰  n) :
                    s.excenter signs โˆ‰ affineSpan โ„ (Set.range (s.face hfs).points)
                    theorem Affine.Simplex.incenter_notMem_affineSpan_face {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {fs : Finset (Fin (n + 1))} {m : โ„•} (hfs : fs.card = m + 1) (hne : m โ‰  n) :
                    theorem Affine.Simplex.ExcenterExists.excenter_notMem_affineSpan_faceOpposite {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                    theorem Affine.Simplex.ExcenterExists.excenter_ne_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                    s.excenter signs โ‰  s.points i
                    theorem Affine.Simplex.incenter_ne_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
                    s.incenter โ‰  s.points i
                    theorem Affine.Simplex.ExcenterExists.excenter_notMem_affineSpan_pair {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} [n.AtLeastTwo] {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i j : Fin (n + 1)) :
                    s.excenter signs โˆ‰ affineSpan โ„ {s.points i, s.points j}
                    theorem Affine.Simplex.incenter_notMem_affineSpan_pair {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i j : Fin (n + 1)) :
                    s.incenter โˆ‰ affineSpan โ„ {s.points i, s.points j}
                    theorem Affine.Simplex.ExcenterExists.excenterWeights_eq_excenterWeights_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signsโ‚ signsโ‚‚ : Finset (Fin (n + 1))} (hโ‚ : s.ExcenterExists signsโ‚) (hโ‚‚ : s.ExcenterExists signsโ‚‚) :
                    s.excenterWeights signsโ‚ = s.excenterWeights signsโ‚‚ โ†” signsโ‚ = signsโ‚‚ โˆจ signsโ‚ = signsโ‚‚แถœ
                    theorem Affine.Simplex.ExcenterExists.excenter_eq_excenter_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signsโ‚ signsโ‚‚ : Finset (Fin (n + 1))} (hโ‚ : s.ExcenterExists signsโ‚) (hโ‚‚ : s.ExcenterExists signsโ‚‚) :
                    s.excenter signsโ‚ = s.excenter signsโ‚‚ โ†” signsโ‚ = signsโ‚‚ โˆจ signsโ‚ = signsโ‚‚แถœ
                    theorem Affine.Simplex.ExcenterExists.excenter_eq_incenter_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) :
                    s.excenter signs = s.incenter โ†” signs = โˆ… โˆจ signs = Finset.univ
                    theorem Affine.Simplex.excenter_singleton_ne_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :
                    s.excenter {i} โ‰  s.incenter
                    theorem Affine.Simplex.excenter_singleton_injective {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] :
                    Function.Injective fun (i : Fin (n + 1)) => s.excenter {i}
                    theorem Affine.Simplex.ExcenterExists.sSameSide_excenter_point_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i : Fin (n + 1)} :
                    theorem Affine.Simplex.ExcenterExists.sSameSide_point_excenter_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i : Fin (n + 1)} :
                    theorem Affine.Simplex.ExcenterExists.sOppSide_excenter_point_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i : Fin (n + 1)} :
                    (affineSpan โ„ (Set.range (s.faceOpposite i).points)).SOppSide (s.excenter signs) (s.points i) โ†” s.excenterWeights signs i < 0
                    theorem Affine.Simplex.ExcenterExists.sOppSide_point_excenter_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i : Fin (n + 1)} :
                    (affineSpan โ„ (Set.range (s.faceOpposite i).points)).SOppSide (s.points i) (s.excenter signs) โ†” s.excenterWeights signs i < 0
                    theorem Affine.Simplex.sSameSide_excenter_singleton_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (h : i โ‰  j) :
                    theorem Affine.Simplex.sSameSide_point_excenter_singleton {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (h : i โ‰  j) :
                    noncomputable def Affine.Simplex.touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :
                    P

                    A touchpoint is where an exsphere of a simplex is tangent to one of the faces.

                    Instances For
                      theorem Affine.Simplex.touchpoint_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) (i : Fin (m + 1)) :
                      (s.reindex e).touchpoint signs i = s.touchpoint (Finset.map e.symm.toEmbedding signs) (e.symm i)
                      @[simp]
                      theorem Affine.Simplex.ExcenterExists.touchpoint_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) (i : Fin (n + 1)) :
                      (s.map f.toAffineMap โ‹ฏ).touchpoint signs i = f (s.touchpoint signs i)
                      @[simp]
                      theorem Affine.Simplex.ExcenterExists.touchpoint_restrict {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (S : AffineSubspace โ„ P) (hS : affineSpan โ„ (Set.range s.points) โ‰ค S) (i : Fin (n + 1)) :
                      โ†‘((s.restrict S hS).touchpoint signs i) = s.touchpoint signs i
                      theorem Affine.Simplex.touchpoint_mem_affineSpan {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :
                      theorem Affine.Simplex.touchpoint_mem_affineSpan_simplex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :

                      A weaker version of touchpoint_mem_affineSpan.

                      theorem Affine.Simplex.touchpoint_eq_point_rev {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (s : Simplex โ„ P 1) (signs : Finset (Fin 2)) (i : Fin 2) :
                      s.touchpoint signs i = s.points i.rev
                      theorem Affine.Simplex.ExcenterExists.signedInfDist_excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                      (s.signedInfDist i) (s.excenter signs) = (if i โˆˆ signs then -1 else 1) * โ†‘(SignType.sign (โˆ‘ j : Fin (n + 1), s.excenterWeightsUnnorm signs j)) * s.exradius signs

                      The signed distance between the excenter and its projection in the plane of each face is the exradius.

                      theorem Affine.Simplex.signedInfDist_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :

                      The signed distance between the incenter and its projection in the plane of each face is the inradius.

                      In other words, the incenter is internally tangent to the faces.

                      theorem Affine.Simplex.ExcenterExists.dist_excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                      dist (s.excenter signs) (s.touchpoint signs i) = s.exradius signs

                      The distance between the excenter and its projection in the plane of each face is the exradius.

                      theorem Affine.Simplex.dist_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
                      dist s.incenter (s.touchpoint โˆ… i) = s.inradius

                      The distance between the incenter and its projection in the plane of each face is the inradius.

                      theorem Affine.Simplex.ExcenterExists.dist_excenter_eq_dist_excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (iโ‚ iโ‚‚ : Fin (n + 1)) :
                      dist (s.excenter signs) (s.touchpoint signs iโ‚) = dist (s.excenter signs) (s.touchpoint signs iโ‚‚)

                      An excenter is equidistant to any two of its touchpoints.

                      theorem Affine.Simplex.dist_incenter_eq_dist_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (iโ‚ iโ‚‚ : Fin (n + 1)) :
                      dist s.incenter (s.touchpoint โˆ… iโ‚) = dist s.incenter (s.touchpoint โˆ… iโ‚‚)

                      The incenter is equidistant to any two of its touchpoints.

                      theorem Affine.Simplex.ExcenterExists.touchpoint_mem_exsphere {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                      s.touchpoint signs i โˆˆ s.exsphere signs
                      theorem Affine.Simplex.touchpoint_mem_insphere {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (i : Fin (n + 1)) :
                      s.touchpoint โˆ… i โˆˆ s.insphere
                      theorem Affine.Simplex.ExcenterExists.isTangentAt_touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                      theorem Affine.Simplex.eq_touchpoint_of_isTangentAt_exsphere {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} {i : Fin (n + 1)} {p : P} (ht : (s.exsphere signs).IsTangentAt p (affineSpan โ„ (Set.range (s.faceOpposite i).points))) :
                      p = s.touchpoint signs i
                      theorem Affine.Simplex.ExcenterExists.isTangentAt_exsphere_iff_eq_touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i : Fin (n + 1)} {p : P} :
                      (s.exsphere signs).IsTangentAt p (affineSpan โ„ (Set.range (s.faceOpposite i).points)) โ†” p = s.touchpoint signs i
                      theorem Affine.Simplex.isTangentAt_insphere_iff_eq_touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {i : Fin (n + 1)} {p : P} :
                      theorem Affine.Simplex.ExcenterExists.affineSpan_faceOpposite_eq_orthRadius {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} [hf : Fact (Module.finrank โ„ V = n)] {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i : Fin (n + 1)) :
                      theorem Affine.Simplex.exists_forall_signedInfDist_eq_iff_excenterExists_and_eq_excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {p : P} (hp : p โˆˆ affineSpan โ„ (Set.range s.points)) {signs : Finset (Fin (n + 1))} :
                      (โˆƒ (r : โ„), โˆ€ (i : Fin (n + 1)), (s.signedInfDist i) p = (if i โˆˆ signs then -1 else 1) * r) โ†” s.ExcenterExists signs โˆง p = s.excenter signs
                      theorem Affine.Simplex.exists_forall_signedInfDist_eq_iff_eq_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {p : P} (hp : p โˆˆ affineSpan โ„ (Set.range s.points)) :
                      (โˆƒ (r : โ„), โˆ€ (i : Fin (n + 1)), (s.signedInfDist i) p = r) โ†” p = s.incenter
                      theorem Affine.Simplex.exists_forall_dist_eq_iff_exists_excenterExists_and_eq_excenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {p : P} (hp : p โˆˆ affineSpan โ„ (Set.range s.points)) :
                      (โˆƒ (r : โ„), โˆ€ (i : Fin (n + 1)), dist p โ†‘((s.faceOpposite i).orthogonalProjectionSpan p) = r) โ†” โˆƒ (signs : Finset (Fin (n + 1))), s.ExcenterExists signs โˆง p = s.excenter signs
                      theorem Affine.Simplex.ExcenterExists.touchpoint_injective {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) :
                      Function.Injective (s.touchpoint signs)
                      theorem Affine.Simplex.touchpoint_empty_injective {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) :
                      Function.Injective (s.touchpoint โˆ…)
                      theorem Affine.Simplex.ExcenterExists.touchpoint_notMem_affineSpan_of_ne {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                      theorem Affine.Simplex.touchpoint_empty_notMem_affineSpan_of_ne {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                      theorem Affine.Simplex.ExcenterExists.sign_signedInfDist_lineMap_excenter_touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i j : Fin (n + 1)} (hne : i โ‰  j) {r : โ„} (hr : r โˆˆ Set.Icc 0 1) :
                      theorem Affine.Simplex.sign_signedInfDist_lineMap_incenter_touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {i j : Fin (n + 1)} (hne : i โ‰  j) {r : โ„} (hr : r โˆˆ Set.Icc 0 1) :
                      theorem Affine.Simplex.ExcenterExists.sign_signedInfDist_touchpoint {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                      theorem Affine.Simplex.sign_signedInfDist_touchpoint_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                      noncomputable def Affine.Simplex.touchpointWeights {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :
                      Fin (n + 1) โ†’ โ„

                      The unique weights of the vertices in an affine combination equal to the given touchpoint.

                      Instances For
                        @[simp]
                        theorem Affine.Simplex.sum_touchpointWeights {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :
                        โˆ‘ j : Fin (n + 1), s.touchpointWeights signs i j = 1
                        @[simp]
                        theorem Affine.Simplex.affineCombination_touchpointWeights {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) (signs : Finset (Fin (n + 1))) (i : Fin (n + 1)) :
                        @[simp]
                        theorem Affine.Simplex.affineCombination_eq_touchpoint_iff {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} {i : Fin (n + 1)} {w : Fin (n + 1) โ†’ โ„} (hw : โˆ‘ j : Fin (n + 1), w j = 1) :
                        theorem Affine.Simplex.touchpointWeights_reindex {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {m n : โ„•} [NeZero m] [NeZero n] (s : Simplex โ„ P n) (e : Fin (n + 1) โ‰ƒ Fin (m + 1)) (signs : Finset (Fin (m + 1))) (i : Fin (m + 1)) :
                        (s.reindex e).touchpointWeights signs i = s.touchpointWeights (Finset.map e.symm.toEmbedding signs) (e.symm i) โˆ˜ โ‡‘e.symm
                        @[simp]
                        theorem Affine.Simplex.ExcenterExists.touchpointWeights_map {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {Vโ‚‚ : Type u_3} {Pโ‚‚ : Type u_4} [NormedAddCommGroup Vโ‚‚] [InnerProductSpace โ„ Vโ‚‚] [MetricSpace Pโ‚‚] [NormedAddTorsor Vโ‚‚ Pโ‚‚] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (f : P โ†’แตƒโฑ[โ„] Pโ‚‚) :
                        (s.map f.toAffineMap โ‹ฏ).touchpointWeights signs = s.touchpointWeights signs
                        @[simp]
                        theorem Affine.Simplex.ExcenterExists.touchpointWeights_restrict {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (S : AffineSubspace โ„ P) (hS : affineSpan โ„ (Set.range s.points) โ‰ค S) :
                        theorem Affine.Simplex.ExcenterExists.sign_touchpointWeights {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        theorem Affine.Simplex.sign_touchpointWeights_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        SignType.sign (s.touchpointWeights โˆ… i j) = 1
                        @[simp]
                        theorem Affine.Simplex.touchpointWeights_eq_zero {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} {signs : Finset (Fin (n + 1))} (i : Fin (n + 1)) :
                        s.touchpointWeights signs i i = 0
                        theorem Affine.Simplex.touchpointWeights_empty_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        0 < s.touchpointWeights โˆ… i j
                        theorem Affine.Simplex.touchpoint_empty_mem_interior_faceOpposite {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i : Fin (n + 1)) :
                        s.touchpoint โˆ… i โˆˆ (s.faceOpposite i).interior
                        theorem Affine.Simplex.sign_touchpointWeights_singleton_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        theorem Affine.Simplex.touchpointWeights_singleton_pos {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        0 < s.touchpointWeights {i} i j
                        theorem Affine.Simplex.sign_touchpointWeights_singleton_neg {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        theorem Affine.Simplex.touchpointWeights_singleton_neg {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] {i j : Fin (n + 1)} (hne : i โ‰  j) :
                        s.touchpointWeights {i} j i < 0
                        theorem Affine.Simplex.ExcenterExists.touchpoint_ne_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] {s : Simplex โ„ P n} [n.AtLeastTwo] {signs : Finset (Fin (n + 1))} (h : s.ExcenterExists signs) (i j : Fin (n + 1)) :
                        s.touchpoint signs i โ‰  s.points j
                        theorem Affine.Simplex.touchpoint_empty_ne_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] {n : โ„•} [NeZero n] (s : Simplex โ„ P n) [n.AtLeastTwo] (i j : Fin (n + 1)) :
                        s.touchpoint โˆ… i โ‰  s.points j

                        All excenters exist for a triangle.

                        theorem Affine.Triangle.excenter_eq_incenter_or_excenter_singleton {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) (signs : Finset (Fin 3)) :
                        Simplex.excenter t signs = Simplex.incenter t โˆจ โˆƒ (i : Fin (2 + 1)), Simplex.excenter t signs = Simplex.excenter t {i}

                        An excenter of a triangle is either the incenter or the excenter opposite a vertex.

                        theorem Affine.Triangle.excenter_eq_incenter_or_excenter_singleton_of_ne {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) (signs : Finset (Fin 3)) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        Simplex.excenter t signs = Simplex.incenter t โˆจ Simplex.excenter t signs = Simplex.excenter t {iโ‚} โˆจ Simplex.excenter t signs = Simplex.excenter t {iโ‚‚} โˆจ Simplex.excenter t signs = Simplex.excenter t {iโ‚ƒ}

                        An excenter of a triangle is either the incenter or the excenter opposite one of three enumerated different vertices. This is intended for when it is known a point is an excenter and it is to be proved which excenter it is by elimination of the other cases.

                        theorem Affine.Triangle.sSameSide_affineSpan_pair_incenter_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        (affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ}).SSameSide (Simplex.incenter t) (t.points iโ‚)
                        theorem Affine.Triangle.sSameSide_affineSpan_pair_point_incenter {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        (affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ}).SSameSide (t.points iโ‚) (Simplex.incenter t)
                        theorem Affine.Triangle.sOppSide_affineSpan_pair_excenter_singleton_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        (affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ}).SOppSide (Simplex.excenter t {iโ‚}) (t.points iโ‚)
                        theorem Affine.Triangle.sOppSide_affineSpan_pair_point_excenter_singleton {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        (affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ}).SOppSide (t.points iโ‚) (Simplex.excenter t {iโ‚})
                        theorem Affine.Triangle.sSameSide_affineSpan_pair_excenter_singleton_point {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        (affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ}).SSameSide (Simplex.excenter t {iโ‚‚}) (t.points iโ‚)
                        theorem Affine.Triangle.sSameSide_affineSpan_pair_point_excenter_singleton {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        (affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ}).SSameSide (t.points iโ‚) (Simplex.excenter t {iโ‚‚})
                        theorem Affine.Triangle.affineSpan_pair_eq_orthRadius {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) [Fact (Module.finrank โ„ V = 2)] (signs : Finset (Fin 3)) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ} = (Simplex.exsphere t signs).orthRadius (Simplex.touchpoint t signs iโ‚)
                        theorem Affine.Triangle.affineSpan_pair_eq_orthRadius_insphere {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) [Fact (Module.finrank โ„ V = 2)] {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        affineSpan โ„ {t.points iโ‚‚, t.points iโ‚ƒ} = (Simplex.insphere t).orthRadius (Simplex.touchpoint t โˆ… iโ‚)
                        theorem Affine.Triangle.sbtw_touchpoint_empty {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        Sbtw โ„ (t.points iโ‚) (Simplex.touchpoint t โˆ… iโ‚‚) (t.points iโ‚ƒ)
                        theorem Affine.Triangle.sbtw_touchpoint_singleton {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        Sbtw โ„ (t.points iโ‚) (Simplex.touchpoint t {iโ‚‚} iโ‚‚) (t.points iโ‚ƒ)
                        theorem Affine.Triangle.touchpoint_singleton_sbtw {V : Type u_1} {P : Type u_2} [NormedAddCommGroup V] [InnerProductSpace โ„ V] [MetricSpace P] [NormedAddTorsor V P] (t : Triangle โ„ P) {iโ‚ iโ‚‚ iโ‚ƒ : Fin 3} (hโ‚โ‚‚ : iโ‚ โ‰  iโ‚‚) (hโ‚โ‚ƒ : iโ‚ โ‰  iโ‚ƒ) (hโ‚‚โ‚ƒ : iโ‚‚ โ‰  iโ‚ƒ) :
                        Sbtw โ„ (Simplex.touchpoint t {iโ‚} iโ‚‚) (t.points iโ‚ƒ) (t.points iโ‚)