Documentation

EuclideanGeometry.Foundation.Axiom.Basic.Vector

Standard Vector Space #

This file defines the standard inner product real vector space of dimension two, but we will build this on the complex numbers.

Important definitions #

Notation #

Implementation Notes #

Further Works #

theorem Units.coe_div {α : Type u} [DivisionMonoid α] (u₁ : αˣ) (u₂ : αˣ) :
(u₁ / u₂) = u₁ / u₂

Alias of Units.val_div_eq_div_val.

theorem SameRay.norm_smul_map_eq {E : Type u_1} [SeminormedAddCommGroup E] [NormedSpace E] {M : Type u_2} [AddCommGroup M] [Module M] {x : E} {y : E} {F : Type u_3} [SMulHomClass F E M] (f : F) (h : SameRay x y) :
x f y = y f x
theorem SameRay.inv_norm_smul_map_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {M : Type u_2} [AddCommGroup M] [Module M] {x : E} {y : E} {F : Type u_3} [SMulHomClass F E M] (f : F) (hx : x 0) (hy : y 0) (h : SameRay x y) :
theorem Module.Ray.map_trans {R : Type u_1} [StrictOrderedCommSemiring R] {M₁ : Type u_2} [AddCommMonoid M₁] [Module R M₁] {M₂ : Type u_3} [AddCommMonoid M₂] [Module R M₂] {M₃ : Type u_4} [AddCommMonoid M₃] [Module R M₃] (e₁₂ : M₁ ≃ₗ[R] M₂) (e₂₃ : M₂ ≃ₗ[R] M₃) :
Module.Ray.map (e₁₂ ≪≫ₗ e₂₃) = (Module.Ray.map e₁₂).trans (Module.Ray.map e₂₃)
def Projectivization.mapEquiv {K : Type u_1} {V : Type u_2} [DivisionRing K] [AddCommGroup V] [Module K V] {L : Type u_3} {W : Type u_4} [DivisionRing L] [AddCommGroup W] [Module L W] {σ : K →+* L} {σ' : L →+* K} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (f : V ≃ₛₗ[σ] W) :

An semilinear equivalence of vector spaces induces a equivalence on projective spaces.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[simp]
    theorem Projectivization.mapEquiv_symm {K : Type u_1} {V : Type u_2} [DivisionRing K] [AddCommGroup V] [Module K V] {L : Type u_3} {W : Type u_4} [DivisionRing L] [AddCommGroup W] [Module L W] {σ : K →+* L} {σ' : L →+* K} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (f : V ≃ₛₗ[σ] W) :
    @[simp]
    theorem Projectivization.mapEquiv_trans {K₁ : Type u_5} {V₁ : Type u_6} [Field K₁] [AddCommGroup V₁] [Module K₁ V₁] {K₂ : Type u_7} {V₂ : Type u_8} [Field K₂] [AddCommGroup V₂] [Module K₂ V₂] {K₃ : Type u_9} {V₃ : Type u_10} [Field K₃] [AddCommGroup V₃] [Module K₃ V₃] {σ₁₂ : K₁ →+* K₂} {σ₂₃ : K₂ →+* K₃} {σ₁₃ : K₁ →+* K₃} {σ₂₁ : K₂ →+* K₁} {σ₃₂ : K₃ →+* K₂} {σ₃₁ : K₃ →+* K₁} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] [RingHomCompTriple σ₃₂ σ₂₁ σ₃₁] {re₁₂ : RingHomInvPair σ₁₂ σ₂₁} {re₂₃ : RingHomInvPair σ₂₃ σ₃₂} [RingHomInvPair σ₁₃ σ₃₁] {re₂₁ : RingHomInvPair σ₂₁ σ₁₂} {re₃₂ : RingHomInvPair σ₃₂ σ₂₃} [RingHomInvPair σ₃₁ σ₁₃] (e₁₂ : V₁ ≃ₛₗ[σ₁₂] V₂) (e₂₃ : V₂ ≃ₛₗ[σ₂₃] V₃) :
    theorem InnerProductSpace.Core.inner_self_eq_norm_mul_norm' {𝕜 : Type u_1} {F : Type u_2} [IsROrC 𝕜] [AddCommGroup F] [Module 𝕜 F] [InnerProductSpace.Core 𝕜 F] (x : F) :
    inner x x = x * x
    theorem InnerProductSpace.Core.inner_self_eq_norm_sq' {𝕜 : Type u_1} {F : Type u_2} [IsROrC 𝕜] [AddCommGroup F] [Module 𝕜 F] [InnerProductSpace.Core 𝕜 F] (x : F) :
    inner x x = x ^ 2
    theorem inner_self_eq_norm_mul_norm' {𝕜 : Type u_1} {E : Type u_2} [IsROrC 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
    inner x x = x * x
    theorem inner_self_eq_norm_sq' {𝕜 : Type u_1} {E : Type u_2} [IsROrC 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
    inner x x = x ^ 2
    def IsROrC.toComplex {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) :
    Equations
    • z = { re := IsROrC.re z, im := IsROrC.im z }
    Instances For
      instance IsROrC.instCoeComplex {𝕜 : Type u_1} [IsROrC 𝕜] :
      Coe 𝕜
      Equations
      • IsROrC.instCoeComplex = { coe := IsROrC.toComplex }
      @[simp]
      theorem IsROrC.toComplex_eq_self (z : ) :
      z = z
      @[simp]
      theorem IsROrC.toComplex_re {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) :
      (z).re = IsROrC.re z
      @[simp]
      theorem IsROrC.toComplex_im {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) :
      (z).im = IsROrC.im z
      @[simp]
      theorem IsROrC.toComplex_one {𝕜 : Type u_1} [IsROrC 𝕜] :
      1 = 1
      @[simp]
      theorem IsROrC.toComplex_zero {𝕜 : Type u_1} [IsROrC 𝕜] :
      0 = 0
      @[simp]
      theorem IsROrC.toComplex_mul {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) (w : 𝕜) :
      (z * w) = z * w
      @[simp]
      theorem IsROrC.toComplex_add {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) (w : 𝕜) :
      (z + w) = z + w
      @[simp]
      theorem IsROrC.normSq_toComplex {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) :
      Complex.normSq z = IsROrC.normSq z
      @[simp]
      theorem IsROrC.toComplex_inv {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) :
      z⁻¹ = (z)⁻¹
      @[simp]
      theorem IsROrC.abs_toComplex {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) :
      instance IsROrC.instSMulComplex {𝕜 : Type u_1} [IsROrC 𝕜] :
      SMul 𝕜
      Equations
      • IsROrC.instSMulComplex = { smul := fun (x : 𝕜) (z : ) => x * z }
      theorem IsROrC.smul_def {𝕜 : Type u_1} [IsROrC 𝕜] (x : 𝕜) (z : ) :
      x z = x * z
      instance IsROrC.IsROrC.normedSpaceComplex {𝕜 : Type u_1} [IsROrC 𝕜] :
      Equations
      structure EuclidGeom.Vec :
      Instances For
        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem EuclidGeom.Vec.norm_def (v : EuclidGeom.Vec) :
          v = Real.sqrt (v.fst * v.fst + v.snd * v.snd)
          theorem EuclidGeom.Vec.norm_sq (v : EuclidGeom.Vec) :
          v ^ 2 = v.fst * v.fst + v.snd * v.snd
          theorem EuclidGeom.Vec.ext {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} (h₁ : v₁.fst = v₂.fst) (h₂ : v₁.snd = v₂.snd) :
          v₁ = v₂
          theorem EuclidGeom.Vec.mk_fst {x : } {y : } :
          { fst := x, snd := y }.fst = x
          theorem EuclidGeom.Vec.mk_snd {x : } {y : } :
          { fst := x, snd := y }.snd = y
          @[simp]
          theorem EuclidGeom.Vec.mk_zero_zero :
          { fst := 0, snd := 0 } = 0
          @[simp]
          theorem EuclidGeom.Vec.zero_fst :
          0.fst = 0
          @[simp]
          theorem EuclidGeom.Vec.zero_snd :
          0.snd = 0
          @[simp]
          theorem EuclidGeom.Vec.mk_add_mk (x₁ : ) (x₂ : ) (y₁ : ) (y₂ : ) :
          { fst := x₁, snd := y₁ } + { fst := x₂, snd := y₂ } = { fst := x₁ + x₂, snd := y₁ + y₂ }
          @[simp]
          theorem EuclidGeom.Vec.add_fst (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
          (v₁ + v₂).fst = v₁.fst + v₂.fst
          @[simp]
          theorem EuclidGeom.Vec.add_snd (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
          (v₁ + v₂).snd = v₁.snd + v₂.snd
          @[simp]
          theorem EuclidGeom.Vec.neg_mk (x : ) (y : ) :
          -{ fst := x, snd := y } = { fst := -x, snd := -y }
          @[simp]
          theorem EuclidGeom.Vec.neg_fst (v : EuclidGeom.Vec) :
          (-v).fst = -v.fst
          @[simp]
          theorem EuclidGeom.Vec.neg_snd (v : EuclidGeom.Vec) :
          (-v).snd = -v.snd
          Equations
          theorem EuclidGeom.Vec.complex_smul_def (s : ) (v : EuclidGeom.Vec) :
          s v = { fst := s.re * v.fst - s.im * v.snd, snd := s.re * v.snd + s.im * v.fst }
          @[simp]
          theorem EuclidGeom.Vec.complex_smul_mk (s : ) (x : ) (y : ) :
          s { fst := x, snd := y } = { fst := s.re * x - s.im * y, snd := s.re * y + s.im * x }
          @[simp]
          theorem EuclidGeom.Vec.complex_smul_fst (s : ) (v : EuclidGeom.Vec) :
          (s v).fst = s.re * v.fst - s.im * v.snd
          @[simp]
          theorem EuclidGeom.Vec.complex_smul_snd (s : ) (v : EuclidGeom.Vec) :
          (s v).snd = s.re * v.snd + s.im * v.fst
          theorem EuclidGeom.Vec.smul_def' (s : ) (v : EuclidGeom.Vec) :
          s v = { fst := s * v.fst - 0 * v.snd, snd := s * v.snd + 0 * v.fst }
          @[simp]
          theorem EuclidGeom.Vec.smul_mk' (s : ) (x : ) (y : ) :
          s { fst := x, snd := y } = { fst := s * x - 0 * y, snd := s * y + 0 * x }
          @[simp]
          theorem EuclidGeom.Vec.smul_fst' (s : ) (v : EuclidGeom.Vec) :
          (s v).fst = s * v.fst - 0 * v.snd
          @[simp]
          theorem EuclidGeom.Vec.smul_snd' (s : ) (v : EuclidGeom.Vec) :
          (s v).snd = s * v.snd + 0 * v.fst
          theorem EuclidGeom.Vec.smul_def (s : ) (v : EuclidGeom.Vec) :
          s v = { fst := s * v.fst, snd := s * v.snd }
          @[simp]
          theorem EuclidGeom.Vec.smul_mk (s : ) (x : ) (y : ) :
          s { fst := x, snd := y } = { fst := s * x, snd := s * y }
          @[simp]
          theorem EuclidGeom.Vec.smul_fst (s : ) (v : EuclidGeom.Vec) :
          (s v).fst = s * v.fst
          @[simp]
          theorem EuclidGeom.Vec.smul_snd (s : ) (v : EuclidGeom.Vec) :
          (s v).snd = s * v.snd
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem EuclidGeom.Vec.det_apply (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            (EuclidGeom.Vec.det v₁) v₂ = v₁.fst * v₂.snd - v₁.snd * v₂.fst
            Equations
            • One or more equations did not get rendered due to their size.
            theorem EuclidGeom.Vec.real_inner_apply (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            inner v₁ v₂ = v₁.fst * v₂.fst + v₁.snd * v₂.snd
            Equations
            • One or more equations did not get rendered due to their size.
            @[simp]
            theorem EuclidGeom.Vec.inner_re (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            (inner v₁ v₂).re = inner v₁ v₂
            @[simp]
            theorem EuclidGeom.Vec.inner_im (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            (inner v₁ v₂).im = (EuclidGeom.Vec.det v₁) v₂
            theorem EuclidGeom.Vec.complex_inner_apply' (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            inner v₁ v₂ = { re := inner v₁ v₂, im := (EuclidGeom.Vec.det v₁) v₂ }
            theorem EuclidGeom.Vec.complex_inner_apply (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            inner v₁ v₂ = (inner v₁ v₂) + ((EuclidGeom.Vec.det v₁) v₂) * Complex.I
            theorem EuclidGeom.Vec.smul_inner (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
            inner v₁ v₂ v₁ = v₁ ^ 2 v₂
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              @[simp]
              theorem LinearEquiv.one_apply {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (x : M) :
              1 x = x
              @[simp]
              theorem LinearEquiv.mul_apply {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (f : M ≃ₗ[R] M) (g : M ≃ₗ[R] M) (x : M) :
              (f * g) x = f (g x)
              theorem EuclidGeom.Vec.cdiv_def (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              v₁ / v₂ = inner v₂ v₁ / v₂ ^ 2
              theorem EuclidGeom.Vec.add_cdiv (v₁ : EuclidGeom.Vec) (v₁' : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              (v₁ + v₁') / v₂ = v₁ / v₂ + v₁' / v₂
              theorem EuclidGeom.Vec.neg_cdiv (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              -v₁ / v₂ = -(v₁ / v₂)
              theorem EuclidGeom.Vec.cdiv_neg (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              v₁ / -v₂ = -(v₁ / v₂)
              theorem EuclidGeom.Vec.sub_cdiv (v₁ : EuclidGeom.Vec) (v₁' : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              (v₁ - v₁') / v₂ = v₁ / v₂ - v₁' / v₂
              theorem EuclidGeom.Vec.complex_smul_cdiv (z : ) (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              z v₁ / v₂ = z * (v₁ / v₂)
              theorem EuclidGeom.Vec.mul_cdiv (z : ) (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              z * (v₁ / v₂) = z v₁ / v₂
              theorem EuclidGeom.Vec.smul_cdiv {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              z v₁ / v₂ = z (v₁ / v₂)
              @[simp]
              theorem EuclidGeom.Vec.cdiv_smul_cancel (v₁ : EuclidGeom.Vec) {v₂ : EuclidGeom.Vec} (hv₂ : v₂ 0) :
              (v₁ / v₂) v₂ = v₁
              @[simp]
              theorem EuclidGeom.Vec.complex_smul_cdiv_cancel (z : ) {v : EuclidGeom.Vec} (hv : v 0) :
              z v / v = z
              @[simp]
              theorem EuclidGeom.Vec.complex_inner_eq_zero_iff {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} :
              inner v₁ v₂ = 0 v₁ = 0 v₂ = 0
              @[simp]
              theorem EuclidGeom.Vec.cdiv_eq_zero {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} :
              v₁ / v₂ = 0 v₁ = 0 v₂ = 0
              @[simp]
              @[simp]
              theorem EuclidGeom.Vec.cdiv_ne_zero {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} :
              v₁ / v₂ 0 v₁ 0 v₂ 0
              theorem EuclidGeom.Vec.cdiv_left_inj {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} {v₃ : EuclidGeom.Vec} (hv₃ : v₃ 0) :
              v₁ / v₃ = v₂ / v₃ v₁ = v₂
              theorem EuclidGeom.Vec.cdiv_eq_iff {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} {z : } (hv₂ : v₂ 0) :
              v₁ / v₂ = z v₁ = z v₂
              theorem EuclidGeom.Vec.eq_cdiv_iff {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} {z : } (hv₂ : v₂ 0) :
              z = v₁ / v₂ z v₂ = v₁
              theorem EuclidGeom.Vec.cdiv_eq_one_iff_eq {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} (hv₂ : v₂ 0) :
              v₁ / v₂ = 1 v₁ = v₂
              @[simp]
              theorem EuclidGeom.Vec.cdiv_self {v : EuclidGeom.Vec} (hv : v 0) :
              v / v = 1
              @[simp]
              theorem EuclidGeom.Vec.smul_cdiv_cancel {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) {v : EuclidGeom.Vec} (hv : v 0) :
              z v / v = z
              @[simp]
              theorem EuclidGeom.Vec.real_smul_cdiv_cancel (z : ) {v : EuclidGeom.Vec} (hv : v 0) :
              z v / v = z
              theorem EuclidGeom.Vec.inv_cdiv (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              (v₁ / v₂)⁻¹ = v₂ / v₁
              theorem EuclidGeom.Vec.cdiv_complex_smul (z : ) (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              v₁ / z v₂ = z⁻¹ * (v₁ / v₂)
              @[simp]
              theorem EuclidGeom.Vec.cdiv_smul {𝕜 : Type u_1} [IsROrC 𝕜] (z : 𝕜) (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              v₁ / z v₂ = z⁻¹ (v₁ / v₂)
              theorem EuclidGeom.Vec.inner_smul_comm_right (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) (v₃ : EuclidGeom.Vec) :
              inner v₁ v₂ v₃ = inner v₁ v₃ v₂
              theorem EuclidGeom.Vec.cdiv_smul_comm (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) (v₃ : EuclidGeom.Vec) :
              (v₁ / v₂) v₃ = (v₃ / v₂) v₁
              theorem EuclidGeom.Vec.cdiv_eq_cdiv_iff_cdiv_eq_cdiv {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} {v₃ : EuclidGeom.Vec} {v₄ : EuclidGeom.Vec} (hv₂ : v₂ 0) (hv₃ : v₃ 0) :
              v₁ / v₂ = v₃ / v₄ v₁ / v₃ = v₂ / v₄
              @[simp]
              theorem EuclidGeom.Vec.abs_inner (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              Complex.abs (inner v₁ v₂) = v₁ * v₂
              @[simp]
              theorem EuclidGeom.Vec.abs_cdiv (v₁ : EuclidGeom.Vec) (v₂ : EuclidGeom.Vec) :
              Complex.abs (v₁ / v₂) = v₁ / v₂
              theorem EuclidGeom.Vec.real_inner_of_sameRay {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} (h : SameRay v₁ v₂) :
              inner v₁ v₂ = v₁ * v₂
              theorem EuclidGeom.Vec.det_of_sameRay {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} (h : SameRay v₁ v₂) :
              (EuclidGeom.Vec.det v₁) v₂ = 0
              theorem EuclidGeom.Vec.complex_inner_of_sameRay {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} (h : SameRay v₁ v₂) :
              inner v₁ v₂ = v₁ * v₂
              theorem EuclidGeom.Vec.cdiv_of_sameRay {v₁ : EuclidGeom.Vec} {v₂ : EuclidGeom.Vec} (h : SameRay v₁ v₂) :
              v₁ / v₂ = (v₁ / v₂)
              @[simp]
              @[inline, reducible]

              the class of non-degenerate vectors

              Equations
              Instances For
                @[inline, reducible]
                Equations
                Instances For
                  Equations
                  @[simp]
                  theorem EuclidGeom.VecND.coe_neg (v : EuclidGeom.VecND) :
                  (-v) = -v

                  Extension for the positivity tactic.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    theorem EuclidGeom.VecND.ext {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} :
                    v₁ = v₂v₁ = v₂
                    theorem EuclidGeom.VecND.coe_inj {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} :
                    v₁ = v₂ v₁ = v₂
                    @[simp]
                    theorem EuclidGeom.VecND.coe_smul {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : G) (v : EuclidGeom.VecND) :
                    (g v) = g v
                    @[simp]
                    theorem EuclidGeom.VecND.coe_vadd {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : Additive G) (v : EuclidGeom.VecND) :
                    (g +ᵥ v) = Additive.toMul g v
                    theorem EuclidGeom.VecND.smul_def {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : G) (v : EuclidGeom.VecND) :
                    g v = { val := g v, property := (_ : g v 0) }
                    theorem EuclidGeom.VecND.vadd_def {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : Additive G) (v : EuclidGeom.VecND) :
                    g +ᵥ v = { val := Additive.toMul g v, property := (_ : Additive.toMul g v 0) }
                    theorem EuclidGeom.VecND.mk_neg (v : EuclidGeom.Vec) (hv : v 0) :
                    { val := -v, property := (_ : -v 0) } = -{ val := v, property := hv }
                    @[simp]
                    theorem EuclidGeom.VecND.mk_neg' (v : EuclidGeom.Vec) (hv : -v 0) :
                    { val := -v, property := hv } = -{ val := v, property := (_ : v 0) }
                    theorem EuclidGeom.VecND.mk_smul {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : G) (v : EuclidGeom.Vec) (hv : v 0) :
                    { val := g v, property := (_ : g v 0) } = g { val := v, property := hv }
                    @[simp]
                    theorem EuclidGeom.VecND.mk_smul' {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : G) (v : EuclidGeom.Vec) (hv : g v 0) :
                    { val := g v, property := hv } = g { val := v, property := (_ : v 0) }
                    theorem EuclidGeom.VecND.mk_vadd {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : Additive G) (v : EuclidGeom.Vec) (hv : v 0) :
                    { val := g +ᵥ v, property := (_ : Additive.toMul g v 0) } = g +ᵥ { val := v, property := hv }
                    @[simp]
                    theorem EuclidGeom.VecND.mk_vadd' {G : Type u_1} [Group G] [DistribMulAction G EuclidGeom.Vec] (g : Additive G) (v : EuclidGeom.Vec) (hv : g +ᵥ v 0) :
                    { val := g +ᵥ v, property := hv } = g +ᵥ { val := v, property := (_ : v 0) }
                    @[simp]
                    theorem EuclidGeom.VecND.mk_smul₀ {G : Type u_1} [DivisionSemiring G] [Module G EuclidGeom.Vec] [NoZeroSMulDivisors G EuclidGeom.Vec] (g : G) (v : EuclidGeom.Vec) (hv : g v 0) :
                    { val := g v, property := hv } = Units.mk0 g (_ : g 0) EuclidGeom.VecND.mk v (_ : v 0)
                    @[simp]
                    theorem EuclidGeom.VecND.neg_smul {R : Type u_1} [Ring R] [Module R EuclidGeom.Vec] (g : Rˣ) (v : EuclidGeom.VecND) :
                    -g v = -(g v)
                    @[simp]
                    theorem EuclidGeom.VecND.smul_neg {R : Type u_1} [Ring R] [Module R EuclidGeom.Vec] (g : Rˣ) (v : EuclidGeom.VecND) :
                    g -v = -(g v)
                    @[simp]
                    theorem EuclidGeom.VecND.coe_cdiv (v₁ : EuclidGeom.VecND) (v₂ : EuclidGeom.VecND) :
                    (v₁ / v₂) = v₁ / v₂
                    theorem EuclidGeom.VecND.smul_cdiv (z : ˣ) (v₁ : EuclidGeom.VecND) (v₂ : EuclidGeom.VecND) :
                    z v₁ / v₂ = z * (v₁ / v₂)
                    @[simp]
                    theorem EuclidGeom.VecND.cdiv_smul_cancel (v₁ : EuclidGeom.VecND) (v₂ : EuclidGeom.VecND) :
                    (v₁ / v₂) v₂ = v₁
                    theorem EuclidGeom.VecND.vsub_def (v₁ : EuclidGeom.VecND) (v₂ : EuclidGeom.VecND) :
                    v₁ -ᵥ v₂ = Additive.ofMul (v₁ / v₂)
                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      Equations
                      Instances For
                        Equations
                        Instances For

                          Alias of the forward direction of EuclidGeom.VecND.sameRay_iff_sameDir.

                          Alias of the reverse direction of EuclidGeom.VecND.sameRay_iff_sameDir.

                          theorem EuclidGeom.VecND.cdiv_of_sameDir {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} (h : EuclidGeom.VecND.SameDir v₁ v₂) :
                          (v₁ / v₂) = v₁ / v₂
                          @[inline, reducible]
                          Equations
                          Instances For
                            @[inline, reducible]
                            Equations
                            • v.toDir = v
                            Instances For
                              @[simp]
                              theorem EuclidGeom.Dir.quotient_mk_eq (v : EuclidGeom.VecND) :
                              v = v.toDir
                              @[simp]
                              theorem EuclidGeom.VecND.neg_toDir (v : EuclidGeom.VecND) :
                              (-v).toDir = -v.toDir
                              @[simp]
                              theorem EuclidGeom.VecND.toDir_eq_toDir_iff {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} :
                              v₁.toDir = v₂.toDir EuclidGeom.VecND.SameDir v₁ v₂
                              @[simp]
                              theorem EuclidGeom.VecND.smul_pos_toDir {x : } (v : EuclidGeom.VecND) (hx : 0 < x) :
                              (Units.mk0 x (_ : x 0) v).toDir = v.toDir
                              @[simp]
                              theorem EuclidGeom.VecND.smul_neg_toDir {x : } (v : EuclidGeom.VecND) (hx : x < 0) :
                              (Units.mk0 x (_ : x 0) v).toDir = -v.toDir
                              theorem EuclidGeom.Dir.ind {C : EuclidGeom.DirProp} (h : ∀ (v : EuclidGeom.VecND), C v.toDir) (x : EuclidGeom.Dir) :
                              C x
                              @[simp]
                              theorem EuclidGeom.Dir.map_apply (f : EuclidGeom.Vec ≃ₗ[] EuclidGeom.Vec) (v : EuclidGeom.VecND) :
                              (EuclidGeom.Dir.map f) v.toDir = { val := f v, property := (_ : f v 0) }.toDir
                              class EuclidGeom.Dir.NegCommute {α : Type u_1} [Neg α] (f : EuclidGeom.Dirα) :
                              Instances
                                theorem EuclidGeom.Dir.map_neg {α : Type u_1} [Neg α] (f : EuclidGeom.Dirα) [EuclidGeom.Dir.NegCommute f] (d : EuclidGeom.Dir) :
                                f (-d) = -f d
                                @[simp]
                                theorem EuclidGeom.Dir.vsub_toDir (v₁ : EuclidGeom.VecND) (v₂ : EuclidGeom.VecND) :
                                v₂.toDir -ᵥ v₁.toDir = EuclidGeom.VecND.angle v₁ v₂
                                @[simp]
                                theorem EuclidGeom.Dir.neg_vsub_left (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                -d₁ -ᵥ d₂ = d₁ -ᵥ d₂ + ∠[Real.pi]
                                @[simp]
                                theorem EuclidGeom.Dir.neg_vsub_right (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                d₁ -ᵥ -d₂ = d₁ -ᵥ d₂ + ∠[Real.pi]
                                theorem EuclidGeom.Dir.eq_neg_of_vsub_eq_pi (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                d₁ = -d₂ d₁ -ᵥ d₂ = ∠[Real.pi]
                                @[inline, reducible]
                                Equations
                                Instances For
                                  Equations
                                  Instances For
                                    @[inline, reducible]
                                    Equations
                                    • d.unitVec = d.unitVecND
                                    Instances For
                                      @[simp]
                                      theorem EuclidGeom.Dir.coe_unitVecND (d : EuclidGeom.Dir) :
                                      d.unitVecND = d.unitVec
                                      theorem EuclidGeom.VecND.toDir_unitVecND (v : EuclidGeom.VecND) :
                                      v.toDir.unitVecND = { val := v⁻¹ v, property := (_ : ¬v⁻¹ v = 0) }
                                      theorem EuclidGeom.VecND.inv_norm_smul (v : EuclidGeom.VecND) :
                                      v⁻¹ v = v.toDir.unitVecND
                                      @[simp]
                                      theorem EuclidGeom.Dir.neg_unitVecND (d : EuclidGeom.Dir) :
                                      (-d).unitVecND = -d.unitVecND
                                      @[simp]
                                      theorem EuclidGeom.Dir.neg_unitVec (d : EuclidGeom.Dir) :
                                      (-d).unitVec = -d.unitVec
                                      @[simp]
                                      @[simp]
                                      theorem EuclidGeom.Vec.norm_smul_toDir_unitVec {v : EuclidGeom.Vec} (hv : v 0) :
                                      v (EuclidGeom.VecND.mk v hv).toDir.unitVec = v
                                      @[simp]
                                      theorem EuclidGeom.Dir.unitVecND_toDir (d : EuclidGeom.Dir) :
                                      d.unitVecND.toDir = d
                                      @[simp]
                                      theorem EuclidGeom.Dir.btw_def₁ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      btw d₁ d₂ d₃ btw 0 (d₂ -ᵥ d₁) (d₃ -ᵥ d₁)
                                      theorem EuclidGeom.Dir.btw_def₂ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      btw d₁ d₂ d₃ btw (d₁ -ᵥ d₂) 0 (d₃ -ᵥ d₂)
                                      theorem EuclidGeom.Dir.btw_def₃ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      btw d₁ d₂ d₃ btw (d₁ -ᵥ d₃) (d₂ -ᵥ d₃) 0
                                      theorem EuclidGeom.Dir.btw_iff_btw_vsub {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} (d : EuclidGeom.Dir) :
                                      btw d₁ d₂ d₃ btw (d₁ -ᵥ d) (d₂ -ᵥ d) (d₃ -ᵥ d)
                                      theorem EuclidGeom.Dir.sbtw_def₁ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      sbtw d₁ d₂ d₃ sbtw 0 (d₂ -ᵥ d₁) (d₃ -ᵥ d₁)
                                      theorem EuclidGeom.Dir.sbtw_def₂ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      sbtw d₁ d₂ d₃ sbtw (d₁ -ᵥ d₂) 0 (d₃ -ᵥ d₂)
                                      theorem EuclidGeom.Dir.sbtw_def₃ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      sbtw d₁ d₂ d₃ sbtw (d₁ -ᵥ d₃) (d₂ -ᵥ d₃) 0
                                      theorem EuclidGeom.Dir.sbtw_iff_sbtw_vsub {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} (d : EuclidGeom.Dir) :
                                      sbtw d₁ d₂ d₃ sbtw (d₁ -ᵥ d) (d₂ -ᵥ d) (d₃ -ᵥ d)
                                      @[simp]
                                      theorem EuclidGeom.Dir.btw_neg {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      btw (-d₁) (-d₂) (-d₃) btw d₁ d₂ d₃
                                      @[simp]
                                      theorem EuclidGeom.Dir.sbtw_neg {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} {d₃ : EuclidGeom.Dir} :
                                      sbtw (-d₁) (-d₂) (-d₃) sbtw d₁ d₂ d₃
                                      @[simp]
                                      theorem EuclidGeom.Dir.angle_unitVecND (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                      EuclidGeom.VecND.angle d₁.unitVecND d₂.unitVecND = d₂ -ᵥ d₁
                                      @[simp]
                                      theorem EuclidGeom.Dir.inner_unitVec (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                      inner d₁.unitVec d₂.unitVec = EuclidGeom.AngValue.cos (d₂ -ᵥ d₁)
                                      @[simp]
                                      theorem EuclidGeom.Dir.det_unitVec (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                      (EuclidGeom.Vec.det d₁.unitVec) d₂.unitVec = EuclidGeom.AngValue.sin (d₂ -ᵥ d₁)
                                      theorem EuclidGeom.Dir.complex_inner_unitVec (d₁ : EuclidGeom.Dir) (d₂ : EuclidGeom.Dir) :
                                      inner d₁.unitVec d₂.unitVec = (EuclidGeom.AngValue.expMapCircle (d₂ -ᵥ d₁))
                                      @[inline, reducible]
                                      Equations
                                      • v.toProj = v.toDir.toProj
                                      Instances For
                                        @[simp]
                                        theorem EuclidGeom.Dir.unitVecND_toProj (d : EuclidGeom.Dir) :
                                        d.unitVecND.toProj = d.toProj
                                        theorem EuclidGeom.VecND.toProj_eq_toProj_iff₀ {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} :
                                        v₁.toProj = v₂.toProj ∃ (a : ˣ), v₁ = a v₂
                                        theorem EuclidGeom.VecND.toProj_eq_toProj_iff {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} :
                                        v₁.toProj = v₂.toProj ∃ (a : ), v₁ = a v₂
                                        theorem EuclidGeom.VecND.toProj_eq_toProj_iff' {v₁ : EuclidGeom.VecND} {v₂ : EuclidGeom.VecND} :
                                        v₁.toProj = v₂.toProj ∃ (a : ˣ), v₁ = a v₂
                                        @[simp]
                                        theorem EuclidGeom.VecND.toDir_toProj (v : EuclidGeom.VecND) :
                                        v.toDir.toProj = v.toProj
                                        theorem EuclidGeom.Dir.toProj_eq_toProj_iff {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj = d₂.toProj d₁ = d₂ d₁ = -d₂
                                        theorem EuclidGeom.Dir.toProj_eq_of_eq {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} (h : d₁ = d₂) :
                                        d₁.toProj = d₂.toProj
                                        theorem EuclidGeom.Dir.toProj_eq_of_eq_neg {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} (h : d₁ = -d₂) :
                                        d₁.toProj = d₂.toProj
                                        theorem EuclidGeom.Dir.toProj_eq_toProj_iff_unitVec₀ {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj = d₂.toProj ∃ (a : ˣ), d₁.unitVec = a d₂.unitVec
                                        theorem EuclidGeom.Dir.toProj_eq_toProj_iff_unitVec {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj = d₂.toProj ∃ (a : ), d₁.unitVec = a d₂.unitVec
                                        theorem EuclidGeom.Dir.toProj_eq_toProj_iff_unitVecND {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj = d₂.toProj ∃ (a : ˣ), d₁.unitVecND = a d₂.unitVecND
                                        theorem EuclidGeom.Dir.toProj_eq_toProj_iff_vsub_not_isND {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj = d₂.toProj ¬(d₁ -ᵥ d₂).IsND
                                        theorem EuclidGeom.Dir.toProj_ne_toProj_iff_vsub_isND {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj d₂.toProj (d₁ -ᵥ d₂).IsND
                                        theorem EuclidGeom.Dir.toProj_ne_toProj_iff_neg_vsub_isND {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj d₂.toProj (d₂ -ᵥ d₁).IsND
                                        theorem EuclidGeom.Dir.toProj_eq_toProj_iff_neg_vsub_not_isND {d₁ : EuclidGeom.Dir} {d₂ : EuclidGeom.Dir} :
                                        d₁.toProj = d₂.toProj ¬(d₂ -ᵥ d₁).IsND
                                        @[simp]
                                        theorem EuclidGeom.VecND.neg_toProj (v : EuclidGeom.VecND) :
                                        (-v).toProj = v.toProj
                                        @[simp]
                                        theorem EuclidGeom.Dir.toProj_neg (d : EuclidGeom.Dir) :
                                        (-d).toProj = d.toProj
                                        theorem EuclidGeom.Proj.ind {C : EuclidGeom.ProjProp} (h : ∀ (d : EuclidGeom.Dir), C d.toProj) (x : EuclidGeom.Proj) :
                                        C x
                                        @[inline, reducible]
                                        abbrev EuclidGeom.Proj.lift {α : Sort u_1} (f : EuclidGeom.Dirα) (hf : ∀ (d : EuclidGeom.Dir), f (-d) = f d) :
                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem EuclidGeom.Proj.lift_dir_toProj {α : Sort u_1} (f : EuclidGeom.Dirα) (hf : ∀ (d : EuclidGeom.Dir), f (-d) = f d) (d : EuclidGeom.Dir) :
                                          EuclidGeom.Proj.lift f hf d.toProj = f d
                                          @[simp]
                                          theorem EuclidGeom.Proj.lift_vecND_toProj {α : Sort u_1} (f : EuclidGeom.Dirα) (hf : ∀ (d : EuclidGeom.Dir), f (-d) = f d) (v : EuclidGeom.VecND) :
                                          EuclidGeom.Proj.lift f hf v.toProj = f v.toDir
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            @[simp]
                                            theorem EuclidGeom.Proj.vadd_coe (θ : EuclidGeom.AngValue) (d : EuclidGeom.Dir) :
                                            θ +ᵥ d.toProj = (θ +ᵥ d).toProj
                                            Equations
                                            Instances For
                                              @[simp]
                                              theorem EuclidGeom.Proj.perp_perp (p : EuclidGeom.Proj) :
                                              p.perp.perp = p