%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode
% Lxsameer's CV Latex class
% Copyright (C) 2022 Sameer Rahmani <lxsameer@gnu.org>
%
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

\documentclass{lxpresent}

\date{\today}
\title{Mathematics of Programming Languages}
\setep{01}{The first step to design a language}


\begin{document}
\maketitle
\begin{frame}{So far\ldots}{}
  \begin{itemize}
  \item In the first season, we created a super simple compiler
  \item We learned about the basics of LLVM and MLIR
  \item We created a basic platform to develop a programming language, that includes:
    \begin{itemize}
    \item A parser
    \item A JIT engine
    \item A code generation pipeline
    \item and few other bits and pieces
    \end{itemize}
  \item BUT we didn't come up with a specification for \href{https://serene-lang.org}{Serene}
  \item We didn't design the language, yet
  \item That's what we're going to do in this series
  \end{itemize}
\end{frame}

\begin{frame}{Specification}{}
  \begin{itemize}
  \item Not all the programming langs have specification
  \item A spec or standard brings clarity for users and developers
  \item We could've just implemented an already exist spec like \href{http://www.r6rs.org/}{R6RS} (Scheme)
  \item Or just create a language based on our intuition (many languages have done this)
  \item Or design a standard from scratch \\
    We can use about 100 years of Mathematics and Computer Science to our benefit
  \end{itemize}
\end{frame}

\begin{frame}{Where to look?}
  \begin{itemize}
  \item Based on the experience, we have some initial idea on where to look
  \item Later on, we will find out whether our initial ideas were good
  \item For example,
    \begin{itemize}
    \item I prefer functional programming
    \item Dynamic type systems
    \item \ldots
    \end{itemize}
  \item We can start from there and study what we think is true and also any alternative to them
  \end{itemize}
\end{frame}

\begin{frame}{Where we want to look}
  \begin{itemize}
  \item There are few major theories we can start from:
    \begin{itemize}
    \item Type theory
    \item Category theory
    \item Proof theory
    \end{itemize}
  \item They all describe the same world from different perspectives
  \item Furthermore, there are few papers that we need to look at, like the lisp paper
  \end{itemize}
\end{frame}

\begin{frame}{Required tools}
  \begin{itemize}
  \item We need to build up few mathematical skills
  \item E.g. We have to learn:
    \begin{itemize}
    \item Logic
    \item Set theory
    \item and discrete mathematics in general
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{The Plan}{}
  \begin{itemize}
  \item I like this series to be self-contained as much as possible
  \item We're going to start from basics
  \item We will cover
    \begin{itemize}
    \item What is mathematics? And why do we need it?
    \item Mathematical thinking
    \item Discrete mathematics
    \item $\lambda$-calculus
    \item Type theory
    \item and the rest
    \end{itemize}
  \item We will study the history of computer science and mathematics as well.
  \item History is a great guide
  \end{itemize}
\end{frame}

\begin{frame}{Disclaimer}{}
  \begin{itemize}
  \item I'm not a professional mathematician.
  \item I'm just sharing the result of my research and things that I learn. Take it with a grain of salt.
  \item ``Nullius in verba''
  \end{itemize}
\end{frame}

\begin{frame}{Contact}{}
  Please, share your thoughts and ideas or researches and papers that you want me to have a look at via:
  \begin{itemize}
  \item Comment section on \href{https://youtube.com/c/lxsameer}{youtube}
  \item \href{https://lxsameer.com}{https://lxsameer.com}
  \end{itemize}
\end{frame}
\end{document}
