From 140819d51170d38e231b940e9f96ca3bad72c421 Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Wed, 16 Oct 2024 01:28:30 -0500 Subject: [PATCH] more work on the talk --- talks/2024-grads/decodecube.png | Bin 0 -> 45874 bytes talks/2024-grads/main.tex | 224 ++++++++++++++++++++++++++++++-- 2 files changed, 211 insertions(+), 13 deletions(-) create mode 100644 talks/2024-grads/decodecube.png diff --git a/talks/2024-grads/decodecube.png b/talks/2024-grads/decodecube.png new file mode 100644 index 0000000000000000000000000000000000000000..b47019f0fc37eed807cf4000d25ce5d3a1e86555 GIT binary patch literal 45874 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

*iq>=;C)lK18S(hbUcUQ z)o<3d_BK$WFrhv#v>~2dE?erM5I&IM`);AC|Rj*f+;R?K!tc>0REs7`_nz1v%T$;^o!^T-y6$9ZIhFV40` zD|qbt0+qCPt>R;2Z8eq_x|Xt#rO#nq`26^~k=~&{lB&n+2~Ch6o>~=o6*7`q4ItEN z64=of!7CE^BLhiuo$Nt#7yLD;BsJ+6&Jy8J@%is^i(w=nB+%xij07aMa AIsgCw literal 0 HcmV?d00001 diff --git a/talks/2024-grads/main.tex b/talks/2024-grads/main.tex index 389fb99..b6db01a 100644 --- a/talks/2024-grads/main.tex +++ b/talks/2024-grads/main.tex @@ -1,8 +1,14 @@ -\documentclass{beamer} -\usetheme{Darmstadt} -\usepackage{bussproofs} -\setbeameroption{show notes on second screen=right} +\documentclass[a4paper]{beamer} +\useoutertheme{miniframes} +% \usetheme{Darmstadt} + +\usepackage[TU,T1]{fontenc} +\usepackage{hyperref} +\usepackage{bussproofs} +\usepackage{geometry} + +% \setbeameroption{show notes on second screen=right} \title{Formalizing mathematics with cubical type theory} \author{Michael Zhang} @@ -11,9 +17,22 @@ \begin{document} +\section{Introduction} + \frame{\titlepage} -\section{Theorem prover intro} +% \begin{frame} +% \frametitle{About me} + +% \begin{itemize} +% \item Third-year master's student with \textbf{Favonia} +% \item Worked several years as a software engineer at Epic, Amazon, Swoop +% \item Binary analysis researcher at defense contractor SIFT +% \item Previously officer of GopherHack, UMN, SASE +% \end{itemize} +% \end{frame} + +\section{Theorem provers} \begin{frame} \frametitle{Intro} @@ -41,16 +60,19 @@ \frametitle{Demo} \end{frame} -\section{Homotopy type theory} +\section{Type theory} \begin{frame} \frametitle{Curry-Howard Isomorphism, or "proofs are programs"} - \begin{tabular}{c|c} - Logic & Programming \\ - \hline - c & d \\ - \end{tabular} + \begin{itemize} + \item Hypotheses are free variables + \item Functions are implication + \item Pairs are AND + \item Unions are OR + \item Universal quantification ($\forall$) is dependent types + \item Existential quantification ($\exists$) is dependent sums + \end{itemize} \end{frame} \begin{frame} @@ -69,15 +91,191 @@ \TrinaryInfC{$ \Gamma \vdash \mathsf{ind}_{\mathbb{N}} (c_0 , x . y . c_s , n) : C $} \end{prooftree} - \item \emph{Dependent types}: + \item \emph{Dependent types}, or $\Pi$-types: $$ \mathsf{Vec} : (A : \mathsf{Type}) \rightarrow (n : \mathbb{N}) \rightarrow \mathsf{Type} $$ + + \item \emph{Dependent sums}, or $\Sigma$-types + \item The identity type, $\mathsf{Id}_A(x, y)$, for some $x, y : A$ + \begin{itemize} + \item Also written as $x \equiv_A y$, or just $x \equiv y$ if $A$ is obvious + \end{itemize} \end{itemize} \footnotetext[1]{This is the non-dependent version of the induction principle} \end{frame} +\begin{frame} + \frametitle{Homotopy type theory} + + \begin{itemize} + \item A \textcolor{orange}{"homotopy"}, from algebraic topology, is a way to continuously deform one path into another ($A \times [0, 1] \rightarrow B$) + \item In type theory, we can imagine two functions \textcolor{blue}{$f, g : A \rightarrow B$} as being homotopic if we can inhabit $h : (x : A) \rightarrow \mathsf{Id}_B (f(x), g(x))$ + \item Note: assume all functions are continuous. + \item Interpret \textcolor{orange}{paths between points in a space} as the \textcolor{blue}{identity type $\mathsf{Id}$} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Univalence axiom} + + \begin{itemize} + \item Equivalences \emph{are} identities + $$ (A \simeq B) \simeq (A \equiv B) $$ + + \note[item]{Essentially, if you can prove a way to go back and forth between $A$ and $B$, then $A$ and $B$ can be identified} + \item + Intuitively, if you wanted to use a $B$ where you wanted to use an $A$, just convert it and then convert it back later + + \item Importantly, there can be multiple inhabitants of $A \equiv B$ + \begin{itemize} \item Booleans! \end{itemize} + + \item + Transport allows you to use $A$ and $B$ interchangeably + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Univalence axiom?} + + \begin{itemize} + \item Unfortunately, univalence does not compute + \item Neither does function extensionality + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Cubical type theory} + + \begin{itemize} + \item Make the interval type a primitive construct + \item Construct $n$-cubes to create paths by composition and filling + \item Gives us a way to make the univalence axiom a provable theorem + \item Have to re-formulate some of the constructions + \end{itemize} +\end{frame} + \section{Fundamental group of a circle} -\begin{frame} \end{frame} +\begin{frame} + \frametitle{The fundamental group $\pi_1$} + + \begin{itemize} + \item Main idea of algebraic topology: identify which spaces are different from each other + \item The fundamental group is one metric of identifying spaces (i.e donuts and coffee mugs would have the same group) + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{The circle} + + \begin{itemize} + \item The circle ($S^1$) is an example of a simple but non-trivial space + \note[item]{it's called $S^1$ because it generalizes into higher dimensions} + + \item Finding fundamental groups of $n$-spheres is one of the interesting problems in algebraic topology + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{The circle} + + \begin{itemize} + \item $\mathsf{base} : S^1$, some arbitrary base point + \item $\mathsf{loop} : \mathsf{base} \equiv \mathsf{base}$, a generic way of constructing the rest of the circle + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{The fundamental group of the circle} + + \begin{itemize} + \note[item]{glossing over some details, loop space asks about the point base only} + \item Fundamental group asks us about the loops in the circle space: $\mathsf{base} \equiv \mathsf{base}$ + \begin{itemize} + \item ... + \item $\mathsf{loop}^{-1} \cdot \mathsf{loop}^{-1}$\ + \item $\mathsf{loop}^{-1}$ + \item $\mathsf{refl}$ + \item $\mathsf{loop}$ + \item $\mathsf{loop} \cdot \mathsf{loop}$ + \item ... + \end{itemize} + + + \item The fundamental group of the circle space is the integers + $$ \pi_1(S^1) \simeq \mathbb{Z} $$ + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{The fundamental group of the circle, core idea} + + \begin{itemize} + \item Use a helix to represent both! + \item Need to define functions: + \begin{itemize} + \item $ f : \pi_1(S^1) \rightarrow \mathbb{Z} $ + \item $ g : \pi_1(S^1) \leftarrow \mathbb{Z} $ + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Homotopy type theory proof} + + \begin{itemize} + \item For $g : \mathbb{Z} \rightarrow \pi_1(S^1)$, we can just add $\mathsf{loop}$s to $\mathsf{refl}$ inductively + \begin{itemize} + \item $g(-1 + n) = \mathsf{loop}^{-1} \cdot g(n)$ + \item $g(0) = \mathsf{refl}$ + \item $g(n + 1) = g(n) \cdot \mathsf{loop}$ + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Homotopy type theory proof} + + \begin{itemize} + \item For $f : \pi_1(S^1) \rightarrow \mathbb{Z}$, use univalence! + \item The increment function $\mathsf{suc}$ is actually an equivalence between $\mathbb{Z}_{0}$ and $\mathbb{Z}_{+1}$ + \item Define the helix: + \begin{itemize} + \item $\mathsf{helix} : S^1 \rightarrow \mathsf{Type}$ + \item $\mathsf{helix}(\mathsf{base}) = \mathbb{Z}$ + \item $\mathsf{helix}(\mathsf{loop}) = \mathsf{ua}(\mathsf{suc})$ + \end{itemize} + \item This allows us to compute using any loop + \item $\mathsf{transport}^{\mathsf{helix}}(p, 0)$ + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Homotopy type theory proof} + + \begin{itemize} + \item + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Cubical type theory proof} + + \begin{figure} + \centering + \includegraphics[width=0.75\textwidth]{./decodecube.png} + \end{figure} +\end{frame} + +\section{Conclusion} + +\begin{frame} + \frametitle{Conclusion} + + \begin{itemize} + \item Code: \url{https://git.mzhang.io/michael/type-theory} + \item Cube visualizer: \url{https://mzhang.io/cubeviz} + \end{itemize} +\end{frame} \end{document} \ No newline at end of file