src/HOL/Algebra/Generated_Groups.thy
changeset 68687 2976a4a3b126
parent 68608 4a4c2bc4b869
child 69122 1b5178abaf97
equal deleted inserted replaced
68685:4b367da119ed 68687:2976a4a3b126
   464 lemma (in group) derived_is_normal:
   464 lemma (in group) derived_is_normal:
   465   assumes "H \<lhd> G"
   465   assumes "H \<lhd> G"
   466   shows "derived G H \<lhd> G" unfolding derived_def
   466   shows "derived G H \<lhd> G" unfolding derived_def
   467 proof (rule normal_generateI)
   467 proof (rule normal_generateI)
   468   show "(\<Union>h1 \<in> H. \<Union>h2 \<in> H. { h1 \<otimes> h2 \<otimes> inv h1 \<otimes> inv h2 }) \<subseteq> carrier G"
   468   show "(\<Union>h1 \<in> H. \<Union>h2 \<in> H. { h1 \<otimes> h2 \<otimes> inv h1 \<otimes> inv h2 }) \<subseteq> carrier G"
   469     using subgroup.subset assms normal_invE(1) by blast
   469     using subgroup.subset assms normal_imp_subgroup by blast
   470 next
   470 next
   471   show "\<And>h g. \<lbrakk> h \<in> derived_set G H; g \<in> carrier G \<rbrakk> \<Longrightarrow> g \<otimes> h \<otimes> inv g \<in> derived_set G H"
   471   show "\<And>h g. \<lbrakk> h \<in> derived_set G H; g \<in> carrier G \<rbrakk> \<Longrightarrow> g \<otimes> h \<otimes> inv g \<in> derived_set G H"
   472   proof -
   472   proof -
   473     fix h g assume "h \<in> derived_set G H" and g: "g \<in> carrier G"
   473     fix h g assume "h \<in> derived_set G H" and g: "g \<in> carrier G"
   474     then obtain h1 h2 where h1: "h1 \<in> H" "h1 \<in> carrier G"
   474     then obtain h1 h2 where h1: "h1 \<in> H" "h1 \<in> carrier G"
   475                         and h2: "h2 \<in> H" "h2 \<in> carrier G"
   475                         and h2: "h2 \<in> H" "h2 \<in> carrier G"
   476                         and h:  "h = h1 \<otimes> h2 \<otimes> inv h1 \<otimes> inv h2"
   476                         and h:  "h = h1 \<otimes> h2 \<otimes> inv h1 \<otimes> inv h2"
   477       using subgroup.subset assms normal_invE(1) by blast
   477       using subgroup.subset assms normal_imp_subgroup by blast
   478     hence "g \<otimes> h \<otimes> inv g =
   478     hence "g \<otimes> h \<otimes> inv g =
   479            g \<otimes> h1 \<otimes> (inv g \<otimes> g) \<otimes> h2 \<otimes> (inv g \<otimes> g) \<otimes> inv h1 \<otimes> (inv g \<otimes> g) \<otimes> inv h2 \<otimes> inv g"
   479            g \<otimes> h1 \<otimes> (inv g \<otimes> g) \<otimes> h2 \<otimes> (inv g \<otimes> g) \<otimes> inv h1 \<otimes> (inv g \<otimes> g) \<otimes> inv h2 \<otimes> inv g"
   480       by (simp add: g m_assoc)
   480       by (simp add: g m_assoc)
   481     also
   481     also
   482     have " ... =
   482     have " ... =
   484       using g h1 h2 m_assoc inv_closed m_closed by presburger
   484       using g h1 h2 m_assoc inv_closed m_closed by presburger
   485     finally
   485     finally
   486     have "g \<otimes> h \<otimes> inv g =
   486     have "g \<otimes> h \<otimes> inv g =
   487          (g \<otimes> h1 \<otimes> inv g) \<otimes> (g \<otimes> h2 \<otimes> inv g) \<otimes> inv (g \<otimes> h1 \<otimes> inv g) \<otimes> inv (g \<otimes> h2 \<otimes> inv g)"
   487          (g \<otimes> h1 \<otimes> inv g) \<otimes> (g \<otimes> h2 \<otimes> inv g) \<otimes> inv (g \<otimes> h1 \<otimes> inv g) \<otimes> inv (g \<otimes> h2 \<otimes> inv g)"
   488       by (simp add: g h1 h2 inv_mult_group m_assoc)
   488       by (simp add: g h1 h2 inv_mult_group m_assoc)
   489     moreover have "g \<otimes> h1 \<otimes> inv g \<in> H" by (simp add: assms normal_invE(2) g h1)
   489     moreover have "g \<otimes> h1 \<otimes> inv g \<in> H" by (simp add: assms normal.inv_op_closed2 g h1)
   490     moreover have "g \<otimes> h2 \<otimes> inv g \<in> H" by (simp add: assms normal_invE(2) g h2)
   490     moreover have "g \<otimes> h2 \<otimes> inv g \<in> H" by (simp add: assms normal.inv_op_closed2 g h2)
   491     ultimately show "g \<otimes> h \<otimes> inv g \<in> derived_set G H" by blast
   491     ultimately show "g \<otimes> h \<otimes> inv g \<in> derived_set G H" by blast
   492   qed
   492   qed
   493 qed
   493 qed
   494 
   494 
   495 corollary (in group) derived_self_is_normal: "derived G (carrier G) \<lhd> G"
   495 corollary (in group) derived_self_is_normal: "derived G (carrier G) \<lhd> G"