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 #
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)
:
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)
:
Projectivization K V ≃ Projectivization L 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_refl
{K : Type u_1}
{V : Type u_2}
[DivisionRing K]
[AddCommGroup V]
[Module K V]
:
@[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₃)
:
Projectivization.mapEquiv (LinearEquiv.trans e₁₂ e₂₃) = (Projectivization.mapEquiv e₁₂).trans (Projectivization.mapEquiv e₂₃)
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)
:
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)
:
theorem
inner_self_eq_norm_mul_norm'
{𝕜 : Type u_1}
{E : Type u_2}
[IsROrC 𝕜]
[NormedAddCommGroup E]
[InnerProductSpace 𝕜 E]
(x : E)
:
theorem
inner_self_eq_norm_sq'
{𝕜 : Type u_1}
{E : Type u_2}
[IsROrC 𝕜]
[NormedAddCommGroup E]
[InnerProductSpace 𝕜 E]
(x : E)
:
@[simp]
theorem
IsROrC.normSq_toComplex
{𝕜 : Type u_1}
[IsROrC 𝕜]
(z : 𝕜)
:
Complex.normSq ↑z = IsROrC.normSq z
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- EuclidGeom.Vec.normedAddCommGroup = NormedAddCommGroup.mk
theorem
EuclidGeom.Vec.ext
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
(h₁ : v₁.fst = v₂.fst)
(h₂ : v₁.snd = v₂.snd)
:
v₁ = v₂
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
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
theorem
EuclidGeom.Vec.det_skew
(v₁ : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
:
-(EuclidGeom.Vec.det v₁) v₂ = (EuclidGeom.Vec.det v₂) v₁
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]
@[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₂ }
Instances For
@[simp]
theorem
EuclidGeom.Vec.scaleRotate_apply
(z : ℂ)
(v : EuclidGeom.Vec)
:
(EuclidGeom.Vec.scaleRotate z) v = z • v
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
EuclidGeom.Vec.scaleRotateEquiv_mk0
(z : ℂ)
(hz : z ≠ 0)
:
⇑(EuclidGeom.Vec.scaleRotateEquiv (Units.mk0 z hz)) = ⇑(EuclidGeom.Vec.scaleRotate z)
theorem
EuclidGeom.Vec.smul_bijective
{z : ℂ}
(hz : z ≠ 0)
:
Function.Bijective fun (x : EuclidGeom.Vec) => z • x
Equations
Instances For
@[simp]
theorem
EuclidGeom.Vec.rotate_mk
(θ : EuclidGeom.AngValue)
(x : ℝ)
(y : ℝ)
:
(EuclidGeom.Vec.rotate θ) { fst := x, snd := y } = { fst := EuclidGeom.AngValue.cos θ * x - EuclidGeom.AngValue.sin θ * y,
snd := EuclidGeom.AngValue.cos θ * y + EuclidGeom.AngValue.sin θ * x }
@[simp]
theorem
EuclidGeom.Vec.rotate_fst
(θ : EuclidGeom.AngValue)
(v : EuclidGeom.Vec)
:
((EuclidGeom.Vec.rotate θ) v).fst = EuclidGeom.AngValue.cos θ * v.fst - EuclidGeom.AngValue.sin θ * v.snd
@[simp]
theorem
EuclidGeom.Vec.rotate_snd
(θ : EuclidGeom.AngValue)
(v : EuclidGeom.Vec)
:
((EuclidGeom.Vec.rotate θ) v).snd = EuclidGeom.AngValue.cos θ * v.snd + EuclidGeom.AngValue.sin θ * v.fst
theorem
EuclidGeom.Vec.smul_eq_rotate
(z : ℂ)
(v : EuclidGeom.Vec)
:
z • v = ‖z‖ • (EuclidGeom.Vec.rotate ∠[Complex.arg z]) v
@[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
EuclidGeom.Vec.rotate_pi_apply
(v : EuclidGeom.Vec)
:
(EuclidGeom.Vec.rotate ∠[Real.pi]) v = -v
@[simp]
theorem
EuclidGeom.Vec.rotate_add_apply
(θ : EuclidGeom.AngValue)
(ψ : EuclidGeom.AngValue)
(v : EuclidGeom.Vec)
:
(EuclidGeom.Vec.rotate (θ + ψ)) v = (EuclidGeom.Vec.rotate θ) ((EuclidGeom.Vec.rotate ψ) v)
@[simp]
theorem
EuclidGeom.Vec.rotate_eq_zero
{θ : EuclidGeom.AngValue}
{v : EuclidGeom.Vec}
:
(EuclidGeom.Vec.rotate θ) v = 0 ↔ v = 0
theorem
EuclidGeom.Vec.rotate_ne_zero
{θ : EuclidGeom.AngValue}
{v : EuclidGeom.Vec}
:
(EuclidGeom.Vec.rotate θ) v ≠ 0 ↔ v ≠ 0
Equations
- EuclidGeom.Vec.instHDivVecComplex = { hDiv := fun (v₁ v₂ : EuclidGeom.Vec) => inner v₂ v₁ / ↑‖v₂‖ ^ 2 }
theorem
EuclidGeom.Vec.add_cdiv
(v₁ : EuclidGeom.Vec)
(v₁' : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
:
theorem
EuclidGeom.Vec.sub_cdiv
(v₁ : EuclidGeom.Vec)
(v₁' : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
:
theorem
EuclidGeom.Vec.smul_cdiv
{𝕜 : Type u_1}
[IsROrC 𝕜]
(z : 𝕜)
(v₁ : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
:
@[simp]
theorem
EuclidGeom.Vec.cdiv_smul_cancel
(v₁ : EuclidGeom.Vec)
{v₂ : EuclidGeom.Vec}
(hv₂ : v₂ ≠ 0)
:
@[simp]
theorem
EuclidGeom.Vec.inner_left_bijective
{v : EuclidGeom.Vec}
(h : v ≠ 0)
:
Function.Bijective fun (x : EuclidGeom.Vec) => inner v x
theorem
EuclidGeom.Vec.inner_right_bijective
{v : EuclidGeom.Vec}
(h : v ≠ 0)
:
Function.Bijective fun (x : EuclidGeom.Vec) => inner x v
@[simp]
@[simp]
theorem
EuclidGeom.Vec.cdiv_left_inj
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
{v₃ : EuclidGeom.Vec}
(hv₃ : v₃ ≠ 0)
:
theorem
EuclidGeom.Vec.cdiv_eq_iff
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
{z : ℂ}
(hv₂ : v₂ ≠ 0)
:
theorem
EuclidGeom.Vec.eq_cdiv_iff
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
{z : ℂ}
(hv₂ : v₂ ≠ 0)
:
theorem
EuclidGeom.Vec.cdiv_eq_one_iff_eq
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
(hv₂ : v₂ ≠ 0)
:
@[simp]
theorem
EuclidGeom.Vec.smul_cdiv_cancel
{𝕜 : Type u_1}
[IsROrC 𝕜]
(z : 𝕜)
{v : EuclidGeom.Vec}
(hv : v ≠ 0)
:
@[simp]
@[simp]
theorem
EuclidGeom.Vec.cdiv_smul
{𝕜 : Type u_1}
[IsROrC 𝕜]
(z : 𝕜)
(v₁ : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
:
theorem
EuclidGeom.Vec.inner_smul_comm_right
(v₁ : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
(v₃ : EuclidGeom.Vec)
:
theorem
EuclidGeom.Vec.cdiv_smul_comm
(v₁ : EuclidGeom.Vec)
(v₂ : EuclidGeom.Vec)
(v₃ : EuclidGeom.Vec)
:
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)
:
@[simp]
@[simp]
theorem
EuclidGeom.Vec.real_inner_of_sameRay
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
(h : SameRay ℝ 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₂)
:
theorem
EuclidGeom.Vec.cdiv_of_sameRay
{v₁ : EuclidGeom.Vec}
{v₂ : EuclidGeom.Vec}
(h : SameRay ℝ v₁ v₂)
:
@[simp]
theorem
EuclidGeom.Vec.arg_cdiv
(θ : EuclidGeom.AngValue)
{v : EuclidGeom.Vec}
(hv : v ≠ 0)
:
∠[Complex.arg ((EuclidGeom.Vec.rotate θ) v / v)] = θ
@[inline, reducible]
the class of non-degenerate vectors
Equations
Instances For
Equations
- EuclidGeom.VecND.instCoeOutVecNDVec = subtypeCoe
Equations
- EuclidGeom.VecND.instNegVecND = { neg := fun (v : EuclidGeom.VecND) => { val := -↑v, property := (_ : -↑v ≠ 0) } }
Equations
- EuclidGeom.VecND.instNormVecND = { norm := fun (v : EuclidGeom.VecND) => ‖↑v‖ }
Extension for the positivity
tactic.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
EuclidGeom.VecND.coe_smul
{G : Type u_1}
[Group G]
[DistribMulAction G EuclidGeom.Vec]
(g : G)
(v : EuclidGeom.VecND)
:
@[simp]
theorem
EuclidGeom.VecND.coe_vadd
{G : Type u_1}
[Group G]
[DistribMulAction G EuclidGeom.Vec]
(g : Additive G)
(v : EuclidGeom.VecND)
:
theorem
EuclidGeom.VecND.smul_def
{G : Type u_1}
[Group G]
[DistribMulAction G EuclidGeom.Vec]
(g : G)
(v : EuclidGeom.VecND)
:
theorem
EuclidGeom.VecND.vadd_def
{G : Type u_1}
[Group G]
[DistribMulAction G EuclidGeom.Vec]
(g : Additive G)
(v : EuclidGeom.VecND)
:
@[simp]
theorem
EuclidGeom.VecND.mk_smul
{G : Type u_1}
[Group G]
[DistribMulAction G EuclidGeom.Vec]
(g : G)
(v : EuclidGeom.Vec)
(hv : v ≠ 0)
:
@[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)
:
theorem
EuclidGeom.VecND.mk_vadd
{G : Type u_1}
[Group G]
[DistribMulAction G EuclidGeom.Vec]
(g : Additive G)
(v : EuclidGeom.Vec)
(hv : v ≠ 0)
:
@[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)
:
@[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)
:
@[simp]
theorem
EuclidGeom.VecND.neg_smul
{R : Type u_1}
[Ring R]
[Module R EuclidGeom.Vec]
(g : Rˣ)
(v : EuclidGeom.VecND)
:
@[simp]
theorem
EuclidGeom.VecND.smul_neg
{R : Type u_1}
[Ring R]
[Module R EuclidGeom.Vec]
(g : Rˣ)
(v : EuclidGeom.VecND)
:
Equations
- EuclidGeom.VecND.instHDivVecNDUnitsComplexToMonoidToMonoidWithZeroInstSemiringComplex = { hDiv := fun (v₁ v₂ : EuclidGeom.VecND) => Units.mk0 (↑v₁ / ↑v₂) (_ : ↑v₁ / ↑v₂ ≠ 0) }
@[simp]
@[simp]
@[simp]
Equations
- One or more equations did not get rendered due to their size.
theorem
EuclidGeom.VecND.rotate_ne_zero
(θ : EuclidGeom.AngValue)
(v : EuclidGeom.VecND)
:
(EuclidGeom.Vec.rotate θ) ↑v ≠ 0
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Equations
- EuclidGeom.VecND.angle v₁ v₂ = ∠[Complex.arg ↑(Additive.toMul (v₂ -ᵥ v₁))]
Instances For
Instances For
@[simp]
theorem
EuclidGeom.VecND.sameRay_iff_sameDir
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
SameRay ℝ ↑v₁ ↑v₂ ↔ EuclidGeom.VecND.SameDir v₁ v₂
theorem
EuclidGeom.VecND.SameDir.ofSameRay
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
SameRay ℝ ↑v₁ ↑v₂ → EuclidGeom.VecND.SameDir v₁ v₂
Alias of the forward direction of EuclidGeom.VecND.sameRay_iff_sameDir
.
theorem
EuclidGeom.VecND.SameDir.toSameRay
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
EuclidGeom.VecND.SameDir v₁ v₂ → SameRay ℝ ↑v₁ ↑v₂
Alias of the reverse direction of EuclidGeom.VecND.sameRay_iff_sameDir
.
@[simp]
theorem
EuclidGeom.VecND.SameDir.symm
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(h : EuclidGeom.VecND.SameDir v₁ v₂)
:
EuclidGeom.VecND.SameDir v₂ v₁
theorem
EuclidGeom.VecND.SameDir.trans
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
{v₃ : EuclidGeom.VecND}
(h₁ : EuclidGeom.VecND.SameDir v₁ v₂)
(h₂ : EuclidGeom.VecND.SameDir v₂ v₃)
:
EuclidGeom.VecND.SameDir v₁ v₃
@[simp]
theorem
EuclidGeom.VecND.sameDir_neg_iff
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
EuclidGeom.VecND.SameDir (-v₁) (-v₂) ↔ EuclidGeom.VecND.SameDir v₁ v₂
theorem
EuclidGeom.VecND.SameDir.neg
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
EuclidGeom.VecND.SameDir v₁ v₂ → EuclidGeom.VecND.SameDir (-v₁) (-v₂)
Alias of the reverse direction of EuclidGeom.VecND.sameDir_neg_iff
.
theorem
EuclidGeom.VecND.SameDir.of_neg
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
EuclidGeom.VecND.SameDir (-v₁) (-v₂) → EuclidGeom.VecND.SameDir v₁ v₂
Alias of the forward direction of EuclidGeom.VecND.sameDir_neg_iff
.
theorem
EuclidGeom.VecND.sameDir_neg_swap
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
EuclidGeom.VecND.SameDir (-v₁) v₂ ↔ EuclidGeom.VecND.SameDir v₁ (-v₂)
@[simp]
theorem
EuclidGeom.VecND.sameDir_smul_left_iff
{v : EuclidGeom.VecND}
{r : ℝˣ}
:
EuclidGeom.VecND.SameDir (r • v) v ↔ 0 < ↑r
@[simp]
theorem
EuclidGeom.VecND.sameDir_smul_right_iff
{v : EuclidGeom.VecND}
{r : ℝˣ}
:
EuclidGeom.VecND.SameDir v (r • v) ↔ 0 < ↑r
@[simp]
theorem
EuclidGeom.VecND.sameRay_neg_smul_left_iff
{v : EuclidGeom.VecND}
{r : ℝˣ}
:
EuclidGeom.VecND.SameDir (r • v) (-v) ↔ ↑r < 0
@[simp]
theorem
EuclidGeom.VecND.sameRay_neg_smul_right_iff
{v : EuclidGeom.VecND}
{r : ℝˣ}
:
EuclidGeom.VecND.SameDir (-v) (r • v) ↔ ↑r < 0
theorem
EuclidGeom.VecND.SameDir.mk0_pos_smul_left
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(h : EuclidGeom.VecND.SameDir v₁ v₂)
{x : ℝ}
(hx : 0 < x)
:
EuclidGeom.VecND.SameDir (Units.mk0 x (_ : x ≠ 0) • v₁) v₂
theorem
EuclidGeom.VecND.SameDir.mk0_pos_smul_right
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(h : EuclidGeom.VecND.SameDir v₁ v₂)
{x : ℝ}
(hx : 0 < x)
:
EuclidGeom.VecND.SameDir v₁ (Units.mk0 x (_ : x ≠ 0) • v₂)
theorem
EuclidGeom.VecND.SameDir.mk0_neg_smul_left
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(h : EuclidGeom.VecND.SameDir v₁ v₂)
{x : ℝ}
(hx : x < 0)
:
EuclidGeom.VecND.SameDir (Units.mk0 x (_ : x ≠ 0) • v₁) (-v₂)
theorem
EuclidGeom.VecND.SameDir.mk0_neg_smul_right
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(h : EuclidGeom.VecND.SameDir v₁ v₂)
{x : ℝ}
(hx : x < 0)
:
EuclidGeom.VecND.SameDir (-v₁) (Units.mk0 x (_ : x ≠ 0) • v₂)
theorem
EuclidGeom.VecND.sameDir_comm
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
:
EuclidGeom.VecND.SameDir v₁ v₂ ↔ EuclidGeom.VecND.SameDir v₂ v₁
@[simp]
theorem
EuclidGeom.VecND.sameDir_map_iff
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(e : EuclidGeom.Vec ≃ₗ[ℝ] EuclidGeom.Vec)
:
EuclidGeom.VecND.SameDir ((EuclidGeom.VecND.map e) v₁) ((EuclidGeom.VecND.map e) v₂) ↔ SameRay ℝ ↑v₁ ↑v₂
theorem
EuclidGeom.VecND.cdiv_of_sameDir
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
(h : EuclidGeom.VecND.SameDir v₁ v₂)
:
theorem
EuclidGeom.VecND.angle_of_sameDir
{v₁ : EuclidGeom.VecND}
{v₂ : EuclidGeom.VecND}
{v₃ : EuclidGeom.VecND}
{v₄ : EuclidGeom.VecND}
(h₁ : EuclidGeom.VecND.SameDir v₁ v₃)
(h₂ : EuclidGeom.VecND.SameDir v₂ v₄)
:
EuclidGeom.VecND.angle v₁ v₂ = EuclidGeom.VecND.angle v₃ v₄
@[simp]
theorem
EuclidGeom.VecND.angle_rotate_right
(θ : EuclidGeom.AngValue)
(v : EuclidGeom.VecND)
:
EuclidGeom.VecND.angle v ((EuclidGeom.VecND.rotate θ) v) = θ
@[simp]
theorem
EuclidGeom.VecND.sameDir_rotate
(θ : EuclidGeom.AngValue)
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
EuclidGeom.VecND.SameDir ((EuclidGeom.VecND.rotate θ) v₁) ((EuclidGeom.VecND.rotate θ) v₂) ↔ EuclidGeom.VecND.SameDir v₁ v₂
@[simp]
theorem
EuclidGeom.VecND.rotate_angle_eq_div_norm_smul
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
(EuclidGeom.Vec.rotate (EuclidGeom.VecND.angle v₁ v₂)) ↑v₁ = (‖v₁‖ / ‖v₂‖) • ↑v₂
theorem
EuclidGeom.VecND.sameDir_rotate_angle_left
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
EuclidGeom.VecND.SameDir ((EuclidGeom.VecND.rotate (EuclidGeom.VecND.angle v₁ v₂)) v₁) v₂
theorem
EuclidGeom.VecND.sameDir_rotate_angle_right
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
EuclidGeom.VecND.SameDir v₁ ((EuclidGeom.VecND.rotate (EuclidGeom.VecND.angle v₂ v₁)) v₂)
theorem
EuclidGeom.VecND.norm_mul_cos
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
‖v₁‖ * ‖v₂‖ * EuclidGeom.AngValue.cos (EuclidGeom.VecND.angle v₁ v₂) = inner ↑v₁ ↑v₂
theorem
EuclidGeom.VecND.norm_mul_sin
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
‖v₁‖ * ‖v₂‖ * EuclidGeom.AngValue.sin (EuclidGeom.VecND.angle v₁ v₂) = (EuclidGeom.Vec.det ↑v₁) ↑v₂
theorem
EuclidGeom.VecND.norm_smul_expMapCircle
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
(‖v₁‖ * ‖v₂‖) • ↑(EuclidGeom.AngValue.expMapCircle (EuclidGeom.VecND.angle v₁ v₂)) = inner ↑v₁ ↑v₂
@[inline, reducible]
Equations
Instances For
Equations
- EuclidGeom.instCoeVecNDDir = { coe := EuclidGeom.VecND.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]
@[simp]
theorem
EuclidGeom.Dir.ind
{C : EuclidGeom.Dir → Prop}
(h : ∀ (v : EuclidGeom.VecND), C v.toDir)
(x : EuclidGeom.Dir)
:
C x
Equations
Instances For
@[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
@[simp]
@[simp]
theorem
EuclidGeom.Dir.map_symm
(f : EuclidGeom.Vec ≃ₗ[ℝ] EuclidGeom.Vec)
:
(EuclidGeom.Dir.map f).symm = EuclidGeom.Dir.map (LinearEquiv.symm f)
@[simp]
theorem
EuclidGeom.Dir.map_trans
(f₁ : EuclidGeom.Vec ≃ₗ[ℝ] EuclidGeom.Vec)
(f₂ : EuclidGeom.Vec ≃ₗ[ℝ] EuclidGeom.Vec)
:
EuclidGeom.Dir.map (f₁ ≪≫ₗ f₂) = (EuclidGeom.Dir.map f₁).trans (EuclidGeom.Dir.map f₂)
- map_neg' : ∀ (d : EuclidGeom.Dir), f (-d) = -f d
Instances
theorem
EuclidGeom.Dir.map_neg
{α : Type u_1}
[Neg α]
(f : EuclidGeom.Dir → α)
[EuclidGeom.Dir.NegCommute f]
(d : EuclidGeom.Dir)
:
@[simp]
theorem
EuclidGeom.Dir.map_neg'
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
[EuclidGeom.Dir.NegCommute ⇑f]
(d : EuclidGeom.Dir)
:
instance
EuclidGeom.Dir.negCommute_symm
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
[EuclidGeom.Dir.NegCommute ⇑f]
:
EuclidGeom.Dir.NegCommute ⇑f.symm
Equations
- (_ : EuclidGeom.Dir.NegCommute ⇑f.symm) = (_ : EuclidGeom.Dir.NegCommute ⇑f.symm)
instance
EuclidGeom.Dir.negCommute_comp
{α : Type u_1}
[Neg α]
(f : EuclidGeom.Dir → EuclidGeom.Dir)
(g : EuclidGeom.Dir → α)
[EuclidGeom.Dir.NegCommute f]
[EuclidGeom.Dir.NegCommute g]
:
EuclidGeom.Dir.NegCommute (g ∘ f)
Equations
- (_ : EuclidGeom.Dir.NegCommute (g ∘ f)) = (_ : EuclidGeom.Dir.NegCommute (g ∘ f))
instance
EuclidGeom.Dir.negCommute_trans
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
(g : EuclidGeom.Dir ≃ EuclidGeom.Dir)
[EuclidGeom.Dir.NegCommute ⇑f]
[EuclidGeom.Dir.NegCommute ⇑g]
:
EuclidGeom.Dir.NegCommute ⇑(f.trans g)
Equations
- (_ : EuclidGeom.Dir.NegCommute ⇑(f.trans g)) = (_ : EuclidGeom.Dir.NegCommute (⇑g ∘ ⇑f))
Equations
- (_ : EuclidGeom.Dir.NegCommute ⇑(EuclidGeom.Dir.map f)) = (_ : EuclidGeom.Dir.NegCommute ⇑(EuclidGeom.Dir.map f))
@[inline, reducible]
Equations
Instances For
Equations
@[simp]
theorem
EuclidGeom.Dir.rotate_pi_apply
(d : EuclidGeom.Dir)
:
(EuclidGeom.Dir.rotate ∠[Real.pi]) d = -d
theorem
EuclidGeom.Dir.rotate_add_apply
(θ : EuclidGeom.AngValue)
(ψ : EuclidGeom.AngValue)
(d : EuclidGeom.Dir)
:
(EuclidGeom.Dir.rotate (θ + ψ)) d = (EuclidGeom.Dir.rotate θ) ((EuclidGeom.Dir.rotate ψ) d)
Equations
- EuclidGeom.Dir.instVAddAngValueDir = { vadd := fun (θ : EuclidGeom.AngValue) => ⇑(EuclidGeom.Dir.rotate θ) }
theorem
EuclidGeom.Dir.vadd_def
(θ : EuclidGeom.AngValue)
(p : EuclidGeom.Dir)
:
θ +ᵥ p = (EuclidGeom.Dir.map (LinearEquiv.restrictScalars ℝ (EuclidGeom.Vec.rotate θ))) p
Equations
instance
EuclidGeom.Dir.instAddTorsorAngValueDirToAddGroupToNormedAddGroupInstNormedAddCommGroupAngValue :
Equations
- One or more equations did not get rendered due to their size.
@[simp]
theorem
EuclidGeom.Dir.rotate_eq_vadd
(θ : EuclidGeom.AngValue)
(d : EuclidGeom.Dir)
:
(EuclidGeom.Dir.rotate θ) d = θ +ᵥ d
@[simp]
theorem
EuclidGeom.Dir.vsub_toDir
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
v₂.toDir -ᵥ v₁.toDir = EuclidGeom.VecND.angle v₁ v₂
@[simp]
@[simp]
@[simp]
@[inline, reducible]
abbrev
EuclidGeom.Dir.normalize
{M : Type u_1}
[AddCommGroup M]
[Module ℝ M]
{F : Type u_2}
[LinearMapClass F ℝ EuclidGeom.Vec M]
(f : F)
:
EuclidGeom.Dir → M
Equations
Instances For
@[simp]
theorem
EuclidGeom.Dir.normalize_apply
{M : Type u_1}
[AddCommGroup M]
[Module ℝ M]
{F : Type u_2}
[LinearMapClass F ℝ EuclidGeom.Vec M]
(f : F)
(v : EuclidGeom.VecND)
:
theorem
EuclidGeom.Dir.normalize_apply_ne_zero
{M : Type u_1}
[AddCommGroup M]
[Module ℝ M]
{F : Type u_2}
[LinearMapClass F ℝ EuclidGeom.Vec M]
(f : F)
(hf : Function.Injective ⇑f)
(d : EuclidGeom.Dir)
:
EuclidGeom.Dir.normalize f d ≠ 0
Equations
- d.unitVecND = { val := EuclidGeom.Dir.normalize LinearMap.id d, property := (_ : EuclidGeom.Dir.normalize LinearMap.id d ≠ 0) }
Instances For
@[simp]
@[simp]
@[simp]
theorem
EuclidGeom.Vec.norm_smul_toDir_unitVec
{v : EuclidGeom.Vec}
(hv : v ≠ 0)
:
‖v‖ • (EuclidGeom.VecND.mk v hv).toDir.unitVec = v
theorem
EuclidGeom.Dir.btw_iff_btw_vsub
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
{d₃ : EuclidGeom.Dir}
(d : EuclidGeom.Dir)
:
theorem
EuclidGeom.Dir.sbtw_def₁
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
{d₃ : EuclidGeom.Dir}
:
theorem
EuclidGeom.Dir.sbtw_def₂
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
{d₃ : EuclidGeom.Dir}
:
theorem
EuclidGeom.Dir.sbtw_def₃
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
{d₃ : EuclidGeom.Dir}
:
theorem
EuclidGeom.Dir.sbtw_iff_sbtw_vsub
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
{d₃ : EuclidGeom.Dir}
(d : EuclidGeom.Dir)
:
@[simp]
@[simp]
@[simp]
theorem
EuclidGeom.angle_toDir_unitVecND_left
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
EuclidGeom.VecND.angle v₁.toDir.unitVecND v₂ = EuclidGeom.VecND.angle v₁ v₂
@[simp]
theorem
EuclidGeom.angle_toDir_unitVecND_right
(v₁ : EuclidGeom.VecND)
(v₂ : EuclidGeom.VecND)
:
EuclidGeom.VecND.angle v₁ v₂.toDir.unitVecND = EuclidGeom.VecND.angle v₁ v₂
@[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₁))
Equations
- EuclidGeom.Proj = Quotient ((Setoid.correspondence (RayVector.Setoid ℝ EuclidGeom.Vec)) { val := projectivizationSetoid ℝ EuclidGeom.Vec, property := EuclidGeom.Proj.proof_1 })
Instances For
Equations
- EuclidGeom.Dir.toProj = Quotient.mk ((Setoid.correspondence (RayVector.Setoid ℝ EuclidGeom.Vec)) { val := projectivizationSetoid ℝ EuclidGeom.Vec, property := EuclidGeom.Proj.proof_1 })
Instances For
@[simp]
Equations
- EuclidGeom.instCoeDirProj = { coe := fun (v : EuclidGeom.Dir) => v.toProj }
@[simp]
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_vsub_not_isND
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
:
theorem
EuclidGeom.Dir.toProj_ne_toProj_iff_neg_vsub_isND
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
:
theorem
EuclidGeom.Dir.toProj_eq_toProj_iff_neg_vsub_not_isND
{d₁ : EuclidGeom.Dir}
{d₂ : EuclidGeom.Dir}
:
theorem
EuclidGeom.VecND.det_eq_zero_iff_toProj_eq_toProj
{u : EuclidGeom.VecND}
{v : EuclidGeom.VecND}
:
(EuclidGeom.Vec.det ↑u) ↑v = 0 ↔ u.toProj = v.toProj
theorem
EuclidGeom.Proj.ind
{C : EuclidGeom.Proj → Prop}
(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)
:
EuclidGeom.Proj → α
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
@[simp]
theorem
EuclidGeom.Proj.map_apply
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
:
∀ {x : EuclidGeom.Dir.NegCommute ⇑f} (d : EuclidGeom.Dir), (EuclidGeom.Proj.map f) d.toProj = (f d).toProj
@[simp]
theorem
EuclidGeom.Proj.map_vecND_toProj
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
:
∀ {x : EuclidGeom.Dir.NegCommute ⇑f} (v : EuclidGeom.VecND), (EuclidGeom.Proj.map f) v.toProj = (f v.toDir).toProj
@[simp]
@[simp]
theorem
EuclidGeom.Proj.map_symm
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
:
∀ {x : EuclidGeom.Dir.NegCommute ⇑f}, (EuclidGeom.Proj.map f).symm = EuclidGeom.Proj.map f.symm
@[simp]
theorem
EuclidGeom.Proj.map_trans
(f : EuclidGeom.Dir ≃ EuclidGeom.Dir)
(g : EuclidGeom.Dir ≃ EuclidGeom.Dir)
:
∀ {x : EuclidGeom.Dir.NegCommute ⇑f} {x_1 : EuclidGeom.Dir.NegCommute ⇑g},
EuclidGeom.Proj.map (f.trans g) = (EuclidGeom.Proj.map f).trans (EuclidGeom.Proj.map g)
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.
theorem
EuclidGeom.Proj.vadd_coe_left
(θ : EuclidGeom.AngValue)
(p : EuclidGeom.Proj)
:
↑θ +ᵥ p = (EuclidGeom.Proj.map (EuclidGeom.Dir.rotate θ)) p
@[simp]
instance
EuclidGeom.Proj.instAddTorsorAngDValueProjToAddGroupToNormedAddGroupInstNormedAddCommGroupAngDValue :
Equations
- One or more equations did not get rendered due to their size.