Introduction to algorithms
The formal semantics of programming languages: an introduction
The formal semantics of programming languages: an introduction
Continuity in software systems
ISSTA '02 Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis
Propagation of Roundoff Errors in Finite Precision Computations: A Semantics Approach
ESOP '02 Proceedings of the 11th European Symposium on Programming Languages and Systems
Asserting the Precision of Floating-Point Computations: A Simple Abstract Interpreter
ESOP '02 Proceedings of the 11th European Symposium on Programming Languages and Systems
Reasoning about Uncertainty
Deviation Analysis: A New Use of Model Checking
Automated Software Engineering
Proving the absence of run-time errors in safety-critical avionics code
EMSOFT '07 Proceedings of the 7th ACM & IEEE international conference on Embedded software
Cyber Physical Systems: Design Challenges
ISORC '08 Proceedings of the 2008 11th IEEE Symposium on Object Oriented Real-Time Distributed Computing
Model checking of hybrid systems: from reachability towards stability
HSCC'06 Proceedings of the 9th international conference on Hybrid Systems: computation and control
ESOP'05 Proceedings of the 14th European conference on Programming Languages and Systems
A capability calculus for concurrency and determinism
CONCUR'06 Proceedings of the 17th international conference on Concurrency Theory
Differential privacy for collaborative security
Proceedings of the Third European Workshop on System Security
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
The reachability-bound problem
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Dimensions in program synthesis
Proceedings of the 12th international ACM SIGPLAN symposium on Principles and practice of declarative programming
Distance makes the types grow stronger: a calculus for differential privacy
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Coalescing executions for fast uncertainty analysis
Proceedings of the 33rd International Conference on Software Engineering
Relational verification using product programs
FM'11 Proceedings of the 17th international conference on Formal methods
Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering
Managing performance vs. accuracy trade-offs with loop perforation
Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering
Smoothing a program soundly and robustly
CAV'11 Proceedings of the 23rd international conference on Computer aided verification
Probabilistically accurate program transformations
SAS'11 Proceedings of the 18th international conference on Static analysis
Trustworthy numerical computation in Scala
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Randomized accuracy-aware program transformations for efficient approximate computations
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Continuity and robustness of programs
Communications of the ACM
Input-output robustness for discrete systems
Proceedings of the tenth ACM international conference on Embedded software
White box sampling in uncertain data processing enabled by program analysis
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Abstraction and invariance for algebraically indexed types
POPL '13 Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Sensitivity analysis using type-based constraints
Proceedings of the 1st annual workshop on Functional programming concepts in domain-specific languages
On-the-fly detection of instability problems in floating-point program execution
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Consistency analysis of decision-making programs
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Quantitative reactive modeling and verification
Computer Science - Research and Development
LICS '13 Proceedings of the 2013 28th Annual ACM/IEEE Symposium on Logic in Computer Science
Hi-index | 0.02 |
We present an analysis to automatically determine if a program represents a continuous function, or equivalently, if infinitesimal changes to its inputs can only cause infinitesimal changes to its outputs. The analysis can be used to verify the robustness of programs whose inputs can have small amounts of error and uncertainty---e.g., embedded controllers processing slightly unreliable sensor data, or handheld devices using slightly stale satellite data. Continuity is a fundamental notion in mathematics. However, it is difficult to apply continuity proofs from real analysis to functions that are coded as imperative programs, especially when they use diverse data types and features such as assignments, branches, and loops. We associate data types with metric spaces as opposed to just sets of values, and continuity of typed programs is phrased in terms of these spaces. Our analysis reduces questions about continuity to verification conditions that do not refer to infinitesimal changes and can be discharged using off-the-shelf SMT solvers. Challenges arise in proving continuity of programs with branches and loops, as a small perturbation in the value of a variable often leads to divergent control-flow that can lead to large changes in values of variables. Our proof rules identify appropriate ``synchronization points'' between executions and their perturbed counterparts, and establish that values of certain variables converge back to the original results in spite of temporary divergence. We prove our analysis sound with respect to the traditional epsilon-delta definition of continuity. We demonstrate the precision of our analysis by applying it to a range of classic algorithms, including algorithms for array sorting, shortest paths in graphs, minimum spanning trees, and combinatorial optimization. A prototype implementation based on the Z3 SMT-solver is also presented.