Inheritance as implicit coercion
Information and Computation
Inhabitation in Typed Lambda-Calculi (A Syntactic Approach)
TLCA '97 Proceedings of the Third International Conference on Typed Lambda Calculi and Applications
Information Retrieval in a Coq Proof Library Using Type Isomorphisms
TYPES '99 Selected papers from the International Workshop on Types for Proofs and Programs
Using category theory to design implicit conversions and generic operators
Semantics-Directed Compiler Generation, Proceedings of a Workshop
Higher-order unification and matching
Handbook of automated reasoning
Using structural context to recommend source code examples
Proceedings of the 27th international conference on Software engineering
Jungloid mining: helping to navigate the API jungle
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
XSnippet: mining For sample code
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Parseweb: a programmer assistant for reusing open source code on the web
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Coercions in a polymorphic type system
Mathematical Structures in Computer Science
SNIFF: A Search Engine for Java Using Free-Form Queries
FASE '09 Proceedings of the 12th International Conference on Fundamental Approaches to Software Engineering: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Learning from examples to improve code completion systems
Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Efficient Intuitionistic Theorem Proving with the Polarized Inverse Method
CADE-22 Proceedings of the 22nd International Conference on Automated Deduction
A Brief Overview of Agda --- A Functional Language with Dependent Types
TPHOLs '09 Proceedings of the 22nd International Conference on Theorem Proving in Higher Order Logics
Enumerating Proofs of Positive Formulae
The Computer Journal
FCUBE: an efficient prover for intuitionistic propositional logic
LPAR'10 Proceedings of the 17th international conference on Logic for programming, artificial intelligence, and reasoning
Interactive synthesis of code snippets
CAV'11 Proceedings of the 23rd international conference on Computer aided verification
Graph-based proof counting and enumeration with applications for program fragment synthesis
LOPSTR'04 Proceedings of the 14th international conference on Logic Based Program Synthesis and Transformation
Type-directed completion of partial expressions
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
Synthesis modulo recursive functions
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Game programming by demonstration
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
Hi-index | 0.00 |
Developing modern software typically involves composing functionality from existing libraries. This task is difficult because libraries may expose many methods to the developer. To help developers in such scenarios, we present a technique that synthesizes and suggests valid expressions of a given type at a given program point. As the basis of our technique we use type inhabitation for lambda calculus terms in long normal form. We introduce a succinct representation for type judgements that merges types into equivalence classes to reduce the search space, then reconstructs any desired number of solutions on demand. Furthermore, we introduce a method to rank solutions based on weights derived from a corpus of code. We implemented the algorithm and deployed it as a plugin for the Eclipse IDE for Scala. We show that the techniques we incorporated greatly increase the effectiveness of the approach. Our evaluation benchmarks are code examples from programming practice; we make them available for future comparisons.