4 Author: Clemens Ballarin, started 4 February 2003 |
4 Author: Clemens Ballarin, started 4 February 2003 |
5 |
5 |
6 Based on work by Florian Kammueller, L C Paulson and Markus Wenzel. |
6 Based on work by Florian Kammueller, L C Paulson and Markus Wenzel. |
7 *) |
7 *) |
8 |
8 |
9 header {* Algebraic Structures up to Commutative Groups *} |
9 header {* Groups *} |
10 |
10 |
11 theory Group = FuncSet: |
11 theory Group = FuncSet: |
12 |
12 |
13 axclass number < type |
13 (* axclass number < type |
14 |
14 |
15 instance nat :: number .. |
15 instance nat :: number .. |
16 instance int :: number .. |
16 instance int :: number .. *) |
17 |
17 |
18 section {* From Magmas to Groups *} |
18 section {* From Magmas to Groups *} |
19 |
19 |
20 text {* |
20 text {* |
21 Definitions follow Jacobson, Basic Algebra I, Freeman, 1985; with |
21 Definitions follow Jacobson, Basic Algebra I, Freeman, 1985; with |
414 locale subgroup = submagma H G + |
414 locale subgroup = submagma H G + |
415 assumes one_closed [intro, simp]: "\<one> \<in> H" |
415 assumes one_closed [intro, simp]: "\<one> \<in> H" |
416 and m_inv_closed [intro, simp]: "x \<in> H ==> inv x \<in> H" |
416 and m_inv_closed [intro, simp]: "x \<in> H ==> inv x \<in> H" |
417 |
417 |
418 declare (in subgroup) group.intro [intro] |
418 declare (in subgroup) group.intro [intro] |
419 (* |
419 |
420 lemma (in subgroup) l_oneI [intro]: |
|
421 includes l_one G |
|
422 shows "l_one (G(| carrier := H |))" |
|
423 by rule simp_all |
|
424 *) |
|
425 lemma (in subgroup) group_axiomsI [intro]: |
420 lemma (in subgroup) group_axiomsI [intro]: |
426 includes group G |
421 includes group G |
427 shows "group_axioms (G(| carrier := H |))" |
422 shows "group_axioms (G(| carrier := H |))" |
428 by rule (auto intro: l_inv r_inv simp add: Units_def) |
423 by rule (auto intro: l_inv r_inv simp add: Units_def) |
429 |
424 |
509 "[('a, 'm) monoid_scheme, ('b, 'n) monoid_scheme] => ('a \<times> 'b) monoid" |
504 "[('a, 'm) monoid_scheme, ('b, 'n) monoid_scheme] => ('a \<times> 'b) monoid" |
510 (infixr "\<times>\<^sub>g" 80) |
505 (infixr "\<times>\<^sub>g" 80) |
511 "G \<times>\<^sub>g H == (| carrier = carrier (G \<times>\<^sub>s H), |
506 "G \<times>\<^sub>g H == (| carrier = carrier (G \<times>\<^sub>s H), |
512 mult = mult (G \<times>\<^sub>s H), |
507 mult = mult (G \<times>\<^sub>s H), |
513 one = (one G, one H) |)" |
508 one = (one G, one H) |)" |
514 (* |
|
515 DirProdGroup :: |
|
516 "[('a, 'm) group_scheme, ('b, 'n) group_scheme] => ('a \<times> 'b) group" |
|
517 (infixr "\<times>\<^sub>g" 80) |
|
518 "G \<times>\<^sub>g H == (| carrier = carrier (G \<times>\<^sub>m H), |
|
519 mult = mult (G \<times>\<^sub>m H), |
|
520 one = one (G \<times>\<^sub>m H), |
|
521 m_inv = (%(g, h). (m_inv G g, m_inv H h)) |)" |
|
522 *) |
|
523 |
509 |
524 lemma DirProdSemigroup_magma: |
510 lemma DirProdSemigroup_magma: |
525 includes magma G + magma H |
511 includes magma G + magma H |
526 shows "magma (G \<times>\<^sub>s H)" |
512 shows "magma (G \<times>\<^sub>s H)" |
527 by rule (auto simp add: DirProdSemigroup_def) |
513 by rule (auto simp add: DirProdSemigroup_def) |
657 by (simp add: hom_mult [symmetric] H.r_inv del: hom_mult) |
643 by (simp add: hom_mult [symmetric] H.r_inv del: hom_mult) |
658 finally have "h x \<otimes>\<^sub>2 h (inv x) = h x \<otimes>\<^sub>2 inv\<^sub>2 (h x)" . |
644 finally have "h x \<otimes>\<^sub>2 h (inv x) = h x \<otimes>\<^sub>2 inv\<^sub>2 (h x)" . |
659 with x show ?thesis by simp |
645 with x show ?thesis by simp |
660 qed |
646 qed |
661 |
647 |
662 section {* Commutative Structures *} |
648 subsection {* Commutative Structures *} |
663 |
649 |
664 text {* |
650 text {* |
665 Naming convention: multiplicative structures that are commutative |
651 Naming convention: multiplicative structures that are commutative |
666 are called \emph{commutative}, additive structures are called |
652 are called \emph{commutative}, additive structures are called |
667 \emph{Abelian}. |
653 \emph{Abelian}. |