Systematic software development using VDM
Systematic software development using VDM
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
Eiffel: the language
Type inclusion constraints and type inference
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Principles of programming with complex objects and collection types
ICDT '92 Selected papers of the fourth international conference on Database theory
Design of the programming language FORSYTHE
ALGOL-like Languages, Volume 1
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Subtypes for Specifications: Predicate Subtyping in PVS
IEEE Transactions on Software Engineering
Dependent types in practical programming
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Regular expression types for XML
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Types and programming languages
Types and programming languages
Contracts for higher-order functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Subtyping with Union Types, Intersection Types and Recursive Types
TACS '94 Proceedings of the International Conference on Theoretical Aspects of Computer Software
Dependent Intersection: A New Way of Defining Records in Type Theory
LICS '03 Proceedings of the 18th Annual IEEE Symposium on Logic in Computer Science
HOPE: An experimental applicative language
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
CDuce: an XML-centric general-purpose language
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Simplify: a theorem prover for program checking
Journal of the ACM (JACM)
The next 700 data description languages
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
LINQ: reconciling object, relations and XML in the .NET framework
Proceedings of the 2006 ACM SIGMOD international conference on Management of data
Translating Higher-Order Clauses to First-Order Clauses
Journal of Automated Reasoning
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Refinement Types for Secure Implementations
CSF '08 Proceedings of the 2008 21st IEEE Computer Security Foundations Symposium
Semantic subtyping: Dealing set-theoretically with function, union, intersection, and negation types
Journal of the ACM (JACM)
Constrained types for object-oriented languages
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Reasoning about comprehensions with first-order SMT solvers
Proceedings of the 2009 ACM symposium on Applied Computing
Typing one-to-one and one-to-many correspondences in security protocols
ISSS'02 Proceedings of the 2002 Mext-NSF-JSPS international conference on Software security: theories and systems
CAV'07 Proceedings of the 19th international conference on Computer aided verification
TYPES'06 Proceedings of the 2006 international conference on Types for proofs and programs
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
Logical types for untyped languages
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Symbolic security analysis of ruby-on-rails web applications
Proceedings of the 17th ACM conference on Computer and communications security
Type-based access control in data-centric systems
ESOP'11/ETAPS'11 Proceedings of the 20th European conference on Programming languages and systems: part of the joint European conferences on theory and practice of software
Maintaining database integrity with refinement types
Proceedings of the 25th European conference on Object-oriented programming
Parametric polymorphism and semantic subtyping: the logical connection
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Nested refinements: a logic for duck typing
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Automatically verifying typing constraints for a data processing language
CPP'11 Proceedings of the First international conference on Certified Programs and Proofs
Dependent types for JavaScript
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
HALO: haskell to logic through denotational semantics
POPL '13 Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Verifying higher-order programs with the dijkstra monad
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
A multivalued language with a dependent type system
Proceedings of the 2013 ACM SIGPLAN workshop on Dependently-typed programming
Hi-index | 0.00 |
We study a first-order functional language with the novel combination of the ideas of refinement type (the subset of a type to satisfy a Boolean expression) and type-test (a Boolean expression testing whether a value belongs to a type). Our core calculus can express a rich variety of typing idioms; for example, intersection, union, negation, singleton, nullable, variant, and algebraic types are all derivable. We formulate a semantics in which expressions denote terms, and types are interpreted as first-order logic formulas. Subtyping is defined as valid implication between the semantics of types. The formulas are interpreted in a specific model that we axiomatize using standard first-order theories. On this basis, we present a novel type-checking algorithm able to eliminate many dynamic tests and to detect many errors statically. The key idea is to rely on an SMT solver to compute subtyping efficiently. Moreover, interpreting types as formulas allows us to call the SMT solver at run-time to compute instances of types.