Theory Topological_Group_Examples

✐‹creator "Niklas Krofta"›
section ‹Examples of Topological Groups›
theory Topological_Group_Examples
  imports Topological_Group
begin

paragraph ‹Summary›
text ‹This section gives examples of topological groups.›

lemma (in group) discrete_topological_group:
  shows "topological_group G (discrete_topology (carrier G))"
proof -               
  let ?T = "discrete_topology (carrier G)"
  have "topspace ?T = carrier G" using topspace_discrete_topology by force
  moreover have "continuous_map (prod_topology ?T ?T) ?T (λ(σ,τ). σ  τ)" 
    unfolding prod_topology_discrete_topology[symmetric] by auto
  ultimately show ?thesis unfolding topological_group_def topological_group_axioms_def by fastforce
qed

lemma topological_group_real_power_space:
  defines " :: (real^'n) monoid  carrier = UNIV, mult = (+), one = 0"
  defines "T :: (real^'n) topology  euclidean"
  shows "topological_group  T"
proof -
  have "x  Units " for x
  proof -
    have "x -x = 𝟭⇙" "-x x = 𝟭⇙" using ℜ_def by auto
    then show ?thesis unfolding Units_def ℜ_def by fastforce
  qed
  then have group: "group " by (unfold_locales) (auto simp: ℜ_def)
  then interpret group  by auto
  have group_is_space: "topspace T = carrier "
    unfolding ℜ_def T_def by force
  have mul_continuous: "continuous_map (prod_topology T T) T (λ(x,y). x y)"
    using continuous_map_add[OF continuous_map_fst continuous_map_snd]
    unfolding T_def ℜ_def by (simp add: case_prod_beta')
  have "(-x) x = 𝟭⇙" for x unfolding ℜ_def by auto
  then have "invx = -x" for x using inv_equality ℜ_def by simp
  moreover have "continuous_map T T uminus" unfolding T_def by force
  ultimately have "continuous_map T T (λx. invx)" by simp
  then show ?thesis using group_is_space mul_continuous group
    unfolding topological_group_def topological_group_axioms_def by blast
qed

definition unit_group :: "('a :: field) monoid" where
"unit_group = carrier = UNIV - {0}, mult = (*), one = 1" 

lemma 
  group_unit_group: "group unit_group" and
  inv_unit_group: "x  carrier unit_group  invunit_groupx = inverse x"
proof -
  have "x  Units unit_group" if "x  0" for x
  proof -
    have "x unit_group1/x = 𝟭unit_group⇙" "1/x unit_groupx = 𝟭unit_group⇙" 
      using that unfolding unit_group_def by auto
    then show ?thesis unfolding Units_def unit_group_def using that by fastforce
  qed
  then show "group unit_group" by (unfold_locales) (auto simp: unit_group_def)
  then interpret group unit_group by blast
  show "invunit_groupx = inverse x" if "x  carrier unit_group"
    using that inv_equality[of "inverse x"] unfolding unit_group_def by simp
qed

lemma topological_group_real_unit_group:
  defines "T :: real topology  subtopology euclidean (UNIV - {0})"
  shows "topological_group unit_group T"
proof -
  let ?ℜ = "unit_group :: real monoid"
  have group_is_space: "topspace T = carrier ?ℜ" unfolding unit_group_def T_def by force
  have "continuous_map (prod_topology euclidean euclidean) euclidean (λ(x,y). x ?ℜy)"
    using continuous_map_real_mult[OF continuous_map_fst continuous_map_snd]
    unfolding T_def unit_group_def by (simp add: case_prod_beta')
  then have "continuous_map (prod_topology T T) euclideanreal (λ(x,y). x ?ℜy)"
    unfolding T_def subtopology_Times[symmetric] using continuous_map_from_subtopology by blast
  moreover have "(λ(x,y). x ?ℜy)  topspace (prod_topology T T)  UNIV - {0}"
    unfolding T_def unit_group_def by fastforce
  ultimately have mul_continuous: "continuous_map (prod_topology T T) T (λ(x,y). x ?ℜy)"
    unfolding T_def using continuous_map_into_subtopology by blast
  have "continuous_map T euclideanreal inverse" 
    using continuous_map_real_inverse[of T id] unfolding T_def by auto
  moreover have "inverse  topspace T  topspace T" unfolding T_def by fastforce
  ultimately have "continuous_map T T inverse" 
    unfolding T_def using continuous_map_into_subtopology by auto
  then have "continuous_map T T (λx. inv?ℜx)" 
    using group_is_space continuous_map_eq inv_unit_group by metis
  then show ?thesis using group_is_space mul_continuous group_unit_group
    unfolding topological_group_def topological_group_axioms_def by blast
qed

end