Documentation

Mathlib.Analysis.InnerProductSpace.Orientation

Orientations of real inner product spaces. #

This file provides definitions and proves lemmas about orientations of real inner product spaces.

Main definitions #

Main theorems #

theorem OrthonormalBasis.det_to_matrix_orthonormalBasis_of_same_orientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e f : OrthonormalBasis ฮน โ„ E) (h : e.toBasis.orientation = f.toBasis.orientation) :
e.toBasis.det โ‡‘f = 1

The change-of-basis matrix between two orthonormal bases with the same orientation has determinant 1.

theorem OrthonormalBasis.det_to_matrix_orthonormalBasis_of_opposite_orientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e f : OrthonormalBasis ฮน โ„ E) (h : e.toBasis.orientation โ‰  f.toBasis.orientation) :
e.toBasis.det โ‡‘f = -1

The change-of-basis matrix between two orthonormal bases with the opposite orientations has determinant -1.

theorem OrthonormalBasis.same_orientation_iff_det_eq_det {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] {e f : OrthonormalBasis ฮน โ„ E} :

Two orthonormal bases with the same orientation determine the same "determinant" top-dimensional form on E, and conversely.

theorem OrthonormalBasis.det_eq_neg_det_of_opposite_orientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e f : OrthonormalBasis ฮน โ„ E) (h : e.toBasis.orientation โ‰  f.toBasis.orientation) :

Two orthonormal bases with opposite orientations determine opposite "determinant" top-dimensional forms on E.

theorem OrthonormalBasis.orthonormal_adjustToOrientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] :

OrthonormalBasis.adjustToOrientation, applied to an orthonormal basis, preserves the property of orthonormality.

noncomputable def OrthonormalBasis.adjustToOrientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] :

Given an orthonormal basis and an orientation, return an orthonormal basis giving that orientation: either the original basis, or one constructed by negating a single (arbitrary) basis vector.

Instances For
    theorem OrthonormalBasis.toBasis_adjustToOrientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] :
    @[simp]
    theorem OrthonormalBasis.orientation_adjustToOrientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] :

    adjustToOrientation gives an orthonormal basis with the required orientation.

    theorem OrthonormalBasis.adjustToOrientation_apply_eq_or_eq_neg {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] (i : ฮน) :
    (e.adjustToOrientation x) i = e i โˆจ (e.adjustToOrientation x) i = -e i

    Every basis vector from adjustToOrientation is either that from the original basis or its negation.

    theorem OrthonormalBasis.det_adjustToOrientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] :
    theorem OrthonormalBasis.abs_det_adjustToOrientation {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {ฮน : Type u_2} [Fintype ฮน] [DecidableEq ฮน] (e : OrthonormalBasis ฮน โ„ E) (x : Orientation โ„ E ฮน) [Nonempty ฮน] (v : ฮน โ†’ E) :
    noncomputable def Orientation.finOrthonormalBasis {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} (hn : 0 < n) (h : Module.finrank โ„ E = n) (x : Orientation โ„ E (Fin n)) :

    An orthonormal basis, indexed by Fin n, with the given orientation.

    Instances For
      @[simp]

      Orientation.finOrthonormalBasis gives a basis with the required orientation.

      theorem Orientation.volumeForm_def {E : Type u_2} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) :
      o.volumeForm = Nat.casesAuxOn (motive := fun (a : โ„•) => n = a โ†’ E [โ‹€^Fin n]โ†’โ‚—[โ„] โ„) n (fun (h : n = 0) => Eq.ndrec (motive := fun {n : โ„•} => [_i : Fact (Module.finrank โ„ E = n)] โ†’ Orientation โ„ E (Fin n) โ†’ E [โ‹€^Fin n]โ†’โ‚—[โ„] โ„) (fun [Fact (Module.finrank โ„ E = 0)] (o : Orientation โ„ E (Fin 0)) => have opos := AlternatingMap.constOfIsEmpty โ„ E (Fin 0) 1; โ‹ฏ.by_cases (fun (x : o = positiveOrientation) => opos) fun (x : o = -positiveOrientation) => -opos) โ‹ฏ o) (fun (n_1 : โ„•) (h : n = n_1 + 1) => Eq.ndrec (motive := fun {n : โ„•} => [_i : Fact (Module.finrank โ„ E = n)] โ†’ Orientation โ„ E (Fin n) โ†’ E [โ‹€^Fin n]โ†’โ‚—[โ„] โ„) (fun [Fact (Module.finrank โ„ E = n_1 + 1)] (o : Orientation โ„ E (Fin (n_1 + 1))) => (Orientation.finOrthonormalBasis โ‹ฏ โ‹ฏ o).toBasis.det) โ‹ฏ o) โ‹ฏ
      @[irreducible]

      The volume form on an oriented real inner product space, a nonvanishing top-dimensional alternating form uniquely defined by compatibility with the orientation and inner product structure.

      Instances For
        theorem Orientation.volumeForm_robust {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (b : OrthonormalBasis (Fin n) โ„ E) (hb : b.toBasis.orientation = o) :

        The volume form on an oriented real inner product space can be evaluated as the determinant with respect to any orthonormal basis of the space compatible with the orientation.

        theorem Orientation.volumeForm_robust_neg {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (b : OrthonormalBasis (Fin n) โ„ E) (hb : b.toBasis.orientation โ‰  o) :

        The volume form on an oriented real inner product space can be evaluated as the determinant with respect to any orthonormal basis of the space compatible with the orientation.

        theorem Orientation.volumeForm_robust' {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (b : OrthonormalBasis (Fin n) โ„ E) (v : Fin n โ†’ E) :
        theorem Orientation.abs_volumeForm_apply_le {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (v : Fin n โ†’ E) :
        |o.volumeForm v| โ‰ค โˆ i : Fin n, โ€–v iโ€–

        Let v be an indexed family of n vectors in an oriented n-dimensional real inner product space E. The output of the volume form of E when evaluated on v is bounded in absolute value by the product of the norms of the vectors v i.

        theorem Orientation.volumeForm_apply_le {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (v : Fin n โ†’ E) :
        o.volumeForm v โ‰ค โˆ i : Fin n, โ€–v iโ€–
        theorem Orientation.abs_volumeForm_apply_of_pairwise_orthogonal {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) {v : Fin n โ†’ E} (hv : Pairwise fun (i j : Fin n) => inner โ„ (v i) (v j) = 0) :
        |o.volumeForm v| = โˆ i : Fin n, โ€–v iโ€–

        Let v be an indexed family of n orthogonal vectors in an oriented n-dimensional real inner product space E. The output of the volume form of E when evaluated on v is, up to sign, the product of the norms of the vectors v i.

        theorem Orientation.abs_volumeForm_apply_of_orthonormal {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (v : OrthonormalBasis (Fin n) โ„ E) :
        |o.volumeForm โ‡‘v| = 1

        The output of the volume form of an oriented real inner product space E when evaluated on an orthonormal basis is ยฑ1.

        theorem Orientation.volumeForm_map {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) {F : Type u_2} [NormedAddCommGroup F] [InnerProductSpace โ„ F] [Fact (Module.finrank โ„ F = n)] (ฯ† : E โ‰ƒโ‚—แตข[โ„] F) (x : Fin n โ†’ F) :
        ((map (Fin n) ฯ†.toLinearEquiv) o).volumeForm x = o.volumeForm (โ‡‘ฯ†.symm โˆ˜ x)
        theorem Orientation.volumeForm_comp_linearIsometryEquiv {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace โ„ E] {n : โ„•} [_i : Fact (Module.finrank โ„ E = n)] (o : Orientation โ„ E (Fin n)) (ฯ† : E โ‰ƒโ‚—แตข[โ„] E) (hฯ† : 0 < LinearMap.det โ†‘ฯ†.toLinearEquiv) (x : Fin n โ†’ E) :
        o.volumeForm (โ‡‘ฯ† โˆ˜ x) = o.volumeForm x

        The volume form is invariant under pullback by a positively-oriented isometric automorphism.