@@ -799,8 +799,19 @@ theorem bijective (e : M ≃L[R] M₂) : function.bijective e := e.to_linear_equ
799
799
theorem injective (e : M ≃L[R] M₂) : function.injective e := e.to_linear_equiv.to_equiv.injective
800
800
theorem surjective (e : M ≃L[R] M₂) : function.surjective e := e.to_linear_equiv.to_equiv.surjective
801
801
802
+ @[simp] theorem trans_apply (e₁ : M ≃L[R] M₂) (e₂ : M₂ ≃L[R] M₃) (c : M) :
803
+ (e₁.trans e₂) c = e₂ (e₁ c) :=
804
+ rfl
802
805
@[simp] theorem apply_symm_apply (e : M ≃L[R] M₂) (c : M₂) : e (e.symm c) = c := e.1 .6 c
803
806
@[simp] theorem symm_apply_apply (e : M ≃L[R] M₂) (b : M) : e.symm (e b) = b := e.1 .5 b
807
+ @[simp] theorem symm_trans_apply (e₁ : M₂ ≃L[R] M) (e₂ : M₃ ≃L[R] M₂) (c : M) :
808
+ (e₂.trans e₁).symm c = e₂.symm (e₁.symm c) :=
809
+ rfl
810
+
811
+ @[simp, norm_cast]
812
+ lemma comp_coe (f : M ≃L[R] M₂) (f' : M₂ ≃L[R] M₃) :
813
+ (f' : M₂ →L[R] M₃).comp (f : M →L[R] M₂) = (f.trans f' : M →L[R] M₃) :=
814
+ rfl
804
815
805
816
@[simp] theorem coe_comp_coe_symm (e : M ≃L[R] M₂) :
806
817
(e : M →L[R] M₂).comp (e.symm : M₂ →L[R] M) = continuous_linear_map.id R M₂ :=
@@ -829,6 +840,10 @@ self_comp_symm e
829
840
@[simp] theorem symm_symm (e : M ≃L[R] M₂) : e.symm.symm = e :=
830
841
by { ext x, refl }
831
842
843
+ @[simp] lemma refl_symm :
844
+ (continuous_linear_equiv.refl R M).symm = continuous_linear_equiv.refl R M :=
845
+ rfl
846
+
832
847
theorem symm_symm_apply (e : M ≃L[R] M₂) (x : M) : e.symm.symm x = e x :=
833
848
rfl
834
849
859
874
(equiv_of_inverse f₁ f₂ h₁ h₂).symm = equiv_of_inverse f₂ f₁ h₂ h₁ :=
860
875
rfl
861
876
877
+ variable (M)
878
+
879
+ /-- The continuous linear equivalences from `M` to itself form a group under composition. -/
880
+ instance automorphism_group : group (M ≃L[R] M) :=
881
+ { mul := λ f g, g.trans f,
882
+ one := continuous_linear_equiv.refl R M,
883
+ inv := λ f, f.symm,
884
+ mul_assoc := λ f g h, by {ext, refl},
885
+ mul_one := λ f, by {ext, refl},
886
+ one_mul := λ f, by {ext, refl},
887
+ mul_left_inv := λ f, by {ext, exact f.left_inv x} }
888
+
862
889
end add_comm_monoid
863
890
864
891
section add_comm_group
@@ -901,6 +928,47 @@ variables {R : Type*} [ring R]
901
928
902
929
@[simp] lemma map_neg (e : M ≃L[R] M₂) (x : M) : e (-x) = -e x := (e : M →L[R] M₂).map_neg x
903
930
931
+ section
932
+ /-! The next theorems cover the identification between `M ≃L[𝕜] M`and the group of units of the ring
933
+ `M →L[R] M`. -/
934
+ variables [topological_add_group M]
935
+
936
+ /-- An invertible continuous linear map `f` determines a continuous equivalence from `M` to itself.
937
+ -/
938
+ def of_unit (f : units (M →L[R] M)) : (M ≃L[R] M) :=
939
+ { to_linear_equiv :=
940
+ { to_fun := f.val,
941
+ map_add' := by simp,
942
+ map_smul' := by simp,
943
+ inv_fun := f.inv,
944
+ left_inv := λ x, show (f.inv * f.val) x = x, by {rw f.inv_val, simp},
945
+ right_inv := λ x, show (f.val * f.inv) x = x, by {rw f.val_inv, simp}, },
946
+ continuous_to_fun := f.val.continuous,
947
+ continuous_inv_fun := f.inv.continuous }
948
+
949
+ /-- A continuous equivalence from `M` to itself determines an invertible continuous linear map. -/
950
+ def to_unit (f : (M ≃L[R] M)) : units (M →L[R] M) :=
951
+ { val := f,
952
+ inv := f.symm,
953
+ val_inv := by {ext, simp},
954
+ inv_val := by {ext, simp} }
955
+
956
+ variables (R M)
957
+
958
+ /-- The units of the algebra of continuous `R`-linear endomorphisms of `M` is multiplicatively
959
+ equivalent to the type of continuous linear equivalences between `M` and itself. -/
960
+ def units_equiv : units (M →L[R] M) ≃* (M ≃L[R] M) :=
961
+ { to_fun := of_unit,
962
+ inv_fun := to_unit,
963
+ left_inv := λ f, by {ext, refl},
964
+ right_inv := λ f, by {ext, refl},
965
+ map_mul' := λ x y, by {ext, refl} }
966
+
967
+ @[simp] lemma units_equiv_apply (f : units (M →L[R] M)) (x : M) :
968
+ (units_equiv R M f) x = f x := rfl
969
+
970
+ end
971
+
904
972
section
905
973
variables (R) [topological_space R] [topological_module R R]
906
974
@@ -958,6 +1026,87 @@ end ring
958
1026
959
1027
end continuous_linear_equiv
960
1028
1029
+ namespace continuous_linear_map
1030
+
1031
+ open_locale classical
1032
+
1033
+ variables {R : Type *} {M : Type *} {M₂ : Type *} [topological_space M] [topological_space M₂]
1034
+
1035
+ section
1036
+ variables [semiring R]
1037
+ variables [add_comm_monoid M₂] [semimodule R M₂]
1038
+ variables [add_comm_monoid M] [semimodule R M]
1039
+
1040
+ /-- Introduce a function `inverse` from `M →L[R] M₂` to `M₂ →L[R] M`, which sends `f` to `f.symm` if
1041
+ `f` is a continuous linear equivalence and to `0` otherwise. This definition is somewhat ad hoc,
1042
+ but one needs a fully (rather than partially) defined inverse function for some purposes, including
1043
+ for calculus. -/
1044
+ noncomputable def inverse : (M →L[R] M₂) → (M₂ →L[R] M) :=
1045
+ λ f, if h : ∃ (e : M ≃L[R] M₂), (e : M →L[R] M₂) = f then ((classical.some h).symm : M₂ →L[R] M) else 0
1046
+
1047
+ /-- By definition, if `f` is invertible then `inverse f = f.symm`. -/
1048
+ @[simp] lemma inverse_equiv (e : M ≃L[R] M₂) : inverse (e : M →L[R] M₂) = e.symm :=
1049
+ begin
1050
+ have h : ∃ (e' : M ≃L[R] M₂), (e' : M →L[R] M₂) = ↑e := ⟨e, rfl⟩,
1051
+ simp only [inverse, dif_pos h],
1052
+ congr,
1053
+ ext x,
1054
+ have h' := classical.some_spec h,
1055
+ simpa using continuous_linear_map.ext_iff.1 (h') x -- for some reason `h'` cannot be substituted here
1056
+ end
1057
+
1058
+ /-- By definition, if `f` is not invertible then `inverse f = 0`. -/
1059
+ @[simp] lemma inverse_non_equiv (f : M →L[R] M₂) (h : ¬∃ (e' : M ≃L[R] M₂), ↑e' = f) :
1060
+ inverse f = 0 :=
1061
+ dif_neg h
1062
+
1063
+ end
1064
+
1065
+ section
1066
+ variables [ring R]
1067
+ variables [add_comm_group M] [topological_add_group M] [module R M]
1068
+ variables [add_comm_group M₂] [module R M₂]
1069
+
1070
+ @[simp] lemma ring_inverse_equiv (e : M ≃L[R] M) :
1071
+ ring.inverse ↑e = inverse (e : M →L[R] M) :=
1072
+ begin
1073
+ suffices :
1074
+ ring.inverse ((((continuous_linear_equiv.units_equiv _ _).symm e) : M →L[R] M)) = inverse ↑e,
1075
+ { convert this },
1076
+ simp,
1077
+ refl,
1078
+ end
1079
+
1080
+ /-- The function `continuous_linear_equiv.inverse` can be written in terms of `ring.inverse` for the
1081
+ ring of self-maps of the domain. -/
1082
+ lemma to_ring_inverse (e : M ≃L[R] M₂) (f : M →L[R] M₂) :
1083
+ inverse f = (ring.inverse ((e.symm : (M₂ →L[R] M)).comp f)).comp e.symm :=
1084
+ begin
1085
+ by_cases h₁ : ∃ (e' : M ≃L[R] M₂), ↑e' = f,
1086
+ { obtain ⟨e', he'⟩ := h₁,
1087
+ rw ← he',
1088
+ ext,
1089
+ simp },
1090
+ { suffices : ¬is_unit ((e.symm : M₂ →L[R] M).comp f),
1091
+ { simp [this , h₁] },
1092
+ revert h₁,
1093
+ contrapose!,
1094
+ rintros ⟨F, hF⟩,
1095
+ use (continuous_linear_equiv.units_equiv _ _ F).trans e,
1096
+ ext,
1097
+ simp [hF] }
1098
+ end
1099
+
1100
+ lemma ring_inverse_eq_map_inverse : ring.inverse = @inverse R M M _ _ _ _ _ _ _ :=
1101
+ begin
1102
+ ext,
1103
+ simp [to_ring_inverse (continuous_linear_equiv.refl R M)],
1104
+ end
1105
+
1106
+ end
1107
+
1108
+ end continuous_linear_map
1109
+
961
1110
namespace submodule
962
1111
963
1112
variables
0 commit comments