mirror of
https://github.com/kmc7468/cs220.git
synced 2025-12-14 22:18:46 +00:00
assignment 1~5: fixes
- assignment05/pascal.mlw: lowered the difficulty (one more invariant given) - assignment02, 03: minor fixes & divide into sub-problems
This commit is contained in:
49
assets/why3/exercises/ex2_fact.mlw
Normal file
49
assets/why3/exercises/ex2_fact.mlw
Normal file
@@ -0,0 +1,49 @@
|
||||
(* 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
|
||||
Reference in New Issue
Block a user