Implementing Dependent Types Using Sequent Calculi
Transcription
Implementing Dependent Types Using Sequent Calculi
Implementing Dependent Types Using Sequent Calculi Daniel Gustafsson and Nicolas Guenot∗ IT University of Copenhagen, Denmark {dagu|ngue}@itu.dk A critical issue concerning programming languages and proof assistants based on dependent type theory is the efficient implementation of reduction on open terms, where meta-variables can appear: this question is important not only for the execution of dependently typed programs, but already in the typechecker implementing the validation of such programs, through the use of the conversion rule. Following the Curry-Howard tradition, we are currently investigating the relation between the internal language of Agda [8] and a focused sequent calculus presentation of intuitionistic logic, the sequent calculus being naturally well-suited for typing open terms. 1 Internal Languages using Dependent Types Different approaches can be used to implement a dependently typed language. For example, the proof terms used in the Coq proof assistant are really based on the natural deduction presentation of a higher-order intuitionistic logic, where matching is performed through a dedicated construct. However, in the Agda language, matching is part of an equational style of programming where the left-hand side of a definition can have a complex shape. As a result, the internal language used in Agda is not exactly a dependently typed pure λ-calculus, but a calculus containing the case-splitting tree of a definition involving matching. A close look at the internal language of Agda reveals that it is much related to a presentation of intuitionistic logic in the sequent calculus. In particular, one can see the use of a definition as applying the cut rule, where one premise corresponds to the definition and the other to its use inside another term. Then, whenever the typechecker needs to compare two terms, it needs to reduce them by unfolding the definitions, which corresponds to a cut elimination process — note that all cuts cannot be eliminated, because of recursive definitions. At this point, it is important to observe that cut elimination in the sequent calculus, although equivalent to β-reduction in the standard λ-calculus, can be performed in many different ways [9, 3]. Moreover, important insights on cut elimination have been obtained through the analysis of linear logic [4] and its intuitionistic variant [2]. Based on the idea that more control can be gained over normalisation of terms in the sequent calculus, compared to natural deduction and the associated β rule, we propose an analysis of reduction in Agda using the tools of the sequent calculus to improve the efficiency of reduction, and therefore also the efficiency of typechecking. 2 Term Assignments for Focused Sequent Calculi Although it offers a fine-grained representation of proofs, the sequent calculus LJ for intuitionistic logic is not well-suited for computation, in its basic, unrestricted form. Indeed, it lacks a canonical structure as found in natural deduction, that can guide the reduction process, but a well-behaved form can be recovered through the focusing technique [1, 7]. This strong structure is also important to compare proof terms, which is essential in a proof assistant — in the setting of ∗ Supported by grant 10-092309 from the Danish Council for Strategic Research to the Demtech project. 53 Implementing dependent types using sequent calculi Gustafsson and Guenot natural deduction, βη-normal forms are considered, while in the sequent calculus one should consider cut-free focused proofs. Moreover, focusing allows to consider only the fragment of proofs isomorphic to the standard λ-calculus, or to allow for proofs containing more sharing. The internal language of Agda uses an application to list of arguments called spines, and is best compared to the λ-calculus of Herbelin [5], the computational interpretation of LJT, a particular focused system related to call-by-name reduction in the λ-calculus. There are other possible choices in the design of a focused system, for example following a call-by-value approach, but LJT is an excellent starting point — in particular, because it is the basis for a system developped to handle dependent types in the sequent calculus [6]. Our claim is that the versatile structure of the sequent calculus, associated with the strong structure provided by focusing, makes it an ideal framework to study, from a proof-theoretical perspective, the implementation of dependently typed languages. As an example, consider a focused system where ` denotes the inversion phase and denotes the focusing phase. One can handle case-splitting on natural numbers using the following rules: Γt:C − −−−−−−−−−−− − Γ ` 7→ t : C Γ, Γ0 {zero/x} ` T : C{zero/x} Γ, n : N, Γ0 {suc n/x} ` T 0 : C{suc n/x} − −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− − 0 0 Γ, x : N, Γ ` split (x, T, n.T ) : C and this yields the following interpretation of an equational definition of addition, as it would be written in Agda: add zero n = n add (suc m’) n = suc (add m’ n) ⇒ m : N, n : N ` split (m, 7→ n, m0 7→ suc (add (m0 :: n :: ε) :: ε)) From the basis of a sequent system adding dependent types to λ, we can start the investigation of more complex focused systems, as obtained for example when considering the full LJF calculus of [7], of which the usual LJT and LJQ calculi are fragment. The goal of this move from the standard setting of natural deduction to the sequent calculus is to exploit the ability of the sequent calculus to capture different evaluation strategies, such as call-by-name and call-by-value, in a single, unifying framework, and therefore allowing to improve the efficiency of reduction. References [1] J.-M. Andreoli. Logic programming with focusing proofs in linear logic. J. of Log. and Comput., 2(3):297–347, 1992. [2] N. Benton, G. Bierman, M. Hyland, and V. de Paiva. A term calculus for intuitionistic linear logic. In Proc. of TLCA ’93, v. 664 of Lect Notes in Comput. Sci., pp. 75–90. Springer, 1993. [3] J. Gallier. Constructive logics part I: A tutorial on proof systems and typed λ-calculi. Theor. Comput. Sci., 110(2):249–339, 1993. [4] J.-Y. Girard. Linear logic. Theor. Comput. Sci., 50(1–2):1–102, 1987. [5] H. Herbelin. A λ-calculus structure isomorphic to Gentzen-style sequent calculus structure. In Selected Papers from CSL ’94, v. 933 of Lect. Notes in Comput. Sci., pp. 61–75, 1995. [6] S. Lengrand, R. Dyckhoff, and J. McKinna. A focused sequent calculus framework for proof search in pure type systems. Log. Methods in Comput. Sci., 7(1:6), 2011. [7] C. Liang and D. Miller. Focusing and polarization in linear, intuitionistic, and classical logics. Theor. Comput. Sci., 410(46):4747–4768, 2009. [8] U. Norell. Towards a Practical Programming Language Based on Dependent Type Theory. PhD thesis, Chalmers University of Technology, 2007. [9] A. Troelstra and H. Schwichtenberg. Basic Proof Theory. Cambridge University Press, 1996. 54