blob: 585c998e19395d2aed07aacdfc4189c9637e6939 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
function Factorial(n: nat): nat
{
if n == 0 then 1 else n * Factorial(n-1)
}
method ComputeFactorial(n: int) returns (u: int)
requires 1 <= n;
ensures u == Factorial(n);
{
var r := 1;
u := 1;
while (r < n)
invariant r <= n;
invariant u == Factorial(r);
{
var v, s := u, 1;
while (s < r + 1)
invariant s <= r + 1;
invariant v == Factorial(r) && u == s * Factorial(r);
{
u := u + v;
s := s + 1;
}
r := r + 1;
}
}
|