Knots are mathematical abstractions of objects you probably deal with everyday when you tie your shoes. Formally, a knot is a continuous map from a circle into 3-dimensional space. We consider two knots the same if we can "wiggle" one around until it looks like the other one. (More formally: if they are "ambient isotopic.") An interesting mathematical question is to decide when two knots are the same (or not). One way to do this is to use a "knot invariant," which is any quantity that can be computed from a knot that does not change when you wiggle the knot. Invariants need not be "complete," i.e. sometimes, two different knots have the same invariant. Every finite group G can be used to concoct an invariant of knots called the G-coloring invariant. These are quite powerful invariants, in the sense that usually different knots have different G-coloring invariants. Unfortunately, the more powerful the invariant, the harder it is to compute. This is actually true in a very precise sense that we will explore over the semester: deciding when a knot has a nontrivial G-coloring invariant is NP-complete.
This project consists of two separate but related parts. First, applying results from a previous semester's IGL project, we will build a "computer" that uses colorings of knots to affect computations. (More precisely, we will build a computer program that converts Boolean circuits into knots.) Second, we will build a visualizer for coloring invariants: a computer program that takes a picture of a knot and a finite group, and builds pictures of its various G-colorings. This project should produce some nice pictures, introduce you to some fun topology, and develop your programming experience.
Math 417, especially comfort with finite group theory.
Familiarity with Python is preferable.