bradencarlson / sage-jupyter

SageMath files (via Jupyter Notebooks) that give an introduction to using SageMath to explore select topics in Abstract Algebra and Cryptography. Note that no local installation of SageMath or Jupyter Notebooks is required to access and use this Project
MIT License
4 stars 3 forks source link
abstract-algebra jupyter-notebook mathematics sagemath

Project Website

Project Sage-Jupyter

SageMath files (via Jupyter Notebooks) that give an introduction to using SageMath to explore selected topics from Abstract Algebra.

Originally created as a project for Math 4220 at Southern Utah University, this Project will guide the user through installing SageMath and Jupyter Notebooks. Then we will introduce basic computations in SageMath. SageMath provides a rich environment for visualizing and experimenting with groups, rings, fields, as well as a few selected applications.

The goal of this Project is to help students everywhere, although it is primarily aimed at students of Abstract Algebra, to learn the syntax of SageMath, so as to provide them with a helpful tool to visualize and understand the topics taught in an undergraduate Abstract Algebra course. While doing this, the Project will also guide the user through a few important and very interesting applications of the theory that is being studied; such as the Ceasar Cipher, the RSA Encryption system, as well as Algebraic Coding theory.

No Installation? No Problem!

This Project may be used with no local installation of SageMath or Jupyter Notebooks. If no access to a local installation is available, please visit our Project's website to see all the examples in this project. Alternatively, all code used in this Project may be executed on the Sage Cell webpage. To do this, please visit the Python folder, and copy the code that needs to be run. This code should then be pasted into the cell at the webpage above and can then be executed.

In Addition to SageCell, which gives a feel for what it would be like to run this code from a terminal, CoCalc is an online alternative to Jupyter Notebooks that is compatible with all code in this project. This will allow the user to view the documents used in this Project just as they were designed to be seen in Jupyter Notebooks. To use this resource, download the code that needs to be run, (either the python code or the original .ipynb files, note that the latter will give prettier output), create an account with CoCalc, create a new project, and upload the file that needs to be executed. CoCalc is a free service, but there is a disclaimer that should be noted.

Getting Started

While the entirety of this Project may be used without installing SageMath or Jupyter Notebooks, the crux of this Project is to use both of these programs to help us better understand Abstract Algebra, thus, in this Project we will discuss how to install SageMath as well as how to install Jupyter Notebooks locally to get us up and running with both of these programs.

We will then guide the user on how to run a Jupyter Notebook Server. Once these preliminary tasks are taken care of, we begin the discussion of selected topics in Abstract Algebra. This will take place in a number of Jupyter Notebooks. Note that the sequence of these notebooks will follow the Youtube series of Abstract Algebra lectures given by Dr. Andrew Misseldine at Southen Utah University.

We will mention here that while learning the SageMath syntax is much like learning any other computer programming language, in that it is done through much trial and error, this project assumes that the user has little to no experience with SageMath or any other programming language. Thus included in this Project is a very basic introduction to the syntax and some basic ideas of any programming language; such as data types, conditional statements, variables, print statements, functions and classes, and more. All of the documents here in this Project are set up to run without the user having much knowledge about how the language works, although most code is either commented or coupled with notes to inform the user of what the code is trying to accomplish. Thus, any student of SageMath will find this Project helpful in their journey to using SageMath.

Package

This project can be found in a package on PyPi.

Note that this package, while found on PyPi, is made to be used with SageMath, and not Python. This package can be installed with the following command:

pip install sage-aata

And updated with the command

pip install --upgrade sage-aata

Series

This series can be followed however the user wishes, but was designed to go in the following order:

  1. Beginnings
    1. Install SageMath
    2. Install Jupyter Notebooks
    3. Running a Notebook
  2. Introduction
    1. Basic Introduction
    2. Conditionals and Iteration
    3. Dictionaries
    4. Functions and Classes
  3. Groups
    1. Modular Arithmetic
    2. Groups
    3. Subgroups
    4. Cosets
  4. Cryptography and Coding Theory
    1. Caesar Cipher
    2. Frequency Analysis
    3. Hill Cipher
    4. RSA Encryption
    5. Coding Theory
    6. Vigenere Cipher (optional)
    7. Autokey Cipher (optional)
  5. More Groups
    1. Isomorphisms and Direct Products
    2. Conjugacy Classes
    3. Matrix Groups
  6. Rings
    1. Rings
    2. Quotient Rings
  7. Group Rings
    1. Group Rings
  8. Polynomial Codes
    1. Polynomial Codes
    2. BCH Codes
  9. Fields
    1. Fields
    2. Galois Groups
    3. Solvability By Radicals

Miscellaneous Files

In the Misc folder, we discuss selected topics that do not neccessarily have to do with the Abstract Algebra course taught by Dr. Andrew Misseldine at Southern Utah University. In this folder we currently have files that dicuss:

We also have a few files written in c that implement some of the algorithms found in this project.

How to Help

If at any point while using this Project you encounter an error, you would like to see an additional topic discussed, or if any of the topics discussed are unclear or need more documentation, please feel free to fill out an Issues form under the Issues tab.

Please see our Contributing page for more information.