{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Exercises from *A Book of Abstract Algebra* by *Charles C Pinter* solved in Raku.\n", "\n", "# 5.F. Groups Determined by Generators and Defining Equations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Helper function `zip-many`" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sub zip-many (@arrs) { #`(Sub|139734349541608) ... }" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sub zip-many (@arrs) { @arrs == 1 ?? @arrs[0][] !! [Z] @arrs }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The heart of the program: `generate`" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sub generate (%eqs, $s) { #`(Sub|139734349547384) ... }" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sub generate(%eqs, $s)\n", "{\n", " my @results;\n", "\n", " for %eqs.kv -> $key, $val {\n", " if $s ~~ /$key/ { @results.push($s.subst(/$key/, $val)); }\n", " if $s ~~ /$val/ { @results.push($s.subst(/$val/, $key)); }\n", " }\n", "\n", " .take for @results;\n", "\n", " .take for flat zip-many @results.map({ gather generate(%eqs, $_) });\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Subroutine to display the table" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sub table (@G, %eqs) { #`(Sub|139734349553312) ... }" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sub table(@G, %eqs)\n", "{\n", " printf \" |\"; for @G -> $y { printf \"%-5s|\", $y; }; say '';\n", "\n", " printf \"-----|\"; for @G -> $y { printf \"-----|\"; }; say '';\n", "\n", " for @G -> $x {\n", "\n", " printf \"%-5s|\", $x;\n", "\n", " for @G -> $y {\n", " my $result = (gather generate(%eqs, \"$x$y\")).first(* ∈ @G);\n", "\n", " printf \"%-5s|\", $result;\n", " }\n", " say ''\n", " } \n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** 5.G.1 **\n", "\n", "Let $G$ be the group:\n", "\n", "\\begin{align*}\n", "\\{e,a,b, b^2, ab, ab^2\\}\n", "\\end{align*}\n", "\n", "whose generators satisfy: \n", "\n", "\\begin{align*}\n", "a^2 & = e \\\\\n", "b^3 & = e \\\\\n", "ba & = ab^2\n", "\\end{align*}\n", "\n", "Write the table of $G$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " |e |a |b |bb |ab |abb |\n", "-----|-----|-----|-----|-----|-----|-----|\n", "e |e |a |b |bb |ab |abb |\n", "a |a |e |ab |abb |b |bb |\n", "b |b |abb |bb |e |a |ab |\n", "bb |bb |ab |e |b |abb |a |\n", "ab |ab |bb |abb |a |e |b |\n", "abb |abb |b |a |ab |bb |e |\n" ] } ], "source": [ "my @G = ;\n", "\n", "my %eqs = ; %eqs = '';\n", "\n", "table @G, %eqs;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**5.G.2**\n", "\n", "Let $G$ be the group\n", "\n", "\\begin{align*}\n", "\\{ e, a, b, b^2, b^3, ab, ab^2, ab^3 \\}\n", "\\end{align*}\n", "\n", "whose generators satisfy\n", "\n", "\\begin{align*}\n", "a^2 & = e \\\\\n", "b^4 & = e \\\\\n", "ba & = ab^3\n", "\\end{align*}\n", "\n", "Write the table of $G$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " |e |a |b |bb |bbb |ab |abb |abbb |\n", "-----|-----|-----|-----|-----|-----|-----|-----|-----|\n", "e |e |a |b |bb |bbb |ab |abb |abbb |\n", "a |a |e |ab |abb |abbb |b |bb |bbb |\n", "b |b |abbb |bb |bbb |e |a |ab |abb |\n", "bb |bb |abb |bbb |e |b |abbb |a |ab |\n", "bbb |bbb |ab |e |b |bb |abb |abbb |a |\n", "ab |ab |bbb |abb |abbb |a |e |b |bb |\n", "abb |abb |bb |abbb |a |ab |bbb |e |b |\n", "abbb |abbb |b |a |ab |abb |bb |bbb |e |\n" ] } ], "source": [ "my @G = ;\n", "\n", "my %eqs = ; %eqs = '';\n", "\n", "table @G, %eqs;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**5.G.3**\n", "\n", "Let $G$ be the group\n", "\n", "\\begin{align*}\n", "\\{ e, a, b, b^2, b^3, ab, ab^2, ab^3 \\}\n", "\\end{align*}\n", "\n", "whose generators satisfy\n", "\n", "\\begin{align*}\n", "a^4 & = e \\\\\n", "a^2 & = b^2 \\\\\n", "ba & = ab^3\n", "\\end{align*}\n", "\n", "Write the table of $G$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " |e |a |b |bb |bbb |ab |abb |abbb |\n", "-----|-----|-----|-----|-----|-----|-----|-----|-----|\n", "e |e |a |b |bb |bbb |ab |abb |abbb |\n", "a |a |bb |ab |abb |abbb |bbb |e |b |\n", "b |b |abbb |bb |bbb |e |a |ab |abb |\n", "bb |bb |abb |bbb |e |b |abbb |a |ab |\n", "bbb |bbb |ab |e |b |bb |abb |abbb |a |\n", "ab |ab |b |abb |abbb |a |bb |bbb |e |\n", "abb |abb |e |abbb |a |ab |b |bb |bbb |\n", "abbb |abbb |bbb |a |ab |abb |e |b |bb |\n" ] } ], "source": [ "my @G = ;\n", "\n", "my %eqs = ; %eqs = '';\n", "\n", "table @G, %eqs;" ] } ], "metadata": { "kernelspec": { "display_name": "Raku", "language": "raku", "name": "raku" }, "language_info": { "file_extension": ".raku", "mimetype": "text/x-raku", "name": "raku", "version": "6.d" } }, "nbformat": 4, "nbformat_minor": 2 }