Theory Classical_Groups
theory Classical_Groups
imports
Lie_Group
Linear_Algebra_More
begin
section ‹Matrix Groups›
subsection ‹Entry Type›
text ‹
What would be a good type for the entries of our matrices? Ideally, I would be able to talk about
matrices over reals $\mathbb{R}$, the complex numbers $\mathbb{C}$, and the quaternionic
skew-field $\mathbb{H}$. This is hard: only algebras and inner product spaces over $\mathbb{R}$
are well-supported in Isabelle's Main.
For now, for simplicity, I will work with real matrices only. Alternatively, one could try to
characterise the type class containing $\mathbb{R}$, $\mathbb{C}$, and $\mathbb{H}$ only.
Below is a first attempt to maintain at least some generality. I give some trivial type
instantiations, as a basic check.
However, locales are the way to go, in my opinion.
›
class real_normed_eucl = real_normed_field + euclidean_space
instance real_normed_eucl ⊆ euclidean_space by standard
instance real_normed_eucl ⊆ real_normed_field by standard
instance real_normed_eucl ⊆ topological_space by standard
instance real_normed_eucl ⊆ comm_ring by standard
instance real_normed_eucl ⊆ comm_ring_1 by standard
instance real_normed_eucl ⊆ real_algebra_1 by standard
instance vec :: (real_normed_eucl, finite) topological_space by standard
instance vec :: (real_normed_eucl, finite) euclidean_space by standard
instance real :: real_normed_eucl by standard
instance complex :: real_normed_eucl by standard
subsection ‹Mat(n, F)›
text‹
The set of all ‹'n›-vectors over a ‹topological_space› is a ‹topological_space›: this is proved in
‹Finite_Cartesian_Product›. Similar for vectors over a ‹euclidean_space›. Therefore, a vector of
vectors over a topological space (i.e. a matrix) is also a topological space.
We can thus define the identity as a chart; this is not superbly useful, but serves as a template
for charts for the multiplicative matrix groups later on.
›
lift_definition chart_mat::"(('a::real_normed_eucl,'n::finite)square_matrix, ('a,'n)square_matrix)chart"
is "(UNIV, UNIV, λm. m, λm. m)"
by (auto simp: homeomorphism_def)
subsection ‹GL(n, F)›
text ‹
We define polymorphic abbreviations for the carrier set of the general linear group as a
matrix group over a commutative ring. This group can be considered as the automorphism group
on arbitrary modules of non-commutative rings too, but one loses the isomorphism with matrices,
and I'm mostly interested in much more specific general linear groups anyway (namely, over real
and complex numbers). Using commutative rings (with 1) also means that determinants play nicely.
›
abbreviation in_GL::"('a::comm_ring_1,'n::finite)square_matrix ⇒ bool"
where "in_GL ≡ invertible"
abbreviation GL where "GL ≡ Collect in_GL"
text ‹
As an example for making the polymorphic ‹GL› concrete, we specify the general linear group
in four real/complex dimensions.›
abbreviation GL⇩R⇩4::"(real,4)square_matrix set" where "GL⇩R⇩4 ≡ GL"
abbreviation GL⇩C⇩4::"(complex,4)square_matrix set" where "GL⇩C⇩4 ≡ GL"
text ‹
PROBLEM: the inner product on the LHS is real, not complex,
which is why the commented line (involving complex multiplication) cannot work
(it only passes type checking because ‹complex_of_real› is a coercion).
›
lemma
assumes "x∈GL⇩C⇩4"
shows "((row i x ∙ row i x)::real) = (∑j∈UNIV. (row i x)$j ∙ (row i x)$j)"
by (simp add: inner_vec_def)
text ‹
We now define the chart that makes GL(n,F) a Lie group. Since a chart is a homeomorphism,
we first need to show that GL is an open set. Notice this GL is already restricted to
have much more powerful entries, since we require topology (continuity) now.
›
lemma GL_preimage_det: "det -` (UNIV - {0::'a::real_normed_eucl}) = GL"
proof (safe)
fix x::"('a::real_normed_eucl, 'n::finite) square_matrix"
assume "in_GL x"
then show "x ∈ det -` (UNIV - {0})"
using invertible_det_nz by auto
next
fix x::"('a::real_normed_eucl, 'n::finite) square_matrix"
assume "det x ≠ 0"
then show "in_GL x"
by (simp add: invertible_det_nz)
qed
lemma open_GL: "open (GL::('a::real_normed_eucl,'n::finite)square_matrix set)"
using open_vimage continuous_on_det GL_preimage_det
by (metis open_UNIV open_delete)
lift_definition chart_GL::"(('a::real_normed_eucl,'n::finite)square_matrix, ('a,'n)square_matrix)chart"
is "(GL, GL, λm. m, λm. m)"
by (auto simp: homeomorphism_def open_GL)
lift_definition real_chart_GL::"((real,'n::finite)square_matrix, (real,'n)square_matrix)chart"
is "(GL, GL, λm. m, λm. m)"
by (auto simp: homeomorphism_def open_GL)
lemma transfer_GL [simp]:
shows "domain chart_GL = GL"
and "codomain chart_GL = GL"
and "apply_chart chart_GL = (λx. x)"
and "inv_chart chart_GL = (λx. x)"
by (transfer, simp)+
abbreviation charts_GL where "charts_GL ≡ {chart_GL}"
abbreviation real_charts_GL where "real_charts_GL ≡ {real_chart_GL}"