Files
cs220/assets/why3/exercises/ex2_fact.mlw
2023-08-22 11:12:46 +00:00

49 lines
956 B
Plaintext

(* Two programs to compute the factorial
Questions:
1. In module FactRecursive:
a. Implement the program that satisfies specification.
2. In module FactLoop:
a. Strengthen the invariant to prove correctness of the given implementation.
b. Select a correct variant to prove the termination.
*)
module FactRecursive
use int.Int
use int.Fact
let rec fact_rec (n: int) : int
requires { n >= 0 }
ensures { result = fact n }
variant { n }
= (* IMPORTANT: DON'T MODIFY THE ABOVE LINES *)
0 (*TODO*)
end
module FactLoop
use int.Int
use int.Fact
let fact_loop (n: int) : int
requires { 0 < n }
ensures { result = fact n }
= let ref m = 0 in
let ref r = 1 in
while m < n do
invariant { true (* TODO: Replace `true` with your solution *) }
variant { n (* TODO: Replace `n` with your solution *) }
m <- m + 1;
r <- r * m
done;
r
end