Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Jacques Carette is active.

Publication


Featured researches published by Jacques Carette.


Journal of Functional Programming | 2009

Finally tagless, partially evaluated: Tagless staged interpreters for simpler typed languages

Jacques Carette; Oleg Kiselyov; Chung-chieh Shan

We have built the first family of tagless interpretations for a higher-order typed object language in a typed metalanguage (Haskell or ML) that require no dependent types, generalized algebraic data types, or postprocessing to eliminate tags. The statically type-preserving interpretations include an evaluator, a compiler (or staged evaluator), a partial evaluator, and call-by-name and call-by-value continuation-passing style (CPS) transformers. Our principal technique is to encode de Bruijn or higher-order abstract syntax using combinator functions rather than data constructors. In other words, we represent object terms not in an initial algebra but using the coalgebraic structure of the λ-calculus. Our representation also simulates inductive maps from types to types, which are required for typed partial evaluation and CPS transformations. Our encoding of an object term abstracts uniformly over the family of ways to interpret it, yet statically assures that the interpreters never get stuck. This family of interpreters thus demonstrates again that it is useful to abstract over higher-kinded types.


generative programming and component engineering | 2005

Multi-stage programming with functors and monads: eliminating abstraction overhead from generic code

Jacques Carette; Oleg Kiselyov

With Gaussian Elimination as a representative family of numerical and symbolic algorithms, we use multi-stage programming, monads and Ocamls advanced module system to demonstrate the complete elimination of the abstraction overhead while avoiding any inspection of the generated code. We parameterize our Gaussian Elimination code to a great extent (over domain, matrix representations, determinant tracking, pivoting policies, result types, etc) at no run-time cost. Because the resulting code is generated just right and not changed afterwards, we enjoy MetaOCamls guaranty that the generated code is well-typed. We further demonstrate that various abstraction parameters (aspects) can be made orthogonal and compositional, even in the presence of name-generation for temporaries and other bindings and “interleaving” of aspects. We also show how to encode some domain-specific knowledge so that “clearly wrong” compositions can be statically rejected by the compiler when processing the generator rather than the generated code.


Journal of Applied Physics | 2005

A kinetic model for the oxidation of silicon germanium alloys

Mohamed A. Rabie; Yaser M. Haddara; Jacques Carette

We propose a complete model for the oxidation of silicon germanium. Our model includes the participation of both silicon and germanium atoms in the oxidation process and the replacement by silicon of germanium in mixed oxides. Our model is capable of predicting, as a function of time, the oxide thickness, the profile of the silicon in the underlying alloy, and the profile of germanium in the oxide. The parameters of the model vary with temperature, alloy composition, and oxidizing ambient. The model shows excellent agreement with published results, with model parameters following trends consistent with the physical phenomena hypothesized. The presence of germanium catalyzes both the silicon and the germanium oxidation rates, and all reaction rates increase with increasing temperature. The resulting effective oxidation rate is enhanced, with respect to the oxidation of pure silicon, at all germanium concentrations. Mixed oxides form only in the case of high germanium concentrations, but at high temperature...


asian symposium on programming languages and systems | 2007

Finally Tagless, Partially Evaluated

Jacques Carette; Oleg Kiselyov; Chung-chieh Shan

We have built the first family of tagless interpretations for a higher-order typed object language in a typed metalanguage (Haskell or ML) that require no dependent types, generalized algebraic data types, or postprocessing to eliminate tags. The statically type-preserving interpretations include an evaluator, a compiler (or staged evaluator), a partial evaluator, and call-by-name and call-by-value CPS transformers.


international symposium on functional and logic programming | 2016

Probabilistic Inference by Program Transformation in Hakaru (System Description)

Praveen Narayanan; Jacques Carette; Wren Romano; Chung-chieh Shan; Robert Zinkov

We present Hakaru, a new probabilistic programming system that allows composable reuse of distributions, queries, and inference algorithms, all expressed in a single language of measures. The system implements two automatic and semantics-preserving program transformations—disintegration, which calculates conditional distributions, and simplification, which subsumes exact inference by computer algebra. We show how these features work together by describing the ideal workflow of a Hakaru user on two small problems. We highlight our composition of transformations and types in design and implementation.


artificial intelligence and symbolic computation | 2008

High-Level Theories

Jacques Carette; William M. Farmer

We introduce high-level theories in analogy with high-level programming languages. The basic point is that even though one can define many theories via simple, low-level axiomatizations, that is neither an effective nor a comfortable way to work with such theories. We present an approach which is closer to what users of mathematics employ, while still being based on formal structures.


mathematical knowledge management | 2009

A Review of Mathematical Knowledge Management

Jacques Carette; William M. Farmer

Mathematical Knowledge Management (MKM), as a field, has seen tremendous growth in the last few years. This period was one where many research threads were started and the field was defining itself. We believe that we are now in a position to use the MKM body of knowledge as a means to define what MKM is, what it worries about, etc. In this paper, we review the literature of MKM and gather various metadata from these papers. After offering some definitions surrounding MKM, we analyze the metadata we have gathered from these papers, in an effort to cast more light on the field of MKM and its evolution.


practical aspects of declarative languages | 2016

Simplifying Probabilistic Programs Using Computer Algebra

Jacques Carette; Chung-chieh Shan

We transform probabilistic programs to run more efficiently and read more easily, by composing three semantics-preserving transformations: (1) apply the denotational semantics; (2) improve the resulting integral; then (3) invert the denotational semantics. Whereas step 1 is a straightforward transformation from monadic to continuation-passing style, the rest builds on computer algebra: step 2 reorders and performs integrals, and step 3 represents density functions as differential operators.


international symposium on symbolic and algebraic computation | 2007

A canonical form for piecewise defined functions

Jacques Carette

We define a canonical form for piecewise defined functions. We show that the domains and ranges for which these functions are defined is larger than in previous work. Also, our canonical form algorithm is linear in the number of breakpoints instead of exponential. These results rely on the linear structure of the underlying domain of definition.


RelMiCS'05 Proceedings of the 8th international conference on Relational Methods in Computer Science, Proceedings of the 3rd international conference on Applications of Kleene Algebra | 2005

Control-Flow semantics for assembly-level data-flow graphs

Wolfram Kahl; Christopher Kumar Anand; Jacques Carette

As part of a larger project, we have built a declarative assembly language that enables us to specify multiple code paths to compute particular quantities, giving the instruction scheduler more flexibility in balancing execution resources for superscalar execution. Since the key design points for this language are to only describe data flow, have built-in facilities for redundancies, and still have code that looks like assembler, by virtue of consisting mainly of assembly instructions, we are basing the theoretical foundations on data-flow graph theory, and have to accommodate also relational aspects. Using functorial semantics into a Kleene category of “hyper-paths”, we formally capture the data-flow-with-choice aspects of this language and its implementation, providing also the framework for the necessary correctness proofs.

Collaboration


Dive into the Jacques Carette's collaboration.

Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Volker Sorge

University of Birmingham

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge