Skip to content
Yunhan's Lab
Go back

Fibonacci-like 6步走

Edit page

Fibonacci-like 6步走

(0)f.0=e0(0) f.0 = e_0

(1)f.1=e1(1) f.1 = e_1

(2)f.(n+2)=xf.n+yf.(n+1)+z,0n(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𝛼*f.n + 𝛽*f.(n+1) +𝛾 = f.N

P1: 0nN0 ≤ n ≤ N

2. Establish

n,𝛼,𝛽,𝛾:=N,1,0,0n, 𝛼, 𝛽,𝛾 := 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 
n0n ≠ 0

4. vf.

nn

5. Loop body

P0P0

=

αf(n)+βf(n+1)+γ=f(N)\alpha* f(n) + \beta* f(n+1) + \gamma = f(N)

= {From P1 and guard1n, so 2n+1}\{\text{From } P1 \text{ and guard} \Rightarrow 1 \leq n, \text{ so } 2 \leq n+1\}

αf(n)+β(xf(n1)+yf(n)+z)+γ=f(N)\alpha* f(n) + \beta*(x* f(n-1) + y* f(n) + z) + \gamma = f(N)

= {/+}{ \{*/+ \} }

αf(n)+βxf(n1)+βyf(n)+βz+γ=f(N)\alpha* f(n) + \beta x* f(n-1) + \beta y* f(n) + \beta z + \gamma = f(N)

= {+ symmetric, */+}\{\text{+ symmetric, */+}\}

βxf(n1)+(α+βy)f(n)+βz+γ=f(N)\beta* x*f(n-1) + (\alpha + \beta y)* f(n) + \beta z + \gamma = f(N)

= {WP}\{\text{WP}\}

(n,α,β,γ:=n1,βx,α+βy,βz+γ).P0(n, \alpha, \beta, \gamma := n-1, \beta* x, \alpha + \beta *y, \beta *z + \gamma).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}

Edit page
Share this post on:

Previous Post
Binary Chop 9步走
Next Post
使用 GitHub Actions 自动部署 Astro 博客到宝塔面板