Tożsamości Fibonacciego w SymPy#

W tym prostym tutorialu zwerifikujemy szereg tożsamości spełnianych przez liczby Fibonacciego stosując bibliotekę SymPy. Zauważmy, że uda nam się kompletnie udowodnić tożsamości, które do tej pory nie było możliwe do weryfikacji bez ręcznych kroków w czystym SageMath.

from sympy import *
init_printing(use_unicode=True)
n=symbols('n',nonnegative=True,integer=True) #inicjalizujemy obiekty SymPy
phi=1/2*sqrt(5) + 1/2 #modelujemy liczby Fibonacciego korzystając z formuły Bineta
phihat=-1/2*sqrt(5) + 1/2
def FibBin(n):
    return 1/sqrt(5)*(phi^n-phihat^n) 

Ćw. 1: Dowód tożsamości Cassiniego#

\(F_n^2 - F_{n+1}F_{n-1}=(-1)^{n-1}\)

a=FibBin(n)^2-FibBin(n+1)*FibBin(n-1)-(-1)^(n-1)
a=expand(a) ## this is using expand and simplify from SymPy package
a=simplify(a)
a
_images/702ba12f4bf2cef7092842f0bdd4dc2b8bfdc07d13bc79cc481075cd1cc7c88c.png

Ćw. 2: Dowód tożsamości Catalana#

\(F_n^2-F_{n+r}F_{n-r}=(-1)^{n-r}F_{r}^2\)

r=symbols('r',nonnegative=True,integer=True)
a=((FibBin(n)^2-FibBin(n+r)*FibBin(n-r)))/((-1)^(n-r)*(FibBin(r)^2))
a=powsimp(a)
a=simplify(a)
a=radsimp(a)
a=expand(a)
a=factor(a)
a=powsimp(a)
a=radsimp(a)
a=expand(a)
simplify(a-1)
_images/702ba12f4bf2cef7092842f0bdd4dc2b8bfdc07d13bc79cc481075cd1cc7c88c.png

Ćw. 3: Dowód tożsamości Ocagne’a#

\(F_{r} F_{n+1}-F_{r+1}F_{n}=(-1)^n F_{r-n}\)

a=(FibBin(r)*FibBin(n+1)-FibBin(r+1)*FibBin(n))/((-1)^n*FibBin(r-n))
a=simplify(a)
a-1
_images/702ba12f4bf2cef7092842f0bdd4dc2b8bfdc07d13bc79cc481075cd1cc7c88c.png

Ćw.4: Dowód następującej tożsamości#

\(\sum_{i=1}^{n}F_{i}=F_{n+2}-1\)

i=var('i')
a=Sum(FibBin(i),(i,1,n))#Sum is a command from SymPy
a=a.doit() #one needs to force SymPy to evaluate the sum
a=a-(FibBin(n+2)-1)
a=simplify(a)
a
_images/8263e8aa938e96c9b22b47d1e1f20e4ebf2af8bcb2349a31f65d80ea8d4da5d1.png

Ćw.5: Dowód następującej tożsamości#

\(\sum_{i=1}^{n} F_i^2 = F_n \cdot F_{n+1}\)

s1=Sum(FibBin(i)^2,(i,1,n))
s2=(FibBin(n)*FibBin(n+1))
s1=s1.doit()
simplify(s1-s2)
_images/8263e8aa938e96c9b22b47d1e1f20e4ebf2af8bcb2349a31f65d80ea8d4da5d1.png

Wyzwanie: Dowód tożsamości eliptycznej Warda (Ward’s elliptic divisibility identity)#

\(F_{4n+2}F_2^3-F_{2n+4}F_{2n}^3+F_{2n+2}^3 F_{2n-2}=0\) for all \(n\geq 0\).

a=FibBin(4*n+2)*FibBin(2)^3-FibBin(2*n+4)*FibBin(2*n)^3+FibBin(2*n+2)^3*FibBin(2*n-2)
a=a.radsimp()
a=a.simplify()
a=a.expand()
a=a.simplify()
a=a.simplify()
a
_images/702ba12f4bf2cef7092842f0bdd4dc2b8bfdc07d13bc79cc481075cd1cc7c88c.png