Files

22 lines
468 B
Python
Raw Permalink Normal View History

#
2021-12-06 10:34:17 +01:00
# 'Checking a large routine' Alan Mathison Turing, 1949
#
2021-12-06 10:34:17 +01:00
#@ function factorial(n: int) -> int
#@ assume factorial(0) == 1
#@ assume forall n. n > 0 -> factorial(n) == n * factorial(n-1)
def routine(n):
#@ requires n >= 0
#@ ensures result == factorial(n)
u = 1
for r in range(n):
#@ invariant u == factorial(r)
v = u
for s in range(1, r+1):
#@ invariant u == s * factorial(r)
u += v
return u