|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Monica Omar. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Monica Omar |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Analysis.LocallyConvex.SeparatingDual |
| 9 | +public import Mathlib.Analysis.Normed.Operator.Banach |
| 10 | +public import Mathlib.Topology.Algebra.Algebra.Equiv |
| 11 | + |
| 12 | +/-! |
| 13 | +# Continuous algebra equivalences between continuous endomorphisms are inner |
| 14 | +
|
| 15 | +This file shows that continuous algebra equivalences between continuous endomorphisms are inner. |
| 16 | +See `Mathlib/LinearAlgebra/GeneralLinearGroup/AlgEquiv.lean` for the non-continuous version. |
| 17 | +The proof follows the same idea as the non-continuous version. |
| 18 | +
|
| 19 | +# TODO: |
| 20 | +- when `V = W`, we can state that the group homomorphism |
| 21 | + `(V →L[𝕜] V)ˣ →* ((V →L[𝕜] V) ≃A[𝕜] (V →L[𝕜] V))` is surjective, |
| 22 | + see `Module.End.mulSemiringActionToAlgEquiv_conjAct_surjective` for the non-continuous |
| 23 | + version of this. |
| 24 | +-/ |
| 25 | + |
| 26 | +open ContinuousLinearMap ContinuousLinearEquiv |
| 27 | + |
| 28 | +/-- This is the continuous version of `AlgEquiv.eq_linearEquivConjAlgEquiv`. -/ |
| 29 | +public theorem ContinuousAlgEquiv.eq_continuousLinearEquivConjContinuousAlgEquiv {𝕜 V W : Type*} |
| 30 | + [NontriviallyNormedField 𝕜] [SeminormedAddCommGroup V] [SeminormedAddCommGroup W] |
| 31 | + [NormedSpace 𝕜 V] [NormedSpace 𝕜 W] [SeparatingDual 𝕜 V] [SeparatingDual 𝕜 W] |
| 32 | + (f : (V →L[𝕜] V) ≃A[𝕜] (W →L[𝕜] W)) : |
| 33 | + ∃ U : V ≃L[𝕜] W, f = U.conjContinuousAlgEquiv := by |
| 34 | + /- The proof goes as follows: |
| 35 | + We want to show the existence of a continuous linear equivalence `U : V ≃L[𝕜] W` such that |
| 36 | + `f A (U x) = U (A x)` for all `A : V →L[𝕜] V` and `x : V`. |
| 37 | + Assume nontriviality of `V`, and let `(u : V) ≠ 0`. Let `v` be a strong dual on `V` such that |
| 38 | + `v u ≠ 0` (exists since it has a separating dual). |
| 39 | + Let `z : W` such that `f (smulRight v u) z ≠ 0`. |
| 40 | + Then we construct a bijective continuous linear map `T : V →L[𝕜] W` |
| 41 | + given by `x ↦ f (smulRight v x) z` and so satisfies `T (A x) = f A (T x)` for all |
| 42 | + `A : V →L[𝕜] V` and `x : V`. So it remains to show that this map has a continuous inverse. |
| 43 | + Let `d` be a strong dual on `W` such that `d ((f (smulRight v u)) z) = 1` (exists since it has |
| 44 | + a separating dual). |
| 45 | + We then construct a right-inverse continuous linear map `T' : W →L[𝕜] V` given by |
| 46 | + `x ↦ f.symm (smulRight d x) u`. |
| 47 | + And so it follows that `T` is also a continuous linear equivalence. -/ |
| 48 | + by_cases! hV : Subsingleton V |
| 49 | + · by_cases! hV : Subsingleton W |
| 50 | + · exact ⟨{ toLinearEquiv := 0 }, ext <| Subsingleton.allEq _ _⟩ |
| 51 | + simpa using congr(f $(Subsingleton.allEq 0 1)) |
| 52 | + simp_rw [ContinuousAlgEquiv.ext_iff, funext_iff, conjContinuousAlgEquiv_apply, ← comp_assoc, |
| 53 | + eq_comp_toContinuousLinearMap_symm] |
| 54 | + obtain ⟨u, hu⟩ := exists_ne (0 : V) |
| 55 | + obtain ⟨v, huv⟩ := SeparatingDual.exists_ne_zero (R := 𝕜) hu |
| 56 | + obtain ⟨z, hz⟩ : ∃ z : W, ¬ f (smulRight v u) z = (0 : W →L[𝕜] W) z := by |
| 57 | + rw [← not_forall, ← ContinuousLinearMap.ext_iff, map_eq_zero_iff, ContinuousLinearMap.ext_iff] |
| 58 | + exact not_forall.mpr ⟨u, huv.isUnit.smul_eq_zero.not.mpr hu⟩ |
| 59 | + set T := apply' _ (.id 𝕜) z ∘L f.toContinuousAlgHom.toContinuousLinearMap ∘L smulRightL 𝕜 _ _ v |
| 60 | + have hT x : T x = f (smulRight v x) z := rfl |
| 61 | + have this A x : T (A x) = f A (T x) := by |
| 62 | + simp only [hT, ← mul_apply, ← map_mul] |
| 63 | + congr; ext; simp |
| 64 | + have ⟨d, hd⟩ := SeparatingDual.exists_eq_one (R := 𝕜) hz |
| 65 | + have surj : Function.Surjective T := fun w ↦ ⟨f.symm (smulRight d w) u, by simp [T, this, hd]⟩ |
| 66 | + have inj : Function.Injective T := fun x y hxy ↦ by |
| 67 | + have h_smul : smulRight v x = smulRight v y := by |
| 68 | + apply f.injective <| ContinuousLinearMap.ext fun z ↦ ?_ |
| 69 | + obtain ⟨w, rfl⟩ := surj z |
| 70 | + simp [← this, hxy] |
| 71 | + simpa [huv.isUnit.smul_left_cancel] using congr((fun f ↦ f u) $h_smul) |
| 72 | + set Tₗ : V ≃ₗ[𝕜] W := .ofBijective T.toLinearMap ⟨inj, surj⟩ |
| 73 | + set T' := apply' _ (.id 𝕜) u ∘L f.symm.toContinuousAlgHom.toContinuousLinearMap ∘L |
| 74 | + smulRightL 𝕜 _ _ d |
| 75 | + set TL : V ≃L[𝕜] W := { Tₗ with |
| 76 | + continuous_toFun := T.continuous |
| 77 | + continuous_invFun := by |
| 78 | + change Continuous Tₗ.symm.toLinearMap |
| 79 | + suffices T'.toLinearMap = Tₗ.symm from this ▸ T'.continuous |
| 80 | + simp [LinearMap.ext_iff, ← Tₗ.injective.eq_iff, T', this, hT, hd, Tₗ] } |
| 81 | + exact ⟨TL, fun A ↦ (ContinuousLinearMap.ext <| this A).symm⟩ |
0 commit comments