TY - JOUR
T1 - Relatively complete refinement type system for verification of higher-order non-deterministic programs
AU - Unno, Hiroshi
AU - Satake, Yuki
AU - Terauchi, Tachio
N1 - Publisher Copyright:
© 2018 Copyright held by the owner/author(s).
PY - 2018/1
Y1 - 2018/1
N2 - This paper considers verification of non-deterministic higher-order functional programs. Our contribution is a novel type system in which the types are used to express and verify (conditional) safety, termination, non-safety, and non-termination properties in the presence of ∀-∃ branching behavior due to non-determinism. For instance, the judgement ⊢ e : {u:int | Φ(u)}∀∀ says that every evaluation of e either diverges or reduces to some integer u satisfying Φ(u), whereas ⊢ e : {u:int | Ψ(u)}∃∀ says that there exists an evaluation of e that either diverges or reduces to some integer u satisfying Ψ(u). Note that the former is a safety property whereas the latter is a counterexample to a (conditional) termination property. Following the recent work on type-based verification methods for deterministic higher-order functional programs, we formalize the idea on the foundation of dependent refinement types, thereby allowing the type system to express and verify rich properties involving program values, branching behaviors, and the combination thereof. Our type system is able to seamlessly combine deductions of both universal and existential facts within a unified framework, paving the way for an exciting opportunity for new type-based verification methods that combine both universal and existential reasoning. For example, our system can prove the existence of a path violating some safety property from a proof of termination that uses a well-foundedness termination argument. We prove that our type system is sound and relatively complete, and further, thanks to having both modes of non-determinism, we show that our types are closed under complement.
AB - This paper considers verification of non-deterministic higher-order functional programs. Our contribution is a novel type system in which the types are used to express and verify (conditional) safety, termination, non-safety, and non-termination properties in the presence of ∀-∃ branching behavior due to non-determinism. For instance, the judgement ⊢ e : {u:int | Φ(u)}∀∀ says that every evaluation of e either diverges or reduces to some integer u satisfying Φ(u), whereas ⊢ e : {u:int | Ψ(u)}∃∀ says that there exists an evaluation of e that either diverges or reduces to some integer u satisfying Ψ(u). Note that the former is a safety property whereas the latter is a counterexample to a (conditional) termination property. Following the recent work on type-based verification methods for deterministic higher-order functional programs, we formalize the idea on the foundation of dependent refinement types, thereby allowing the type system to express and verify rich properties involving program values, branching behaviors, and the combination thereof. Our type system is able to seamlessly combine deductions of both universal and existential facts within a unified framework, paving the way for an exciting opportunity for new type-based verification methods that combine both universal and existential reasoning. For example, our system can prove the existence of a path violating some safety property from a proof of termination that uses a well-foundedness termination argument. We prove that our type system is sound and relatively complete, and further, thanks to having both modes of non-determinism, we show that our types are closed under complement.
KW - Higher-Order Programs
KW - Non-Deterministic Programs
KW - Program Verification
KW - Refinement Types
KW - Relative Completeness
UR - http://www.scopus.com/inward/record.url?scp=85120100451&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=85120100451&partnerID=8YFLogxK
U2 - 10.1145/3158100
DO - 10.1145/3158100
M3 - Article
AN - SCOPUS:85120100451
SN - 2475-1421
VL - 2
JO - Proceedings of the ACM on Programming Languages
JF - Proceedings of the ACM on Programming Languages
IS - POPL
M1 - 12
ER -