|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Joseph Myers. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Joseph Myers |
| 5 | +-/ |
| 6 | +import analysis.inner_product_space.projection |
| 7 | +import linear_algebra.orientation |
| 8 | + |
| 9 | +/-! |
| 10 | +# Orientations of real inner product spaces. |
| 11 | +
|
| 12 | +This file provides definitions and proves lemmas about orientations of real inner product spaces. |
| 13 | +
|
| 14 | +## Main definitions |
| 15 | +
|
| 16 | +* `orientation.fin_orthonormal_basis` is an orthonormal basis, indexed by `fin n`, with the given |
| 17 | +orientation. |
| 18 | +
|
| 19 | +-/ |
| 20 | + |
| 21 | +noncomputable theory |
| 22 | + |
| 23 | +variables {E : Type*} [inner_product_space ℝ E] |
| 24 | +variables {ι : Type*} [fintype ι] [decidable_eq ι] |
| 25 | + |
| 26 | +open finite_dimensional |
| 27 | + |
| 28 | +/-- `basis.adjust_to_orientation`, applied to an orthonormal basis, produces an orthonormal |
| 29 | +basis. -/ |
| 30 | +lemma orthonormal.orthonormal_adjust_to_orientation [nonempty ι] {e : basis ι ℝ E} |
| 31 | + (h : orthonormal ℝ e) (x : orientation ℝ E ι) : orthonormal ℝ (e.adjust_to_orientation x) := |
| 32 | +h.orthonormal_of_forall_eq_or_eq_neg (e.adjust_to_orientation_apply_eq_or_eq_neg x) |
| 33 | + |
| 34 | +/-- An orthonormal basis, indexed by `fin n`, with the given orientation. -/ |
| 35 | +protected def orientation.fin_orthonormal_basis {n : ℕ} (hn : 0 < n) (h : finrank ℝ E = n) |
| 36 | + (x : orientation ℝ E (fin n)) : basis (fin n) ℝ E := |
| 37 | +begin |
| 38 | + haveI := fin.pos_iff_nonempty.1 hn, |
| 39 | + haveI := finite_dimensional_of_finrank (h.symm ▸ hn : 0 < finrank ℝ E), |
| 40 | + exact (fin_orthonormal_basis h).adjust_to_orientation x |
| 41 | +end |
| 42 | + |
| 43 | +/-- `orientation.fin_orthonormal_basis` is orthonormal. -/ |
| 44 | +protected lemma orientation.fin_orthonormal_basis_orthonormal {n : ℕ} (hn : 0 < n) |
| 45 | + (h : finrank ℝ E = n) (x : orientation ℝ E (fin n)) : |
| 46 | + orthonormal ℝ (x.fin_orthonormal_basis hn h) := |
| 47 | +begin |
| 48 | + haveI := fin.pos_iff_nonempty.1 hn, |
| 49 | + haveI := finite_dimensional_of_finrank (h.symm ▸ hn : 0 < finrank ℝ E), |
| 50 | + exact (fin_orthonormal_basis_orthonormal h).orthonormal_adjust_to_orientation _ |
| 51 | +end |
| 52 | + |
| 53 | +/-- `orientation.fin_orthonormal_basis` gives a basis with the required orientation. -/ |
| 54 | +@[simp] lemma orientation.fin_orthonormal_basis_orientation {n : ℕ} (hn : 0 < n) |
| 55 | + (h : finrank ℝ E = n) (x : orientation ℝ E (fin n)) : |
| 56 | + (x.fin_orthonormal_basis hn h).orientation = x := |
| 57 | +begin |
| 58 | + haveI := fin.pos_iff_nonempty.1 hn, |
| 59 | + exact basis.orientation_adjust_to_orientation _ _ |
| 60 | +end |
0 commit comments