Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
% (find-angg "LATEX/2018jacobs.tex")
% (defun c () (interactive) (find-LATEXsh "lualatex -record 2018jacobs.tex" :end))
% (defun d () (interactive) (find-xpdfpage "~/LATEX/2018jacobs.pdf"))
% (defun b () (interactive) (find-zsh "bibtex 2018jacobs; makeindex 2018jacobs"))
% (defun e () (interactive) (find-LATEX "2018jacobs.tex"))
% (defun u () (interactive) (find-latex-upload-links "2018jacobs"))
% (find-xpdfpage "~/LATEX/2018jacobs.pdf")
% (find-sh0 "cp -v  ~/LATEX/2018jacobs.pdf /tmp/")
% (find-sh0 "cp -v  ~/LATEX/2018jacobs.pdf /tmp/pen/")
%   file:///home/edrx/LATEX/2018jacobs.pdf
%               file:///tmp/2018jacobs.pdf
%           file:///tmp/pen/2018jacobs.pdf
% http://angg.twu.net/LATEX/2018jacobs.pdf

% «.abstract»			(to "abstract")
% «.contents»			(to "contents")
%
% «.types-0»			(to "types-0")
% «.comprehension»		(to "comprehension")
% «.comprehension-tables»	(to "comprehension-tables")
% «.cartesian-product»		(to "cartesian-product")
% «.comprehension-exercises»	(to "comprehension-exercises")

\documentclass[oneside]{article}
\usepackage[colorlinks]{hyperref} % (find-es "tex" "hyperref")
%\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{pict2e}
\usepackage{color}                % (find-LATEX "edrx15.sty" "colors")
\usepackage{colorweb}             % (find-es "tex" "colorweb")
%\usepackage{tikz}
%
% (find-dn6 "preamble6.lua" "preamble0")
\usepackage{proof}   % For derivation trees ("%:" lines)
\input diagxy        % For 2D diagrams ("%D" lines)
%\xyoption{curve}     % For the ".curve=" feature in 2D diagrams
%
\usepackage{edrx15}               % (find-angg "LATEX/edrx15.sty")
\input edrxaccents.tex            % (find-angg "LATEX/edrxaccents.tex")
\input edrxchars.tex              % (find-LATEX "edrxchars.tex")
\input edrxheadfoot.tex           % (find-dn4ex "edrxheadfoot.tex")
\input edrxgac2.tex               % (find-LATEX "edrxgac2.tex")
%
\begin{document}

\catcode`\^^J=10
\directlua{dofile "dednat6load.lua"}

\def\expr#1{\directlua{output(tostring(#1))}}
\def\eval#1{\directlua{#1}}
\def\pu{\directlua{pu()}}

\directlua{dofile "edrxtikz.lua"} % (find-LATEX "edrxtikz.lua")
\directlua{dofile "edrxpict.lua"} % (find-LATEX "edrxpict.lua")
%L V.__tostring = function (v) return format("(%.3f,%.3f)", v[1], v[2]) end





%  _____ _ _   _      
% |_   _(_) |_| | ___ 
%   | | | | __| |/ _ \
%   | | | | |_| |  __/
%   |_| |_|\__|_|\___|
%                     
% or: Notes on Notation: Bart Jacobs

\title{Types for Children (working draft)}

\author{Eduardo Ochs}

\maketitle


% \setlength{\extrarowheight}{1pt}


%     _    _         _                  _   
%    / \  | |__  ___| |_ _ __ __ _  ___| |_ 
%   / _ \ | '_ \/ __| __| '__/ _` |/ __| __|
%  / ___ \| |_) \__ \ |_| | | (_| | (__| |_ 
% /_/   \_\_.__/|___/\__|_|  \__,_|\___|\__|
%                                           
% «abstract» (to ".abstract")
% (find-es "tex" "abstract")
\begin{abstract}

My favorite way to explain types to undergraduate students is by
showing first how to understand judgments that are very concrete ---
for example, if $A=\{1,2\}$, $B=\{3,4\}$ and $C=\{5,6\}$ then we can
make sense of $p:A×B, f:B→C ⊢ (πp,f(π'p)):A×C$ --- and then showing
that type systems are based on these ideas, but with some things made
more abstract, and with some restrictions that may seem arbitrary at
first.

In the first part of these notes we define a certain notation for set
comprehension --- because once we understand $\{p:A×B, f:B→C;
(πp,f(π'p))\}$ it is easy to give meaning to $p:A×B, f:B→C ⊢
(πp,f(π'p)):A×C$ --- and in the second part we define lambdas, types
(informally), judgments, derivation trees, derivation rules, and
discharges. In the third part we define a type system based on these
operations and we show some tools for reading a standard presentation
of that system (chapter 2 of Bart Jacobs's book). In the fourth
part we extend that system with $Σ$, $Π$ and dependent types and show
how to compare our concrete presentation with the one in the chapter
10 of Jacobs's book.

\end{abstract}


%   ____            _             _       
%  / ___|___  _ __ | |_ ___ _ __ | |_ ___ 
% | |   / _ \| '_ \| __/ _ \ '_ \| __/ __|
% | |__| (_) | | | | ||  __/ | | | |_\__ \
%  \____\___/|_| |_|\__\___|_| |_|\__|___/
%                                         
% «contents» (to ".contents")
% (find-es "tex" "tableofcontents")
% \tableofcontents
% (find-LATEXfile "2017yoneda.toc")

\bsk

Index of sections:

{\makeatletter
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\@starttoc{toc}
}

\bsk




% (gamp)
% 3-8: (gam)


% Até p.14: (lamp)
% (lam)

















\def\erro{\operatorname{erro}}
\def\setofpt  #1 #2 #3 #4 {\setofet{(#1,#2)+t\VEC{#3,#4}}}
\def\setofpu  #1 #2 #3 #4 {\setofeu{(#1,#2)+u\VEC{#3,#4}}}

% (find-LATEXfile "2016-1-GA-material.tex" "setofet")
\def\setofet  #1{\setofst{#1}{t∈\R}}
\def\setofeu  #1{\setofst{#1}{u∈\R}}
\def\setofpt  #1 #2 #3 #4 {\setofet{(#1,#2)+t\VEC{#3,#4}}}
\def\setofpu  #1 #2 #3 #4 {\setofeu{(#1,#2)+u\VEC{#3,#4}}}

\unitlength=5pt



% «picturedots» (to ".picturedots")
% (find-LATEX "edrxpict.lua" "pictdots")
% (find-LATEX "edrxgac2.tex" "pict2e")
% (to "comprehension-gab")
%
\def\beginpicture(#1,#2)(#3,#4){\expr{beginpicture(v(#1,#2),v(#3,#4))}}
\def\pictaxes{\expr{pictaxes()}}
\def\pictdots#1{\expr{pictdots("#1")}}
\def\picturedots(#1,#2)(#3,#4)#5{%
  \vcenter{\hbox{%
  \beginpicture(#1,#2)(#3,#4)%
  \pictaxes%
  \pictdots{#5}%
  \end{picture}%
  }}%
}

\unitlength=5pt

%L p = function (a, b) return O + a*uu + b*vv end

%L --  «pictOuv» (to ".pictOuv")
%L pictOOuuvv = function (OO, xx, yy, OOtext, xxtext, yytext, vtextdist, Otextdist)
%L     local bprint, out = makebprint()
%L     local xxpos = OO + xx/2 + xx:rotright():unit(vtextdist)
%L     local yypos = OO + yy/2 + yy:rotleft() :unit(vtextdist)
%L     local OOpos = OO + (-xx-yy):unit(Otextdist or vtextdist)
%L     local f = function (str) return (str:gsub("!", "\\")) end
%L     bprint("\\Vector%s%s", OO, OO+xx)
%L     bprint("\\Vector%s%s", OO, OO+yy)
%L     bprint("\\put%s{\\cell{%s}}", OOpos, f(OOtext))
%L     bprint("\\put%s{\\cell{%s}}", xxpos, f(xxtext))
%L     bprint("\\put%s{\\cell{%s}}", yypos, f(yytext))
%L     return out()
%L   end
%L -- sysco = pictOOuuvv
\def\pictOuv(#1,#2){
  {\color{GrayPale}\expr{pictpgrid(0,0,4,4)}}
  \pictaxes
  {\linethickness{1.0pt}
   \expr{pictOOuuvv(O, uu, vv,  "O", "!uu", "!vv", #1, #2)}
  }
}

%L -- «pictABCDE» (to ".pictABCDE")
%L tt = v(1, 0)
%L pictABCDE = function (aang, bang, cang, dang, eang)
%L     local bprint, out = makebprint()
%L     local AA, BB, CC, DD, EE = p(1,1), p(1,3), p(3,3), p(1,2), p(2,2)
%L     local f = function (str) return (str:gsub("!", "\\")) end
%L     bprint("\\Line%s%s", AA, BB)
%L     bprint("\\Line%s%s", BB, CC)
%L     bprint("\\Line%s%s", DD, EE)
%L     bprint("\\put%s{\\closeddot}", AA)
%L     bprint("\\put%s{\\closeddot}", BB)
%L     bprint("\\put%s{\\closeddot}", CC)
%L     bprint("\\put%s{\\closeddot}", DD)
%L     bprint("\\put%s{\\closeddot}", EE)
%L     bprint("\\put%s{\\cell{%s}}", AA + tt:rot(aang), "A")
%L     bprint("\\put%s{\\cell{%s}}", BB + tt:rot(bang), "B")
%L     bprint("\\put%s{\\cell{%s}}", CC + tt:rot(cang), "C")
%L     bprint("\\put%s{\\cell{%s}}", DD + tt:rot(dang), "D")
%L     bprint("\\put%s{\\cell{%s}}", EE + tt:rot(eang), "E")
%L     return out()
%L   end
\def\pictABCDE(#1,#2,#3,#4,#5){
  {\linethickness{1.0pt}
   \expr{pictABCDE(#1,#2,#3,#4,#5)}
  }
}

\pu


% «cells» (to ".cells")
% (find-es "tex" "fbox")

% \def\cellhr#1{\hbox to 0pt    {\cellfont${#1}$\hss}}
% \def\cellhc#1{\hbox to 0pt{\hss\cellfont${#1}$\hss}}
% \def\cellhl#1{\hbox to 0pt{\hss\cellfont${#1}$}}
% \def\cellva#1{\setbox0#1\raise \dp0       \box0}
% \def\cellvm#1{\setbox0#1\lower \celllower \box0}
% \def\cellvb#1{\setbox0#1\lower \ht0       \box0}
% 
% \def\cellnw  #1{\cellva{\cellhl{#1}}}
%  \def\celln  #1{\cellva{\cellhc{#1}}}
%   \def\cellne#1{\cellva{\cellhr{#1}}}
% \def\cellw   #1{\cellvm{\cellhl{#1}}}
%  \def\celle  #1{\cellvm{\cellhr{#1}}}
% \def\cellsw  #1{\cellvb{\cellhl{#1}}}
%  \def\cells  #1{\cellvb{\cellhc{#1}}}
%   \def\cellse#1{\cellvb{\cellhr{#1}}}

% \newdimen\cellsep
% \cellsep=4pt
% \def\addcellsep{%
%   \setbox0=\hbox{\kern\cellsep\box0\kern\cellsep}%
%   \ht0=\ht0 plus \cellsep%
%   \dp0=\dp0 plus \cellsep%
%   \box0%
% }
% \def\cellsp#1{%
%   \setbox0=\hbox{#1}%
%   \addcellsep%
%   \box0%
% }






% «pictureFxy» (to ".pictureFxy")
\def\tcell#1{\lower\celllower\hbox to 0pt{\hss\cellfont#1\hss}}
\def\pictureFxy(#1,#2)(#3,#4)#5{%
  \vcenter{\hbox{%
  \beginpictureb(#1,#2)(#3,#4){.7}%
  {\color{GrayPale}%
   \Line(#1,0)(#3,0)%
   \Line(0,#2)(0,#4)%
  }
  \expr{pictFxy("#5")}
  \end{picture}%
  }}%
}





% %   ____      _                                 _ _
% %  / ___|___ (_)___  __ _ ___   _ __ ___  _   _(_) |_ ___
% % | |   / _ \| / __|/ _` / __| | '_ ` _ \| | | | | __/ _ \
% % | |__| (_) | \__ \ (_| \__ \ | | | | | | |_| | | || (_) |
% %  \____\___/|_|___/\__,_|___/ |_| |_| |_|\__,_|_|\__\___/
% %
% % «coisas-muito» (to ".coisas-muito")
% % (gam181p 1 "coisas-muito")
% \label{coisas-muito}
% 
% {\setlength{\parindent}{0em}
% \footnotesize
% \par Geometria Analítica - material para exercícios
% \par PURO-UFF - 2018.1 - Eduardo Ochs
% \par Links importantes:
% \par \url{http://angg.twu.net/2018.1-GA.html} (página do curso)
% \par \url{http://angg.twu.net/2018.1-GA/2018.1-GA.pdf} (quadros)
% \par \url{http://angg.twu.net/LATEX/2018-1-GA-material.pdf} (isto aqui)
% \par {\tt eduardoochs@gmail.com} (meu e-mail)
% \par Dá pra chegar na página do curso googlando por ``Eduardo Ochs'',
% \par indo pra qualquer subpágina do angg.twu.net, e clicando em ``GA''
% \par na barra de navegação à esquerda.
% 
% }
% 
% \bsk
% \bsk
% 
% 
% 
% 
% {
% \setlength{\parindent}{0em}
% 
% {\bf Coisas {\bf MUITO} importantes sobre Geometria Analítica}
% }
% 
% \msk
% 
% A matéria é sobre duas linguagens diferentes: a
% %
% \begin{itemize}
% \item ``Geometria'', que é sobre coisas gráficas como pontos, retas e
%   círculos, e a
% 
% \item ``Analítica'', que é sobre ``álgebra'', sobre coisas matemáticas
%   ``formais'' como contas, conjuntos e equações;
% 
% \end{itemize}
% %
% além disso Geometria Analítica é também sobre a TRADUÇÃO entre essas
% duas linguagens.
% 
% \msk
% 
% Lembre que boa parte do que você aprendeu sobre álgebra no ensino
% médio era sobre {\sl resolver equações}.
% 
% {\sl Encontrar soluções} de equações é difícil --- são muitos métodos,
% e dá pra errar bastante no caminho --- mas {\sl testar} as soluções é
% fácil.
% 
% \msk
% 
% Boa parte do que você aprendeu (ou deveria ter aprendido) sobre
% geometria no ensino médio envolvia construções gráficas; por exemplo,
% a partir de pontos $A$, $B$, $C$,
% 
% Seja $A'$ o ponto médio entre $B$ e $C$,
% 
% Seja $B'$ o ponto médio entre $A$ e $C$,
% 
% Seja $C'$ o ponto médio entre $A$ e $B$,
% 
% Seja $r_a$ a reta que passa por $A'$ e é ortogonal a $BC$,
% 
% Seja $r_b$ a reta que passa por $B'$ e é ortogonal a $AC$,
% 
% Seja $r_c$ a reta que passa por $C'$ e é ortogonal a $AB$,
% 
% Seja $D$ o ponto de interseção das retas $r_a$, $r_b$ e $r_c$,
% 
% então $D$ é o centro do círculo que passa por $A$, $B$ e $C$.
% 
% \msk
% 
% Você {\bf VAI TER QUE} aprender a definir seus objetos --- pontos, retas,
% conjuntos, círculos, etc... isso provavelmente vai ser algo novo pra
% você e é algo que precisa de MUITO treino. Dá pra passar em Cálculo 1
% e em Prog 1 só aprendendo a ``ler'' as definições que o professor e os
% livros mostram, mas em Geometria Analítica NÃO DÁ, em GA você vai ter
% que aprender a ler {\bf E A ESCREVER} definições.
% 
% 
% 
% 
% \newpage
% 
% %  ____  _
% % |  _ \(_) ___ __ _ ___
% % | | | | |/ __/ _` / __|
% % | |_| | | (_| (_| \__ \
% % |____/|_|\___\__,_|___/
% %
% % «dicas» (to ".dicas")
% % (gam181p 2 "dicas")
% \label{dicas}
% 
% {\bf Dicas MUITO IMPORTANTES e pouco óbvias:}
% 
% \ssk
% 
% 1) Aprenda a testar tudo: contas, possíveis soluções de equações,
% representações gráficas de conjuntos...
% 
% 2) Cada ``seja'' ou ``sejam'' que aparece nestas folhas é uma
% definição, e você pode usá-los como exemplos de definições
% bem-escritas (ééé!!!!) pra aprender jeitos de escrever as suas
% definições.
% 
% 3) Em ``matematiquês'' a gente quase não usa termos como ``ele'',
% ``ela'', ``isso'', ``aquilo'' e ''lá'' --- ao invés disso a gente dá
% nomes curtos pros objetos ou usa expressões matemáticas pra eles cujo
% resultado é o objeto que a gente quer (como nas pags
% \pageref{comprehension-ex123} e \pageref{projecoes})... mas {\sl
%   quando a gente está discutindo problemas no papel ou no quadro} a
% gente pode ser referir a determinados objetos {\sl apontando pra eles
%   com o dedo} e dizendo ``esse aqui''.
% 
% 4) Se você estiver em dúvida sobre o que um problema quer dizer tente
% escrever as suas várias hipóteses --- a prática de escrever as suas
% idéias é o que vai te permitir aos poucos conseguir resolver coisas de
% cabeça.
% 
% 5) Muitas coisas aparecem nestas folhas escritas primeiro de um jeito
% detalhado, e depois aos poucos de jeitos cada vez mais curtos. Você
% vai ter que aprender a completar os detalhes.
% 
% 6) Alguns exercícios destas folhas têm muitos subcasos. Nos primeiros
% subcasos você provavelmente vai precisar fazer as contas com todos os
% detalhes e verificá-las várias vezes pra não errar, depois você vai
% aprender a fazê-las cada vez mais rápido, depois vai poder fazê-las de
% cabeça, e depois você vai começar a visualizar o que as contas
% ``querem dizer'' e vai conseguir chegar ao resultado graficamente, sem
% contas; e se você estiver em dúvida se o seu ``método gráfico'' está
% certo você vai poder conferir se o ``método gráfico'' e o ``método
% contas'' dão aos mesmos resultados. Exemplo: p.\pageref{coordenadas}.
% 
% 7) Uma solução bem escrita pode incluir, além do resultado final,
% contas, definições, representações gráficas, explicações em português,
% testes, etc. Uma solução bem escrita é fácil de ler e fácil de
% verificar. Você pode testar se uma solução sua está bem escrita
% submetendo-a às seguinte pessoas: a) você mesmo logo depois de você
% escrevê-la --- releia-a e veja se ela está clara; b) você mesmo, horas
% depois ou no dia seguinte, quando você não lembrar mais do que você
% pensava quando você a escreveu; c) um colega que seja seu amigo; d) um
% colega que seja menos seu amigo que o outro; e) o monitor ou o
% professor. Se as outras pessoas acharem que ler a sua solução é um
% sofrimento, isso é mau sinal; se as outras pessoas acharem que a sua
% solução está claríssima e que elas devem estudar com você, isso é bom
% sinal. {\sl GA é um curso de escrita matemática:} se você estiver
% estudando e descobrir que uma solução sua pode ser reescrita de um
% jeito bem melhor, não hesite --- reescrever é um ótimo exercício.
% 
% 8) Estas notas {\sl vão ser} uma versão ampliada e melhorada destas
% notas aqui, do semestre passado:
% 
% \url{http://angg.twu.net/LATEX/2017-1-GA-material.pdf}
% 
% 
% 
% 
% \newpage






%  __  __       _        _
% |  \/  | __ _| |_ _ __(_)_______  ___
% | |\/| |/ _` | __| '__| |_  / _ \/ __|
% | |  | | (_| | |_| |  | |/ /  __/\__ \
% |_|  |_|\__,_|\__|_|  |_/___\___||___/
%
% «types-0» (to ".types-0")
% (gam181p 3 "matrizes")
\section{Types in basic math}
\label{types-0}

Multiplicação de matrizes:

\def\und#1#2{\underbrace{#1}_{#2}}

$\und{\pmat{1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9}}{3×3}
 \und{\pmat{1000 \\ 100 \\ 10}}{3×1}
 = \und{\pmat{1230 \\ 4560 \\ 7890}}{3×1}
$

$\und{\pmat{a & b \\ c & d \\ e & f}}{3×2}
 \und{\pmat{g & h & i & j \\ k & l & m & n}}{2×4}
 = \und{\pmat{ag+bk & ah+bl & ai+bm & aj+bn \\
              cg+dk & ch+dl & ci+dm & cj+dn \\
              eg+fk & eh+fl & ei+fm & ej+fn \\}}{3×4}
$

$\und{\pmat{g & h & i & j \\ k & l & m & n}}{2×4}
 \und{\pmat{a & b \\ c & d \\ e & f}}{3×2}
 = \; \text{erro \qquad (porque $4≠3$)}
$

$\pmat{1 & 2 \\ 3 & 4} \pmat{100 & 0 \\ 10 & 0} = \pmat{120 & 0 \\ 340 & 0}$

\ssk

$\pmat{100 & 0 \\ 10 & 0} \pmat{1 & 2 \\ 3 & 4} = \pmat{100 & 200 \\ 10 & 20}$

\ssk

$\pmat{2 \\ 3 \\ 4}^T \pmat{100 \\ 10 \\ 1} = \pmat{2 & 3 & 4} \pmat{100 \\ 10 \\ 1} = (234) = 234$

\bsk

Soma de matrizes:

$\pmat{10 & 20 & 30 \\ 40 & 50 & 60} + \pmat{2 & 3 & 4 \\ 5 & 6 & 7} = \pmat{12 & 23 & 34 \\ 45 & 56 & 67}$

$\pmat{10 & 20 & 30 \\ 40 & 50 & 60} + \pmat{2 & 3 \\ 5 & 6 } = \; \text{erro}$

\bsk

Multiplicação de número por matriz:

$10 \pmat{2 & 3 & 4 \\ 5 & 6 & 7} = \pmat{20 & 30 & 40 \\ 50 & 60 & 70}$



\bsk

\def\V{\mathbf{V}}
\def\F{\mathbf{F}}

Operações lógicas:

\ssk

$\begin{array}[t]{rcl}
 \text{``E'':} \\
 \F\&\F &=& \F \\
 \F\&\V &=& \F \\
 \V\&\F &=& \F \\
 \V\&\V &=& \V \\
 \end{array}
 %
 \quad
 %
 \begin{array}[t]{rcl}
 \text{``Ou'':} \\
 \F∨\F &=& \F \\
 \F∨\V &=& \V \\
 \V∨\F &=& \V \\
 \V∨\V &=& \V \\
 \end{array}
 %
 \quad
 %
 \begin{array}[t]{rcl}
 \text{``Implica'':}\hss \\
 \F→\F &=& \V \\
 \F→\V &=& \V \\
 \V→\F &=& \F \\
 \V→\V &=& \V \\
 \end{array}
 %
 \quad
 %
 \begin{array}[t]{rcl}
 \text{``Não'':} \\
 ¬\F &=& \V \\
 ¬\V &=& \F \\
 \end{array}
$

\bsk

Se $x=6$,

$\und{\und{2<\und{x}{6}}{\V} \&
      \und{\und{x}{6}<5}{\F}
     }{\F}
$




%   ____                               _                    _
%  / ___|___  _ __ ___  _ __  _ __ ___| |__   ___ _ __  ___(_) ___  _ __
% | |   / _ \| '_ ` _ \| '_ \| '__/ _ \ '_ \ / _ \ '_ \/ __| |/ _ \| '_ \
% | |__| (_) | | | | | | |_) | | |  __/ | | |  __/ | | \__ \ | (_) | | | |
%  \____\___/|_| |_| |_| .__/|_|  \___|_| |_|\___|_| |_|___/_|\___/|_| |_|
%                      |_|
%
% «comprehension» (to ".comprehension")
% (gam181p 4 "comprehension")
\section{Set comprehension}
\label{comprehension}

\def\und#1#2{\underbrace{#1}_{#2}}
\def\und#1#2{\underbrace{#1}_{\text{#2}}}
\def\ug#1{\und{#1}{ger}}
\def\uf#1{\und{#1}{filt}}
\def\ue#1{\und{#1}{expr}}

Notação explícita, com geradores, filtros,

e um ``;'' separando os geradores e filtros da expressão final:

$\begin{array}{lll}
\{\ug{a∈\{1,2,3,4\}}; \ue{10a}\}     &=& \{10,20,30,40\} \\
\{\ug{a∈\{1,2,3,4\}}; \ue{a}\}       &=& \{1,2,3,4\} \\
\{\ug{a∈\{1,2,3,4\}}, \uf{a≥3}; \ue{a}\} &=& \{3,4\} \\
\{\ug{a∈\{1,2,3,4\}}, \uf{a≥3}; \ue{10a}\} &=& \{30,40\} \\
\{\ug{a∈\{10,20\}}, \ug{b∈\{3,4\}}; \ue{a+b}\} &=& \{13,14,23,24\} \\
\{\ug{a∈\{1,2\}}, \ug{b∈\{3,4\}}; \ue{(a,b)}\} &=& \{(1,3),(1,4),(2,3),(2,4)\} \\
\end{array}
$





% (setq last-kbd-macro (kbd "C-w \\ uf{ C-y }"))
% (setq last-kbd-macro (kbd "C-w \\ ue{ C-y }"))

\msk
\msk

Notações convencionais, com ``$|$'' ao invés de ``;'':

Primeiro tipo --- expressão final, ``$|$'', geradores e filtros:

$\begin{array}{lll}
\setofst{10a}{a∈\{1,2,3,4\}} &=&
  \{\ug{a∈\{1,2,3,4\}}; \ue{10a}\} \\
\setofst{10a}{a∈\{1,2,3,4\}, a≥3} &=&
  \{\ug{a∈\{1,2,3,4\}}, \uf{a≥3}; \ue{10a}\} \\
\setofst{a}{a∈\{1,2,3,4\}} &=&
  \{\ug{a∈\{1,2,3,4\}}; \ue{a}\} \\
% \{\ug{a∈\{1,2\}}, \ug{b∈\{3,4\}}; \ue{(a,b)}\} \\
\end{array}
$

\msk

O segundo tipo --- gerador, ``$|$'', filtros ---

pode ser convertido para o primeiro...

o truque é fazer a expressão final ser a variável do gerador:

$\begin{array}{lll}
\setofst{a∈\{1,2,3,4\}}{a≥3} &=& \\
\setofst{a}{a∈\{1,2,3,4\}, a≥3} &=&
  \{\ug{a∈\{1,2,3,4\}}, \uf{a≥3}; \ue{a}\} \\
% \{\ug{a∈\{10,20\}}, \ug{b∈\{3,4\}}; \ue{a+b}\} \\
\end{array}
$

\msk

O que distingue as duas notacões ``$\{\ldots|\ldots\}$'' é

se o que vem antes da ``$|$'' é ou não um gerador.

\bsk

Observações:

$\setofst{\text{gerador}}{\text{filtros}} =
 \{\text{gerador},\text{filtros};\ue{\text{variável do gerador}}\}$

$\setofst{\text{expr}}{\text{geradores e filtros}} =
 \{\text{geradores e filtros}; \text{expr}\}
$

\msk

As notações ``$\{\ldots|\ldots\}$'' são padrão e são usadas em muitos livros de matemática.

A notação ``$\{\ldots;\ldots\}$'' é bem rara; eu aprendi ela em
artigos sobre linguagens de programação, e resolvi apresentar ela aqui
porque acho que ela ajuda a explicar as duas notações
``$\{\ldots|\ldots\}$''.


%                                     _                    _               _____
%   ___ ___  _ __ ___  _ __  _ __ ___| |__   ___ _ __  ___(_) ___  _ __   |_   _|
%  / __/ _ \| '_ ` _ \| '_ \| '__/ _ \ '_ \ / _ \ '_ \/ __| |/ _ \| '_ \    | |
% | (_| (_) | | | | | | |_) | | |  __/ | | |  __/ | | \__ \ | (_) | | | |   | |
%  \___\___/|_| |_| |_| .__/|_|  \___|_| |_|\___|_| |_|___/_|\___/|_| |_|   |_|
%                     |_|
%
% «comprehension-tables» (to ".comprehension-tables")
% (gam181p 5 "comprehension-tables")
% (find-es "tex" "vrule")

\section{A way to calculate comprehensions with tables}
\label{comprehension-tables}

\def\tbl#1#2{\fbox{$\begin{array}{#1}#2\end{array}$}}
\def\tbl#1#2{\fbox{$\sm{#2}$}}
\def\V{\mathbf{V}}
\def\F{\mathbf{F}}

% "Stop":
\def\S{\omit$|$\hss}
\def\S{\omit\vrule\hss}
\def\S{\omit\vrule$($\hss}
\def\S{\omit\vrule$\scriptstyle($\hss}
\def\S{\omit\vrule\phantom{$\scriptstyle($}\hss}   % stop

Alguns exemplos:

\msk

\def\s{\mathstrut}
\def\s{\phantom{$|$}}
\def\s{\phantom{|}}
\def\s{}

Se $A := \{x∈\{1,2\}; (x,3-x)\}$

então $A = \{(1,2), (2,1)\}$:

\tbl{ccc}{
 \s x & (x,3-x) \\\hline
 \s 1 & (1,2) \\
 \s 2 & (2,1) \\
}

\msk

Se $I := \{x∈\{1,2,3\}, y∈\{3,4\}, x+y<6; (x,y)\}$

então $I = \{(1,3),(1,4),(1,5)\}$:

\tbl{ccc}{
 \s x & y & x+y<6 & (x,y) \\\hline
 \s 1 & 3 & \V & (1,3) \\
 \s 1 & 4 & \V & (1,4) \\
 \s 2 & 3 & \V & (2,3) \\
 \s 2 & 4 & \F & \S \\
 \s 3 & 3 & \F & \S \\
 \s 3 & 4 & \F & \S \\
}

\msk

Se $D := \setofst{(x,2x)}{x∈\{0,1,2,3\}}$

então $D = \{x∈\{0,1,2,3\}; (x,2x)\}$,

$D = \{(0,0), (1,2), (2,4), (3,6)\}$:

\tbl{ccc}{
 \s x & (x,2x) \\\hline
 \s 0 & (0,0) \\
 \s 1 & (1,2) \\
 \s 2 & (2,4) \\
 \s 3 & (3,6) \\
}

\msk

Se $P := \setofst {(x,y)∈\{1,2,3\}^2} {x≥y}$

então $P = \{(x,y)∈\{1,2,3\}^2, x≥y; (x,y)\}$,

$P = \{(1,1), (2,1), (2,2), (3,1), (3,2), (3,3)\}$:

\tbl{ccc}{
 \s (x,y) & x & y & x≥y & (x,y) \\\hline
 \s (1,1) & 1 & 1 & \V & (1,1) \\
 \s (1,2) & 1 & 2 & \F & \S    \\
 \s (1,3) & 1 & 3 & \F & \S    \\
 \s (2,1) & 2 & 1 & \V & (2,1) \\
 \s (2,2) & 2 & 2 & \V & (2,2) \\
 \s (2,3) & 2 & 3 & \F & \S    \\
 \s (3,1) & 3 & 1 & \V & (3,1) \\
 \s (3,2) & 3 & 2 & \V & (3,2) \\
 \s (3,3) & 3 & 3 & \V & (3,3) \\
}

\bsk

Obs: os exemplos acima correspondem aos

exercícios 2A, 2I, 3D e 5P das próximas páginas.


%   ____           _                         _ 
%  / ___|__ _ _ __| |_   _ __  _ __ ___   __| |
% | |   / _` | '__| __| | '_ \| '__/ _ \ / _` |
% | |__| (_| | |  | |_  | |_) | | | (_) | (_| |
%  \____\__,_|_|   \__| | .__/|_|  \___/ \__,_|
%                       |_|                    
%
% «cartesian-product» (to ".cartesian-product")
\section{Cartesian product}
\label{comprehension-prod}

$A×B:=\{a∈A,b∈B;(a,b)\}$

Exemplo: $\{1,2\}×\{3,4\} = \{(1,3),(1,4),(2,3),(2,4)\}$.

\ssk

Uma notação: $A^2 = A×A$.

Exemplo: $\{3,4\}^2 = \{3,4\}×\{3,4\} = \{(3,3),(3,4),(4,3),(4,4)\}$.



%  _____                   _      _
% | ____|_  _____ _ __ ___(_) ___(_) ___  ___
% |  _| \ \/ / _ \ '__/ __| |/ __| |/ _ \/ __|
% | |___ >  <  __/ | | (__| | (__| | (_) \__ \
% |_____/_/\_\___|_|  \___|_|\___|_|\___/|___/
%
% «comprehension-exercises» (to ".comprehension-exercises")
% (gam181p 6 "comprehension-ex123")
\section{Comprehension: exercices}
\label{comprehension-ex123}

1) Represente graficamente:

$\begin{array}{rcl}
 A & := & \{(1,4), (2,4), (1,3)\} \\
 B & := & \{(1,3), (1,4), (2,4)\} \\
 C & := & \{(1,3), (1,4), (2,4), (2,4)\} \\
 D & := & \{(1,3), (1,4), (2,3), (2,4)\} \\
 E & := & \{(0,3), (1,2), (2,1), (3,0)\} \\
\end{array}
$

\msk

2) Calcule e represente graficamente:

$\begin{array}{rcl}
 A & := & \{x∈\{1,2\}; (x,3-x)\} \\
 B & := & \{x∈\{1,2,3\}; (x,3-x)\} \\
 C & := & \{x∈\{0,1,2,3\}; (x,3-x)\} \\
 D & := & \{x∈\{0,0.5,1, \ldots, 3\}; (x,3-x)\} \\
 E & := & \{x∈\{1,2,3\}, y∈\{3,4\}; (x,y)\} \\
 F & := & \{x∈\{3,4\}, y∈\{1,2,3\}; (x,y)\} \\
 G & := & \{x∈\{3,4\}, y∈\{1,2,3\}; (y,x)\} \\
 H & := & \{x∈\{3,4\}, y∈\{1,2,3\}; (x,2)\} \\
 I & := & \{x∈\{1,2,3\}, y∈\{3,4\}, x+y<6; (x,y)\} \\
 J & := & \{x∈\{1,2,3\}, y∈\{3,4\}, x+y>4; (x,y)\} \\
 K & := & \{x∈\{1,2,3,4\}, y∈\{1,2,3,4\}; (x,y)\} \\
 L & := & \{x,y∈\{0,1,2,3,4\}; (x,y)\} \\
 M & := & \{x,y∈\{0,1,2,3,4\}, y=3; (x,y)\} \\
 N & := & \{x,y∈\{0,1,2,3,4\}, x=2; (x,y)\} \\
 O & := & \{x,y∈\{0,1,2,3,4\}, x+y=3; (x,y)\} \\
 P & := & \{x,y∈\{0,1,2,3,4\}, y=x; (x,y)\} \\
 Q & := & \{x,y∈\{0,1,2,3,4\}, y=x+1; (x,y)\} \\
 R & := & \{x,y∈\{0,1,2,3,4\}, y=2x; (x,y)\} \\
 S & := & \{x,y∈\{0,1,2,3,4\}, y=2x+1; (x,y)\} \\
\end{array}
$

\msk

3) Calcule e represente graficamente:

$\begin{array}{rcl}
 A & := & \setofst{(x,0)}{x∈\{0,1,2,3\}} \\
 B & := & \setofst{(x,x/2)}{x∈\{0,1,2,3\}} \\
 C & := & \setofst{(x,x)}{x∈\{0,1,2,3\}} \\
 D & := & \setofst{(x,2x)}{x∈\{0,1,2,3\}} \\
 E & := & \setofst{(x,1)}{x∈\{0,1,2,3\}} \\
 F & := & \setofst{(x,1+x/2)}{x∈\{0,1,2,3\}} \\
 G & := & \setofst{(x,1+x)}{x∈\{0,1,2,3\}} \\
 H & := & \setofst{(x,1+2x)}{x∈\{0,1,2,3\}} \\
 I & := & \setofst{(x,2)}{x∈\{0,1,2,3\}} \\
 J & := & \setofst{(x,2+x/2)}{x∈\{0,1,2,3\}} \\
 K & := & \setofst{(x,2+x)}{x∈\{0,1,2,3\}} \\
 L & := & \setofst{(x,2+2x)}{x∈\{0,1,2,3\}} \\
 M & := & \setofst{(x,2)}{x∈\{0,1,2,3\}} \\
 N & := & \setofst{(x,2-x/2)}{x∈\{0,1,2,3\}} \\
 O & := & \setofst{(x,2-x)}{x∈\{0,1,2,3\}} \\
 P & := & \setofst{(x,2-2x)}{x∈\{0,1,2,3\}} \\
\end{array}
$


%  ____                _                  _
% |  _ \ _ __ ___   __| |   ___ __ _ _ __| |_
% | |_) | '__/ _ \ / _` |  / __/ _` | '__| __|
% |  __/| | | (_) | (_| | | (_| (_| | |  | |_
% |_|   |_|  \___/ \__,_|  \___\__,_|_|   \__|
%
% «comprehension-prod» (to ".comprehension-prod")
% (gam181p 7 "comprehension-prod")

Sejam:

$A = \{1,2,4\}$,

$B = \{2,3\}$,

$C = \{2,3,4\}$.


\msk

{\bf Exercícios}

\ssk

4) Calcule e represente graficamente:

\begin{tabular}{lll}
a) $A×A$ & d) $B×A$ & g) $C×A$ \\
b) $A×B$ & e) $B×B$ & h) $C×B$ \\
c) $A×C$ & f) $B×C$ & i) $C×C$ \\
\end{tabular}

\msk

5) Calcule e represente graficamente:

$\begin{array}{rcl}
 A &:=& \{x,y∈\{0,1,2,3\};(x,y)\} \\
 B &:=& \{x,y∈\{0,1,2,3\}, y=2; (x,y)\} \\
 C &:=& \{x,y∈\{0,1,2,3\}, x=1; (x,y)\} \\
 D &:=& \{x,y∈\{0,1,2,3\}, y=x; (x,y)\} \\
 E &:=& \{x,y∈\{0,1,2,3,4\}, y=2x; (x,y)\} \\
 F &:=& \{(x,y)∈\{0,1,2,3,4\}^2, y=2x; (x,y)\} \\
 G &:=& \{(x,y)∈\{0,1,2,3,4\}^2, y=x; (x,y)\} \\
 H &:=& \{(x,y)∈\{0,1,2,3,4\}^2, y=x/2; (x,y)\} \\
 I &:=& \{(x,y)∈\{0,1,2,3,4\}^2, y=x/2+1; (x,y)\} \\
 J &:=& \setofst {(x,y)∈\{0,1,2,3,4\}^2} {y=2x} \\
 K &:=& \setofst {(x,y)∈\{0,1,2,3,4\}^2} {y=x} \\
 L &:=& \setofst {(x,y)∈\{0,1,2,3,4\}^2} {y=x/2} \\
 M &:=& \setofst {(x,y)∈\{0,1,2,3,4\}^2} {y=x/2+1} \\
 N &:=& \setofst {(x,y)∈\{1,2,3\}^2} {0x+0y=0} \\
 O &:=& \setofst {(x,y)∈\{1,2,3\}^2} {0x+0y=2} \\
 P &:=& \setofst {(x,y)∈\{1,2,3\}^2} {x≥y} \\
 \end{array}
$

\msk

6) Represente graficamente:

$\begin{array}{rcl}
 J' &:=& \setofst {(x,y)∈\R^2} {y=2x} \\
 K' &:=& \setofst {(x,y)∈\R^2} {y=x} \\
 L' &:=& \setofst {(x,y)∈\R^2} {y=x/2} \\
 M' &:=& \setofst {(x,y)∈\R^2} {y=x/2+1} \\
 N' &:=& \setofst {(x,y)∈\R^2} {0x+0y=0} \\
 O' &:=& \setofst {(x,y)∈\R^2} {0x+0y=2} \\
 P' &:=& \setofst {(x,y)∈\R^2} {x≥y} \\
 \end{array}
$




%   ____       _                _ _
%  / ___| __ _| |__   __ _ _ __(_) |_ ___
% | |  _ / _` | '_ \ / _` | '__| | __/ _ \
% | |_| | (_| | |_) | (_| | |  | | || (_) |
%  \____|\__,_|_.__/ \__,_|_|  |_|\__\___/
%
% «comprehension-gab» (to ".comprehension-gab")
% (gam181p 8 "comprehension-gab")
% (to "picturedots")
\section{Answers to the exercises}
\label{comprehension-gab}

{\bf Gabarito dos exercícios de set comprehensions}

% \bhbox{$\picturedots(-1,-2)(5,5){ 3,1 3,2 3,3 }$}

1)
$
A = B = C = \picturedots(0,0)(3,4){ 1,4 2,4 1,3 }
\quad
D = \picturedots(0,0)(3,4){ 1,4 2,4 1,3 2,3 }
\quad
E = \picturedots(0,0)(4,4){ 0,3 1,2 2,1 3,0 }
$

\bsk

2)
$     A = \picturedots(0,0)(4,4){     1,2 2,1     }
\quad B = \picturedots(0,0)(4,4){     1,2 2,1 3,0 }
\quad C = \picturedots(0,0)(4,4){ 0,3 1,2 2,1 3,0 }
\quad D = \picturedots(0,0)(4,4){ 0,3 .5,2.5 1,2 1.5,1.5 2,1 2.5,.5 3,0 }
$

\msk

$
\quad E = \picturedots(0,0)(4,4){ 1,3 2,3 3,3   1,4 2,4 3,4 }
\quad F = \picturedots(0,0)(4,4){ 3,1 4,1   3,2 4,2   3,3 4,3 }
\quad G = \picturedots(0,0)(4,4){ 1,3 2,3 3,3   1,4 2,4 3,4 }
\quad H = \picturedots(0,0)(4,4){ 3,2 4,2 }
\quad I = \picturedots(0,0)(4,4){ 1,3 2,3       1,4         }
\quad J = \picturedots(0,0)(4,4){     2,3 3,3   1,4 2,4 3,4 }
$

\msk

$
\quad K = \picturedots(0,0)(4,4){     1,4 2,4 3,4 4,4
                                      1,3 2,3 3,3 4,3
                                      1,2 2,2 3,2 4,2
                                      1,1 2,1 3,1 4,1 }
\quad L = \picturedots(0,0)(4,4){ 0,4 1,4 2,4 3,4 4,4
                                  0,3 1,3 2,3 3,3 4,3
                                  0,2 1,2 2,2 3,2 4,2
                                  0,1 1,1 2,1 3,1 4,1
                                  0,0 1,0 2,0 3,0 4,0 }
\quad M = \picturedots(0,0)(4,4){ 0,3 1,3 2,3 3,3 4,3 }
\quad N = \picturedots(0,0)(4,4){ 2,0 2,1 2,2 2,3 2,4 }
\quad O = \picturedots(0,0)(4,4){ 0,3 1,2 2,1 3,0 }
\quad P = \picturedots(0,0)(4,4){ 0,0 1,1 2,2 3,3 4,4 }
$

\msk

$
\quad Q = \picturedots(0,0)(4,4){ 0,1 1,2 2,3 3,4 }
\quad R = \picturedots(0,0)(4,4){ 0,0 1,2 2,4 }
\quad S = \picturedots(0,0)(4,4){ 0,1 1,3 }
$

\bsk

3)
$     A = \picturedots(0,0)(4,4){ 0,0 1,0  2,0 3,0   }
\quad B = \picturedots(0,0)(4,4){ 0,0 1,.5 2,1 3,1.5 }
\quad C = \picturedots(0,0)(4,4){ 0,0 1,1  2,2 3,3   }
\quad D = \picturedots(0,0)(4,7){ 0,0 1,2  2,4 3,6   }
$

$
\quad E = \picturedots(0,0)(4,4){ 0,1 1,1   2,1 3,1   }
\quad F = \picturedots(0,0)(4,4){ 0,1 1,1.5 2,2 3,2.5 }
\quad G = \picturedots(0,0)(4,4){ 0,1 1,2   2,3 3,4   }
\quad H = \picturedots(0,0)(4,7){ 0,1 1,3   2,5 3,7   }
$

$
\quad I = \picturedots(0,0)(4,4){ 0,2 1,2   2,2 3,2   }
\quad J = \picturedots(0,0)(4,4){ 0,2 1,2.5 2,3 3,3.5 }
\quad K = \picturedots(0,0)(4,4){ 0,2 1,3   2,4 3,5   }
\quad L = \picturedots(0,0)(4,8){ 0,2 1,4   2,6 3,8   }
$

$
\quad M = \picturedots(0,0)(4,4){ 0,2 1,2   2,2 3,2   }
\quad N = \picturedots(0,0)(4,4){ 0,2 1,1.5 2,1 3,.5 }
\quad O = \picturedots(0,-1)(4,4){ 0,2 1,1   2,0 3,-1  }
\quad P = \picturedots(0,-5)(4,3){ 0,2 1,0   2,-2 3,-4   }
$

\bsk

4)
$     A×A = \picturedots(0,0)(4,4){ 1,1 2,1 4,1   1,2 2,2 4,2   1,4 2,4 4,4 }
\quad B×A = \picturedots(0,0)(4,4){ 2,1 3,1       2,2 3,2       2,4 3,4     }
\quad C×A = \picturedots(0,0)(4,4){ 2,1 3,1 4,1   2,2 3,2 4,2   2,4 3,4 4,4 }
$

\msk

$
\quad A×B = \picturedots(0,0)(4,4){ 1,2 2,2 4,2   1,3 2,3 4,3 }
\quad B×B = \picturedots(0,0)(4,4){ 2,2 3,2       2,3 3,3     }
\quad C×B = \picturedots(0,0)(4,4){ 2,2 3,2 4,2   2,3 3,3 4,3 }
$

\msk

$
\quad A×C = \picturedots(0,0)(4,4){ 1,2 2,2 4,2   1,3 2,3 4,3   1,4 2,4 4,4 }
\quad B×C = \picturedots(0,0)(4,4){ 2,2 3,2       2,3 3,3       2,4 3,4     }
\quad C×C = \picturedots(0,0)(4,4){ 2,2 3,2 4,2   2,3 3,3 4,3   2,4 3,4 4,4 }
$

\bsk

5)
$     A = \picturedots(0,0)(4,4){ 0,3 1,3 2,3 3,3
                                  0,2 1,2 2,2 3,2
                                  0,1 1,1 2,1 3,1
                                  0,0 1,0 2,0 3,0 }
\quad B = \picturedots(0,0)(4,4){ 0,2 1,2 2,2 3,2 }
\quad C = \picturedots(0,0)(4,4){ 1,0 1,1 1,2 1,3 }
\quad D = \picturedots(0,0)(4,4){ 0,0 1,1 2,2 3,3 }
\quad E = \picturedots(0,0)(4,4){ 0,0 1,2 2,4 }
$

\msk

$
\quad F = \picturedots(0,0)(4,4){ 0,0 1,2 2,4         }
\quad G = \picturedots(0,0)(4,4){ 0,0 1,1 2,2 3,3 4,4 }
\quad H = \picturedots(0,0)(4,4){ 0,0 2,1 4,2         }
\quad I = \picturedots(0,0)(4,4){ 0,1 2,2 4,3         }
$

\msk

$
\quad J = \picturedots(0,0)(4,4){ 0,0 1,2 2,4         }
\quad K = \picturedots(0,0)(4,4){ 0,0 1,1 2,2 3,3 4,4 }
\quad L = \picturedots(0,0)(4,4){ 0,0 2,1 4,2         }
\quad M = \picturedots(0,0)(4,4){ 0,1 2,2 4,3         }
$

\msk

$
\quad N = \picturedots(0,0)(4,4){ 1,3 2,3 3,3
                                  1,2 2,2 3,2
                                  1,1 2,1 3,1 }
\quad O = \picturedots(0,0)(4,4){             }
\quad P = \picturedots(0,0)(4,4){         3,3
                                      2,2 3,2
                                  1,1 2,1 3,1 }
$






% ------------------------------------------------------------





























































\def\tabl#1{\begin{tabular}{l}#1\end{tabular}}
\def\tablt#1{\begin{tabular}[t]{l}#1\end{tabular}}

\def\und#1#2{\underbrace{#1}_{#2}}
\def\und#1#2{\underbrace{#1}_{\textstyle #2}}
\def\subf#1{\underbrace{#1}_{}}
\def\p{\phantom{(}}

\def\cur{\operatorname{cur}}
\def\uncur{\operatorname{uncur}}
\def\ren{\operatorname{ren}}
\def\app{\operatorname{app}}
\def\pair{\operatorname{pair}}

\def\cur{\mathsf{cur}}
\def\uncur{\mathsf{uncur}}
\def\ren{\mathsf{ren}}
\def\app{\mathsf{app}}
\def\pair{\mathsf{pair}}

% \def∧{\&}

\def\namedfunction#1#2#3#4#5{
  \begin{array}{rrcl}
    #1: & #2 & → & #3 \\
        & #4 & ↦ & #5 \\
  \end{array}
  }

\def\IPLai{\text{IPL}_{{∧}{→}}}
\def\NDai {\text{ND} _{{∧}{→}}}



%  ___       _                 _            _   _             
% |_ _|_ __ | |_ _ __ ___   __| |_   _  ___| |_(_) ___  _ __  
%  | || '_ \| __| '__/ _ \ / _` | | | |/ __| __| |/ _ \| '_ \ 
%  | || | | | |_| | | (_) | (_| | |_| | (__| |_| | (_) | | | |
% |___|_| |_|\__|_|  \___/ \__,_|\__,_|\___|\__|_|\___/|_| |_|
%                                                             
% «introduction» (to ".introduction")
% (lam181p 1 "introduction")
% (laq171 1)
% (laq171 2)

\section{Introduction to lambdas and types}

This is {\sl part} of the material that I've prepared for a very
introductory course on $λ$-calculus, types, intuitionistic
propositional logic, Curry-Howard, Categories, Lisp and Lua... the
course is 2hs/week, has no prerequisites at all, has no homework, and
is usually attended by 2nd/3rd semester CompSci students; they spend
most of their time in class discussing and doing exercises together in
groups on a whiteboard.

I still need to: a) typeset lots of exercises that I wrote directly on
the whiteboard, and some of their solutions --- see:

\par \url{http://angg.twu.net/2017.2-LA/2017.2-LA.pdf} (whiteboards, PDFized)

\par \url{http://angg.twu.net/2017.2-LA.html} (course page)

\noindent and b) write a decent introduction, and c) make this
self-contained.


\msk

{\bf Outline of the course}

Evaluation

Directed graphs

Basic mathematical objects

Variables (and simultaneous substitution)

Functions as their graphs (i.e., as sets of pairs)

Operations like `$Σ$' (including `$λ$')

(and lots more)




Btw:

\par \url{http://angg.twu.net/LATEX/idarct-preprint.pdf}

\par \url{http://angg.twu.net/LATEX/2017planar-has-1.pdf}

\par \url{http://angg.twu.net/math-b.html\#idarct}

\par \url{http://angg.twu.net/math-b.html\#zhas-for-children-2}

\par \url{http://angg.twu.net/logic-for-children-2018.html}

\bsk

Eduardo Ochs, 2017dez20







%  ____       _____           _  _       ____  
% |___ \__  _|___ /     _    | || |__  _| ___| 
%   __) \ \/ / |_ \   _| |_  | || |\ \/ /___ \ 
%  / __/ >  < ___) | |_   _| |__   _>  < ___) |
% |_____/_/\_\____/    |_|      |_|/_/\_\____/ 
%                                              
% «expressions-and-reductions» (to ".expressions-and-reductions")
% (lam181p 1 "expressions-and-reductions")
% (laq171 1)
% (laq171 2)

% \noindent
\section{Expressions (and reductions)}

$$\tablt{
  The usual way to calculate an \\
  expression, one step at a time, \\
  with `$=$'s: \\
  \\
  $\begin{array}[c]{rclcrcl}
  2·3+4·5 &=& 2·3+20 \\
          &=& 6+20   \\
          &=& 26     \\
                     \\
  2·3+4·5 &=& 6+4·5  \\
          &=& 6+20   \\
          &=& 26     \\
  \end{array}$
  \\
  \\
  Each `$=$' corresponds to a `$\diagxyto/->/$' \\
  in the reduction diagram below. \\
  }
  %
  \qquad
  %
  \tablt{
  A notation for calculating the \\
  value of an expression by \\
  calculating the values of all \\
  its subexpressions: \\
  \\
  $\mat{\und{\und{2·3}{6} + \und{4·5}{20}}{26}}$ \\
  \\
  Each `$=$' in the previous diagram \\
  corresponds to applying one `$\subf{}{}$'. \\
  }
$$

\bsk
\bsk

A {\sl reduction diagram} for $2·3+4·5$:

(See Hindley/Seldin, pages 14 and 17)
%
%D diagram 2x4+4x5
%D 2Dx     100  +50  +40
%D 2D  100 A    B
%D 2D
%D 2D  +30 C    D    E
%D 2D
%D ren  A  B      ==>   2·3+4·5   2·3+20
%D ren  C  D  E   ==>     6+4·5     6+20  26
%D (( A B ->   A C -> B D ->
%D    C D ->   D E ->
%D ))
%D enddiagram
%D
\pu
$$\diag{2x4+4x5}$$

Note that when we can choose two subexpressions to calculate

the `$↓$' evaluatess the leftmost one, and the `$→$' evaluates

the rightmost one.


\bsk
\bsk

The {\sl subexpressions} of $2·3+4·5$:

$\subf{\subf{\subf{2}·\subf{3}} +
       \subf{\subf{4}·\subf{5}}
      }
$

\bsk
\msk

Exercise:

Do the same as above for these expressions:

a) $2·(3+4)+5·6$

b) $2+3+4$

c) $2+3+4+5$

(Improvise when needed)



%  _____                                _ _   _                           
% | ____|_  ___ __  _ __ ___  __      _(_) |_| |__   __   ____ _ _ __ ___ 
% |  _| \ \/ / '_ \| '__/ __| \ \ /\ / / | __| '_ \  \ \ / / _` | '__/ __|
% | |___ >  <| |_) | |  \__ \  \ V  V /| | |_| | | |  \ V / (_| | |  \__ \
% |_____/_/\_\ .__/|_|  |___/   \_/\_/ |_|\__|_| |_|   \_/ \__,_|_|  |___/
%            |_|                                                          
%
% «expressions-with-vars» (to ".expressions-with-vars")
% (lam181p 2 "expressions-with-vars")
% (lalp 2)


\section{Expressions with variables}

$\begin{array}{l}
    \text{If $a=5$ and $b=2$, then:} \\[5pt]
    \und{(\und{\und{a}{5} + \und{b}{2}}{7}) ·
         (\und{\und{a}{5} - \und{b}{2}}{3} )
         }{21} \\
  \end{array}
  %
  \qquad
  %
  \begin{array}{l}
    \text{If $a=10$ and $b=1$, then:} \\[5pt]
    \und{(\und{\und{a}{10} + \und{b}{1}}{11}) ·
         (\und{\und{a}{10} - \und{b}{1}}{9} )
         }{99} \\
  \end{array}
$

\bsk
\bsk

We know -- by algebra, which is not for (tiny) children --

that $(a+b)·(a-b) = a·a - b·b$ is true for all $a,b∈\R$

We know -- without algebra -- how to test

``$(a+b)·(a-b) = a·a - b·b$''

for specific values of $a$ and $b$...

\bsk

$\begin{array}{l}
    \text{If $a=5$ and $b=2$, then:} \\[5pt]
    \und{
      \und{(\und{\und{a}{5} + \und{b}{2}}{7}) ·
           (\und{\und{a}{5} - \und{b}{2}}{3})
           }{21}
      =
      \und{\und{\und{a}{5} · \und{a}{5}}{25} -
           \und{\und{b}{2} · \und{b}{2}}{4}
          }{21}
    }{\text{true}} \\
  \end{array}
$

\msk

$\begin{array}{l}
    \text{If $a=10$ and $b=1$, then:} \\[5pt]
    \und{
      \und{(\und{\und{a}{10} + \und{b}{1}}{11}) ·
           (\und{\und{a}{10} - \und{b}{1}} {9})
           }{99}
      =
      \und{\und{\und{a}{10} · \und{a}{10}}{100} -
           \und{\und{b}{1} · \und{b}{1}}{1}
          }{99}
    }{\text{true}} \\
  \end{array}
$


\bsk
\bsk
\bsk

A notation for (simultaneous) substitution:
%
% (phap 13 "logic-in-HAs")
% (pha     "logic-in-HAs")
% (pha     "logic-in-HAs" "simultaneous substitution")
%
$$((x+y)·z) \subst{ 
    x:=a+y \\
    y:=b+z \\
    z:=c+x \\
  }
  \;\;=\;\;
  ((a+y)+(b+z))·(c+x).
$$

Note that $((a+b)·(a-b))\subst{a:=5 \\ b:=2 \\} = (5+2)·(5-2)$.


%  ____        _         _                     _                         
% / ___| _   _| |__  ___| |_    __ _ _ __   __| |   ___ ___  _ __  _   _ 
% \___ \| | | | '_ \/ __| __|  / _` | '_ \ / _` |  / __/ _ \| '_ \| | | |
%  ___) | |_| | |_) \__ \ |_  | (_| | | | | (_| | | (_| (_) | |_) | |_| |
% |____/ \__,_|_.__/|___/\__|  \__,_|_| |_|\__,_|  \___\___/| .__/ \__, |
%                                                           |_|    |___/ 
% «subst-and-copy» (to ".subst-and-copy")
% (lam181p 3 "subst-and-copy")
% (lalp 2)

\section{Operations with substitution and copying}

We know that $Σ_{i=2}^5 \, i^3 = 2^3 + 3^3 + 4^3 + 5^3$.

If we introduce some intermediate steps we get:

\msk

{

\def\IN{\text{ in }}
\def\sto{\squigto\;\;}
\def∧{\mathbin{\&}}

$\begin{array}{l}
 Σ_{i=2}^5 \, i^3 \\
 \sto Σ_{i \IN (2,3,4,5)} \, i^3 \\
 \sto (i^3)[i:=2] + (i^3)[i:=3] + (i^3)[i:=4] + (i^3)[i:=5] \\
 \sto 2^3 + 3^3 + 4^3 + 5^3 \\
 \end{array}
$

\msk

$\begin{array}{l}
 ∀a∈\{2,3,5\}. \, a<4 \\
 \sto ∀a \IN (2,3,5). \, a<4 \\
 \sto (a<4)[a:=2] ∧ (a<4)[a:=3] ∧ (a<4)[a:=5] \\
 \sto (2<4) ∧ (3<4) ∧ (5<4) \\
 \sto \text{false} \\
 \end{array}
$

\msk

$\begin{array}{l}
 ∀a∈\{2,3,3,5\}. \, a<4 \\
 \sto ∀a \IN (2,3,3,5). \, a<4 \\
 \sto (a<4)[a:=2] ∧ (a<4)[a:=3] ∧ (a<4)[a:=3] ∧ (a<4)[a:=5] \\
 \sto (2<4) ∧ (3<4) ∧ (3<4) ∧ (5<4) \\
 \sto \text{false} \\
 \end{array}
$

\msk

$\begin{array}{l}
 \setofst{a^3}{a∈\{2,3,5\}} \\
 \sto \{(a^3)[a:=2], (a^3)[a:=3], (a^3)[a:=5]\} \\
 \sto \{2^3, 3^3, 5^3\} \\
 \end{array}
$

\msk

$\begin{array}{l}
 \setofst{(a,a^3)}{a∈\{2,3,5\}} \\
 \sto \{(a,a^3)[a:=2], (a,a^3)[a:=3], (a,a^3)[a:=5]\} \\
 \sto \{(2,2^3), (3,3^3), (5,5^3)\} \\
 \sto \{(2,8), (3,27), (5,125)\} \\
 \end{array}
$

\msk

{\sl One way} to understand the `$λ$' operator is using the idea ---

from Calculus 1 and Discrete Mathematics -- that a function is

a set of pairs (its ``graph'')...

\msk

$\begin{array}{l}
 λa{:}\{2,3,5\}.\,a^3 \\
 \sto \setofst{(a,a^3)}{a∈\{2,3,5\}} \\
 \sto \{(a,a^3)[a:=2], (a,a^3)[a:=3], (a,a^3)[a:=5]\} \\
 \sto \{(2,2^3), (3,3^3), (5,5^3)\} \\
 \sto \{(2,8), (3,27), (5,125)\} \\
 \end{array}
$

\msk

Note that


\msk

$\begin{array}{l}
 (λa{:}\{2,3,5\}.\,a^3)(5) \\
 \sto (\{(2,2^3), (3,3^3), (5,5^3)\})(5) \\
 \sto 5^3 \\
 \sto 125 \\
 \end{array}
$

\msk

$\begin{array}{l}
 (λa{:}\{2,3,5\}.\,a^3)(4) \\
 \sto (\{(2,2^3), (3,3^3), (5,5^3)\})(4) \\
 \sto \text{error} \\
 \end{array}
$

}



%  _                    _         _       
% | |    __ _ _ __ ___ | |__   __| | __ _ 
% | |   / _` | '_ ` _ \| '_ \ / _` |/ _` |
% | |__| (_| | | | | | | |_) | (_| | (_| |
% |_____\__,_|_| |_| |_|_.__/ \__,_|\__,_|
%                                         
% «lambda» (to ".lambda")
% (lam181p 4 "lambda")
% (lalp 3)
% (laq171 2)
% (laq171 3)

\section{Lambda}

A named function: $g(a) = a·a+4$

An unnamed function: $λa.\,a·a+4$

Let $h = λa.\,a·a+4$.

Then:



%D diagram reduce-g
%D 2Dx     100 +30 +30
%D 2D  100 A ----> B
%D 2D      |       |
%D 2D      v       v
%D 2D  +40 C ----> D
%D 2D      |       |
%D 2D      v       |
%D 2D  +20 E       |
%D 2D      | \     |
%D 2D      |  v    |
%D 2D  +20 |   F   |
%D 2D      |    \  |
%D 2D      v     v v
%D 2D  +20 G ----> H
%D 2D              |
%D 2D              v
%D 2D  +20         I
%D 2D              |
%D 2D              v
%D 2D  +20         J
%D 2D
%D ren  A  B  ==>  g(2+3)       g(5)
%D ren  E  F  ==>  (2+3)·(2+3)+4  (2+3)·5+4
%D ren  G  H  ==>  5·(2+3)+4       5·5+4
%D ren  I  J  ==>  25+4            29
%D (( A B ->   E F -> F H ->   G H ->
%D    A E -> E G ->            B H -> H I -> I J ->
%D ))
%D enddiagram
%D
% $$\Diag{reduce-g}$$

%D diagram reduce-h
%D 2Dx     100 +35 +35
%D 2D  100 A ----> B
%D 2D      |       |
%D 2D      v       v
%D 2D  +20 CL ---> DL
%D 2D      |       |
%D 2D      v       |
%D 2D  +20 CS ---> DS
%D 2D      |       |
%D 2D      v       |
%D 2D  +20 E       |
%D 2D      | \     |
%D 2D      |  v    |
%D 2D  +20 |   F   |
%D 2D      |    \  |
%D 2D      v     v v
%D 2D  +20 G ----> H
%D 2D              |
%D 2D              v
%D 2D  +20         I
%D 2D              |
%D 2D              v
%D 2D  +20         J
%D 2D
%D ren  A  B  ==>  h(2+3)            h(5)
%D ren  CL DL ==>  (λa.\,a·a+4)(2+3) (λa.\,a·a+4)(5)
%D ren  CS DS ==>  (a·a+4)[a:=2+3]   (a·a+4)[a:=5]
%D ren  E  F  ==>  (2+3)·(2+3)+4     (2+3)·5+4
%D ren  G  H  ==>  5·(2+3)+4         5·5+4
%D ren  I  J  ==>  25+4              29
%D (( A B ->   CS DS ->  CL DL ->   E F -> F H ->   G H ->
%D    A CL ->  CL CS ->  CS E -> E G ->
%D    B DL ->  DL DS ->  DS H -> H I -> I J ->
%D ))
%D enddiagram
%D
$$\pu
  \diag{reduce-g}
  \qquad
  \diag{reduce-h}
$$


\bsk

% TODO
% (find-istfile "1.org" "Defining named functions")
% (find-istfile "1.org" "defining unnamed functions")

The usual notation for defining functions is like this:

$$\begin{array}{rrcl}
 f: & \N & → & \R \\
    & n & ↦ & 2+\sqrt{n} \\
 \end{array}
$$


$$\def\t#1{\text{(#1)}}
 \begin{array}{rrcl}
 \t{name}: & \t{domain} & → & \t{codomain} \\
           & \t{variable} & ↦ & \t{expression} \\
 \end{array}
$$

It creates {\sl named} functions

(with domains and codomains).

\msk

The usual notation for creating named functions

without specifying their domains and codomains

is just $f(n) = 2+\sqrt{n}$.

\ssk

Note that this is:
%
$$\def\t#1{\text{(#1)}}
  \begin{array}{cccc}
         f & (\,n\,)            & = & 2+\sqrt{n} \\[5pt]
  \t{name} & (\,\t{variable}\,) & = & \t{expression} \\
  \end{array}
$$


%  _                 _         _                       
% | | __ _ _ __ ___ | |__   __| | __ _    _____  _____ 
% | |/ _` | '_ ` _ \| '_ \ / _` |/ _` |  / _ \ \/ / __|
% | | (_| | | | | | | |_) | (_| | (_| | |  __/>  <\__ \
% |_|\__,_|_| |_| |_|_.__/ \__,_|\__,_|  \___/_/\_\___/
%                                                      
% «lambda-exercises» (to ".lambda-exercises")
% (lam181p 5 "lambda-exercises")

\section{Lambda notation: exercises}

a) $(λa.10a)(2+3)$

b) $(λa.10a)((λb.b+4)(3))$

\msk

Hint: use the speed you're most comfortable with. For example:
%
$$\und{\und{\und{(λa.10a)(\und{\und{\und{(λb.b+4)(3)}{(b+4)[b:=3]}}{3+4}}{7})}
      {(10a)[a:=7]}}{10·7}}{70}
  \qquad
  \und{\und{(λa.10a)(\und{\und{(λb.b+4)(3)}{3+4}}7)}{10·7}}{70}
  \qquad
  \und{(λa.10a)(\und{(λb.b+4)(3)}{7})}{70}
$$

c) $((λa.(λb.10a+b))(3))(4)$

d) $((λf.(λa.f(f(a))))(λx.10x))(7)$

\msk

Hint 2: give names to subexpressions.
%
$$\und{(λa.10a)}{α}(\und{\und{(λb.b+4)}{β}(3)}{γ})
  \qquad
  \begin{array}[t]{rcl}
  α(γ) &=& α(β(3)) \\
       &=& α((λb.b+4)(3)) \\
       &=& α((b+4)[b:=3]) \\
       &=& α(3+4) \\
       &=& α(7) \\
       &=& (λa.10a)(7) \\
       &=& 70 \\
  \end{array}
$$





%   __                  _   _                                     _         
%  / _|_   _ _ __   ___| |_(_) ___  _ __     __ _ _ __ __ _ _ __ | |__  ___ 
% | |_| | | | '_ \ / __| __| |/ _ \| '_ \   / _` | '__/ _` | '_ \| '_ \/ __|
% |  _| |_| | | | | (__| |_| | (_) | | | | | (_| | | | (_| | |_) | | | \__ \
% |_|  \__,_|_| |_|\___|\__|_|\___/|_| |_|  \__, |_|  \__,_| .__/|_| |_|___/
%                                           |___/          |_|              
%
% «function-graphs» (to ".function-graphs")
% (lam181p 6 "function-graphs")
% (lalp 4)

\section{Functions as their graphs}

The {\sl graph} of

$$\begin{array}{rrcl}
 h: & \{-2,-1,0,1,2\} & → & \{0,1,2,3,4\} \\
    & k & ↦ & k^2 \\
 \end{array}
$$

is $\{(-2,4),(-1,1),(0,0),(1,1),(2,4)\}$.

\bsk

We can think that a function {\sl is} its graph,

and that a lambda-expression (with domain) reduces to a graph.

Then $h = \{(-2,4),(-1,1),(0,0),(1,1),(2,4)\}$

and $h(-2) = \{(-2,4),(-1,1),(0,0),(1,1),(2,4)\}(-2) = 4.$

\bsk

Let $h := (λk:\{-2,-1,0,1,2\}.k^2)$.

We have:
%
%D diagram reduce-k2-with-domain
%D 2Dx     100    +90   +70
%D 2D  100        A
%D 2D             |
%D 2D             v
%D 2D  +20 b      B --> C 
%D 2D      |      |     |
%D 2D      v      v     v
%D 2D  +35 d      D --> E
%D 2D      |      |     |
%D 2D      v      v     v
%D 2D  +45 f      F --> G
%D 2D
%D ren  A  B  C   ==>   h(-2)   (λk:\{-2,-1,0,1,2\}.k^2)(-2)    ?
%D ren     D  E   ==>                     \grapha(-2)             (-2)^2
%D ren     F  G   ==>                     \graphb(-2)              4
%D ren  b  d  f   ==>   (λk:\{-2,-1,0,1,2\}.k^2)  \grapha  \graphb
%D (( A B -> B E ->
%D           B D -> # C E ->
%D           D E ->
%D           D F -> E G ->
%D           F G ->
%D    b d -> d f ->
%D ))
%D enddiagram
%D
\pu
$$\def\grapha{\csm{(-2,(-2)^2),\\(-1,(-1)^2),\\(0,0^2),\\(1,1^2),\\(2,2^2)}}
  \def\graphb{\csm{(-2,4),\\(-1,1),\\(0,0),\\(1,1),\\(2,4)}}
  \diag{reduce-k2-with-domain}
$$

\bsk

Note:

the graph of $(λn:\N.n^2)$ has infinite points,

the graph of $(λn:\N.n^2)$ is an infinite set,

the graph of $(λn:\N.n^2)$ can't be written down {\sl explicitly} without `...'s...

\msk

Mathematicians love infinite sets.

Computers hate infinite sets.

For mathematicians a function {\sl is} its graph

($\uparrow$ remember Discrete Mathematics!)

For computer scientists a function {\sl is} is a finite program.

Computer scientists love `$λ$'s!

\msk

{\sl I} love things like this: $\csm{(3,30),\\(4,40)}(3) = 30$


% \end{document}

% The usual notation for defining functions is like this:
% 
%   f: N -> R                      (*)
%      n |-> 2+sqrt(n)
% 
%   name: domain -> codomain
%         variable |-> expression
% 
% It creates _named_ functions.
% 
% To use this notation we have to fill up five slots,
% and use a ":", an "->" and a "|->" in the right places.
% 
% After stating (*) we can "reduce" expressions with f, like this:
% 
%   f(4+5) ---> 2+sqrt(4+5)
%     :            :
%     :            :
%     v            v
%    f(9) ---> 2+sqrt(9) ---> 2+3 ---> 5
% 
% ** DONE $λ$-calculus: defining unnamed functions
% 
% Now compare
% 
%   name: domain -> codomain
%         variable |-> expression   name = \variable.expression
% 
%   g: N  -> R
%      a |-> a*a+4                    h = \a.a*a+4
% 
%   g(2+3) -----------> g(5)   h(2+3) ------------> h(5)
%     |                   |      |                   |
%     |                   |      v                   v
%     |                   |  (\a.a*a+4)(2+3) ---> (\a.a*a+4)(5)
%     |                   |      |                   |
%     v                   |      v                   |
%   (2+3)*(2+3)+4         |    (2+3)*(2+3)+4         |
%         |    \          |          |    \          |
%         |     v         |          |     v         |
%         |   (2+3)*5+4   |          |   (2+3)*5+4   |
%         |          \    |          |          \    |
%         v           v   v          v           v   v
%     5*(2+3)+4 -----> 5*5+4     5*(2+3)+4 -----> 5*5+4
% 





%  _____                      
% |_   _|   _ _ __   ___  ___ 
%   | || | | | '_ \ / _ \/ __|
%   | || |_| | |_) |  __/\__ \
%   |_| \__, | .__/ \___||___/
%       |___/|_|              
%
% «types» (to ".types")
% (lam181p 7 "types")

\section{Types (introduction)}

Let:

$\begin{array}{l}
 A = \{1,2\} \\
 B = \{30,40\}. \\
 \end{array}
$

\ssk

If $f:A→B$, then $f$ is one of these

four functions: 
%
$${\def\f#1 #2 {\sm{1↦#1\\2↦#2}}
 \f 30 30 , \f 30 40 , \f 40 30 , \f 40 40
}
$$

or, in other notation,
%
$${\def\f#1 #2 {\csm{(1,#1)\\(2,#2)}}
 \f 30 30 , \f 30 40 , \f 40 30 , \f 40 40
}
$$

which means that:
%
$$\def\f#1 #2 {\csm{(1,#1)\\(2,#2)}}
  f ∈ \csm{ \f 30 30 , \f 30 40 , \f 40 30 , \f 40 40 }
$$

Let's use the notation ``$A→B$'' for

``the set of all functions from $A$ to $B$''.

\msk

Then $(A→B) =
  \def\f#1 #2 {\csm{(1,#1)\\(2,#2)}}
  \csm{ \f 30 30 , \f 30 40 , \f 40 30 , \f 40 40 }
$

and $f:A→B$

means $f∈(A→B)$.

\msk

In Type Theory and $λ$-calculus ``$a:A$''

is pronounced ``$a$ is of type $A$'', and the meaning

of this is {\sl roughly} ``$a∈B$''.

(We'll see the differences between `$∈$' and `$:$' (much) later).

\msk

Note that:

1. if $f:A→B$ and $a:A$ then $f(a):B$

2. if $a:A$ and $b:B$ then $(a,b):A×B$

3. if $p:A×B$ then $πp:A$ and $π'p:B$, where

`$π$' means `first projection' and

`$π'$' means `second projection';

if $p=(2,30)$ then $πp=2$, $π'p=30$.

\msk

If $p:A×B$ and $g:B→C$, then:
%
\def\und#1#2{\underbrace{#1}_{#2}}
%
$$\und{(\und{π\und{p}{:A×B}}{:A},\;\;
        \und{\und{g}{:B→C}(\und{π'\und{p}{:A×B}}{:B})}{:C})}{:A×C})
$$






%  _                 _         _         _                      
% | | __ _ _ __ ___ | |__   __| | __ _  | |_ _ __ ___  ___  ___ 
% | |/ _` | '_ ` _ \| '_ \ / _` |/ _` | | __| '__/ _ \/ _ \/ __|
% | | (_| | | | | | | |_) | (_| | (_| | | |_| | |  __/  __/\__ \
% |_|\__,_|_| |_| |_|_.__/ \__,_|\__,_|  \__|_|  \___|\___||___/
%                                                               
% «typed-L1-trees» (to ".typed-L1-trees")
% (lam181p 8 "typed-L1-trees")

\section{Typed $λ$-calculus: trees}

$\begin{array}{l}
A = \{1,2\} \\
B = \{3,4\} \\
C = \{30,40\} \\
D = \{10,20\} \\
A×B = \cmat{(1,3),(1,4),\\(2,3),(2,4)} \\
B→C = \cmat{
  \csm{(3,30),\\(4,30)},
  \csm{(3,30),\\(4,40)},
  \csm{(3,40),\\(4,30)},
  \csm{(3,40),\\(4,40)}\\
} \\
\end{array}
$

\bsk

If we know [the values of] $a$, $b$, $f$

then we know [the value of] $(a,f(b))$.

If $(a,b)=(2,3)$ and $f=\csm{(3,30),\\(4,40)}$

then $(a,f(b))=(2,30)$.
%
%:
%:            (a,b)                   (2,3)
%:            -----π'                 -----π'
%:   (a,b)      b      f       (2,3)    3      \cmat{(3,30),(4,40)}
%:   -----π    --------\app    -----π  --------------------------\app
%:     a         f(b)            2              30
%:     --------------\pair       -----------------\pair
%:        (a,f(b))                  (2,30)
%:
%:        ^idxf1                    ^idxf2
%:
$$\pu \ded{idxf1} \qquad \ded{idxf2}$$

\msk

If we know the {\sl types} of $a$, $b$, $f$

we know the type of $(a,f(b))$.

If we know the types of $p$, $f$

we know the type of $(πp,f(π'p))$.

If we know the types of $p$, $f$

we know the type of $(λp:A×B.(πp,f(π'p)))$.



%:
%:               (a,b):A×B                             p:A×B
%:               ---------π'                           -----π'
%:   (a,b):A×B      b:B       f:B→C        p:A×B       π'p:B       f:B→C
%:   ---------π     ---------------\app    ------π     ----------------\app
%:       a:A             f(b):C              πp:A            f(π'p):C
%:       ----------------------\pair         ----------------------\pair
%:              (a,f(b)):A×C                      (πp,f(π'p)):A×C             
%:                                                                             
%:              ^idxf3                             ^idxf4                     
%:
%:
%:              p:A×B
%:              -----π'
%:  p:A×B       π'p:B       f:B→C
%:  ------π     ----------------\app
%:    πp:A            f(π'p):C
%:    ----------------------\pair
%:         (πp,f(π'p)):A×C
%:      -----------------------------λ
%:      (λp:A×B.(πp,f(π'p))):A×B→A×C 
%:                                     
%:          ^idxf5                    
\pu
% $$\ded{idxf3} \qquad \ded{idxf4}$$

$$\ded{idxf3}$$

% $$\ded{idxf4}$$

$$\ded{idxf5}$$




%  _____                                        
% |_   _|   _ _ __   ___  ___ _    _____  _____ 
%   | || | | | '_ \ / _ \/ __(_)  / _ \ \/ / __|
%   | || |_| | |_) |  __/\__ \_  |  __/>  <\__ \
%   |_| \__, | .__/ \___||___(_)  \___/_/\_\___/
%       |___/|_|                                
%
% «types-exercises» (to ".types-exercises")
% (lam181p 9 "types-exercises")

% (lalp 8)

\section{Types: exercises}

Let:

$\begin{array}{l}
A = \{1,2\} \\
B = \{3,4\} \\
C = \{30,40\} \\
D = \{10,20\} \\
f=\csm{(3,30),\\(4,40)} \\
g=\csm{(1,10),\\(2,20)} \\
\end{array}
$

Note that $f:B→C$ and $g:A→D$.

\msk

a) Evaluate $A×B$.

b) Evaluate $A→D$.

c) Evaluate $(πp,f(π'p))$ for each of the four possible values of $p:A×B$.

d) Evaluate $λp{:}A{×}B.(πp,f(π'p))$.

e) Is this true?
%
$$(λp{:}A{×}B.(πp,f(π'p))) = \csm{
  ((1,3),(1,30)), \\
  ((1,4),(1,40)), \\
  ((2,3),(2,30)), \\
  ((2,4),(2,40)) \\
}$$

f) Let $p = (2,3)$. Evaluate $(g(πp),f(π'p))$.

g) Check that if $p:A×B$ then $(g(πp),f(π'p)):D×C$.

h) Check that
$$(λp{:}A{×}B.(g(πp),f(π'p))):A×B→D×C.$$

i) Evaluate $(λp{:}A{×}B.(g(πp),f(π'p)))$.


%  _____                   _        __                              
% |_   _|   _ _ __   ___  (_)_ __  / _| ___ _ __ ___ _ __   ___ ___ 
%   | || | | | '_ \ / _ \ | | '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \
%   | || |_| | |_) |  __/ | | | | |  _|  __/ | |  __/ | | | (_|  __/
%   |_| \__, | .__/ \___| |_|_| |_|_|  \___|_|  \___|_| |_|\___\___|
%       |___/|_|                                                    
%
% «type-inference» (to ".type-inference")
% (lam181p 10 "type-inference")

\section{Type inference}

Here is another notation for checking types:
%
\def\und#1#2{\underbrace{#1}_{#2}}
%
$$\und{(λ\und{p}{:A×B}:A×B.\;\;
       \und{(\und{π\und{p}{:A×B}}{:A},\;\;
             \und{\und{f}{:B→C}(\und{π'\und{p}{:A×B}}{:B})}{:C})}{:A×C})
  }{:A×B→A×C}
$$

Compare it with:
%
$$\ded{idxf5}$$

\bsk


Exercise:

Infer the type of each of the terms below (at the right of the `$:=$').

Use the two notations above.

The types of $f$, $g$, $h$, $k$ are shown in the diagram below.

$\begin{array}{rrcl}
a) &  ({×}C)f &:=& λp{:}A{×}C.(f(πp),π'p) \\
b) &      h^♭ &:=& λq{:}B{×}C.(h(πq))(π'q) \\
c) &     g^♯  &:=& λb{:}B.λc{:}C.g(b,c) \\
d) & (C{→})k &:=& λφ{:}C{→}D.λc{:}C.k(φc) \\
\end{array}
$

\bsk

%D diagram CCC-adj
%D 2Dx      100     +40
%D 2D  100 AxC <--| A
%D 2D       |       |
%D 2D       |  <-|  |
%D 2D       v       v
%D 2D  +30 BxC <--| B
%D 2D       |       |
%D 2D       |  <-|  |
%D 2D       |  |->  |
%D 2D       v       v
%D 2D  +30  D |--> C->D
%D 2D       |       |
%D 2D       |  |->  |
%D 2D       v       v
%D 2D  +30  E |--> C->E
%D 2D
%D ren AxC BxC C->D C->E ==> A{×}C B{×}C C{→}D C{→}E
%D 2D
%D (( AxC A <-|
%D    BxC B <-|
%D    D C->D |->
%D    E C->E |->
%D
%D    A   B   -> .plabel= r f
%D    AxC BxC -> .plabel= l ({×}C)f
%D    AxC B    harrownodes nil 20 nil <-|
%D
%D    BxC D    -> .plabel= l \sm{h^\flat\\g}
%D    B   C->D -> .plabel= r \sm{h\\g^\sharp}
%D    BxC C->D harrownodes nil 20 nil <-| sl^
%D    BxC C->D harrownodes nil 20 nil |-> sl_
%D
%D    D    E    -> .plabel= l k
%D    C->D C->E -> .plabel= r (C{→})k
%D    D    C->E harrownodes nil 20 nil |->
%D ))
%D enddiagram
%D
\pu
$$\diag{CCC-adj}$$




% https://en.wikipedia.org/wiki/Simply_typed_lambda_calculus


%  _____                     _        __                              
% |_   _|__ _ __ _ __ ___   (_)_ __  / _| ___ _ __ ___ _ __   ___ ___ 
%   | |/ _ \ '__| '_ ` _ \  | | '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \
%   | |  __/ |  | | | | | | | | | | |  _|  __/ | |  __/ | | | (_|  __/
%   |_|\___|_|  |_| |_| |_| |_|_| |_|_|  \___|_|  \___|_| |_|\___\___|
%                                                                     
% «term-inference» (to ".term-inference")
% (lam181p 11 "term-inference")

\section{Term inference}

Exercises:

\def\co#1#2{#1:#2}
\def\cp#1#2{#1:#2}
\def\cp#1#2{\phantom{#1}:#2}

%:
%:  \co{p}{A×C}
%:  ----------π
%:  \cp{πp}{A}    \co{f}{A→B}    \co{p}{A×C}
%:  ------------------------\app  ----------π'
%:        \cp{f(πp)}{B}           \cp{π'p}{C}
%:        ------------------------------------\pair
%:              \cp{(f(πp),π'p)}{B×C}
%:        -------------------------------------λ
%:        \cp{λp{:}A{×}C.(f(πp),π'p)}{A×C→B×C}
%:
%:        ^CCC-adj-f
%:
%:                \co{q}{B×C}
%:                -----------π
%:  \co{q}{B×C}    \cp{πq}{B}   \co{h}{B→(C→D)}
%:  -----------π'  ----------------------------\app
%:  \cp{π'q}{C}        \cp{h(πq)}{C→D}
%:  -----------------------------------\app
%:        \cp{h(πq)(π'q)}{D}
%:      ----------------------------------λ
%:      \cp{λq{:}B{×C}.h(πq)(π'q)}{B×C→D}
%:
%:        ^CCC-adj-h
%:
%:    \co{b}{B}  \co{c}{C}
%:    --------------------\pair
%:       \cp{(b,c)}{B×C}         \co{g}{B×C→D}
%:       --------------------------------------\app
%:            \cp{g(b,c)}{D}
%:        ------------------------λ
%:        \cp{λc{:}C.g(b,c)}{C→D}
%:   -----------------------------------λ
%:   \cp{λb{:}B.λc{:}C.g(b,c)}{B→(C→D)}
%:
%:        ^CCC-adj-g
%:
%:     \co{c}{C} \co{φ}{C→D}
%:     ---------------------\app
%:           \cp{φc}{D}           \co{k}{D→E}
%:           ---------------------------------\app
%:                 \cp{k(φc)}{E}
%:           ------------------------λ
%:           \cp{λc{:}C.k(φc)}{(C→E)}
%:  --------------------------------------------λ
%:  \cp{φ{:}C{→}D.λc{:}C.k(φc)}{(C→D)→(C→E)}
%:
%:        ^CCC-adj-k
%:
\pu
$$\ded{CCC-adj-f}$$

$$\ded{CCC-adj-h}$$

$$\ded{CCC-adj-g}$$

$$\ded{CCC-adj-k}$$




%  _____                     _        __                                ____  
% |_   _|__ _ __ _ __ ___   (_)_ __  / _| ___ _ __ ___ _ __   ___ ___  |___ \ 
%   | |/ _ \ '__| '_ ` _ \  | | '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \   __) |
%   | |  __/ |  | | | | | | | | | | |  _|  __/ | |  __/ | | | (_|  __/  / __/ 
%   |_|\___|_|  |_| |_| |_| |_|_| |_|_|  \___|_|  \___|_| |_|\___\___| |_____|
%                                                                             
% «term-inference-answers» (to ".term-inference-answers")
% (lam181p 12 "term-inference-answers")

\section{Term inference: answers}

\def\co#1#2{#1:#2}
\def\cp#1#2{\phantom{#1}:#2}
\def\cp#1#2{#1:#2}

$$\ded{CCC-adj-f}$$

$$\ded{CCC-adj-h}$$

$$\ded{CCC-adj-g}$$

$$\ded{CCC-adj-k}$$



%   ____            _            _       
%  / ___|___  _ __ | |_ _____  _| |_ ___ 
% | |   / _ \| '_ \| __/ _ \ \/ / __/ __|
% | |__| (_) | | | | ||  __/>  <| |_\__ \
%  \____\___/|_| |_|\__\___/_/\_\\__|___/
%                                        
% «contexts» (to ".contexts")
% (lam181p 13 "contexts")

\section{Contexts and `$⊢$'}


Suppose that $A$, $B$, $C$ are known, and are sets.

(Jargon: ``fix sets $A$, $B$, $C$''.)

Then this
%
% (find-angg ".emacs" "laq162" "|-")
% (laq162 14 "20161129" "Coproduct diagram, |-, regras")
%
$$\def\t#1{\text{#1}}
  \def\fooa{\sm{\t{``context'': a series of} \\ \t{declarations like} \\ var:type}}
  \def\foob{\sm{expr:type}} \\
  %
  \und{p:A×B,f:B→C}{\fooa} ⊢ \und{f(π'p):C}{\foob}
$$

Means:

``In this context the expression $expr$ makes sense,
is not \textsf{error},

and its result is of type $type$.''

\ssk

Note that calculating $f(π'p)$ yields \textsf{error}

if we do not know the values of $f$ or $p$.

\msk

What happens if we add contexts to each $term:type$ in a tree?

The two bottom nodes in
%
$$\ded{idxf5}$$

would become:

$$ f:B→C,p:A×B ⊢         (πp,f(π'p))      :A×C $$
$$ f:B→C       ⊢ (λp:A×B.(πp,f(π'p))):A×B→A×C $$

After the rule `$λ$' the `$p$' is no longer needed!

\msk

If we add the contexts and omit the types, the tree becomes:
%
%:              p⊢p
%:              -----π'
%:  p⊢p        p⊢π'p       f⊢f
%:  ------π     ----------------\app
%:  p⊢πp            f,p⊢f(π'p)
%:    ----------------------\pair
%:         f,p⊢(πp,f(π'p))
%:      -----------------------------λ
%:      f⊢(λp{:}A{×}B.(πp,f(π'p)))
%:                                     
%:          ^cont1                    
%:
%:              [p⊢p]^1
%:              -----π'
%:  [p⊢p]^1     p⊢π'p     f⊢f
%:  ------π     ----------------\app
%:  p⊢πp            f,p⊢f(π'p)
%:    ----------------------\pair
%:         f,p⊢(πp,f(π'p))
%:      -----------------------------λ;1
%:      f⊢(λp{:}A{×}B.(πp,f(π'p)))
%:                                     
%:          ^cont2
%:
%:           [p]^1
%:           -----π'
%:  [p]^1     π'p     f
%:  ------π   ----------\app
%:  πp            f(π'p)
%:  ---------------------\pair
%:        (πp,f(π'p))
%:  -----------------------------λ;1
%:   (λp{:}A{×}B.(πp,f(π'p)))
%:                                     
%:          ^cont3
%:
\pu
$$\ded{cont1} \quad\squigto\qquad \ded{cont3}$$

Notational trick:

below the bar `$λ;1$' the value of $p$ is no longer needed;

we say that the $p$ is ``discharged'' (from the list of hypotheses)

and we mark the `$p$' on the leaves of the tree with `$[·]^1$';

a `$[·]^1$' on a hypothesis means: ``below the bar `$λ;1$' I am

no longer a hypothesis''.







\end{document}

% Local Variables:
% coding: utf-8-unix
% End: