Fibonacci-like 6步走
(0)f.0=e0
(1)f.1=e1
(2)f.(n+2)=x∗f.n+y∗f.(n+1)+z,0≤n
1. Choose invariants
P0: 𝛼∗f.n+𝛽∗f.(n+1)+𝛾=f.N
P1: 0≤n≤N
2. Establish
n,𝛼,𝛽,𝛾:=N,1,0,0
3. Guard
we observe
α*f.n + 𝛽*f.(n+1) + 𝛾 = f.N ∧ n = 0
⇒ { Leibniz }
α*f.0 + 𝛽*f.1 +𝛾 = f.N
= {(0)(1)}
α*e0 + 𝛽*e1 +𝛾 = f.N
n=0
4. vf.
n
5. Loop body
P0
=
α∗f(n)+β∗f(n+1)+γ=f(N)
= {From P1 and guard⇒1≤n, so 2≤n+1}
α∗f(n)+β∗(x∗f(n−1)+y∗f(n)+z)+γ=f(N)
= {∗/+}
α∗f(n)+βx∗f(n−1)+βy∗f(n)+βz+γ=f(N)
= {+ symmetric, */+}
β∗x∗f(n−1)+(α+βy)∗f(n)+βz+γ=f(N)
= {WP}
(n,α,β,γ:=n−1,β∗x,α+β∗y,β∗z+γ).P0
6. Finished Algorithm.
n,𝛼,𝛽,𝛾 := N, 1, 0, 0
;do n ≠ 0 →
n, 𝛼, 𝛽,𝛾 := n-1, 𝛽*x, 𝛼+𝛽*y, 𝛽*z + 𝛾
od
;r:=𝛼*e0+𝛽*e1+𝛾
{r=f.N}