feat(Analysis/CStarAlgebra/Matrix): CompactSpace instances for unitaryGroup and specialUnitaryGroup#39146
Conversation
…aryGroup Adds: - isClosed_unitaryGroup, isClosed_specialUnitaryGroup - isCompact_unitaryGroup, isCompact_specialUnitaryGroup - CompactSpace instances on both groups The compactness follows from Heine-Borel applied to the entrywise sup norm: each unitary matrix has all entries bounded by 1 (via the existing entry_norm_bound_of_unitary lemma), and the matrix space is finite- dimensional, so closed + bounded suffices for compactness.
Welcome new contributor!Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests. We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR. Thank you again for joining our community. |
PR summary 706bea155cImport changes for modified filesNo significant changes to the import graph Import changes for all files
|
|
|
||
| section Compact | ||
|
|
||
| set_option backward.isDefEq.respectTransparency false |
There was a problem hiding this comment.
I did a quick test on Lean web and it doesn't look like this is necessary
| section Compact | ||
|
|
||
| set_option backward.isDefEq.respectTransparency false | ||
| open scoped Matrix.Norms.Elementwise |
There was a problem hiding this comment.
This is only used internally by isCompact_unitaryGroup. To emphasize the fact that the public statement doesn't rely on any particular norm, you can put open scoped Matrix.Norms.Elementwise in as the first line after by
j-loreaux
left a comment
There was a problem hiding this comment.
Did you use AI for this PR? You must disclose this.
One thing that this approach fails to capture is that the unitary group of a C⋆-algebra which is also a proper space (i.e., finite dimensional) is compact as well. It would be possible to prove that instead, and then use the C⋆-norm instead of the sup norm to get these results. However, given that they are short enough, I won't require it for this PR.
| /-- The unitary group `Matrix.unitaryGroup n 𝕜` is closed inside `Matrix n n 𝕜`. -/ | ||
| theorem isClosed_unitaryGroup : | ||
| IsClosed (Matrix.unitaryGroup n 𝕜 : Set (Matrix n n 𝕜)) := by | ||
| have h_eq : (Matrix.unitaryGroup n 𝕜 : Set (Matrix n n 𝕜)) = { U | U * star U = 1 } := by | ||
| ext U; simp [Matrix.mem_unitaryGroup_iff] | ||
| rw [h_eq] | ||
| exact isClosed_singleton.preimage (by fun_prop) |
There was a problem hiding this comment.
This already exists as isClosed_unitary (and it works for Matrix.unitaryGroup since that is an abbrev).
| rw [Metric.isCompact_iff_isClosed_bounded] | ||
| refine ⟨isClosed_unitaryGroup, ?_⟩ | ||
| refine (Metric.isBounded_closedBall (x := (0 : Matrix n n 𝕜)) (r := 1)).subset ?_ | ||
| intro U hU | ||
| rw [Metric.mem_closedBall, dist_zero_right] | ||
| exact entrywise_sup_norm_bound_of_unitary hU |
There was a problem hiding this comment.
The metric structure is only needed for the proof, so I would instead only open the scope within the proof. Also, it can be golfed using dedicated lemmas like so:
| rw [Metric.isCompact_iff_isClosed_bounded] | |
| refine ⟨isClosed_unitaryGroup, ?_⟩ | |
| refine (Metric.isBounded_closedBall (x := (0 : Matrix n n 𝕜)) (r := 1)).subset ?_ | |
| intro U hU | |
| rw [Metric.mem_closedBall, dist_zero_right] | |
| exact entrywise_sup_norm_bound_of_unitary hU | |
| open scoped Matrix.Norms.Elementwise in | |
| exact Metric.isCompact_of_isClosed_isBounded isClosed_unitary <| | |
| isBounded_iff_forall_norm_le.mpr ⟨1, fun _ ↦ entrywise_sup_norm_bound_of_unitary⟩ |
Note you need to import Mathlib.Topology.Algebra.Star.Unitary to get the isClosed_unitary lemma.
| /-- The special unitary group `Matrix.specialUnitaryGroup n 𝕜` is closed inside | ||
| `Matrix n n 𝕜`. -/ | ||
| theorem isClosed_specialUnitaryGroup : | ||
| IsClosed (Matrix.specialUnitaryGroup n 𝕜 : Set (Matrix n n 𝕜)) := by | ||
| have h_inter : (Matrix.specialUnitaryGroup n 𝕜 : Set (Matrix n n 𝕜)) | ||
| = (Matrix.unitaryGroup n 𝕜 : Set (Matrix n n 𝕜)) ∩ { U | U.det = 1 } := by | ||
| ext U | ||
| simp [Matrix.specialUnitaryGroup, Set.mem_inter_iff] | ||
| rw [h_inter] | ||
| exact isClosed_unitaryGroup.inter (isClosed_singleton.preimage (by fun_prop)) |
There was a problem hiding this comment.
I would remove this an go directly for compactness.
| isCompact_unitaryGroup.of_isClosed_subset isClosed_specialUnitaryGroup | ||
| Matrix.specialUnitaryGroup_le_unitaryGroup |
There was a problem hiding this comment.
This doesn't need the previous result.
| isCompact_unitaryGroup.of_isClosed_subset isClosed_specialUnitaryGroup | |
| Matrix.specialUnitaryGroup_le_unitaryGroup | |
| isCompact_unitaryGroup.inter_right <| isClosed_singleton.preimage (by dsimp; fun_prop) |
Adds
CompactSpaceinstances (and supportingIsClosed/IsCompactlemmas) for the matrix unitary and special unitary groups.The compactness follows from Heine-Borel applied to the entrywise sup norm: every unitary matrix has all entries bounded by
1(via the existingentry_norm_bound_of_unitarylemma), andMatrix n n 𝕜is finite-dimensional, soclosed + bounded ⇒ compact.New declarations
isClosed_unitaryGroup,isCompact_unitaryGroupinstance Matrix.unitaryGroup.instCompactSpaceisClosed_specialUnitaryGroup,isCompact_specialUnitaryGroupinstance Matrix.specialUnitaryGroup.instCompactSpaceAll placed inside the existing
EntrywiseSupNormsection inMathlib/Analysis/CStarAlgebra/Matrix.lean, so theMatrix.Norms.Elementwisescope used for the bound is already in scope.Motivation
These instances enable downstream constructions of compact matrix Lie groups such as flag manifolds (e.g. SU(3)/T = F₂), where the quotient inherits compactness for free via
Quotient.compactSpace. They also fill an obvious gap in the matrix-group API:unitary Ris known to be closed, but compactness forMatrix.unitaryGroupwas not previously available as an instance.