From e5b005346519f81e0f2ec0397d75aefa39ac9dbd Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 23 Sep 2025 23:29:06 -0700 Subject: [PATCH 1/4] Update cetz & ci --- .gitea/workflows/ci.yml | 4 +- .../Fast Inverse Root/parts/02 float.typ | 118 ++++++++-------- .../Fast Inverse Root/parts/03 approx.typ | 64 +++------ src/Advanced/Tropical Polynomials/macros.typ | 73 +++++----- .../parts/01 polynomials.typ | 108 +++++++-------- .../Tropical Polynomials/parts/02 cubic.typ | 22 ++- src/Advanced/Wallpaper/parts/00 intro.typ | 2 +- src/Advanced/Wallpaper/parts/01 reflect.typ | 2 +- src/Advanced/Wallpaper/parts/02 rotate.typ | 2 +- src/Advanced/Wallpaper/parts/03 problems.typ | 2 +- src/Advanced/Wallpaper/parts/04 theorem.typ | 33 ++--- src/Warm-Ups/Big-Tac-Toe/main.typ | 23 ++- src/Warm-Ups/Odd Dice/main.typ | 95 ++++++------- src/Warm-Ups/Painting/main.typ | 87 ++++++------ src/Warm-Ups/Passing Balls/main.typ | 131 ++++++++---------- src/Warm-Ups/What's an AST/main.typ | 87 ++++++------ src/Warm-Ups/Wild Tic-Tac-Toe/main.typ | 23 ++- 17 files changed, 393 insertions(+), 483 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 615b9a6..81f1815 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -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" diff --git a/src/Advanced/Fast Inverse Root/parts/02 float.typ b/src/Advanced/Fast Inverse Root/parts/02 float.typ index 09708b7..7fbcfd3 100644 --- a/src/Advanced/Fast Inverse Root/parts/02 float.typ +++ b/src/Advanced/Fast Inverse Root/parts/02 float.typ @@ -1,5 +1,5 @@ #import "@local/handout:0.1.0": * -#import "@preview/cetz:0.3.1" +#import "@preview/cetz:0.4.2" = Floats #definition() @@ -33,72 +33,66 @@ Another way we can interpret a bit string is as a _signed floating-point decimal 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: * +#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 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 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]) + 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((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]) - }), - ), -) + 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$. \ diff --git a/src/Advanced/Fast Inverse Root/parts/03 approx.typ b/src/Advanced/Fast Inverse Root/parts/03 approx.typ index 5934628..e950440 100644 --- a/src/Advanced/Fast Inverse Root/parts/03 approx.typ +++ b/src/Advanced/Fast Inverse Root/parts/03 approx.typ @@ -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 $ ]) diff --git a/src/Advanced/Tropical Polynomials/macros.typ b/src/Advanced/Tropical Polynomials/macros.typ index 5220f82..3f285d4 100644 --- a/src/Advanced/Tropical Polynomials/macros.typ +++ b/src/Advanced/Tropical Polynomials/macros.typ @@ -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, + )) } diff --git a/src/Advanced/Tropical Polynomials/parts/01 polynomials.typ b/src/Advanced/Tropical Polynomials/parts/01 polynomials.typ index f5062c2..a3f54a3 100644 --- a/src/Advanced/Tropical Polynomials/parts/01 polynomials.typ +++ b/src/Advanced/Tropical Polynomials/parts/01 polynomials.typ @@ -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$ diff --git a/src/Advanced/Tropical Polynomials/parts/02 cubic.typ b/src/Advanced/Tropical Polynomials/parts/02 cubic.typ index e8691c6..d3e5bd7 100644 --- a/src/Advanced/Tropical Polynomials/parts/02 cubic.typ +++ b/src/Advanced/Tropical Polynomials/parts/02 cubic.typ @@ -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", - 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) diff --git a/src/Warm-Ups/Painting/main.typ b/src/Warm-Ups/Painting/main.typ index 83461b1..1426b35 100644 --- a/src/Warm-Ups/Painting/main.typ +++ b/src/Warm-Ups/Painting/main.typ @@ -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: diff --git a/src/Warm-Ups/Passing Balls/main.typ b/src/Warm-Ups/Passing Balls/main.typ index b8420a8..718ff0f 100644 --- a/src/Warm-Ups/Passing Balls/main.typ +++ b/src/Warm-Ups/Passing Balls/main.typ @@ -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 } }), diff --git a/src/Warm-Ups/What's an AST/main.typ b/src/Warm-Ups/What's an AST/main.typ index 6c32b92..9c5db3a 100644 --- a/src/Warm-Ups/What's an AST/main.typ +++ b/src/Warm-Ups/What's an AST/main.typ @@ -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 +})) diff --git a/src/Warm-Ups/Wild Tic-Tac-Toe/main.typ b/src/Warm-Ups/Wild Tic-Tac-Toe/main.typ index 16dbc0d..757d15e 100644 --- a/src/Warm-Ups/Wild Tic-Tac-Toe/main.typ +++ b/src/Warm-Ups/Wild Tic-Tac-Toe/main.typ @@ -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() -- 2.49.0 From 81d65185534cac55a5d3c27ce3f729b6d743a6f1 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 23 Sep 2025 23:29:20 -0700 Subject: [PATCH 2/4] Lib tweaks --- lib/typst/local/handout/0.1.0/lib.typ | 18 ++-- lib/typst/local/handout/0.1.0/object.typ | 14 +-- lib/typst/local/handout/0.1.0/solution.typ | 112 ++++++++++++--------- 3 files changed, 72 insertions(+), 72 deletions(-) diff --git a/lib/typst/local/handout/0.1.0/lib.typ b/lib/typst/local/handout/0.1.0/lib.typ index 0c0a61a..e5ffa64 100755 --- a/lib/typst/local/handout/0.1.0/lib.typ +++ b/lib/typst/local/handout/0.1.0/lib.typ @@ -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, + sample_solution, solution, ) @@ -38,10 +35,7 @@ margin: 20mm, width: 8.5in, height: 11in, - footer: align( - center, - context counter(page).display(), - ), + footer: align(center, context counter(page).display()), footer-descent: 5mm, ) @@ -102,8 +96,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() diff --git a/lib/typst/local/handout/0.1.0/object.typ b/lib/typst/local/handout/0.1.0/object.typ index ed38683..dc02069 100644 --- a/lib/typst/local/handout/0.1.0/object.typ +++ b/lib/typst/local/handout/0.1.0/object.typ @@ -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)) } diff --git a/lib/typst/local/handout/0.1.0/solution.typ b/lib/typst/local/handout/0.1.0/solution.typ index 97c3f75..ac9a052 100755 --- a/lib/typst/local/handout/0.1.0/solution.typ +++ b/lib/typst/local/handout/0.1.0/solution.typ @@ -1,4 +1,4 @@ -#import "misc.typ": ored, oblue +#import "misc.typ": oblue, ored /// If false, hide instructor info. @@ -61,57 +61,71 @@ } #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 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), + ), + ))) } -- 2.49.0 From 69d835a2d2e31b0e6eaa56f8ee79869cf65ac868 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Sep 2025 21:58:18 -0700 Subject: [PATCH 3/4] Rewrite symmetric groups --- src/Advanced/Symmetric Groups/macros.typ | 134 ++++ src/Advanced/Symmetric Groups/main.tex | 58 -- src/Advanced/Symmetric Groups/main.typ | 35 + .../Symmetric Groups/parts/0 intro.tex | 199 ------ .../Symmetric Groups/parts/00 intro.typ | 378 +++++++++++ .../Symmetric Groups/parts/01 cycle.typ | 635 ++++++++++++++++++ .../Symmetric Groups/parts/02 groups.typ | 139 ++++ .../Symmetric Groups/parts/03 subgroup.typ | 172 +++++ .../Symmetric Groups/parts/1 cycle.tex | 536 --------------- .../Symmetric Groups/parts/2 groups.tex | 165 ----- .../Symmetric Groups/parts/3 subgroup.tex | 163 ----- 11 files changed, 1493 insertions(+), 1121 deletions(-) create mode 100644 src/Advanced/Symmetric Groups/macros.typ delete mode 100755 src/Advanced/Symmetric Groups/main.tex create mode 100644 src/Advanced/Symmetric Groups/main.typ delete mode 100644 src/Advanced/Symmetric Groups/parts/0 intro.tex create mode 100644 src/Advanced/Symmetric Groups/parts/00 intro.typ create mode 100755 src/Advanced/Symmetric Groups/parts/01 cycle.typ create mode 100755 src/Advanced/Symmetric Groups/parts/02 groups.typ create mode 100644 src/Advanced/Symmetric Groups/parts/03 subgroup.typ delete mode 100755 src/Advanced/Symmetric Groups/parts/1 cycle.tex delete mode 100755 src/Advanced/Symmetric Groups/parts/2 groups.tex delete mode 100644 src/Advanced/Symmetric Groups/parts/3 subgroup.tex diff --git a/src/Advanced/Symmetric Groups/macros.typ b/src/Advanced/Symmetric Groups/macros.typ new file mode 100644 index 0000000..bfc292c --- /dev/null +++ b/src/Advanced/Symmetric Groups/macros.typ @@ -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, + ) +} diff --git a/src/Advanced/Symmetric Groups/main.tex b/src/Advanced/Symmetric Groups/main.tex deleted file mode 100755 index 44b4ed3..0000000 --- a/src/Advanced/Symmetric Groups/main.tex +++ /dev/null @@ -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} diff --git a/src/Advanced/Symmetric Groups/main.typ b/src/Advanced/Symmetric Groups/main.typ new file mode 100644 index 0000000..0d5db50 --- /dev/null +++ b/src/Advanced/Symmetric Groups/main.typ @@ -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$ iff $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) diff --git a/src/Advanced/Symmetric Groups/parts/0 intro.tex b/src/Advanced/Symmetric Groups/parts/0 intro.tex deleted file mode 100644 index 1949abe..0000000 --- a/src/Advanced/Symmetric Groups/parts/0 intro.tex +++ /dev/null @@ -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 \ No newline at end of file diff --git a/src/Advanced/Symmetric Groups/parts/00 intro.typ b/src/Advanced/Symmetric Groups/parts/00 intro.typ new file mode 100644 index 0000000..9ab3ffc --- /dev/null +++ b/src/Advanced/Symmetric Groups/parts/00 intro.typ @@ -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 `312` 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) diff --git a/src/Advanced/Symmetric Groups/parts/01 cycle.typ b/src/Advanced/Symmetric Groups/parts/01 cycle.typ new file mode 100755 index 0000000..bed8fd4 --- /dev/null +++ b/src/Advanced/Symmetric Groups/parts/01 cycle.typ @@ -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 $[4321]$ + - $[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 permitation $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, and 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)$. + +#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) diff --git a/src/Advanced/Symmetric Groups/parts/02 groups.typ b/src/Advanced/Symmetric Groups/parts/02 groups.typ new file mode 100755 index 0000000..be7ad56 --- /dev/null +++ b/src/Advanced/Symmetric Groups/parts/02 groups.typ @@ -0,0 +1,139 @@ +#import "@local/handout:0.1.0": * +#import "@preview/cetz:0.4.2" +#import "../macros.typ": * + += Groups (review) + +#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$. + +- $ZZ_n^times$ is the set of integers mod $n$ with multiplicative inverses. \ + In other words, it is the set of integers smaller than $n$ and coprime to $n$.#footnote[We proved this in another handout, but you may take it as fact here.] \ + For example, $ZZ_12^times = {1, 5, 7, 11}$. + +#problem() +What are the elements of $S_3$? #hint[Use cycle notation] \ +How about $ZZ_17^times$? + +#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. +] + +#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.] + +#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[ + Only one: the trivial group. The inverse of a generator is also a generator! +] + +#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) diff --git a/src/Advanced/Symmetric Groups/parts/03 subgroup.typ b/src/Advanced/Symmetric Groups/parts/03 subgroup.typ new file mode 100644 index 0000000..645cc8a --- /dev/null +++ b/src/Advanced/Symmetric Groups/parts/03 subgroup.typ @@ -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) diff --git a/src/Advanced/Symmetric Groups/parts/1 cycle.tex b/src/Advanced/Symmetric Groups/parts/1 cycle.tex deleted file mode 100755 index 8721b99..0000000 --- a/src/Advanced/Symmetric Groups/parts/1 cycle.tex +++ /dev/null @@ -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} -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{} -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{} -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{} -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 \ No newline at end of file diff --git a/src/Advanced/Symmetric Groups/parts/2 groups.tex b/src/Advanced/Symmetric Groups/parts/2 groups.tex deleted file mode 100755 index abb0ded..0000000 --- a/src/Advanced/Symmetric Groups/parts/2 groups.tex +++ /dev/null @@ -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{} -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 diff --git a/src/Advanced/Symmetric Groups/parts/3 subgroup.tex b/src/Advanced/Symmetric Groups/parts/3 subgroup.tex deleted file mode 100644 index b0f4980..0000000 --- a/src/Advanced/Symmetric Groups/parts/3 subgroup.tex +++ /dev/null @@ -1,163 +0,0 @@ -\section{Subgroups} - -\problem{} -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{} -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 -- 2.49.0 From 0b7acaf5ae5467c96df35c50eff6e38cf5962d56 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Sep 2025 22:02:23 -0700 Subject: [PATCH 4/4] fmt --- .../Fast Inverse Root/parts/02 float.typ | 4 +- .../Fast Inverse Root/parts/03 approx.typ | 6 +-- .../Fast Inverse Root/parts/04 quake.typ | 6 +-- .../parts/00 arithmetic.typ | 49 ++++--------------- .../Tropical Polynomials/parts/02 cubic.typ | 2 +- src/Advanced/Wallpaper/parts/00 intro.typ | 4 +- src/Warm-Ups/Adders/main.typ | 8 +-- src/Warm-Ups/Partition Products/main.typ | 6 ++- 8 files changed, 31 insertions(+), 54 deletions(-) diff --git a/src/Advanced/Fast Inverse Root/parts/02 float.typ b/src/Advanced/Fast Inverse Root/parts/02 float.typ index 7fbcfd3..9aabdc2 100644 --- a/src/Advanced/Fast Inverse Root/parts/02 float.typ +++ b/src/Advanced/Fast Inverse Root/parts/02 float.typ @@ -31,7 +31,9 @@ Rewrite the following binary decimals in base 10: \ #definition(label: "floatbits") Another way we can interpret a bit string is as a _signed floating-point decimal_, or a `float` for short. \ Floats represent a subset of the real numbers, and are interpreted as follows: \ -#note([The following only applies to floats that consist of 32 bits. We won't encounter any others today.]) +#note( + [The following only applies to floats that consist of 32 bits. We won't encounter any others today.], +) #align(center, box(inset: 2mm, cetz.canvas({ import cetz.draw: * diff --git a/src/Advanced/Fast Inverse Root/parts/03 approx.typ b/src/Advanced/Fast Inverse Root/parts/03 approx.typ index e950440..1040a2f 100644 --- a/src/Advanced/Fast Inverse Root/parts/03 approx.typ +++ b/src/Advanced/Fast Inverse Root/parts/03 approx.typ @@ -131,9 +131,9 @@ $ 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 \ + & = 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 $ ]) diff --git a/src/Advanced/Fast Inverse Root/parts/04 quake.typ b/src/Advanced/Fast Inverse Root/parts/04 quake.typ index 5e2d57f..2037228 100644 --- a/src/Advanced/Fast Inverse Root/parts/04 quake.typ +++ b/src/Advanced/Fast Inverse Root/parts/04 quake.typ @@ -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. \ diff --git a/src/Advanced/Tropical Polynomials/parts/00 arithmetic.typ b/src/Advanced/Tropical Polynomials/parts/00 arithmetic.typ index 81c4c6e..bb87316 100644 --- a/src/Advanced/Tropical Polynomials/parts/00 arithmetic.typ +++ b/src/Advanced/Tropical Polynomials/parts/00 arithmetic.typ @@ -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$. diff --git a/src/Advanced/Tropical Polynomials/parts/02 cubic.typ b/src/Advanced/Tropical Polynomials/parts/02 cubic.typ index d3e5bd7..a28f7f2 100644 --- a/src/Advanced/Tropical Polynomials/parts/02 cubic.typ +++ b/src/Advanced/Tropical Polynomials/parts/02 cubic.typ @@ -166,7 +166,7 @@ Find a formula for each $C_i$ in terms of $c_0, c_1, ..., c_n$. #solution([ $ - A_j & = min_(l<=j= 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) -- 2.49.0