text:
# Galois Theory

## General Galois Extensions

### Fall 2020 #4 $\done$
Let $K$ be a Galois extension of $F$, and let $F \subset E \subset K$ be inclusions of fields.
Let $G \da \Gal(K/F)$ and $H \da \Gal(K/E)$, and suppose $H$ contains $N_G(P)$, where $P$ is a Sylow $p$-subgroup of $G$ for $p$ a prime.
Prove that \( [E: F] \equiv 1 \mod p \).

:::{.concept}
The correspondence:

\begin{tikzcd}
	K &&&& 1 \\
	\\
	E &&&& {H \da \Gal(K/E)\hspace{4em}} \\
	\\
	F &&&& {G \da \Gal(K/F)\hspace{4em}}
	\arrow["{[E:F]}", hook, from=5-1, to=3-1]
	\arrow["{[K:E]}", hook, from=3-1, to=1-1]
	\arrow[""{name=0, anchor=center, inner sep=0}, "{[K:F]}"', curve={height=30pt}, hook, from=5-1, to=1-1]
	\arrow["{[H:1]}"', hook, from=1-5, to=3-5]
	\arrow["{[G:H]}"', hook, from=3-5, to=5-5]
	\arrow["{[G:1]}", curve={height=-30pt}, hook, from=1-5, to=5-5]
	\arrow["{\Gal(K/\wait)}"', shift right=5, shorten <=18pt, Rightarrow, from=0, to=3-5]
\end{tikzcd}

> [Link to Diagram](https://q.uiver.app/?q=WzAsNixbMCwyLCJFIl0sWzAsMCwiSyJdLFswLDQsIkYiXSxbNCwwLCIxIl0sWzQsMiwiSCBcXGRhIFxcR2FsKEsvRSlcXGhzcGFjZXs0ZW19Il0sWzQsNCwiRyBcXGRhIFxcR2FsKEsvRilcXGhzcGFjZXs0ZW19Il0sWzIsMCwiW0U6Rl0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJob29rIiwic2lkZSI6InRvcCJ9fX1dLFswLDEsIltLOkVdIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoiaG9vayIsInNpZGUiOiJ0b3AifX19XSxbMiwxLCJbSzpGXSIsMix7ImN1cnZlIjo1LCJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJob29rIiwic2lkZSI6InRvcCJ9fX1dLFszLDQsIltIOjFdIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoiaG9vayIsInNpZGUiOiJ0b3AifX19XSxbNCw1LCJbRzpIXSIsMix7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Imhvb2siLCJzaWRlIjoidG9wIn19fV0sWzMsNSwiW0c6MV0iLDAseyJjdXJ2ZSI6LTUsInN0eWxlIjp7InRhaWwiOnsibmFtZSI6Imhvb2siLCJzaWRlIjoidG9wIn19fV0sWzgsNCwiXFxHYWwoSy9cXHdhaXQpIiwyLHsib2Zmc2V0Ijo1LCJzaG9ydGVuIjp7InNvdXJjZSI6MjB9fV1d)

Normalizers:
\[
N_G(P) = \ts{g\in G \st gPg\inv = P}
.\]

:::

:::{.solution}
\envlist

- Reduce to a group theory problem: $[E:F] = [G:H]$, despite the fact that $E/F$ is not necessarily Galois.
  This is because we can count in towers:
  \[
  [K:F] = [K:E][E:F] &\implies [G:1] = [K:E][H:1] \\
  &\implies \# G = [K:E] \# H \\
  &\implies [G:H] = {\# G \over \# H} = [K:E]
  .\]

- Essential fact: if $P \in \Syl_p(G)$, we can use that $P \subseteq N_G(P) \subset H$ and so $P\in \Syl_p(H)$ as well.
- Now use that $N_G(P) \subseteq H$, and do Sylow theory for $P$ in both $G$ and $H$:
  - Sylow 3 on $G$ yields $n_p(G) = [G: N_G(P)] \equiv 1 \mod p$.
  - Sylow 3 on $H$ yields $n_p(H) = [G: N_H(P)] \equiv 1 \mod p$.
- Claim: $N_H(P) = N_G(P)$.
  - We have $N_H(P) \subseteq N_G(P)$ since $H \subseteq G$, so $hPh\inv = P$ remains true regarding either $h\in H$ or $h\in G$.
  - For $N_G(P) \subseteq N_H(P)$, use that $N_G(P) \subseteq H$ and so $gPg\inv = P$ implies $g\in H$, so $g\in N_H(P)$.

- Now morally one might want to apply an isomorphism theorem:
\[
{G/ N_G(P) \over H/N_H(P)}=
{G/ N_H(P) \over H/N_H(P)}\cong
{G\over H}
,\]
  but we don't have normality.
  However, we can still get away with the corresponding counting argument if everything is finite:
  \[
  {[G: N_G(P)] \over [H:N_H(P)] }=
  {[G: N_H(P)] \over [H:N_H(P)] }=
  {\# G / \# N_H(P) \over \# H / \#N_H(P)}
  = {\# G \over \# H}
  = [G: H]
  .\]

- We have an equation of the form $n_p(G)/n_p(H) = m$, and we want to show $m\equiv 1 \mod p$.

:::

### Fall 2019 Midterm #9  $\done$
Let $n\geq 3$ and $\zeta_n$ be a primitive $n$th root of unity. Show that $[\QQ(\zeta_n + \zeta_n\inv): \QQ] = \phi(n)/2$ for $\phi$ the totient function.

:::{.solution}
\envlist

- Some notation: let $\alpha_k \da \zeta_n^k + \zeta_n^{-k}$.
- Let $m(x)$ be the minimal polynomial of $\alpha_1 \da \zeta_n + \zeta_n\inv$.
  Note that $\alpha_1 \in \QQ(\zeta_n)$.
- Use that $\Gal(\QQ(\zeta_n)/\QQ) \cong C_n\units$, consisting of maps $\sigma_k: \zeta \mapsto \zeta^k$ for $\gcd(k, n) = 1$, of which there are $\phi(n)$ many.
- Galois transitively permutes the roots of irreducible polynomials, so the roots of $m$ are precisely the Galois conjugates of $\alpha$, i.e. the Galois orbit of $\alpha$, so we can just compute it.
  For illustrative purposes, suppose $n$ is prime, then
  \[
  \sigma_1(\zeta_n + \zeta_n\inv) &= \zeta_n + \zeta_n\inv =\alpha_1 \\
  \sigma_2(\zeta_n + \zeta_n\inv) &= \zeta_n^2 + \zeta_n^{-2} = \alpha_2 \\
  \sigma_3(\zeta_n + \zeta_n\inv) &= \zeta_n^3 + \zeta_n^{-3} = \alpha_3 \\
  \vdots&\\
  \sigma_{n-1}(\zeta_n + \zeta_n\inv) &= \zeta_n^{n-1} + \zeta_n^{-(n-1)} = \zeta_n^{-1} + \zeta_n^{1} = \alpha_1 \\
  \sigma_{n-2}(\zeta_n + \zeta_n\inv) &= \zeta_n^{n-2} + \zeta_n^{-(n-2)} = \zeta_n^{-2} + \zeta_n^{2} = \alpha_2 \\
  \sigma_{n-3}(\zeta_n + \zeta_n\inv) &= \zeta_n^{n-3} + \zeta_n^{-(n-3)} = \zeta_n^{-3} + \zeta_n^{3} = \alpha_3
  ,\]
  where we've used that $\zeta^{k} = \zeta^{k\mod n}$.
  From this, we see that $\sigma_{k}(\alpha_1)=\sigma_{n-k}(\alpha_1)$ and we pick up $(n-1)/2$ distinct conjugates.

- For $n$ not prime, the exact same argument runs through $\phi(n)$ values of $k$ for $\sigma_k$, and again yields $\sigma_{k}(\alpha_1) = \sigma_{\phi(n) - k}(\alpha_1)$.
  Matching them up appropriately yields $\phi(n)/2$ distinct roots.

a.
Show that if $L/K$ is cyclic and $E/K$ is normal with $L/E/K$ then $L/E$ and $E/K$ are cyclic.

b.
Show that if $L/K$ is cyclic then there exists exactly one extension $E/K$ of degree $n$ with $L/E/K$ for each divisor $n$ of $[L:K]$.

:::{.solution}
The setup:

\begin{tikzcd}
	L &&&& 1 \\
	\\
	E &&&& {H\da \Gal(L/E)\hspace{4em} } \\
	\\
	K &&&& {G\da \Gal(L/K) = C_n}
	\arrow[from=1-5, to=3-5]
	\arrow["n", from=3-5, to=5-5]
	\arrow["n"', from=5-1, to=3-1]
	\arrow["g", from=3-1, to=1-1]
	\arrow["g", curve={height=-30pt}, from=5-1, to=1-1]
	\arrow[curve={height=-30pt}, from=1-5, to=5-5]
\end{tikzcd}

> [Link to Diagram](https://q.uiver.app/?q=WzAsNixbMCwwLCJMIl0sWzAsMiwiRSJdLFswLDQsIksiXSxbNCwwLCIxIl0sWzQsMiwiSFxcZGEgXFxHYWwoTC9FKSJdLFs0LDQsIkdcXGRhIFxcR2FsKEwvSykgPSBDX24iXSxbMyw0XSxbNCw1LCJuIl0sWzIsMSwibiIsMl0sWzEsMCwiZyJdLFsyLDAsImciLDAseyJjdXJ2ZSI6LTV9XSxbMyw1LCIiLDIseyJjdXJ2ZSI6LTV9XV0=)

Part 1:

- $L/K$ is cyclic means $L/K$ is Galois and $G\da \Gal(L/K) = C_n$ for some $n$.
- By the FTGT, setting $H \da \Gal(L/E)$, we get $H \normal G$ precisely because $E/K$ is normal, and $\Gal(L/E) = G/H$.
- But then if $G$ is cyclic, $H \leq G$ must be cyclic, and $G/H$ is cyclic as well since writing $G = C_n = \gens{x}$, we have $G/H = \gens{xH}$.

Part 2:

- Letting $G\da\Gal(L/K) = C_n$, by elementary group theory we have subgroups $H\da C_d \leq C_n$ for every $d$ dividing $n$.
  - A observation we'll need: every subgroup is normal here since $G$ is abelian.
- By the fundamental theorem, taking the fixed field of $H \leq \Gal(L/K)$, we obtain some intermediate extension $E\da K^H$ fitting into a tower $L/E/K$.
- By the fundamental theorem, $[E: K] = [G:H] = n/d$, where we've used that $H\normal G$.
- Letting $d$ range through divisors lets $n/d$ range through divisors, so we get extensions of every degree $d$ dividing $n$.
:::

### Fall 2019 Midterm #8  $\work$
Let $k$ be a field of characteristic $p\neq 0$ and $f\in k[x]$ irreducible.
Show that $f(x) = g(x^{p^d})$ where $g(x) \in k[x]$ is irreducible and separable.

Conclude that every root of $f$ has the same multiplicity $p^d$ in the splitting field of $f$ over $k$.

### Fall 2019 Midterm #7  $\work$
Show that a field $k$ of characteristic $p\neq 0$ is perfect $\iff$ for every $x\in k$ there exists a $y\in k$ such that $y^p=x$.

### Spring 2012 #4 $\work$
Let $f(x) = x^7 - 3\in \QQ[x]$ and $E/\QQ$ be a splitting field of $f$ with $\alpha \in E$ a root of $f$.

a.
Show that $E$ contains a primitive 7th root of unity.

b.
Show that $E\neq \QQ(\alpha)$.

### Fall 2013 #5 $\done$
Let $L/K$ be a finite extension of fields.

a.
Define what it means for $L/K$ to be *separable*.

b.
Show that if $K$ is a finite field, then $L/K$ is always separable.

c.
Give an example of a finite extension $L/K$ that is not separable.

:::{.solution}
\envlist

- $L/k$ is **separable** iff every element $\alpha$ is separable, i.e. the minimal polynomial $m(x)$ of $\alpha$ is a separable polynomial, i.e. $m(x)$ has no repeated roots in (say) the algebraic closure of $L$ (or just any splitting field of $m$).

- If $\ch k = p$, suppose toward a contradiction that $L/k$ is not separable.
  Then there is some $\alpha$ with an inseparable (and irreducible) minimal polynomial $f(x)\in k[x]$.
- Claim: since $f$ is inseparable and irreducible, $f(x) = g(x^p)$ for some $g\in k[x]$.
  - Note: write $g(x) \da \sum a_k x^k$, so that $f(x) = \sum a_k (x^p)^k = \sum a_k x^{pk}$.
- This is a contradiction, since it makes $f$ reducible by using the "Freshman's dream":
\[
f(x) = \sum a_k x^{pk} = \qty{ \sum a_k^{1\over p} x^k}^p \da (h(x))^p
.\]

- Proof of claim: in $\ch k = p, f$ inseparable $\implies f(x) = g(x^p)$.
  - Use that $f$ is inseparable iff $\gcd(f, f') \neq 1$, and since $f$ is irreducible this forces $f' \equiv 0$, so $ka_k = 0$ for all $k$.
  - Then $a_k\neq 0$ forces $p\divides k$, so $f(x) = a_0 + a_px^p + a_{2p}x^{2p} + \cdots$ and one takes $g(x) \da \sum a_{kp}x^{kp}$.

- A finite inseparable extension:
  - It's a theorem that finite extensions of perfect fields are separable, so one needs a non-perfect field.
  - Take $L/k \da \FF_p(t^{1\over p}) / \FF_p(t)$, which is a degree $p$ extension (although both fields are infinite are characteristic $p$).
  - Then the minimal polynomial of $t$ is $f(x) \da x^p - t \in \FF_p(t)[x]$, where $f'(x) = px^p \equiv 0$
    Alternatively, just note that $f$ factors as $f(x) = (x-t^{1\over p})^p$ in $L[x]$, which has multiple roots.
:::

### Fall 2012 #4 $\work$
Let $f(x) \in \QQ[x]$ be a polynomial and $K$ be a splitting field of $f$ over $\QQ$.
Assume that $[K:\QQ] = 1225$ and show that $f(x)$ is solvable by radicals.

## Galois Groups: Concrete Computations

### Exercise: $G(x^2-2)$

:::{.exercise title="?"}
Compute the Galois group of $x^2-2$.
:::

:::{.solution}
$\ZZ/2\ZZ$?
:::

### Exercise: $G(x^p-2)$

:::{.exercise title="?"}
Let $p \in \mathbb{Z}$ be a prime number.
Then describe the elements of the Galois group of the polynomial $x^{p}-2$.
:::

:::{.solution}
$\QQ(2^{1\over p}, \zeta_p)$, which has degree $p(p-1)$ and is generated by the maps
\[
\sqrt[p]{2} & \mapsto \sqrt[p]{2} \zeta^{a} \\
\zeta & \mapsto \zeta^{b}
.\]

:::

### Fall 2020 #3 $\work$

a. Define what it means for a finite extension of fields $E$ over $F$ to be a *Galois* extension.

b. Determine the Galois group of $f(x) = x^3 - 7$ over $\QQ$, and justify your answer carefully.

c. Find all subfields of the splitting field of $f(x)$ over $\QQ$.

:::{.solution}
Part a:

- A finite extension $E/F$ is **Galois** if it is normal and separable:
  - Normal: every $f\in F[x]$ either has no roots in $E$ or all roots in $E$.
  - Separable: every element $e\in E$ has a separable minimal polynomial $m(x)$, i.e. $m$ has no repeated roots.

Part b:

- Note $f$ is irreducible by Eisenstein with $p=7$, and since $\QQ$ is perfect, irreducible implies separable.
- Writing $L \da \SF(f)/\QQ$, this is a Galois extension:
  - $L$ is separable: it is a finite extension of a perfect field, which is automatically separable.
  - $L$ is normal: $L$ is the splitting field of a separable polynomial, and thus normal.
- Since $f$ is degree 3, we have $G\da \Gal(L/k) \leq S_3$, and since $G$ is a transitive subgroup the only possibilities are
\[
G = S_3 \cong D_3, A_3 \cong C_3
.\]

- Factor $x^3 - 7 = (x-\omega)(x-\zeta_3\omega)(x-\zeta_3^2\omega)$ where $\omega \da 7^{1\over 3}$ and $\zeta_3$ is a primitive 3rd root of unity.
  Then $L = \QQ(\zeta_3, \omega)$.
  - Aside: label the roots in this order, so $r_1 = \omega, r_2 = \zeta_3\omega, r_3 = \zeta_3^2\omega$.

- Write $\min_{\omega, \QQ}(x) = x^3 - 7$ and let $L_0/\QQ \da \QQ(\omega)/\QQ$ yields $[L_0: \QQ] = 3$.
- Write $\min_{\zeta_3, \QQ}(x) = (x^3-1)/(x-1) = x^2 + x + 1$, and note that this is still the minimal polynomial over $L_0$ since $L_0 \subseteq \RR$ and $\zeta_3 \in \CC\sm\RR$.
  So $[L:L_0] = 2$.

- Counting in towers,
\[
[L:\QQ] = [L:L_0][L_0: \QQ] = (2)(3) = 6
.\]
- But $\# S_3 = 6$ and $\# A_3 = 3$, so $G = S_3$.

- Explicitly, since we can write $\SF(f) = \QQ(\omega, \zeta_3)$, we can find explicit generators:
\[
\sigma:
&\begin{cases}
\omega &\mapsto \omega
\\
\zeta_3 &\mapsto \zeta_3\cdot \zeta_3.
\end{cases}
&&
\implies \sigma \sim (1,2,3) \\
\tau:
&\begin{cases}
\omega &\mapsto \omega
\\
\zeta_3 &\mapsto \bar{\zeta_3}.
\end{cases}
&&
\implies \tau \sim (2, 3)
.\]
  So $G = \gens{\sigma, \tau \st \sigma^3, \tau^2}$.

Part c:

- Note that the subgroup lattice for $S_3$ looks like the following:

![](figures/2021-08-14_18-00-51.png)

- Note that we can identify
  - $\tau = (2,3)$ which fixes $r_1$
  - $\sigma \tau = (1,2)$ which fixes $r_3$
  - $\sigma^2\tau = (1, 3)$ which fixes $r_2$
  - $\sigma = (1,2,3)$, for which we need to calculate the fixed field.
  Using that $\sigma(\omega) =\zeta\omega$ and $\sigma(\zeta)=\zeta$,
  supposing $\sigma(\alpha) = \alpha$ we have
  \[
  \sigma(\alpha) &\da \sigma(a + b\zeta_3 + c\zeta_3^2 + d\omega + e\zeta_3\omega + f\zeta_3^2\omega) \\
  &= a + b\zeta_3 + c\zeta_3^2 + d\zeta_3\omega + e\zeta_3^2\omega + f\omega \\
  \implies \alpha &= a + b\zeta_3 + c\zeta_3^2 + t_1(\omega + \zeta_3\omega + \zeta_3^2\omega) \\
  \implies \alpha &= a + b\zeta_3 + c\zeta_3^2 + t_1\omega (1 + \zeta_3+ \zeta_3^2) \\
  \implies \alpha &= a + b\zeta_3 + c\zeta_3^2
  ,\]
  using the general fact that $\sum_{k=0}^{n-1}\zeta_n^k = 0$.
  So the fixed field is $\QQ(1, \zeta, \zeta^2) = \QQ(\zeta)$.

- We thus get the following lattice correspondence:

\begin{tikzcd}
	&& {\QQ(\zeta_3,\omega)} \\
	\\
	{\QQ(\omega) = \QQ(r_1)} & {\QQ(\zeta_3\omega) = \QQ(r_2)} & {\QQ(\zeta_3^2\omega) = \QQ(r_3)} && {\QQ(\zeta_3)} \\
	\\
	&& \QQ \\
	&& 1 \\
	\\
	{\gens{(2,3) = \tau} \cong C_2} & {\gens{(1,3) = \sigma^2\tau} \cong C_2} & {\gens{(1,2) = \sigma\tau} \cong C_2} && {\gens{(1,2,3) = \sigma} \cong C_3} \\
	\\
	&& {\gens{\sigma, \tau}\cong S_3}
	\arrow["3"{description}, from=5-3, to=3-1]
	\arrow["3"{description}, from=5-3, to=3-3]
	\arrow["2"{description}, from=3-1, to=1-3]
	\arrow["2"{description}, from=3-2, to=1-3]
	\arrow["2"{description}, from=3-3, to=1-3]
	\arrow["2"{description}, from=5-3, to=3-5]
	\arrow["3"{description}, from=3-5, to=1-3]
	\arrow["3"{description}, from=5-3, to=3-2]
	\arrow["2"{description}, from=6-3, to=8-1]
	\arrow["3"{description}, from=8-1, to=10-3]
	\arrow["3"{description}, from=8-3, to=10-3]
	\arrow["2"{description}, from=6-3, to=8-3]
	\arrow["3"{description}, from=6-3, to=8-5]
	\arrow["2"{description}, from=8-5, to=10-3]
	\arrow["3"{description}, from=8-2, to=10-3]
	\arrow["2"{description}, from=6-3, to=8-2]
\end{tikzcd}

> [Link to Diagram](https://q.uiver.app/?q=WzAsMTIsWzIsMCwiXFxRUShcXHpldGFfMyxcXG9tZWdhKSJdLFswLDIsIlxcUVEoXFxvbWVnYSkgPSBcXFFRKHJfMSkiXSxbMiwyLCJcXFFRKFxcemV0YV8zXjJcXG9tZWdhKSA9IFxcUVEocl8zKSJdLFsyLDQsIlxcUVEiXSxbMSwyLCJcXFFRKFxcemV0YV8zXFxvbWVnYSkgPSBcXFFRKHJfMikiXSxbNCwyLCJcXFFRKFxcemV0YV8zKSJdLFswLDcsIlxcZ2Vuc3soMiwzKSA9IFxcdGF1fSBcXGNvbmcgQ18yIl0sWzIsOSwiXFxnZW5ze1xcc2lnbWEsIFxcdGF1fVxcY29uZyBTXzMiXSxbMiw1LCIxIl0sWzIsNywiXFxnZW5zeygxLDIpID0gXFxzaWdtYVxcdGF1fSBcXGNvbmcgQ18yIl0sWzQsNywiXFxnZW5zeygxLDIsMykgPSBcXHNpZ21hfSBcXGNvbmcgQ18zIl0sWzEsNywiXFxnZW5zeygxLDMpID0gXFxzaWdtYV4yXFx0YXV9IFxcY29uZyBDXzIiXSxbMywxLCIzIiwxXSxbMywyLCIzIiwxXSxbMSwwLCIyIiwxXSxbNCwwLCIyIiwxXSxbMiwwLCIyIiwxXSxbMyw1LCIyIiwxXSxbNSwwLCIzIiwxXSxbMyw0LCIzIiwxXSxbOCw2LCIyIiwxXSxbNiw3LCIzIiwxXSxbOSw3LCIzIiwxXSxbOCw5LCIyIiwxXSxbOCwxMCwiMyIsMV0sWzEwLDcsIjIiLDFdLFsxMSw3LCIzIiwxXSxbOCwxMSwiMiIsMV1d)

:::

### Spring 2021 #4 $\work$

Define
\[
f(x) \da x^4 + 4x^2 + 64 \in \QQ[x]
.\]

a. Find the splitting field $K$ of $f$ over $\QQ$.

b. Find the Galois group $G$ of $f$.

c. Exhibit explicitly the correspondence between subgroups of $G$ and intermediate fields between $\QQ$ and $K$.

:::{.concept}
\envlist

- Useful trick: given $a + \sqrt{b}$, try to rewrite this as $(\sqrt{c} + \sqrt{d})^2$ for some $c, d$ to get a better basis for $\SF(f)$.
:::

:::{.solution}
\envlist

- First consider $g(z) \da z^2 + 4z + 64$.
  Applying the quadratic formula yields
  \[
  z = {-4 \pm \sqrt{16 - 64} \over 2} = -2 \pm {1\over 2}\sqrt{ -15 \cdot 16 } = -2 \pm 2i \sqrt{15}
  .\]
- Substituting $z=x^2$ yields the splitting field of $f$ as $L\da \QQ(\pm \sqrt{ -2 \pm 2i\sqrt{15}})$.

  - Note that this factorization shows that $f$ is irreducible over $\QQ$, since the two quadratic factors have irrational coefficients and none of the roots are real.
  - Irreducible implies separable over a perfect field, so $L/\QQ$ is a separable extension.
  - $L$ is the splitting field of a separable polynomial and thus normal, making $L$ Galois.

- In this form, it's not clear what the degree $[L:\QQ]$ is, so we can find a better basis by rewriting the roots of $g$:
\[
z = -2 \pm 2i\sqrt{15} = \qty{\sqrt{5}}^2 - \qty{\sqrt 3}^2 \pm 2i\sqrt{5}\sqrt{3} = (\sqrt 5 \pm i\sqrt{3})^2
,\]
and so the roots of $f$ are $x = \pm \sqrt{5} \pm i\sqrt{3}$ and $L = \QQ(\sqrt 5, i\sqrt 3)$.

- Counting in towers,
\[
[L:\QQ] = [\QQ(\sqrt 5, i \sqrt{3} ) : \QQ \sqrt{5} ][\QQ \sqrt{5} : \QQ] = (2)(2) = 4
,\]
where we've used that $\min_{\sqrt 5, \QQ}(x) = x^2-5$ and $\min_{i\sqrt 3, \QQ}(x) = x^2 + 3$, which remains the minimal polynomial over $\QQ(\sqrt 5) \subseteq \RR$ since both roots are not real.

- So $G\da \Gal(L/\QQ) \leq S_4$ is a transitive subgroup of size 4, making it either $C_4$ or $C_2^2$.

- Label the roots:
\[
r_1 &= \sqrt 5 + i\sqrt 3 \\
r_2 &= \sqrt{5} - i \sqrt{3} \\
r_3 &= - \sqrt 5 + i\sqrt 3 = -r_2 \\
r_4 &= -\sqrt{5} - i\sqrt{3} = -r_1
.\]

- We can start writing down automorphisms:
\[
\sigma_1:
\begin{cases}
\sqrt 5 &\mapsto -\sqrt 5
\\
i\sqrt 3 &\mapsto i\sqrt 3 .
\end{cases}
&& \sigma_1 \sim (1,3)(2,4)
\\
\sigma_2
\begin{cases}
\sqrt 5 &\mapsto \sqrt 5
\\
i\sqrt 3 &\mapsto -i\sqrt 3 .
\end{cases}
&& \sigma_2 \sim (1, 2)(3, 4)
.\]
  Note that these define automorphisms because we've specified what happens to a basis and they send roots to other roots.

- Checking that $\sigma_1^2 = \sigma_2^2 = \id$, this produces two distinct order 2 elements, forcing $G \cong C_2^2$ since $C_4$ only has one order 2 element.
  Explicitly, we have
\[
C_2^2 \cong G = \gens{\tau_1, \tau_2} = \ts{\id, \tau_1, \tau_2, \tau_1 \tau_2} = \ts{\id, (1,3)(2,4), (1,2)(3,4),  (1,4)(2,3) }
,\]
  and the generic subgroup lattice looks like:

![](figures/2021-08-15_00-02-28.png)

- Computing some fixed fields.
  Write $i \sqrt{3} = x, \sqrt{5} = y$, then elements in the splitting field are of the form
  $\alpha = 1 + ax + by + cxy$.

  - For $\sigma_1$, we have $x\mapsto -x$, so
  \[
  \sigma_1(\alpha) = 1 - ax + by - cxy
  = \alpha \implies a=-a=0, c=-c=0
  ,\]
  so this preserves $1+by$, making the fixed field $\QQ(1, y) = \QQ(i \sqrt{3})$.

  - For $\sigma_2$, we have $y\mapsto -y$, so
  \[
  \sigma_2(\alpha) = 1 +ax -by -cxy = \alpha \implies b=-b=0,c=-c=0
  ,\]
  preserving $1 + ax$ and making the fixed field $\QQ(1, x) = \QQ(\sqrt 5)$.

  - For $\sigma_1 \sigma_2$, we have $x\mapsto -x$ and $y\mapsto -y$, so
  \[
  \sigma_1\sigma_2(\alpha) = 1 -ax -by +cxy = \alpha \implies a=-a=-, b=-b=0
  ,\]
  preserving $1 + cxy$ and yielding $\QQ(xy) = \QQ(i\sqrt 3 \sqrt 5)$.

- So the lattice correspondence we get here is

\begin{tikzcd}
	&& {\QQ(\sqrt{5}, i\sqrt{3})} \\
	\\
	{\QQ(i \sqrt 3)} && {\QQ(i\sqrt{3}\sqrt{5})} && {\QQ(\sqrt 5)} \\
	\\
	&& \QQ \\
	&& 1 \\
	{} &&&& {} \\
	{\gens{\sigma_1}} && {\gens{\sigma_1\sigma_2}} && {\gens{\sigma_2}} \\
	\\
	&& {G = \gens{\tau_1, \tau_2}}
	\arrow["2"{description}, from=5-3, to=3-1]
	\arrow["2"{description}, from=5-3, to=3-3]
	\arrow["2"{description}, from=5-3, to=3-5]
	\arrow["2"{description}, from=3-3, to=1-3]
	\arrow["2"{description}, from=3-1, to=1-3]
	\arrow["2"{description}, from=3-5, to=1-3]
	\arrow["2"{description}, from=6-3, to=8-1]
	\arrow["2"{description}, from=6-3, to=8-3]
	\arrow["2"{description}, from=6-3, to=8-5]
	\arrow["2"{description}, from=8-1, to=10-3]
	\arrow["2"{description}, from=8-3, to=10-3]
	\arrow["2"{description}, from=8-5, to=10-3]
\end{tikzcd}

> [Link to Diagram](https://q.uiver.app/?q=WzAsMTIsWzIsMCwiXFxRUShcXHNxcnR7NX0sIGlcXHNxcnR7M30pIl0sWzAsMiwiXFxRUShpIFxcc3FydCAzKSJdLFsyLDIsIlxcUVEoaVxcc3FydHszfVxcc3FydHs1fSkiXSxbNCwyLCJcXFFRKFxcc3FydCA1KSJdLFsyLDQsIlxcUVEiXSxbMiw1LCIxIl0sWzAsNl0sWzQsNl0sWzIsNywiXFxnZW5ze1xcc2lnbWFfMVxcc2lnbWFfMn0iXSxbMCw3LCJcXGdlbnN7XFxzaWdtYV8xfSJdLFs0LDcsIlxcZ2Vuc3tcXHNpZ21hXzJ9Il0sWzIsOSwiRyA9IFxcZ2Vuc3tcXHRhdV8xLCBcXHRhdV8yfSJdLFs0LDEsIjIiLDFdLFs0LDIsIjIiLDFdLFs0LDMsIjIiLDFdLFsyLDAsIjIiLDFdLFsxLDAsIjIiLDFdLFszLDAsIjIiLDFdLFs1LDksIjIiLDFdLFs1LDgsIjIiLDFdLFs1LDEwLCIyIiwxXSxbOSwxMSwiMiIsMV0sWzgsMTEsIjIiLDFdLFsxMCwxMSwiMiIsMV1d)

:::

### Fall 2019 Midterm #6  $\work$
Compute the Galois group of $f(x) = x^3-3x -3\in \QQ[x]/\QQ$.

### Spring 2018 #2 $\done$
Let $f(x) = x^4 - 4x^2 + 2 \in \QQ[x]$.

a.
Find the splitting field $K$ of $f$, and compute $[K: \QQ]$.

b.
Find the Galois group $G$ of $f$, both as an explicit group of automorphisms, and as a familiar abstract group to which it is isomorphic.

c.
Exhibit explicitly the correspondence between subgroups of $G$ and intermediate fields between $\QQ$ and $k$.

\todo[inline]{Not the nicest proof! Would be better to replace the ad-hoc computations at the end.}

:::{.solution}
\envlist

:::{.proof title="of a"}
Note that $g(x) = x^2 - 4x + 2$ has roots $\beta = 2 \pm \sqrt{2}$, and so $f$ has roots
\[
\alpha_1 &= \sqrt{2 + \sqrt 2} \\
\alpha_2 &= \sqrt{2 - \sqrt 2} \\
\alpha_3 &= -\alpha_1 \\
\alpha_4 &= -\alpha_2
.\]

and splitting field $K = \QQ(\theset{\alpha_i})$.

:::

:::{.proof title="of b"}
$K$ is the splitting field of a separable polynomial and thus Galois over $\QQ$.
Moreover, Since $f$ is irreducible by Eisenstein with $p=2$, the Galois group is a transitive subgroup of $S^4$, so the possibilities are:

- $S_4$
- $A_4$
- $D_4$
- $\ZZ/(2) \cross \ZZ/(2)$
- $\ZZ/(4)$

We can note that $g$ splits over $L \definedas \QQ(\sqrt 2)$, an extension of degree 2.

We can now note that $\min(\alpha, L)$ is given by $p(x) = x^2 - (2 + \sqrt 2)$, and so $[K: L] = 2$.

We then have
\[
[K: \QQ] = [K: L] [L : \QQ] = (2)(2) = 4
.\]

This $\abs{\Gal(K/\QQ)} = 4$, which leaves only two possibilities:

- $\ZZ/(2) \cross \ZZ/(2)$
- $\ZZ/(4)$

We can next check orders of elements.
Take
\[
\sigma &\in \Gal(K/\QQ) \\
\alpha_1 &\mapsto \alpha_2
.\]

Computations show that

- $\alpha_1^2 \alpha_2^2 = 2$, so $\alpha_1 \alpha_2 = \sqrt 2$
- $\alpha_1^2 = 2 + \sqrt 2 \implies \sqrt 2 = \alpha_1^2 - 2$

and thus
\[
\sigma^2(\alpha_1)
&= \sigma(\alpha_2) \\
&= \sigma\left(\frac{\sqrt 2}{\alpha_1}\right) \\
&= \frac{\sigma(\sqrt 2)}{\sigma(\alpha_1)} \\
&= \frac{\sigma(\alpha_1^2 - 2)}{\alpha_2} \\
&= \frac{\alpha_2^2 - 2}{\alpha_2} \\
&= \alpha_2 -2\alpha_2\inv \\
&= \alpha_2 - \frac{2\alpha_1}{\sqrt 2} \\
&= \alpha_2 -\alpha_1 \sqrt 2 \\
&\neq \alpha_1
,\]

and so the order of $\sigma$ is strictly greater than 2, and thus 4, and thus $\Gal(K/\QQ) = \theset{\sigma^k \suchthat 1\leq k \leq 4} \cong \ZZ/(4)$.

:::

:::{.proof title="of c"}
?? The subgroup of index 2 $\generators{\sigma^2}$ corresponds to the field extension $Q(\sqrt 2) / \QQ$.
:::

\todo[inline]{Finish (c)}

:::

### Spring 2020 #4 $\work$
Let $f(x) = x^4-2 \in \QQ[x]$.

a.
Define what it means for a finite extension field $E$ of a field $F$ to be a Galois extension.

b.
Determine the Galois group $\gal(E/\QQ)$ for the polynomial $f(x)$, and justify your answer carefully.

c.
Exhibit a subfield $K$ in $(b)$ such that $\QQ \leq K \leq E$ with $K$ not a Galois extension over $\QQ$. Explain.

### Spring 2017 #8 $\work$

a.
Let $K$ denote the splitting field of $x^5 - 2$ over $\QQ$.
Show that the Galois group of $K/\QQ$ is isomorphic to the group of invertible matrices
\[
\left(\begin{array}{ll}
a & b \\
0 & 1
\end{array}\right)
\qtext{where} a\in \FF_5\units \text{ and } b\in \FF_5
.\]

b.
Determine all intermediate fields between $K$ and $\QQ$ which are Galois over $\QQ$.

### Fall 2016 #4 $\work$
Set $f(x) = x^3 - 5 \in \QQ[x]$.

a.
Find the splitting field $K$ of $f(x)$ over $\QQ$.

b.
Find the Galois group $G$ of $K$ over $\QQ$.

c.
Exhibit explicitly the correspondence between subgroups of $G$ and intermediate fields between $\QQ$ and $K$.

### Spring 2016 #2 $\work$
Let $K = \QQ[\sqrt 2 + \sqrt 5]$.

a.
Find $[K: \QQ]$.

b.
Show that $K/\QQ$ is Galois, and find the Galois group $G$ of $K/\QQ$.

c.
Exhibit explicitly the correspondence between subgroups of $G$ and intermediate fields between $\QQ$ and $K$.

### Fall 2015 #5 $\work$
Let $u = \sqrt{2 + \sqrt{2}}$, $v = \sqrt{2 - \sqrt{2}}$, and $E = \QQ(u)$.

a.
Find (with justification) the minimal polynomial $f(x)$ of $u$ over $\QQ$.

b.
Show $v\in E$, and show that $E$ is a splitting field of $f(x)$ over $\QQ$.

c.
Determine the Galois group of $E$ over $\QQ$ and determine all of the intermediate fields $F$ such that $\QQ \subset F \subset E$.

### Spring 2015 #5 $\work$
Let $f(x) = x^4 - 5 \in \QQ[x]$.

a.
Compute the Galois group of $f$ over $\QQ$.

b.
Compute the Galois group of $f$ over $\QQ(\sqrt{5})$.

### Fall 2014 #3 $\work$
Consider the polynomial $f(x) = x^4 - 7 \in \QQ[x]$ and let $E/\QQ$ be the splitting field of $f$.

a.
What is the structure of the Galois group of $E/\QQ$?

b.
Give an explicit description of all of the intermediate subfields $\QQ \subset K \subset E$ in the form $K = \QQ(\alpha), \QQ(\alpha, \beta), \cdots$ where $\alpha, \beta$, etc are complex numbers.
Describe the corresponding subgroups of the Galois group.

### Fall 2013 #6 $\work$
Let $K$ be the splitting field of $x^4-2$ over $\QQ$ and set $G = \gal(K/\QQ)$.

a.
Show that $K/\QQ$ contains both $\QQ(i)$ and $\QQ(\sqrt[4]{2})$ and has degree 8 over $\QQ$/

b.
Let $N = \gal(K/\QQ(i))$ and $H = \gal(K/\QQ(\sqrt[4]{2}))$.
Show that $N$ is normal in $G$ and $NH = G$.

  > Hint: what field is fixed by $NH$?

c.
Show that $\gal(K/\QQ)$ is generated by elements $\sigma, \tau$, of orders 4 and 2 respectively, with $\tau \sigma\tau\inv = \sigma\inv$.

  > Equivalently, show it is the dihedral group of order 8.

d.
How many distinct quartic subfields of $K$ are there?
Justify your answer.

### Spring 2014 #4 $\work$
Let $E\subset \CC$ denote the splitting field over $\QQ$ of the polynomial $x^3 - 11$.

a.
Prove that if $n$ is a squarefree positive integer, then $\sqrt{n}\not\in E$.

  > Hint: you can describe all quadratic extensions of $\QQ$ contained in $E$.

b.
Find the Galois group of $(x^3 - 11)(x^2 - 2)$ over $\QQ$.

c.
Prove that the minimal polynomial of $11^{1/3} + 2^{1/2}$ over $\QQ$ has degree 6.

### Spring 2013 #8 $\work$
Let $F$ be the field with 2 elements and $K$ a splitting field of $f(x) = x^6 + x^3 + 1$ over $F$.
You may assume that $f$ is irreducible over $F$.

a.
Show that if $r$ is a root of $f$ in $K$, then $r^9 = 1$ but $r^3\neq 1$.

b.
Find $\gal(K/F)$ and express each intermediate field between $F$ and $K$ as $F(\beta)$ for an appropriate $\beta \in K$.

## Galois Groups: Indirect Computations / Facts

### Fall 2019 #7 $\done$
Let $\zeta_n$ denote a primitive $n$th root of 1 $\in \QQ$.
You may assume the roots of the minimal polynomial $p_n(x)$ of $\zeta_n$ are exactly the primitive $n$th roots of 1.

Show that the field extension $\QQ(\zeta_n )$ over $\QQ$ is Galois and prove its Galois group is $(\ZZ/n\ZZ)\units$.

How many subfields are there of $\QQ(\zeta_{20} )$?

:::{.concept}
\envlist

- **Galois** = normal + separable.

- **Separable**: Minimal polynomial of every element has distinct roots.

- **Normal (if separable)**: Splitting field of an irreducible polynomial.

- $\zeta$ is a primitive root of unity $\iff o(\zeta) = n$ in $\FF\units$.

- $\phi(p^k) = p^{k-1}(p-1)$

- The lattice:

  ![image_2021-04-17-02-44-48](figures/image_2021-04-17-02-44-48.png)

:::

:::{.solution}
\envlist

Let $K = \QQ(\zeta)$.
Then $K$ is the splitting field of $f(x) = x^n - 1$, which is irreducible over $\QQ$, so $K/\QQ$ is normal.
We also have $f'(x) = nx^{n-1}$ and $\gcd(f, f') = 1$ since they can not share any roots.

> Or equivalently, $f$ splits into distinct linear factors $f(x) = \prod_{k\leq n}(x-\zeta^k)$.

Since it is a Galois extension, $\abs{\Gal(K/\QQ)} = [K: \QQ] = \phi(n)$ for the totient function.

We can now define maps
\[
\tau_j: K &\to K \\
\zeta &\mapsto \zeta^j
\]
and if we restrict to $j$ such that $\gcd(n, j) = 1$, this yields $\phi(n)$ maps.
Noting that if $\zeta$ is a primitive root, then $(n, j) = 1$ implies that that $\zeta^j$ is also a primitive root, and hence another root of $\min(\zeta, \QQ)$, and so these are in fact automorphisms of $K$ that fix $\QQ$ and thus elements of $\Gal(K/\QQ)$.

So define a map
\[
\theta: \ZZ_n\units &\to K \\
[j]_n &\mapsto \tau_j
.\]

from the *multiplicative* group of units to the Galois group.

The claim is that this is a surjective homomorphism, and since both groups are the same size, an isomorphism.

:::{.proof title="of surjectivity"}
Letting $\sigma \in K$ be arbitrary, noting that $[K: \QQ]$ has a basis $\theset{1, \zeta, \zeta^2, \cdots, \zeta^{n-1}}$, it suffices to specify $\sigma(\zeta)$ to fully determine the automorphism.
(Since $\sigma(\zeta^k) = \sigma(\zeta)^k$.)

In particular, $\sigma(\zeta)$ satisfies the polynomial $x^n - 1$, since $\sigma(\zeta)^n = \sigma(\zeta^n) = \sigma(1) = 1$, which means $\sigma(\zeta)$ is another root of unity and $\sigma(\zeta) = \zeta^k$ for some $1\leq k \leq n$.

Moreover, since $o(\zeta) = n \in K\units$, we must have $o(\zeta^k) = n \in K\units$ as well. Noting that $\theset{\zeta^i}$ forms a cyclic subgroup $H\leq K\units$, then $o(\zeta^k) = n \iff (n, k) = 1$ (by general theory of cyclic groups).

Thus $\theta$ is surjective.

:::

:::{.proof title="of being a homomorphism"}
\[
\tau_j \circ \tau_k (\zeta) =\tau_j(\zeta^k) = \zeta^{jk} \implies
\tau_{jk} = \theta(jk) = \tau_j \circ \tau_k
.\]

:::

:::{.proof title="of part 2"}
We have $K \cong \ZZ_{20}\units$ and $\phi(20) = 8$, so $K \cong \ZZ_8$, so we have the following subgroups and corresponding intermediate fields:

- $0 \sim \QQ(\zeta_{20})$
- $\ZZ_2 \sim \QQ(\omega_1)$
- $\ZZ_4 \sim \QQ(\omega_2)$
- $\ZZ_8 \sim \QQ$

For some elements $\omega_i$ which exist by the primitive element theorem.
:::

:::

### Fall 2018 #3 $\done$
Let $F \subset K \subset L$ be finite degree field extensions.
For each of the following assertions, give a proof or a counterexample.

a.
If $L/F$ is Galois, then so is $K/F$.

b.
If $L/F$ is Galois, then so is $L/K$.

c.
If $K/F$ and $L/K$ are both Galois, then so is $L/F$.

:::{.concept}
\envlist

- Every quadratic extension over $\QQ$ is Galois.
:::

:::{.solution}
Let $L/K/F$.

:::{.proof title="of a"}
**False**:
Take $L/K/F = \QQ(\zeta_2, \sqrt[3] 2) \to \QQ(\sqrt[3] 2) \to \QQ$.

Then $L/F$ is Galois, since it is the splitting field of $x^3 - 2$ and $\QQ$ has characteristic zero.

But $K/F$ is not Galois, since it is not the splitting field of any irreducible polynomial.
:::

:::{.proof title="of b"}
**True**:
If $L/F$ is Galois, then $L/K$ is normal and separable:

- $L/K$ is normal, since if $\sigma: L \injects \overline K$ lifts the identity on $K$ and fixes $L$, i-t also lifts the identity on $F$ and fixes $L$ (and $\overline K = \overline F$).

- $L/K$ is separable, since $F[x] \subseteq K[x]$, and so if $\alpha \in L$ where $f(x) \definedas \min(\alpha, F)$ has no repeated factors, then $f'(x) \definedas \min(\alpha, K)$ divides $f$ and thus can not have repeated factors.

:::

:::{.proof title="of c"}
**False**:
Use the fact that every quadratic extension is Galois, and take $L/K/F = \QQ(\sqrt[4] 2) \to \QQ(\sqrt 2) \to \QQ$.

Then each successive extension is quadratic (thus Galois) but $\QQ(\sqrt[4] 2)$ is not the splitting field of any polynomial (noting that it does not split $x^4 - 2$ completely.)

:::

:::

### Spring 2018 #3 $\done$
Let $K$ be a Galois extension of $\QQ$ with Galois group $G$, and let $E_1 , E_2$ be intermediate fields of $K$ which are the splitting fields of irreducible $f_i (x) \in \QQ[x]$.

Let $E = E_1 E_2 \subset K$.

Let $H_i = \Gal(K/E_i)$ and $H = \Gal(K/E)$.

a.
Show that $H = H_1 \cap H_2$.

b.
Show that $H_1 H_2$ is a subgroup of $G$.

c.
Show that
$$
\Gal(K/(E_1 \cap E_2 )) = H_1 H_2
.$$

:::{.concept}
\envlist

- The Galois correspondence:
  - $H_1 \intersect H_2 \mapstofrom E_1 E_2$,
  - $H_1 H_2 \mapstofrom E_1 \intersect E_2$.
:::

:::{.solution}
\envlist

:::{.proof title="of a"}
By the Galois correspondence, it suffices to show that the fixed field of $H_1 \intersect H_2$ is $E_1 E_2$.

Let $\sigma \in H_1 \intersect H_2$; then $\sigma \in \Aut(K)$ fixes both $E_1$ and $E_2$.

> Not sure if this works -- compositum is not literally product..?

Writing $x \in E_1E_2$ as $x=e_1 e_2$, we have
$$
\sigma(x) = \sigma(e_1 e_2) = \sigma(e_1) \sigma(e_2) = e_1 e_2  =x,
$$

so $\sigma$ fixes $E_1 E_2$.

:::

:::{.proof title="of b"}
That $H_1 H_2 \subseteq G$ is clear, since if $\sigma = \tau_1 \tau_2 \in H_1 H_2$, then each $\tau_i$ is an automorphism of $K$ that fixes $E_i \supseteq \QQ$, so each $\tau_i$ fixes $\QQ$ and thus $\sigma$ fixes $\QQ$.

:::{.claim}
All elements in this subset commute.
:::

:::{.proof title="of claim"}
\envlist

- Let $\sigma = \sigma_1 \sigma_2 \in H_1 H_2$.

- Note that $\sigma_1(e) = e$ for all $e\in E_1$ by definition, since $H_1$ fixes $E_1$, and $\sigma_2(e) \in E_1$ (?).

- Then
  \[
  \sigma_1(e) = e \quad \forall e \in E_1 \implies \sigma_1(\sigma_2(e)) = \sigma_2(e)
  \]
  and substituting $e = \sigma_1(e)$ on the RHS yields
  \[
  \sigma_1 \sigma_2(e) = \sigma_2 \sigma_1(e)
  ,\]
  where a similar proof holds for $e\in E_2$ and thus for arbitrary $x\in E_1 E_2$.

:::

:::

:::{.proof title="of c"}
By the Galois correspondence, the subgroup $H_1H_2 \leq G$ will correspond to an intermediate field $E$ such that $K/E/\QQ$ and $E$ is the fixed field of $H_1 H_2$.

But if $\sigma \in H_1 H_2$, then $\sigma = \tau_1 \tau_2$ where $\tau_i$ is an automorphism of $K$ that fixes $E_i$, and so
\[
\sigma(x) = x \iff \tau_1\tau_2(x) = x
&\iff \tau_2(x) = x
\\
&~\&~
\\
\tau_1(x) = x &\iff x \in E_1 \intersect E_2
.\].

:::

:::

### Fall 2017 #4 $\work$

a.
Let $f (x)$ be an irreducible polynomial of degree 4 in $\QQ[x]$ whose splitting field $K$ over $\QQ$ has Galois group $G = S_4$.

  Let $\theta$ be a root of $f(x)$. Prove that $\QQ[\theta]$ is an extension of $\QQ$ of degree 4 and that there are no intermediate fields between $\QQ$ and $\QQ[\theta]$.

b.
Prove that if $K$ is a Galois extension of $\QQ$ of degree 4, then there is an intermediate subfield between $K$ and $\QQ$.

### Spring 2017 #7 $\work$
Let $F$ be a field and let $f(x) \in F[x]$.

a.
Define what a splitting field of $f(x)$ over $F$ is.

b.
Let $F$ now be a finite field with $q$ elements.
Let $E/F$ be a finite extension of degree $n>0$.
Exhibit an explicit polynomial $g(x) \in F[x]$ such that $E/F$ is a splitting field of $g(x)$ over $F$.
Fully justify your answer.

c.
Show that the extension $E/F$ in (b) is a Galois extension.

### Spring 2016 #6 $\work$
Let $K$ be a Galois extension of a field $F$ with $[K: F] = 2015$.
Prove that $K$ is an extension by radicals of the field $F$.

### Fall 2015 #6 $\work$

a.
Let $G$ be a finite group.
Show that there exists a field extension $K/F$ with $\gal(K/F) = G$.

  > You may assume that for any natural number $n$ there is a field extension with Galois group $S_n$.

b.
Let $K$ be a Galois extension of $F$ with $\abs{\gal(K/F)} = 12$.
Prove that there exists an intermediate field $E$ of $K/F$ with $[E: F] = 3$.

c.
With $K/F$ as in (b), does an intermediate field $L$ necessarily exist satisfying $[L: F] = 2$?
Give a proof or counterexample.

### Fall 2014 #1 $\work$
Let $f\in \QQ[x]$ be an irreducible polynomial and $L$ a finite Galois extension of $\QQ$.
Let $f(x) = g_1(x)g_2(x)\cdots g_r(x)$ be a factorization of $f$ into irreducibles in $L[x]$.

a.
Prove that each of the factors $g_i(x)$ has the same degree.

b.
Give an example showing that if $L$ is not Galois over $\QQ$, the conclusion of part (a) need not hold.

### Spring 2013 #7 $\work$
Let $f(x) = g(x) h(x) \in \QQ[x]$ and $E,B,C/\QQ$ be the splitting fields of $f,g,h$ respectively.

a.
Prove that $\gal(E/B)$ and $\gal(E/C)$ are normal subgroups of $\gal(E/\QQ)$.

b.
Prove that $\gal(E/B) \intersect \gal(E/C) = \theset{1}$.

c.
If $B\intersect C = \QQ$, show that $\gal(E/B) \gal(E/C) = \gal(E/\QQ)$.

d.
Under the hypothesis of (c), show that $\gal(E/\QQ) \cong \gal(E/B) \times \gal(E/C)$.

e.
Use (d) to describe $\gal(\QQ[\alpha]/\QQ)$ where $\alpha = \sqrt 2 + \sqrt 3$.

### Fall 2012 #3 $\work$
Let $f(x) \in \QQ[x]$ be an irreducible polynomial of degree 5.
Assume that $f$ has all but two roots in $\RR$.
Compute the Galois group of $f(x)$ over $\QQ$ and justify your answer.

## $p$th Roots and $x^{p^k}-x$

### Spring 2021 #7 $\done$

Let $p$ be a prime number and let $F$ be a field of characteristic $p$.
Show that if $a\in F$ is not a $p$th power in $F$, then $x^p-a \in F[x]$ is irreducible.

:::{.strategy}
\envlist

- Contradiction: go to splitting field, apply Freshman's dream.
- Use that this polynomial is ramified, and its only factors are $(x-a)$.
:::

:::{.solution title="Likely the 'right' solution"}
\envlist

- Suppose $a$ is not a $p$th power in $F$, then $f(x) \da x^p-a$ has no roots in $F$.
- Toward a contradiction, suppose $f$ is reducible in $F[x]$.
- In $\SF(f)$, since $\ch F = p$ we have $f(x) = (x-\zeta)^p$ for some $\zeta = a^{1\over p}$.
  - So if $f$ is reducible in $F[x]$, we have $f(x) = p_1(x) p_2(x)$ where $p(x) = (x-\zeta)^q\in F[x]$ for some $1\leq q < p$, since these are the only factors of $f$.
  - The claim is that $\zeta\in F$ as well, which is a contradiction since $\zeta$ is a $p$th root of $a$.
- We have $x^q-\zeta^q \in F[x]$, so $\zeta^q\in F$.
- We know $a = \zeta^p\in F$, and thus $\zeta^{d} = \zeta\in F$ for $d \da \gcd(p, n) = 1$. $\contradiction$
  - Why this is true: write $d = \gcd(p, n)$ in $\ZZ$ to obtain $d = tp + sn$ for some $t, s$.
  - Then $\zeta^d = \zeta^{tp+sn} = (\zeta^p)^t \cdot (\zeta^n)^s \in F$.
:::

:::{.strategy title="for an alternative solution"}
\envlist

- By contrapositive, show that $f(x) \da x^p-a \in \FF[x]$ reducible $\implies a$ is a $p$th power in $\FF$.
- Eventually show $a^\ell = b^p$ for some $\ell\in \NN$ and some $b\in \FF$, then $\gcd(\ell, p) = 1$ forces $b=a$ and $\ell=p$.
- Use the fact that the constant term of any $g\in \FF[x]$ is actually in $\FF$.
:::

:::{.concept}
\envlist

- Reducible: $f\in \FF[x]$ is reducible iff there exists $g, h\in \FF[x]$ nonconstant with $f = g h$.
  - Importantly, this factorization needs to happen in $\FF[x]$, since we can *always* find such factorizations in the splitting field $\SF(f)[x]$.

- Bezout's identity: $\gcd(p, q) = d \implies$ there exist $s,t\in \ZZ$ such that
\[
sp + tq = d
.\]

:::

:::{.solution}
\envlist

- WTS: $f(x) \da x^p - a\in \FF[x]$ reducible $\implies f$ has a root in the *base field* $\FF$.
- Write $f(x) = g(x) h(x)$ and factor $f(x) = \prod_{i=1}^p (x- r_i) \in \SF(f)[x]$ where the $r_i$ are not necessarily distinct roots.
- WLOG, $g(x) = \prod_{i=1}^\ell (x-r_i)$ for some $1\leq \ell \leq p-1$, i.e. rearrange the factors so that $g$ is the first $\ell$ of them.
  - $\ell \neq 1, p$ since $f$ is reducible, making $g, h$ nonconstant.

- Set $R_\ell \da \prod_{i=1}^\ell r_i$, which is the constant term in $g$, so $R_\ell \in \FF$ since $g\in \FF[x]$.

- Each $r_i$ is a root of $f$, so $r_i^p - a = 0$ for all $i$, so $r_i^p = a$.

- Trick: what is the $p$th power of $R_\ell$?
\[
R_\ell^p
&\da \qty{ \prod_{i=1}^\ell}^p \\
&= \prod_{i=1}^\ell r_i^p \\
&= \prod_{i=1}^\ell a \\
&= a^\ell
,\]
  so $R_\ell^p = a^\ell$.

- Use Bezout: $\gcd(\ell, p) = 1$ since $p$ is prime, so write $tp + s\ell = 1$ for some $t,s\in \ZZ$

- Use this to build a root of $f$ that's in $\FF$: write
\[
a &= a^1\\
&= a^{tp + s\ell} \\
&= a^{tp} a^{s\ell} \\
&=a^{tp} (a^\ell)^s\\
&= a^{tp} (R_\ell^p)^s \\
&= (a^t R_\ell^s)^p \\
&\da \beta^p
,\]
  so $a = \beta^p$.

  - Check $\beta\in \FF$: use that $R_\ell \in \FF$ since it was a constant term of a polynomial in $\FF[x]$, $a\in \FF$ by assumption, and fields are closed under taking powers and products.

:::

### Fall 2019 #4 $\done$
Let $F$ be a finite field with $q$ elements.
Let $n$ be a positive integer relatively prime to $q$ and let $\omega$ be a primitive $n$th root of unity in an extension field of $F$.
Let $E = F [\omega]$ and let $k = [E : F]$.

a.
Prove that $n$ divides $q^{k}-1$.

b.
Let $m$ be the order of $q$ in $\ZZ/n\ZZ\units$.
Prove that $m$ divides $k$.

c.
Prove that $m = k$.

\todo[inline]{Revisit, tricky!}

:::{.concept}
\envlist

- $\FF\units$ is always cyclic for $\FF$ a field.
- Lagrange: $H\leq G \implies \#H \divides \# G$.

:::

:::{.solution}
\envlist

:::{.proof title="of a"}
\envlist

- Since $\abs{F} = q$ and $[E:F] = k$, we have $\abs{E} = q^k$ and $\abs{E\units} = q^k-1$.

- Noting that $\zeta \in E\units$ we must have $n = o(\zeta) \divides \abs{E\units} = q^k-1$ by Lagrange's theorem.

:::

:::{.proof title="of b"}
\envlist

- Rephrasing (a), we have
\[
n \divides q^k-1
&\iff q^k-1 \cong 0 \mod n \\
&\iff q^k \cong 1 \mod n \\
&\iff m \definedas o(q) \divides k
.\]

:::

:::{.proof title="of c"}
\envlist

- Since $m\divides k \iff k = \ell m$, (**claim**) there is an intermediate subfield $M$ such that
\[
E \leq M \leq F \quad k = [F:E] = [F:M] [M:E] = \ell m
,\]

  so $M$ is a degree $m$ extension of $E$.

- Now consider $M\units$.
- By the argument in (a), $n$ divides $q^m - 1 = \abs{M\units}$, and $M\units$ is cyclic, so it contains a cyclic subgroup $H$ of order $n$.

- But then $x\in H \implies p(x)\definedas x^n-1 = 0$, and since $p(x)$ has at most $n$ roots in a field.

- So $H = \theset{x \in M \suchthat x^n-1 = 0}$, i.e. $H$ contains all solutions to $x^n-1$ in $E[x]$.

- But $\zeta$ is one such solution, so $\zeta \in H \subset M\units \subset M$.

- Since $F[\zeta]$ is the smallest field extension containing $\zeta$, we must have $F = M$, so $\ell = 1$, and $k = m$.

:::

:::

### Spring 2019 #2 $\done$
Let $F = \FF_p$ , where $p$ is a prime number.

a.
Show that if $\pi(x) \in F[x]$ is irreducible of degree $d$, then $\pi(x)$ divides $x^{p^d} - x$.

b.
Show that if $\pi(x) \in F[x]$ is an irreducible polynomial that divides $x^{p^n} - x$, then $\deg \pi(x)$ divides $n$.

:::{.concept}
\envlist

- Go to a field extension.
  - Orders of multiplicative groups for finite fields are known.
- $\GF(p^n)$ is the splitting field of $x^{p^n} - x \in \FF_p[x]$.
- $x^{p^d} - x \divides x^{p^n} - x \iff d \divides n$
- $\GF(p^d) \leq \GF(p^n) \iff d\divides n$
- $x^{p^n} - x = \prod f_i(x)$ over all irreducible monic $f_i$ of degree $d$ dividing $n$.

:::

:::{.solution}
\envlist

:::{.proof title="of a"}
We can consider the quotient $K = \displaystyle{\frac{\FF_p[x]}{\generators{\pi(x)}}}$, which since $\pi(x)$ is irreducible is an extension of $\FF_p$ of degree $d$ and thus a field of size $p^d$ with a natural quotient map of rings $\rho: \FF_p[x] \to K$.

Since $K\units$ is a group of size $p^d-1$, we know that for any $y \in K\units$, we have by Lagrange's theorem that the order of $y$ divides $p^d-1$ and so $y^{p^d} = y$.

So every element in $K$ is a root of $q(x) = x^{p^d}-x$.

Since $\rho$ is a ring morphism, we have

\[
\rho(q(x)) = \rho(x^{p^d} - x) &= \rho(x)^{p^d} - \rho(x)
= 0 \in K \\
&\iff q(x) \in \ker \rho \\
&\iff q(x) \in \generators{\pi(x)} \\
&\iff \pi(x) \divides q(x) = x^{p^d}-x
,\]
  where we've used that "to contain is to divide" in the last step.

:::

:::{.proof title="of b"}

:::{.claim}
$\pi(x)$ divides $x^{p^n}-x \iff \deg \pi$ divides $n$.
:::

:::{.proof title="of claim, $\implies$"}
Let $L \cong \GF(p^n)$ be the splitting field of $\phi_n(x) \definedas x^{p^n}-x$; then since $\pi \divides \phi_n$ by assumption, $\pi$ splits in $L$.
Let $\alpha \in L$ be any root of $\pi$; then there is a tower of extensions $\FF_p \leq \FF_p(\alpha) \leq L$.

Then $\FF_p \leq \FF_p(\alpha) \leq L$, and so
\[
n &= [L: \FF_p] \\
&= [L: \FF_p(\alpha)]~[\FF_p(\alpha): \FF_p] \\
&= \ell d
,\]

for some $\ell \in \ZZ^{\geq 1}$, so $d$ divides $n$.

:::

:::{.proof title="of claim, $\impliedby$"}
$\impliedby$:
If $d\divides n$, use the fact (claim) that $x^{p^n} - x = \prod f_i(x)$ over all irreducible monic $f_i$ of degree $d$ dividing $n$.
So $f = f_i$ for some $i$.

:::

:::

:::

### $\star$ Fall 2016 #5 $\work$
How many monic irreducible polynomials over $\FF_p$ of prime degree $\ell$ are there?
Justify your answer.

### $\star$ Fall 2013 #7 $\work$
Let $F = \FF_2$ and let $\bar F$ denote its algebraic closure.

a.
Show that $\bar F$ is not a finite extension of $F$.

b.
Suppose that $\alpha \in \bar F$ satisfies $\alpha^{17} = 1$ and $\alpha\neq 1$.
Show that $F(\alpha)/F$ has degree 8.

## General Field Extensions

### Spring 2020 #3 $\work$
Let $E$ be an extension field of $F$ and $\alpha\in E$ be algebraic of odd degree over $F$.

a.
Show that $F(\alpha) = F(\alpha^2)$.

b.
Prove that $\alpha^{2020}$ is algebraic of odd degree over $F$.

### Spring 2012 #1 $\work$
Suppose that $F\subset E$ are fields such that $E/F$ is Galois and $\abs{\gal(E/F)} = 14$.

a.
Show that there exists a unique intermediate field $K$ with $F\subset K \subset E$ such that $[K: F] = 2$.

b.
Assume that there are at least two distinct intermediate subfields $F \subset L_1, L_2 \subset E$ with $[L_i: F]= 7$.
Prove that $\gal(E/F)$ is nonabelian.

### Spring 2019 #8 $\done$
Let $\zeta = e^{2\pi i/8}$.

a.
What is the degree of $\QQ(\zeta)/\QQ$?

b.
How many quadratic subfields of $\QQ(\zeta)$ are there?

c.
What is the degree of $\QQ(\zeta, \sqrt[4] 2)$ over $\QQ$?

:::{.concept}
\envlist

- $\zeta_n \definedas e^{2\pi i \over n}$, and $\zeta_n^k$ is a primitive $n$th root of unity $\iff \gcd(n, k) = 1$
  - In general, $\zeta_n^k$ is a primitive ${n \over \gcd(n, k)}$th root of unity.
- $\deg \Phi_n(x) = \phi(n)$
- $\phi(p^k) = p^k - p^{k-1} = p^{k-1}(p-1)$
  - Proof: for a nontrivial gcd, the possibilities are
  \[
  p, 2p, 3p, 4p, \cdots, p^{k-2}p, p^{k-1}p
  .\]

- $\Gal(\QQ(\zeta)/\QQ) \cong \ZZ/(n)\units$

:::

:::{.solution}
\envlist

Let $K = \QQ(\zeta)$.

:::{.proof title="of a"}
\envlist

- $\zeta \definedas e^{2\pi i / 8}$ is a primitive $8$th root of unity
- The minimal polynomial of an $n$th root of unity is the $n$th cyclotomic polynomial $\Phi_n$
- The degree of the field extension is the degree of $\Phi_8$, which is
\[
\phi(8) = \phi(2^3) = 2^{3-1} \cdot (2-1) = 4
.\]
- So $[\QQ(\zeta): \QQ] = 4$.

:::

:::{.proof title="of b"}
\envlist

- $\Gal(\QQ(\zeta)/\QQ) \cong \ZZ/(8)\units \cong \ZZ/(4)$ by general theory
- $\ZZ/(4)$ has exactly one subgroup of index 2.
- Thus there is exactly **one** intermediate field of degree 2 (a quadratic extension).

:::

:::{.proof title="of c"}
\envlist

- Let $L = \QQ(\zeta, \sqrt[4] 2)$.

- Note $\QQ(\zeta) = \QQ(i, \sqrt 2)$
  - $\QQ(i, \sqrt{2})\subseteq \QQ(\zeta)$
    - $\zeta_8^2 = i$, and $\zeta_8 = \sqrt{2}\inv + i\sqrt{2}\inv$ so $\zeta_8 + \zeta_8 \inv = 2/\sqrt{2} = \sqrt{2}$.
  - $\QQ(\zeta) \subseteq \QQ(i, \sqrt{2})$:
    - $\zeta = e^{2\pi i / 8} = \sin(\pi/4) + i\cos(\pi/4) = {\sqrt 2 \over 2}\qty{1+i}$.

- Thus $L = \QQ(i, \sqrt{2})(\sqrt[4]{2}) = \QQ(i, \sqrt 2, \sqrt[4] 2) = \QQ(i, \sqrt[4]{2})$.
  - Uses the fact that $\QQ(\sqrt 2) \subseteq \QQ(\sqrt[4] 2)$ since $\sqrt[4]{2}^2 = \sqrt{2}$

- Conclude
\[
[L: \QQ] = [L: \QQ(\sqrt[4] 2)] ~[\QQ(\sqrt[4] 2): \QQ] = 2 \cdot 4 = 8
\]
  using the fact that the minimal polynomial of $i$ over any subfield of $\RR$ is always $x^2 + 1$, so $\min_{\QQ(\sqrt[4] 2)}(i) = x^2 + 1$ which is degree 2.

:::

:::

### Fall 2017 #3 $\work$
Let $F$ be a field. Let $f(x)$ be an irreducible polynomial in $F[x]$ of degree $n$ and let $g(x)$
be any polynomial in $F[x]$. Let $p(x)$ be an irreducible factor (of degree $m$) of the polynomial $f(g(x))$.

Prove that $n$ divides $m$. Use this to prove that if $r$ is an integer which is not a perfect square, and $n$ is a positive integer then every irreducible factor of $x^{2n} - r$ over $\QQ[x]$ has even degree.

### Spring 2015 #2 $\work$
Let $\FF$ be a finite field.

a.
Give (with proof) the decomposition of the additive group $(\FF, +)$ into a direct sum of cyclic groups.

b.
The *exponent* of a finite group is the least common multiple of the orders of its elements.
Prove that a finite abelian group has an element of order equal to its exponent.

c.
Prove that the multiplicative group $(\FF\units, \cdot)$ is cyclic.

### Spring 2014 #3 $\work$
Let $F\subset C$ be a field extension with $C$ algebraically closed.

a.
Prove that the intermediate field $C_{\text{alg}} \subset C$ consisting of elements algebraic over $F$ is algebraically closed.

b.
Prove that if $F\to E$ is an algebraic extension, there exists a homomorphism $E\to C$ that is the identity on $F$.

url: https://raw.githubusercontent.com/dzackgarza/Qual-Review-and-Solutions/590a8929b2326cc770a246e934ab36fb30b0c7ab/Algebra/UGA Questions (no solutions)/sections/072_Fields and Galois Theory.md

repository: dzackgarza/Qual-Review-and-Solutions

filename: 072_Fields and Galois Theory.md

repo_name: dzackgarza/Qual-Review-and-Solutions


text:
# Footprint

Connect your physical footprint to your digital footprint! A simple safety/social media app that utilizes
the Geolocation API in your browser to fetch your current location and posts a path on a Leaflet map + feed
along with a picture and description for friends to view. Footprint is a MEAN stack application
generated with MongoDB, Express.js, Angular, and Node.js.

## Motivation
The creation of Footprint was inspired by the idea of keeping documentation of a user's location
in case of an emergency. This way, friends can report to missing person services the last known
location of a missing user. Officials will find extremely useful details including the coordinates,
descriptions, pictures, and dates of a person if they went missing while using this app during a short walk
or a long trip out of the country.

## Demo (Chrome)
- Live: http://footprint-mean.s3-website.us-east-2.amazonaws.com/

  - Read only login ~ email<EMAIL_ADDRESS>pwd: demo
    - (or create your own!)

  - Read and write login ~ email<EMAIL_ADDRESS>pwd: test
    - (modify cluster data for everyone, only use to verify functionality)

- REST api: http://footprint-env.eba-m2w5qfkx.us-east-2.elasticbeanstalk.com/api/posts

## Local Installation
- node v15.4.0
- npm v7.0.15

```
npm install
```

## Running Locally
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`.

Run `npm run start:server` in a separate terminal to connect to the database.

Chrome seems to run this app better than other browsers.

### If connecting to the database fails...
You will either have to create your own cluster on MongoDB and modify backend/app.js
or email me and I can add your IP address! The issue here is that
even though I whitelisted all IP addresses, there must be some unspoken secruity issue
preventing you from connecting - still working on this issue!

 - "mongodb+srv://<username>:<password>@footprint0.yputw.mongodb.net/footprint?retryWrites=true&w=majority"

## Preview
![alt text](src/assets/images/preview.png?raw=true "Preview")

## Notable Features
- Authentication/Authorization Services
- Password encryption
- Scrollable Feed
- Upload jpg or png (with validation)
- Connects to Geolocation API
- Pagination
- Leaflet Map with Antpath and Circlemarkers
- Map controls
- RESTful API
- Error handling

## Bugs
Refreshing your browser while viewing the feed clashes with the authentication service
and therefore hides the edit and delete buttons on each post even though you are still
recognized as logged in. You have to logout and login to view these buttons again.

## Version Limitations
This current version only supports displaying one trip at a time on the map or else the
trips will be connected by a single path. You will have to delete all posts in the current trip
to start a new path.

## Next Steps
- Add feature to showcase more than one trip
- Refactor code for mobile
- Implement "Take picture" button instead of "Choose File"
- Create an "Add friends" page
- Modify backend to only GET your posts and friends' posts

### Misc.
The bulk of the feed/map component code is located in the post-list folder. Mongoose
connects to the database in the backend/app.js file. The password connecting you to the
demo database is only temporary! Hope you liked the project!

### Credits
- Luke Macy
  - https://github.com/missionloyd

### Additional Resources
#### Leaflet
- https://github.com/Leaflet/Leaflet

#### AntPath
- https://github.com/rubenspgcavalcante/leaflet-ant-path

license: MIT

repository: missionloyd/footprint

branch_name: refs/heads/master

extension: md

gha_language: TypeScript

license_type: permissive

repo_name: missionloyd/footprint


text:
# The past, present and future of local storage for web applications:

- THe operating system provides an abstracion layer for storing the getting applications data. Values could be stored in the registy, ini files, xml files or some other place.
    - User data allows web pages to store up to 64kb of data per domain. This was during the internet explorar which was the first web browser that everyone knew. There are many other webpages that came out during the era and many of them failed.

## HTML5 Storage
   - HTML5 Storage is a specification named web storage.
    - Certain browsers vendors also called local store or dom storage.
### HTML 5 Storage support:
   - IE 8.0+
    - FireFox 3.5+
    - Safari 4.0+
    - Chrome 4.0+
    - Opera 10.5+
    - Iphone 2.0+
    - Andriod 2.0+
    To check for HTML 5 store we would use :

        function supports_html5_storage() {
    try {
    return 'localStorage' in window && window['localStorage'] !== null;
    } catch (e) {
    return false;
    }

## Using Storage:
  - HTML5 storage is based on a named key value pairs. You store data based on a key, that then you can retrice the data with the same key. The named key is basically a string.
    - If we are storing and retreiving anything other than string we would use functions like parseInt() or parseFloat().
    - There are ways of removing the value for a given named key and clearing the store we would use :
            interface Storage {
    deleter void removeItem(in DOMString key);
         void clear();
    };

## Tracking changes to the HTML5 Stoarage Area:
   - You can use storage event to keep track progammatically of when storage areas changes.
    - The storage even is supported everyywhere in the localStorage obejct which is supported.

    PROPERTY	TYPE	DESCRIPTION:
    key	string	the named key that was added, removed, or modified.
    oldValue	any	the previous value (now overwritten), or null if a new item was added.
    newValue	any	the new value, or null if an item was removed.
    url*	string	the page which called a method that triggered this change.

## Beyond named key value pairs:
   - A new api has been standardized and implemented across all major browsers, platforms and devices.

branch_name: refs/heads/main


text:
# Live Templates for Parse.com JS

## Importing Live Templates

### Automatic
Read here on how to import the settings.jar file. It only contains Live Templates
https://www.jetbrains.com/idea/help/exporting-and-importing-settings.html#1

### Manual
1. Go to Settings
2. Search for Live Templates
3. Add a new group called "Parse" (optional)
4. Copy the files one at a time into your JetBrains IDE

# LICENSE
MIT

repository: DFranch/parse-js-live-templates

repo_name: DFranch/parse-js-live-templates


text:
# Word Counter Website_

#### _Application that counts the number of instances of a word in a sentence. The user inputs both the word and the sentence. {4/27/18}_

#### By _**Austin Roberts**_

## Description
A program the takes a user input for a sentence and a word and finds the number of instances of that word in that sentence.
Specs
* 1. Separate a sentence by spaces. Input: Sentence, Output: List of words.
* 2. Seperate a sentence by a delimters: { ' ', ',', '.', ':', '!', '\t' }
* 3. Convert sentence into lowercase for filtering.
* 4. Find a word within the sentence Input: word Output: number of words in the list

## Setup/Installation Requirements

* Clone file from github https://github.com/Coderoper/WordCounter.git
* Download and install the .NET Core 1.1 SDK (Software Development Kit) and .NET runtime.
* Navigate to the WordCounter.Solution directory in terminal
* Execute dotnet run in the terminal

## Known Bugs

_No known bugs_

## Technologies Used

_MVC, HTML, C#

### License

*MIT License*

Copyright (c) 2018 **_Austin Roberts_**

repository: daustinroberts/WordCounter

repo_name: daustinroberts/WordCounter


text:
# Why use ditto?

 We've all heard that too much comments is a bad
thing, because your code should be simple and readable enough that I should be
able to understand your design decisions with ease, and yet the most code
documentation is in the code itself, this leads to huge comment blocks where
the programmer probably spends more time scrolling then reading actual code.
This has been discussed by Jeff Atwood's ["Coding Without Comments"][1], where
his article opens with:

> If peppering your code with lots of comments is good, then having zillions of
> comments in your code must be great, right? Not quite. Excess is one way good
> comments go bad:

    '*************************************************
    ' Name: CopyString
    '
    ' Purpose: This routine copies a string from the source
    ' string (source) to the target string (target).
    '
    ' Algorithm: It gets the length of "source" and then copies each
    ' character, one at a time, into "target". It uses
    ' the loop index as an array index into both "source"
    ' and "target" and increments the loop/array index
    ' after each character is copied.
    '
    ' Inputs: input The string to be copied
    '
    ' Outputs: output The string to receive the copy of "input"
    '
    ' Interface Assumptions: None
    '
    ' Modification History: None
    '
    ' Author: Dwight K. Coder
    ' Date Created: 10/1/04
    ' Phone:<PHONE_NUMBER>
    ' SSN: 111-22-3333
    ' Eye Color: Green
    ' Maiden Name: None
    ' Blood Type: AB-
    ' Mother's Maiden Name: None
    ' Favorite Car: Pontiac Aztek
    ' Personalized License Plate: "Tek-ie"
    '*************************************************

Other examples include:

**Java - Javadoc**

    /**
    * Short one line description.                           (1)
    *

    * Longer description. If there were any, it would be    [2]
    * here.
    *

    * And even more explanations to follow in consecutive
    * paragraphs separated by HTML paragraph breaks.
    *
    * @param  variable Description text text text.          (3)
    * @return Description text text text.
    */
    public int methodName (...) {
        // method body with a return statement
    }

**C++ - Doxygen**

    //!  A test class.
    /*!
    A more elaborate class description.
    */
    class Test
    {
    public:
        //! An enum.
        /*! More detailed enum description. */
        enum TEnum {
                    TVal1, /*!< Enum value TVal1. */
                    TVal2, /*!< Enum value TVal2. */
                    TVal3  /*!< Enum value TVal3. */
                }
            //! Enum pointer.
            /*! Details. */
            *enumPtr,
            //! Enum variable.
            /*! Details. */
            enumVar;

        //! A constructor.
        /*!
        A more elaborate description of the constructor.
        */
        Test();
        //! A destructor.
        /*!
        A more elaborate description of the destructor.
        */
    ~Test();

        //! A normal member taking two arguments and returning an integer value.
        /*!
        \param a an integer argument.
        \param s a constant character pointer.
        \return The test results
        \sa Test(), ~Test(), testMeToo() and publicVar()
        */
        int testMe(int a,const char *s);

        //! A pure virtual member.
        /*!
        \sa testMe()
        \param c1 the first argument.
        \param c2 the second argument.
        */
        virtual void testMeToo(char c1,char c2) = 0;

        //! A public variable.
        /*!
        Details.
        */
        int publicVar;

        //! A function variable.
        /*!
        Details.
        */
        int (*handler)(int a,int b);
    };

**Python - Sphinx**

    def func(foo):

        """This function translates foo into bar

        :param foo: A string to be converted
        :returns: A bar formatted string
        """

And yet nothing much as changed in terms of documentation generation, worst yet
it is being encouraged by the likes of [Docco][2]. That produce annotated
sources like [this][3]. While it is beautiful on the rendered html, that is
still not the answer to good documentation IMHO. I personally find that
documentation in code just gets in the way of programming, it is an eye sore to
look at needless comments, that it can actually slow down your productivity,
because you have to scroll down to the relevant function.

Instead of this:

    /**
     * Square root of n with Newton-Raphson approximation
     *
     * @param n some number
     */
    private double SquareRootApproximation(n) {
        r = n / 2;

        // go though each abs(r - (n/r)) until its bigger than t
        while ( abs( r - (n/r) ) > t ) {
            r = 0.5 * ( r + (n/r) );  // calcuate a new r
        }
    }
    System.out.println( "r = " + r );  // print the final r value

Would you not want to refactor the above code and work with this?:

    private double SquareRootApproximation(n) {
        r = n / 2;
        while ( abs( r - (n/r) ) > t ) {
            r = 0.5 * ( r + (n/r) );
        }
        return r;
    }
    System.out.println( "r = " + SquareRootApproximation(r) );

This is the major reason why I've created `ditto`, I think markdown files are
the easiest way to have both the source and documentation side by side, so that
programmers can either focus on code or generate documentation or both without
being slowed down, and I hope you like it :)

[1]: http://blog.codinghorror.com/coding-without-comments/
[2]: http://jashkenas.github.io/docco/
[3]: http://backbonejs.org/docs/backbone.html

repository: chutsu/ditto

branch_name: refs/heads/gh-pages

gha_language: JavaScript

repo_name: chutsu/ditto


text:
---
layout: post
title:  SourceCrypto
subtitle: Everything is related to Bitcoin. Crypto Research and Curated Lists.
excerpt: >
  Saving valuable information, in an increasingly organized discord server with 170+ channels with links organized by topic.
feature-img: "assets/img/SC-banner-lite.webp"
img: assets/img/portfolio/sourcecrypto-thumb.webp
img2: assets/img/portfolio/feature-blog-teaser.webp
published: true
permalink: portfolio/sourcecrypto/
date: 2018-12-22
---

In August of 2018, I began collecting links related to blockchain, in the channels of a discord server, which rapidly multiplied. At the time, I advertised content creation services on a popular freelance site, attracting mostly enterprise blockchain types.

Personally, I never found permissioned blockchains very interesting. However, I enjoy getting paid to learn. I also appreciate learning about the market through the eyes of my clients.

I'm a Bitcoiner at heart, but that doesn't stop me from being interested in blockchains and cryptocurrencies. Since 'blockchain' is such a massive space, I began by studying the history surrounding Bitcoin. For me, it's important to understand the events and conditions leading to Bitcoin, before presuming to know anything about cryptocurrency.

I'm almost caught up enough to take a solid stab at the actual history of Bitcoin, which naturally leads to the history of cryptocurrency. It's quite likely that I'll explode into stardust, once I begin working on the years since 2017.

Before all that happens, I'd like to have a site dedicated to Bitcoin only, early 2020.

After a year and a half of full-time dedicated curation, I've decided to drop the discord servers, and move on to more sophisticated tools.

* [Reflections: Stepping Back and Moving Forward](https://sourcecrypto.pub/posts/recap/)

[![image]({{ page.img2 | relative_url }})](https://sourcecrypto.pub)

## Bitcoin

* [Down the @TheCryptoconomy Rabbithole](https://sourcecrypto.pub/posts/Bitcoin/thecryptoconomy-podcast-deep-dive/) - Essential Bitcoin Literature in Audio Format
* [Running Bitcoin: Tools, Apps and Guides](https://sourcecrypto.pub/posts/Bitcoin/practical/)
* [LightniNgFo: Wallets, Applications, Guides and Development](https://sourcecrypto.pub/posts/Bitcoin/lightning/)

## Bitcoin History

* [Electronic Cash and Virtual Currencies, Before Bitcoin](https://sourcecrypto.pub/posts/Bitcoin/pre-history/electronic-cash/)
* [Cypherpunks and the Crypto Wars](https://sourcecrypto.pub/posts/Bitcoin/pre-history/cypherpunks/)
* [Blockchain and the United Nations](https://sourcecrypto.pub/posts/history/united-nations/)
* [History of Permissioned Ledgers](https://sourcecrypto.pub/posts/history/permissioned/)

## Transcripts

Around a year ago, I started making transcripts for content that I felt was too valuable to be left in audio format only. More recently, starting with Mark Miller and David Chaum, I've started going wild adding links for more information on the discussed topics.

* [Mark Miller, Agoric and the Decades-Long Quest for Secure Smart Contracts](https://sourcecrypto.pub/posts/agoric/mark-miller-agoric-epicenter/)
* [David Chaum - Forefather of Cryptocurrencies and the Cypherpunk Movement](https://sourcecrypto.pub/posts/Bitcoin/pre-history/chaum-forefather-cypherpunk-cryptocurrency/)
* [Smart Signatures - Christopher Allen](https://sourcecrypto.pub/posts/transcripts/smart-signatures-christopher-allen/)
* [Public vs Private Blockchains for the Enterprise](https://sourcecrypto.pub/posts/transcripts/public-private-blockchain-wolpert-gendal-brown/)
* [JW Weatherman Interviews Cypherpunk Legend Timothy C May](https://sourcecrypto.pub/posts/transcripts/JW-Weatherman-Interview-Tim-May/)
* [Stephan Levira Podcast 53 - Andreas M. Antonopoulos - On Bitcoin Maximalism](https://sourcecrypto.pub/posts/transcripts/SLP53-Livera-Antonopolis-Maximalism-Transcript/)
* [History of Blockchains for Business — Casey Kuhlman, Monax](https://sourcecrypto.pub/posts/transcripts/blockchain-business-history/)

gha_language: HTML


text:
---
subcategory: "VPN"
---

# Resource: vpnglobal_intranetip_binding

The vpnglobal_intranetip_binding resource is used to bind intranetip to vpnglobal configuration.

## Example usage

```hcl
resource "citrixadc_vpnglobal_intranetip_binding" "tf_bind" {
  intranetip = "<IP_ADDRESS>"
  netmask    = "<IP_ADDRESS>"
}
```

## Argument Reference

* `intranetip` - (Required) The intranet ip address or range.
* `netmask` - (Required) The intranet ip address or range's netmask.
* `gotopriorityexpression` - (Optional) Applicable only to advance vpn session policy. An expression or other value specifying the priority of the next policy which will get evaluated if the current policy rule evaluates to TRUE.

## Attribute Reference

In addition to the arguments, the following attributes are available:

* `id` - The id of the vpnglobal_intranetip_binding. It has the same value as the `intranetip` attribute.

## Import

A vpnglobal_intranetip_binding can be imported using its intranetip, e.g.

```shell
terraform import citrixadc_vpnglobal_intranetip_binding.tf_bind <IP_ADDRESS>
```

repository: citrix/terraform-provider-citrixadc

gha_language: Go

repo_name: citrix/terraform-provider-citrixadc


text:
---
title: "Basics of Regularization"
draft: false
weight: 1
katex: true
---

### Motivating Regularization
- Regularization is a variable selection technique used in regression, roughly speaking
- We typically use regularization when when we have a large amount of variables in our model (and a smaller amount of data), since this type of model typically leads to overfitting
- Regularization will significantly reduce the variance of the model without substantially increasing the bias
- In other words, regularization is commonly used to avoid overfitting
- To achieve this, regularization methods involve shrinking OLS coefficients, where only the most significant coefficients remain (as we increase the tuning parameter to the most optimal value)
- Essentially, regularization coefficients are just OLS coefficients with an added penalty

### Steps of Basic Regularization Methods
1. Standardize data
	- Centering the variables will means there is no longer an intercept
	- This is useful because the intercept will not be much of a factor in any shrinkage
2. Minimize the objective function (i.e. OLS objective function) including an added penalty to the OLS coefficients, in order to find the most significant coefficients

### References
- [Regularization Examples and Illustrations](http://www.socr.umich.edu/people/dinov/courses/DSPA_notes/17_RegularizedLinModel_KnockoffFilter.html)
- [Intuition behind Regularization](https://stats.stackexchange.com/questions/4961/what-is-regularization-in-plain-english)
- [Use-Cases of Regularization](https://towardsdatascience.com/regularization-in-machine-learning-76441ddcf99a)
- [Regularization Wiki](https://en.wikipedia.org/wiki/Regularization_(mathematics))
- [Visualizing Regularization](http://laid.delanover.com/difference-between-l1-and-l2-regularization-implementation-and-visualization-in-tensorflow/)
- [Types of Regularization](https://www.quora.com/What-is-the-difference-between-L1-and-L2-regularization-How-does-it-solve-the-problem-of-overfitting-Which-regularizer-to-use-and-when)
- [Lasso Regularization](https://stats.stackexchange.com/questions/86434/is-standardisation-before-lasso-really-necessary)


text:
---
title: "Events"
date: 2020-02-24T21:13:54Z
draft: false
group: feature
weight: 105
---

Before you can react to a change in the system you need to know that something has changed.

Replicante's first task is to observe all nodes and generate events to reflect changes to nodes and clusters.
These events are internally used to drive features but are also recoded for users to see.

Having access to historical events can provide valuable insight:

 Was the datastore down or in the middle of a failover when increased error rates was reported?
 Did something unexpected happen after a configuration change?

Being able to correlate datastore events with application errors, performance issues,
or other unusual activity is key into improving your services and products.

## WebUI history view

The simplest way to view the events history is to check out the `Events` page in the [WebUI]({{< ref "../webui.md" >}}).

## Stream subscription

Observed and generated events are emitted onto a stream.

Events order is guaranteed for events in the same cluster but events from different clusters
can be interleaved in any order.
System events order is also guaranteed with respect to other system events but not to cluster events.

On top of supporting some Replicante Core features, the use of an events stream means that
external systems can be designed to follow (or subscribe to) the stream to be notified
of events as they occur.

Such powerful extension point opens the system up for almost endless integrations.
To name just a few:

* Send notifications when events occur.
* Trigger custom automated actions and verify their results.
* Collect context useful for possible Root Cause Analysis or other reporting.
* And much much more ...

## Grafana annotations

Building on the events stream mentioned above, Replicante Core offers
[Grafana](https://grafana.com/)
[annotations](https://grafana.com/docs/grafana/latest/dashboards/annotations/)
integration!

{{< img "grafana-agent-up-zoom.png" "Annotation of an Agent Up event close up" >}}
{{< img "grafana-agent-up.png" "Annotation of an Agent Up event" >}}
{{< img "grafana-agent-down.png" "Annotation of an Agent Down event" >}}

This feature requires the Grafana component to be enabled enabled
(`components.grafana` configuration option; enabled by default).

A set of endpoints compatible with the
[simple JSON datasource](https://grafana.com/plugins/grafana-simple-json-datasource)
is available under the `/api/unstable/grafana` root.

### Grafana configuration

The annotations integration mainly provide a specialised query interface to stored events
so most of the configuration is on the Grafana side:

1. Install the [simple JSON datasource](https://grafana.com/plugins/grafana-simple-json-datasource)
   plugin if not already installed.
2. Configure a new `Simple JSON` datasource to point to
   `http://REPLICANTE_HOST:REPLICANTE_PORT/api/unstable/grafana` if not already available.
3. On a dashboard, configure a new annotation query using the newly created datesource.
4. (Optional) Filter events by adding JSON encoded filters as the query text.

### Annotation filters

By default, the latest 1000 events in the queried interval are returned.

The following filters can be used to change what is returned:

* `cluster_id`: (string) filter events by originating cluster ID.
* `event`: (string) filter events by event type.
* `exclude_system_events`: (`true`|`false`) exclude events not originating from a cluster.
* `limit`: (integer) maximum number of events to return.

gha_license_id: MIT


text:
# Domain Management

## Why

In order to maintain customer trust and ensure a consistent experience when visiting TELUS digital properties it is important that the domains we use represent our brand in a positive way. We must also ensure that our domains are highly rated by search engines, easy for customers to communicate to others, and easy to remember themselves.

## What

TELUS digital properties are *strongly discouraged* from hosting on subdomains barring unusual circumstances requiring an exception. External TELUS digital properties and microsites must follow our standard subdomain substructure. We do not support the use of unique domains (e.g. `telusrocks.com`) and no domains should ever be registered by third party and digital partner groups.

## How

When requesting a TELUS subdomain, keep in mind the following:
- Subdomains must have the following format: `x.telus.com`, e.g. `community.telus.com`
- The subdomain should represent the product or campaign name as clearly as possible
- The product/campaign name as part of the subdomain should be no more than **12** characters long
- Abbreviations and hyphens SHOULD be avoided
- The use of the brand name in the first part of the subdomain is not permitted (e.g. `teluscampaign.telus.com`)
- All product names must be approved through proper Brand/Marketing channels before a subdomain is set up
- The same structure requirements apply for other TELUS-owned brands (e.g. `koodo.com`, `publicmobile.ca`, `telushealth.com`, `telusinternational.com`, etc.)
- Some exceptional cases:
  - `Telus.net` - should be capitalized and limited to existing services already using it such as e-mail, TV and HSIA
  - `Telusmobility.com` - should be capitalized and limited to existing services already using it. Storefronts have already migrated over to `telus.com`
  - `Mobility.ca` - domain to be used when brand agnostic domain is needed, such as on MMS client that can be installed on TELUS or Koodo devices.

For DNS requests see [Project Inception and Security Process](project-inception-and-security-process.md)

## Who

- `@delivery`
- `@security`
- `@seo`

repository: montahdaya/reference-architecture

repo_name: montahdaya/reference-architecture


text:
---
layout: post
title: Week 7
---

### Exchanging pull requests part 2!

This is the weekly blog-post for week 7 of 14.

#### Hello there,

This week was similar to last week in that we had to fork more repositories and make more pull requests... However, that was the end of similarities between the two weeks.

This week, we had to create working code that we would contribute to each others' files, and we didn't have an organized way of contributing to each other, so merge conflicts were definitely present this time around.

Something about the merge conflicts: they are simple file markups. For some reason, I expected to see the two different versions side by side, each line being a choice between the original master and the merge request master, but that wasn't the case. The conflicts were simply marked with "`<<<<<<<<<<master`", "`==========`", and "`>>>>>>>>>>master`" (at least to *my* recollection). In order to resolve the conflict one had to simply press a button in the top right corner. But the process is simple enough not to complain about it. I started with [my repository]() first, and then worked my way through my teammates' repositories:
- [`johncgenere's repository`](https://github.com/hunter-college-cs-ossd/johncgenere-weekly)
- [`gutierrezjdr's repository`](https://github.com/hunter-college-cs-ossd/gutierrezjdr-weekly)
- [`f0cus10's repository`](https://github.com/hunter-college-cs-ossd/f0cus10-weekly)

This concludes this week of open source contributions,
*Cheers!*

> Thank you for reading!

gha_language: CSS


text:
# Server Dictionary
> A server that takes requests from the Client and sends meanings of words if they are found locally, such as in a dictionary.

## What I learned
* Socket class in Java.
* File operations in Java.

## Explanation
* Access "Descricao.pdf" for more details and usage explanation.

## Links
* Server: https://github.com/ivanfilho21/server_dictionary
* Client: https://github.com/ivanfilho21/client_dictionary

### Author:
> Ivan Filho.

gha_language: Java


text:
[![Build Status](https://travis-ci.org/ianlintner-wf/nginx-drupal.svg?branch=master)](https://travis-ci.org/ianlintner-wf/nginx-drupal)
[![Join the chat at https://gitter.im/ianlintner-wf/nginx-drupal](https://badges.gitter.im/ianlintner-wf/nginx-drupal.svg)](https://gitter.im/ianlintner-wf/nginx-drupal?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents**  *generated with [DocToc](https://github.com/thlorenz/doctoc)*

- [Docker image with Nginx and PHP 5.5.9 optimized for Drupal 7](#docker-image-with-nginx-and-php-559-optimized-for-drupal-7)
  - [Packages included](#packages-included)
    - [Other changes from the original repo](#other-changes-from-the-original-repo)
  - [Important:](#important)
  - [To build](#to-build)
  - [To run](#to-run)
  - [Other Notes](#other-notes)
    - [XDEBUG](#xdebug)
    - [Drush & Console Table](#drush-&-console-table)
  - [Docker Compose](#fig)
  - [Running Drush](#running-drush)
    - [License](#license)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# Docker image with Nginx and PHP 5.5.9 optimized for Drupal 7

This image is build using Ubuntu 14.04 with Nginx and PHP 5.5.9 and is optimized to run Drupal 7 and it is
designed to use the docroot which is how Acquia repositories are setup if you are hosting your production site
on Acquia.

** This is not intended to be a production ready instance. My current use is for local development with sites being hosted on Acquia Cloud. **

This repo is a fork of: https://github.com/iiiepe/docker-nginx-drupal if your site does not use docroot format
this container maybe a better option.

**Drupal Site Code must be located /var/www/docroot**

- Repository root --> /var/www
 - docroot --> /var/www/docroot
   - sites
 - scripts
 - tools

## Packages included
- nginx
- php
- composer
- drush

### Other changes from the original repo
* Added SSL cert for https and nginx config is set to serve https/ssl
* Removed the mail server configuration. Use drupal SMTP module with mailcatcher.

[MailCatcher](https://hub.docker.com/r/zolweb/docker-mailcatcher/~/dockerfile/)

* Added mysql client for use with Drush SQL Commands

## Important:

- Logs are at /var/log/supervisor so you can map that directory
- Application root directory is /var/www so make sure you map the application there
- The web root in this container /var/www/docroot this is set up to match how Acquia Repos are structured.
- Nginx configuration was provided by https://github.com/perusio/drupal-with-nginx but it's modified

## To build

    $ make build

    or

    $ docker build -t yourname/nginx-drupal .

## To run
Nginx will look for files in /var/www so you need to map your application to that directory.

**The actual site will be run from /var/www/docroot**

```bash
docker run -d -p 8000:80 -v application:/var/www yourname/nginx-drupal
```

If you want to link the container to a MySQL/MariaDB contaier do:

```bash
docker run -d -p 8000:80 -v application:/var/www my_mysql_container:mysql yourname/nginx-drupal
```

The startup.sh script will add the environment variables with MYSQL_ to /etc/php5/fpm/pool.d/env.conf so PHP-FPM detects them. If you need to use them you can do:
<?php getenv("SOME_ENV_VARIABLE_THAT_HAS_MYSQL_IN_THE_NAME"); ?>

## Other Notes
- The -e PHP_OPCACHE will turn the opcache on or off when you run the container
- Mount Script will run automatically on startup it is designed if you need to mount a folder for configs or shared files.

```bash
docker run -d -e PHP_OPCACHE=enabled -v "application:/var/www"  -v "mountscript.sh:/usr/local/bin/mount.sh"  espressodev/nginx-drupal:latest
```

### XDEBUG
If you want to use xdebug there is a tag. It sends the connections back to the default docker bridge on port 9000.
The debug key is *dgbp*

```bash
docker run -d -e PHP_OPCACHE=disabled -v "application:/var/www"  -v "mountscript.sh:/usr/local/bin/mount.sh"  espressodev/nginx-drupal:xdebug
```

### Drush & Console Table
**IF PEAR IS DOWN**
In the temporary to get drush running there is a copy of the console table on my repo in github. It can be downloaded and installed in the package location

```bash
cd /tmp
curl -O https://raw.githubusercontent.com/ianlintner-wf/drush_console_table/master/Table.php
mkdir -p  ~/.composer/vendor/drush/drush/lib/Console_Table-1.1.3/
cp Table.php ~/.composer/vendor/drush/drush/lib/Console_Table-1.1.3/Table.php
```

## Fig

AKA Docker Compose

    mysql:
      image: mysql
      expose:
        - "3306"
      environment:
        MYSQL_ROOT_PASSWORD: 123
    web:
      image: espressodev/nginx-drupal
      volumes:
        - application:/var/www
        - logs:/var/log/supervisor
        - mountscript:/usr/local/bin/mount.sh
      ports:
        - "80:80"
        - "443:443"
      links:
        - "mysql:mysql"

## Running Drush
With Fig this is actually easier and is the recommended way since if you're running Docker without fig, you'll have to link all containers before you run drush.

    $ fig run --rm web drush

### License
Released under the MIT License.

repository: ianlintner-wf/nginx-drupal

gha_language: Nginx

repo_name: ianlintner-wf/nginx-drupal


text:
# liri-node-app
LIRI is a command line node app that takes in parameters and gives you back data.

## Built with
Javascript, Node-Spotify-API, Axios, Moment, DotEnv, Colors, OMDB API, Bands In Town API

- Movie-this: https://vimeo.com/325727391
- Concert-this: https://vimeo.com/325728618
- Spotify-this: https://vimeo.com/325738310
- Do-what-it-says: https://vimeo.com/325730825

## Installation

```
$ cd ../liri_app
$ npm install
$ node liri.js
```

## Acknowledgement
Thanks to the instructors and teaching assistants at Columbia Univeristy Coding Bootcamp.

## Licenses
ISC, MIT, BSD-2-Clause

repository: szewah/liri-node-app

repo_name: szewah/liri-node-app


text:
Author : Hanna Alemu
# Reverse an Array

## Challenge
Challenge : Create a function that reverses elements in an array without creating a new array.

## Approach & Efficiency
I started out by visualizin how my brain tried to solve the problem on its own. Then I created a formula that shows the relationship of the indexes of the elements before and after the reverse.

## Solution

![Image of White Board](./assets/array-reverse.jpg)
![Image of White Board](./assets/array-reverse2.jpg)


text:
# Writing html!

### Text

Text is rendered inside of a block `{}`

```rust
let view = html!{
  <div> {"Text goes here,"} {"or here" " or here!"}</div>
};
```

### Attributes

At this time attributes must end with a `,` due to how our `html!` macro works.

```rust
let view = html!{
  <div id='my-id',></div>
};
```

### Event Handlers

We're currently adding support for all of the standard event handlers. If you run into an error trying to use
an event please open an issue and we'll address it ASAP.

```rust
// This is an excerpt from crates/virtual-dom-rs/tests/events.
// To see more example event usage go to that file.
//
// Or better yet take a look at the web_sys API:
//   https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.MouseEvent.html

{{#include ../../../crates/virtual-dom-rs/tests/events.rs:15:50}}
```

### Custom Event Handlers

Custom event handlers begin with a `!` and, like attributes must end with a `,`.

Percy will attach event handlers your DOM nodes via `addEventListener`

So `!mycustomevent` becomes `element.addEventListener('mycustomevent', callback)`

```rust
pub fn render (state: Rc<State>) -> VirtualNode {
  let state = Rc::clone(&self.state);

  let view = html! {
      <button
        !mycustomevent=move|| {
          state.borrow_mut().msg(Msg::ShowAlert)
        },>
        { "Dispatch 'mycustomevent' to me and I will do something!" }
     </button>
  };

  view
}
```

### Nested components

`html!` calls can be nested.

```rust
let view1 = html!{ <em> </em> };
let view2 = html{ <span> </span> }

let parent_view = html! {
  <div>
    { view1 }
    { view2 }
    html! {
      {"Nested html! call"}
    }
  </div>
};

let html_string = parent_view.to_string();
// Here's what the String looks like:
// <div><em></em><span></span>Nested html! call</div>
```

repository: agrif/percy

gha_license_id: NOASSERTION

repo_name: agrif/percy


text:
# Zamba

[![Docs Status](https://img.shields.io/badge/docs-stable-informational)](https://zamba.drivendata.org/docs/)
[![tests](https://github.com/drivendataorg/zamba/workflows/tests/badge.svg?branch=master)](https://github.com/drivendataorg/zamba/actions?query=workflow%3Atests+branch%3Amaster)
[![codecov](https://codecov.io/gh/drivendataorg/zamba/branch/master/graph/badge.svg)](https://codecov.io/gh/drivendataorg/zamba)

> *Zamba* means "forest" in Lingala, a Bantu language spoken throughout the Democratic Republic of the Congo and the Republic of the Congo.

**`zamba` is a tool built in Python that uses machine learning and computer vision to automatically detect and classify animals in camera trap videos.** You can use `zamba` to:

- Identify which species appear in each video
- Filter out blank videos
- Create your own custom models that identify your species in your habitats
- Estimate the distance between animals in the frame and the camera
- And more! 🙈 🙉 🙊

The official models in `zamba` can identify blank videos (where no animal is present) along with 32 species common to Africa and 11 species common to Europe. Users can also finetune models using their own labeled videos to then make predictions for new species and/or new ecologies.

`zamba` can be used both as a command-line tool and as a Python package. It is also available as a user-friendly website application, [Zamba Cloud](https://www.zambacloud.com/).

We encourage people to share their custom models trained with Zamba. If you train a model and want to make it available, please add it to the [Model Zoo Wiki](https://github.com/drivendataorg/zamba/wiki) for others to be able to use!

## Installing `zamba`

First, make sure you have the prerequisites installed:

* Python 3.8 or 3.9
* FFmpeg > 4.3

Then run:
```console
pip install https://github.com/drivendataorg/zamba/releases/latest/download/zamba.tar.gz
```

See the [Installation](install/) page of the documentation for details.

## Getting started

Once you have `zamba` installed, some good starting points are:

- The [Quickstart](quickstart/) page for basic examples of usage
- The user tutorial for either [classifying videos](predict-tutorial/) or [training a model](train-tutorial/) depending on what you want to do with `zamba`

## Example usage

Once `zamba` is installed, you can see the basic command options with:
```console
$ zamba --help

 Usage: zamba [OPTIONS] COMMAND [ARGS]...

 Zamba is a tool built in Python to automatically identify the species seen in camera trap
 videos from sites in Africa and Europe. Visit https://zamba.drivendata.org/docs for more
 in-depth documentation.

╭─ Options ─────────────────────────────────────────────────────────────────────────────────╮
│ --version                     Show zamba version and exit.                                │
│ --install-completion          Install completion for the current shell.                   │
│ --show-completion             Show completion for the current shell, to copy it or        │
│                               customize the installation.                                 │
│ --help                        Show this message and exit.                                 │
╰───────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────────╮
│ densepose      Run densepose algorithm on videos.                                         │
│ depth          Estimate animal distance at each second in the video.                      │
│ predict        Identify species in a video.                                               │
│ train          Train a model on your labeled data.                                        │
╰───────────────────────────────────────────────────────────────────────────────────────────╯
```

`zamba` can be used "out of the box" to generate predictions or train a model using your own videos. `zamba` supports the same video formats as FFmpeg, [which are listed here](https://www.ffmpeg.org/general.html#Supported-File-Formats_002c-Codecs-or-Features). Any videos that fail a set of FFmpeg checks will be skipped during inference or training.

### Classifying unlabeled videos

```console
$ zamba predict --data-dir path/to/videos
```

By default, predictions will be saved to `zamba_predictions.csv`. Run `zamba predict --help` to list all possible options to pass to `predict`.

See the [Quickstart](quickstart/) page or the user tutorial on [classifying videos](predict-tutorial/) for more details.

### Training a model

```console
$ zamba train --data-dir path/to/videos --labels path_to_labels.csv --save_dir my_trained_model
```

The newly trained model will be saved to the specified save directory. The folder will contain a model checkpoint as well as training configuration, model hyperparameters, and validation and test metrics. Run `zamba train --help` to list all possible options to pass to `train`.

You can use your trained model on new videos by editing the `train_configuration.yaml` that is generated by `zamba`. Add a `predict_config` section to the yaml that points to the checkpoint file that is generated:

```yaml
...
# generated train_config and video_loader_config
...

predict_config:
  checkpoint: PATH_TO_YOUR_CHECKPOINT_FILE

```

Now you can pass this configuration to the command line. See the [Quickstart](quickstart/) page or the user tutorial on [training a model](train-tutorial/) for more details.

You can then share your model with others by adding it to the [Model Zoo Wiki](https://github.com/drivendataorg/zamba/wiki).

### Estimating distance between animals and the camera

```console
$ zamba depth --data-dir path/to/videos
```

By default, predictions will be saved to `depth_predictions.csv`. Run `zamba depth --help` to list all possible options to pass to `depth`.

See the [depth estimation page](models/depth/) for more details.

## Contributing

We would love your contributions of code fixes, new models, additional training data, docs revisions, and anything else you can bring to the project!

See the docs page on [contributing to `zamba`](contribute/) for details.

repository: drivendataorg/zamba

gha_language: Python

repo_name: drivendataorg/zamba


text:
---
speaker : Mr. Biplab Basak (IISc Mathematics)
title   : Minimal crystallizations of 3- and 4-manifolds
date    :  17th March, 2015 (Tuesday)
time    : 2 p.m. - 3 p.m.
venue   : Lecture Hall III, Department of Mathematics
series: Thesis
series-prefix: PhD
series-suffix: colloquium
---

This thesis addresses many important results of crystallization theory in
combinatorial topology. The main contributions in this thesis are the
followings:

(i) We introduce the weight of a group which has a presentation with
number of relations is at most the number of generators.
We prove that the number of vertices of any crystallization of a connected
closed 3-manifold $M$ is at least the weight of the
fundamental group of $M$. This lower bound is sharp for the 3-manifolds
`$\mathbb{R P}^3$`, $L(3,1)$, $L(5,2)$, `$S^1\times S^1 \times S^1$`,
`$S^{\hspace{.2mm}2} \times S^1$`, `$\TPSS$` and `$S^{\hspace{.2mm}3}/Q_8$`,
where `$Q_8$` is the quaternion group. Moreover,
there is a unique such vertex minimal crystallization in each of these
seven cases.  We also construct crystallizations of
$L(kq-1,q)$ with $4(q+k-1)$ vertices for `$q \geq 3$`, `$k \geq 2$` and
$L(kq+1,q)$ with $4(q+k)$ vertices for $q\geq 4$, $k\geq 1$. By a recent
result of Swartz,
our crystallizations of $L(kq+1, q)$ are facet minimal when $kq+1$ are even.

(ii) We present an algorithm to find certain types of crystallizations of
$3$-manifolds from a given  presentation `$\langle S \mid R \rangle$` with
`$\#S=\#R=2$`.  We generalize this algorithm for presentations with three
generators and certain class of relations.
This gives us crystallizations of closed connected orientable 3-manifolds
having fundamental groups `$\langle x_1,x_2,x_3 \mid
x_1^m=x_2^n=x_3^k=x_1x_2x_3 \rangle$` with `$4(m+n+k-3)+ 2\delta_n^2 + 2
\delta_k^2$` vertices for `$m\geq 3$` and `$m \geq n \geq k \geq 2$`, where
`$\delta_i^j$` is the Kronecker delta.
If $n=2$  or `$k\geq 3$` and `$m \geq 4$` then these crystallizations
are vertex-minimal for all the known cases.

(iii) We found a minimal crystallization of the standard pl K3 surface.
This minimal crystallization is a 'simple crystallization'.
Using this, we present minimal crystallizations of all simply connected pl
$4$-manifolds of "standard" type, i.e., all the connected sums of
`$\mathbb{CP}^2$`, `$S^2 \times S^2$`, and the K3 surface. In particular, we
found minimal crystallizations of a pair of 4-manifolds which are
homeomorphic
but not pl-homeomorphic.

repository: siddhartha-gadgil/DeptWeb

repo_name: siddhartha-gadgil/DeptWeb


text:
Steps per second monitor.
- - -

#### `tf.train.StepCounterHook.__init__(every_n_steps=100, every_n_secs=None, output_dir=None, summary_writer=None)` {#StepCounterHook.__init__}

- - -

#### `tf.train.StepCounterHook.after_create_session(session, coord)` {#StepCounterHook.after_create_session}

Called when new TensorFlow session is created.

This is called to signal the hooks that a new session has been created. This
has two essential differences with the situation in which `begin` is called:

* When this is called, the graph is finalized and ops can no longer be added
    to the graph.
* This method will also be called as a result of recovering a wrapped
    session, not only at the beginning of the overall session.

The `session` argument can be used in case the hook wants to run final ops,
such as saving a last checkpoint.

##### Args:

*  <b>`session`</b>: A TensorFlow Session that will be soon closed.

repository: yijunyu/demo

gha_language: C

repo_name: yijunyu/demo