10 Commits

Author SHA1 Message Date
dde65a8a63 Snakes! 2025-10-06 18:37:21 -07:00
f88160b5f5 Quantum edits 2025-10-06 18:37:18 -07:00
e2947ea54b lib edits 2025-10-06 18:37:16 -07:00
30713a7916 Symmetric edits 2025-09-30 18:54:04 -07:00
0b7acaf5ae fmt
All checks were successful
CI / Typos (pull_request) Successful in 9s
CI / Typst formatting (pull_request) Successful in 4s
CI / Build (pull_request) Successful in 6m3s
CI / Typos (push) Successful in 10s
CI / Typst formatting (push) Successful in 4s
CI / Build (push) Successful in 7m25s
2025-09-24 22:02:23 -07:00
69d835a2d2 Rewrite symmetric groups
Some checks failed
CI / Typos (pull_request) Successful in 9s
CI / Typst formatting (pull_request) Failing after 5s
CI / Build (pull_request) Has been skipped
2025-09-24 21:58:18 -07:00
81d6518553 Lib tweaks
Some checks failed
CI / Typos (pull_request) Successful in 11s
CI / Typst formatting (pull_request) Failing after 5s
CI / Build (pull_request) Has been skipped
2025-09-23 23:29:20 -07:00
e5b0053465 Update cetz & ci 2025-09-23 23:29:06 -07:00
121780df6c Wallpaper groups (#23)
All checks were successful
CI / Typst formatting (push) Successful in 5s
CI / Typos (push) Successful in 11s
CI / Build (push) Successful in 5m39s
Reviewed-on: #23
2025-05-08 18:40:59 -07:00
99344f9aed Lattice edits (#22)
All checks were successful
CI / Typst formatting (push) Successful in 4s
CI / Typos (push) Successful in 11s
CI / Build (push) Successful in 10m5s
Reviewed-on: #22
2025-04-04 08:36:33 -07:00
87 changed files with 284448 additions and 1834 deletions

View File

@ -26,7 +26,7 @@ jobs:
- name: "Download Typstyle"
run: |
wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.12.14/typstyle-x86_64-unknown-linux-musl"
wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.13.17/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.12.0/typst-x86_64-unknown-linux-musl.tar.xz"
wget -q "https://github.com/typst/typst/releases/download/v0.13.1/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,13 +3,10 @@
// Re-exports
// All functions that maybe used by client code are listed here
#import "misc.typ": *
#import "object.typ": problem, definition, theorem, example, remark, generic
#import "object.typ": definition, example, generic, problem, remark, theorem
#import "solution.typ": (
if_solutions,
if_no_solutions,
if_solutions_else,
solution,
instructornote,
if_no_solutions, if_solutions, if_solutions_else, instructornote, review_box,
sample_solution, solution,
)
@ -33,15 +30,17 @@
by: none,
subtitle: none,
short_warning: false,
page_numbers: true,
) = {
set page(
margin: 20mm,
width: 8.5in,
height: 11in,
footer: align(
center,
context counter(page).display(),
),
footer: {
if page_numbers {
align(center, context counter(page).display())
}
},
footer-descent: 5mm,
)
@ -57,6 +56,8 @@
justify: true,
)
set math.mat(delim: "[")
//
// List style
set list(
@ -102,8 +103,8 @@
// Make handout title
{
import "header.typ": make_header, solution_warning, short_solution_warning
import "solution.typ": solutions_state, reset_solutions
import "header.typ": make_header, short_solution_warning, solution_warning
import "solution.typ": reset_solutions, solutions_state
reset_solutions()

View File

@ -29,11 +29,7 @@
}
// 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.
//
@ -57,7 +53,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
@ -100,9 +96,5 @@
#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": ored, oblue
#import "misc.typ": oblue, ored
/// If false, hide instructor info.
@ -61,57 +61,94 @@
}
#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:])),
),
block(
width: 100%,
height: auto,
breakable: false,
fill: ored.lighten(80%).desaturate(10%),
stroke: ored + 2pt,
inset: 3mm,
align(left, 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:])),
),
)
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:])),
),
block(
width: 100%,
height: auto,
breakable: false,
fill: oblue.lighten(80%).desaturate(10%),
stroke: oblue + 2pt,
inset: 3mm,
align(left, 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:])),
),
)
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.3.1"
#import "@preview/cetz:0.4.2"
= Floats
#definition()
@ -31,75 +31,71 @@ 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.])
#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])
}),
),
#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])
})))
- 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.3.1"
#import "@preview/cetz-plot:0.1.0": plot, chart
#import "@preview/cetz:0.4.2"
#import "@preview/cetz-plot:0.1.2": chart, plot
= Integers and Floats
@ -44,19 +44,11 @@ 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))
},
)
})
@ -90,19 +82,11 @@ 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))
},
)
})
@ -120,16 +104,13 @@ 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()
@ -149,12 +130,11 @@ $
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

@ -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, and thus $p_0$ might not equal $p_1$.
We do \textbf{not} assume this coin is fair---$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,15 +45,16 @@ 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 known to be \texttt{0}, \par
That is, $[0]$ represents a bit that we know 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: \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. This means that \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}
@ -66,7 +67,6 @@ 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,6 +118,10 @@ Draw all possible states on the axis below.
%
% MARK: measure
%
\section{Measuring Probabilistic Bits}
@ -125,7 +129,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 both of these outcomes. \par
We do not know whether the bit is \texttt{0} or \texttt{1}, but we do know the probability of each outcome. \par
\vspace{2mm}
@ -135,7 +139,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, it's state \textit{collapses} to either $[0]$ or $[1]$, and the original state of the
When we measure a bit, its 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.
@ -165,7 +169,10 @@ 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, but I've written them horizontally to save space.}
\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.
}
\vfill
@ -189,7 +196,9 @@ What is the probability that $x$ and $y$ produce different outcomes?
%
% MARK: tensor product
%
\section{Tensor Products}
@ -315,7 +324,7 @@ $?
\problem{}
What is the \textit{span} of the vectors we found in \ref{basistp}? \par
In other words, what is the set of vectors that can be written as linear combinations of the vectors above?
In other words, what is the set of all vectors that can be written as linear combinations of the vectors above?
\vfill
@ -387,7 +396,7 @@ Compute the following. Is the result what we'd expect?
\problem{}<fivequant>
Of course, writing $[0] \otimes [1]$ is a bit excessive. We'll shorten this notation to $[01]$. \par
Writing $[0] \otimes [1]$ is tedious. We'll shorten this notation to $[01]$. \par
\vspace{2mm}
@ -429,9 +438,9 @@ Write the three-bit states $[0]$ through $[7]$ as column vectors. \par
%
% MARK: ops
%
@ -443,25 +452,6 @@ 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 =
@ -482,6 +472,10 @@ Thus,
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*}
@ -496,12 +490,23 @@ Compute the following product:
\vfill
\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
\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*}
\problem{}
Find the matrix that represents the NOT operation on one probabilistic bit.
@ -516,6 +521,8 @@ 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

@ -4,7 +4,8 @@ Quantum bits (or \textit{qubits}) are very similar to probabilistic bits, but ha
probabilities are replaced with \textit{amplitudes}.
\vspace{2mm}
Of course, a qubit can take the values \texttt{0} and \texttt{1}, which are denoted $\ket{0}$ and $\ket{1}$. \par
As before a qubit can take the extremal 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}
@ -19,8 +20,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
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]$.
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}$.
\vspace{8mm}
@ -28,7 +29,7 @@ and $\ket{1} = \left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$.
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, but probabilistic bit probabilities cannot.
Quantum amplitudes may be negative!
\vspace{2mm}
@ -89,8 +90,8 @@ Write $\ket{\psi}$ as a linear combination of $\ket{0}$ and $\ket{1}$.
\definition{Measurement I}
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
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}$,
with the following probabilities:
\begin{itemize}[itemsep = 2mm, topsep = 2mm]
\item $\mathcal{P}(\ket{1}) = \psi_1^2$
@ -117,7 +118,7 @@ leaving no trace of the previous superposition. \par
\problem{}
\begin{itemize}
\item What is the probability we observe $\ket{0}$ when we measure $\ket{\psi}$? \par
\item What is the probability that 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}
@ -235,6 +236,10 @@ 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.
@ -277,7 +282,7 @@ Find the matrix $X$.
\vfill
\problem{}
What is $X\ket{+}$ and $X\ket{-}$? \par
What are $X\ket{+}$ and $X\ket{-}$? \par
\hint{Remember that all matrices are linear maps. What does this mean?}
\begin{solution}
@ -331,11 +336,21 @@ 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 is $U\ket{0}$ and $U\ket{1}$?
What are $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
@ -343,5 +358,10 @@ 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

@ -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 the state be if we'd measured $\ket{1}$ instead?
What would that 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 product states can be factored into a tensor product of individual qubit states. For example,
Some compound 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

@ -1,40 +1,42 @@
\section{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: \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{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{}
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$
Before we discussing multi-qubit quantum gates, we need to review classical logic. \par
In this section, let's return to probabilistic bits.
\problem{}<notgatex>
The \texttt{not} gate is a map defined by the following table: \par
\begin{itemize}
\item $X\ket{0} = \ket{1}$
\item $X\ket{1} = \ket{0}$
\item $X[0] = [1]$
\item $X[1] = [0]$
\end{itemize}
Write the \texttt{not} gate as a matrix that operates on single-bit vector states. \par
@ -93,11 +95,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\ket{00} = A[1,0,0,0] = [1,0] = \ket{0}$
$A[00] = A[1,0,0,0] = [1,0] = [0]$
\vspace{2mm}
Also with the last column (which is $[0,1]$): \par
$A\ket{00} = A[0,0,0,1] = [0,1] = \ket{1}$
$A[00] = A[0,0,0,1] = [0,1] = [1]$
\end{instructornote}
\end{solution}
@ -244,10 +246,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\ket{00} = \ket{10}$
\item $T\ket{01} = \ket{11}$
\item $T\ket{10} = \ket{00}$
\item $T\ket{11} = \ket{01}$
\item $T[00] = [10]$
\item $T[01] = [11]$
\item $T[10] = [00]$
\item $T[11] = [01]$
\end{itemize}
@ -256,8 +258,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
$\ket{0} = \left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$ and
$\ket{1} = \left[\begin{smallmatrix} 0 \\ 1 \end{smallmatrix}\right]$ \\
$[0] = \left[\begin{smallmatrix} 1 \\ 0 \end{smallmatrix}\right]$ and
$[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]$.
}
@ -279,25 +281,26 @@ 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) {$\ket{0}$};
\node[qubit] (b) at (0, -1) {$\ket{0}$};
\node[qubit] (a) at (0, 0) {$[0]$};
\node[qubit] (b) at (0, -1) {$[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}$};
\draw[wire] (a) -- ([shift={(3, 0)}] a.center) node[qubit] {$[1]$};
\draw[wire] (b) -- ([shift={(3, 0)}] b.center) node[qubit] {$[0]$};
\qubox{a}{1}{a}{2}{$X$}
\qubox{b}{1}{b}{2}{$I$}
\end{tikzpicture}
\end{center}
We can even omit the $I$ gate, since we now know that transformations affect the whole state: \par
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
\begin{center}
\begin{tikzpicture}[scale=0.8]
\node[qubit] (a) at (0, 0) {$\ket{0}$};
\node[qubit] (b) at (0, -1) {$\ket{0}$};
\node[qubit] (a) at (0, 0) {$[0]$};
\node[qubit] (b) at (0, -1) {$[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}$};
\draw[wire] (a) -- ([shift={(3, 0)}] a.center) node[qubit] {$[1]$};
\draw[wire] (b) -- ([shift={(3, 0)}] b.center) node[qubit] {$[0]$};
\qubox{a}{1}{a}{2}{$X$}
\end{tikzpicture}

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 half-qubits---not classical bits, as we were before.
Keep in mind that we're working with quantum gates and proper 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:}
Now, consider the following circuit:
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 one-qubit quantum states.
We must treat a multi-qubit state as a single unit.
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.
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})$.
\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
If we change the probabilities of only $\ket{a}$, \textit{all four of these change!}
\vfill
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.
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!
\begin{center}
\begin{tikzpicture}[scale=1]

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 can call these bits anticorrelated?
Do you see why we call these bits \say{anticorrelated}?
\vfill

View File

@ -1,5 +1,6 @@
\definition{}
The \textit{integer lattice} $\mathbb{Z}^n \subset \mathbb{R}^n$ is the set of points with integer coordinates.
The \textit{integer lattice} $\mathbb{Z}^n$ is the set of points with integer coordinates in $n$ dimensions. \par
For example, $\mathbb{Z}^3$ is the set of points $(a, b, c)$ where $a$, $b$, and $c$ are integers.
\problem{}
Draw $\mathbb{Z}^2$.
@ -8,12 +9,13 @@ Draw $\mathbb{Z}^2$.
\definition{}
We say a set of vectors $\{v_1, v_2, ..., v_k\}$ \textit{generates} $\mathbb{Z}^n$ if every lattice point can be written uniquely as
We say a set of vectors $\{v_1, v_2, ..., v_k\}$ \textit{generates} $\mathbb{Z}^n$
if every lattice point can be written as
$$
a_1v_1 + a_2v_2 + ... + a_kv_k
$$
for integer coefficients $a_i$. \par
It is fairly easy to show that $k$ must be at least $n$.
\textbf{Bonus:} show that $k$ must be at least $n$.
\problem{}
Which of the following generate $\mathbb{Z}^2$?
@ -30,8 +32,7 @@ Which of the following generate $\mathbb{Z}^2$?
\vfill
\problem{}
Find a set of two vectors that generates $\mathbb{Z}^2$. \\
Don't say $\{ (0, 1), (1, 0) \}$, that's too easy.
Find a set of two vectors other than $\{ (0, 1), (1, 0) \}$ that generates $\mathbb{Z}^2$. \\
\vfill
@ -44,7 +45,8 @@ Find a set of vectors that generates $\mathbb{Z}^n$.
\pagebreak
\definition{}
A \textit{fundamental region} of a lattice is the parallelepiped spanned by a generating set. The exact shape of this region depends on the generating set we use.
Say we have a generating set of a lattice. \par
The \textit{fundamental region} of this set is the $n$-dimensional parallelogram spanned by its members. \par
\problem{}
Draw two fundamental regions of $\mathbb{Z}^2$ using two different generating sets. Verify that their volumes are the same.

View File

@ -1,6 +1,6 @@
\section{Minkowski's Theorem}
\theorem{Blichfeldt's Theorem}
\theorem{Blichfeldt's Theorem}<blich>
Let $X$ be a finite connected region. If the volume of $X$ is greater than $1$, $X$ must contain two distinct points that differ by an element of $\mathbb{Z}^n$. In other words, there exist distinct $x, y \in X$ so that $x - y \in \mathbb{Z}^n$.
\vspace{2mm}
@ -9,14 +9,22 @@ Intuitively, this means that you can translate $X$ to cover two lattice points a
\problem{}
Draw a region in $\mathbb{R}^2$ with volume greater than 1 that contains no lattice points. Find two points in that region which differ by an integer vector.
Draw a connected region in $\mathbb{R}^2$ with volume greater than 1 that contains no lattice points. Find two points in that region which differ by an integer vector.
\hint{Area is two-dimensional volume.}
\vfill
\problem{}
The following picture gives an idea for the proof of Blichfeldt's theorem in $\mathbb{Z}^2$. Explain the picture and complete the proof.
Draw a \textit{disconnected} region in $\mathbb{R}^2$ with volume greater than 1 that contains no lattice points, \par
and show that no two points in that region differ by an integer vector.
\note{In other words, show that \ref{blich} indeed requires a connected region.}
\vfill
\problem{}
The following picture gives an idea for the proof of Blichfeldt's theorem in $\mathbb{Z}^2$. \par
Explain the picture and complete the proof.
\begin{center}
\includegraphics[angle=90,width=0.5\linewidth]{proof.png}
@ -48,10 +56,8 @@ Let $X$ be a region $\in \mathbb{R}^2$ of volume $k$. How many integral points m
A region $X$ is \textit{convex} if the line segment connecting any two points in $X$ lies entirely in $X$.
\problem{}
\begin{itemize}
\item Draw a convex region in the plane.
\item Draw a region that is not convex.
\end{itemize}
Draw a convex region in two dimensions. \par
Then, draw a two-dimensional region that is \textit{not} convex.
\vfill
\pagebreak
@ -59,23 +65,28 @@ A region $X$ is \textit{convex} if the line segment connecting any two points in
\definition{}
We say a region $X$ is \textit{symmetric} if for all points $x \in X$, $-x$ is also in $X$.
We say a region $X$ is \textit{symmetric with respect to the origin} if for all points $x \in X$, $-x$ is also in $X$. \par
In the following problems, \say{\textit{symmetric}} means \say{symmetric with respect to the origin.}
\problem{}
\begin{itemize}
\item Draw a symmetric region.
\item Draw an asymmetric region.
\end{itemize}
Draw a symmetric region. \par
Then, draw an asymmetric region.
\vfill
\problem{}
Show that a convex symmetric set always contains the origin.
\vfill
\theorem{Minkowski's Theorem}<mink>
Every convex set in $\mathbb{R}^n$ that is symmetric with respect to the origin and which has a volume greater than $2^n$ contains an integral point that isn't zero.
Every convex set in $\mathbb{R}^n$ that is symmetric and has a volume \par
greater than $2^n$ contains an integral point that isn't zero.
\problem{}
Draw a few sets that satisfy \ref{mink} in $\mathbb{R}^2$. \par
What is the simplest region that has the properties listed above?
What is a simple class of regions that has the properties listed above?
\vfill

View File

@ -0,0 +1,134 @@
#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

@ -1,58 +0,0 @@
% 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

@ -0,0 +1,35 @@
#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

@ -1,199 +0,0 @@
\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

@ -0,0 +1,378 @@
#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

@ -0,0 +1,635 @@
#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

@ -0,0 +1,148 @@
#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

@ -0,0 +1,172 @@
#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

@ -1,536 +0,0 @@
\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

@ -1,165 +0,0 @@
\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

@ -1,163 +0,0 @@
\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.3.1"
#import "@preview/cetz:0.4.2"
// Shorthand, we'll be using these a lot.
@ -7,35 +7,31 @@
#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.
@ -48,23 +44,16 @@
/// 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,14 +134,7 @@ 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$), [], [], [], [], [],
@ -152,14 +145,7 @@ 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$), [], [], [], [], [],
@ -178,14 +164,7 @@ 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$),
@ -225,14 +204,7 @@ 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$),
@ -281,10 +253,9 @@ 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,21 +1,18 @@
#import "@local/handout:0.1.0": *
#import "../macros.typ": *
#import "@preview/cetz:0.3.1"
#import "@preview/cetz:0.4.2"
= 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.
@ -43,15 +40,12 @@ 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
@ -66,7 +60,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: *
@ -90,15 +84,12 @@ 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$.
@ -159,15 +150,19 @@ 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)
@ -236,11 +231,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)
@ -263,23 +258,21 @@ 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()
@ -325,7 +318,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)
@ -341,9 +334,8 @@ 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.3.1"
#import "@preview/cetz:0.4.2"
= Tropical Cubic Polynomials
@ -131,15 +131,12 @@ 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
@ -169,9 +166,8 @@ 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

@ -0,0 +1,26 @@
#import "@local/handout:0.1.0": *
// Resources:
//
// https://eschermath.org/wiki/Wallpaper_Patterns.html
// https://mathworld.wolfram.com/WallpaperGroups.html
// https://en.wikipedia.org/wiki/Wallpaper_group
#show: handout.with(
title: [Wallpaper Symmetry],
by: "Mark",
)
#include "parts/00 intro.typ"
#pagebreak()
#include "parts/01 reflect.typ"
#pagebreak()
#include "parts/02 rotate.typ"
#pagebreak()
#include "parts/03 problems.typ"
#pagebreak()
#include "parts/04 theorem.typ"

View File

@ -0,0 +1,7 @@
[metadata]
title = "Wallpaper Symmetries"
[publish]
handout = true
solutions = true

View File

@ -0,0 +1,153 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
= Wallpaper Symmetries
#definition()
A _Euclidean isometry_ is a transformation of the plane that preserves distances. \
Intuitively, an isometry moves objects on the plane without deforming them.
There are four classes of Euclidean isometries:
- translations
- reflections
- rotations
- glide reflections
#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) = {
let s = 0.5
cetz.draw.line(
(0, 0),
(3 * s, 0),
(3 * s, 1 * s),
(1 * s, 1 * s),
(1 * s, 2 * s),
(0, 2 * s),
close: true,
fill: c,
stroke: black + 0mm * s,
)
}
#table(
stroke: none,
align: center,
columns: (1fr, 1fr),
rows: (3.5cm, 3.5cm),
row-gutter: 2mm,
[
#cetz.canvas({
import cetz.draw: *
demo(ored)
translate(x: -1.0, y: -1.0)
demo(oblue)
})
#v(1fr)
Translation
],
[
#cetz.canvas({
import cetz.draw: *
circle((-2, 0), radius: 0.1, stroke: none, fill: black)
arc(
(-2, 0),
radius: 1,
anchor: "origin",
start: 0deg,
stop: -30deg,
mode: "PIE",
)
demo(ored)
rotate(z: -30deg, origin: (-2, 0))
demo(oblue)
})
#v(1fr)
Rotation
],
[
#cetz.canvas({
import cetz.draw: *
line((-2, 0), (4, 0))
translate(x: 0, y: 0.25)
demo(ored)
set-transform(none)
set-transform((
(1, 0, 0, 0),
(0, 1, 0, 0),
(0, 0, 1, 0),
(0, 0, 0, 1),
))
translate(x: 0, y: 0.25)
demo(oblue)
})
#v(1fr)
Reflection
],
[
#cetz.canvas({
import cetz.draw: *
demo(ored)
set-transform((
(1, 0, 0, 0),
(0, 1, 0, 0),
(0, 0, 0, 0),
(0, 0, 0, 0),
))
translate(x: 2, y: 0)
demo(oblue)
set-transform(none)
line((-1, 0), (5, 0))
})
#v(1fr)
Glide reflection
],
)
#definition()
A _wallpaper_ is a two-dimensional pattern that...
- has translational symmetry in at least two non-parallel directions (and therefore fills the plane) \
#note[
"Translational symmetry" means that we can slide the entire wallpaper in some direction, \
eventually mapping the pattern to itself.]
- has a countable number of reflection, rotation, or glide symmetries. \
#v(1fr)
#pagebreak()
#problem()
Is a plain square grid a valid wallpaper?
#solution([
Yes!
- It has translational symmetry in the horizontal and vertical directions
- It has a countable number of symmetries---namely, six distinct mirror lines (horizontal, vertical, and diagonal) duplicated once per square.
- A square grid is #sym.convolve`442`
])
#v(1fr)
#problem()
Is the empty plane a valid wallpaper?
#solution([
No, since it has uncountably many symmetries.
])
#v(1fr)

View File

@ -0,0 +1,132 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
= Mirror Symmetry
#definition()
A _reflection_ is a transformation of the plane obtained by reflecting all points about a line. \
If this reflection maps the wallpaper to itself, we have a _mirror symmetry_. \
If $n$ such mirror lines intersect at a point, they form a _mirror node of order $n$_. \
#note[Mirror nodes with order 1 do not exist (i.e, $n >= 2$). A line does not intersect itself!]
#v(2mm)
Two mirror nodes on a wallpaper are identical if we can map one to the other with a translation and a rotation while preserving the pattern on that wallpaper.
#problem(label: "pat333")
Find all three distinct mirror nodes in the following pattern. \
What is the order of each node? \
#hint([
You may notice rotational symmetry in this pattern. \
Don't worry about that yet, we'll discuss it later.
])
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 45mm,
image("../res/wolfram/p3m1.svg", height: 100%),
)
#solution([
The mirror nodes are:
- the center of the amber cross
- the center of each right-handed group of three adjacent hexagons
- the center of each left-handed group of three adjacent hexagons
])
#v(1fr)
#definition()
_Orbifold notation_ gives us a way to describe the symmetries of a wallpaper. \
It defines a _signature_ that fully describes all the symmetries of a given pattern. \
We will introduce orbifold notation one symmetry at a time.
#definition()
In orbifold notation, mirror nodes are denoted by a #sym.convolve followed by a list of integer. \
Every integer $n$ following a #sym.convolve denotes a mirror node of order $n$.
#v(2mm)
The order of these integers doesn't matter. #sym.convolve`234` and #sym.convolve`423` are the same signature. \
However, we usually denote $n$-fold symmetries in descending order (that is, like #sym.convolve`432`). \
If we have many nodes of the same order, integers may be repeated.
#problem()
What is the signature of the wallpaper in @pat333? \
#hint[Again, ignore rotational symmetry for now.]
#solution([It is #sym.convolve`333`])
// MARK: page
#v(1fr)
#pagebreak()
#problem()
Find the signature of the following pattern.
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 60mm,
image("../res/*632-a.png", height: 100%),
)
#solution([
It is #sym.convolve`632`:
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 40mm,
image("../res/*632-b.png", height: 100%),
)
])
#v(1fr)
#problem()
Draw a wallpaper pattern with signature #sym.convolve`2222`
#solution([
Sample solutions are below.
#table(
stroke: none,
align: center,
columns: (1fr, 1fr),
rows: 50mm,
image("../res/wolfram/pmm.svg", height: 100%),
image("../res/escher/pmm.svg", height: 100%),
)
])
#v(1fr)
#pagebreak()
#remark()
In an exceptional case, we have two parallel mirror lines. \
Consider the following pattern:
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 60mm,
image("../res/**.png", height: 100%),
)
The signature of this pattern is #sym.convolve#sym.convolve
#problem()
Draw another wallpaper pattern with signature #sym.convolve#sym.convolve.
#v(1fr)

View File

@ -0,0 +1,181 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
= Rotational Symmetry
#definition()
A wallpaper may also have $n$-fold rotational symmetry about a point.
#v(2mm)
This means there are no more than $n$ rotations around that point that map the wallpaper to itself.
#v(2mm)
As before, two points of rotational symmetry are identical if we can perform a translation and rotation that maps one to the other without changing the wallpaper.
#definition()
In orbifold notation, rotation is specified similarly to reflection, but uses the prefix #sym.diamond.stroked.small. \
For example:
- #sym.diamond.stroked.small`333` denotes a pattern with three distinct centers of rotation of order 3.
- #sym.diamond.stroked.small`4`#sym.convolve`2` denotes a pattern with one rotation center of order 4 and one mirror node of order 2.
#table(
stroke: none,
align: center,
columns: (1fr, 1fr),
rows: 50mm,
image("../res/333.png", height: 100%), image("../res/3*3.png", height: 100%),
)
#problem()
Find the three rotation centers in the left wallpaper. \
What are their orders?
#solution([This is #sym.diamond.stroked.small`333`])
#v(1fr)
#problem()
Find the signature of the pattern on the right.
#solution([This is #sym.diamond.stroked.small`3`#sym.convolve`3`])
#v(1fr)
#remark()
You may have noticed that we could have an ambiguous classification, since two reflections are equivalent to a translation and a rotation.
We thus make the following distinction: _rotational symmetry that can be explained by reflection is not rotational symmetry._
#v(2mm)
In other words, when classifying a pattern...
- we first find all mirror symmetries,
- then all rotational symmetries that are not accounted for by reflection.
#pagebreak()
// MARK: glide
= Glide Reflections
#definition()
Another type of symmetry is the _glide reflection_, denoted #sym.times.
A glide reflection is the result of a translation along a line followed by reflection about that line.
For example, consider the following pattern:
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 60mm,
image("../res/*x-a.png", height: 100%),
)
#problem()
Convince yourself that all mirror lines in this pattern are _not_ distinct. /
In other words, this pattern has only one mirror symmetry.
#solution([
There may seem to be two, but they are identical. \
We can translate one onto the other.
])
#v(1fr)
#problem()
Use the following picture to find the glide reflection in the above pattern.
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 70mm,
image("../res/*x-b.png", height: 100%),
)
#v(1fr)
#remark()
The signature of this wallpaper is #sym.convolve#sym.times.
#pagebreak()
#definition()
If none of the above symmetries appear in a pattern, then we only have simple translational symmetry. We denote this with the signature #sym.circle.small.
#remark()
In summary, to find the signature of a pattern:
- find the mirror lines (#sym.convolve) and the distinct intersections;
- then find the rotation centers (#sym.diamond.stroked.small) not explained by reflection;
- then find all glide reflections (#sym.times) that do not cross a mirror line.
- If we have none of the above, our pattern must be #sym.circle.small.
#problem()
Find the signature of the following pattern:
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 50mm,
image("../res/wiki/Wallpaper_group-cm-4.jpg", height: 100%),
)
#solution([
This is #sym.convolve#sym.times.
])
#v(1fr)
#problem()
Find the signature of the following pattern:
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 60mm,
image("../res/wiki/Wallpaper_group-p4g-2.jpg", height: 100%),
)
#solution([
This is #sym.diamond.stroked.small`4`#sym.convolve`2`
])
#v(1fr)
#pagebreak()
#problem()
Find two glide reflections in the following pattern.\
#note[(and thus show that its signature is #sym.times#sym.times.)]
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 70mm,
image("../res/xx-b.png", height: 100%),
)
#solution([
#table(
stroke: none,
align: center,
columns: 1fr,
rows: 40mm,
image("../res/xx-a.png", height: 100%),
)
])
#v(1fr)

View File

@ -0,0 +1,67 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
#let pat(img, sol) = {
problem()
table(
stroke: none,
align: center,
columns: (1fr, 1fr),
rows: 80mm,
image(img, height: 100%), image(img, height: 100%),
)
solution(sol)
v(1fr)
}
= A few problems
Find the signatures of the following patterns. Mark all mirror nodes, rotation centers, and glide reflections. \
Each pattern is provided twice for convenience.
#pat("../res/wolfram/cm.svg", [#sym.times#sym.convolve])
#pat("../res/wolfram/cmm.svg", [#sym.diamond.stroked`2`#sym.convolve`22`])
#pagebreak()
#pat("../res/wolfram/p3.svg", [#sym.diamond.stroked`333`])
#pat("../res/wolfram/p3m1.svg", [#sym.convolve`333`])
#pagebreak()
#pat("../res/wolfram/p4.svg", [#sym.diamond.stroked`442`])
#pat("../res/wolfram/p4m.svg", [#sym.convolve`442`])
#pagebreak()
#pat("../res/wolfram/p6.svg", [#sym.diamond.stroked`632`])
#pat("../res/wolfram/p6m.svg", [#sym.convolve`632`])
#pagebreak()
#pat("../res/wolfram/p4g.svg", [#sym.diamond.stroked`4`#sym.convolve`2`])
#pat("../res/wolfram/p31m.svg", [#sym.diamond.stroked`3`#sym.convolve`3`])
#pagebreak()
#problem()
Draw a wallpaper with the signature #sym.convolve`442` \
#note[Make sure there are no other symmetries!]
#v(1fr)
#pagebreak()
#pat("../res/wolfram/pgg.svg", [#sym.diamond.stroked`22`#sym.times])
#pat("../res/wolfram/pmg.svg", [#sym.diamond.stroked`22`#sym.convolve])
#pagebreak()
#pat("../res/wolfram/pg.svg", [#sym.times#sym.times])
#pat("../res/wolfram/pm.svg", [#sym.convolve#sym.convolve])
#pagebreak()
#pat("../res/wolfram/p2.svg", [#sym.diamond.stroked`2222`])
#pat("../res/wolfram/pmm.svg", [#sym.convolve`2222`])
#pagebreak()
#pat("../res/wolfram/p1.svg", [#sym.circle.small])

View File

@ -0,0 +1,97 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"
= The Signature-Cost Theorem
#definition()
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)$],
))
We then calculate the total "cost" of a signature by adding up the costs of each component.
For example, a pattern with signature #sym.convolve`333` has cost 2:
#v(2mm)
$
2 / 3 + 2 / 3 + 2 / 3 = 2
$
#problem()
Calculate the costs of the following signatures:
- #sym.diamond.stroked.small`3`#sym.convolve`3`
- #sym.convolve#sym.convolve
- #sym.diamond.stroked.small`4`#sym.convolve`2`:
#solution([
- #sym.diamond.stroked.small`3`#sym.convolve`3`: $2/3 + 1 + 1/3 = 2$
- #sym.convolve#sym.convolve: $1 + 1 = 2$
- #sym.diamond.stroked.small`4`#sym.convolve`2`: $3/4 + 1 + 1/4 = 2$
])
#v(1fr)
#theorem(name: "Signature Cost Theorem")
The signatures of planar wallpaper patterns are exactly those with total cost 2. \
#note([We will not prove this theorem today, accept it without proof.])
#problem()
Consider the 4 symmetries (translation, reflection, rotation, and glide reflection). \
Which preserve orientation? Which reverse orientation?
#solution([
- Reflections and glide reflections reverse orientation (directions of spirals).
- Translation and rotation preserve orientation.
])
#v(1fr)
#pagebreak()
#problem()
Use the signature-cost theorem to find all the signatures consisting of only #sym.circle.small or rotational symmetries.
#solution([
#sym.diamond.stroked.small`632`, #sym.diamond.stroked.small`442`, #sym.diamond.stroked.small`333`, #sym.diamond.stroked.small`2222`, #sym.circle.small
])
#v(1fr)
#problem()
Find all the signatures consisting of only mirror symmetries.
#solution([
#sym.convolve`632`, #sym.convolve`442`, #sym.convolve`333`, #sym.convolve`2222`, #sym.convolve#sym.convolve
])
#v(1fr)
#problem()
Find all the remaining signatures. \
Each must be a mix of of mirror symmetries, rotational symmetries, or glide reflections. \
#hint([They are all shown in the problems section.])
#solution([
#sym.diamond.stroked.small`3`#sym.convolve`3`, #sym.diamond.stroked.small`4`#sym.convolve`2`,
#sym.diamond.stroked.small`22`#sym.times, #sym.diamond.stroked.small`22`#sym.convolve,
#sym.times#sym.times, #sym.times#sym.convolve
])
#v(1fr)

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

View File

@ -0,0 +1,86 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.16cm" height="5.08cm" viewBox="0 0 384 192">
<title>pmm</title>
<desc>Exported by Tess 1.70.</desc>
<clipPath id="mainclip"><rect x="0" y="0" width="384" height="192"/></clipPath>
<g style="fill-rule:evenodd; stroke-linejoin:round; stroke-linecap:round; clip-path:url(#mainclip)">
<defs>
<g id="Tess0p">
<path d="
M7.1306642022,-41.0013191628
L7.1306642022,-7.1306642022
L89.1333025278,-7.1306642022
L7.1306642022,-42.7839852134
"/></g>
<g id="Tess0" style="fill:none; stroke:none"><use xlink:href="#Tess0p"/></g>
<g id="Tess1" style="fill:none; stroke:rgb(0,0,0); stroke-width:1.7826660506"><use xlink:href="#Tess0p"/></g>
</defs>
<g transform="translate(192,96) rotate(0) scale(0.5609575611,0.5609575611)">
<g transform="translate(-405.2631578947,-100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,0)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,200)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,-100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,0)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,200)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,-100)"><use xlink:href="#Tess1"/></g>
<g><use xlink:href="#Tess1"/></g>
<g transform="translate(0,100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,200)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,-100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,0)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,100)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,200)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,0) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,0) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,0) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,100) rotate(180)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,0) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,0) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,0) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(405.2631578947,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,0) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-405.2631578947,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,0) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(-202.6315789474,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(0,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,0) scale(1,-1)"><use xlink:href="#Tess1"/></g>
<g transform="translate(202.6315789474,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 991 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 233 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 236 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 196 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 178 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 205 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 299 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 264 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 268 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 204 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 229 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 273 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 379 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 147 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 163 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 178 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

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.3.1"
#import "@preview/cetz:0.4.2"
#show: handout.with(
title: [Warm-Up: Big-Tac-Toe],
@ -75,16 +75,13 @@ 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.3.1"
#import "@preview/cetz:0.4.2"
#show: handout.with(
@ -43,61 +43,56 @@ 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.3.1"
#import "@preview/cetz:0.4.2"
#show: handout.with(
title: [Warm-Up: What's an AST?],
@ -18,59 +18,56 @@ 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,7 +17,9 @@ 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.3.1"
#import "@preview/cetz:0.4.2"
#show: handout.with(
title: [Warm-Up: Passing Balls],
@ -78,32 +78,25 @@ 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
}
}),
@ -118,32 +111,25 @@ 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
}
}),
@ -158,32 +144,25 @@ 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
}
}),

81
src/Warm-Ups/Snakes/0.svg Normal file
View File

@ -0,0 +1,81 @@
<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>

After

Width:  |  Height:  |  Size: 6.3 KiB

161
src/Warm-Ups/Snakes/1.svg Normal file
View File

@ -0,0 +1,161 @@
<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>

After

Width:  |  Height:  |  Size: 11 KiB

401
src/Warm-Ups/Snakes/2.svg Normal file
View File

@ -0,0 +1,401 @@
<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>

After

Width:  |  Height:  |  Size: 26 KiB

1121
src/Warm-Ups/Snakes/3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 68 KiB

3281
src/Warm-Ups/Snakes/4.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 196 KiB

9761
src/Warm-Ups/Snakes/5.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 579 KiB

29201
src/Warm-Ups/Snakes/6.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.7 MiB

87521
src/Warm-Ups/Snakes/7.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 5.1 MiB

View File

@ -0,0 +1,89 @@
#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

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

View File

@ -0,0 +1,57 @@
#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.3.1"
#import "@preview/cetz:0.4.2"
#show: handout.with(
title: [Warm-Up: What's an AST?],
@ -24,51 +24,48 @@ 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,
),
end: (
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,
),
),
)
// 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,24 +1,21 @@
#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.3.1"
#import "@preview/cetz:0.4.2"
#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()

View File

@ -1,6 +1,7 @@
[default]
extend-words."LSAT" = "LSAT"
extend-words."ket" = "ket"
extend-words."typ" = "typ"
extend-ignore-re = [
# spell:disable-line