[Varies] Synthesis of Ranking Functions
Course type | Bachelor-Project, Bachelor Thesis or Master Thesis |
---|---|
Instructors | Matthias Heizmann |
Credits | Depending on course type 6, 12 or 30 |
Course Catalog |
waldkirch(x) { while (x>=0) { x--; } } . |
selestat(x) { while (x>=0) { x++; } } . |
telAviv(x,y) { while (x>=0 && y>=0) { if(random) { x:=min(x,y)-1; } else { y:=min(x,y)-1; } } } . |
strasbourg(x,y) { while (x>=0 && y>=0) { if(random) { x--; y:= random; } else { y--; } } } |
We can easily prove termination of the procedures waldkirch, telAviv and strassbourg by showing that the functions
- f: ℤ ->ℕ , f(x)=x
- f: ℤxℤ -> ℕ , f(x,y)=min(x,y)
- f: ℤxℤ -> ℕxℕ , f(x,y)=(x,y)
are ranking functions for the while loop in the procedures.
But how can we synthesize these ranking functions?
In this project we give an answer to this question, by
- stating templates for ranking functions like e.g. f(x,y)=a * x + b * y + c and compute the parameters a, b, c using our theorem prover SmtInterpol
- implementing this approach in our program analysis framework ULTIMATE