Towards implementing robust geometric computations
SCG '88 Proceedings of the fourth annual symposium on Computational geometry
Computational geometry: algorithms and applications
Computational geometry: algorithms and applications
Formalizing Convex Hull Algorithms
TPHOLs '01 Proceedings of the 14th International Conference on Theorem Proving in Higher Order Logics
Static Analyses of the Precision of Floating-Point Operations
SAS '01 Proceedings of the 8th International Symposium on Static Analysis
CIL: Intermediate Language and Tools for Analysis and Transformation of C Programs
CC '02 Proceedings of the 11th International Conference on Compiler Construction
The reliable algorithmic software challenge RASC
Computer Science in Perspective
Reasoning about Uncertainty
The pitfalls of verifying floating-point computations
ACM Transactions on Programming Languages and Systems (TOPLAS)
Computational Geometry: Algorithms and Applications
Computational Geometry: Algorithms and Applications
Stable maintenance of point set triangulations in two dimensions
SFCS '89 Proceedings of the 30th Annual Symposium on Foundations of Computer Science
Apron: A Library of Numerical Abstract Domains for Static Analysis
CAV '09 Proceedings of the 21st International Conference on Computer Aided Verification
Interval Polyhedra: An Abstract Domain to Infer Interval Linear Relationships
SAS '09 Proceedings of the 16th International Symposium on Static Analysis
RTSS '09 Proceedings of the 2009 30th IEEE Real-Time Systems Symposium
Continuity analysis of programs
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Distance makes the types grow stronger: a calculus for differential privacy
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
µZ: an efficient engine for fixed points with constraints
CAV'11 Proceedings of the 23rd international conference on Computer aided verification
Continuity and robustness of programs
Communications of the ACM
Hi-index | 0.00 |
Applications in many areas of computing make discrete decisions under uncertainty, for reasons such as limited numerical precision in calculations and errors in sensor-derived inputs. As a result, individual decisions made by such programs may be nondeterministic, and lead to contradictory decisions at different points of an execution. This means that an otherwise correct program may execute along paths, that it would not follow under its ideal semantics, violating essential program invariants on the way. A program is said to be consistent if it does not suffer from this problem despite uncertainty in decisions. In this paper, we present a sound, automatic program analysis for verifying that a program is consistent in this sense. Our analysis proves that each decision made along a program execution is consistent with the decisions made earlier in the execution. The proof is done by generating an invariant that abstracts the set of all decisions made along executions that end at a program location l, then verifying, using a fixpoint constraint-solver, that no contradiction can be derived when these decisions are combined with new decisions made at l. We evaluate our analysis on a collection of programs implementing algorithms in computational geometry. Consistency is known to be a critical, frequently-violated, and thoroughly studied correctness property in geometry, but ours is the first attempt at automated verification of consistency of geometric algorithms. Our benchmark suite consists of implementations of convex hull computation, triangulation, and point location algorithms. On almost all examples that are not consistent (with two exceptions), our analysis is able to verify consistency within a few minutes.