123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- We use Martin-L\"of's logical
- framework~\cite{nordstroemPeterssonSmith:handbookLICS} as the underlying logic.
- %
- The choice of underlying logic is not crucial--the type checking algorithm
- presented in this paper can be extended to more feature-rich logics with, for
- instance, recursive definitions, pattern matching, and universe hierachies.
- \if \NoteOnPatternMatching 1
- See Section~\ref{secAddPatternMatching} for a note on how to extend it to
- pattern matching.
- \fi
- \paragraph*{Syntax} The syntax of {\Core} is given by the following grammar.
- {\small
- \[\begin{array}{lclr}
- A, B & ::= & \SET \Or M \Or \PI xAA & \mathit{types} \\
- M, N & ::= & x \Or c \Or M\,M \Or \LAM xM & \mathit{terms} \\
- \Gamma, \Delta & ::= & () \Or \Gamma,x:A & \mathit{contexts} \\
- \Sigma & ::= & () \Or \Sigma,c:A \Or \Sigma,c:A=M & \mathit{signatures} \\
- \end{array}\]
- }
- We assume countable sets of variables and constants and we identify terms up to
- $\alpha$-conversion. We adopt the convention that variables in contexts are
- distinct. Similarly a constant may not be declared in a signature more than
- once.
- Repeated application $M \, N_1 \, \dots \, N_k$ is abbreviated $M \, \bar N$.
- %
- Given a context $\Gamma = x_1 : A_1, \ldots, x_n : A_n$ we sometimes write
- $\LAM \Gamma M$ for $\LAM {x_1} \ldots \LAM {x_n} M$ and $M \, \Gamma$ for $M
- \, \bar x$.
- %
- Capture avoiding substitution of $N$ for $x$ in $M$ is written $\Subst M x N$,
- or $\SubstD M N$ when $x$ is clear from the context.
- %
- For dependent function types $\PI xAB$, we write $A \to B$ when $x$ is not free
- in $B$.
- %
- The signature contains axioms and non-recursive definitions.
- \paragraph*{Judgements} The type system of {\Core} is presented in six mutually
- dependent judgement forms.
- {\small
- \[\begin{array}{lcl}
- \IsSigCS\Sigma && \mbox{$\Sigma$ is a valid signature} \\
- \IsCtxCS\Sigma\Gamma && \mbox{$\Gamma$ is a valid context} \\
- \IsTypeCS\Sigma\Gamma A && \mbox{$A$ is a valid type in $\Gamma$} \\
- \HasTypeCS\Sigma\Gamma MA && \mbox{$M$ has type $A$ in $\Gamma$} \\
- \EqualTypeCS\Sigma\Gamma AB && \mbox{$A$ and $B$ are convertible types in $\Gamma$}\\
- \EqualCS\Sigma\Gamma MNA &~& \mbox{$M$ and $N$ are convertible terms of type $A$ in $\Gamma$} \\
- \end{array}\]
- }
- The typing rules follows standard presentations of type
- theory~\cite{nordstroemPeterssonSmith:handbookLICS}.
- \if \DetailedProofs 1
- \paragraph*{Properties} When proving the properties of the type checking
- algorithm in Section~\ref{secRules} we will need the following properties of
- {\Core}.
- \begin{lemma}[Uniqueness of types] \label{lemCoreEqType}
- \[ \infer{ \EqualTypeC \Gamma A B }
- { \HasTypeC \Gamma {c \, \bar M} A
- & \HasTypeC \Gamma {c \, \bar M} B
- }
- \]
- \end{lemma}
- \begin{lemma} \label{lemCoreAppInv}
- \[ \infer{ \HasTypeC \Gamma {\bar M} \Delta }
- { \HasTypeC \Gamma c {\Delta \to B}
- & \HasTypeC \Gamma {c \, \bar M} {B'}
- }
- \]
- \end{lemma}
- \begin{lemma}[Shadowing] \label{lemCoreShadow}
- \[ \infer{ \HasTypeC \Gamma {\LAM xM} {\PI xAB}}
- { \HasTypeC \Gamma M B
- & \HasTypeC \Gamma x A
- }
- \]
- \end{lemma}
- \begin{lemma}[Substitution] \label{lemCoreSubstType}
- \[ \infer{ \IsTypeC \Gamma {\Subst B x M} }
- { \IsTypeC {\Ext \Gamma x:A} B
- & \HasTypeC \Gamma M A
- }
- \]
- \end{lemma}
- \begin{lemma}[Subject reduction] \label{lemCoreSubjectReduction}
- \[ \infer{ \HasTypeC \Gamma {M'} A }
- { \HasTypeC \Gamma M A & \whnf M {M'} }
- \]
- \end{lemma}
- \begin{lemma}[Strengthening] \label{lemCoreStrengthen}
- \[ \infer{ \HasTypeC \Gamma M B }
- { \HasTypeC {\Ext \Gamma {x : A}} M B
- & x \notin \FV{M} \cup \FV{B}
- }
- \]
- \end{lemma}
- \begin{lemma} \label{lemCoreEqualDummySubst}
- If $\EqualTypeCS \Sigma \Gamma {B_1} {\SubstD {B_2} {h \, \bar M}}$ where $h
- \, \bar M$ is on weak head normal form and the head $h$ does not occur in
- $B_1$, then for any term $M$ of the right type we have $\EqualTypeCS \Sigma
- \Gamma {B_1} {\SubstD {B_2} M}$.
- \end{lemma}
- \fi
|