2020 James B. Wilson
Colorado State University
\[\frac{A,B:type}{A\times B:type}(F_{\times})\]
\[\frac{a:A\quad b:B}{(a,b):A\times B}(I_{\times})\]
\[\frac{x:A\times B}{\pi_A(x):A}(E_{\times}A)\]
\[\frac{x:A\times B}{\pi_B(x):B}(E_{\times} B)\]
\[\frac{a:A\quad b:B}{refl_a:\pi_A(a,b)=_A a}(C_{\times}A)\]
\[\frac{a:A\quad b:B}{refl_b:\pi_A(a,b)=_B b}(C_{\times}B)\]
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
\[\frac{A,B:type}{A\times B:type}(F_{\times})\]
\[\frac{a:A\quad b:B}{(a,b):A\times B}(I_{\times})\]
\[\begin{array}{rl}x & :A\times B\\ f &:T\to A\\ g &:T\to B\\ \hline f\times g & :T\to A\times B\end{array}\]
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
\((E_{\times})\)
\[\begin{array}{rl} t & : T\\ f &:T\to A\\ g &:T\to B\\ \hline refl_{f(t)} & :\pi_A((f\times g)(t))=_A f(t)\end{array}\]
\[\begin{array}{rl}t& : T\\ f &:T\to A\\ g &:T\to B\\ \hline refl_{g(t)} & :\pi_B((f\times g)(t))=_B g(t)\end{array}\]
\[\begin{array}{ccccc} A & \overset{\pi_A}{\leftarrow} & A\times B & \overset{\pi_B}{\rightarrow} & B \\ & f\nwarrow & \uparrow h & \nearrow g\\ & & T & & \end{array}\]
\[\begin{array}{ccccc} P & \leftarrow & P\wedge Q & \rightarrow & Q \\ & \nwarrow & \uparrow & \nearrow \\ & & T & & \end{array}\]
(Arrows here are "implies", e.g. T implies P.)
(Arrows here are functions, e.g. T maps to A,
also \(h=f\times g\).)
\[\frac{A,B:type}{A\sqcup B:type}(F_{\sqcup})\]
\[\frac{a:A}{\iota_A(a):A\sqcup B}(I_{\sqcup}A)\qquad \frac{b:B}{\iota_B(b):A\sqcup B}(I_{\sqcup}B)\]
\[\frac{x:A\sqcup B, f:A\to C, g:B\to C}{f\sqcup g:A\sqcup B\to C}(E_{\sqcup})\]
\[\frac{a:A}{refl_{f(a)}:(f\sqcup g)(\iota_A(a))=_C f(a)}(C_{\sqcup}A)\]
\[\frac{b:B}{refl_{g(b)}:(f\sqcup g)(\iota_B(b))=_C g(b)}(C_{\sqcup}B)\]
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
\[\begin{array}{ccccc} A & \overset{\iota_A}{\rightarrow} & A\sqcup B & \overset{\iota_B}{\leftarrow} & B \\ & f\searrow & \downarrow h & \swarrow g\\ & & R & & \end{array}\]
\[\begin{array}{ccccc} P & \rightarrow & P\vee Q & \leftarrow & Q \\ & \searrow & \downarrow & \swarrow \\ & & R & & \end{array}\]
(Arrows here are "implies", e.g. P implies R.)
(Arrows here are functions, e.g. A maps to R,
also \(h=f\sqcup g\).)
Make it from binary products, but which one? \((A\times B)\times C\) or \(A\times (B\times C)\)?
Claim \((A\times B)\times C\) is interchangable with \(A\times (B\times C)\)
Proof. \((x,c)\mapsto (\pi_A(x),(\pi_B(x),c))\)
is a function that can be typed as
\[f:(A\times B)\times C \to A\times (B\times C).\]
Also \((a,y)\mapsto ((a,\pi_B(y)),\pi_C(y))\)
is a function that can be typed as
\[g:A\times (B\times C) \to (A\times B)\times C.\]
\(f\circ g\) is \((x,c)\mapsto (x,c)\) and \(g\circ f\) is \((a,y)\mapsto (a,y)\) (identity functions). \(\Box\)
Claim \((A\times B)\times C\cong A\times (B\times C)\)
\[\frac{S,T:type}{S\cong T:type}(F_{\cong})\]
\((I_{\cong})\)
\[\begin{array}{l} f:S\to T\\ g:T\to S\\ proof_S: g\circ f=1_S\\ proof_T: g\circ g=1_T\\ \hline iso(f,g):S\cong T\end{array}\]
\[\frac{x:S\cong T}{to_x:S\to T}(E_{\cong}to)\]
\[\frac{x:S\cong T}{from_x:T\to S}(E_{\cong}from)\]
\((C_{\cong}S)\)\[\frac{f:S\to T,g:T\to S,\ldots}{proof:to_{iso(f,g)} = f}\]
(details later.)
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
"Equate" \((A\times B)\times C\) with \(A\times (B\times C)\) via an isomorphism.
Subtle problem is you now need to define a type to "equate" types, and on and on. Leads to \(\infty\)-categories and hard stuff. (Also we have some holes in isomorphism above.)
Make a new type for triples.
Of course next we will want a type for quadruples, qunituples,....multiples.
\[\frac{A_1,\ldots,A_n:type}{A_1\times\cdots \times A_n:type}(F_{\times})\]
\[\frac{a_1:A_1,\ldots,a_n:A_n}{(a_1,\ldots,a_n):A_1\times\cdots\times A_n}(I_{n\times})\]
\[\frac{x:A_1\times\cdots\times A_n}{\pi_1(x):A_1}(E_{n\times}1)\ldots\]
\[\cdots\frac{a_1:A_1,\ldots,a_n:A_n}{refl_{a_i}:\pi_i(a_1,\ldots,a_n)=_{A_i} a_i}(C_{n\times}i)\cdots\]
\[\cdots\frac{x:A_1\times\cdots\times A_n}{\pi_n(x):A_n}(E_{n\times}n)\]
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
Multiples just need an index set \(I\), perhaps more interesting than \(I=\{1,\ldots,n\}\), but certainly to include those sets.
In fact, \(I\) might just be an index type, no sets required.
\[\begin{array}{rl}I &:type\\ A&:I\to type\\ \hline \prod_{i:I} A_i&:type\end{array}(F_{\Pi})\]
\[\frac{i:I\Rightarrow a_i:A_i}{(i\mapsto a_i):\prod_{i:I} A_i}(I_{\Pi})\]
\[\begin{array}{rl}i&:I\\ a&:\prod_{i:I} A_i\\ \hline \pi_i(a)& :A_i\end{array}(E_{\Pi})\]
\[\begin{array}{l}i:I\\ j:I\Rightarrow a_j:A_j\\ \hline refl_{a_i}: \pi_i(i\mapsto a_i)=_{A_i} a_i\end{array}(C_{\Pi})\]
Terms \(f:\prod_{i:I}A_i\) are called dependent functions, written \(f:(i:I)\mapsto (f(i):A_i)\).
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
Hint of an error: Notice here "=" doesn't have the expected \(=_A\) telling us what type of data we are comparing.
What counts as a proof that functions are equal?
There are different meanings.
Equal inputs give equal outputs. Given \(f,g:S\to T\) define
\[(f=g) :\equiv (\forall s:S)(f(s)=g(s))\]
Turn "=" premise into data...
\[(f=g) :\equiv (\forall s:S)(refl_{f(s)}: f(s)=_T g(s))\]
Turn "\forall" premise into data...
\[(f=g) :\equiv (s:S)\mapsto (refl_{f(s)}: f(s)=_T g(s))\]
I.e.
\[(f=g) :\equiv \prod_{s:S}(f(s)=_T g(s))\]
Equal inputs give equal outputs actually should mean:
\[(f=g) :\equiv (\forall s_1,s_2:S)(s_1=_S s_2)\Rightarrow (f(s_1)=_T g(s_2))\]
I.e.
\[(f=g) :\equiv \prod_{s_1,s_2:S}\prod_{pf:(s_1=_S S_2)}f(s_1)=_T g(s_2).\]
It is much harder, but still possible, to work with functions at that level of equality.
As evidence of difficulty, even elite programming language like Haskell cannot yet do this. Though there is a recent prototype called Cubical that can.
When propositions, equations, statements \(P\) are types of data whose data are its proofs, then \[(\forall x:X)(P(x))\] becomes \[\prod_{x:X}P(x).\]
Proof of \((\forall x)(P(x))\) becomes data, a dependent function \[(x:X)\mapsto (evidence_x:P(x)).\]
Surprised?
Recall \(A\times B\) naturally modeled \(P\wedge Q\).
\((\forall x:X)(P(x))\) is just a big AND, \(P(x_1)\wedge P(x_2)\wedge\cdots\)
Makes sense that iterating \(\times\) would be the same as iterating AND, i.e. \(\prod\) and \(\forall\) are linked.
\[\frac{A_1,\ldots,A_n:type}{A_1+\cdots+A_n:type}(F_{+})\]
\[\frac{a_1:A_1}{\iota_1(a_1):A_1+\cdots+A_n}(I_{+}1)\cdots\]
\[\begin{array}{rl} x&:A_1+\cdots+A_n\\ f_1&:A_1\to B\\ \vdots &\\ f_n&:A_n\to B\\ \hline &(f_1+\cdots+f_n)(x):B\end{array}(E_{+})\]
\[\begin{array}{l}i:\{1,\ldots,n\}\vdash a_i:A_i\\ f_1: A_1\to B,\ldots,f_n:A_n\to B\\ \hline refl_{f(a_i)}: (f_1+\cdots+f_n)(\iota_i(a_i)) =_B f_i(a_i)\end{array}\]
\[\cdots\frac{a_n:A_n}{\iota_n(a_n):A_1+\cdots+A_n}(I_{+}n)\]
\((C_{+})\)
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule
\[\begin{array}{rl}I &:type\\ A&:I\to type\\ \hline \sum_{i:I} A_i&:type\end{array}(F_{\Sigma})\]
\[\frac{i:I\vdash a_i:A_i}{\iota_i(a_i):\sum_{i:I}A_i}(I_{\Sigma})\]
\[\begin{array}{rl} x&:\sum_{i:I}A_i\\ f &: \prod_{i:I} (A_i\to B)\\[2pt] \hline (\Sigma f)(x)&:B\end{array}(E_{\Sigma})\]
\[\begin{array}{l}i:I \vdash a_i:A_i\\ f:\prod_{i:I} (A_i\to B)\\ \hline refl_{f(a_i)}: (\Sigma f)(\iota_i(a_i)) =_B f(a_i)\end{array}\]
\((C_{+})\)
Formation Rule
Introduction Rule
Elimination Rule
Computation Rule