Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Formal Methods in Software Development Exercise 6: JML Verification with OpenJML and KeY Take from Exercise 5 the JML-annotated program functions replace, and subtract1. Perform

Formal Methods in Software Development

Exercise 6: JML Verification with OpenJML and KeY

Take from Exercise 5 the JML-annotated program functions replace, and subtract1. Perform for each of these

functions the tasks described below (you may use a single Java class file for all functions, but do

not include any test code or main functions in this file).

Annotate every loop in the function with an appropriate invariant (loop_invariant) and ter-

mination measure (decreases) and check these with escjava2 and openjmlesc. Please note

that escjava2 only checks whether the invariants hold after some iterations, i.e., only if an

invariant is too strong, it reports an error. On the other hand, openjmlesc inded tries to prove

the verification conditions generated from the invariants; if it reports an error, this may indicate

that an invariant is too weak. However, the openjmlesc prover is not complete; it may also fail

to prove a valid verification condition.

It is recommended to use multiple loop_invariant statements for each conjunct of the invariant;

then it is easier to determine which part of an invariant failed. In the case of a for loop, do not

forget to add the range condition for the loop variable to the invariant. If an array is modified, do

not forget to specify which part of the array has remained unchanged so far. Please use this function: /*@ public normal_behavior @ requires a != null; @ assignable a[*]; @ ensures (\forall int k; 0 <= k && k < a.length; @ \old(a[k]) == x ==> a[k] == y); @ ensures (\forall int k; 0 <= k && k < a.length; @ \old(a[k]) != x ==> a[k] == \old(a[k])); @ ensures esult == -1 ==> @ (\forall int k; 0 <= k && k < a.length; \old(a[k]) != x); @ ensures esult != -1 ==> @ 0 <= esult && esult < a.length && \old(a[ esult]) == x && @ (\forall int k; 0 <= k && k < esult; \old(a[k]) != x); @*/ public static int replace(char[] a, char x, char y) { int n = a.length; int result = -1; for (int i = n-1; i >= 0; i--) { if (a[i] == x) { a[i] = y; result = i; } } return result; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Relational Database Design A Practical Approach

Authors: Marilyn Campbell

1st Edition

1587193175, 978-1587193170

More Books

Students also viewed these Databases questions