Commit b47a5c84 authored by Taddeus Kroes's avatar Taddeus Kroes

funclang series2: Added report.

parent ce96be5e
\documentclass[10pt,a4paper]{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,hyperref,graphicx,booktabs,float,listings}
% Paragraph indentation
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
\title{Functional Languages - Assignment series 2}
\author{Tadde\"us Kroes (6054129)}
\begin{document}
\maketitle
\section{Assignment 4}
Assignment: \emph{Define the Boolean functions negation, disjunction and
conjunction as $\lambda$-terms.}
\newcommand{\s}{\hspace{2mm}}
\newcommand{\true}{\lambda a.\lambda b.a}
\newcommand{\truea}{\lambda u.\lambda v.u}
\newcommand{\false}{\lambda a.\lambda b.b}
\newcommand{\falsea}{\lambda u.\lambda v.v}
\subsection{Negation}
Negation flips the value of a boolean (TRUE becomes FALSE and vice versa).
Consider $\neg = \lambda b.\lambda x.\lambda y.((b \s y) \s x)$.
Given that $TRUE = \true$ and $FALSE = \false$, we can make the following
derivations:
\begin{table}[H]
\begin{tabular}{rl}
$\neg TRUE$ & $= (\lambda b.\lambda x.\lambda y.((b \s y) \s x) \s \true)$ \\
& $\rightarrow_{\beta} \lambda x.\lambda y.((\true \s y) \s x)$ \\
& $\rightarrow_{\beta} \lambda x.\lambda y.(\lambda b.y \s x)$ \\
& $\rightarrow_{\beta} \lambda x.\lambda y.y$ \\
& $\equiv_{\alpha} FALSE$ \\
& \\
$\neg FALSE$ & $= (\lambda b.\lambda x.\lambda y.((b \s y) \s x) \s \false)$ \\
& $\rightarrow_{\beta} \lambda x.\lambda y.((\false \s y) \s x)$ \\
& $\rightarrow_{\beta} \lambda x.\lambda y.(\lambda b.b \s x)$ \\
& $\rightarrow_{\beta} \lambda x.\lambda y.x$ \\
& $\equiv_{\alpha} TRUE$ \\
\end{tabular}
\end{table}
TRUE and FALSE are both flipped, so the function $\neg$ is correct.
\pagebreak
\subsection{Disjunction}
The disjunction function $\vee$ should have the following properties: \\
TRUE $\vee$ TRUE = TRUE \\
TRUE $\vee$ FALSE = TRUE \\
FALSE $\vee$ TRUE = TRUE \\
FALSE $\vee$ FALSE = FALSE
Consider $\vee = \lambda p.\lambda q.((p \s p) \s q)$. Given the functions for
TRUE and FALSE, the combination of the following derivations proves that the
function $\vee$ is correct:
\begin{table}[H]
\begin{tabular}{rl}
$TRUE \s\vee\s TRUE$ & $= (\lambda p.(\lambda q.((p \s p) \s q) \s \true) \s \true)$ \\
& $\rightarrow_{\beta} (\lambda q.((\true \s \true) \s q) \s \true)$ \\
& $\rightarrow_{\beta} ((\true \s \true) \s \true)$ \\
& $\rightarrow_{\alpha,\beta} (\lambda b.\truea \s \true)$ \\
& $\rightarrow_{\beta} \truea$ \\
& $\equiv_{\alpha} TRUE$ \\
& \\
$TRUE \s\vee\s FALSE$ & $= (\lambda p.(\lambda q.((p \s p) \s q) \s \false) \s \true)$ \\
& $\rightarrow_{\beta} (\lambda q.((\true \s \true) \s q) \s \false)$ \\
& $\rightarrow_{\beta} ((\true \s \true) \s \false)$ \\
& $\rightarrow_{\alpha,\beta} (\lambda b.\truea \s \false)$ \\
& $\rightarrow_{\beta} \truea$ \\
& $\equiv_{\alpha} TRUE$ \\
& \\
$FALSE \s\vee\s TRUE$ & $= (\lambda p.(\lambda q.((p \s p) \s q) \s \true) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda q.((\false \s \false) \s q) \s \true)$ \\
& $\rightarrow_{\beta} ((\false \s \false) \s \true)$ \\
& $\rightarrow_{\beta} (\lambda b.b \s \true)$ \\
& $\rightarrow_{\beta} \true$ \\
& $\equiv_{\alpha} TRUE$ \\
& \\
$FALSE \s\vee\s FALSE$ & $= (\lambda p.(\lambda q.((p \s p) \s q) \s \false) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda q.((\false \s \false) \s q) \s \false)$ \\
& $\rightarrow_{\beta} ((\false \s \false) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda b.b \s \false)$ \\
& $\rightarrow_{\beta} \false$ \\
& $\equiv_{\alpha} FALSE$ \\
\end{tabular}
\end{table}
\pagebreak
\subsection{Conjunction}
The disjunction function $\wedge$ should have the following properties: \\
TRUE $\wedge$ TRUE = TRUE \\
TRUE $\wedge$ FALSE = FALSE \\
FALSE $\wedge$ TRUE = FALSE \\
FALSE $\wedge$ FALSE = FALSE
Consider $\wedge = \lambda p.\lambda q.((p \s q) \s p)$. Given the functions for
TRUE and FALSE, the combination of the following derivations proves that the
function $\wedge$ is correct:
\begin{table}[H]
\begin{tabular}{rl}
$TRUE \s\wedge\s TRUE$ & $= (\lambda p.(\lambda q.((p \s q) \s p) \s \true) \s \true)$ \\
& $\rightarrow_{\beta} (\lambda q.((\true \s q) \s \true) \s \true)$ \\
& $\rightarrow_{\beta} ((\true \s \true) \s \true)$ \\
& $\rightarrow_{\alpha,\beta} (\lambda b.\truea \s \true)$ \\
& $\rightarrow_{\beta} \truea$ \\
& $\equiv_{\alpha} TRUE$ \\
& \\
$TRUE \s\wedge\s FALSE$ & $= (\lambda p.(\lambda q.((p \s q) \s p) \s \false) \s \true)$ \\
& $\rightarrow_{\beta} (\lambda q.((\true \s q) \s \true) \s \false)$ \\
& $\rightarrow_{\beta} ((\true \s \false) \s \true)$ \\
& $\rightarrow_{\alpha,\beta} (\lambda b.\falsea \s \true)$ \\
& $\rightarrow_{\beta} \falsea$ \\
& $\equiv_{\alpha} FALSE$ \\
& \\
$FALSE \s\wedge\s TRUE$ & $= (\lambda p.(\lambda q.((p \s q) \s p) \s \true) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda q.((\false \s q) \s \false) \s \true)$ \\
& $\rightarrow_{\beta} ((\false \s \true) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda b.b \s \false)$ \\
& $\rightarrow_{\beta} \false$ \\
& $\equiv_{\alpha} FALSE$ \\
& \\
$FALSE \s\wedge\s FALSE$ & $= (\lambda p.(\lambda q.((p \s q) \s p) \s \false) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda q.((\false \s q) \s \false) \s \false)$ \\
& $\rightarrow_{\beta} ((\false \s \false) \s \false)$ \\
& $\rightarrow_{\beta} (\lambda b.b \s \false)$ \\
& $\rightarrow_{\beta} \false$ \\
& $\equiv_{\alpha} FALSE$ \\
\end{tabular}
\end{table}
\section{Assignment 5}
See appendix \ref{appendix:ass5} (file \emph{ass5.ml}) for my implementation
of the functions \texttt{isLeapYear}, \texttt{date2str}, \texttt{digitRoot}
and \texttt{isPalindrome}.
\pagebreak
\appendix
\section{ass5.ml}
\label{appendix:ass5}
\lstinputlisting{ass5.ml}
\end{document}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment