Network


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

Hotspot


Dive into the research topics where Ivan Kuraj is active.

Publication


Featured researches published by Ivan Kuraj.


programming language design and implementation | 2013

Complete completion using types and weights

Tihomir Gvero; Viktor Kuncak; Ivan Kuraj; Ruzica Piskac

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.


conference on object oriented programming systems languages and applications | 2013

Synthesis modulo recursive functions

Etienne Kneuss; Ivan Kuraj; Viktor Kuncak; Philippe Suter

We describe techniques for synthesis and verification of recursive functional programs over unbounded domains. Our techniques build on top of an algorithm for satisfiability modulo recursive functions, a framework for deductive synthesis, and complete synthesis procedures for algebraic data types. We present new counterexample-guided algorithms for constructing verified programs. We have implemented these algorithms in an integrated environment for interactive verification and synthesis from relational specifications. Our system was able to synthesize a number of useful recursive functions that manipulate unbounded numbers and data structures.


programming language design and implementation | 2016

Program synthesis from polymorphic refinement types

Nadia Polikarpova; Ivan Kuraj; Armando Solar-Lezama

We present a method for synthesizing recursive functions that provably satisfy a given specification in the form of a polymorphic refinement type. We observe that such specifications are particularly suitable for program synthesis for two reasons. First, they offer a unique combination of expressive power and decidability, which enables automatic verification—and hence synthesis—of nontrivial programs. Second, a type-based specification for a program can often be effectively decomposed into independent specifications for its components, causing the synthesizer to consider fewer component combinations and leading to a combinatorial reduction in the size of the search space. At the core of our synthesis procedure is a newalgorithm for refinement type checking, which supports specification decomposition. We have evaluated our prototype implementation on a large set of synthesis problems and found that it exceeds the state of the art in terms of both scalability and usability. The tool was able to synthesize more complex programs than those reported in prior work (several sorting algorithms and operations on balanced search trees), as well as most of the benchmarks tackled by existing synthesizers, often starting from a more concise and intuitive user input.


conference on object oriented programming systems languages and applications | 2015

Programming with enumerable sets of structures

Ivan Kuraj; Viktor Kuncak; Daniel Jackson

We present an efficient, modular, and feature-rich framework for automated generation and validation of complex structures, suitable for tasks that explore a large space of structured values. Our framework is capable of exhaustive, incremental, parallel, and memoized enumeration from not only finite but also infinite domains, while providing fine-grained control over the process. Furthermore, the framework efficiently supports the inverse of enumeration (checking whether a structure can be generated and fast-forwarding to this structure to continue the enumeration) and lazy enumeration (achieving exhaustive testing without generating all structures). The foundation of efficient enumeration lies in both direct access to encoded structures, achieved with well-known and new pairing functions, and dependent enumeration, which embeds constraints into the enumeration to avoid backtracking. Our framework defines an algebra of enumerators, with combinators for their composition that preserve exhaustiveness and efficiency. We have implemented our framework as a domain-specific language in Scala. Our experiments demonstrate better performance and shorter specifications by up to a few orders of magnitude compared to existing approaches.


Proceedings of the Fifth Annual Scala Workshop on | 2014

SciFe: Scala framework for efficient enumeration of data structures with invariants

Ivan Kuraj; Viktor Kuncak

We introduce SciFe, a tool for automated generation of complex structures, suitable for tasks such as automated testing and synthesis. SciFe is capable of exhaustive, memoized enumeration of values from finite or infinite domains. SciFe is based on the concept of an enumerator, defined as an efficiently computable bijection between natural numbers and values from a given set. SciFe introduces higher-order enumerators which define enumerators that depend on additional parameters. SciFe also includes combinators that can construct more complex enumerators from existing ones while preserving exhaustiveness and efficiency. SciFe is a Scala library that implements a domain-specific language. This tool demo presents an overview of SciFe as well as its use to generate complex structures such as search trees and models of class hierarchies. Our experiments demonstrate better performance and shorter specifications when compared to existing approaches.


programming language design and implementation | 2017

DemoMatch: API discovery from demonstrations

Kuat Yessenov; Ivan Kuraj; Armando Solar-Lezama

We introduce DemoMatch, a tool for API discovery that allows the user to discover how to implement functionality using a software framework by demonstrating the functionality in existing applications built with the same framework. DemoMatch matches the demonstrations against a database of execution traces called Semeru and generates code snippets explaining how to use the functionality. We evaluated DemoMatch on several case studies involving Java Swing and Eclipse RCP.


2nd Summit on Advances in Programming Languages (SNAPL 2017) | 2017

Leveraging Sequential Computation for Programming Efficient and Reliable Distributed Systems

Ivan Kuraj; Armando Solar-Lezama

While sequential programs represent a simple and natural form for expressing functionality, corresponding distributed implementations get considerably more complex. We examine the possibility of using the sequential computation model for programming distributed systems and requirements for making that possible. The benefits of such an approach include easier specification and reasoning about behaviors in the system, as well as a possibility to directly reuse existing techniques for checking correctness and optimization of sequential programs to produce efficient and reliable distributed implementations.


arXiv: Programming Languages | 2013

On Integrating Deductive Synthesis and Verification Systems

Etienne Kneuss; Viktor Kuncak; Ivan Kuraj; Philippe Suter


sigplan symposium on new ideas new paradigms and reflections on programming and software | 2016

Exploring the role of sequential computation in distributed systems: motivating a programming paradigm shift

Ivan Kuraj; Daniel Jackson


Archive | 2013

On Repairing Ill-Typed Expressions

Tihomir Gvero; Ivan Kuraj; Ruzica Piskac

Collaboration


Dive into the Ivan Kuraj's collaboration.

Top Co-Authors

Avatar

Viktor Kuncak

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Tihomir Gvero

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar

Armando Solar-Lezama

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

Daniel Jackson

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

Etienne Kneuss

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar

Kuat Yessenov

Massachusetts Institute of Technology

View shared research outputs
Researchain Logo
Decentralizing Knowledge