src/HOL/Algebra/Group.thy
changeset 70027 94494b92d8d0
parent 70019 095dce9892e8
child 70030 042ae6ca2c40
equal deleted inserted replaced
70019:095dce9892e8 70027:94494b92d8d0
   469 lemma (in group) int_pow_mult:
   469 lemma (in group) int_pow_mult:
   470   assumes "x \<in> carrier G" shows "x [^] (i + j::int) = x [^] i \<otimes> x [^] j"
   470   assumes "x \<in> carrier G" shows "x [^] (i + j::int) = x [^] i \<otimes> x [^] j"
   471 proof -
   471 proof -
   472   have [simp]: "-i - j = -j - i" by simp
   472   have [simp]: "-i - j = -j - i" by simp
   473   show ?thesis
   473   show ?thesis
   474     by (auto simp add: assms int_pow_def2 inv_solve_left inv_solve_right nat_add_distrib [symmetric] nat_pow_mult )
   474     by (auto simp: assms int_pow_def2 inv_solve_left inv_solve_right nat_add_distrib [symmetric] nat_pow_mult)
   475 qed
   475 qed
   476 
   476 
   477 lemma (in group) int_pow_inv:
   477 lemma (in group) int_pow_inv:
   478   "x \<in> carrier G \<Longrightarrow> (inv x) [^] (i :: int) = inv (x [^] i)"
   478   "x \<in> carrier G \<Longrightarrow> (inv x) [^] (i :: int) = inv (x [^] i)"
   479   by (simp add: nat_pow_inv int_pow_def2)
   479   by (metis int_pow_def2 nat_pow_inv)
   480 
   480 
   481 lemma (in group) int_pow_pow:
   481 lemma (in group) int_pow_pow:
   482   assumes "x \<in> carrier G"
   482   assumes "x \<in> carrier G"
   483   shows "(x [^] (n :: int)) [^] (m :: int) = x [^] (n * m :: int)"
   483   shows "(x [^] (n :: int)) [^] (m :: int) = x [^] (n * m :: int)"
   484 proof (cases)
   484 proof (cases)
   870   using assms unfolding hom_def by (auto simp add: Pi_iff)
   870   using assms unfolding hom_def by (auto simp add: Pi_iff)
   871 
   871 
   872 lemma (in group) hom_compose:
   872 lemma (in group) hom_compose:
   873   "[|h \<in> hom G H; i \<in> hom H I|] ==> compose (carrier G) i h \<in> hom G I"
   873   "[|h \<in> hom G H; i \<in> hom H I|] ==> compose (carrier G) i h \<in> hom G I"
   874 by (fastforce simp add: hom_def compose_def)
   874 by (fastforce simp add: hom_def compose_def)
       
   875 
       
   876 lemma (in group) restrict_hom_iff [simp]:
       
   877   "(\<lambda>x. if x \<in> carrier G then f x else g x) \<in> hom G H \<longleftrightarrow> f \<in> hom G H"
       
   878   by (simp add: hom_def Pi_iff)
   875 
   879 
   876 definition iso :: "_ => _ => ('a => 'b) set"
   880 definition iso :: "_ => _ => ('a => 'b) set"
   877   where "iso G H = {h. h \<in> hom G H \<and> bij_betw h (carrier G) (carrier H)}"
   881   where "iso G H = {h. h \<in> hom G H \<and> bij_betw h (carrier G) (carrier H)}"
   878 
   882 
   879 definition is_iso :: "_ \<Rightarrow> _ \<Rightarrow> bool" (infixr "\<cong>" 60)
   883 definition is_iso :: "_ \<Rightarrow> _ \<Rightarrow> bool" (infixr "\<cong>" 60)
  1580   using l_cancel_one by fastforce
  1584   using l_cancel_one by fastforce
  1581 
  1585 
  1582 lemma (in group) r_cancel_one' [simp]: "x \<in> carrier G \<Longrightarrow> a \<in> carrier G \<Longrightarrow> x = a \<otimes> x \<longleftrightarrow> a = one G"
  1586 lemma (in group) r_cancel_one' [simp]: "x \<in> carrier G \<Longrightarrow> a \<in> carrier G \<Longrightarrow> x = a \<otimes> x \<longleftrightarrow> a = one G"
  1583   using r_cancel_one by fastforce
  1587   using r_cancel_one by fastforce
  1584 
  1588 
       
  1589 declare pow_nat [simp] (*causes looping if added above, especially with int_pow_def2*)
       
  1590 
  1585 end
  1591 end