@@ -238,9 +238,7 @@ section semiring
238
238
-/
239
239
240
240
variables
241
- {R₁ : Type *} [semiring R₁]
242
- {R₂ : Type *} [semiring R₂]
243
- {R₃ : Type *} [semiring R₃]
241
+ {R₁ : Type *} {R₂ : Type *} {R₃ : Type *} [semiring R₁] [semiring R₂] [semiring R₃]
244
242
{σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃}
245
243
{M₁ : Type *} [topological_space M₁] [add_comm_monoid M₁]
246
244
{M₂ : Type *} [topological_space M₂] [add_comm_monoid M₂]
@@ -274,6 +272,16 @@ coe_injective.eq_iff
274
272
theorem coe_fn_injective : @function.injective (M₁ →SL[σ₁₂] M₂) (M₁ → M₂) coe_fn :=
275
273
linear_map.coe_injective.comp coe_injective
276
274
275
+ /-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
276
+ because it is a composition of multiple projections. -/
277
+ def simps.apply (h : M₁ →SL[σ₁₂] M₂) : M₁ → M₂ := h
278
+
279
+ /-- See Note [custom simps projection]. -/
280
+ def simps.coe (h : M₁ →SL[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₂] M₂ := h
281
+
282
+ initialize_simps_projections continuous_linear_map
283
+ (to_linear_map_to_fun → apply, to_linear_map → coe)
284
+
277
285
@[ext] theorem ext {f g : M₁ →SL[σ₁₂] M₂} (h : ∀ x, f x = g x) : f = g :=
278
286
coe_fn_injective $ funext h
279
287
@@ -1063,18 +1071,16 @@ namespace continuous_linear_equiv
1063
1071
1064
1072
section add_comm_monoid
1065
1073
1066
- variables {R₁ : Type *} [semiring R₁]
1067
- {R₂ : Type *} [semiring R₂]
1068
- {R₃ : Type *} [semiring R₃]
1074
+ variables {R₁ : Type *} {R₂ : Type *} {R₃ : Type *} [semiring R₁] [semiring R₂] [semiring R₃]
1075
+ {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [ring_hom_inv_pair σ₁₂ σ₂₁] [ring_hom_inv_pair σ₂₁ σ₁₂]
1076
+ {σ₂₃ : R₂ →+* R₃} {σ₃₂ : R₃ →+* R₂} [ring_hom_inv_pair σ₂₃ σ₃₂] [ring_hom_inv_pair σ₃₂ σ₂₃]
1077
+ {σ₁₃ : R₁ →+* R₃} {σ₃₁ : R₃ →+* R₁} [ring_hom_inv_pair σ₁₃ σ₃₁] [ring_hom_inv_pair σ₃₁ σ₁₃]
1078
+ [ring_hom_comp_triple σ₁₂ σ₂₃ σ₁₃] [ring_hom_comp_triple σ₃₂ σ₂₁ σ₃₁]
1069
1079
{M₁ : Type *} [topological_space M₁] [add_comm_monoid M₁]
1070
1080
{M₂ : Type *} [topological_space M₂] [add_comm_monoid M₂]
1071
1081
{M₃ : Type *} [topological_space M₃] [add_comm_monoid M₃]
1072
1082
{M₄ : Type *} [topological_space M₄] [add_comm_monoid M₄]
1073
1083
[module R₁ M₁] [module R₂ M₂] [module R₃ M₃]
1074
- {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [ring_hom_inv_pair σ₁₂ σ₂₁] [ring_hom_inv_pair σ₂₁ σ₁₂]
1075
- {σ₂₃ : R₂ →+* R₃} {σ₃₂ : R₃ →+* R₂} [ring_hom_inv_pair σ₂₃ σ₃₂] [ring_hom_inv_pair σ₃₂ σ₂₃]
1076
- {σ₁₃ : R₁ →+* R₃} {σ₃₁ : R₃ →+* R₁} [ring_hom_inv_pair σ₁₃ σ₃₁] [ring_hom_inv_pair σ₃₁ σ₁₃]
1077
- [ring_hom_comp_triple σ₁₂ σ₂₃ σ₁₃] [ring_hom_comp_triple σ₃₂ σ₂₁ σ₃₁]
1078
1084
1079
1085
include σ₂₁
1080
1086
/-- A continuous linear equivalence induces a continuous linear map. -/
@@ -1207,6 +1213,16 @@ by { ext, refl }
1207
1213
e.to_homeomorph.symm = e.symm.to_homeomorph :=
1208
1214
rfl
1209
1215
1216
+ /-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
1217
+ because it is a composition of multiple projections. -/
1218
+ def simps.apply (h : M₁ ≃SL[σ₁₂] M₂) : M₁ → M₂ := h
1219
+
1220
+ /-- See Note [custom simps projection] -/
1221
+ def simps.symm_apply (h : M₁ ≃SL[σ₁₂] M₂) : M₂ → M₁ := h.symm
1222
+
1223
+ initialize_simps_projections continuous_linear_equiv
1224
+ (to_linear_equiv_to_fun → apply, to_linear_equiv_inv_fun → symm_apply)
1225
+
1210
1226
lemma symm_map_nhds_eq (e : M₁ ≃SL[σ₁₂] M₂) (x : M₁) : map e.symm (𝓝 (e x)) = 𝓝 x :=
1211
1227
e.to_homeomorph.symm_map_nhds_eq x
1212
1228
omit σ₂₁
@@ -1316,6 +1332,13 @@ e.to_linear_equiv.to_equiv.image_eq_preimage s
1316
1332
1317
1333
protected lemma image_symm_eq_preimage (e : M₁ ≃SL[σ₁₂] M₂) (s : set M₂) : e.symm '' s = e ⁻¹' s :=
1318
1334
by rw [e.symm.image_eq_preimage, e.symm_symm]
1335
+
1336
+ @[simp] protected lemma symm_preimage_preimage (e : M₁ ≃SL[σ₁₂] M₂) (s : set M₂) :
1337
+ e.symm ⁻¹' (e ⁻¹' s) = s := e.to_linear_equiv.to_equiv.symm_preimage_preimage s
1338
+
1339
+ @[simp] protected lemma preimage_symm_preimage (e : M₁ ≃SL[σ₁₂] M₂) (s : set M₁) :
1340
+ e ⁻¹' (e.symm ⁻¹' s) = s := e.symm.symm_preimage_preimage s
1341
+
1319
1342
omit σ₂₁
1320
1343
1321
1344
/-- Create a `continuous_linear_equiv` from two `continuous_linear_map`s that are
@@ -1528,6 +1551,20 @@ variables {ι R M}
1528
1551
@[simp] lemma coe_fun_unique : ⇑(fun_unique ι R M) = function.eval (default ι) := rfl
1529
1552
@[simp] lemma coe_fun_unique_symm : ⇑(fun_unique ι R M).symm = function.const ι := rfl
1530
1553
1554
+ variables (R M)
1555
+
1556
+ /-- Continuous linear equivalence between dependent functions `Π i : fin 2, M i` and `M 0 × M 1`. -/
1557
+ @[simps { fully_applied := ff }]
1558
+ def pi_fin_two (M : fin 2 → Type *) [Π i, add_comm_monoid (M i)] [Π i, module R (M i)]
1559
+ [Π i, topological_space (M i)] :
1560
+ (Π i, M i) ≃L[R] M 0 × M 1 :=
1561
+ { to_linear_equiv := linear_equiv.pi_fin_two R M, .. homeomorph.pi_fin_two M }
1562
+
1563
+ /-- Continuous linear equivalence between vectors in `M² = fin 2 → M` and `M × M`. -/
1564
+ @[simps { fully_applied := ff }]
1565
+ def fin_two_arrow : (fin 2 → M) ≃L[R] M × M :=
1566
+ { to_linear_equiv := linear_equiv.fin_two_arrow R M, .. pi_fin_two R (λ _, M) }
1567
+
1531
1568
end
1532
1569
1533
1570
end continuous_linear_equiv
0 commit comments