Verifying Whiley Programs with Boogie

被引:2
|
作者
Pearce, David J. [1 ]
Utting, Mark [2 ]
Groves, Lindsay [1 ]
机构
[1] Victoria Univ Wellington, Wellington, New Zealand
[2] Univ Queensland, Brisbane, Qld, Australia
关键词
Whiley; Boogie; Verifying compiler; Intermediate verification language; Semantic translation; Impedance mismatch; Flow typing; Verification conditions; RUNTIME ASSERTION CHECKING; AUTOMATIC VERIFIER; STATIC ANALYSIS; VERIFICATION; JML; DESIGN; SPECIFICATION; SELECTION; LANGUAGE; SYSTEM;
D O I
10.1007/s10817-022-09619-1
中图分类号
TP18 [人工智能理论];
学科分类号
081104 ; 0812 ; 0835 ; 1405 ;
摘要
The quest to develop increasingly sophisticated verification systems continues unabated. Tools such as Dafny, Spec#, ESC/Java, SPARK Ada and Whiley attempt to seamlessly integrate specification and verification into a programming language, in a similar way to type checking. A common integration approach is to generate verification conditions that are handed off to an automated theorem prover. This provides a nice separation of concerns and allows different theorem provers to be used interchangeably. However, generating verification conditions is still a difficult undertaking and the use of more "high-level" intermediate verification languages has become commonplace. In particular, Boogie provides a widely used and understood intermediate verification language. A common difficulty is the potential for an impedance mismatch between the source language and the intermediate verification language. In this paper, we explore the use of Boogie as an intermediate verification language for verifying programs in Whiley. This is noteworthy because the Whiley language has (amongst other things) a rich type system with considerable potential for an impedance mismatch. We provide a comprehensive account of translating Whiley to Boogie which demonstrates that it is possible to model most aspects of the Whiley language. Key challenges posed by the Whiley language included: the encoding of Whiley's expressive type system and support for flow typing and generics; the implicit assumption that expressions in specifications are well defined; the ability to invoke methods from within expressions; the ability to return multiple values from a function or method; the presence of unrestricted lambda functions; and the limited syntax for framing. We demonstrate that the resulting verification tool can verify significantly more programs than the native Whiley verifier which was custom-built for Whiley verification. Furthermore, our work provides evidence that Boogie is (for the most part) sufficiently general to act as an intermediate language for a wide range of source languages.
引用
收藏
页码:747 / 803
页数:57
相关论文
共 50 条
  • [21] Soft verifying dynamic features in dynamic programs
    Hou, Honglun
    Lv, Jia
    Wu, Minghui
    Information Technology Journal, 2013, 12 (24) : 8116 - 8122
  • [22] Verifying pointer programs using graph grammars
    Heinen, Jonathan
    Jansen, Christina
    Katoen, Joost-Pieter
    Noll, Thomas
    SCIENCE OF COMPUTER PROGRAMMING, 2015, 97 : 157 - 162
  • [23] Verifying pointer safety for programs with unknown calls
    Luo, Chenguang
    Craciun, Florin
    Qin, Shengchao
    He, Guanhua
    Chin, Wei-Ngan
    JOURNAL OF SYMBOLIC COMPUTATION, 2010, 45 (11) : 1163 - 1183
  • [24] Verifying Concurrent Programs against Sequential Specifications
    Bouajjani, Ahmed
    Emmi, Michael
    Enea, Constantin
    Hamza, Jad
    PROGRAMMING LANGUAGES AND SYSTEMS, 2013, 7792 : 290 - 309
  • [25] Verifying recursive programs using intraprocedural analyzers
    Chen, Yu-Fang
    Hsieh, Chiao
    Tsai, Ming-Hsien
    Wang, Bow-Yaw
    Wang, Farn
    Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 2014, 8723 : 118 - 133
  • [26] Verifying Optimizations of Concurrent Programs in the Promising Semantics
    Zha, Junpeng
    Liang, Hongjin
    Feng, Xinyu
    PROCEEDINGS OF THE 43RD ACM SIGPLAN INTERNATIONAL CONFERENCE ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION (PLDI '22), 2022, : 903 - 917
  • [27] VERIFYING LOCAL STRATIFIABILITY OF LOGIC PROGRAMS AND DATABASES
    SHEN, YD
    NEW GENERATION COMPUTING, 1992, 11 (01) : 23 - 46
  • [28] Verifying Multithreaded Recursive Programs with Integer Variables
    Ben Rajeb, Narjes
    Nasraoui, Brahim
    Robbana, Riadh
    Touili, Tayssir
    ELECTRONIC NOTES IN THEORETICAL COMPUTER SCIENCE, 2009, 239 : 143 - 154
  • [29] Verifying Heterogeneous Multi-Agent Programs
    Thu Trang Doan
    Yao, Yuan
    Alechina, Natasha
    Logan, Brian
    AAMAS'14: PROCEEDINGS OF THE 2014 INTERNATIONAL CONFERENCE ON AUTONOMOUS AGENTS & MULTIAGENT SYSTEMS, 2014, : 149 - 156
  • [30] VERIFYING GENERAL SAFETY PROPERTIES OF ADA TASKING PROGRAMS
    DILLON, LK
    IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, 1990, 16 (01) : 51 - 63