Copyright | (c) Levent Erkok |
---|---|
License | BSD3 |
Maintainer | erkokl@gmail.com |
Stability | experimental |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Example inductive proof to show partial correctness of the for-loop based fibonacci algorithm:
i = 0 k = 1 m = 0 while i < n: m, k = k, m + k i++
We do the proof against an axiomatized fibonacci implementation using an uninterpreted function.
System state
System state. We simply have two components, parameterized over the type so we can put in both concrete and symbolic values.
Instances
fibCorrect :: IO (InductionResult (S Integer)) Source #
Encoding partial correctness of the sum algorithm. We have:
>>>
fibCorrect
Q.E.D.
NB. In my experiments, I found that this proof is quite fragile due to the use of quantifiers: If you make a mistake in your algorithm or the coding, z3 pretty much spins forever without finding a counter-example. However, with the correct coding, the proof is almost instantaneous!