@@ -10,19 +10,14 @@ import tactic.noncomm_ring
10
10
/-!
11
11
# M-structure
12
12
13
- A continuous projection `P` on a normed space `X` is said to be an L-projection if, for all `x` in
14
- `X`,
15
- $$
16
- ∥x∥ = ∥P x∥ + ∥(1 - P) x∥.
17
- $$
13
+ A projection P on a normed space X is said to be an L-projection (`is_Lprojection`) if, for all `x`
14
+ in `X`,
15
+ $\|x\| = \|P x\| + \|(1 - P) x\|$.
18
16
19
- A continuous projection `P` on a normed space `X` is said to be an M-projection if, for all `x` in
20
- `X`,
21
- $$
22
- ∥x∥ = max(∥P x∥,∥(1 - P) x∥).
23
- $$
17
+ A projection P on a normed space X is said to be an M-projection if, for all `x` in `X`,
18
+ $\|x\| = max(\|P x\|,\|(1 - P) x\|)$.
24
19
25
- The L-projections on `X` form a Boolean algebra.
20
+ The L-projections on `X` form a Boolean algebra (`is_Lprojection.subtype.boolean_algebra`) .
26
21
27
22
## TODO (Motivational background)
28
23
@@ -48,6 +43,10 @@ two-sided ideals of `A`.
48
43
The approach to showing that the L-projections form a Boolean algebra is inspired by
49
44
`measure_theory.measurable_space`.
50
45
46
+ Instead of using `P : X →L[𝕜] X` to represent projections, we use an arbitrary ring `M` with a
47
+ faithful action on `X`. `continuous_linear_map.apply_module` can be used to recover the `X →L[𝕜] X`
48
+ special case.
49
+
51
50
## References
52
51
53
52
* [ Behrends, M-structure and the Banach-Stone Theorem ] [behrends1979 ]
@@ -59,62 +58,66 @@ M-summand, M-projection, L-summand, L-projection, M-ideal, M-structure
59
58
60
59
-/
61
60
62
- variables {X : Type *} [normed_group X]
63
-
64
- variables {𝕜 : Type *} [normed_field 𝕜] [normed_space 𝕜 X]
65
-
61
+ variables (X : Type *) [normed_group X]
62
+ variables {M : Type } [ring M] [module M X]
66
63
/--
67
64
A projection on a normed space `X` is said to be an L-projection if, for all `x` in `X`,
68
- $$
69
- ∥x∥ = ∥P x∥ + ∥(1 - P) x∥.
70
- $$
65
+ $\|x\| = \|P x\| + \|(1 - P) x\|$.
66
+
67
+ Note that we write `P • x` instead of `P x` for reasons described in the module docstring.
71
68
-/
72
- structure is_Lprojection (P : X →L[𝕜] X ) : Prop :=
69
+ structure is_Lprojection (P : M ) : Prop :=
73
70
(proj : is_idempotent_elem P)
74
- (Lnorm : ∀ (x : X), ∥x∥ = ∥P x∥ + ∥(1 - P) x∥)
71
+ (Lnorm : ∀ (x : X), ∥x∥ = ∥P • x∥ + ∥(1 - P) • x∥)
75
72
76
73
/--
77
74
A projection on a normed space `X` is said to be an M-projection if, for all `x` in `X`,
78
- $$
79
- ∥x∥ = max(∥P x∥, ∥(1 - P) x∥).
80
- $$
75
+ $\|x\| = max(\|P x\|,\|(1 - P) x\|)$.
76
+
77
+ Note that we write `P • x` instead of `P x` for reasons described in the module docstring.
81
78
-/
82
- structure is_Mprojection (P : X →L[𝕜] X ) : Prop :=
79
+ structure is_Mprojection (P : M ) : Prop :=
83
80
(proj : is_idempotent_elem P)
84
- (Mnorm : ∀ (x : X), ∥x∥ = (max ∥P x∥ ∥(1 - P) x∥))
81
+ (Mnorm : ∀ (x : X), ∥x∥ = (max ∥P • x∥ ∥(1 - P) • x∥))
82
+
83
+ variables {X}
85
84
86
85
namespace is_Lprojection
87
86
88
- lemma Lcomplement {P : X →L[𝕜] X } (h: is_Lprojection P) : is_Lprojection (1 - P) :=
87
+ lemma Lcomplement {P : M } (h: is_Lprojection X P) : is_Lprojection X (1 - P) :=
89
88
⟨h.proj.one_sub, λ x, by { rw [add_comm, sub_sub_cancel], exact h.Lnorm x }⟩
90
89
91
- lemma Lcomplement_iff (P : X →L[𝕜] X ) : is_Lprojection P ↔ is_Lprojection (1 - P) :=
90
+ lemma Lcomplement_iff (P : M ) : is_Lprojection X P ↔ is_Lprojection X (1 - P) :=
92
91
⟨Lcomplement, λ h, sub_sub_cancel 1 P ▸ h.Lcomplement⟩
93
92
94
- lemma commute {P Q : X →L[𝕜] X} (h₁ : is_Lprojection P) (h₂ : is_Lprojection Q) : commute P Q :=
93
+ lemma commute [has_faithful_scalar M X] {P Q : M} (h₁ : is_Lprojection X P)
94
+ (h₂ : is_Lprojection X Q) : commute P Q :=
95
95
begin
96
- have PR_eq_RPR : ∀ R : (X →L[𝕜] X) , is_Lprojection R → ( P * R = R * P * R) :=λ R h₃,
96
+ have PR_eq_RPR : ∀ R : M , is_Lprojection X R → P * R = R * P * R := λ R h₃,
97
97
begin
98
- ext ,
98
+ refine @eq_of_smul_eq_smul _ X _ _ _ _ (λ x, _) ,
99
99
rw ← norm_sub_eq_zero_iff,
100
- have e1 : ∥R x∥ ≥ ∥R x∥ + 2 • ∥ (P * R) x - (R * P * R) x∥ :=
101
- calc ∥R x∥ = ∥R (P (R x))∥ + ∥(1 - R) (P (R x))∥ + (∥(R * R) x - R (P (R x ))∥
102
- + ∥(1 - R) ((1 - P) (R x))∥) :
103
- by rw [h₁.Lnorm, h₃.Lnorm, h₃.Lnorm ((1 - P) (R x)), continuous_linear_map.sub_apply 1 P,
104
- continuous_linear_map.one_apply, map_sub, continuous_linear_map.coe_mul ]
105
- ... = ∥R (P (R x))∥ + ∥(1 - R) (P (R x))∥ + (∥R x - R (P (R x))∥
106
- + ∥((1 - R) * R) x - (1 - R) (P (R x))∥) : by rw [h₃.proj.eq,
107
- continuous_linear_map.sub_apply 1 P, continuous_linear_map.one_apply,
108
- map_sub,continuous_linear_map.coe_mul]
109
- ... = ∥R (P (R x))∥ + ∥( 1 - R) (P (R x))∥ + (∥R x - R (P (R x))∥ + ∥(1 - R) (P (R x))∥) :
110
- by rw [sub_mul, h₃.proj.eq, one_mul, sub_self, continuous_linear_map.zero_apply , zero_sub,
100
+ have e1 : ∥R • x∥ ≥ ∥R • x∥ + 2 • ∥ (P * R) • x - (R * P * R) • x∥ :=
101
+ calc ∥R • x∥ = ∥R • (P • (R • x))∥ + ∥(1 - R) • (P • (R • x ))∥ +
102
+ (∥(R * R) • x - R • (P • (R • x))∥ + ∥(1 - R) • ((1 - P) • (R • x))∥) :
103
+ by rw [h₁.Lnorm, h₃.Lnorm, h₃.Lnorm ((1 - P) • (R • x)), sub_smul 1 P,
104
+ one_smul, smul_sub, mul_smul ]
105
+ ... = ∥R • (P • (R • x))∥ + ∥(1 - R) • (P • (R • x))∥ + (∥R • x - R • (P • (R • x))∥
106
+ + ∥((1 - R) * R) • x - (1 - R) • (P • (R • x))∥) : by rw [h₃.proj.eq,
107
+ sub_smul 1 P, one_smul, smul_sub, mul_smul]
108
+ ... = ∥R • (P • (R • x))∥ + ∥( 1 - R) • (P • (R • x))∥ +
109
+ (∥R • x - R • (P • (R • x))∥ + ∥(1 - R) • (P • (R • x))∥) :
110
+ by rw [sub_mul, h₃.proj.eq, one_mul, sub_self, zero_smul , zero_sub,
111
111
norm_neg]
112
- ... = ∥R (P (R x))∥ + ∥R x - R (P (R x))∥ + 2 •∥(1 - R) (P (R x))∥ : by abel
113
- ... ≥ ∥R x∥ + 2 • ∥ (P * R) x - (R * P * R) x∥ :
114
- by exact add_le_add_right (norm_le_insert' (R x) (R (P (R x)))) (2 •∥(1 - R) (P (R x))∥),
112
+ ... = ∥R • (P • (R • x))∥ + ∥R • x - R • (P • (R • x))∥ + 2 •∥(1 - R) • (P • (R • x))∥ : by abel
113
+ ... ≥ ∥R • x∥ + 2 • ∥ (P * R) • x - (R * P * R) • x∥ : by
114
+ { rw ge,
115
+ have := add_le_add_right
116
+ (norm_le_insert' (R • x) (R • (P • (R • x)))) (2 •∥(1 - R) • (P • (R • x))∥),
117
+ simpa only [mul_smul, sub_smul, one_smul] using this },
115
118
rw ge at e1,
116
- nth_rewrite_rhs 0 ← add_zero (∥R x∥) at e1,
117
- rw [add_le_add_iff_left, two_smul, ← two_mul] at e1,
119
+ nth_rewrite_rhs 0 ← add_zero (∥R • x∥) at e1,
120
+ rw [add_le_add_iff_left, two_smul, ← two_mul] at e1,
118
121
rw le_antisymm_iff,
119
122
refine ⟨_, norm_nonneg _⟩,
120
123
rwa [←mul_zero (2 : ℝ), mul_le_mul_left (show (0 : ℝ) < 2 , by norm_num)] at e1
@@ -127,109 +130,112 @@ begin
127
130
show P * Q = Q * P, by rw [QP_eq_QPQ, PR_eq_RPR Q h₂]
128
131
end
129
132
130
- lemma mul {P Q : X →L[𝕜] X } (h₁ : is_Lprojection P) (h₂ : is_Lprojection Q) :
131
- is_Lprojection (P * Q) :=
133
+ lemma mul [has_faithful_scalar M X] {P Q : M } (h₁ : is_Lprojection X P) (h₂ : is_Lprojection X Q) :
134
+ is_Lprojection X (P * Q) :=
132
135
begin
133
136
refine ⟨is_idempotent_elem.mul_of_commute (h₁.commute h₂) h₁.proj h₂.proj, _⟩,
134
137
intro x,
135
138
refine le_antisymm _ _,
136
- { calc ∥ x ∥ = ∥(P * Q) x + (x - (P * Q) x)∥ : by rw add_sub_cancel'_right ((P * Q) x) x
137
- ... ≤ ∥(P * Q) x∥ + ∥ x - (P * Q) x ∥ : by apply norm_add_le
138
- ... = ∥(P * Q) x∥ + ∥(1 - P * Q) x∥ : by rw [continuous_linear_map.sub_apply,
139
- continuous_linear_map.one_apply] },
140
- { calc ∥x∥ = ∥P (Q x)∥ + (∥Q x - P (Q x)∥ + ∥x - Q x∥) : by rw [h₂.Lnorm x, h₁.Lnorm (Q x),
141
- continuous_linear_map.sub_apply, continuous_linear_map.one_apply,
142
- continuous_linear_map.sub_apply, continuous_linear_map.one_apply, add_assoc]
143
- ... ≥ ∥P (Q x)∥ + ∥(Q x - P (Q x)) + (x - Q x)∥ :
144
- (add_le_add_iff_left (∥P(Q x)∥)).mpr (norm_add_le (Q x - P (Q x)) (x - Q x))
145
- ... = ∥(P * Q) x∥ + ∥(1 - P * Q) x∥ : by rw [sub_add_sub_cancel',
146
- continuous_linear_map.sub_apply, continuous_linear_map.one_apply,
147
- continuous_linear_map.coe_mul] }
139
+ { calc ∥ x ∥ = ∥(P * Q) • x + (x - (P * Q) • x)∥ : by rw add_sub_cancel'_right ((P * Q) • x) x
140
+ ... ≤ ∥(P * Q) • x∥ + ∥ x - (P * Q) • x ∥ : by apply norm_add_le
141
+ ... = ∥(P * Q) • x∥ + ∥(1 - P * Q) • x∥ : by rw [sub_smul,
142
+ one_smul] },
143
+ { calc ∥x∥ = ∥P • (Q • x)∥ + (∥Q • x - P • (Q • x)∥ + ∥x - Q • x∥) : by
144
+ rw [h₂.Lnorm x, h₁.Lnorm (Q • x),
145
+ sub_smul, one_smul,
146
+ sub_smul, one_smul, add_assoc]
147
+ ... ≥ ∥P • (Q • x)∥ + ∥(Q • x - P • (Q • x)) + (x - Q • x)∥ :
148
+ (add_le_add_iff_left (∥P • (Q • x)∥)).mpr (norm_add_le (Q • x - P • (Q • x)) (x - Q • x))
149
+ ... = ∥(P * Q) • x∥ + ∥(1 - P * Q) • x∥ : by rw [sub_add_sub_cancel',
150
+ sub_smul, one_smul,
151
+ mul_smul] }
148
152
end
149
153
150
- lemma join {P Q : X →L[𝕜] X } (h₁ : is_Lprojection P) (h₂ : is_Lprojection Q) :
151
- is_Lprojection (P + Q - P * Q) :=
154
+ lemma join [has_faithful_scalar M X] {P Q : M } (h₁ : is_Lprojection X P) (h₂ : is_Lprojection X Q) :
155
+ is_Lprojection X (P + Q - P * Q) :=
152
156
begin
153
157
convert (Lcomplement_iff _).mp (h₁.Lcomplement.mul h₂.Lcomplement) using 1 ,
154
158
noncomm_ring,
155
159
end
156
160
157
- instance : has_compl { f : X →L[𝕜] X // is_Lprojection f } :=
161
+ instance : has_compl { f : M // is_Lprojection X f } :=
158
162
⟨λ P, ⟨1 - P, P.prop.Lcomplement⟩⟩
159
163
160
- @[simp] lemma coe_compl (P : {P : X →L[𝕜] X // is_Lprojection P}) :
161
- ↑(Pᶜ) = (1 : X →L[𝕜] X ) - ↑P := rfl
164
+ @[simp] lemma coe_compl (P : {P : M // is_Lprojection X P}) :
165
+ ↑(Pᶜ) = (1 : M ) - ↑P := rfl
162
166
163
- instance : has_inf {P : X →L[𝕜] X // is_Lprojection P} :=
167
+ instance [has_faithful_scalar M X] : has_inf {P : M // is_Lprojection X P} :=
164
168
⟨λ P Q, ⟨P * Q, P.prop.mul Q.prop⟩ ⟩
165
169
166
- @[simp] lemma coe_inf (P Q : {P : X →L[𝕜] X // is_Lprojection P}) :
167
- ↑(P ⊓ Q) = ((↑P : (X →L[𝕜] X )) * ↑Q) := rfl
170
+ @[simp] lemma coe_inf [has_faithful_scalar M X] (P Q : {P : M // is_Lprojection X P}) :
171
+ ↑(P ⊓ Q) = ((↑P : (M )) * ↑Q) := rfl
168
172
169
- instance : has_sup {P : X →L[𝕜] X // is_Lprojection P} :=
173
+ instance [has_faithful_scalar M X] : has_sup {P : M // is_Lprojection X P} :=
170
174
⟨λ P Q, ⟨P + Q - P * Q, P.prop.join Q.prop⟩ ⟩
171
175
172
- @[simp] lemma coe_sup (P Q : {P : X →L[𝕜] X // is_Lprojection P}) :
173
- ↑(P ⊔ Q) = ((↑P : X →L[𝕜] X ) + ↑Q - ↑P * ↑Q) := rfl
176
+ @[simp] lemma coe_sup [has_faithful_scalar M X] (P Q : {P : M // is_Lprojection X P}) :
177
+ ↑(P ⊔ Q) = ((↑P : M ) + ↑Q - ↑P * ↑Q) := rfl
174
178
175
- instance : has_sdiff {P : X →L[𝕜] X // is_Lprojection P} :=
179
+ instance [has_faithful_scalar M X] : has_sdiff {P : M // is_Lprojection X P} :=
176
180
⟨λ P Q, ⟨P * (1 - Q), by exact P.prop.mul Q.prop.Lcomplement ⟩⟩
177
181
178
- @[simp] lemma coe_sdiff (P Q : {P : X →L[𝕜] X // is_Lprojection P}) :
179
- ↑(P \ Q) = (↑P : X →L[𝕜] X ) * (1 - ↑Q) := rfl
182
+ @[simp] lemma coe_sdiff [has_faithful_scalar M X] (P Q : {P : M // is_Lprojection X P}) :
183
+ ↑(P \ Q) = (↑P : M ) * (1 - ↑Q) := rfl
180
184
181
- instance : partial_order {P : X →L[𝕜] X // is_Lprojection P} :=
182
- { le := λ P Q, (↑P : X →L[𝕜] X ) = ↑(P ⊓ Q),
185
+ instance [has_faithful_scalar M X] : partial_order {P : M // is_Lprojection X P} :=
186
+ { le := λ P Q, (↑P : M ) = ↑(P ⊓ Q),
183
187
le_refl := λ P, by simpa only [coe_inf, ←sq] using (P.prop.proj.eq).symm,
184
188
le_trans := λ P Q R h₁ h₂, by { simp only [coe_inf] at ⊢ h₁ h₂, rw [h₁, mul_assoc, ←h₂] },
185
189
le_antisymm := λ P Q h₁ h₂, subtype.eq (by convert (P.prop.commute Q.prop).eq) }
186
190
187
- lemma le_def (P Q : {P : X →L[𝕜] X // is_Lprojection P}) : P ≤ Q ↔ (P : X →L[𝕜] X) = ↑(P ⊓ Q) :=
191
+ lemma le_def [has_faithful_scalar M X] (P Q : {P : M // is_Lprojection X P}) :
192
+ P ≤ Q ↔ (P : M) = ↑(P ⊓ Q) :=
188
193
iff.rfl
189
194
190
- instance : has_zero {P : X →L[𝕜] X // is_Lprojection P} :=
195
+ instance : has_zero {P : M // is_Lprojection X P} :=
191
196
⟨⟨0 , ⟨by rw [is_idempotent_elem, zero_mul],
192
- λ x, by simp only [continuous_linear_map.zero_apply , norm_zero, sub_zero,
193
- continuous_linear_map.one_apply , zero_add]⟩⟩⟩
197
+ λ x, by simp only [zero_smul , norm_zero, sub_zero,
198
+ one_smul , zero_add]⟩⟩⟩
194
199
195
- @[simp] lemma coe_zero : ↑(0 : {P : X →L[𝕜] X // is_Lprojection P}) = (0 : X →L[𝕜] X ) :=
200
+ @[simp] lemma coe_zero : ↑(0 : {P : M // is_Lprojection X P}) = (0 : M ) :=
196
201
rfl
197
202
198
- instance : has_one {P : X →L[𝕜] X // is_Lprojection P} :=
199
- ⟨⟨1 , sub_zero (1 : X →L[𝕜] X ) ▸ (0 : {P : X →L[𝕜] X // is_Lprojection P}).prop.Lcomplement⟩⟩
203
+ instance : has_one {P : M // is_Lprojection X P} :=
204
+ ⟨⟨1 , sub_zero (1 : M ) ▸ (0 : {P : M // is_Lprojection X P}).prop.Lcomplement⟩⟩
200
205
201
- @[simp] lemma coe_one : ↑(1 : {P : X →L[𝕜] X // is_Lprojection P}) = (1 : X →L[𝕜] X ) :=
206
+ @[simp] lemma coe_one : ↑(1 : {P : M // is_Lprojection X P}) = (1 : M ) :=
202
207
rfl
203
208
204
- instance : bounded_order {P : X →L[𝕜] X // is_Lprojection P} :=
209
+ instance [has_faithful_scalar M X] : bounded_order {P : M // is_Lprojection X P} :=
205
210
{ top := 1 ,
206
- le_top := λ P, (by rw mul_one : (↑ P : X →L[𝕜] X) = ↑P * 1 ) ,
211
+ le_top := λ P, (mul_one ( P : M)).symm ,
207
212
bot := 0 ,
208
- bot_le := λ P, show 0 ≤ P, from zero_mul P , }
213
+ bot_le := λ P, (zero_mul (P : M)).symm , }
209
214
210
- @[simp] lemma coe_bot : ↑(bounded_order.bot : {P : X →L[𝕜] X // is_Lprojection P}) = ( 0 : X →L[𝕜] X)
211
- := rfl
215
+ @[simp] lemma coe_bot [has_faithful_scalar M X] :
216
+ ↑(bounded_order.bot : {P : M // is_Lprojection X P}) = ( 0 : M) := rfl
212
217
213
- @[simp] lemma coe_top : ↑(bounded_order.top : {P : X →L[𝕜] X // is_Lprojection P}) = ( 1 : X →L[𝕜] X)
214
- := rfl
218
+ @[simp] lemma coe_top [has_faithful_scalar M X] :
219
+ ↑(bounded_order.top : {P : M // is_Lprojection X P}) = ( 1 : M) := rfl
215
220
216
- lemma compl_mul_left {P : {P : X →L[𝕜] X // is_Lprojection P}} {Q : X →L[𝕜] X } :
217
- Q - ↑P * Q = ↑Pᶜ * Q := by rw [coe_compl, sub_mul, one_mul]
221
+ lemma compl_mul {P : {P : M // is_Lprojection X P}} {Q : M } :
222
+ ↑Pᶜ * Q = Q - ↑P * Q := by rw [coe_compl, sub_mul, one_mul]
218
223
219
- lemma compl_orthog {P : {P : X →L[𝕜] X // is_Lprojection P}} :
220
- (↑P : X →L[𝕜] X ) * (↑Pᶜ) = 0 :=
224
+ lemma mul_compl_self {P : {P : M // is_Lprojection X P}} :
225
+ (↑P : M ) * (↑Pᶜ) = 0 :=
221
226
by rw [coe_compl, mul_sub, mul_one, P.prop.proj.eq, sub_self]
222
227
223
- lemma distrib_lattice_lemma {P Q R : {P : X →L[𝕜] X // is_Lprojection P}} :
224
- ((↑P : X →L[𝕜] X ) + ↑Pᶜ * R) * (↑P + ↑Q * ↑R * ↑Pᶜ) = (↑P + ↑Q * ↑R * ↑Pᶜ) :=
225
- by rw [add_mul, mul_add, mul_add, mul_assoc ↑Pᶜ ↑R (↑Q * ↑R * ↑Pᶜ), ← mul_assoc ↑R (↑Q * ↑R) ↑Pᶜ,
228
+ lemma distrib_lattice_lemma [has_faithful_scalar M X] {P Q R : {P : M // is_Lprojection X P}} :
229
+ ((↑P : M ) + ↑Pᶜ * R) * (↑P + ↑Q * ↑R * ↑Pᶜ) = (↑P + ↑Q * ↑R * ↑Pᶜ) :=
230
+ by rw [add_mul, mul_add, mul_add, mul_assoc ↑Pᶜ ↑R (↑Q * ↑R * ↑Pᶜ), ← mul_assoc ↑R (↑Q * ↑R) ↑Pᶜ,
226
231
← coe_inf Q, (Pᶜ.prop.commute R.prop).eq, ((Q ⊓ R).prop.commute Pᶜ.prop).eq,
227
232
(R.prop.commute (Q ⊓ R).prop).eq, coe_inf Q, mul_assoc ↑Q, ← mul_assoc, mul_assoc ↑R,
228
- (Pᶜ.prop.commute P.prop).eq, compl_orthog, zero_mul, mul_zero, zero_add, add_zero, ← mul_assoc,
233
+ (Pᶜ.prop.commute P.prop).eq, mul_compl_self, zero_mul, mul_zero, zero_add, add_zero,
234
+ ← mul_assoc,
229
235
P.prop.proj.eq, R.prop.proj.eq, ← coe_inf Q, mul_assoc, ((Q ⊓ R).prop.commute Pᶜ.prop).eq,
230
236
← mul_assoc, Pᶜ.prop.proj.eq]
231
237
232
- instance : distrib_lattice {P : X →L[𝕜] X // is_Lprojection P} :=
238
+ instance [has_faithful_scalar M X] : distrib_lattice {P : M // is_Lprojection X P} :=
233
239
{ le_sup_left := λ P Q, by rw [le_def, coe_inf, coe_sup, ← add_sub, mul_add, mul_sub, ← mul_assoc,
234
240
P.prop.proj.eq, sub_self, add_zero],
235
241
le_sup_right := λ P Q,
@@ -257,35 +263,33 @@ instance : distrib_lattice {P : X →L[𝕜] X // is_Lprojection P} :=
257
263
begin
258
264
have e₁: ↑((P ⊔ Q) ⊓ (P ⊔ R)) = ↑P + ↑Q * ↑R * ↑Pᶜ :=
259
265
by rw [coe_inf, coe_sup, coe_sup,
260
- ← add_sub, ← add_sub, compl_mul_left, compl_mul_left , add_mul, mul_add,
266
+ ← add_sub, ← add_sub, ←compl_mul, ←compl_mul , add_mul, mul_add,
261
267
(Pᶜ.prop.commute Q.prop).eq, mul_add, ← mul_assoc, mul_assoc ↑Q, (Pᶜ.prop.commute P.prop).eq,
262
- compl_orthog , zero_mul, mul_zero, zero_add, add_zero, ← mul_assoc, mul_assoc ↑Q,
268
+ mul_compl_self , zero_mul, mul_zero, zero_add, add_zero, ← mul_assoc, mul_assoc ↑Q,
263
269
P.prop.proj.eq, Pᶜ.prop.proj.eq, mul_assoc, (Pᶜ.prop.commute R.prop).eq, ← mul_assoc],
264
270
have e₂ : ↑((P ⊔ Q) ⊓ (P ⊔ R)) * ↑(P ⊔ Q ⊓ R) = ↑P + ↑Q * ↑R * ↑Pᶜ := by rw [coe_inf, coe_sup,
265
- coe_sup, coe_sup, ← add_sub, ← add_sub, ← add_sub, compl_mul_left, compl_mul_left ,
266
- compl_mul_left , (Pᶜ.prop.commute (Q⊓R).prop).eq, coe_inf, mul_assoc, distrib_lattice_lemma,
271
+ coe_sup, coe_sup, ← add_sub, ← add_sub, ← add_sub, ←compl_mul, ←compl_mul ,
272
+ ←compl_mul , (Pᶜ.prop.commute (Q⊓R).prop).eq, coe_inf, mul_assoc, distrib_lattice_lemma,
267
273
(Q.prop.commute R.prop).eq, distrib_lattice_lemma],
268
274
rw [le_def, e₁, coe_inf, e₂],
269
275
end ,
270
276
.. is_Lprojection.subtype.has_inf,
271
277
.. is_Lprojection.subtype.has_sup,
272
278
.. is_Lprojection.subtype.partial_order }
273
279
274
- instance : boolean_algebra {P : X →L[𝕜] X // is_Lprojection P} :=
275
- { sup_inf_sdiff := λ P Q,
276
- subtype.ext ( by rw [coe_sup, coe_inf, coe_sdiff, mul_assoc, ← mul_assoc ↑Q,
277
- (Q.prop.commute P.prop).eq, mul_assoc ↑P ↑Q, ← coe_compl, compl_orthog , mul_zero, mul_zero,
278
- sub_zero, ← mul_add, coe_compl, add_sub_cancel'_right, mul_one]) ,
279
- inf_inf_sdiff := λ P Q,
280
- subtype.ext ( by rw [coe_inf, coe_inf, coe_sdiff, coe_bot, mul_assoc, ← mul_assoc ↑Q,
281
- (Q.prop.commute P.prop).eq, ← coe_compl, mul_assoc, compl_orthog , mul_zero, mul_zero]) ,
280
+ instance [has_faithful_scalar M X] : boolean_algebra {P : M // is_Lprojection X P} :=
281
+ { sup_inf_sdiff := λ P Q, subtype.ext $
282
+ by rw [coe_sup, coe_inf, coe_sdiff, mul_assoc, ← mul_assoc ↑Q,
283
+ (Q.prop.commute P.prop).eq, mul_assoc ↑P ↑Q, ← coe_compl, mul_compl_self , mul_zero, mul_zero,
284
+ sub_zero, ← mul_add, coe_compl, add_sub_cancel'_right, mul_one],
285
+ inf_inf_sdiff := λ P Q, subtype.ext $
286
+ by rw [coe_inf, coe_inf, coe_sdiff, coe_bot, mul_assoc, ← mul_assoc ↑Q,
287
+ (Q.prop.commute P.prop).eq, ← coe_compl, mul_assoc, mul_compl_self , mul_zero, mul_zero],
282
288
inf_compl_le_bot := λ P,
283
- (subtype.ext (by rw [coe_inf, coe_compl, coe_bot, ← coe_compl, compl_orthog ])).le,
289
+ (subtype.ext (by rw [coe_inf, coe_compl, coe_bot, ← coe_compl, mul_compl_self ])).le,
284
290
top_le_sup_compl := λ P, (subtype.ext(by rw [coe_top, coe_sup, coe_compl,
285
- add_sub_cancel'_right, ← coe_compl, compl_orthog, sub_zero])).le,
286
- sdiff_eq := λ P Q,
287
- subtype.ext
288
- (by rw [coe_sdiff, ← coe_compl, coe_inf]),
291
+ add_sub_cancel'_right, ← coe_compl, mul_compl_self, sub_zero])).le,
292
+ sdiff_eq := λ P Q, subtype.ext $ by rw [coe_sdiff, ← coe_compl, coe_inf],
289
293
.. is_Lprojection.subtype.has_compl,
290
294
.. is_Lprojection.subtype.has_sdiff,
291
295
.. is_Lprojection.subtype.bounded_order,
0 commit comments