@@ -974,10 +974,14 @@ let ⟨u, hus, hu, hu_max⟩ := exists_subset_is_orthonormal_dense_span (orthono
974
974
⟨u, hu, hu_max⟩
975
975
variables {𝕜 E}
976
976
977
+ section finite_dimensional
978
+
979
+ variables [finite_dimensional 𝕜 E]
980
+
977
981
/-- An orthonormal set in a finite-dimensional `inner_product_space` is maximal, if and only if it
978
982
is a basis. -/
979
983
lemma maximal_orthonormal_iff_basis_of_finite_dimensional
980
- [finite_dimensional 𝕜 E] (hv : orthonormal 𝕜 (coe : v → E)) :
984
+ (hv : orthonormal 𝕜 (coe : v → E)) :
981
985
(∀ u ⊇ v, orthonormal 𝕜 (coe : u → E) → u = v) ↔ ∃ b : basis v 𝕜 E, ⇑b = coe :=
982
986
begin
983
987
rw maximal_orthonormal_iff_orthogonal_complement_eq_bot hv,
994
998
/-- In a finite-dimensional `inner_product_space`, any orthonormal subset can be extended to an
995
999
orthonormal basis. -/
996
1000
lemma exists_subset_is_orthonormal_basis
997
- [finite_dimensional 𝕜 E] (hv : orthonormal 𝕜 (coe : v → E)) :
1001
+ (hv : orthonormal 𝕜 (coe : v → E)) :
998
1002
∃ (u ⊇ v) (b : basis u 𝕜 E), orthonormal 𝕜 b ∧ ⇑b = coe :=
999
1003
begin
1000
1004
obtain ⟨u, hus, hu, hu_max⟩ := exists_maximal_orthonormal hv,
@@ -1005,39 +1009,89 @@ end
1005
1009
variables (𝕜 E)
1006
1010
1007
1011
/-- Index for an arbitrary orthonormal basis on a finite-dimensional `inner_product_space`. -/
1008
- def orthonormal_basis_index [finite_dimensional 𝕜 E] : set E :=
1012
+ def orthonormal_basis_index : set E :=
1009
1013
classical.some (exists_subset_is_orthonormal_basis (orthonormal_empty 𝕜 E))
1010
1014
1011
1015
/-- A finite-dimensional `inner_product_space` has an orthonormal basis. -/
1012
- def orthonormal_basis [finite_dimensional 𝕜 E] :
1016
+ def orthonormal_basis :
1013
1017
basis (orthonormal_basis_index 𝕜 E) 𝕜 E :=
1014
1018
(exists_subset_is_orthonormal_basis (orthonormal_empty 𝕜 E)).some_spec.some_spec.some
1015
1019
1016
- lemma orthonormal_basis_orthonormal [finite_dimensional 𝕜 E] :
1020
+ lemma orthonormal_basis_orthonormal :
1017
1021
orthonormal 𝕜 (orthonormal_basis 𝕜 E) :=
1018
1022
(exists_subset_is_orthonormal_basis (orthonormal_empty 𝕜 E)).some_spec.some_spec.some_spec.1
1019
1023
1020
- @[simp] lemma coe_orthonormal_basis [finite_dimensional 𝕜 E] :
1024
+ @[simp] lemma coe_orthonormal_basis :
1021
1025
⇑(orthonormal_basis 𝕜 E) = coe :=
1022
1026
(exists_subset_is_orthonormal_basis (orthonormal_empty 𝕜 E)).some_spec.some_spec.some_spec.2
1023
1027
1024
- instance [finite_dimensional 𝕜 E] : fintype (orthonormal_basis_index 𝕜 E) :=
1028
+ instance : fintype (orthonormal_basis_index 𝕜 E) :=
1025
1029
@is_noetherian.fintype_basis_index _ _ _ _ _ _ _
1026
1030
(is_noetherian.iff_fg.2 infer_instance) (orthonormal_basis 𝕜 E)
1027
1031
1028
1032
variables {𝕜 E}
1029
1033
1030
1034
/-- An `n`-dimensional `inner_product_space` has an orthonormal basis indexed by `fin n`. -/
1031
- def fin_orthonormal_basis [finite_dimensional 𝕜 E] {n : ℕ} (hn : finrank 𝕜 E = n) :
1035
+ def fin_orthonormal_basis {n : ℕ} (hn : finrank 𝕜 E = n) :
1032
1036
basis (fin n) 𝕜 E :=
1033
1037
have h : fintype.card (orthonormal_basis_index 𝕜 E) = n,
1034
1038
by rw [← finrank_eq_card_basis (orthonormal_basis 𝕜 E), hn],
1035
1039
(orthonormal_basis 𝕜 E).reindex (fintype.equiv_fin_of_card_eq h)
1036
1040
1037
- lemma fin_orthonormal_basis_orthonormal [finite_dimensional 𝕜 E] {n : ℕ} (hn : finrank 𝕜 E = n) :
1041
+ lemma fin_orthonormal_basis_orthonormal {n : ℕ} (hn : finrank 𝕜 E = n) :
1038
1042
orthonormal 𝕜 (fin_orthonormal_basis hn) :=
1039
1043
suffices orthonormal 𝕜 (orthonormal_basis _ _ ∘ equiv.symm _),
1040
1044
by { simp only [fin_orthonormal_basis, basis.coe_reindex], assumption }, -- why doesn't simpa work?
1041
1045
(orthonormal_basis_orthonormal 𝕜 E).comp _ (equiv.injective _)
1042
1046
1047
+ section subordinate_orthonormal_basis
1048
+ open direct_sum
1049
+ variables {n : ℕ} (hn : finrank 𝕜 E = n) {ι : Type *} [fintype ι] [decidable_eq ι]
1050
+ {V : ι → submodule 𝕜 E} (hV : submodule_is_internal V)
1051
+
1052
+ /-- Exhibit a bijection between `fin n` and the index set of a certain basis of an `n`-dimensional
1053
+ inner product space `E`. This should not be accessed directly, but only via the subsequent API. -/
1054
+ @[irreducible] def direct_sum.submodule_is_internal.sigma_orthonormal_basis_index_equiv :
1055
+ (Σ i, orthonormal_basis_index 𝕜 (V i)) ≃ fin n :=
1056
+ let b := hV.collected_basis (λ i, orthonormal_basis 𝕜 (V i)) in
1057
+ fintype.equiv_fin_of_card_eq $ (finite_dimensional.finrank_eq_card_basis b).symm.trans hn
1058
+
1059
+ /-- An `n`-dimensional `inner_product_space` equipped with a decomposition as an internal direct
1060
+ sum has an orthonormal basis indexed by `fin n` and subordinate to that direct sum. -/
1061
+ @[irreducible] def direct_sum.submodule_is_internal.subordinate_orthonormal_basis :
1062
+ basis (fin n) 𝕜 E :=
1063
+ (hV.collected_basis (λ i, orthonormal_basis 𝕜 (V i))).reindex
1064
+ (hV.sigma_orthonormal_basis_index_equiv hn)
1065
+
1066
+ /-- An `n`-dimensional `inner_product_space` equipped with a decomposition as an internal direct
1067
+ sum has an orthonormal basis indexed by `fin n` and subordinate to that direct sum. This function
1068
+ provides the mapping by which it is subordinate. -/
1069
+ def direct_sum.submodule_is_internal.subordinate_orthonormal_basis_index (a : fin n) : ι :=
1070
+ ((hV.sigma_orthonormal_basis_index_equiv hn).symm a).1
1071
+
1072
+ /-- The basis constructed in `orthogonal_family.subordinate_orthonormal_basis` is orthonormal. -/
1073
+ lemma direct_sum.submodule_is_internal.subordinate_orthonormal_basis_orthonormal
1074
+ (hV' : orthogonal_family 𝕜 V) :
1075
+ orthonormal 𝕜 (hV.subordinate_orthonormal_basis hn) :=
1076
+ begin
1077
+ simp only [direct_sum.submodule_is_internal.subordinate_orthonormal_basis, basis.coe_reindex],
1078
+ have : orthonormal 𝕜 (hV.collected_basis (λ i, orthonormal_basis 𝕜 (V i))) :=
1079
+ hV.collected_basis_orthonormal hV' (λ i, orthonormal_basis_orthonormal 𝕜 (V i)),
1080
+ exact this.comp _ (equiv.injective _),
1081
+ end
1082
+
1083
+ /-- The basis constructed in `orthogonal_family.subordinate_orthonormal_basis` is subordinate to
1084
+ the `orthogonal_family` in question. -/
1085
+ lemma direct_sum.submodule_is_internal.subordinate_orthonormal_basis_subordinate (a : fin n) :
1086
+ hV.subordinate_orthonormal_basis hn a ∈ V (hV.subordinate_orthonormal_basis_index hn a) :=
1087
+ by simpa only [direct_sum.submodule_is_internal.subordinate_orthonormal_basis, basis.coe_reindex]
1088
+ using hV.collected_basis_mem (λ i, orthonormal_basis 𝕜 (V i))
1089
+ ((hV.sigma_orthonormal_basis_index_equiv hn).symm a)
1090
+
1091
+ attribute [irreducible] direct_sum.submodule_is_internal.subordinate_orthonormal_basis_index
1092
+
1093
+ end subordinate_orthonormal_basis
1094
+
1095
+ end finite_dimensional
1096
+
1043
1097
end orthonormal_basis
0 commit comments