Skip to main content\(\require{cancel}\require{upgreek} \newcommand{\ds}{\displaystyle}
 \renewcommand{\textcolor}[2]{{\color{#1}{#2}}}
 
 \newcommand{\es}{ {\varnothing}}
 \newcommand{\st}{ \;\mathrm{s.t.}\; }
 \newcommand{\so}{ \;\mid\; }
 \newcommand{\pow}[1]{ \mathcal{P}\left(#1\right) }
 \newcommand{\set}[1]{ \left\{#1\right\} }
 
 \renewcommand{\neg}{\sim}
 \newcommand{\rel}[1][R]{\;\mathcal{#1}\;}
 \newcommand{\nrel}[1][R]{\;\cancel{\mathcal{#1}}\;}
 \newcommand{\dee}[1]{\mathrm{d}#1}
 \newcommand{\diff}[2]{\dfrac{\mathrm{d}#1}{\mathrm{d}#2}}
 
 \renewcommand{\mod}[1]{\ (\mathrm{mod}\ #1)}
 \newcommand{\lcm}{\mathrm{lcm}}
 
 \let\oldepsilon\epsilon
 
 \renewcommand{\epsilon}{\varepsilon}
 \newcommand{\ceil}[1]{\left\lceil #1 \right\rceil}
\newcommand{\lt}{<}
\newcommand{\gt}{>}
\newcommand{\amp}{&}
\definecolor{fillinmathshade}{gray}{0.9}
\newcommand{\fillinmath}[1]{\mathchoice{\colorbox{fillinmathshade}{$\displaystyle     \phantom{\,#1\,}$}}{\colorbox{fillinmathshade}{$\textstyle        \phantom{\,#1\,}$}}{\colorbox{fillinmathshade}{$\scriptstyle      \phantom{\,#1\,}$}}{\colorbox{fillinmathshade}{$\scriptscriptstyle\phantom{\,#1\,}$}}}
\)
PLP: An introduction to mathematical proof
August 15, 2023