1 Commits

Author SHA1 Message Date
df91fd9f96 Incomplete port 2025-10-02 07:56:09 -07:00
61 changed files with 3202 additions and 133843 deletions

View File

@ -26,7 +26,7 @@ jobs:
- name: "Download Typstyle"
run: |
wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.13.17/typstyle-x86_64-unknown-linux-musl"
wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.12.14/typstyle-x86_64-unknown-linux-musl"
chmod +x typstyle-x86_64-unknown-linux-musl
- name: Check typst formatting
@ -62,7 +62,7 @@ jobs:
# more control anyway.
- name: "Download Typst"
run: |
wget -q "https://github.com/typst/typst/releases/download/v0.13.1/typst-x86_64-unknown-linux-musl.tar.xz"
wget -q "https://github.com/typst/typst/releases/download/v0.12.0/typst-x86_64-unknown-linux-musl.tar.xz"
tar -xf "typst-x86_64-unknown-linux-musl.tar.xz"
mv "typst-x86_64-unknown-linux-musl/typst" .
rm "typst-x86_64-unknown-linux-musl.tar.xz"

View File

@ -3,10 +3,13 @@
// Re-exports
// All functions that maybe used by client code are listed here
#import "misc.typ": *
#import "object.typ": definition, example, generic, problem, remark, theorem
#import "object.typ": problem, definition, theorem, example, remark, generic
#import "solution.typ": (
if_no_solutions, if_solutions, if_solutions_else, instructornote, review_box,
sample_solution, solution,
if_solutions,
if_no_solutions,
if_solutions_else,
solution,
instructornote,
)
@ -30,17 +33,15 @@
by: none,
subtitle: none,
short_warning: false,
page_numbers: true,
) = {
set page(
margin: 20mm,
width: 8.5in,
height: 11in,
footer: {
if page_numbers {
align(center, context counter(page).display())
}
},
footer: align(
center,
context counter(page).display(),
),
footer-descent: 5mm,
)
@ -56,8 +57,6 @@
justify: true,
)
set math.mat(delim: "[")
//
// List style
set list(
@ -103,8 +102,8 @@
// Make handout title
{
import "header.typ": make_header, short_solution_warning, solution_warning
import "solution.typ": reset_solutions, solutions_state
import "header.typ": make_header, solution_warning, short_solution_warning
import "solution.typ": solutions_state, reset_solutions
reset_solutions()

View File

@ -29,7 +29,11 @@
}
// Render the object
block(above: 8mm, below: 2mm, text(weight: "bold", obj_content))
block(
above: 8mm,
below: 2mm,
text(weight: "bold", obj_content),
)
// Generate labeled metadata for this object.
//
@ -53,7 +57,7 @@
if not (
it.element != none
and it.element.has("value")
and type(it.element.value) == dictionary
and type(it.element.value) == "dictionary"
and it.element.value.keys().contains(magic_key)
) {
// This label is not attached to object metadata
@ -96,5 +100,9 @@
#let remark = _mkobj("Remark")
#let generic(obj_content) = {
block(above: 8mm, below: 2mm, text(weight: "bold", obj_content))
block(
above: 8mm,
below: 2mm,
text(weight: "bold", obj_content),
)
}

View File

@ -1,4 +1,4 @@
#import "misc.typ": oblue, ored
#import "misc.typ": ored, oblue
/// If false, hide instructor info.
@ -61,94 +61,57 @@
}
#let solution(content) = {
if_solutions(align(center, stack(
block(
width: 100%,
breakable: false,
fill: ored,
stroke: ored + 2pt,
inset: 1.5mm,
align(left, text(fill: white, weight: "bold", [Solution:])),
),
if_solutions(
align(
center,
stack(
block(
width: 100%,
breakable: false,
fill: ored,
stroke: ored + 2pt,
inset: 1.5mm,
align(left, text(fill: white, weight: "bold", [Solution:])),
),
block(
width: 100%,
height: auto,
breakable: false,
fill: ored.lighten(80%).desaturate(10%),
stroke: ored + 2pt,
inset: 3mm,
align(left, content),
block(
width: 100%,
height: auto,
breakable: false,
fill: ored.lighten(80%).desaturate(10%),
stroke: ored + 2pt,
inset: 3mm,
align(left, content),
),
),
),
)))
)
}
#let sample_solution(content) = {
align(center, stack(
block(
width: 100%,
breakable: false,
fill: oblue,
stroke: oblue + 2pt,
inset: 1.5mm,
align(left, text(fill: white, weight: "bold", [Sample Solution:])),
),
block(
width: 100%,
height: auto,
breakable: false,
fill: oblue.lighten(80%).desaturate(10%),
stroke: oblue + 2pt,
inset: 3mm,
align(left, content),
),
))
}
#let review_box(title, content) = {
align(center, stack(
block(
width: 100%,
breakable: false,
fill: oblue,
stroke: oblue + 2pt,
inset: 1.5mm,
align(left, text(fill: white, weight: "bold", title)),
),
block(
width: 100%,
height: auto,
breakable: false,
fill: oblue.lighten(80%).desaturate(10%),
stroke: oblue + 2pt,
inset: 3mm,
align(left, content),
),
))
}
#let instructornote(content) = {
if_solutions(align(center, stack(
block(
width: 100%,
breakable: false,
fill: oblue,
stroke: oblue + 2pt,
inset: 1.5mm,
align(left, text(fill: white, weight: "bold", [Instructor note:])),
),
if_solutions(
align(
center,
stack(
block(
width: 100%,
breakable: false,
fill: oblue,
stroke: oblue + 2pt,
inset: 1.5mm,
align(left, text(fill: white, weight: "bold", [Instructor note:])),
),
block(
width: 100%,
height: auto,
breakable: false,
fill: oblue.lighten(80%).desaturate(10%),
stroke: oblue + 2pt,
inset: 3mm,
align(left, content),
block(
width: 100%,
height: auto,
breakable: false,
fill: oblue.lighten(80%).desaturate(10%),
stroke: oblue + 2pt,
inset: 3mm,
align(left, content),
),
),
),
)))
)
}

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= Floats
#definition()
@ -31,71 +31,75 @@ Rewrite the following binary decimals in base 10: \
#definition(label: "floatbits")
Another way we can interpret a bit string is as a _signed floating-point decimal_, or a `float` for short. \
Floats represent a subset of the real numbers, and are interpreted as follows: \
#note(
[The following only applies to floats that consist of 32 bits. We won't encounter any others today.],
#note([The following only applies to floats that consist of 32 bits. We won't encounter any others today.])
#align(
center,
box(
inset: 2mm,
cetz.canvas({
import cetz.draw: *
let chars = (
`0`,
`b`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
)
let x = 0
for c in chars {
content((x, 0), c)
x += 0.25
}
let y = -0.4
line((0.3, y), (0.65, y))
content((0.45, y - 0.2), [s])
line((0.85, y), (2.9, y))
content((1.9, y - 0.2), [exponent])
line((3.10, y), (9.4, y))
content((6.3, y - 0.2), [fraction])
}),
),
)
#align(center, box(inset: 2mm, cetz.canvas({
import cetz.draw: *
let chars = (
`0`,
`b`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`_`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
`0`,
)
let x = 0
for c in chars {
content((x, 0), c)
x += 0.25
}
let y = -0.4
line((0.3, y), (0.65, y))
content((0.45, y - 0.2), [s])
line((0.85, y), (2.9, y))
content((1.9, y - 0.2), [exponent])
line((3.10, y), (9.4, y))
content((6.3, y - 0.2), [fraction])
})))
- The first bit denotes the sign of the float's value
We'll label it $s$. \
If $s = #text([`1`])$, this float is negative; if $s = #text([`0`])$, it is positive.

View File

@ -1,6 +1,6 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz-plot:0.1.2": chart, plot
#import "@preview/cetz:0.3.1"
#import "@preview/cetz-plot:0.1.0": plot, chart
= Integers and Floats
@ -44,11 +44,19 @@ This allows us to improve the average error of our linear approximation:
{
let domain = (0, 1)
plot.add(f1, domain: domain, label: $log(1+x)$, style: (
stroke: ogrape,
))
plot.add(
f1,
domain: domain,
label: $log(1+x)$,
style: (stroke: ogrape),
)
plot.add(f2, domain: domain, label: $x$, style: (stroke: oblue))
plot.add(
f2,
domain: domain,
label: $x$,
style: (stroke: oblue),
)
},
)
})
@ -82,11 +90,19 @@ This allows us to improve the average error of our linear approximation:
{
let domain = (0, 1)
plot.add(f1, domain: domain, label: $log(1+x)$, style: (
stroke: ogrape,
))
plot.add(
f1,
domain: domain,
label: $log(1+x)$,
style: (stroke: ogrape),
)
plot.add(f2, domain: domain, label: $x$, style: (stroke: oblue))
plot.add(
f2,
domain: domain,
label: $x$,
style: (stroke: oblue),
)
},
)
})
@ -104,13 +120,16 @@ We won't bother with this---we'll simply leave the correction term as an opaque
#v(1fr)
#note(type: "Note", [
"Average error" above is simply the area of the region between the two graphs:
$
integral_0^1 abs(#v(1mm) log(1+x)_2 - (x+epsilon) #v(1mm))
$
Feel free to ignore this note, it isn't a critical part of this handout.
])
#note(
type: "Note",
[
"Average error" above is simply the area of the region between the two graphs:
$
integral_0^1 abs( #v(1mm) log(1+x)_2 - (x+epsilon) #v(1mm))
$
Feel free to ignore this note, it isn't a critical part of this handout.
],
)
#pagebreak()
@ -130,11 +149,12 @@ $
Let $E$ and $F$ be the exponent and float bits of $x_f$. \
We then have:
$
log_2(x_f) & = log_2 ( 2^(E-127) times (1 + (F) / (2^23)) ) \
& = E - 127 + log_2(1 + F / (2^23)) \
& approx E-127 + F / (2^23) + epsilon \
& = 1 / (2^23)(2^23 E + F) - 127 + epsilon \
& = 1 / (2^23)(x_i) - 127 + epsilon
log_2(x_f)
&= log_2 ( 2^(E-127) times (1 + (F) / (2^23)) ) \
&= E - 127 + log_2(1 + F / (2^23)) \
& approx E-127 + F / (2^23) + epsilon \
&= 1 / (2^23)(2^23 E + F) - 127 + epsilon \
&= 1 / (2^23)(x_i) - 127 + epsilon
$
])

View File

@ -156,9 +156,9 @@ float Q_rsqrt( float number ) {
Using a calculator and some basic algebra, we can find the $epsilon$ this code uses: \
#note[Remember, #text[`0x5f3759df`] is $6240089$ in hexadecimal.]
$
(3 times 2^22) (127 - epsilon) & = 6240089 \
(127 - epsilon) & = 126.955 \
epsilon & = 0.0450466
(3 times 2^22) (127 - epsilon) &= 6240089 \
(127 - epsilon) &= 126.955 \
epsilon &= 0.0450466
$
So, $0.045$ is the $epsilon$ used by Quake. \

View File

@ -0,0 +1,35 @@
#import "@local/handout:0.1.0": *
#show: handout.with(
title: [Intro to Quantum Computing],
by: "Mark",
)
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
#include "src/parts/01 bits.typ"
#pagebreak()
#include "src/parts/02 qubit.typ"
#pagebreak()
#include "src/parts/03 two qubits.typ"
#pagebreak()
// DONE UNTIL HERE
#include "src/parts/04 logic gates.typ"
#pagebreak()
#include "src/parts/05 quantum gates.typ"
#pagebreak()
#include "src/parts/06 hxh.typ"
#pagebreak()
#include "src/parts/07 superdense.typ"
#pagebreak()
#include "src/parts/08 teleport.typ"

View File

@ -27,7 +27,7 @@ We'll represent this probabilistic bit's \textit{state} as a vector:
$\left[\begin{smallmatrix}
p_0 \\ p_1
\end{smallmatrix}\right]$ \par
We do \textbf{not} assume this coin is fair---$p_0$ might not equal $p_1$.
We do \textbf{not} assume this coin is fair, and thus $p_0$ might not equal $p_1$.
\note{
This may seem a bit redundant: since $p_0 + p_1$, we can always calculate one probability given the other. \\
@ -45,16 +45,15 @@ The simplest probabilistic bit states are of course $[0]$ and $[1]$, defined as
\item $[0] = \left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$
\item $[1] = \left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$
\end{itemize}
That is, $[0]$ represents a bit that we know to be \texttt{0}, \par
That is, $[0]$ represents a bit that we known to be \texttt{0}, \par
and $[1]$ represents a bit we know to be \texttt{1}.
\vfill
\pagebreak
\definition{}
$[0]$ and $[1]$ form a \textit{basis} for all possible probabilistic bit states. This means that \par
every other probabilistic bit can be written as a \textit{linear combination} of $[0]$ and $[1]$:
$[0]$ and $[1]$ form a \textit{basis} for all possible probabilistic bit states: \par
Every other probabilistic bit can be written as a \textit{linear combination} of $[0]$ and $[1]$:
\begin{equation*}
\begin{bmatrix} p_0 \\ p_1 \end{bmatrix}
@ -67,6 +66,7 @@ every other probabilistic bit can be written as a \textit{linear combination} of
\vfill
\pagebreak
\problem{}
Every possible state of a probabilistic bit is a two-dimensional vector. \par
@ -118,10 +118,6 @@ Draw all possible states on the axis below.
%
% MARK: measure
%
\section{Measuring Probabilistic Bits}
@ -129,7 +125,7 @@ Draw all possible states on the axis below.
\definition{}
As we noted before, a probabilistic bit represents a coin we've tossed but haven't looked at. \par
We do not know whether the bit is \texttt{0} or \texttt{1}, but we do know the probability of each outcome. \par
We do not know whether the bit is \texttt{0} or \texttt{1}, but we do know the probability of both of these outcomes. \par
\vspace{2mm}
@ -139,7 +135,7 @@ knowledge of its state is updated to either $[0]$ or $[1]$, since we now certain
\vspace{2mm}
Since measurement changes what we know about a probabilistic bit, it changes the probabilistic bit's state.
When we measure a bit, its state \textit{collapses} to either $[0]$ or $[1]$, and the original state of the
When we measure a bit, it's state \textit{collapses} to either $[0]$ or $[1]$, and the original state of the
bit vanishes. We \textit{cannot} recover the state $[x_0, x_1]$ from a measured probabilistic bit.
@ -169,10 +165,7 @@ Say $[x] = [\nicefrac{2}{3}, \nicefrac{1}{3}]$ and $[y] = [\nicefrac{3}{4}, \nic
\item If we measure $y$ first and observe \texttt{1}, \par
what is the probability of getting each of \texttt{00}, \texttt{01}, \texttt{10}, and \texttt{11}?
\end{itemize}
\note[Note]{
$[x]$ and $[y]$ are column vectors in the previous pages, and are still column vectors here. \par
I've written them horizontally to save space.
}
\note[Note]{$[x]$ and $[y]$ are column vectors, but I've written them horizontally to save space.}
\vfill
@ -196,9 +189,7 @@ What is the probability that $x$ and $y$ produce different outcomes?
%
% MARK: tensor product
%
\section{Tensor Products}
@ -324,7 +315,7 @@ $?
\problem{}
What is the \textit{span} of the vectors we found in \ref{basistp}? \par
In other words, what is the set of all vectors that can be written as linear combinations of the vectors above?
In other words, what is the set of vectors that can be written as linear combinations of the vectors above?
\vfill
@ -396,7 +387,7 @@ Compute the following. Is the result what we'd expect?
\problem{}<fivequant>
Writing $[0] \otimes [1]$ is tedious. We'll shorten this notation to $[01]$. \par
Of course, writing $[0] \otimes [1]$ is a bit excessive. We'll shorten this notation to $[01]$. \par
\vspace{2mm}
@ -438,9 +429,9 @@ Write the three-bit states $[0]$ through $[7]$ as column vectors. \par
%
% MARK: ops
%
@ -452,6 +443,25 @@ Write the three-bit states $[0]$ through $[7]$ as column vectors. \par
Now that we can write probabilistic bits as vectors, we can represent operations on these bits
with linear transformations---in other words, as matrices.
\definition{}
Consider the NOT gate, which operates as follows: \par
\begin{itemize}
\item $\text{NOT}[0] = [1]$
\item $\text{NOT}[1] = [0]$
\end{itemize}
What should NOT do to a probabilistic bit $[x_0, x_1]$? \par
If we return to our coin analogy, we can think of the NOT operation as
flipping a coin we have already tossed, without looking at its state.
Thus,
\begin{equation*}
\text{NOT} \begin{bmatrix}
x_0 \\ x_1
\end{bmatrix} = \begin{bmatrix}
x_1 \\ x_0
\end{bmatrix}
\end{equation*}
\begin{hobox}{Review: Multiplying Vectors by Matrices}{black!10!white}{black!65!white}
\begin{equation*}
Av =
@ -472,10 +482,6 @@ with linear transformations---in other words, as matrices.
Note that each element of $Av$ is the dot product of a row in $A$ and a column in $v$.
\end{hobox}
\generic{Remark:}
Also, recall that every matrix is linear map, and that every linear map may be written as a matrix. \par
We often use the terms \textit{matrix}, \textit{transformation}, and \textit{linear map} interchangeably.
\problem{}
Compute the following product:
\begin{equation*}
@ -490,23 +496,12 @@ Compute the following product:
\vfill
\definition{}
Consider the NOT gate, which operates as follows: \par
\begin{itemize}
\item $\text{NOT}[0] = [1]$
\item $\text{NOT}[1] = [0]$
\end{itemize}
What should NOT do to a probabilistic bit $[x_0, x_1]$? \par
If we return to our coin analogy, we can think of the NOT operation as
flipping a coin we have already tossed, without looking at its state.
Thus,
\begin{equation*}
\text{NOT} \begin{bmatrix}
x_0 \\ x_1
\end{bmatrix} = \begin{bmatrix}
x_1 \\ x_0
\end{bmatrix}
\end{equation*}
\generic{Remark:}
Also, recall that every matrix is linear map, and that every linear map may be written as a matrix. \par
We often use the terms \textit{matrix}, \textit{transformation}, and \textit{linear map} interchangeably.
\pagebreak
\problem{}
Find the matrix that represents the NOT operation on one probabilistic bit.
@ -521,8 +516,6 @@ Find the matrix that represents the NOT operation on one probabilistic bit.
\vfill
\pagebreak
\problem{Extension by linearity}
Say we have an arbitrary operation $M$. \par

View File

@ -0,0 +1,349 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
= Probabilistic Bits
#definition()
As we already know, a _classical bit_ may take the values `0` and `1`.
We can model this with a two-sided coin, one face of which is labeled `0`, and the other, `1`.
#v(2mm)
Of course, if we toss such a "bit-coin," we'll get either `0` or `1`.
We'll denote the probability of getting `0` as $p_0$, and the probability of getting `1` as $p_1$.
As with all probabilities, $p_0 + p_1$ must be equal to 1.
#v(1fr)
#definition()
Say we toss a "bit-coin" and don't observe the result. We now have a _probabilistic bit_, with a probability $p_0$ of being `0`, and a probability $p_1$ of being `1`.
#v(2mm)
We'll represent this probabilistic bit's _state_ as a vector: $mat(p_0; p_1)$
We do *not* assume this coin is fair, and thus $p_0$ might not equal $p_1$.
#note[This may seem a bit redundant: since $p_0 + p_1 = 1$, we can always calculate one probability given the other. We'll still include both probabilities in the state vector, since this provides a clearer analogy to quantum bits.]
#v(1fr)
#definition()
The simplest probabilistic bit states are of course $[0]$ and $[1]$, defined as follows:
- $[0] = mat(1; 0)$
- $[1] = mat(0; 1)$
That is, $[0]$ represents a bit that we known to be `0`, and $[1]$ represents a bit we know to be `1`.
#v(1fr)
#definition()
$[0]$ and $[1]$ form a _basis_ for all possible probabilistic bit states:
Every other probabilistic bit can be written as a _linear combination_ of $[0]$ and $[1]$:
$ mat(p_0; p_1) = p_0 mat(1; 0) + p_1 mat(0; 1) = p_0 [0] + p_1 [1] $
#v(1fr)
#pagebreak()
#problem()
Every possible state of a probabilistic bit is a two-dimensional vector.
Draw all possible states on the axis below.
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (frame: "rect", stroke: none, fill: none, padding: .25))
scale(200%)
line(
(0, 1.5),
(0, 0),
(1.5, 0),
stroke: black + 0.25mm,
)
mark((0, 1.5), (0, 2), symbol: ")>", fill: black)
mark((1.5, 0), (2, 0), symbol: ")>", fill: black)
content((0, 1.5), $p_1$, anchor: "south")
content((1.5, 0), $p_0$, anchor: "west")
circle((0, 0), radius: 0.6mm, fill: black, name: "00")
content("00.south", $mat(0; 0)$, anchor: "north")
circle((0, 1), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $[1]$, anchor: "east")
circle((1, 0), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $[0]$, anchor: "north")
})),
)
#solution[
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (
frame: "rect",
stroke: none,
fill: none,
padding: .25,
))
scale(200%)
line(
(0, 1.5),
(0, 0),
(1.5, 0),
stroke: black + 0.25mm,
)
mark((0, 1.5), (0, 2), symbol: ")>", fill: black)
mark((1.5, 0), (2, 0), symbol: ")>", fill: black)
content((0, 1.5), $p_1$, anchor: "south")
content((1.5, 0), $p_0$, anchor: "west")
line(
(1, 0),
(0, 1),
stroke: ored + 1mm,
)
circle((0, 0), radius: 0.6mm, fill: black, name: "00")
content("00.south", $mat(0; 0)$, anchor: "north")
circle((0, 1), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $[1]$, anchor: "east")
circle((1, 0), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $[0]$, anchor: "north")
})),
)
]
#v(1fr)
#pagebreak()
= Measuring Probabilistic Bits
#definition()
As we noted before, a probabilistic bit represents a coin we've tossed but haven't looked at.
We do not know whether the bit is `0` or `1`, but we do know the probability of both of these outcomes.
#v(2mm)
If we _measure_ (or _observe_) a probabilistic bit, we see either `0` or `1`—and thus our knowledge of its state is updated to either $[0]$ or $[1]$, since we now certainly know what face the coin landed on.
#v(2mm)
Since measurement changes what we know about a probabilistic bit, it changes the probabilistic bit's state. When we measure a bit, its state _collapses_ to either $[0]$ or $[1]$, and the original state of the bit vanishes. We _cannot_ recover the state $[x_0, x_1]$ from a measured probabilistic bit.
#definition("Multiple bits")
Say we have two probabilistic bits, $x$ and $y$, with states $[x] = [x_0, x_1]$ and $[y] = [y_0, y_1]$
#v(2mm)
The _compound state_ of $[x]$ and $[y]$ is exactly what it sounds like: It is the probabilistic two-bit state $|x y angle.r$, where the probabilities of the first bit are determined by $[x]$, and the probabilities of the second are determined by $[y]$.
#problem(label: "firstcompoundstate")
Say $[x] = [2/3, 1/3]$ and $[y] = [3/4, 1/4]$.
- If we measure $x$ and $y$ simultaneously, what is the probability of getting each of `00`, `01`, `10`, and `11`?
- If we measure $y$ first and observe `1`, what is the probability of getting each of `00`, `01`, `10`, and `11`?
#note[*Note:* $[x]$ and $[y]$ are column vectors, but I've written them horizontally to save space.]
#v(1fr)
#problem()
Say $[x] = [2/3, 1/3]$ and $[y] = [3/4, 1/4]$.
What is the probability that $x$ and $y$ produce different outcomes?
#v(1fr)
#pagebreak()
= Tensor Products
#definition("Tensor Products")
The _tensor product_ of two vectors is defined as follows:
$
mat(x_1; x_2) times.circle mat(y_1; y_2) = mat(x_1 mat(y_1; y_2); x_2 mat(y_1; y_2)) = mat(x_1 y_1; x_1 y_2; x_2 y_1; x_2 y_2)
$
That is, we take our first vector, multiply the second vector by each of its components, and stack the result. You could think of this as a generalization of scalar multiplication, where scalar multiplication is a tensor product with a vector in $RR^1$:
$
a mat(x_1; x_2) = mat(a_1) times.circle mat(y_1; y_2) = mat(a_1 mat(y_1; y_2)) = mat(a_1 y_1; a_1 y_2)
$
#problem()
Say $x in RR^n$ and $y in RR^m$.
What is the dimension of $x times.circle y$?
#v(1fr)
#problem(label: "basistp")
What is the following pairwise tensor product?
#v(4mm)
$
{mat(1; 0; 0), mat(0; 1; 0), mat(0; 0; 1)}
times.circle
{mat(1; 0), mat(0; 1)}
$
#v(4mm)
#hint[Distribute the tensor product between every pair of vectors.]
#v(1fr)
#problem()
What is the _span_ of the vectors we found in @basistp?
In other words, what is the set of vectors that can be written as linear combinations of the vectors above?
#v(1fr)
#pagebreak()
#problem()
Say $[x] = [2/3, 1/3]$ and $[y] = [3/4, 1/4]$.
What is $[x] times.circle [y]$? How does this relate to @firstcompoundstate?
#v(1fr)
#problem()
The compound state of two vector-form bits is their tensor product.
Compute the following. Is the result what we'd expect?
- $[0] times.circle [0]$
- $[0] times.circle [1]$
- $[1] times.circle [0]$
- $[1] times.circle [1]$
#hint[Remember that $[0] = mat(1; 0)$ and $[1] = mat(0; 1)$.]
#v(1fr)
#problem(label: "fivequant")
Writing $[0] times.circle [1]$ is a bit tedious. We'll shorten this notation to $[01]$.
In fact, we could go further: if we wanted to write the set of bits $[1] times.circle [1] times.circle [0] times.circle [1]$, \
we could write $[1101]$—but a shorter alternative is $[13]$, since $13$ is `1101` in binary.
#v(2mm)
Write $[5]$ as a three-bit probabilistic state.
#solution[
$[5] = [101] = [1] times.circle [0] times.circle [1] = [0,0,0,0,0,1,0,0]^T$ \
Notice how we're counting from the top, with $[000] = [1,0,...,0]$ and $[111] = [0, ..., 0, 1]$.
]
#v(1fr)
#problem()
Write the three-bit states $[0]$ through $[7]$ as column vectors.
#hint[You do not need to compute every tensor product. Do a few and find the pattern.]
#v(1fr)
#pagebreak()
= Operations on Probabilistic Bits
Now that we can write probabilistic bits as vectors, we can represent operations on these bits with linear transformations—in other words, as matrices.
#definition()
Consider the NOT gate, which operates as follows:
- $"NOT"[0] = [1]$
- $"NOT"[1] = [0]$
What should NOT do to a probabilistic bit $[x_0, x_1]$?
If we return to our coin analogy, we can think of the NOT operation as flipping a coin we have already tossed, without looking at its state. Thus,
$ "NOT" mat(x_0; x_1) = mat(x_1; x_0) $
#review_box("Review: Multiplying vectors by matrices")[
#v(2mm)
$
A v = mat(1, 2; 3, 4) mat(v_0; v_1) = mat(1 v_0 + 2 v_1; 3 v_0 + 4 v_1)
$
#v(2mm)
Note that each element of $A v$ is the dot product of a row in $A$ and a column in $v$.
]
#problem()
Compute the following product:
$ mat(1, 0.5; 0, 1) mat(3; 2) $
#v(1fr)
#remark()
Also, recall that every matrix is linear map, and that every linear map may be written as a matrix. We often use the terms _matrix_, _transformation_, and _linear map_ interchangeably.
#pagebreak()
#problem()
Find the matrix that represents the NOT operation on one probabilistic bit.
#solution[
$
mat(0, 1; 1, 0)
$
]
#v(1fr)
#problem("Extension by linearity")
Say we have an arbitrary operation $M$.
If we know how $M$ acts on $[1]$ and $[0]$, can we compute $M[x]$ for an arbitrary state $[x]$?
Say $[x] = [x_0, x_1]$.
- What is the probability we observe $0$ when we measure $x$?
- What is the probability that we observe $M[0]$ when we measure $M x$?
#v(1fr)
#problem(label: "linearextension")
Write $M[x_0, x_1]$ in terms of $M[0]$, $M[1]$, $x_0$, and $x_1$.
#solution[
$
M mat(x_0; x_1) = x_0 M mat(1; 0) + x_1 M mat(0; 1) = x_0 M[0] + x_1 M[1]
$
]
#v(1fr)
#remark() Every matrix represents a _linear_ map, so the following is always true:
$ A times (p x + q y) = p A x + q A y $
@linearextension is just a special case of this fact.

View File

@ -4,8 +4,7 @@ Quantum bits (or \textit{qubits}) are very similar to probabilistic bits, but ha
probabilities are replaced with \textit{amplitudes}.
\vspace{2mm}
As before a qubit can take the extremal values \texttt{0} and \texttt{1}, which are denoted $\ket{0}$ and $\ket{1}$. \par
Of course, a qubit can take the values \texttt{0} and \texttt{1}, which are denoted $\ket{0}$ and $\ket{1}$. \par
Like probabilistic bits, a quantum bit is written as a linear combination of $\ket{0}$ and $\ket{1}$:
\begin{equation*}
\ket{\psi} = \psi_0\ket{0} + \psi_1\ket{1}
@ -20,8 +19,8 @@ $\ket{0}$ is pronounced \say{ket zero,} and $\ket{1}$ is pronounced \say{ket one
\vspace{2mm}
This is very similar to the \say{box} $[~]$ notation we used for probabilistic bits. \par
When we work with qubits, we will write $\left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$ as $\ket{0}$
and $\left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$ as $\ket{1}$.
As before, we will write $\ket{0} = \left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$
and $\ket{1} = \left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$.
\vspace{8mm}
@ -29,7 +28,7 @@ and $\left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$ as $\ket{1}$.
Recall that probabilistic bits are subject to the restriction that $p_0 + p_1 = 1$. \par
Quantum bits have a similar condition: $\psi_0^2 + \psi_1^2 = 1$. \par
Note that this implies that $\psi_0$ and $\psi_1$ are both in $[-1, 1]$. \par
Quantum amplitudes may be negative!
Quantum amplitudes may be negative, but probabilistic bit probabilities cannot.
\vspace{2mm}
@ -90,8 +89,8 @@ Write $\ket{\psi}$ as a linear combination of $\ket{0}$ and $\ket{1}$.
\definition{Measurement I}
Just like a probabilistic bit, we must observe $\ket{0}$ or $\ket{1}$ when we measure a qubit. \par
If we measure $\ket{\psi} = \psi_0\ket{0} + \psi_1\ket{1}$, we will see either $\ket{0}$ or $\ket{1}$,
Just like a probabilistic bit, we must observed $\ket{0}$ or $\ket{1}$ when we measure a qubit. \par
If we were to measure $\ket{\psi} = \psi_0\ket{0} + \psi_1\ket{1}$, we'd observe either $\ket{0}$ or $\ket{1}$, \par
with the following probabilities:
\begin{itemize}[itemsep = 2mm, topsep = 2mm]
\item $\mathcal{P}(\ket{1}) = \psi_1^2$
@ -118,7 +117,7 @@ leaving no trace of the previous superposition. \par
\problem{}
\begin{itemize}
\item What is the probability that we observe $\ket{0}$ when we measure $\ket{\psi}$? \par
\item What is the probability we observe $\ket{0}$ when we measure $\ket{\psi}$? \par
\item What can we observe if we measure $\ket{\psi}$ a second time? \par
\item What are these probabilities for $\ket{\varphi}$?
\end{itemize}
@ -236,10 +235,6 @@ Consider the following qubit states:
\pagebreak
%
% MARK: ops
%
\section{Operations on One Qubit}
We may apply transformations to qubits just as we apply transformations to probabilistic bits.
@ -282,7 +277,7 @@ Find the matrix $X$.
\vfill
\problem{}
What are $X\ket{+}$ and $X\ket{-}$? \par
What is $X\ket{+}$ and $X\ket{-}$? \par
\hint{Remember that all matrices are linear maps. What does this mean?}
\begin{solution}
@ -336,21 +331,11 @@ As we noted earlier, any rotation about the center is a valid quantum gate. \par
Let's derive all transformations of this form.
\begin{itemize}[itemsep = 1mm]
\item Let $U_\phi$ be the matrix that represents a counterclockwise rotation of $\phi$ degrees. \par
What are $U\ket{0}$ and $U\ket{1}$?
What is $U\ket{0}$ and $U\ket{1}$?
\item Find the matrix $U_\phi$ for an arbitrary $\phi$.
\end{itemize}
\begin{solution}
\begin{equation*}
\begin{bmatrix}
cos(\theta) & -sin(\theta) \\
sin(\theta) & cos(\theta)
\end{bmatrix}
\end{equation*}
\end{solution}
\vfill
@ -358,10 +343,5 @@ Let's derive all transformations of this form.
Say we have a qubit that is either $\ket{+}$ or $\ket{-}$. We do not know which of the two states it is in. \par
Using one operation and one measurement, how can we find out, for certain, which qubit we received? \par
\begin{solution}
Use a 45 degree ccw rotation.
\end{solution}
\vfill
\pagebreak

View File

@ -0,0 +1,514 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= One Qubit
Quantum bits (or _qubits_) are very similar to probabilistic bits, but have one major difference: probabilities are replaced with _amplitudes_.
#v(2mm)
Of course, a qubit can take the values `0` and `1`, which are denoted $#ket("0")$ and $#ket("1")$.
Like probabilistic bits, a quantum bit is written as a linear combination of $#ket("0")$ and $#ket("1")$:
$ #ket([$psi$]) = psi_0 #ket("0") + psi_1 #ket("1") $
Such linear combinations are called _superpositions_.
#v(2mm)
The $#ket("")$ you see in the expressions above is called a "ket," and denotes a column vector.
$#ket("0")$ is pronounced "ket zero," and $#ket("1")$ is pronounced "ket one." This is called bra-ket notation.
#note[*Note:* $#bra("0")$ is called a "bra," but we won't worry about that for now.]
#v(2mm)
This is very similar to the "box" $[#h(1.5mm)]$ notation we used for probabilistic bits.
As before, we will write $#ket("0") = mat(1; 0)$ and $#ket("1") = mat(0; 1)$.
#v(8mm)
Recall that probabilistic bits are subject to the restriction that $p_0 + p_1 = 1$.
Quantum bits have a similar condition: $psi_0^2 + psi_1^2 = 1$.
Note that this implies that $psi_0$ and $psi_1$ are both in $[-1, 1]$.
Quantum amplitudes may be negative, but probabilistic bit probabilities cannot.
#v(2mm)
If we plot the set of valid quantum states on our plane, we get a unit circle centered at the origin:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (frame: "rect", stroke: none, fill: none, padding: .25))
scale(150%)
line(
(0, 1.5),
(0, 0),
(1.5, 0),
stroke: black + 0.25mm,
)
mark((0, 1.5), (0, 2), symbol: ")>", fill: black)
mark((1.5, 0), (2, 0), symbol: ")>", fill: black)
circle((0, 0), radius: 1, stroke: (
paint: black,
thickness: 0.25mm,
dash: "dashed",
))
content((0, 1.5), $p_1$, anchor: "south")
content((1.5, 0), $p_0$, anchor: "west")
circle((0, 1), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $#ket("1")$, anchor: "east")
circle((1, 0), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $#ket("0")$, anchor: "north")
circle((0.87, 0.5), radius: 0.6mm, fill: ored, stroke: ored, name: "00")
content("00.east", $#ket(math.psi)$, anchor: "west")
})),
)
Recall that the set of probabilistic bits forms a line instead:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (frame: "rect", stroke: none, fill: none, padding: .25))
scale(150%)
line(
(0, 1.5),
(0, 0),
(1.5, 0),
stroke: black + 0.25mm,
)
mark((0, 1.5), (0, 2), symbol: ")>", fill: black)
mark((1.5, 0), (2, 0), symbol: ")>", fill: black)
line(
(1, 0),
(0, 1),
stroke: ored + 1mm,
)
content((0, 1.5), $p_1$, anchor: "south")
content((1.5, 0), $p_0$, anchor: "west")
circle((0, 0), radius: 0.6mm, fill: black, name: "00")
content("00.south", $mat(0; 0)$, anchor: "north")
circle((0, 1), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $[1]$, anchor: "east")
circle((1, 0), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $[0]$, anchor: "north")
})),
)
#problem()
In the above unit circle, the counterclockwise angle from $#ket("0")$ to $#ket([$psi$])$ is $30°$.
Write $#ket([$psi$])$ as a linear combination of $#ket("0")$ and $#ket("1")$.
#v(1fr)
#pagebreak()
#definition("Measurement I")
Just like a probabilistic bit, we must observed $#ket("0")$ or $#ket("1")$ when we measure a qubit.
If we were to measure $#ket([$psi$]) = psi_0 #ket("0") + psi_1 #ket("1")$, we'd observe either $#ket("0")$ or $#ket("1")$, with the following probabilities:
- $cal(P)(#ket("1")) = psi_1^2$
- $cal(P)(#ket("0")) = psi_0^2$
#note[Note that $cal(P)(#ket("0")) + cal(P)(#ket("1")) = 1$.]
#v(2mm)
As before, $#ket([$psi$])$ _collapses_ when it is measured: its state becomes that which we observed in our measurement, leaving no trace of the previous superposition.
#problem()
- What is the probability we observe $#ket("0")$ when we measure $#ket([$psi$])$?
- What can we observe if we measure $#ket([$psi$])$ a second time?
- What are these probabilities for $#ket([$phi$])$?
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (frame: "rect", stroke: none, fill: none, padding: .25))
scale(200%)
line(
(0, 1.5),
(0, 0),
(1.5, 0),
stroke: black + 0.25mm,
)
mark((0, 1.5), (0, 2), symbol: ")>", fill: black)
mark((1.5, 0), (2, 0), symbol: ")>", fill: black)
circle((0, 0), radius: 1, stroke: (
paint: black,
thickness: 0.25mm,
dash: "dashed",
))
content((0, 1.5), $p_1$, anchor: "south")
content((1.5, 0), $p_0$, anchor: "west")
circle((0, 1), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $#ket("1")$, anchor: "east")
circle((1, 0), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $#ket("0")$, anchor: "north")
circle((0.87, 0.5), radius: 0.6mm, fill: ored, stroke: ored, name: "00")
content("00.east", $#ket(math.psi)$, anchor: "west")
arc(
(0, 0),
start: 0deg,
stop: -135deg,
anchor: "origin",
radius: 0.3,
name: "a135",
stroke: gray,
)
mark(
"a135.end",
135deg,
symbol: ")>",
fill: gray,
stroke: gray,
)
content("a135.center", text(fill: gray)[$135degree$], anchor: "north")
line((0, 0), (-0.607, -0.607), stroke: (
paint: gray,
thickness: 0.4mm,
dash: "dotted",
))
mark(
(-0.627, -0.627),
(-0.708, -0.708),
symbol: ")>",
fill: gray,
stroke: gray,
)
arc(
(0, 0),
start: 0deg,
stop: 30deg,
anchor: "origin",
radius: 0.6,
name: "a30",
stroke: gray,
)
mark(
"a30.end",
120deg,
symbol: ")>",
fill: gray,
stroke: gray,
)
content("a30.end", text(fill: gray)[$30degree$], anchor: "south")
line((0, 0), (0.87, 0.5), stroke: (
paint: gray,
thickness: 0.4mm,
dash: "dotted",
))
mark(
(0.80, 0.46),
(0.87, 0.5),
symbol: ")>",
fill: gray,
stroke: gray,
)
circle(
(-0.707, -0.707),
radius: 0.6mm,
fill: ored,
stroke: ored,
name: "00",
)
content("00.west", $#ket(math.phi)$, anchor: "east")
})),
)
#v(1fr)
As you may have noticed, we don't need two coordinates to fully define a qubit's state. We can get by with one coordinate just as well.
Instead of referring to each state using its cartesian coordinates $psi_0$ and $psi_1$, we can address it using its _polar angle_ $theta$, measured from $#ket("0")$ counterclockwise:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (frame: "rect", stroke: none, fill: none, padding: .25))
scale(180%)
line(
(0, 1.5),
(0, 0),
(1.5, 0),
stroke: black + 0.25mm,
)
mark((0, 1.5), (0, 2), symbol: ")>", fill: black)
mark((1.5, 0), (2, 0), symbol: ")>", fill: black)
circle((0, 0), radius: 1, stroke: (
paint: black,
thickness: 0.25mm,
dash: "dashed",
))
content((0, 1.5), $p_1$, anchor: "south")
content((1.5, 0), $p_0$, anchor: "west")
circle((0, 1), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $#ket("1")$, anchor: "east")
circle((1, 0), radius: 0.6mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $#ket("0")$, anchor: "north")
circle((0.87, 0.5), radius: 0.6mm, fill: ored, stroke: ored, name: "00")
content("00.east", $#ket(math.psi)$, anchor: "west")
arc(
(0, 0),
start: 0deg,
stop: 30deg,
anchor: "origin",
radius: 0.6,
name: "a30",
stroke: gray,
)
mark(
"a30.end",
120deg,
symbol: ")>",
fill: gray,
stroke: gray,
)
content("a30.mid", text(fill: gray)[$theta$], anchor: "west")
line((0, 0), (0.87, 0.5), stroke: (
paint: gray,
thickness: 0.4mm,
dash: "dotted",
))
mark(
(0.80, 0.46),
(0.87, 0.5),
symbol: ")>",
fill: gray,
stroke: gray,
)
})),
)
#problem()
Find $psi_0$ and $psi_1$ in terms of $theta$ for an arbitrary qubit $psi$.
#v(1fr)
#pagebreak()
#problem()
Consider the following qubit states:
#grid(
columns: (1fr, 1fr),
$ #ket("+") = (#ket("0") + #ket("1"))/sqrt(2) $,
$ #ket("-") = (#ket("0") - #ket("1"))/sqrt(2) $,
)
- Where are these on the unit circle?
- What are their polar angles?
- What are the probabilities of observing $#ket("0")$ and $#ket("1")$ when measuring $#ket("+")$ and $#ket("-")$?
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
set-style(content: (frame: "rect", stroke: none, fill: none, padding: .25))
scale(300%)
line(
(0, 1.3),
(0, 0),
(1.3, 0),
stroke: black + 0.25mm,
)
mark((0, 1.3), (0, 2), symbol: ")>", fill: black)
mark((1.3, 0), (2, 0), symbol: ")>", fill: black)
circle((0, 0), radius: 1, stroke: (
paint: black,
thickness: 0.25mm,
dash: "dashed",
))
content((0, 1.3), $p_1$, anchor: "south")
content((1.3, 0), $p_0$, anchor: "west")
circle((0, 1), radius: 0.4mm, fill: oblue, stroke: oblue, name: "00")
content("00.west", $#ket("1")$, anchor: "east")
circle((1, 0), radius: 0.4mm, fill: oblue, stroke: oblue, name: "00")
content("00.south", $#ket("0")$, anchor: "north")
})),
)
#v(1fr)
#v(1fr)
#v(1fr)
#pagebreak()
= Operations on One Qubit
We may apply transformations to qubits just as we apply transformations to probabilistic bits. Again, we'll represent transformations as $2 times 2$ matrices, since we want to map one qubit state to another.
#note[In other words, we want to map elements of $RR^2$ to elements of $RR^2$.]
We will call such maps _quantum gates,_ since they are the quantum equivalent of classical logic gates.
#v(2mm)
There are two conditions a valid quantum gate $G$ must satisfy:
- For any valid state $#ket([$psi$])$, $G #ket([$psi$])$ is a valid state. Namely, $G$ must preserve the length of any vector it is applied to. Recall that the set of valid quantum states is the set of unit vectors in $RR^2$
- Any quantum gate must be _invertible_. We'll skip this condition for now, and return to it later.
In short, a quantum gate is a linear map that maps the unit circle to itself. There are only two kinds of linear maps that do this: reflections and rotations.
#problem()
The $X$ gate is the quantum analog of the `not` gate, defined by the following table:
- $X #ket("0") = #ket("1")$
- $X #ket("1") = #ket("0")$
Find the matrix $X$.
#solution[
$
mat(0, 1; 1, 0)
$
]
#v(1fr)
#problem()
What is $X #ket("+")$ and $X #ket("-")$?
#hint[Remember that all matrices are linear maps. What does this mean?]
#solution[
$X #ket("+") = #ket("+")$ and $X #ket("-") = - #ket("-")$ (that is, a negative ket-minus). \
Most notably, rememver that $G(a#ket("0") + b #ket("1")) = a G #ket("0") + b G #ket("1")$.
]
#v(1fr)
#problem()
In terms of geometric transformations, what does $X$ do to the unit circle?
#solution[
It is a reflection about the $45degree$ axis.
]
#v(1fr)
#pagebreak()
#problem()
Let $Z$ be a quantum gate defined by the following table:
- $Z #ket("0") = #ket("0")$,
- $Z #ket("1") = -#ket("1")$.
What is the matrix $Z$? What are $Z #ket("+")$ and $Z #ket("-")$?
What is $Z$ as a geometric transformation?
#v(1fr)
#problem()
Is the map $B$ defined by the table below a valid quantum gate?
- $B #ket("0") = #ket("0")$
- $B #ket("1") = #ket("+")$
#hint[Find a $#ket([$psi$])$ so that $B #ket([$psi$])$ is not a valid qubit state]
#solution[
$ B #ket("+") = (1 + sqrt(2))/(2) #ket("0") + 1/2 #ket("1") $
This has a non-unit length of
$
(sqrt(2) + 1)/(2)
$
]
#v(1fr)
#problem("Rotation")
As we noted earlier, any rotation about the center is a valid quantum gate. Let's derive all transformations of this form.
- Let $U_theta$ be the matrix that represents a counterclockwise rotation of $theta$ degrees. What is $U #ket("0")$ and $U #ket("1")$?
- Find the matrix $U_theta$ for an arbitrary $theta$.
#v(1fr)
#problem()
Say we have a qubit that is either $#ket("+")$ or $#ket("-")$. We do not know which of the two states it is in.
Using one operation and one measurement, how can we find out, for certain, which qubit we received?
#v(1fr)

View File

@ -60,7 +60,7 @@ $\ket{\psi} = \frac{1}{\sqrt{2}} \ket{00} + \frac{1}{2} \ket{01} + \frac{\sqrt{3
Again, consider the two-qubit state
$\ket{\psi} = \frac{1}{\sqrt{2}} \ket{00} + \frac{1}{2} \ket{01} + \frac{\sqrt{3}}{4} \ket{10} + \frac{1}{4} \ket{11}$ \par
If we measure the first qubit of $\ket{\psi}$ and get $\ket{0}$, what is the resulting state of $\ket{\psi}$? \par
What would that state be if we'd measured $\ket{1}$ instead?
What would the state be if we'd measured $\ket{1}$ instead?
\vfill
@ -85,7 +85,7 @@ Say we measure the first two qubits and get $\ket{00}$. What is the resulting st
\definition{Entanglement}
Some compound states can be factored into a tensor product of individual qubit states. For example,
Some product states can be factored into a tensor product of individual qubit states. For example,
\begin{equation*}
\frac{1}{2} \bigl(\ket{00} + \ket{01} + \ket{10} + \ket{11}\bigr)
= \frac{1}{\sqrt{2}}\bigl( \ket{0} + \ket{1} \bigr) \otimes

View File

@ -0,0 +1,126 @@
#import "@local/handout:0.1.0": *
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= Two Qubits
#definition()
Just as before, we'll represent multi-qubit states as linear combinations of multi-qubit basis states.
For example, a two-qubit state $#ket("ab")$ is the four-dimensional unit vector
$ mat(a; b; c; d) = a #ket("00") + b #ket("01") + c #ket("10") + d #ket("11") $
As always, multi-qubit states are unit vectors. Thus, $a^2 + b^2 + c^2 + d^2 = 1$ in the two-bit case above.
#problem()
Say we have two qubits $#ket([$psi$])$ and $#ket([$phi$])$.
Show that $#ket([$psi$]) times.circle #ket([$phi$])$ is always a unit vector (and is thus a valid quantum state).
#v(1fr)
#definition("Measurement II")<measureii>
Measurement of a two-qubit state works just like measurement of a one-qubit state:
If we measure $a #ket("00") + b #ket("01") + c #ket("10") + d #ket("11")$, we get one of the four basis states with the following probabilities:
- $cal(P)(#ket("00")) = a^2$
- $cal(P)(#ket("01")) = b^2$
- $cal(P)(#ket("10")) = c^2$
- $cal(P)(#ket("11")) = d^2$
As before, the sum of all the above probabilities is $1$.
#problem()
Consider the two-qubit state
$#ket([$psi$]) = 1/sqrt(2) #ket("00") + 1/2 #ket("01") + sqrt(3)/4 #ket("10") + 1/4 #ket("11")$
- If we measure both bits of $#ket([$psi$])$ simultaneously, what is the probability of getting each of $#ket("00")$, $#ket("01")$, $#ket("10")$, and $#ket("11")$?
- If we measure the ONLY the first qubit, what is the probability we get $#ket("0")$? How about $#ket("1")$?
#hint[There are two basis states in which the first qubit is $#ket("0")$.]
- Say we measured the second bit and read $#ket("1")$. If we now measure the first bit, what is the probability of getting $#ket("0")$?
#v(1fr)
#pagebreak()
#problem()
Again, consider the two-qubit state
$#ket([$psi$]) = 1/sqrt(2) #ket("00") + 1/2 #ket("01") + sqrt(3)/4 #ket("10") + 1/4 #ket("11")$
If we measure the first qubit of $#ket([$psi$])$ and get $#ket("0")$, what is the resulting state of $#ket([$psi$])$?
What would the state be if we'd measured $#ket("1")$ instead?
#v(1fr)
#problem()
Consider the three-qubit state $#ket([$psi$]) = c_0 #ket("000") + c_1 #ket("001") + ... + c_7 #ket("111")$.
Say we measure the first two qubits and get $#ket("00")$. What is the resulting state of $#ket([$psi$])$?
#solution[
We measure $#ket("00")$ with probability $c_0^2 + c_1^2$, and $#ket(math.psi)$ collapses to
#v(3mm)
$
(c_0 #ket("000") + c_1 #ket("001"))/(sqrt(c_0^2 + c_1^2))
$
]
#v(1fr)
#pagebreak()
#definition("Entanglement")
Some product states can be factored into a tensor product of individual qubit states. For example,
$
1/2 (#ket("00") + #ket("01") + #ket("10") + #ket("11")) = 1/sqrt(2) (#ket("0") + #ket("1")) times.circle 1/sqrt(2) (#ket("0") + #ket("1"))
$
Such states are called _product states._ States that aren't product states are called _entangled_ states.
#problem()
Factor the following product state:
$
1/(2sqrt(2)) (sqrt(3) #ket("00") - sqrt(3) #ket("01") + #ket("10") - #ket("11"))
$
#solution[
$
(1)/(2 sqrt(2)) (sqrt(3) #ket("00") - sqrt(3) #ket("01") + #ket("10") - #ket("11"))
= (sqrt(3)/2 #ket("0") + 1/2 #ket("1") )
times.circle
( 1/sqrt(2) #ket(0) - 1/sqrt(2) #ket("1"))
$
]
#v(1fr)
#problem()
Show that the following is an entangled state.
$ 1/sqrt(2) #ket("00") + 1/sqrt(2) #ket("11") $
#solution[
$
mat(a_0; a_1)
times.circle
mat(b_0; b_1)
=
a_0b_0 #ket(00) + a_0b_1 #ket(01) + a_1b_0 #ket(10) + a_1b_1 #ket(11)
$
#v(2mm)
So, we have that $a_1b_1 = a_0b_0 = sqrt(2)^(-1)$ \
But $a_0b_1 = a_1b_0 = 0$, so one of $a_0$ and $b_1$ must be zero. \
We thus have a contradiction.
]
#v(1fr)

View File

@ -1,42 +1,40 @@
\section{Logic Gates}
%\definition{Matrices}
%cThroughout this handout, we've been using matrices. Again, recall that every linear map may be written as a matrix,
%and that every matrix represents a linear map. For example, if $f: \mathbb{R}^2 \to \mathbb{R}^2$ is a linear
%map, we can write it as follows:
%\begin{equation*}
% f\left(
% \ket{x}
% \right)
% =
% \begin{bmatrix}
% m_1 & m_2 \\
% m_3 & m_4
% \end{bmatrix}
% \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}
% =
% \left[
% \begin{matrix}
% m_1x_1 + m_2x_2 \\
% m_3x_1 + m_4x_2
% \end{matrix}
% \right]
%\end{equation*}
%
%A classical logic gate is a linear map from $\{0,1\}^m$ to $\{0,1\}^n$
\definition{Matrices}
Throughout this handout, we've been using matrices. Again, recall that every linear map may be written as a matrix,
and that every matrix represents a linear map. For example, if $f: \mathbb{R}^2 \to \mathbb{R}^2$ is a linear
map, we can write it as follows:
\begin{equation*}
f\left(
\ket{x}
\right)
=
\begin{bmatrix}
m_1 & m_2 \\
m_3 & m_4
\end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}
=
\left[
\begin{matrix}
m_1x_1 + m_2x_2 \\
m_3x_1 + m_4x_2
\end{matrix}
\right]
\end{equation*}
\definition{}
Before we discussing multi-qubit quantum gates, we need to review classical logic. \par
In this section, let's return to probabilistic bits.
Before we discussing multi-qubit quantum gates, we need to review to classical logic. \par
Of course, a classical logic gate is a linear map from $\{0,1\}^m$ to $\{0,1\}^n$
\problem{}<notgatex>
The \texttt{not} gate is a map defined by the following table: \par
\begin{itemize}
\item $X[0] = [1]$
\item $X[1] = [0]$
\item $X\ket{0} = \ket{1}$
\item $X\ket{1} = \ket{0}$
\end{itemize}
Write the \texttt{not} gate as a matrix that operates on single-bit vector states. \par
@ -95,11 +93,11 @@ Find a matrix $A$ so that $A\ket{\texttt{ab}}$ works as expected. \par
\vspace{2mm}
For example, if we look at the first column of $A$ (which is $[1, 0]$), we see: \par
$A[00] = A[1,0,0,0] = [1,0] = [0]$
$A\ket{00} = A[1,0,0,0] = [1,0] = \ket{0}$
\vspace{2mm}
Also with the last column (which is $[0,1]$): \par
$A[00] = A[0,0,0,1] = [0,1] = [1]$
$A\ket{00} = A[0,0,0,1] = [0,1] = \ket{1}$
\end{instructornote}
\end{solution}
@ -246,10 +244,10 @@ Say we want to invert the first bit of a two-bit state. That is, we want a trans
In other words, we want a matrix $T$ satisfying the following equalities:
\begin{itemize}
\item $T[00] = [10]$
\item $T[01] = [11]$
\item $T[10] = [00]$
\item $T[11] = [01]$
\item $T\ket{00} = \ket{10}$
\item $T\ket{01} = \ket{11}$
\item $T\ket{10} = \ket{00}$
\item $T\ket{11} = \ket{01}$
\end{itemize}
@ -258,8 +256,8 @@ In other words, we want a matrix $T$ satisfying the following equalities:
Find the matrix that corresponds to the above transformation. \par
\hint{
Remember that
$[0] = \left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$ and
$[1] = \left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$ \\
$\ket{0} = \left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$ and
$\ket{1} = \left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$ \\
Also, we found earlier that $X = \left[\begin{smallmatrix} 0 && 1 \\ 1 && 0 \end{smallmatrix}\right]$,
and of course $I = \left[\begin{smallmatrix} 1 && 0 \\ 0 && 1 \end{smallmatrix}\right]$.
}
@ -281,26 +279,25 @@ Find the matrix that corresponds to the above transformation. \par
We could draw the above transformation as a combination $X$ and $I$ (identity) gate:
\begin{center}
\begin{tikzpicture}[scale=0.8]
\node[qubit] (a) at (0, 0) {$[0]$};
\node[qubit] (b) at (0, -1) {$[0]$};
\node[qubit] (a) at (0, 0) {$\ket{0}$};
\node[qubit] (b) at (0, -1) {$\ket{0}$};
\draw[wire] (a) -- ([shift={(3, 0)}] a.center) node[qubit] {$[1]$};
\draw[wire] (b) -- ([shift={(3, 0)}] b.center) node[qubit] {$[0]$};
\draw[wire] (a) -- ([shift={(3, 0)}] a.center) node[qubit] {$\ket{1}$};
\draw[wire] (b) -- ([shift={(3, 0)}] b.center) node[qubit] {$\ket{0}$};
\qubox{a}{1}{a}{2}{$X$}
\qubox{b}{1}{b}{2}{$I$}
\end{tikzpicture}
\end{center}
We can even omit the $I$ gate. We know that transformations affect the whole state,
and can assume the empty space uncer $X$ implies $I$. \par
We can even omit the $I$ gate, since we now know that transformations affect the whole state: \par
\begin{center}
\begin{tikzpicture}[scale=0.8]
\node[qubit] (a) at (0, 0) {$[0]$};
\node[qubit] (b) at (0, -1) {$[0]$};
\node[qubit] (a) at (0, 0) {$\ket{0}$};
\node[qubit] (b) at (0, -1) {$\ket{0}$};
\draw[wire] (a) -- ([shift={(3, 0)}] a.center) node[qubit] {$[1]$};
\draw[wire] (b) -- ([shift={(3, 0)}] b.center) node[qubit] {$[0]$};
\draw[wire] (a) -- ([shift={(3, 0)}] a.center) node[qubit] {$\ket{1}$};
\draw[wire] (b) -- ([shift={(3, 0)}] b.center) node[qubit] {$\ket{0}$};
\qubox{a}{1}{a}{2}{$X$}
\end{tikzpicture}

View File

@ -0,0 +1,169 @@
#import "@local/handout:0.1.0": *
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= Logic Gates
#definition("Matrices")
Throughout this handout, we've been using matrices. Again, recall that every linear map may be written as a matrix, and that every matrix represents a linear map. For example, if $f: RR^2 -> RR^2$ is a linear map, we can write it as follows:
$
f(#ket("x")) = mat(m_1, m_2; m_3, m_4) mat(x_1; x_2) = mat(m_1 x_1 + m_2 x_2; m_3 x_1 + m_4 x_2)
$
#definition()
Before we discussing multi-qubit quantum gates, we need to review to classical logic.
Of course, a classical logic gate is a linear map from ${0,1}^m$ to ${0,1}^n$
#problem()<notgatex>
The `not` gate is a map defined by the following table:
- $X #ket("0") = #ket("1")$
- $X #ket("1") = #ket("0")$
Write the `not` gate as a matrix that operates on single-bit vector states.
That is, find a matrix $X$ so that $X mat(1; 0) = mat(0; 1)$ and $X mat(0; 1) = mat(1; 0)$
#solution[
$
X = mat(0, 1; 1, 0)
$
]
#v(1fr)
#problem()
The `and` gate is a map $BB^2 -> BB$ defined by the following table:
#align(center, table(
columns: 3,
stroke: none,
table.hline(),
[`a`], [`b`], [`a` and `b`],
table.hline(),
[0], [0], [0],
[0], [1], [0],
[1], [0], [0],
[1], [1], [1],
table.hline(),
))
Find a matrix $A$ so that $A #ket("ab")$ works as expected.
#hint[Remember, we write bits as vectors.]
#solution[
$
A = mat(1, 1, 1, 0; 0, 0, 0, 1)
$
#instructornote[
Because of the way we represent bits here, we also have the following property: \
The columns of $A$ correspond to the output for each input---i.e, $A$ is just a table of outputs. \
#v(2mm)
For example, if we look at the first column of $A$ (which is $[1, 0]$), we see: \
$A#ket(00) = A[1,0,0,0] = [1,0] = #ket(0)$
#v(2mm)
Also with the last column (which is $[0,1]$): \
$A#ket(00) = A[0,0,0,1] = [0,1] = #ket(1)$
]
]
#v(1fr)
#pagebreak()
#remark()
The way a quantum circuit handles information is a bit different than the way a classical circuit does. We usually think of logic gates as _functions_: they consume one set of bits, and return another/
// TODO: and gate (input a, input b, output)
#v(2mm)
This model, however, won't work for quantum logic. If we want to understand quantum gates, we need to see them not as _functions_, but as _transformations_. This distinction is subtle, but significant:
- functions _consume_ a set of inputs and _produce_ a set of outputs
- transformations _change_ a set of objects, without adding or removing any elements
#v(2mm)
Our usual logic circuit notation models logic gates as functions—we thus can't use it. We'll need a different diagram to draw quantum circuits.
#v(1fr)
First, we'll need a set of bits. For this example, we'll use two, drawn in a vertical array. We'll also add a horizontal time axis, moving from left to right:
#align(center)[
// Quantum circuit diagram showing two qubits over time
#box(width: 10cm, height: 4cm)[
_[Quantum circuit diagram with time axis would go here]_
]
]
In the diagram above, we didn't change our bits—so the labels at the start match those at the end.
#v(1fr)
Thus, our circuit forms a grid, with bits ordered vertically and time horizontally. If we want to change our state, we draw transformations as vertical boxes. Every column represents a single transformation on the entire state:
#align(center)[
// Quantum circuit with transformations
#box(width: 10cm, height: 4cm)[
_[Quantum circuit with transformations $T_1$, $T_2$, $T_3$ would go here]_
]
]
Note that the transformations above span the whole state. This is important: we cannot apply transformations to individual bitswe always transform the _entire_ state.
#v(1fr)
#pagebreak()
*Setup:* Say we want to invert the first bit of a two-bit state. That is, we want a transformation $T$ so that
#align(center)[
// Circuit showing bit flip
#box(width: 8cm, height: 3cm)[
_[Circuit diagram showing first bit flip would go here]_
]
]
In other words, we want a matrix $T$ satisfying the following equalities:
- $T #ket("00") = #ket("10")$
- $T #ket("01") = #ket("11")$
- $T #ket("10") = #ket("00")$
- $T #ket("11") = #ket("01")$
#problem()
Find the matrix that corresponds to the above transformation.
#hint[Remember that $#ket("0") = mat(1; 0)$ and $#ket("1") = mat(0; 1)$. Also, we found earlier that $X = mat(0, 1; 1, 0)$, and of course $I = mat(1, 0; 0, 1)$.]
#v(1fr)
*Remark:* We could draw the above transformation as a combination $X$ and $I$ (identity) gate:
#align(center)[
// Circuit with X and I gates
#box(width: 6cm, height: 3cm)[
_[Circuit diagram with X gate on first qubit, I gate on second would go here]_
]
]
We can even omit the $I$ gate, since we now know that transformations affect the whole state:
#align(center)[
// Simplified circuit with just X gate
#box(width: 6cm, height: 3cm)[
_[Simplified circuit diagram with just X gate on first qubit would go here]_
]
]
We're now done: this is how we draw quantum circuits. Don't forget that transformations _always_ affect the whole stateeven if our diagram doesn't explicitly state this.
#pagebreak()

View File

@ -0,0 +1,42 @@
#import "@local/handout:0.1.0": *
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= Quantum Gates
In the previous section, we stated that a quantum gate is a linear map. Let's complete that definition.
#definition()
A quantum gate is a _orthonormal matrix_, which means any gate $G$ satisfies $G G^T = I$.
This implies the following:
- $G$ is square. In other words, it has as many rows as it has columns.
#note[If we think of $G$ as a map, this means that $G$ has as many inputs as it has outputs. This is to be expected: we stated earlier that quantum gates do not destroy or create qubits.]
- $G$ preserves lengths; i.e $|x| = |G x|$.
#note[This ensures that $G #ket([$psi$])$ is always a valid state.]
(You will prove all these properties in any introductory linear algebra course. This isn't a lesson on linear algebra, so you may take them as given today.)
*Remark:* Let $G$ be a quantum gate. Since quantum gates are, by definition, _linear_ maps, the following holds:
$ G(a_0 #ket("0") + a_1 #ket("1")) = a_0 G #ket("0") + a_1 G #ket("1") $
#problem()<cnot>
Consider the _controlled not_ (or _cnot_) gate, defined by the following table:
- $X_c #ket("00") = #ket("00")$
- $X_c #ket("01") = #ket("01")$
- $X_c #ket("10") = #ket("11")$
- $X_c #ket("11") = #ket("10")$
In other words, the cnot gate inverts its second bit if its first bit is $#ket("1")$.
Find the matrix that applies the cnot gate.
#v(1fr)
#pagebreak()

View File

@ -1,7 +1,7 @@
\section{HXH}
Let's return to the quantum circuit diagrams we discussed a few pages ago. \par
Keep in mind that we're working with quantum gates and proper qubits---not classical bits, as we were before.
Keep in mind that we're working with quantum gates and proper half-qubits---not classical bits, as we were before.
\definition{Controlled Inputs}
A \textit{control input} or \textit{inverted control input} may be attached to any gate. \par
@ -289,7 +289,7 @@ $\ket{-} = \frac{1}{\sqrt{2}}\Bigl(\ket{0} - \ket{1}\Bigr)$
\pagebreak
\generic{Remark:}
Consider the following circuit:
Now, consider the following circuit:
\begin{center}
\begin{tikzpicture}[scale=0.8]
@ -386,21 +386,21 @@ but the state $\ket{cd}$ on the right is $\ket{11} = [0,0,0,1]$. \par
\vspace{4mm}
How does this make sense? \par
Remember that a two-bit quantum state is \textit{not} equivalent to a pair of disjoint one-qubit quantum states.
We cannot treat a multi-qubit state as a combination of $n$ independent bits.
Remember that a two-bit quantum state is \textit{not} equivalent to a pair of one-qubit quantum states.
We must treat a multi-qubit state as a single unit.
\vspace{2mm}
A two-bit state $\ket{ab}$ comes with four probabilities:
$\mathcal{P}(\texttt{00})$, $\mathcal{P}(\texttt{01})$, $\mathcal{P}(\texttt{10})$, and $\mathcal{P}(\texttt{11})$. \par
Recall that a two-bit state $\ket{ab}$ comes with four probabilities:
$\mathcal{P}(\texttt{00})$, $\mathcal{P}(\texttt{01})$, $\mathcal{P}(\texttt{10})$, and $\mathcal{P}(\texttt{11})$.
If we change the probabilities of only $\ket{a}$, \textit{all four of these change!}
\vfill
Because of this fact, \say{controlled gates} behave in a somewhat counterintuitive way.
They do not simply \say{read} their controlling qubit without affecting its state---
they mutate the entire state they are applied to, and may change all its bits!
Because of this fact, \say{controlled gates} may not work as you expect. They may seem
to \say{read} their controlling qubit without affecting its state, but remember---a
controlled gate still affects the \textit{entire} state. As we noted before, it is
not possible to apply a transformation to one bit of a quantum state.
\begin{center}
\begin{tikzpicture}[scale=1]

View File

@ -0,0 +1,53 @@
#import "@local/handout:0.1.0": *
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= HXH
Let's return to the quantum circuit diagrams we discussed a few pages ago. Keep in mind that we're working with quantum gates and proper qubits—not classical bits, as we were before.
#definition("Controlled Inputs")
A _control input_ or _inverted control input_ may be attached to any gate. These are drawn as filled and empty circles in our circuit diagrams:
#align(center)[
#grid(columns: (1fr, 1fr),
[
// Non-inverted control circuit diagram would go here
#box(width: 6cm, height: 4cm)[
_[Non-inverted control input circuit would go here]_
]
],
[
// Inverted control circuit diagram would go here
#box(width: 6cm, height: 4cm)[
_[Inverted control input circuit would go here]_
]
]
)]
#v(2mm)
An $X$ gate with a (non-inverted) control input behaves like an $X$ gate if _all_ its control inputs are $#ket("1")$, and like $I$ otherwise. An $X$ gate with an inverted control inputs does the opposite, behaving like $I$ if its input is $#ket("1")$ and like $X$ otherwise. The two circuits above illustrate this fact—take a look at their inputs and outputs.
#v(2mm)
Of course, we can give a gate multiple controls. An $X$ gate with multiple controls behaves like an $X$ gate if...
- all non-inverted controls are $#ket("1")$, and
- all inverted controls are $#ket("0")$
...and like $I$ otherwise.
#problem()
What are the final states of the qubits in the diagram below?
#align(center)[
// Multi-control circuit diagram would go here
#box(width: 8cm, height: 6cm)[
_[Multi-control circuit diagram would go here]_
]
]
#v(1fr)
#pagebreak()

View File

@ -12,7 +12,7 @@ Consider the following entangled two-qubit states, called the \textit{bell state
The probabilistic bits we get when measuring any of the above may be called \textit{anticorrelated bits}. \par
If we measure the first bit of any of these states and observe $1$, what is the resulting compound state? \par
What if we observe $0$ instead? \par
Do you see why we call these bits \say{anticorrelated}?
Do you see why we can call these bits anticorrelated?
\vfill

View File

@ -0,0 +1,48 @@
#import "@local/handout:0.1.0": *
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= Superdense Coding
Consider the following entangled two-qubit states, called the _bell states_:
- $#ket([$Phi^+$]) = 1/sqrt(2) #ket("00") + 1/sqrt(2) #ket("11")$
- $#ket([$Phi^-$]) = 1/sqrt(2) #ket("00") - 1/sqrt(2) #ket("11")$
- $#ket([$Psi^+$]) = 1/sqrt(2) #ket("01") + 1/sqrt(2) #ket("10")$
- $#ket([$Psi^-$]) = 1/sqrt(2) #ket("01") - 1/sqrt(2) #ket("10")$
#problem()
The probabilistic bits we get when measuring any of the above may be called _anticorrelated bits_.
If we measure the first bit of any of these states and observe $1$, what is the resulting compound state?
What if we observe $0$ instead?
Do you see why we can call these bits anticorrelated?
#v(1fr)
#problem()
Show that the bell states are orthogonal
#hint[Dot product]
#v(1fr)
#problem()<bellmeasure>
Say we have a pair of qubits in one of the four bell states.
How can we find out which of the four states we have, with certainty?
#hint[$H #ket("+") = #ket("0")$, and $H #ket("-") = #ket("1")$]
#v(1fr)
#pagebreak()
#definition()
The $Z$ gate is defined as follows:
$ Z mat(psi_0; psi_1) = mat(psi_0; -psi_1) $
#v(1fr)
#pagebreak()

View File

@ -0,0 +1,31 @@
#import "@local/handout:0.1.0": *
// Define quantum notation macros
#let ket(content) = $|#content angle.r$
#let bra(content) = $angle.l #content|$
= Quantum Teleportation
Superdense coding lets us convert quantum bandwidth into classical bandwidth. Quantum teleportation does the opposite, using two classical bits and an entangled pair to transmit a quantum state.
*Setup:* Again, suppose Alice and Bob each have half of a $#ket([$Phi^+$])$ state. We'll call the state Alice wants to teleport $#ket(math.psi) = psi_0 #ket("0") + psi_1 #ket("1")$.
#problem()
What is the three-qubit state $#ket(math.psi) #ket([$Phi^+$])$ in terms of $psi_0$ and $psi_1$?
#v(1fr)
#problem()
To teleport $#ket(math.psi)$, Alice applies the following circuit to her two qubits, where $#ket([$Phi^+_"A"$])$ is her half of $#ket([$Phi^+$])$. She then measures both qubits and sends the result to Bob.
#align(center)[
// Teleportation circuit diagram would go here
#box(width: 8cm, height: 4cm)[
_[Quantum teleportation circuit diagram would go here]_
]
]
What should Bob do so that $#ket([$Phi^+_"B"$])$ takes the state $#ket(math.psi)$ had initially?
#v(1fr)
#pagebreak()

View File

@ -1,134 +0,0 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#let markline(s, from, to, c: oblue) = {
import cetz.draw: *
let del = 0.4 // small line
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: c,
stroke: c,
)
line(
from + ".south",
(v => cetz.vector.add(v, (0, -del * s)), from + ".south"),
(v => cetz.vector.add(v, (0, (del + 0.4) * s)), to + ".north"),
(v => cetz.vector.add(v, (0, 0.4 * s)), to + ".north"),
stroke: c + s * 1mm,
)
mark(
to + ".north",
270deg,
..arrow,
)
}
#let marklinetop(s, from, to, del: 0.8, c: oblue) = {
import cetz.draw: *
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: c,
stroke: c,
)
line(
from + ".north",
(v => cetz.vector.add(v, (0, del * s)), from + ".north"),
(v => cetz.vector.add(v, (0, del * s)), to + ".north"),
(v => cetz.vector.add(v, (0, 0.2 * s)), to + ".north"),
stroke: c + s * 1mm,
)
mark(
to + ".north",
270deg,
..arrow,
)
}
#let marklinebot(s, from, to, del: 0.8, c: oblue) = {
import cetz.draw: *
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: c,
stroke: c,
)
line(
from + ".south",
(v => cetz.vector.add(v, (0, -del * s)), from + ".south"),
(v => cetz.vector.add(v, (0, -del * s)), to + ".south"),
(v => cetz.vector.add(v, (0, -0.4 * s)), to + ".south"),
stroke: c + s * 1mm,
)
mark(
to + ".south",
90deg,
..arrow,
)
}
#let marklinebotswap(s, from, to, del: 0.8, c: oblue) = {
import cetz.draw: *
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: c,
stroke: c,
)
line(
from + ".south",
(v => cetz.vector.add(v, (0, -del * s)), from + ".south"),
(v => cetz.vector.add(v, (0.5 * s, -del * s)), to + ".south"),
(v => cetz.vector.add(v, (0.5 * s, -del * s)), to + ".south"),
(v => cetz.vector.add(v, (0.5 * s, del * s)), to + ".north"),
(v => cetz.vector.add(v, (0, del * s)), to + ".north"),
(v => cetz.vector.add(v, (0, 0.2 * s)), to + ".north"),
stroke: c + s * 1mm,
)
mark(
to + ".north",
270deg,
..arrow,
)
}
#let marklinetopswap(s, from, to, del: 0.8, c: oblue) = {
import cetz.draw: *
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: c,
stroke: c,
)
line(
from + ".north",
(v => cetz.vector.add(v, (0, del * s)), from + ".north"),
(v => cetz.vector.add(v, (0.5 * s, del * s)), to + ".north"),
(v => cetz.vector.add(v, (0.5 * s, del * s)), to + ".north"),
(v => cetz.vector.add(v, (0.5 * s, -del * s)), to + ".south"),
(v => cetz.vector.add(v, (0, -del * s)), to + ".south"),
(v => cetz.vector.add(v, (0, -0.2 * s)), to + ".south"),
stroke: c + s * 1mm,
)
mark(
to + ".south",
90deg,
..arrow,
)
}

View File

@ -0,0 +1,58 @@
% use [nosolutions] flag to hide solutions.
% use [solutions] flag to show solutions.
\documentclass[
solutions,
singlenumbering
]{../../../lib/tex/handout}
\usepackage{../../../lib/tex/macros}
\usetikzlibrary{calc}
\uptitlel{Advanced 2}
\uptitler{\smallurl{}}
\title{Symmetric Groups}
\subtitle{Prepared by Mark on \today{}}
\def\line#1#2{
\draw[line width = 0.3mm, ->, ocyan]
(#1)
-- ($(#1) + (0, -1)$)
-- ($(#2) + (0,1)$)
-- (#2);
}
\begin{document}
\maketitle
\input{parts/0 intro}
\input{parts/1 cycle}
\input{parts/2 groups}
\input{parts/3 subgroup}
\section{Bonus problems}
\problem{}
Show that $x \in \mathbb{Z}^+$ has a multiplicative inverse mod $n$ iff $\text{gcd}(x, n) = 1$
\vfill
\problem{}
Let $\sigma = (\sigma_1 \sigma_2 ... \sigma_k)$ be a $k$-cycle in $S_n$, and let $\tau$ be an arbitrary element of $S_n$. \par
Show that $\tau \sigma \tau^{-1}$ = $\bigl(\tau(\sigma_1), \tau(\sigma_2), ..., \tau(\sigma_k)\bigr)$ \par
\hint{As usual, $\tau$ is a permutation. Thus, $\tau(x)$ is the value at position $x$ after applying $\tau$.}
\vfill
\problem{}
Show that the set $\Bigl\{ (1, 2),~ (1,2,...,n) \Bigr\}$ generates $S_n$.
\vfill
% TODO: (a second day?)
% alternating group
% type and sign and conjugation
% isomorphisms & automorphisms
% automorphism groups
\end{document}

View File

@ -1,35 +0,0 @@
#import "@local/handout:0.1.0": *
#show: handout.with(
title: [Symmetric Groups],
by: "Mark",
)
#include "parts/00 intro.typ"
#pagebreak()
#include "parts/01 cycle.typ"
#pagebreak()
#include "parts/02 groups.typ"
#pagebreak()
#include "parts/03 subgroup.typ"
#pagebreak()
= Bonus problems
#problem()
Show that $x in ZZ^+$ has a multiplicative inverse mod $n$ if and only if $gcd(x, n) = 1$
#v(1fr)
#problem()
Let $sigma = (sigma_1 sigma_2 ... sigma_k)$ be a $k$-cycle in $S_n$, and let $tau$ be an arbitrary element of $S_n$. \
Show that $tau sigma tau^(-1)$ = $(tau(sigma_1), tau(sigma_2), ..., tau(sigma_k))$ \
#hint[$tau$ is a permutation, so $tau(x)$ is the value at position $x$ after applying $tau$.]
#v(1fr)
#problem()
Show that the set ${ (1, 2), (1,2,...,n)}$ generates $S_n$.
#v(1fr)

View File

@ -0,0 +1,199 @@
\section{Introduction}
\definition{}
Informally, a \textit{permutation} of a collection of $n$ objects is an ordering of these $n$ objects. \par
For example, a few permutations of $\texttt{A}, \texttt{B}, \texttt{C}, \texttt{D}$ are $\texttt{ABCD}$,
$\texttt{BCDA}$, and $\texttt{DACB}$. \par
\vspace{2mm}
This, however, isn't the definition we'll use today. Instead of defining permutations as \say{ordered lists,}
(as we do above), we'll define them as functions. Our first goal today is to make sense of this definition.
\definition{Permutations}
Let $\Omega$ be an arbitrary set of $n$ objects. \par
A \textit{permutation} on $\Omega$ is a map from $\Omega$ to itself that produces a \textit{unique} output for each input. \par
\note{In other words, if $a$ and $b$ are different, $f(a)$ and $f(b)$ must also be different.}
\footnotetext{The words \say{function} and \say{map} are equivalent.}
\vspace{2mm}
For example, consider $\{1, 2, 3\}$. \par
One permutation on this set can be defined as follows: \par
\begin{itemize}
\item $f(1) = 3$
\item $f(2) = 1$
\item $f(3) = 2$
\end{itemize}
If we take the array $123$ and apply
\problem{}
List all permutations on three objects. \par
How many permutations of $n$ objects are there?
\vfill
\problem{}
What map corresponds to the permutation $[321]$?
\vfill
\problem{}
What map corresponds to the \say{do-nothing} permutation? \par
Write it as a function and in square-bracket notation. \par
\note[Note]{We usually call this the \textit{trivial permutation}}
\vfill
\pagebreak
We can visualize permutations with a \textit{string diagram}, shown below. \par
The arrows in this diagram denote the image of $f$ for each possible input.
Two examples are below:
\vspace{2mm}
\hfill
\begin{tikzpicture}[scale=0.5]
\node (1a) at (0, 0.5) {1};
\node (2a) at (1, 0.5) {2};
\node (3a) at (2, 0.5) {3};
\node (4a) at (3, 0.5) {4};
\node (1b) at (0, -2) {1};
\node (3b) at (1, -2) {3};
\node (4b) at (2, -2) {4};
\node (2b) at (3, -2) {2};
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\line{4a}{4b}
\end{tikzpicture}
\hfill
\begin{tikzpicture}[scale=0.5]
\node (1a) at (0, 0.5) {1};
\node (2a) at (1, 0.5) {2};
\node (3a) at (2, 0.5) {3};
\node (4a) at (3, 0.5) {4};
\node (2b) at (0, -2) {2};
\node (1b) at (1, -2) {1};
\node (3b) at (2, -2) {3};
\node (4b) at (3, -2) {4};
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\line{4a}{4b}
\end{tikzpicture}
\hfill\null
\vspace{2mm}
Note that in all our examples thus far, the objects in our set have an implicit order.
This is only for convenience. The elements of $\Omega$ are not ordered (it is a \textit{set}, after all),
and we may present them however we wish.
\vspace{1cm}
For example, consider the diagrams below. \par
On the left, 1234 are ordered as usual. In the middle, they are ordered alphabetically. \par
The rightmost diagram uses arbitrary, meaningless labels.
\vspace{2mm}
\hfill
\begin{tikzpicture}[scale=0.5]
\node (1a) at (0, 0.5) {1};
\node (2a) at (1, 0.5) {2};
\node (3a) at (2, 0.5) {3};
\node (4a) at (3, 0.5) {4};
\node (2b) at (0, -2) {2};
\node (1b) at (1, -2) {1};
\node (3b) at (2, -2) {3};
\node (4b) at (3, -2) {4};
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\line{4a}{4b}
\end{tikzpicture}
\hfill
\begin{tikzpicture}[scale=0.5]
\node (4a) at (0, 0.5) {4};
\node (1a) at (1, 0.5) {1};
\node (3a) at (2, 0.5) {3};
\node (2a) at (3, 0.5) {2};
\node (1b) at (0, -2) {1};
\node (4b) at (1, -2) {4};
\node (3b) at (2, -2) {3};
\node (2b) at (3, -2) {2};
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\line{4a}{4b}
\end{tikzpicture}
\hfill
\begin{tikzpicture}[scale=0.5]
\node (1a) at (0, 0.5) {$\triangle$};
\node (2a) at (1, 0.5) {$\divideontimes$};
\node (3a) at (2, 0.5) {$\circledcirc$};
\node (4a) at (3, 0.5) {$\boxdot$};
\node (2b) at (0, -2) {$\divideontimes$};
\node (1b) at (1, -2) {$\triangle$};
\node (3b) at (2, -2) {$\circledcirc$};
\node (4b) at (3, -2) {$\boxdot$};
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\line{4a}{4b}
\end{tikzpicture}
\hfill\null
\vspace{2mm}
It shouldn't be hard to see that despite the different \say{output} order (2134 and 1432), \par
the same permutation is depicted in all three diagrams. This example demonstrates two things:
\begin{itemize}[itemsep=2mm]
\item First, the names of the items in our set do not have any meaning. \par
$\Omega$ is just a set of $n$ arbitrary things, which we may label however we like.
\item Second, permutations are verbs. We do not care about the \say{output} of a certain permutation,
we care about what it \textit{does}. We could, for example, describe the permutation above as
\say{swap the first two of four elements.}
\end{itemize}
\vspace{2mm}
Why, then, do we order our elements when we talk about permutations? As noted before, this is for convenience.
If we assign a natural order to the elements of $\Omega$ (say, 1234), we can identify permutations by simply listing
their output:
Clearly, $[1234]$ represents the trivial permutation, $[2134]$ represents \say{swap first two,}
and $[4123]$ represents \say{cycle right.}
\problem{}
Draw string diagrams for $[4123]$ and $[2341]$.
\vfill
\pagebreak

View File

@ -1,378 +0,0 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "../macros.typ": *
= Introduction
#definition()
Informally, a _permutation_ on a collection of $n$ objects is an ordering of these $n$ objects.
For example, a few permutations of `A`, `B`, `C`, and `D` are `ABCD`, `BCDA`, and `DACB`.
#v(2mm)
This, however, isn't the definition we'll use today.
Instead of defining permutations as "ordered lists" \
(like we do above), we'll define them as _functions_ on finite sets. \
Our first goal today is to make sense of this definition.
#definition("Permutations")
Let $Omega$ be a set of $n$ arbitrary objects.
A _permutation_ $f$ on $Omega$ is a map#footnote[The words "function" and "map" are equivalent.]
from $Omega$ to itself that produces a _unique_ output for each input.
#note[This means that if $a$ and $b$ are different, $f(a)$ and $f(b)$ must also be different.]
#v(2mm)
For example, consider ${1, 2, 3}$. \
One permutation on this set can be defined as follows:
- $f(1) = 3$
- $f(2) = 1$
- $f(3) = 2$
If we take the array $123$ and apply $f$, we get $312$.
#problem()
List all permutations on three objects. \
How many permutations of $n$ objects are there?
#v(1fr)
#problem()
What map corresponds to the permutation that produces the array `231` from the array `123`?
#v(1fr)
#problem()
What map corresponds to the "do-nothing" permutation?
Write it as a function and in square-bracket notation.
#note([We will call this the _trivial permutation_])
#v(1fr)
#pagebreak()
We can visualize a permutation using a _string diagram_.
The arrows in this diagram denote \
the output of $f$ for each possible input.
Two examples are below:
#table(
columns: (1fr, 1fr),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((0 * s, 0 * s), $1$, name: "1b")
content((1 * s, 0 * s), $3$, name: "3b")
content((2 * s, 0 * s), $4$, name: "4b")
content((3 * s, 0 * s), $2$, name: "2b")
markline(s, "1a", "1b")
markline(s, "2a", "2b")
markline(s, "3a", "3b")
markline(s, "4a", "4b")
})),
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((0 * s, 0 * s), $2$, name: "2b")
content((1 * s, 0 * s), $1$, name: "1b")
content((2 * s, 0 * s), $3$, name: "3b")
content((3 * s, 0 * s), $4$, name: "4b")
markline(s, "1a", "1b")
markline(s, "2a", "2b")
markline(s, "3a", "3b")
markline(s, "4a", "4b")
})),
)
Note that the elements of the set we are permuting are not ordered. (it is a _set_, after all!) \
For example, consider the diagrams below.
On the left, 1234 are ordered as usual. \
In the middle, they are ordered alphabetically. \
The rightmost diagram uses arbitrary, meaningless labels.
#v(2mm)
#table(
columns: (1fr, 1fr, 1fr),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
let del = 0.2 // small line
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((0 * s, 0 * s), $2$, name: "2b")
content((1 * s, 0 * s), $1$, name: "1b")
content((2 * s, 0 * s), $3$, name: "3b")
content((3 * s, 0 * s), $4$, name: "4b")
line(
"1a.south",
(v => cetz.vector.add(v, (0, -del)), "1a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "1b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "1b.north"),
stroke: oblue + s * 1mm,
)
mark(
"1b.north",
270deg,
..arrow,
)
line(
"2a.south",
(v => cetz.vector.add(v, (0, -del)), "2a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "2b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "2b.north"),
stroke: oblue + s * 1mm,
)
mark(
"2b.north",
270deg,
..arrow,
)
line(
"3a.south",
(v => cetz.vector.add(v, (0, -del)), "3a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "3b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "3b.north"),
stroke: oblue + s * 1mm,
)
mark(
"3b.north",
270deg,
..arrow,
)
line(
"4a.south",
(v => cetz.vector.add(v, (0, -del)), "4a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "4b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "4b.north"),
stroke: oblue + s * 1mm,
)
mark(
"4b.north",
270deg,
..arrow,
)
})),
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
let del = 0.2 // small line
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $4$, name: "4a")
content((1 * s, 3 * s), $1$, name: "1a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $2$, name: "2a")
content((0 * s, 0 * s), $1$, name: "1b")
content((1 * s, 0 * s), $4$, name: "4b")
content((2 * s, 0 * s), $3$, name: "3b")
content((3 * s, 0 * s), $2$, name: "2b")
line(
"1a.south",
(v => cetz.vector.add(v, (0, -del)), "1a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "1b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "1b.north"),
stroke: oblue + s * 1mm,
)
mark(
"1b.north",
270deg,
..arrow,
)
line(
"2a.south",
(v => cetz.vector.add(v, (0, -del)), "2a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "2b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "2b.north"),
stroke: oblue + s * 1mm,
)
mark(
"2b.north",
270deg,
..arrow,
)
line(
"3a.south",
(v => cetz.vector.add(v, (0, -del)), "3a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "3b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "3b.north"),
stroke: oblue + s * 1mm,
)
mark(
"3b.north",
270deg,
..arrow,
)
line(
"4a.south",
(v => cetz.vector.add(v, (0, -del)), "4a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "4b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "4b.north"),
stroke: oblue + s * 1mm,
)
mark(
"4b.north",
270deg,
..arrow,
)
})),
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
let del = 0.2 // small line
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $ast.circle$, name: "4a")
content((1 * s, 3 * s), $hexa.stroked$, name: "1a")
content((2 * s, 3 * s), $triangle.stroked.b$, name: "3a")
content((3 * s, 3 * s), $\#$, name: "2a")
content((0 * s, 0 * s), $hexa.stroked$, name: "1b")
content((1 * s, 0 * s), $ast.circle$, name: "4b")
content((2 * s, 0 * s), $triangle.stroked.b$, name: "3b")
content((3 * s, 0 * s), $\#$, name: "2b")
line(
"1a.south",
(v => cetz.vector.add(v, (0, -del)), "1a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "1b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "1b.north"),
stroke: oblue + s * 1mm,
)
mark(
"1b.north",
270deg,
..arrow,
)
line(
"2a.south",
(v => cetz.vector.add(v, (0, -del)), "2a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "2b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "2b.north"),
stroke: oblue + s * 1mm,
)
mark(
"2b.north",
270deg,
..arrow,
)
line(
"3a.south",
(v => cetz.vector.add(v, (0, -del)), "3a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "3b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "3b.north"),
stroke: oblue + s * 1mm,
)
mark(
"3b.north",
270deg,
..arrow,
)
line(
"4a.south",
(v => cetz.vector.add(v, (0, -del)), "4a.south"),
(v => cetz.vector.add(v, (0, del + 0.2)), "4b.north"),
(v => cetz.vector.add(v, (0, 0.2)), "4b.north"),
stroke: oblue + s * 1mm,
)
mark(
"4b.north",
270deg,
..arrow,
)
})),
)
#v(2mm)
It shouldn't be hard to see that despite the different "output" each diagram displays \
($2134$, $1432$, and $hexa.stroked ast.circle triangle.stroked.b \#$), the same permutation ("swap first two") is shown in each.
Observe the following:
- The "names" of the items in our set do not have any meaning. \
We are interested in sets of $n$ arbitrary things, which we may label however we like.
- Permutations are _verbs_. \
We do not care about the "output" of a certain permutation. Rather, we care about what it _does_. \
We could, for example, describe the permutation in the above three diagrams as "swap the first two elements."
#definition("Square Brackets")
However, elements with an implicit order (1, 2, 3, ...) are convenient. \
Such sets let us denote a permutation by writing the array it produces \
after transforming the "reference order" $123...n$.
We will call this _square-bracket notation_. \
$[312]$ denotes the permutation that produces $312$ when applied to $123$.
#problem()
Draw string diagrams for $[4123]$ and $[2341]$.
#v(1fr)

View File

@ -1,635 +0,0 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "../macros.typ": *
= Cycle Notation
#definition("Order")
The _order_ of a permutation $f$ is the smallest positive $n$ where $f^n (x) = x$ for all $x$. \
In other words, if we repeatedly apply a permutation with order $n$, \
we will get back to where we started after $n$ steps. \
#v(2mm)
For example, consider $[2134]$. This permutation has order $2$, as we can see below:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
let del = 0.2 // small line
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((0 * s, 0 * s), $2$, name: "2b")
content((1 * s, 0 * s), $1$, name: "1b")
content((2 * s, 0 * s), $3$, name: "3b")
content((3 * s, 0 * s), $4$, name: "4b")
content((0 * s, -3 * s), $1$, name: "1c")
content((1 * s, -3 * s), $2$, name: "2c")
content((2 * s, -3 * s), $3$, name: "3c")
content((3 * s, -3 * s), $4$, name: "4c")
markline(s, "1a", "1b")
markline(s, "2a", "2b")
markline(s, "3a", "3b")
markline(s, "4a", "4b")
markline(s, "1b", "1c")
markline(s, "2b", "2c")
markline(s, "3b", "3c")
markline(s, "4b", "4c")
})),
)
Swapping the first two elements of a list twice changes nothing. \
Thus, $[2134]$ has an order of two.
#problem()
What is the order of $[2314]$? \
How about $[4321]$? \
#note(type: "Note")[Try to solve this problem without drawing any strings!]
#v(1fr)
#problem()
Find a permutation on five elements with order 4.
#v(1fr)
#problem(label: "finiteorder")
Show that all permutations on a finite set have a well-defined order. \
In other words, show that there must always be an integer $n$ where $f^n (x) = x$.
#v(1fr)
#pagebreak()
#definition("Composition", label: "compdef")
The _composition_ of two permutations $f$ and $g$ is the permutation $h(x) = f(g(x))$. \
We'll denote this by simply writing the permutations we're composing next to each other, like $f g$. \
Note that $g$ is applied _before_ $f$ in $f g$.
#problem()
Show that function composition is associative. \
That is, show that $f(g h) = (f g)h$.
#v(1fr)
#problem()
What is $[1324][4321]$? \
How about $[321][213][231]$? \
Rewrite these compositions as one permutation in square brackets.
#solution([
- $[1324][4321]$ is $[4231]$
- $[321][213][231]$ is $[123]$
])
#v(1fr)
As you may have noticed, the square-bracket notation we've been using thus far is a bit unwieldy.
Permutations are verbs---but we've been referring to them using a noun (i.e, their output).
Square-bracket notation fails to capture the structure of the permutation it identifies.
#v(2mm)
Is the permutation $[1234]$ different than the permutation $[12345]$? \
These permutations operate on different sets---but they are both the identity! \
Are $[5342761]$ and $[1342567][5234761]$ similar? What are their orders?
#v(2mm)
Good notation should help us understand the objects we are studying. \
We need something better than square brackets.
#pagebreak()
#remark("Cycles")
Any permutation is composed of a number of _cycles_. \
Reread @finiteorder to convince yourself of this fact.
#example()
Consider the permutation $[2134]$. \
It consists of one two-cycle: $1 arrow.r 2 arrow.r 1$, which we can see in the diagram below. \
#note(
type: "Note",
)[
$3 arrow.r 3$ and $4 arrow.r 4$ are also cycles, but we'll ignore them.
One-cycles aren't interesting.
]
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.6 // scale
let del = 0.4 // small line
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
marklinetop(s, "1a", "2a")
marklinebot(s, "2a", "1a")
})),
)
#v(4mm)
The permutation $[431265]$ is a bit more interesting---it contains two cycles: \
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.6 // scale
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((4 * s, 3 * s), $5$, name: "5a")
content((5 * s, 3 * s), $6$, name: "6a")
marklinetop(s, "3a", "2a", del: 0.8)
marklinebot(s, "2a", "4a", del: 1.3)
marklinetop(s, "4a", "1a", del: 1.3)
marklinebot(s, "1a", "3a", del: 0.8)
marklinebot(s, "5a", "6a", del: 0.8, c: ogreen)
marklinetop(s, "6a", "5a", del: 0.8, c: ogreen)
})),
)
#remark()
Two-cycles may also be called _transpositions_. \
Any permutation that swaps two elements is a transposition.
#problem()
Find all cycles in $[5342761]$.
#solution[
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.5 // scale
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (
frame: "rect",
stroke: none,
padding: .1,
))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((4 * s, 3 * s), $5$, name: "5a")
content((5 * s, 3 * s), $6$, name: "6a")
content((6 * s, 3 * s), $7$, name: "7a")
marklinetop(s, "1a", "7a", del: 1.6)
marklinebot(s, "7a", "5a", del: 1.2)
marklinetopswap(s, "5a", "1a", del: 1.2)
marklinebot(s, "2a", "4a", del: 1.2, c: ogreen)
marklinetop(s, "4a", "3a", del: 0.8, c: ogreen)
marklinebotswap(s, "3a", "2a", del: 0.8, c: ogreen)
})),
)
There are two non-trivial cycles:
- $4 arrow.r 3 arrow.r 2 arrow.r 4$
- $1 arrow.r 7 arrow.r 5 arrow.r 1$
]
#v(1fr)
#problem()
What permutation on five objects is formed by the cycles $3 arrow.r 5 arrow.r 3$ and $1 arrow.r 2 arrow.r 4 arrow.r 1$? \
Write it in square-bracket notation.
#solution[
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.6 // scale
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (
frame: "rect",
stroke: none,
padding: .1,
))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((4 * s, 3 * s), $5$, name: "5a")
marklinetop(s, "3a", "5a", del: 0.8, c: ogreen)
marklinebot(s, "5a", "3a", del: 0.8, c: ogreen)
marklinebot(s, "1a", "2a", del: 0.8)
marklinetop(s, "2a", "4a", del: 1.2)
marklinebotswap(s, "4a", "1a", del: 1.2)
})),
)
This is $[41523]$.
]
#v(1fr)
#pagebreak()
#definition("Cycle Notation")
We can use cycles to develop better notation: \
Instead of identifying permutations using their output, we'll identify them using their _cycles_.
#v(2mm)
For example, we'll write $[2134]$ is $(12)$ in cycle notation, \
since it consists only of the cycle $1 arrow.r 2 arrow.r 1$:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.6 // scale
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (
frame: "rect",
stroke: none,
padding: .1,
))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
marklinebot(s, "1a", "2a", del: 0.8)
marklinetop(s, "2a", "1a", del: 0.8)
})),
)
#v(2mm)
Permutations that consist of more than one cycle are written as a composition. \
$[2143]$ is written as $(12)(34)$. Applying the permutation $[2143]$ has the same effect as applying $(34)$, then applying $(12)$.
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.6 // scale
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (
frame: "rect",
stroke: none,
padding: .1,
))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
marklinetop(s, "1a", "2a", del: 0.8)
marklinebot(s, "2a", "1a", del: 0.8)
marklinetop(s, "3a", "4a", del: 0.8, c: ogreen)
marklinebot(s, "4a", "3a", del: 0.8, c: ogreen)
})),
)
#remark()
According to @finiteorder, any permutation may be written as a composition of disjoint cycles. \
Convince yourself of this fact.
#problem()
Rewrite $[431265]$ in cycle notation.
#solution[
$[431265]$ is $(1324)(56)$:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.6 // scale
let arrow = (
symbol: ")>",
scale: s * 2.2,
fill: oblue,
stroke: oblue,
)
set-style(content: (
frame: "rect",
stroke: none,
padding: .1,
))
content((0 * s, 3 * s), $1$, name: "1a")
content((1 * s, 3 * s), $2$, name: "2a")
content((2 * s, 3 * s), $3$, name: "3a")
content((3 * s, 3 * s), $4$, name: "4a")
content((4 * s, 3 * s), $5$, name: "5a")
content((5 * s, 3 * s), $6$, name: "6a")
marklinetop(s, "1a", "3a", del: 0.8, c: ogreen)
marklinebot(s, "4a", "1a", del: 1.3, c: ogreen)
marklinebot(s, "3a", "2a", del: 0.8, c: ogreen)
marklinetop(s, "2a", "4a", del: 1.3, c: ogreen)
marklinetop(s, "5a", "6a", del: 0.8)
marklinebot(s, "6a", "5a", del: 0.8)
})),
)
]
#remark()
The identity permutation $f(x) = x$ is written as $()$ in cycle notation.
#problem()
Convince yourself that disjoint cycles commute. \
That is, that $(1324)(56) = (56)(1324) = [431265]$ since $(1324)$ and $(56)$ do not overlap. \
#v(1fr)
#pagebreak()
#problem(label: "insquare")
Write the following in square-bracket notation.
- $(12)$ on a set of 2 elements
- $(12)(435)$ on a set of 5 elements
#v(2mm)
- $(321)$ on a set of 3 elements
- $(321)$ on a set of 6 elements
#v(2mm)
- $(1234)$ on a set of 4 elements
- $(3412)$ on a set of 4 elements
#note[
Note that $(12)$ refers the "swap first two" permutation on a set of _any_ size. \
We can use consistent notation for the same action on two different sets! \
]
#v(1fr)
#problem()
Write the following in square-bracket notation.
Pay attention!
- $(13)(243)$ on a set of 4 elements
- $(243)(13)$ on a set of 4 elements
#v(1fr)
#problem()
Consider the last two permutations in @insquare, $(1234)$ and $(3412)$. \
These are _identical_---they are the same cycle written in two different ways. \
List all other ways to write this cycle. \
#hint[There are two more.]
#v(1fr)
#pagebreak()
#definition("Inverse")
The _inverse_ of a permutation $f$ is a permutation $g$ that "un-does" $f$. \
This means that $g(f(x)) = x$ for all $x$.
#problem()
What is the inverse of $(12)$? \
How about $(123)$? And $(4231)$? \
#note[
Note we do not need to know the size of the set we are operating on. \
The inverse of $(12)$ is the same in sets of all sizes!
]
#v(1fr)
#problem()
Let $sigma$ be a permutation composed of disjoint cycles $sigma_1sigma_2...sigma_k$. \
Say we know the order of all $sigma_i$. What is the order of $sigma$?
#solution[
$
#text[lcm]\(#text[ord]\(sigma_1),#h(0.5em) #text[ord]\(sigma_2),#h(0.5em) ...,#h(0.5em) #text[ord]\(sigma_k))
$
]
#v(1fr)
#problem(label: "cycletrans")
Show that any cycle $(123...n)$ is equal to the product $(12)(23)...(n-1, n)$.
#solution[
*Intuition:*\
$(123...n)$ is a right-shift. Swapping all pairs from right to left achieves the same effect.
#v(2mm)
*Complete solution:* \
Consider $n-1$. After applying $(123...n)$, it takes the position of $n$.
After applying $(n-1, n)$, $n-1$ moves to the same position _and is never moved again!_ \
Repeat this argument for all other $n$.
]
#v(1fr)
#problem()
Write $(7126453)$ as a product of transpositions. \
#solution[
Move elements one at a time, using the last position as temporary storage.
We get $(71)(72)(76)(74)(75)(73)$.
Other solutions are possible. \
#v(2mm)
*Bonus:* How can we do this in the fewest number of transpositions?
]
#v(1fr)
#pagebreak()
#problem(label: "simpletrans")
Show that any permutation is a product of transpositions.
#solution[
Re-use the argument in @cycletrans. \
Pick an arbitrary "working slot," and re-build all cycles. \
Use the "not touched again" argument for a proper proof.
]
#v(1fr)
#problem(label: "onetrans")
Show that any permutation is a product of transpositions of the form $(1, k)$. \
#solution[
Use @simpletrans to rewrite each $(a, b)$ as $(1, a)(1, b)(1, a)$. \
Showing that $(a, b) = (1, a)(1, b)(1, a)$ is fairly easy.
]
#v(1fr)
#pagebreak()
#problem(label: "oneplustrans")
Show that any transposition $(a, b)$ is equal to the product $(a, a+1)(a+1, b)(a, a+1)$ whenever $a + 1 != b$.
#solution[
This is the same as @onetrans,
but we use $a + 1$ as a "working slot" instead of $1$.
]
#v(1fr)
#problem()
Show that any permutation is a product of adjacent transpositions. \
An _adjacent transposition_ swaps two adjacent elements, and thus looks like $(n, n+1)$.
#solution[
As before, we will use @simpletrans and rewrite the transpositions it produces in a convenient fashion.
To do this, we must show that every transposition $(a, b)$ is a product of adjacent transpositions.
#v(2mm)
In the proof below, assume that $a < b$ and perform induction on $b - a$. \
#v(4mm)
*Base Case:*\
If $b - a = 1$, $(a, b)$ is a product of adjacent transpositions. \
In fact, it _is_ an adjacent transposition.
#v(4mm)
*Induction:*\
Now, say $b - a = n + 1$. \
Assume that all $(a, b)$ where $b - a <= n$ are products of adjacent transpositions.\
By @oneplustrans, $(a, b) = (a, a+1)(a+1, b)(a, a+1)$.
#v(2mm)
$(a, a+1)$ is an adjacent transposition, and $b - (a+1) = n$. \
Thus, $(a, b)$ is a product of adjacent transpositions.
]
#v(1fr)

View File

@ -1,148 +0,0 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "../macros.typ": *
= Groups
#definition()
Before we continue, we must introduce a bit of notation:
- $S_n$ is the set of permutations on $n$ objects.
- $ZZ_n$ is the set of integers mod $n$.
#problem()
What are the elements of $S_3$? #hint[Use cycle notation] \
How about $ZZ_8$?
#v(1fr)
#definition()
A _group_ $(G, *)$ consists of a set $G$ and an operator $*$. \
Groups always have the following properties:
+ $G$ is closed under $*$. In other words, $a, b in G => a * b in G$.
+ $*$ is _associative_: $(a * b) * c = a * (b * c)$ for all $a,b,c in G$
+ There is an _identity_ $e in G$, so that $a * e = e * a = a$ for all $a in G$.
+ For any $a in G$, there exists a $b in G$ so that $a * b = b * a = e$. $b$ is called the _inverse_ of $a$. \
This element is written as $-a$ if our operator is addition and $a^(-1)$ otherwise.
Any pair $(G, *)$ that satisfies these properties is a group.
#problem()
Is $(ZZ_5, +)$ a group? \
Is $(ZZ_5, -)$ a group? \
#note[$+$ and $-$ refer to the usual operations in modular arithmetic.]
#v(1fr)
#problem()
What is the group with the fewest number of elements?
#solution[
Let $(G, star)$ be our group, where $G = {x}$ and $star$ is defined by $x star x = x$
Verifying that the trivial group is a group is trivial.
]
#definition()
$ZZ_n^times$ is the set of integers mod $n$ with multiplicative inverses. \
We can prove that this is the set of integers smaller than $n$ and coprime to $n$. \
For example, $ZZ_12^times = {1, 5, 7, 11}$.
#problem()
What are the elements of $ZZ^times_8$? \
How about $ZZ^times_23$? #hint[23 is prime.]
#v(1fr)
#pagebreak()
#problem()
Show that function composition is associative
#v(1fr)
#problem()
Show that $S_n$ is a group under composition.
#v(1fr)
#problem()
Let $(G, *)$ be a group with finitely many elements, and let $a in G$. \
Show that there is an $n$ in $in ZZ$ so that $a^n = e$ \
#hint[
$a^n = a * a * ... * a$ repeated $n$ times. \
$a^(-n) = a^(-1) * a^(-1) * ... * a^(-1)$, where $a^(-1)$ is the inverse of $a$. \
]
#v(2mm)
The smallest such $n$ defines the _order_ of $g$.
#hint[
We've already done a special case of this problem! \
Find it in this handout, then rewrite your proof for an arbitrary (finite) group.
]
#v(1fr)
#problem()
What is the order of 5 in $(ZZ_25, +)$? \
What is the order of 2 in $(ZZ_17^times, times)$? \
#v(1fr)
#pagebreak()
#definition("Generator", label: "gendef")
Let $G$ be a group, and let $g$ be an element of $G$. \
We say $g$ is a _generator_ if every other element of $G$ may be written as a power of $g$. \
#problem()
Let $G$ be a group of $n$ elements. \
If $g$ is a generator, what is its order? \
Provide a proof.
#v(1fr)
#problem()
Find the two generators in $(ZZ, +)$ \
Then, find all generators of $(ZZ_5, +)$
#v(1fr)
#problem()
How many groups have only one generator?
#solution[
Two: the trivial group and $(ZZ_2, +)$.
]
#v(1fr)
#definition()
Let $S$ be a subset of the elements in $G$. \
We say that $S$ _generates_ $G$ if every element of $G$ may be written as a product of elements in $S$. \
#note(type: "Note")[This is an extension of @gendef.]
#problem()
We've already found a few generating sets of $S_n$. What are they?
#solution[
The following sets generate $S_n$:
- All transpositions
- All transpositions of the form $(1, k)$
- All adjacent transpositions
#v(2mm)
The smallest generating set of $S_n$ consists of the transposition $(12)$ and the $n$-cycle $(1,2,...,n)$. \
The proof of this is a bonus problem later in the handout.
]
#v(1fr)

View File

@ -1,172 +0,0 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "../macros.typ": *
= Subgroups
#problem(label: "s2s3share")
What elements do $S_2$ and $S_3$ share?
#v(2cm)
Consider the sets $\{1, 2\}$ and $\{1,2,3\}$. Clearly, $\{1, 2\} subset \{1, 2, 3\}$. \
Can we say something similar about $S_2$ and $S_3$?
#v(2mm)
Looking at @s2s3share, we may want to say that $S_2 subset S_3$ since every element of $S_2$ is in $S_3$. \
This however, isn't as interesting as it could be. Remember that $S_2$ and $S_3$ are _groups_, not _sets_: \
their elements come with structure, which the "subset" relation does not capture.
#v(2mm)
To account for this, we'll define a similar relation: subgroups.
#definition("Subgroup")
Let $G$ and $G'$ be groups. We say $G'$ is a _subgroup_ of $G$ (and write $G' subset G$) if the following are true:\
(Note that $x, y$ are elements of $G$, and $x y$ is multiplication in $G$)
- the set of elements in $G'$ is a subset of the set of elements in $G$.
- the identity of $G$ is in $G'$
- $x,y in G' => x y in G'$
- $x in G' => x^(-1) in G'$
The above definition may look fairly scary, but the idea behind a subgroup is simple. \
Consider $S_3$ and $S_4$, the groups of permutations of $3$ and $4$ elements. \
#v(2mm)
Say we have a set of four elements and only look at the first three. \
$S_3$ fully describes all the ways we can arrange those three elements:
#table(
columns: (1fr,),
align: center,
stroke: none,
align(center, cetz.canvas({
import cetz.draw: *
let s = 0.7
set-style(content: (frame: "rect", stroke: none, fill: white, padding: .1))
content((0 * s, 0.5 * s), $1$, name: "1a")
content((1 * s, 0.5 * s), $2$, name: "2a")
content((2 * s, 0.5 * s), $3$, name: "3a")
content((3 * s, 0.5 * s), $4$, name: "4a")
content((0 * s, -2 * s), $2$, name: "2b")
content((1 * s, -2 * s), $3$, name: "3b")
content((2 * s, -2 * s), $1$, name: "1b")
content((3 * s, -2 * s), $4$, name: "4b")
// These arrows are wrong,
// but create a symmetric picture
markline(s, "1a", "1b")
markline(s, "2a", "3b")
markline(s, "3a", "2b")
markline(s, "4a", "4b", c: ogreen)
content(
(1 * s, -0.55 * s),
$S_3$,
fill: white,
stroke: oblue + 0.6mm,
padding: 1.3mm,
)
})),
)
#problem()
Show that $S_3$ is a subgroup of $S_4$.
#v(1fr)
#pagebreak()
#definition("Isomorphism")
Let $G$ and $H$ be groups. We say that $G$ and $H$ are _isomorphic_ (and write $G tilde.equiv H$) \
if there is a bijection $f: G -> H$ with the following properties:
- $f(e_G) = e_H$, where $e_G$ is the identity in $G$
- $f(x^(-1)) = f(x)^(-1)$ for all $x$ in $G$
- $f(x y) = f(x) f(y)$ for all $x, y$ in $G$
Intuitively, you can think of isomorphism as a form of equivalence. \
If two groups are isomorphic, they only differ by the names of their elements. \
The function $f$ above tells us how to map one set of labels to the other.
#problem()
Show that $ZZ_7^times$ and $ZZ_9^times$ are isomorphic.
#hint[
Build a bijection with the above properties. \
Remember that a group is fully defined by its multiplication table.
]
#v(1fr)
#problem()
Show that $ZZ_10^times$, $ZZ_5^times$, and $ZZ_4$ are isomorphic.
#hint[
Build a bijection with the above properties. \
Remember that a group is fully defined by its multiplication table.
]
#v(1fr)
#problem()
Show that isomorphism is transitive. \
That is, if $A tilde.equiv B$ and $B tilde.equiv C$, then $A tilde.equiv C$.
#v(1fr)
#pagebreak()
#problem(label: "firstindex")
How many subgroups of $S_4$ are isomorphic to $S_3$? \
#v(1fr)
#problem()
What are the orders of $S_3$ and $S_4$? \
How is this related to @firstindex?
#solution[
$|S_4| = |S_3| times [S_4 : S_3]$
#v(2mm)
This solution is written using index notation, \
but the class doesn't need to know what it means yet.
]
#v(1fr)
#problem()
$S_4$ also has $S_2$ and the trivial group as subgroups. \
How many instances of each does $S_4$ contain?
#v(1fr)
#problem()
$(ZZ_4, +)$ is also a subgroup of $S_4$. Find it! \
How many subgroups of $ZZ_4$ are isomorphic to $S_4$?
#solution[
A good hint is "look at generators."
#v(4mm)
There are four instances of $ZZ_4$ in $S_4$, each of which is generated by a 4-cycle of $S_n$. \
(i.e, the group generated by $(1234)$ is isomorphic to $ZZ_4$)
]
#v(1fr)

View File

@ -0,0 +1,536 @@
\section{Cycle Notation}
\definition{Order}
The \textit{order} of a permutation $f$ is the \textbf{smallest} positive $n$ so that $f^n(x) = x$ for all $x$. \par
If we repeatedly apply a permutation with order $n$, we will get back to where we started after $n$ steps. \par
\vspace{2mm}
For example, consider $[2134]$. This permutation has order $2$, as we clearly see below:
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1a) at (0, 0.5) {1};
\node (2a) at (1, 0.5) {2};
\node (3a) at (2, 0.5) {3};
\node (4a) at (3, 0.5) {4};
\node (2b) at (0, -2) {2};
\node (1b) at (1, -2) {1};
\node (3b) at (2, -2) {3};
\node (4b) at (3, -2) {4};
\node (1c) at (0, -4.5) {1};
\node (2c) at (1, -4.5) {2};
\node (3c) at (2, -4.5) {3};
\node (4c) at (3, -4.5) {4};
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\line{4a}{4b}
\line{1b}{1c}
\line{2b}{2c}
\line{3b}{3c}
\line{4b}{4c}
\end{tikzpicture}
\end{center}
Swapping the first two elements of a list twice changes nothing. \par
Thus, $[2134]$ has an order of two.
\problem{}
What is the order of $[2314]$? \par
How about $[4321]$? \par
\note[Note]{You shouldn't need to draw any strings to solve this problem.}
\vfill
\problem{}
Show that all permutations (on a finite set) have a well-defined order. \par
In other words, show that there is always an integer $n$ so that $f^n(x) = x$.
\vfill
\definition{Composition}<compdef>
The \textit{composition} of two permutations $f$ and $g$ is the permutation $h(x) = f(g(x))$. \par
We'll denote this as $fg$---that is, by simply writing the permutations we're composing next to each other.
\problem{}
Show that function composition is associative. \par
That is, show that $f(gh) = (fg)h$.
\vfill
\problem{}
What is $[1324][4321]$? \par
How about $[321][213][231]$? \par
\vfill
\pagebreak
As you may have noticed, the square-bracket notation we've been using thus far is a bit unwieldy.
Permutations are verbs---but we've been referring to them using a noun (namely, their output when
applied to an ordered sequence of numbers). Our notation fails to capture the meaning of the
underlying object.
\vspace{2mm}
Think about it: is the permutation $[1234]$ different than the permutation $[12345]$? \par
Indeed, these permutations operate on different sets---but they are both the identity! \par
What should we do if we want to talk about the identity on $\{1, 2, ..., 10\}$?
\vspace{2mm}
We need something better.
\definition{Cycles}
Any permutation is composed of a number of \textit{cycles}. \par
For example, consider the permutation $[2134]$, which consists of one two-cycle: $1 \to 2 \to 1$ \par
\note[Note]{$3 \to 3$ and $4 \to 4$ are also cycles, but we'll ignore them. One-cycles aren't aren't interesting.}
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1) at (0, 0) {1};
\node (2) at (1, 0) {2};
\node (3) at (2, 0) {3};
\node (4) at (3, 0) {4};
\draw[line width = 0.3mm, ->, ocyan]
(1)
-- ($(1) + (0,-1)$)
-- ($(2) + (0,-1)$)
-- (2);
\draw[line width = 0.3mm, ->, ocyan]
(2)
-- ($(2) + (0, 1)$)
-- ($(1) + (0, 1)$)
-- (1);
\end{tikzpicture}
\end{center}
The permutation $[431265]$ is a bit more interesting---it contains two cycles: \par
($1 \to 3 \to 2 \to 4 \to 1$ and $5 \to 6 \to 5$)
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1) at (0, 0) {1};
\node (2) at (1, 0) {2};
\node (3) at (2, 0) {3};
\node (4) at (3, 0) {4};
\node (5) at (4, 0) {5};
\node (6) at (5, 0) {6};
\draw[line width = 0.3mm, ->, ocyan]
(3)
-- ($(3) + (0,-1)$)
-- ($(2) + (0,-1)$)
-- (2);
\draw[line width = 0.3mm, ->, ocyan]
(2)
-- ($(2) + (0,1.5)$)
-- ($(4) + (0,1.5)$)
-- (4);
\draw[line width = 0.3mm, ->, ocyan]
(4)
-- ($(4) + (0,-1.5)$)
-- ($(1) + (0,-1.5)$)
-- (1);
\draw[line width = 0.3mm, ->, ocyan]
(1)
-- ($(1) + (0,1)$)
-- ($(3) + (0,1)$)
-- (3);
\draw[line width = 0.3mm, ->, ogreen]
(5)
-- ($(5) + (0,-1)$)
-- ($(6) + (0,-1)$)
-- (6);
\draw[line width = 0.3mm, ->, ogreen]
(6)
-- ($(6) + (0,1)$)
-- ($(5) + (0,1)$)
-- (5);
\end{tikzpicture}
\end{center}
Another name we'll often use for two-cycles is \textit{transposition}. \par
Any permutation that swaps two adjacent elements is called a transposition. \par
\problem{}
Find all cycles in $[5342761]$.
\begin{solution}
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1) at (0, 0) {1};
\node (2) at (1, 0) {2};
\node (3) at (2, 0) {3};
\node (4) at (3, 0) {4};
\node (5) at (4, 0) {5};
\node (6) at (5, 0) {6};
\node (7) at (6, 0) {7};
\draw[line width = 0.3mm, ->, ocyan]
(1)
-- ($(1) + (0,2)$)
-- ($(7) + (0,2)$)
-- (7);
\draw[line width = 0.3mm, ->, ocyan]
(7)
-- ($(7) + (0,-1.5)$)
-- ($(5) + (0,-1.5)$)
-- (5);
\draw[line width = 0.3mm, ->, ocyan]
(5)
-- ($(5) + (0,1.5)$)
-- ($(1) + (0.5,1.5)$)
-- ($(1) + (0.5,-1)$)
-- ($(1) + (0,-1)$)
-- (1);
\draw[line width = 0.3mm, ->, ogreen]
(2)
-- ($(2) + (0,-1.5)$)
-- ($(4) + (0,-1.5)$)
-- (4);
\draw[line width = 0.3mm, ->, ogreen]
(4)
-- ($(4) + (0,1)$)
-- ($(3) + (0,1)$)
-- (3);
\draw[line width = 0.3mm, ->, ogreen]
(3)
-- ($(3) + (0,-1)$)
-- ($(2) + (0.5,-1)$)
-- ($(2) + (0.5,1)$)
-- ($(2) + (0,1)$)
-- (2);
\end{tikzpicture}
\end{center}
\end{solution}
\vfill
\problem{}
What permutation (on five objects) is formed by the cycles $3 \to 5 \to 3$ and $1 \to 2 \to 4 \to 1$?
\begin{solution}
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1) at (0, 0) {1};
\node (2) at (1, 0) {2};
\node (3) at (2, 0) {3};
\node (4) at (3, 0) {4};
\node (5) at (4, 0) {5};
\draw[line width = 0.3mm, ->, ocyan]
(3)
-- ($(3) + (0,1)$)
-- ($(5) + (0,1)$)
-- (5);
\draw[line width = 0.3mm, ->, ocyan]
(5)
-- ($(5) + (0,-1)$)
-- ($(3) + (0,-1)$)
-- (3);
\draw[line width = 0.3mm, ->, ogreen]
(1)
-- ($(1) + (0,-1)$)
-- ($(2) + (0,-1)$)
-- (2);
\draw[line width = 0.3mm, ->, ogreen]
(2)
-- ($(2) + (0,1.5)$)
-- ($(4) + (0,1.5)$)
-- (4);
\draw[line width = 0.3mm, ->, ogreen]
(4)
-- ($(4) + (0,-1.5)$)
-- ($(1) + (0.5,-1.5)$)
-- ($(1) + (0.5,1)$)
-- ($(1) + (0,1)$)
-- (1);
\end{tikzpicture}
This is $[41523]$
\end{center}
\end{solution}
\vfill
\pagebreak
\definition{Cycle Notation}
We now have a solution to our problem of notation.
Instead of referring to permutations using their output, we will refer to them using their \textit{cycles}.
\vspace{2mm}
For example, we'll write $[2134]$ as $(12)$, which denotes the cycle $1 \to 2 \to 1$:
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1) at (0, 0) {1};
\node (2) at (1, 0) {2};
\node (3) at (2, 0) {3};
\node (4) at (3, 0) {4};
\draw[line width = 0.3mm, ->, ocyan]
(1)
-- ($(1) + (0,-1)$)
-- ($(2) + (0,-1)$)
-- (2);
\draw[line width = 0.3mm, ->, ocyan]
(2)
-- ($(2) + (0, 1)$)
-- ($(1) + (0, 1)$)
-- (1);
\end{tikzpicture}
\end{center}
As another example, $[431265]$ is $(1324)(56)$ in cycle notation. \par
Note that we write $[431265]$ as a \textit{composition} of two cycles: \par
applying the permutation $[431265]$ is the same as applying $(1324)$, then applying $(56)$.
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1) at (0, 0) {1};
\node (2) at (1, 0) {2};
\node (3) at (2, 0) {3};
\node (4) at (3, 0) {4};
\node (5) at (4, 0) {5};
\node (6) at (5, 0) {6};
\draw[line width = 0.3mm, ->, ocyan]
(3)
-- ($(3) + (0,-1)$)
-- ($(2) + (0,-1)$)
-- (2);
\draw[line width = 0.3mm, ->, ocyan]
(2)
-- ($(2) + (0,1.5)$)
-- ($(4) + (0,1.5)$)
-- (4);
\draw[line width = 0.3mm, ->, ocyan]
(4)
-- ($(4) + (0,-1.5)$)
-- ($(1) + (0,-1.5)$)
-- (1);
\draw[line width = 0.3mm, ->, ocyan]
(1)
-- ($(1) + (0,1)$)
-- ($(3) + (0,1)$)
-- (3);
\draw[line width = 0.3mm, ->, ogreen]
(5)
-- ($(5) + (0,-1)$)
-- ($(6) + (0,-1)$)
-- (6);
\draw[line width = 0.3mm, ->, ogreen]
(6)
-- ($(6) + (0,1)$)
-- ($(5) + (0,1)$)
-- (5);
\end{tikzpicture}
\end{center}
Any permutation $\sigma$ may be written as a product (i.e, composition) of disjoint cycles $\sigma_1\sigma_2...\sigma_k$. \par
Make sure you believe this fact. If you don't, ask an instructor. \par
Also, the identity $f(x) = x$ is written as $()$ in cycle notation.
\problem{}
Convince yourself that disjoint cycles commute. \par
That is, that $(1324)(56) = (56)(1324) = [431265]$ since $(1324)$ and $(56)$ do not overlap. \par
\problem{}<insquare>
Write the following in square-bracket notation.
\begin{itemize}
\item $(12)$ \tab~\tab on a set of 2 elements
\item $(12)(435)$ \tab on a set of 5 elements
\vspace{2mm}
\item $(321)$ \tab~\tab on a set of 3 elements
\item $(321)$ \tab~\tab on a set of 6 elements
\vspace{2mm}
\item $(1234)$ \tab on a set of 4 elements
\item $(3412)$ \tab on a set of 4 elements
\end{itemize}
\note{
Note that $(12)$ refers the \say{swap first two} permutation on a set of \textit{any} size. \\
We can now use the same name for the same permutation on two different sets! \\
}
\vfill
\problem{}
Write the following in square-bracket notation.
Be careful.
\begin{itemize}
\item $(13)(243)$ \tab on a set of 4 elements
\item $(243)(13)$ \tab on a set of 4 elements
\end{itemize}
\vfill
\problem{}
Look at the last two permutations in \ref{insquare}, $(1234)$ and $(3412)$. \par
These are \textit{identical}---they are the same cycle written in two different ways. \par
List all other ways to write this cycle. \hint{There are two more.} \par
\note{Also, note that the last two permutations in \ref{insquare} are the same.}
\pagebreak
\problem{}
What is the inverse of $(12)$? \par
How about $(123)$? And $(4231)$? \par
\note{
Note that again, we don't need to know how big our set is. \\
The inverse of $(12)$ is the same in all sets.
}
\vfill
\problem{}
Say $\sigma$ is a permutation composed of disjoint cycles $\sigma_1\sigma_2...\sigma_k$. \par
Say we know the order of all $\sigma_i$. What is the order of $\sigma$?
\begin{solution}
$\text{lcm}\Bigl(\text{ord}(\sigma_1),~ \text{ord}(\sigma_2),~ ..., ~ \text{ord}(\sigma_k)\Bigr)$
\end{solution}
\vfill
\problem{}<cycletrans>
Show that any cycle $(123...n)$ is equal to the product $(12)(23)...(n-1, n)$.
\begin{solution}
TODO
\end{solution}
\vfill
\problem{}
Write $(7126453)$ as a product of transpositions. \par
\vfill
\pagebreak
\problem{}<simpletrans>
Show that any permutation is a product of transpositions.
\begin{solution}
Use \ref{cycletrans}.
\end{solution}
\vfill
\problem{}
Show that any permutation is a product of transpositions of the form $(1, k)$. \par
\begin{solution}
Use \ref{simpletrans} and rewrite each $(a, b)$ as $(1, a)(1, b)(1, a)$. \par
Showing that $(a, b) = (1, a)(1, b)(1, a)$ is fairly easy.
\end{solution}
\vfill
\pagebreak
\problem{}
Show that any transposition $(a, b)$ is equal to the product $(a, a+1)(a+1, b)(a, a+1)$.
\begin{solution}
This is the same as the $(1, a)(1, b)(1, a)$ case above, but we use $a + 1$
as a \say{working slot} instead of $1$.
\end{solution}
\vfill
\problem{}
Show that any permutation is a product of adjacent transpositions. \par
(An \textit{adjacent transposition} swaps two adjacent elements, and thus looks like $(n, n+1)$)
\begin{solution}
As before, we will use \ref{simpletrans} and rewrite the transpositions it produces in a form that fits the problem.
We thus need to show that every transposition $(a, b)$ is a product of adjacent transpositions.
\vspace{8mm}
In the proof below, assume that $a < b$ and perform induction on $b - a$. \par
\textbf{Base Case:}\par
If $b - a = 1$, we clearly see that $(a, b)$ is a product of adjacent. \par
In fact, it \textit{is} an adjacent transposition.
\vspace{4mm}
\textbf{Induction:}\par
Now, say $b - a = n + 1$. \par
Assume that all $(a, b)$ where $b - a \leq n$ are products of adjacent transpositions.\par
Note that $(a, b) = (a, a+1)(a+1, b)(a, a+1)$.
\vspace{2mm}
$(a, a+1)$ is an adjacent transposition, and $b - (a+1) = n$. \par
Thus, $(a, b)$ is a product of adjacent transpositions.
\end{solution}
\vfill
\pagebreak

View File

@ -0,0 +1,165 @@
\section{Groups (review)}
\definition{}
Before we continue, we must introduce a bit of notation:
\begin{itemize}
\item $S_n$ is the set of permutations on $n$ objects.
\item $\mathbb{Z}_n$ is the set of integers mod $n$.
\item $\mathbb{Z}_n^\times$ is the set of integers mod $n$ with multiplicative inverses. \par
In other words, it is the set of integers smaller than $n$ and coprime to $n$.\footnotemark{} \par
For example, $\mathbb{Z}_{12}^\times = \{1, 5, 7, 11\}$.
\footnotetext{We proved this in another handout, but you may take it as fact here.}
\end{itemize}
\problem{}
What are the elements of $S_3$? \tab\hint{Use cycle notation}\par
How about $\mathbb{Z}_{17}^\times$?
\vfill
\definition{}
A \textit{group} $(G, \ast)$ consists of a set $G$ and an operator $\ast$. \par
Groups always have the following properties:
\begin{enumerate}
\item $G$ is closed under $\ast$. In other words, $a, b \in G \implies a \ast b \in G$.
\item $\ast$ is \textit{associative}: $(a \ast b) \ast c = a \ast (b \ast c)$ for all $a,b,c \in G$
\item There is an \textit{identity} $e \in G$, so that $a \ast e = a \ast e = a$ for all $a \in G$.
\item For any $a \in G$, there exists a $b \in G$ so that $a \ast b = b \ast a = e$. $b$ is called the \textit{inverse} of $a$. \par
This element is written as $-a$ if our operator is addition and $a^{-1}$ otherwise.
\end{enumerate}
Any pair $(G, \ast)$ that satisfies these properties is a group.
\problem{}
Is $(\mathbb{Z}_5, +)$ a group? \par
Is $(\mathbb{Z}_5, -)$ a group? \par
\note[Note]{$+$ and $-$ refer to the usual operations in modular arithmetic.}
\vfill
\problem{}
What is the group with the fewest elements?
\begin{solution}
Let $(G, \star)$ be our group, where $G = \{x\}$ and $\star$ is defined by $x \star x = x$
Verifying that the trivial group is a group is trivial.
\end{solution}
\vfill
\pagebreak
\problem{}
Show that function composition is associative
\vfill
\problem{}
Show that $S_n$ is a group under composition.
\vfill
\problem{}
Let $(G, \ast)$ be a group with finitely many elements, and let $a \in G$. \par
Show that $\exists n \in \mathbb{Z}^+$ so that $a^n = e$ \par
\hint{$a^n = a \ast a \ast ... \ast a$ repeated $n$ times.}
\vspace{2mm}
The smallest such $n$ defines the \textit{order} of $g$.
\begin{examplesolution}
We've already done a special case of this problem! \par
Find it in this handout, then rewrite your proof for an arbitrary (finite) group.
\end{examplesolution}
\vfill
\problem{}
What is the order of 5 in $(\mathbb{Z}_{25}, +)$? \par
What is the order of 2 in $(\mathbb{Z}_{17}^\times, \times)$? \par
\vfill
\pagebreak
\definition{}<gendef>
Let $G$ be a group, and let $g$ be an element of $G$. \par
We say $g$ is a \textit{generator} if every other element of $G$ may be written as a power of $g$. \par
\problem{}
Say the size of a group $G$ is $n$. \par
If $g$ is a generator, what is its order? \par
Provide a proof.
\vfill
\problem{}
Find the two generators in $(\mathbb{Z}, +)$ \par
Then, find all generators of $(\mathbb{Z}_5, +)$
\vfill
\problem{}
How many groups have only one generator?
\begin{solution}
Only one: the trivial group. The inverse of a generator is also a generator!
\end{solution}
\vfill
\definition{}
Let $S$ be a subset of the elements in $G$. \par
We say that $S$ \textit{generates} $G$ if every element of $G$ may be written as a product of elements in $S$. \par
\note{Note that this is an extension of \ref{gendef}.}
\problem{}
We've already found a few generating sets of $S_n$. What are they?
\begin{solution}
The following sets generate $S_n$:
\begin{itemize}
\item All transpositions
\item All transpositions of the form $(1, k)$
\item All adjacent transpositions
\end{itemize}
\vspace{2mm}
The smallest generating set of $S_n$ consists of the transposition $(12)$ and the $n$-cycle $(1,2,...,n)$. \par
The proof of this is a bonus problem later in the handout.
\end{solution}
\vfill
\pagebreak

View File

@ -0,0 +1,163 @@
\section{Subgroups}
\problem{}<s2s3share>
What elements do $S_2$ and $S_3$ share?
\vspace{2cm}
Consider the sets $\{1, 2\}$ and $\{1,2,3\}$. Clearly, $\{1, 2\} \subset \{1, 2, 3\}$. \par
Can we say something similar about $S_2$ and $S_3$?
\vspace{2mm}
Looking at \ref{s2s3share}, we may want to say that $S_2 \subset S_3$ since every element of $S_2$ is in $S_3$. \par
This however, isn't as interesting as it could be. Remember that $S_2$ and $S_3$ are \textit{groups}, not \textit{sets}: \par
their elements come with structure, which the \say{subset} relation does not capture.
\vspace{2mm}
To account for this, we'll define a similar relation: subgroups.
\definition{}
Let $G$ and $G'$ be groups. We say $G'$ is a \textit{subgroup} of $G$ (and write $G' \subset G$) if the following are true:\par
(Note that $x, y$ are elements of $G$, and $xy$ is multiplication in $G$)
\begin{itemize}
\item the set of elements in $G'$ is a subset of the set of elements in $G$.
\item the identity of $G$ is in $G'$
\item $x,y \in G' \implies xy \in G'$
\item $x \in G' \implies x^{-1} \in G'$
\end{itemize}
The above definition may look faily scary, but the idea behind a subgroup is simple. \par
Consider $S_3$ and $S_4$, the groups of permutations of $3$ and $4$ elements. \par
\vspace{2mm}
Say we have a set of four elements and only look at the first three. \par
$S_3$ fully describes all the ways we can arrange those three elements:
\begin{center}
\begin{tikzpicture}[scale=0.5]
\node (1a) at (0, 0.5) {1};
\node (2a) at (1, 0.5) {2};
\node (3a) at (2, 0.5) {3};
\node (4a) at (3, 0.5) {4};
\node (2b) at (0, -2) {2};
\node (3b) at (1, -2) {3};
\node (1b) at (2, -2) {1};
\node (4b) at (3, -2) {4};
\draw[line width = 0.3mm, ->, ogreen]
(4a)
-- ($(4a) + (0, -1)$)
-- ($(4b) + (0,1)$)
-- (4b);
\line{1a}{1b}
\line{2a}{2b}
\line{3a}{3b}
\node[fill=white,draw=oblue,line width=0.3mm] at (1, -0.75) {$S_3$};
\end{tikzpicture}
\end{center}
\problem{}
Show that $S_3$ is a subgroup of $S_4$.
\vfill
\pagebreak
\definition{}
Let $G$ and $H$ be groups. We say that $G$ and $H$ are \textit{isomorphic} (and write $A \simeq B$) \par
if there is a bijection $f: G \to H$ with the following properties:
\begin{itemize}
\item $f(e_G) = e_H$, where $e_G$ is the identity in $G$
\item $f(x^{-1}) = f(x)^{-1}$ for all $x$ in $G$
\item $f(xy) = f(x)f(y)$ for all $x, y$ in $G$
\end{itemize}
Intuitively, you can think of isomorphism as a form of equivalence. \par
If two groups are isomorphic, they only differ by the names of their elements. \par
The function $f$ above tells us how to map one set of labels to the other.
\problem{}
Show that $\mathbb{Z}_7^\times$ and $\mathbb{Z}_9^\times$ are isomorphic.
\hint{
Build a bijection with the above properties. \\
Remember that a group is fully defined by its multiplication table.
}
\vfill
\problem{}
Show that $\mathbb{Z}_{10}^\times$ and $\mathbb{Z}_5^\times$, and $\mathbb{Z}_4$ are isomorphic.
\hint{
Build a bijection with the above properties. \\
Remember that a group is fully defined by its multiplication table.
}
\vfill
\problem{}
Show that isomorphism is transitive. \par
That is, if $A \simeq B$ and $B \simeq C$, then $A \simeq C$.
\vfill
\pagebreak
\problem{}<firstindex>
How many subgroups of $S_4$ are isomorphic to $S_3$? \par
\vfill
\problem{}
What are the orders of $S_3$ and $S_4$? \par
How is this related to \ref{firstindex}?
\begin{solution}
$|S_4| = |S_3| \times [S_4 : S_3]$
\vspace{2mm}
This solution is written using index notation, \par
but the class doesn't need to know what it means yet.
\end{solution}
\vfill
\problem{}
$S_4$ also has $S_2$ and the trivial group as subgroups. \par
How many instances of each does $S_4$ contain?
\vfill
\problem{}
$(\mathbb{Z}_4, +)$ is also a subgroup of $S_4$. Find it! \par
How many subgroups of $\mathbb{Z}_4$ are isomorphic to $S_4$?.
\begin{solution}
A good hint is \say{look at generators.}
\vspace{4mm}
There are four instances of $\mathbb{Z}_4$ in $S_4$, each of which is generated by a 4-cycle of $S_n$. \par
(i.e, the group generated by $(1234)$ is isomorphic to $\mathbb{Z}_4$)
\end{solution}
\vfill
\pagebreak

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
// Shorthand, we'll be using these a lot.
@ -7,31 +7,35 @@
#let tm = sym.times.circle
#let graphgrid(inner_content) = {
align(center, box(inset: 3mm, cetz.canvas({
import cetz.draw: *
let x = 5.25
align(
center,
box(
inset: 3mm,
cetz.canvas({
import cetz.draw: *
let x = 5.25
grid(
(0, 0),
(x, x),
step: 0.75,
stroke: luma(100) + 0.3mm,
)
grid(
(0, 0), (x, x), step: 0.75,
stroke: luma(100) + 0.3mm
)
if (inner_content != none) {
inner_content
}
if (inner_content != none) {
inner_content
}
mark((0, x + 0.5), (0, x + 1), symbol: ">", fill: black, scale: 1)
mark((x + 0.5, 0), (x + 1, 0), symbol: ">", fill: black, scale: 1)
mark((0, x + 0.5), (0, x + 1), symbol: ">", fill: black, scale: 1)
mark((x + 0.5, 0), (x + 1, 0), symbol: ">", fill: black, scale: 1)
line(
(0, x + 0.25),
(0, 0),
(x + 0.25, 0),
stroke: 0.75mm + black,
)
})))
line(
(0, x + 0.25),
(0, 0),
(x + 0.25, 0),
stroke: 0.75mm + black,
)
}),
),
)
}
/// Adds extra padding to an equation.
@ -44,16 +48,23 @@
/// Note that there are newlines between the $ and content,
/// this gives us display math (which is what we want when using this macro)
#let eqnbox(eqn) = {
align(center, box(
inset: 3mm,
eqn,
))
align(
center,
box(
inset: 3mm,
eqn,
),
)
}
#let dotline(a, b) = {
cetz.draw.line(a, b, stroke: (
dash: "dashed",
thickness: 0.5mm,
paint: ored,
))
cetz.draw.line(
a,
b,
stroke: (
dash: "dashed",
thickness: 0.5mm,
paint: ored,
),
)
}

View File

@ -26,9 +26,9 @@ $
#solution([
- Is tropical addition commutative?\
Yes, $min(min(x, y), z) = min(x, y, z) = min(x, min(y, z))$
Yes, $min(min(x,y),z) = min(x,y,z) = min(x,min(y,z))$
- Is tropical addition associative? \
Yes, $min(x, y) = min(y, x)$
Yes, $min(x,y) = min(y,x)$
- Is there a tropical additive identity? \
No. There is no $n$ where $x <= n$ for all real $x$
])
@ -117,7 +117,7 @@ Do tropical multiplicative inverses always exist? \
Is tropical multiplication distributive over addition? \
#note([Does $x #tm (y #tp z) = x #tm y #tp x #tm z$?])
#solution([Yes, $x + min(y, z) = min(x+y, x+z)$])
#solution([Yes, $x + min(y,z) = min(x+y, x+z)$])
#v(1fr)
@ -134,7 +134,14 @@ Fill the following tropical addition and multiplication tables
table(
columns: (col, col, col, col, col, col),
align: center,
table.header([$#tp$], [$1$], [$2$], [$3$], [$4$], [$#sym.infinity$]),
table.header(
[$#tp$],
[$1$],
[$2$],
[$3$],
[$4$],
[$#sym.infinity$],
),
box(inset: 3pt, $1$), [], [], [], [], [],
box(inset: 3pt, $2$), [], [], [], [], [],
@ -145,7 +152,14 @@ Fill the following tropical addition and multiplication tables
table(
columns: (col, col, col, col, col, col),
align: center,
table.header([$#tm$], [$0$], [$1$], [$2$], [$3$], [$4$]),
table.header(
[$#tm$],
[$0$],
[$1$],
[$2$],
[$3$],
[$4$],
),
box(inset: 3pt, $0$), [], [], [], [], [],
box(inset: 3pt, $1$), [], [], [], [], [],
@ -164,7 +178,14 @@ Fill the following tropical addition and multiplication tables
table(
columns: (col, col, col, col, col, col),
align: center,
table.header([$#tp$], [$1$], [$2$], [$3$], [$4$], [$#sym.infinity$]),
table.header(
[$#tp$],
[$1$],
[$2$],
[$3$],
[$4$],
[$#sym.infinity$],
),
box(inset: 3pt, $1$),
box(inset: 3pt, $1$),
@ -204,7 +225,14 @@ Fill the following tropical addition and multiplication tables
table(
columns: (col, col, col, col, col, col),
align: center,
table.header([$#tm$], [$0$], [$1$], [$2$], [$3$], [$4$]),
table.header(
[$#tm$],
[$0$],
[$1$],
[$2$],
[$3$],
[$4$],
),
box(inset: 3pt, $0$),
box(inset: 3pt, $0$),
@ -253,9 +281,10 @@ Adjacent parenthesis imply tropical multiplication
#solution([
$
(x #tp 2)(x #tp 3) & = x^2 #tp 2x #tp 3x #tp (2 #tm 3) \
& = x^2 #tp (2 #tp 3)x #tp (2 #tm 3) \
& = x^2 #tp 2x #tp 5
(x #tp 2)(x #tp 3)
&= x^2 #tp 2x #tp 3x #tp (2 #tm 3) \
&= x^2 #tp (2 #tp 3)x #tp (2 #tm 3) \
&= x^2 #tp 2x #tp 5
$
Also, $f(1) = 2$ and $f(4) = 5$.

View File

@ -1,18 +1,21 @@
#import "@local/handout:0.1.0": *
#import "../macros.typ": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= Tropical Polynomials
#definition()
A _polynomial_ is an expression formed by adding and multiplying numbers and a variable $x$. \
Every polynomial can be written as
#align(center, box(
inset: 3mm,
$
c_0 + c_1 x + c_2 x^2 + ... + c_n x^n
$,
))
#align(
center,
box(
inset: 3mm,
$
c_0 + c_1 x + c_2 x^2 + ... + c_n x^n
$,
),
)
for some nonnegative integer $n$ and coefficients $c_0, c_1, ..., c_n$. \
The _degree_ of a polynomial is the largest $n$ for which $c_n$ is nonzero.
@ -40,12 +43,15 @@ In this section, we will analyze tropical polynomials:
#definition()
A _tropical_ polynomial is a polynomial that uses tropical addition and multiplication. \
In other words, it is an expression of the form
#align(center, box(
inset: 3mm,
$
c_0 #tp (c_1 #tm x) #tp (c_2 #tm x^2) #tp ... #tp (c_n #tm x^n)
$,
))
#align(
center,
box(
inset: 3mm,
$
c_0 #tp (c_1 #tm x) #tp (c_2 #tm x^2) #tp ... #tp (c_n #tm x^n)
$,
),
)
where all exponents represent repeated tropical multiplication.
#pagebreak() // MARK: page
@ -60,7 +66,7 @@ Draw a graph of the tropical polynomial $f(x) = x^2 #tp 1x #tp 4$. \
#if_no_solutions(graphgrid(none))
#solution([
$f(x) = min(2x, 1+x, 4)$, which looks like:
$f(x) = min(2x , 1+x, 4)$, which looks like:
#graphgrid({
import cetz.draw: *
@ -84,12 +90,15 @@ Draw a graph of the tropical polynomial $f(x) = x^2 #tp 1x #tp 4$. \
#problem()
Now, factor $f(x) = x^2 #tp 1x #tp 4$ into two polynomials with degree 1. \
In other words, find $r$ and $s$ so that
#align(center, box(
inset: 3mm,
$
x^2 #tp 1x #tp 4 = (x #tp r)(x #tp s)
$,
))
#align(
center,
box(
inset: 3mm,
$
x^2 #tp 1x #tp 4 = (x #tp r)(x #tp s)
$,
),
)
we will call $r$ and $s$ the _roots_ of $f$.
@ -150,19 +159,15 @@ Find a factorization of $f$ in the form $a(x #tp r)(x#tp s)$.
#solution([
We (tropically) factor out $-2$ to get
#eqnbox(
$
f(x) = -2(x^2 #tp 2x #tp 10)
$,
)
#eqnbox($
f(x) = -2(x^2 #tp 2x #tp 10)
$)
by the same process as the previous problem, we get
#eqnbox(
$
f(x) = -2(x #tp 2)(x #tp 8)
$,
)
#eqnbox($
f(x) = -2(x #tp 2)(x #tp 8)
$)
])
#v(1fr)
@ -231,11 +236,11 @@ Graph $f(x) = 1x^2 #tp 3x #tp 5$.
#problem()
Find a factorization of $f$ in the form $a(x #tp r)(x#tp s)$.
#solution(eqnbox(
$
#solution(
eqnbox($
f(x) = 1x^2 #tp 3 x #tp 5 = 1(x #tp 2)^2
$,
))
$),
)
#v(1fr)
@ -258,21 +263,23 @@ Graph $f(x) = 2x^2 #tp 4x #tp 4$.
#if_no_solutions(graphgrid(none))
#solution(graphgrid({
import cetz.draw: *
let step = 0.75
#solution(
graphgrid({
import cetz.draw: *
let step = 0.75
dotline((0, 2 * step), (3 * step, 8 * step))
dotline((0, 4 * step), (5 * step, 8 * step))
dotline((0, 4 * step), (8 * step, 4 * step))
dotline((0, 2 * step), (3 * step, 8 * step))
dotline((0, 4 * step), (5 * step, 8 * step))
dotline((0, 4 * step), (8 * step, 4 * step))
line(
(0, 2 * step),
(1 * step, 4 * step),
(7.5 * step, 4 * step),
stroke: 1mm + oblue,
)
}))
line(
(0, 2 * step),
(1 * step, 4 * step),
(7.5 * step, 4 * step),
stroke: 1mm + oblue,
)
}),
)
#problem()
@ -318,7 +325,7 @@ Find a formula for $B$ in terms of $a$, $b$, and $c$. \
#solution([
If we want to factor $a(x^2 #tp (b-a)x #tp (c-a))$, we need to find $r$ and $s$ so that
- $min(r, s) = b-a$, and
- $min(r,s) = b-a$, and
- $r + s = c - a$
#v(2mm)
@ -334,8 +341,9 @@ Find a formula for $B$ in terms of $a$, $b$, and $c$. \
*Case 2:* If $b > (a + c #sym.div) 2$, then
$
accent(f, macron)(x) & = a x^2 #tp ((a+c)/2)x #tp c \
& = a(x #tp (c-a)/2)^2
accent(f, macron)(x)
&= a x^2 #tp ((a+c)/2)x #tp c \
&= a(x #tp (c-a)/2)^2
$
has the same graph as $f$, and thus $B = (a+c) #sym.div 2$

View File

@ -1,6 +1,6 @@
#import "@local/handout:0.1.0": *
#import "../macros.typ": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= Tropical Cubic Polynomials
@ -131,12 +131,15 @@ Using the last three problems, find formulas for $B$ and $C$ in terms of $a$, $b
#problem()
What are the roots of the following polynomial?
#align(center, box(
inset: 3mm,
$
3 x^6 #tp 4 x^5 #tp 2 x^4 #tp x^3 #tp x^2 #tp 4 x #tp 5
$,
))
#align(
center,
box(
inset: 3mm,
$
3 x^6 #tp 4 x^5 #tp 2 x^4 #tp x^3 #tp x^2 #tp 4 x #tp 5
$,
),
)
#solution([
We have
@ -166,8 +169,9 @@ Find a formula for each $C_i$ in terms of $c_0, c_1, ..., c_n$.
#solution([
$
A_j & = min_(l<=j<k)( (a_l - a_k) / (k-l) (k-j) + a_k ) \
& = min_(l<=j<k)( a_l (k-j) / (k-l) + a_k (j-l) / (k-l) )
A_j
&= min_(l<=j<k)( (a_l - a_k) / (k-l) (k-j) + a_k ) \
&= min_(l<=j<k)( a_l (k-j) / (k-l) + a_k (j-l) / (k-l) )
$
#v(2mm)

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= Wallpaper Symmetries
@ -12,9 +12,7 @@ There are four classes of Euclidean isometries:
- reflections
- rotations
- glide reflections
#note(
[We can prove there are no others, but this is beyond the scope of this handout.],
) \
#note([We can prove there are no others, but this is beyond the scope of this handout.]) \
A simple example of each isometry is shown below:
#let demo(c) = {

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= Mirror Symmetry

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= Rotational Symmetry

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#let pat(img, sol) = {
problem()

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
= The Signature-Cost Theorem
@ -7,20 +7,23 @@
First, we'll associate a _cost_ to each type of symmetry in orbifold notation:
#v(4mm)
#align(center, table(
stroke: (1pt, 1pt),
align: center,
columns: (auto, auto, auto, auto),
[*Symbol*], [*Cost*], [*Symbol*], [*Cost*],
[#sym.circle.small], [2], [#sym.times or #sym.convolve], [1],
[#sym.diamond.stroked.small`2`], [1/2], [#sym.convolve`2`], [1/4],
[#sym.diamond.stroked.small`3`], [2/3], [#sym.convolve`3`], [1/3],
[#sym.dots], [#sym.dots], [#sym.dots], [#sym.dots],
[#sym.diamond.stroked.small`n`],
[$(n-1) / n$],
[#sym.convolve`n`],
[$(n-1) / (2n)$],
))
#align(
center,
table(
stroke: (1pt, 1pt),
align: center,
columns: (auto, auto, auto, auto),
[*Symbol*], [*Cost*], [*Symbol*], [*Cost*],
[#sym.circle.small], [2], [#sym.times or #sym.convolve], [1],
[#sym.diamond.stroked.small`2`], [1/2], [#sym.convolve`2`], [1/4],
[#sym.diamond.stroked.small`3`], [2/3], [#sym.convolve`3`], [1/3],
[#sym.dots], [#sym.dots], [#sym.dots], [#sym.dots],
[#sym.diamond.stroked.small`n`],
[$(n-1) / n$],
[#sym.convolve`n`],
[$(n-1) / (2n)$],
),
)
We then calculate the total "cost" of a signature by adding up the costs of each component.

View File

@ -46,10 +46,10 @@ Use two half adders to construct a full adder.
#solution([
$
s_1, c_1 & = "HA"(a, b) \
s_2, c_2 & = "HA"(s_1, c_"in") \
s_"out" & = s_2 \
c_"out" & = "OR"(c_1, c_2)
s_1, c_1 &= "HA"(a, b) \
s_2, c_2 &= "HA"(s_1, c_"in") \
s_"out" &= s_2 \
c_"out" &= "OR"(c_1, c_2)
$
#v(2mm)

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#show: handout.with(
title: [Warm-Up: Big-Tac-Toe],
@ -75,13 +75,16 @@ How does your strategy change? \
#if extra_boards {
pagebreak()
align(center, grid(
stroke: none,
align: center,
columns: (1fr, 1fr),
rows: (1fr, 1fr, 1fr),
btt(0.35), btt(0.35),
btt(0.35), btt(0.35),
btt(0.35), btt(0.35),
))
align(
center,
grid(
stroke: none,
align: center,
columns: (1fr, 1fr),
rows: (1fr, 1fr, 1fr),
btt(0.35), btt(0.35),
btt(0.35), btt(0.35),
btt(0.35), btt(0.35),
),
)
}

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#show: handout.with(
@ -43,56 +43,61 @@ Now, consider the set of six-sided dice below:
- Die $E$: $0, 5, 5, 5, 5, 5$
On average, which die beats each of the others? Draw a diagram.
#solution(align(center, cetz.canvas({
import cetz.draw: *
#solution(
align(
center,
cetz.canvas({
import cetz.draw: *
let s = 0.8 // Scale
let t = 13pt * s // text size
let radius = 0.3 * s
let s = 0.8 // Scale
let t = 13pt * s // text size
let radius = 0.3 * s
// Points
let a = (-2 * s, 0.2 * s)
let b = (0 * s, 2 * s)
let c = (2 * s, 0.2 * s)
let d = (1.2 * s, -2.1 * s)
let e = (-1.2 * s, -2.1 * s)
// Points
let a = (-2 * s, 0.2 * s)
let b = (0 * s, 2 * s)
let c = (2 * s, 0.2 * s)
let d = (1.2 * s, -2.1 * s)
let e = (-1.2 * s, -2.1 * s)
set-style(
stroke: (thickness: 0.6mm * s),
mark: (
end: (
symbol: ">",
fill: black,
offset: radius + (0.025 * s),
width: 1.2mm * s,
length: 1.2mm * s,
),
),
)
set-style(
stroke: (thickness: 0.6mm * s),
mark: (
end: (
symbol: ">",
fill: black,
offset: radius + (0.025 * s),
width: 1.2mm * s,
length: 1.2mm * s,
),
),
)
line(a, b)
line(b, c)
line(c, d)
line(d, e)
line(e, a)
line(a, c)
line(b, d)
line(c, e)
line(d, a)
line(e, b)
line(a, b)
line(b, c)
line(c, d)
line(d, e)
line(e, a)
line(a, c)
line(b, d)
line(c, e)
line(d, a)
line(e, b)
circle(a, radius: radius, fill: oblue, stroke: none)
circle(b, radius: radius, fill: oblue, stroke: none)
circle(c, radius: radius, fill: oblue, stroke: none)
circle(d, radius: radius, fill: oblue, stroke: none)
circle(e, radius: radius, fill: oblue, stroke: none)
circle(a, radius: radius, fill: oblue, stroke: none)
circle(b, radius: radius, fill: oblue, stroke: none)
circle(c, radius: radius, fill: oblue, stroke: none)
circle(d, radius: radius, fill: oblue, stroke: none)
circle(e, radius: radius, fill: oblue, stroke: none)
content(a, text(fill: white, size: t, [*A*]))
content(b, text(fill: white, size: t, [*B*]))
content(c, text(fill: white, size: t, [*C*]))
content(d, text(fill: white, size: t, [*D*]))
content(e, text(fill: white, size: t, [*E*]))
})))
content(a, text(fill: white, size: t, [*A*]))
content(b, text(fill: white, size: t, [*B*]))
content(c, text(fill: white, size: t, [*C*]))
content(d, text(fill: white, size: t, [*D*]))
content(e, text(fill: white, size: t, [*E*]))
}),
),
)
#v(1fr)

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#show: handout.with(
title: [Warm-Up: What's an AST?],
@ -18,56 +18,59 @@ You may detach the string as you hang the painting, but it must be re-attached o
#v(2mm)
#align(center, cetz.canvas({
import cetz.draw: *
let s = 2.5
#align(
center,
cetz.canvas({
import cetz.draw: *
let s = 2.5
line(
(0 * s, 1 * s),
(2 * s, 1 * s),
(2 * s, 0 * s),
(0 * s, 0 * s),
close: true,
stroke: (thickness: 0.8mm),
)
line(
(0 * s, 1 * s),
(2 * s, 1 * s),
(2 * s, 0 * s),
(0 * s, 0 * s),
close: true,
stroke: (thickness: 0.8mm),
)
line(
(0.1 * s, 1 * s),
(0.5 * s, 1.5 * s),
(1.5 * s, 1.5 * s),
(1.9 * s, 1 * s),
stroke: (thickness: 0.5mm, dash: "dotted"),
)
line(
(0.1 * s, 1 * s),
(0.5 * s, 1.5 * s),
(1.5 * s, 1.5 * s),
(1.9 * s, 1 * s),
stroke: (thickness: 0.5mm, dash: "dotted"),
)
circle((0.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
circle((1.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
circle((0.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
circle((1.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
line(
(0.66 * s, 0.66 * s),
(0.66 * s, 0.35 * s),
(0.60 * s, 0.1 * s),
)
line(
(0.66 * s, 0.66 * s),
(0.66 * s, 0.35 * s),
(0.60 * s, 0.1 * s),
)
line(
(0.72 * s, 0.1 * s),
(0.66 * s, 0.35 * s),
)
line(
(0.72 * s, 0.1 * s),
(0.66 * s, 0.35 * s),
)
line(
(0.66 * s, 0.575 * s),
(0.6 * s, 0.475 * s),
(0.525 * s, 0.575 * s),
)
line(
(0.66 * s, 0.575 * s),
(0.6 * s, 0.475 * s),
(0.525 * s, 0.575 * s),
)
line(
(0.66 * s, 0.575 * s),
(0.72 * s, 0.475 * s),
(0.795 * s, 0.575 * s),
)
line(
(0.66 * s, 0.575 * s),
(0.72 * s, 0.475 * s),
(0.795 * s, 0.575 * s),
)
circle((0.66 * s, 0.66 * s), radius: 0.07 * s, fill: white)
}))
circle((0.66 * s, 0.66 * s), radius: 0.07 * s, fill: white)
}),
)
#solution([
Say we have a left nail and a right nail. The path of the string is as follows:

View File

@ -7,7 +7,7 @@
#problem()
Take any positive integer $n$. \
Now, write it as sum of smaller positive integers: $n = a_1 + a_2 + ... a_k$ \
Now, write it as sum of smaller positive integers: $n = a_1 + a_2 + ... a_k$ \
Maximize the product $a_1 #sym.times a_2 #sym.times ... #sym.times a_k$
@ -17,9 +17,7 @@ Maximize the product $a_1 #sym.times a_2 #sym.times ... #sym.times a_k$
Of course, all $a_i$ should be greater than $1$. \
Also, all $a_i$ should be smaller than four, since $x <= x(x-2)$ if $x >= 4$. \
Thus, we're left with sequences that only contain 2 and 3. \
#note(
[Note that two twos are the same as one four, but we exclude fours for simplicity.],
)
#note([Note that two twos are the same as one four, but we exclude fours for simplicity.])
#v(2mm)

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#show: handout.with(
title: [Warm-Up: Passing Balls],
@ -78,25 +78,32 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
let i = 1
for p in pts {
circle(p, radius: radius * s, fill: if i == 1 {
ored
} else if i == 2 {
ogreen
} else if i == 3 {
oorange
} else if i == 4 {
oblue
} else { white })
circle(
p,
radius: radius * s,
fill: if i == 1 {
ored
} else if i == 2 {
ogreen
} else if i == 3 {
oorange
} else if i == 4 {
oblue
} else { white },
)
content(p, text(
fill: if i <= 4 {
white
} else {
black
},
size: t,
[*#i*],
))
content(
p,
text(
fill: if i <= 4 {
white
} else {
black
},
size: t,
[*#i*],
),
)
i = i + 1
}
}),
@ -111,25 +118,32 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
let l = calc.rem(((i - 1) * 5), 12) + 1
circle(p, radius: radius * s, fill: if l == 1 {
ored
} else if l == 2 {
ogreen
} else if l == 3 {
oorange
} else if l == 4 {
oblue
} else { white })
circle(
p,
radius: radius * s,
fill: if l == 1 {
ored
} else if l == 2 {
ogreen
} else if l == 3 {
oorange
} else if l == 4 {
oblue
} else { white },
)
content(p, text(
fill: if l <= 4 {
white
} else {
black
},
size: t,
[*#l*],
))
content(
p,
text(
fill: if l <= 4 {
white
} else {
black
},
size: t,
[*#l*],
),
)
i = i + 1
}
}),
@ -144,25 +158,32 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
let l = calc.rem(((i - 1) * 5), 12) + 1
circle(p, radius: radius * s, fill: if l == 1 {
oblue
} else if l == 2 {
oorange
} else if l == 3 {
ored
} else if l == 4 {
ogreen
} else { white })
circle(
p,
radius: radius * s,
fill: if l == 1 {
oblue
} else if l == 2 {
oorange
} else if l == 3 {
ored
} else if l == 4 {
ogreen
} else { white },
)
content(p, text(
fill: if l <= 4 {
white
} else {
black
},
size: t,
[*#l*],
))
content(
p,
text(
fill: if l <= 4 {
white
} else {
black
},
size: t,
[*#l*],
),
)
i = i + 1
}
}),

View File

@ -1,81 +0,0 @@
<svg class="typst-doc" viewBox="0 0 8.236633858267716 14.150551181102362" width="8.236633858267716pt" height="14.150551181102362pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 2.2237677165354333)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000007867722 9.669 L 0 0 Z "/>
</g>
<g transform="translate(-0.00000003149606268881308 2.2237676220472435)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(4.282303149606299 8.46992125984252)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(4.282303007874017 8.46992125984252)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(4.282303149606299 0)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(4.282303007874017 0)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<defs id="glyph">
<symbol id="gB0C69879DCB2DFE01E1A8092C6399B95" overflow="visible">
<path d="M 1.54 0.253 C 1.54 -0.594 1.375 -1.892 1.067 -1.892 C 0.88 -1.892 0.726 -1.551 0.429 -1.551 C 0.22 -1.551 0 -1.738 0 -1.958 C 0 -2.233 0.242 -2.431 0.594 -2.431 C 1.6719999 -2.431 2.376 -1.43 2.376 1.925 L 2.376 3.234 C 2.376 3.927 2.332 4.719 2.332 5.269 C 2.332 6.732 2.552 7.139 2.783 7.139 C 3.047 7.139 3.069 6.776 3.421 6.776 C 3.685 6.776 3.905 6.963 3.905 7.205 C 3.905 7.48 3.641 7.678 3.322 7.678 C 2.156 7.678 1.518 6.446 1.518 3.74 L 1.518 2.299 C 1.518 1.419 1.54 1.133 1.54 0.253 Z "/>
</symbol>
<symbol id="gDCE911778D5C1849302153FEF2645F85" overflow="visible">
<path d="M 1.9388977 -0.08503937 C 2.593701 -0.08503937 3.5886614 0.57826775 3.5886614 2.576693 C 3.5886614 3.4185827 3.384567 4.1414175 3.0103939 4.634646 C 2.7892914 4.9322834 2.432126 5.187402 1.9729134 5.187402 C 1.1310236 5.187402 0.33165354 4.183937 0.33165354 2.5001576 C 0.33165354 1.5902363 0.61228347 0.73984253 1.08 0.272126 C 1.3181102 0.03401575 1.6072441 -0.08503937 1.9388977 -0.08503937 Z M 1.9729134 4.889764 C 2.1174803 4.889764 2.2535434 4.8387403 2.3555906 4.745197 C 2.6192126 4.5240946 2.848819 3.8777955 2.848819 2.7382677 C 2.848819 1.9559056 2.823307 1.4201576 2.704252 0.9864567 C 2.5171654 0.28913388 2.1004725 0.21259843 1.9474016 0.21259843 C 1.1565355 0.21259843 1.0714961 1.6667717 1.0714961 2.4066143 C 1.0714961 4.498583 1.5902363 4.889764 1.9729134 4.889764 Z "/>
</symbol>
<symbol id="g642BCE8B7105B32AF084522D60B4E652" overflow="visible">
<path d="M 2.4491339 1.0374804 L 2.4491339 3.9883466 C 2.4491339 4.498583 2.4576378 5.017323 2.4746456 5.127874 C 2.4746456 5.170394 2.4576378 5.170394 2.4236221 5.170394 C 1.9559056 4.88126 1.5051969 4.6686616 0.7568504 4.32 C 0.7738583 4.2264566 0.807874 4.1414175 0.8844095 4.0903935 C 1.2755905 4.2519684 1.4626772 4.3029923 1.624252 4.3029923 C 1.768819 4.3029923 1.7943307 4.098898 1.7943307 3.809764 L 1.7943307 1.0374804 C 1.7943307 0.33165354 1.5647244 0.28913388 0.96944886 0.26362205 C 0.9184252 0.21259843 0.9184252 0.03401575 0.96944886 -0.017007874 C 1.3861418 -0.008503937 1.6922835 0 2.1514962 0 C 2.559685 0 2.7637796 -0.008503937 3.1889765 -0.017007874 C 3.24 0.03401575 3.24 0.21259843 3.1889765 0.26362205 C 2.593701 0.28913388 2.4491339 0.33165354 2.4491339 1.0374804 Z "/>
</symbol>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -1,161 +0,0 @@
<svg class="typst-doc" viewBox="0 0 16.740570866141734 31.1584251968504" width="16.740570866141734pt" height="31.1584251968504pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 10.72770472440945)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000007867722 9.669 L 0 0 Z "/>
</g>
<g transform="translate(-0.00000003149606268881308 10.72770462992126)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(8.503937007874017 19.231641732283467)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0 9.669 L 0 0 Z "/>
</g>
<g transform="translate(8.50393697637795 19.231641637795278)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(12.786240157480314 25.477795275590555)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(12.786240015748032 25.47779527559056)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(12.786240157480314 17.007874015748037)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(12.786240015748032 17.007874015748033)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(8.503937007874017 2.2237677165354355)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0 9.669 L 0 0 Z "/>
</g>
<g transform="translate(8.50393697637795 2.2237676220472453)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(12.786240157480314 8.469921259842522)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(12.786240015748032 8.46992125984252)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(12.786240157480314 0)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(12.786240015748032 0.0000000000000004475859752819529)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<defs id="glyph">
<symbol id="gB0C69879DCB2DFE01E1A8092C6399B95" overflow="visible">
<path d="M 1.54 0.253 C 1.54 -0.594 1.375 -1.892 1.067 -1.892 C 0.88 -1.892 0.726 -1.551 0.429 -1.551 C 0.22 -1.551 0 -1.738 0 -1.958 C 0 -2.233 0.242 -2.431 0.594 -2.431 C 1.6719999 -2.431 2.376 -1.43 2.376 1.925 L 2.376 3.234 C 2.376 3.927 2.332 4.719 2.332 5.269 C 2.332 6.732 2.552 7.139 2.783 7.139 C 3.047 7.139 3.069 6.776 3.421 6.776 C 3.685 6.776 3.905 6.963 3.905 7.205 C 3.905 7.48 3.641 7.678 3.322 7.678 C 2.156 7.678 1.518 6.446 1.518 3.74 L 1.518 2.299 C 1.518 1.419 1.54 1.133 1.54 0.253 Z "/>
</symbol>
<symbol id="gDCE911778D5C1849302153FEF2645F85" overflow="visible">
<path d="M 1.9388977 -0.08503937 C 2.593701 -0.08503937 3.5886614 0.57826775 3.5886614 2.576693 C 3.5886614 3.4185827 3.384567 4.1414175 3.0103939 4.634646 C 2.7892914 4.9322834 2.432126 5.187402 1.9729134 5.187402 C 1.1310236 5.187402 0.33165354 4.183937 0.33165354 2.5001576 C 0.33165354 1.5902363 0.61228347 0.73984253 1.08 0.272126 C 1.3181102 0.03401575 1.6072441 -0.08503937 1.9388977 -0.08503937 Z M 1.9729134 4.889764 C 2.1174803 4.889764 2.2535434 4.8387403 2.3555906 4.745197 C 2.6192126 4.5240946 2.848819 3.8777955 2.848819 2.7382677 C 2.848819 1.9559056 2.823307 1.4201576 2.704252 0.9864567 C 2.5171654 0.28913388 2.1004725 0.21259843 1.9474016 0.21259843 C 1.1565355 0.21259843 1.0714961 1.6667717 1.0714961 2.4066143 C 1.0714961 4.498583 1.5902363 4.889764 1.9729134 4.889764 Z "/>
</symbol>
<symbol id="g642BCE8B7105B32AF084522D60B4E652" overflow="visible">
<path d="M 2.4491339 1.0374804 L 2.4491339 3.9883466 C 2.4491339 4.498583 2.4576378 5.017323 2.4746456 5.127874 C 2.4746456 5.170394 2.4576378 5.170394 2.4236221 5.170394 C 1.9559056 4.88126 1.5051969 4.6686616 0.7568504 4.32 C 0.7738583 4.2264566 0.807874 4.1414175 0.8844095 4.0903935 C 1.2755905 4.2519684 1.4626772 4.3029923 1.624252 4.3029923 C 1.768819 4.3029923 1.7943307 4.098898 1.7943307 3.809764 L 1.7943307 1.0374804 C 1.7943307 0.33165354 1.5647244 0.28913388 0.96944886 0.26362205 C 0.9184252 0.21259843 0.9184252 0.03401575 0.96944886 -0.017007874 C 1.3861418 -0.008503937 1.6922835 0 2.1514962 0 C 2.559685 0 2.7637796 -0.008503937 3.1889765 -0.017007874 C 3.24 0.03401575 3.24 0.21259843 3.1889765 0.26362205 C 2.593701 0.28913388 2.4491339 0.33165354 2.4491339 1.0374804 Z "/>
</symbol>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,401 +0,0 @@
<svg class="typst-doc" viewBox="0 0 33.74844488188977 65.17417322834645" width="33.74844488188977pt" height="65.17417322834645pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 27.73557874015748)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000007867722 9.669 L 0 0 Z "/>
</g>
<g transform="translate(-0.00000003149606268881308 27.735578645669285)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(8.503937007874017 36.239515748031494)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0 9.669 L 0 0 Z "/>
</g>
<g transform="translate(8.50393697637795 36.23951565354331)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(17.007874015748033 44.743452755905516)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000031470889 9.669 L 0 0 Z "/>
</g>
<g transform="translate(17.007873984251972 44.74345266141732)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(25.511811023622048 53.24738976377953)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000031470889 9.669 L 0 0 Z "/>
</g>
<g transform="translate(25.511810992125987 53.24738966929133)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 59.493543307086625)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 59.49354330708661)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 51.023622047244096)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 51.023622047244096)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(25.511811023622048 36.239515748031494)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000031470889 9.669 L 0 0 Z "/>
</g>
<g transform="translate(25.511810992125987 36.23951565354331)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 42.48566929133859)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 42.485669291338574)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 34.01574803149607)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 34.01574803149607)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(12.786240157480314 34.01574803149607)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(12.786240015748032 34.01574803149607)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(8.503937007874017 19.231641732283467)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0 9.669 L 0 0 Z "/>
</g>
<g transform="translate(8.50393697637795 19.231641637795278)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(12.786240157480314 25.477795275590555)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(12.786240015748032 25.477795275590555)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(17.007874015748033 10.727704724409453)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000031470889 9.669 L 0 0 Z "/>
</g>
<g transform="translate(17.007873984251972 10.72770462992126)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(25.511811023622048 19.231641732283467)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000031470889 9.669 L 0 0 Z "/>
</g>
<g transform="translate(25.511810992125987 19.231641637795278)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 25.477795275590555)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 25.477795275590555)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 17.007874015748033)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 17.007874015748033)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(25.511811023622048 2.2237677165354355)">
<path class="typst-shape" fill="none" d="M 0 0 L 4.015 0 L 4.015 9.669 L 0.0000000000000031470889 9.669 L 0 0 Z "/>
</g>
<g transform="translate(25.511810992125987 2.2237676220472435)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 7.238)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gB0C69879DCB2DFE01E1A8092C6399B95" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 8.469921259842522)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6806297 L 0 5.6806297 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 8.46992125984252)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#gDCE911778D5C1849302153FEF2645F85" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(29.79411417322835 0)">
<path class="typst-shape" fill="none" d="M 0 0 L 3.9543307 0 L 3.9543307 5.6125984 L 0 5.6125984 L 0 0 Z "/>
</g>
<g transform="translate(29.794114031496065 -0.0000000000000008951719505639057)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 5.595590551181102)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g642BCE8B7105B32AF084522D60B4E652" x="0" y="0" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<defs id="glyph">
<symbol id="gB0C69879DCB2DFE01E1A8092C6399B95" overflow="visible">
<path d="M 1.54 0.253 C 1.54 -0.594 1.375 -1.892 1.067 -1.892 C 0.88 -1.892 0.726 -1.551 0.429 -1.551 C 0.22 -1.551 0 -1.738 0 -1.958 C 0 -2.233 0.242 -2.431 0.594 -2.431 C 1.6719999 -2.431 2.376 -1.43 2.376 1.925 L 2.376 3.234 C 2.376 3.927 2.332 4.719 2.332 5.269 C 2.332 6.732 2.552 7.139 2.783 7.139 C 3.047 7.139 3.069 6.776 3.421 6.776 C 3.685 6.776 3.905 6.963 3.905 7.205 C 3.905 7.48 3.641 7.678 3.322 7.678 C 2.156 7.678 1.518 6.446 1.518 3.74 L 1.518 2.299 C 1.518 1.419 1.54 1.133 1.54 0.253 Z "/>
</symbol>
<symbol id="gDCE911778D5C1849302153FEF2645F85" overflow="visible">
<path d="M 1.9388977 -0.08503937 C 2.593701 -0.08503937 3.5886614 0.57826775 3.5886614 2.576693 C 3.5886614 3.4185827 3.384567 4.1414175 3.0103939 4.634646 C 2.7892914 4.9322834 2.432126 5.187402 1.9729134 5.187402 C 1.1310236 5.187402 0.33165354 4.183937 0.33165354 2.5001576 C 0.33165354 1.5902363 0.61228347 0.73984253 1.08 0.272126 C 1.3181102 0.03401575 1.6072441 -0.08503937 1.9388977 -0.08503937 Z M 1.9729134 4.889764 C 2.1174803 4.889764 2.2535434 4.8387403 2.3555906 4.745197 C 2.6192126 4.5240946 2.848819 3.8777955 2.848819 2.7382677 C 2.848819 1.9559056 2.823307 1.4201576 2.704252 0.9864567 C 2.5171654 0.28913388 2.1004725 0.21259843 1.9474016 0.21259843 C 1.1565355 0.21259843 1.0714961 1.6667717 1.0714961 2.4066143 C 1.0714961 4.498583 1.5902363 4.889764 1.9729134 4.889764 Z "/>
</symbol>
<symbol id="g642BCE8B7105B32AF084522D60B4E652" overflow="visible">
<path d="M 2.4491339 1.0374804 L 2.4491339 3.9883466 C 2.4491339 4.498583 2.4576378 5.017323 2.4746456 5.127874 C 2.4746456 5.170394 2.4576378 5.170394 2.4236221 5.170394 C 1.9559056 4.88126 1.5051969 4.6686616 0.7568504 4.32 C 0.7738583 4.2264566 0.807874 4.1414175 0.8844095 4.0903935 C 1.2755905 4.2519684 1.4626772 4.3029923 1.624252 4.3029923 C 1.768819 4.3029923 1.7943307 4.098898 1.7943307 3.809764 L 1.7943307 1.0374804 C 1.7943307 0.33165354 1.5647244 0.28913388 0.96944886 0.26362205 C 0.9184252 0.21259843 0.9184252 0.03401575 0.96944886 -0.017007874 C 1.3861418 -0.008503937 1.6922835 0 2.1514962 0 C 2.559685 0 2.7637796 -0.008503937 3.1889765 -0.017007874 C 3.24 0.03401575 3.24 0.21259843 3.1889765 0.26362205 C 2.593701 0.28913388 2.4491339 0.33165354 2.4491339 1.0374804 Z "/>
</symbol>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 68 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 196 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 579 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.7 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 5.1 MiB

View File

@ -1,89 +0,0 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#show: handout.with(
title: [Warm-Up: Snakes!],
by: "Mark",
page_numbers: false,
)
#box(place(box(width: 100%, height: 8in, align(horizon, image(
"7.svg",
width: 360mm,
)))))
#problem()
Evaluate this integral. \
All integrals are of the form $integral_a^b 1 #h(1mm) d x$.
#if_solutions(pagebreak())
#solution[
This integral is drawn recursively with the following code: \
#v(2mm)
#let snake(depth, x, y) = {
if depth == 0 {
math.attach(math.integral, br: x, tr: y)
} else {
let bot = snake(depth - 1, x, "1")
let top = snake(depth - 1, "0", y)
snake(depth - 1, bot, top)
}
}
```typst
#let snake(depth, x, y) = {
if depth == 0 {
$integral_#x ^#y$
} else {
let bot = snake(depth - 1, x, "1")
let top = snake(depth - 1, "0", y)
snake(depth - 1, bot, top)
}
}
```
#v(5mm)
For example:
$ snake\(0, x, y) = #snake(0, "x", "y") $
#v(2mm)
$ snake\(1, x, y) = #snake(1, "x", "y") $
#v(2mm)
$ snake\(2, x, y) = #snake(2, "x", "y") $
In other words, we want $f_7 (0, 1)$, where...
- $f_0(x, y) := integral_x^y$
- $f_(n+1)(x, y) := f_n [f_n (x, 1), f_n (0, y)]$
#v(5mm)
Expanding a few iterations, we find:
- $f_0(x, y) = integral_x^y = y-x$
- $f_1(x, y) = f_0 [f_0 (x, 1), f_0 (0, y)] = y+x-1$
- $f_2(x, y) = f_1 [f_1 (x, 1), f_1 (0, y)] = y+x-2$
#v(5mm)
We can use induction to show that this pattern continues. \
If $g_n = y+x+c$, then $g_(n+1) = y+x+(3c+1)$.
#v(5mm)
Finally, use this recusion to find that
$f_0, f_1, ..., f_7 = 1, 0, -1, -4, -13, -40, -121, -364$
One can also find an explicit formula for $g_n$:
$
f_(n+1) = g_n & = x + y + 3^n c + 3^0 + 3^1 + ... + 3^n \
& = x + y + 3^n c + sum_(i=0)^n 3^i \
& = x + y + 3^n c + (3^(n+1) + 1)/2
$
]

View File

@ -1,6 +0,0 @@
[metadata]
title = "Snakes!"
[publish]
handout = true
solutions = true

View File

@ -1,57 +0,0 @@
#import "@preview/cetz:0.4.2"
// Compile with:
// typst compile --package-path "../../../lib/typst/" svg.typ --format svg
// You'll need to recompile typst with a higher recursion limit.
#set page(
fill: none,
width: auto,
height: auto,
margin: 0mm,
);
#let cetz_snake(depth, b, t) = {
import cetz.draw: *
if depth == 0 {
content((0, 0), math.inline(math.integral))
group({
translate(x: 0.15, y: -0.15)
b
})
group({
translate(x: 0.15, y: 0.15)
t
})
} else {
let bot = group({
translate(x: 0.15, y: -0.15)
cetz_snake(depth - 1, b, content((0, 0), text("1", size: 3mm)))
})
let top = group({
translate(x: 0.15, y: 0.15)
cetz_snake(depth - 1, content((0, 0), text("0", size: 3mm)), t)
})
cetz_snake(depth - 1, bot, top)
}
}
#{
import cetz.draw: *
// any bigger than 7 overflows the stack.
// any bigger than 5 exceeds typst's recursion limit.
// You'll have to increase those limits and recompile to
// build this document.
let depth = 7
let b = content((0, 0), text("0", size: 3mm))
let t = content((0, 0), text("1", size: 3mm))
cetz.canvas(cetz_snake(depth, b, t))
};

View File

@ -1,5 +1,5 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#show: handout.with(
title: [Warm-Up: What's an AST?],
@ -24,48 +24,51 @@ respecting the order of operations $[and, times, div, +, -]$.
#v(2mm)
#align(center, cetz.canvas({
import cetz.draw: *
#align(
center,
cetz.canvas({
import cetz.draw: *
// spell:off
content((0, 0), $+$, name: "r")
content((-0.5, -1), $3$, name: "a")
content((0.5, -1), $div$, name: "b")
content((-0.3, -2), $times$, name: "ba")
content((1.3, -2), $and$, name: "bb")
content((-0.8, -3), $9$, name: "baa")
content((0.2, -3), $8$, name: "bab")
content((0.8, -3), $5$, name: "bba")
content((1.8, -3), $6$, name: "bbb")
// spell:on
// spell:off
content((0, 0), $+$, name: "r")
content((-0.5, -1), $3$, name: "a")
content((0.5, -1), $div$, name: "b")
content((-0.3, -2), $times$, name: "ba")
content((1.3, -2), $and$, name: "bb")
content((-0.8, -3), $9$, name: "baa")
content((0.2, -3), $8$, name: "bab")
content((0.8, -3), $5$, name: "bba")
content((1.8, -3), $6$, name: "bbb")
// spell:on
// Zero-sized arrows are a hack for offset.
set-style(
stroke: (thickness: 0.3mm),
mark: (
start: (
symbol: "|",
offset: 0.25,
width: 0mm,
length: 0mm,
// Zero-sized arrows are a hack for offset.
set-style(
stroke: (thickness: 0.3mm),
mark: (
start: (
symbol: "|",
offset: 0.25,
width: 0mm,
length: 0mm,
),
end: (
symbol: "|",
offset: 0.25,
width: 0mm,
length: 0mm,
),
),
end: (
symbol: "|",
offset: 0.25,
width: 0mm,
length: 0mm,
),
),
)
)
// spell:off
line("r", "a")
line("r", "b")
line("b", "ba")
line("b", "bb")
line("ba", "baa")
line("ba", "bab")
line("bb", "bba")
line("bb", "bbb")
// spell:on
}))
// spell:off
line("r", "a")
line("r", "b")
line("b", "ba")
line("b", "bb")
line("ba", "baa")
line("ba", "bab")
line("bb", "bba")
line("bb", "bbb")
// spell:on
}),
)

View File

@ -1,21 +1,24 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#import "@preview/cetz:0.3.1"
#show: handout.with(
title: [Warm-Up: Wild Tic-Tac-Toe],
by: "Mark",
)
#let ttt = align(center, cetz.canvas({
import cetz.draw: *
let s = 0.7 // scale
#let ttt = align(
center,
cetz.canvas({
import cetz.draw: *
let s = 0.7 // scale
set-style(stroke: (thickness: 0.5mm * s))
line((-1 * s, 3 * s), (-1 * s, -3 * s))
line((1 * s, 3 * s), (1 * s, -3 * s))
line((3 * s, -1 * s), (-3 * s, -1 * s))
line((3 * s, 1 * s), (-3 * s, 1 * s))
}))
set-style(stroke: (thickness: 0.5mm * s))
line((-1 * s, 3 * s), (-1 * s, -3 * s))
line((1 * s, 3 * s), (1 * s, -3 * s))
line((3 * s, -1 * s), (-3 * s, -1 * s))
line((3 * s, 1 * s), (-3 * s, 1 * s))
}),
)
#problem()