summaryrefslogtreecommitdiff
path: root/Test/dafny2/TuringFactorial.dfy
diff options
context:
space:
mode:
authorGravatar Unknown <leino@LEINO6.redmond.corp.microsoft.com>2012-06-14 13:34:20 -0700
committerGravatar Unknown <leino@LEINO6.redmond.corp.microsoft.com>2012-06-14 13:34:20 -0700
commit1f267ac0d7daf434ed4db31d23914428149297bc (patch)
tree1fac043fb9493e7f17e533de39f030c87c298d92 /Test/dafny2/TuringFactorial.dfy
parente07ce1423cf6b75adc8884d2d01e09b4d0f9519b (diff)
Dafny: cleaned up test scripts a little
Diffstat (limited to 'Test/dafny2/TuringFactorial.dfy')
-rw-r--r--Test/dafny2/TuringFactorial.dfy26
1 files changed, 26 insertions, 0 deletions
diff --git a/Test/dafny2/TuringFactorial.dfy b/Test/dafny2/TuringFactorial.dfy
new file mode 100644
index 00000000..585c998e
--- /dev/null
+++ b/Test/dafny2/TuringFactorial.dfy
@@ -0,0 +1,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;
+ }
+}