source: CIVL/examples/verifyThis/quantifiedComp.cvl@ bb03188

main test-branch
Last change on this file since bb03188 was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.1 KB
RevLine 
[cc283ee]1/*
[41eb9b6]2Author: Yihao
[f3368e99]3
[41eb9b6]4Download LCP.zip from: http://fm2012.verifythis.org/challenges
5
6-----------------
7Problem description:
[f3368e99]8
[cc283ee]9This is a verifyThis problem in 2012.
[f3368e99]10This task asks you to get the longest common prefix of
[cc283ee]11two subStrings.
12
[41eb9b6]13-----------------
14Verification task:
15
16Implement a the lcp function which takes an array, its length and two indices as input
17and verify that it behaves as described.
[f7e5282]18
19command: civl verify quantifiedComp.cvl
20
[76f18de]21result:
22For arrays with length less than 5, lcp function returns an integer n which is
23the length of the longest common prefix between its two suffixes: The two suffixes
24are the same with indexes from 0 to n-1 while they are different at index n.
[cc283ee]25*/
26
27#include <civlc.cvh>
28#include <assert.h>
29
30$input int n=3;
31$input int x;
32$input int y;
33$input int X1[n];
34
35$assume (x < n && y < n && x >=0 && y>=0);
36
[0ae124a]37int lcp (int *arr, int n, int x, int y) {
[cc283ee]38 int l=0;
[f3368e99]39
[cc283ee]40 while (x+l<n && y+l<n && arr[x+l]==arr[y+l]) {
41 l++;
42 }
43 return l;
44}
45
[0ae124a]46void main() {
[cc283ee]47 int result = lcp(X1, n, x, y);
[f3368e99]48
[5cd8c92]49 assert($forall (int i: 0 .. result-1) X1[x+i] == X1[y+i]);
[cc283ee]50}
Note: See TracBrowser for help on using the repository browser.