\documentclass{article}

\input{~/projects/latex/janishutz-helpers.tex}

\usepackage{tikz}
\usetikzlibrary{positioning, arrows.meta}

\usepackage{lmodern}
\usepackage{ebproof}
\usepackage{overarrows}
\usepackage{bm}

\NewOverArrowCommand{\overrightharpoon}{%
    end=\rightharpoonup
}
\ebproofset{separation=2.5em}
\setFontType{sans}
\multicolsep 5pt plus 2pt minus 2pt

\setcounter{secnumdepth}{5}
\makeatletter
\renewcommand\subparagraph{%
    \@startsection{subparagraph}{5}{0mm}%
    {-.5\baselineskip}%
    {.25\baselineskip}%
    {\normalfont\normalsize\bfseries}}
\makeatother

\setup{Formal Methods \& Functional Programming}

% ────────────────────────────────────────────────────────────────────

\begin{document}
\startDocument
\mediumverticalspacing

\vspace{1cm}
\begin{center}
    \includegraphics[width=0.5\linewidth]{~/projects/latex/assets/logo.jpg}
\end{center}


\vspace{2cm}
\begin{center}
    \begin{Large}
        \quote{A funny quote by a professor}
    \end{Large}

    \hspace{3cm} - Prof. Dr. Professor Name, YEAR
\end{center}

\vspace{1.5cm}
\begin{center}
    FS2026, ETHZ

    \begin{Large}
        Summary of the Lecture Slides
    \end{Large}

    \url{https://infsec.ethz.ch/education/ss2026/fmfp.html}
\end{center}


\newpage
\printtoc{Aquamarine}

% TODO: Strong and weak structural induction and more


\newsection
\section{Haskell}
\input{parts/00_haskell/00_intro.tex}
\input{parts/00_haskell/01_syntax.tex}


\newsection
\section{Induction Proofs}
\label{sec:induction-proofs}
\input{parts/01_induction-proofs/00_intro.tex}
\input{parts/01_induction-proofs/01_mathematical-induction.tex}
\input{parts/01_induction-proofs/02_structural-induction.tex}
\input{parts/01_induction-proofs/03_induction-on-trees.tex}
\input{parts/01_induction-proofs/04_other-induction.tex}
% \input{parts/01_induction-proofs/}

\newsection
\section{Formal Reasoning}
\input{parts/02_formal-reasoning/00_formal-proofs.tex}
\input{parts/02_formal-reasoning/01_natural-deduction.tex}
\input{parts/02_formal-reasoning/02_propositional-logic/00_syntax.tex}
\input{parts/02_formal-reasoning/02_propositional-logic/01_semantics.tex}
\input{parts/02_formal-reasoning/02_propositional-logic/02_deductive-system.tex}
\input{parts/02_formal-reasoning/02_propositional-logic/03_natural-deduction-prop-logic.tex}
\input{parts/02_formal-reasoning/02_propositional-logic/04_derivation-rules-overview.tex}
\input{parts/02_formal-reasoning/03_first-order-logic/00_syntax.tex}
\input{parts/02_formal-reasoning/03_first-order-logic/01_semantics.tex}
\input{parts/02_formal-reasoning/03_first-order-logic/02_quantifiers.tex}
\input{parts/02_formal-reasoning/04_equality.tex}
\input{parts/02_formal-reasoning/05_correctness/00_intro.tex}
\input{parts/02_formal-reasoning/05_correctness/01_termination.tex}
\input{parts/02_formal-reasoning/05_correctness/02_behaviour.tex}
% \input{parts/02_formal-reasoning/05_correctness/}
% \input{parts/02_formal-reasoning/}


\newsection
\section{Typing}
\input{parts/03_typing/00_intro.tex}
\input{parts/03_typing/01_mini-haskell/00_syntax.tex}
\input{parts/03_typing/01_mini-haskell/01_lambda-calculus.tex}
\input{parts/03_typing/01_mini-haskell/02_further-rules.tex}
\input{parts/03_typing/01_mini-haskell/03_type-inference.tex}
\input{parts/03_typing/02_algebraic-data-types/00_correctness.tex}
\input{parts/03_typing/02_algebraic-data-types/01_induction-nat-num.tex}
\input{parts/03_typing/02_algebraic-data-types/02_lists.tex}
\input{parts/03_typing/02_algebraic-data-types/03_trees.tex}
\input{parts/03_typing/03_interpreter/00_intro.tex}
\input{parts/03_typing/03_interpreter/01_read.tex}
\input{parts/03_typing/03_interpreter/02_eval.tex}
% \input{parts/03_typing/03_interpreter/}


\newsection
\section{Language Semantics}
\input{parts/04_language-semantics/00_imp/00_syntax.tex}
\input{parts/04_language-semantics/00_imp/01_semantics.tex}
\input{parts/04_language-semantics/00_imp/02_properties.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/00_transition-systems.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/01_semantics.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/02_instantiations.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/03_termination.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/04_semantic-equivalence.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/05_unfolding-loops.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/06_deterministic-semantics.tex}
\input{parts/04_language-semantics/01_operational-semantics/00_big-step-semantics/07_extensions-of-imp.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/00_structural-operational-semantics.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/01_rules.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/02_multi-step-derivation-seq.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/03_termintation.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/04_proofs.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/05_semantic-equivalence.tex}
\input{parts/04_language-semantics/01_operational-semantics/01_small-step-semantics/06_extensions.tex}
\input{parts/04_language-semantics/01_operational-semantics/02_equiv.tex}
\input{parts/04_language-semantics/01_operational-semantics/03_rules-summary.tex}
\input{parts/04_language-semantics/02_axiomatic-semantics/00_intro.tex}
\input{parts/04_language-semantics/02_axiomatic-semantics/01_hoare-logic/00_triples-assertions.tex}
\input{parts/04_language-semantics/02_axiomatic-semantics/01_hoare-logic/01_derivation-systems.tex}
\input{parts/04_language-semantics/02_axiomatic-semantics/01_hoare-logic/02_total-correctness.tex}
\input{parts/04_language-semantics/02_axiomatic-semantics/02_soundness-completeness.tex}
% \input{parts/04_language-semantics/}

\newsection
\section{Modelling}
\input{parts/05_modelling/00_intro.tex}
\input{parts/05_modelling/01_promela/00_syntax.tex}
\input{parts/05_modelling/01_promela/01_expressions.tex}
\input{parts/05_modelling/01_promela/02_statements.tex}
\input{parts/05_modelling/01_promela/03_macros.tex}
\input{parts/05_modelling/02_linear-temporal-logic/00_linear-time-properties.tex}
\input{parts/05_modelling/02_linear-temporal-logic/01_linear-temporal-logic.tex}
% \input{parts/05_modelling/02_linear-temporal-logic/}
% \input{parts/05_modelling/}


\newsection
\section{Exercises}
\subsection{Introduction}
\input{parts/06_exercises/00_intro.tex}

\subsection{Functional Programming}
\input{parts/06_exercises/01_fp/00_eval-strats.tex}
\input{parts/06_exercises/01_fp/01_haskell.tex}
\input{parts/06_exercises/01_fp/02_natural-deduction.tex}
\input{parts/06_exercises/01_fp/03_type-inference.tex}
% \input{parts/06_exercises/01_fp/}

\subsection{Induction}
For induction proofs, see Section~\ref{sec:induction-proofs}, which were moved up, since they are used in both FP and FM,
as well as being mentioned a few times in the rest of the summary.

\subsection{Formal Methods}
\input{parts/06_exercises/02_fm/00_imp.tex}
\input{parts/06_exercises/02_fm/01_operational-semantics.tex}
\input{parts/06_exercises/02_fm/02_axiomatic-semantics.tex}
\input{parts/06_exercises/02_fm/03_modelling.tex}
\input{parts/06_exercises/02_fm/04_ltl.tex}
% \input{parts/06_exercises/02_fm/}
% \input{parts/06_exercises/}

\input{parts/06_exercises/03_checklist.tex}


\end{document}
