Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 2642c89

Browse files
committed
feat(analysis/inner_product_space/orientation): orientations of real inner product spaces (#11269)
Add definitions and lemmas relating to orientations of real inner product spaces, in particular constructing an orthonormal basis with a given orientation in finite positive dimension. This is in a new file since nothing else about inner product spaces needs to depend on orientations.
1 parent 4e7e5a6 commit 2642c89

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

Comments
 (0)