gram, typically a potential run-time violation like a NullPointerException or ...... java.lang.Math.abs(int), it is often overlooked by programmers because they.
Java Program Verification Challenges B.P.F. Jacobs, J.R. Kiniry, M.E. Warnier Nijmegen Institute for Computing and Information Sciences/
NIII-R0310 March 2003
Nijmegen Institute for Computing and Information Sciences Faculty of Science Catholic University of Nijmegen Toernooiveld 1 6525 ED Nijmegen The Netherlands
!" #$
$ " " $ " $ !! % & " "!! $ '( $
" !! % $)* "! +"" "$ , $$ "
" $ % *!"#
+. "$ $ ! $ * # !(
$" "! $$*$ " & " +"" " $ & " & " /0 /0 12.345 67 89 1:3/4
! "" # " # ! # $%% %& %'(" ) ! * *
! " * ! * " ) ! " ) $%+( , $%- .%(" ) ! * ! * ,//0 $+( " 1 ! ,//0 23 * " ) ! # # $4( $.+( # $%5( 6 $.(" * # * 789: $%.( ! " 789: # " ) ; < 789: = > *? 789: " 1 ;*< ! 789: * ""
#
$ % 8. 66 ; *$ & "! '
" ( !"$ 1 67 6< ' 64 % =>+""
! "" =! = " @ ;< = = #
" / ! * " @
A = "
*# ! " / ! # *# $&( * " ) ," ! " ) ! $'(" ) ! > A ! " ) ! * " 9 A* =B /A* * 8 C D= 8 ) C * C" 7 ! ! * ! " * A ,"
) , , $%-( " *
= = = " * ! * = " , * " ) * " ) # , = # $-( ,//0 # " 9 * " : E : E E E E : E : 8 " - ( *! "## +"" "$ $ ?@
$ !*
1 " ! " ) = " 1 * *
! * = = " * 8 +"4" F* " D! * ! , " : E E > E > E > E 7 ! > E : 8 ! F * ! = " , = " *" , " ! # " F* * #* ! = " ) * , $.%( " F , =! " F* * * # " ! * "# * ! " ) , $.%( ! " / ! " @ ! "# $ %% ! & %% ' ( )* !" ) * * * " , $..(" ) " ) = * = " F* ! 8 = +"G" * * " , "
"
* * ? " 1 * * " " F*= *# # " * " ! * * * " @ * , = ! " , 10= $.&("
) H, ! " / != " ) =! "
/ ! @ % " ) ! ( " ! * # " 789: " 7 + ("
/ = B ! " ) = " @ . ! $&( * =B 2 * " I * , ,, * % %%" ) ,, %% = 3 ,, %%" $ !( , A$ % " *"!!( A ,$ * - ( % ' , # $ "!!# "!$ ,' "
% " $ & " % +"" 2B % $" " #$
"5 5
2! "$
> C "! '" C ) * $ * 5 C "$$ "'!
5 C $* $ $ * ! DD 75 C > 1 4 D 1 4 5 " D 5 D 65 F " 5
> C "! '" C ) * $ * 5 C "$$ "'! " 5 C $* $ " DD *!! EE DD 5 C > 1 4 " D 5 D 5
2! "$
" 8 !# :% $ - @ . J J " ) = "
" K # " ) A* " @ + ! = " ) * * * ,=#* ) * * * ,=#* )" ) * * " * "
' D 5
$ * ! $ * ! 6 5
> C "! '" C ) * $ * 5 C "$$ "'! ' 5 C $* $ ' DD G !# 1'4 EE C >
% 1 4 ' D G ' 5 ' 5
$ * ! DD ' 5
> C "! '" C ) * $ * 5 C "$$ "'! ' $ * ! $ * ! 6 5 C $* $ 1 !# 1'4 DD G $ * ! EE $ * ! 6 4 EE C 1 G !# 1'4 DD $ * ! EE $ * ! 6 4 5 C > 1 4 $ * ! D % 1 4 G % 1 4 5 $ * ! 6 D G % 14 EE % 1 4 5
#-H $ " # # "! "! " $ ) 789: 3 ! " * "
!
) ! * " ) A* " 8 L ? = = " @ & ! $%M( " ) . /& # * !
B " ) " " #
/ ! ! @ ' !# " !
* 9 " ;< * * 3 " N " ) 2$ " "$ #I =>+"" "$ # Æ *!( , $ "! #* ! " $
$ " $ "$ )*" &# $$ $ "
' *$#
" ( " $ B% , , $ & " % "$ " * % # $
! " $ =>+"" " $ " =>+"" #$ " #! " ' , $ " ! A $ # $ % 14 !(
? @ " 5
> C "! '" C ) * $ " GD *!! 5 C "$$ "'! " ? @ 5 C $* $ % " ! !
5 D EE " ! DD C 1 !# 1 " ? @4 EE C 1>> $ % $ $ , " "!* C % " ! !
5 D EE DD !# 1 " ? @4 D 44 C J 1 " ? @ DD !# 1 " ? @ 4 4 C I 1 " ? @ DD !# 1 " ? @ 4 4 5 C > " % $ 1 4 > C "
"
D EE D " ! EE C 1 % " ! !
5 D EE DD C 1 " ? @ D EE " ? @ DD !# 1 " ? @ 4 4 4 5 C # "$
" ! 5 C > 1 D 5 " ! 5 FF4 1 " ? @ 4 " ? @ D " ? @ 5 5
"A
* % " :
5
> C "! '" C ) * $ * 5 C "$$ "'! 5 C $* $ $ * ! DD 11# DD 4 J !# 14 I !# 14 > #4 C EE DD !# 14 F 5 C > * % " ! ! ( 1 # 4 > # 5 1 = 4 > 1 #F45 FD 5
:* ,
(- " -& "!!(
* " ) * " $
9 ! # ! * # * *
2B = D 2B ; D 6 2B K:== D 9 2B 8 : D 75 > C $ *'! C > # 5
> C '" C ) * $ * 5 C "$$ "'! # 5 C $* $ 1 # DD EE # DD 2B =4 C 1 # DD EE # DD 2B ;4 C 1 # DD 7 EE # DD 2B K:== 4 C 1 # DD 6 EE # DD 2B 8 :4 5 C $ " ! $ 1 = 4 C 11 # E < 4 G D 1 # GD EE # GD 44 C EE C 11 # E < 4 G D 7 1 # GD 7 EE # G D 6 4 4 5 C > $! # 1 #4 = # D 1 41 # E < 4 #6 D 1 41 # 945 1 #4 I 1 #64 I # D 2B =5 5 6 I # D 2B ;5 5 I = 1 4 5 5 7 I 1 #64 I # D 2B K:== 5 5 6 I # D 2B 8 :5 5 I = 1 4 5 5 I = 1 4 5 > > #
! ( "! .# ! "$# " # ( " 1 ! 3 ; * =C< " ) 3 * = = = " D = ! " 1 # * = " 1 ! 0 @ 4" ) * # " ) * " ) " ) = # $.' 8 '"& '"'(" )
* " F ( * " ) ,//0 " ) * 0 @ 4" F* ) 0 * # = - 0 ! " ) - = B * ) " 789: * = #" 1 * " , * = L ? * " ? " % &
@ M * ! C " C $%+(" ) C C C * C" ) # ! @= M * * * * * C " * * #* 1 1 " " ) C +/ * C +2" ) * C +2(-2 " ) * C +/ " 8 +2 C " D* +2 3 2 -2 " D / " @ +/ # " / C " * * +2 * C +/ " 789: ! = C" * = C C "
2 > C $ *'! C > A 5 '5
> C
" " A F DD 5 C >
> C "! '" C ) * $ * 5 C "$$ "'! A 5 C $* $ A DD !# 1A4 EE DD !# 14 F 5 C > # A 1 4 A 5 FF5
> C "! '" C ) * $ ' GD *!! 5 C "$$ "'! A 5 C $* $ * 5 C >
A 1 4 AFF5 ' 1 4 5 5
> C "! '" C )* $ " C "$$ "'! " C $* $ " C " C > 12 " 4 "
GD *!! 5 A " 5 A DD !# 1 " A4 EE DD !# 1 " 4 F 5 # A 1 4 5
" "!!'" A , A B " " ' ( )* *!
) ! @ G " * * * " = * " ) " ! B * 3 * " D 3 " 1 , 3 3 + " ) # 3 " ) * 3 " )
4 2( 3 " ) ! 2
$ * ! $ * ! 6 $ * ! 9 $ * ! 7 5 > C "! '" C ) * $ G $ " ! L # 14 EE C G $ " ! L # 1 4 EE C G $ " ! L # 16 4 5 C "$$ "'! $ " % ! # $ % 14 C $ " % ! # $ % 1 4 C $ " % ! # $ % 16 4 5 C $* $ $ * ! EE G $ * ! 6 EE $ * ! 9 EE $ * ! 7 5 C > 14 $ * ! D ' 5 $ * ! 6 D 6 '6 5 $ * ! 9 D # 5 $ * ! 7 D 6 #6 5
' D 6 #6 5
# D 5
6
#6 D 5
'6 D # 5
# " B "! L" = $%+ 8 %'"%."%( 3 " + ,!
) @ - $%4( * " / # # * " ) + * * L ? = * " N , * * * * * " ) * "
)*"! 1
4
5
!
$
)*"! 1 !
4 6 5
6 9 7 < / 5
> C "! '" C ) * $ * 5 C "$$ "'! 6 9 7 < / 5 C $* $ DD EE 6 DD EE 9 DD EE C 7 DD EE DD EE DD EE C < DD EE / DD EE DD 65 C > 1 4
D
1 4 5
6 D !
1 4 5 !
D !
1 4 5 D )*"! 1 4 5 6 D )*"! 1 6 4 5 9 D 6 )*"! 1 4 5 7 D 6 )*"! 16 4 5 D )*"! 1 4 5 D )*"! 16 4 5 < D )*"! 1 4 5 / D 6 )*"! 1 4 5 D )*"! 1 4 5
% !"#
" # ( " .# B "
1 4 =
1 4 5
B " $ 1 4 =
= 1 4 5
> C "! '" C ) * $ * 5 C "$$ "'!
5 C $ " ! $ 1 = 4 * 5 C > $ 1 4 = 1 4 5
& #
" # ( " ($ - . *
) ! @ %5 9 = * "
$ > C'" C ) * $ * 5 C "$$ "'!
5 C $* $ % " ! $ 5 C $ " ! $ 1 = 4 % " ! $ 5 C # $ * 5 C > 14 1 ' D ( .B M2 =5 ' D ( .2N M2 =5 'FF4 5
' 2 " " #$
" ) * ! " ) , #* 5 ) * " ) " 8 (67 89: . / (6 89: * " D A* = " 789: ="
) ! ! * ; *< " I "" * - " " 1 * * * $M(" 0= # A* A* A " 1 " * =B ; < , ; < 7B K, " ) ! @ %% A*" ) 3 * @ %. * , $.5(" $ $ !! #'"
* ( "'* "
% O* P ." ( +"" #$ % "! , !" " $ #-H $ " # *$ $*!# ' * " *"!!( # # %( $" #* "
!"L( "!*"
> C "! '" C ) * $ * 5 C "$$ "'!
5 C $* $ $ * ! DD 11 D C DD B .B M2 =4 J I C > > C * C > "'$ 1 4 1 4 5 5
45
> C "! '" C ) * $ D EE D 67+"" " & " 2" !"'! " T "A"" " "
$ ' 66 =; A$ " & " K"!!