Java Program Verification Challenges BPF Jacobs

1 downloads 0 Views 249KB Size Report
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        2 3 *          " ) !                 #    # $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"!!