Package natural-fibonacci-thm: Properties of Fibonacci numbers

Information

namenatural-fibonacci-thm
version1.4
descriptionProperties of Fibonacci numbers
authorJoe Hurd <joe@gilith.com>
licenseMIT
provenanceHOL Light theory extracted on 2012-03-09
requiresbase
natural-fibonacci-exists
natural-fibonacci-def
showData.Bool
Data.List
Number.Natural
Number.Natural.Fibonacci

Files

Theorems

n. decode (encode n) = n

n. k. n fibonacci k

k. fibonacci k = 0 k = 0

j k. j k fibonacci j fibonacci k

k. fibonacci (suc (suc k)) = fibonacci (suc k) + fibonacci k

j. ¬(j = 1) fibonacci j < fibonacci (suc j)

n k.
    decode.dest 1 0 (encode.find n (fibonacci (k + 1)) (fibonacci k)) = n

j k. ¬(j = 1 k = 2) j < k fibonacci j < fibonacci k

j k.
    fibonacci (j + (k + 1)) =
    fibonacci j * fibonacci k + fibonacci (j + 1) * fibonacci (k + 1)

n k l.
    n < fibonacci (k + 2)
    decode.dest 1 0 (encode.mk l n (fibonacci (k + 1)) (fibonacci k)) =
    n + decode.dest (fibonacci (k + 1)) (fibonacci k) l

Input Type Operators

Input Constants

Assumptions

¬

¬

bit0 0 = 0

fibonacci 0 = 0

t. t t

n. 0 n

p. p

(¬) = λp. p

t. (x. t) t

t. (x. t) t

() = λp. p = λx.

fibonacci 1 = 1

t. ( t) t

t. (t ) t

t. t

t. t t

t. t

t. t t

t. t t

t. t t

t. t

n. ¬(suc n = 0)

n. 0 * n = 0

n. 0 + n = n

m. m + 0 = m

t. ( t) ¬t

t. (t ) ¬t

t. t ¬t

n. bit1 n = suc (bit0 n)

m. 1 * m = m

m n. m m + n

m n. n m + n

() = λp q. p q p

m. suc m = m + 1

n. even (suc n) ¬even n

m. m 0 m = 0

t1 t2. (if then t1 else t2) = t2

t1 t2. (if then t1 else t2) = t1

f p. decode.dest f p [] = 0

n. encode n = encode.find n 1 0

n. 0 < n ¬(n = 0)

n. bit0 (suc n) = suc (suc (bit0 n))

l. decode l = decode.dest 1 0 l

t1 t2. t1 t2 t2 t1

m n. m + n = n + m

m n. m + n - m = n

n. 2 * n = n + n

m n. ¬(m < n n m)

m n. ¬(m n n < m)

m n. ¬(m n) n < m

m n. suc m n m < n

m. m = 0 n. m = suc n

() = λp q. (λf. f p q) = λf. f

() = λp. q. (x. p x q) q

m n. m + suc n = suc (m + n)

m n. suc m + n = suc (m + n)

m n. m < m + n 0 < n

m n. n < m + n 0 < m

m n. suc m = suc n m = n

m n. suc m suc n m n

t1 t2. ¬(t1 t2) ¬t1 ¬t2

m n. even (m * n) even m even n

m n. even (m + n) even m even n

m n. m n d. n = m + d

() = λp q. r. (p r) (q r) r

m n. m n m < n m = n

m n. m n n m m = n

m n. m < n d. n = m + suc d

m n p. m + (n + p) = m + n + p

m n p. m + p = n + p m = n

m n p. m + n < m + p n < p

m n p. m + n m + p n p

m n p. m + p n + p m n

m n p. m < n n p m < p

m n p. m n n < p m < p

m n p. m n n p m p

m n. m suc n m = suc n m n

m n. m * n = 0 m = 0 n = 0

m n. m + n = 0 m = 0 n = 0

n. fibonacci (n + 2) = fibonacci (n + 1) + fibonacci n

P. P 0 (n. P n P (suc n)) n. P n

m n p. m * (n + p) = m * n + m * p

m n p. (m + n) * p = m * p + n * p

m n p. m * n = m * p m = 0 n = p

m n p. m * n m * p m = 0 n p

m n p. m * n < m * p ¬(m = 0) n < p

p c x y. p (if c then x else y) (c p x) (¬c p y)

n f p.
    encode.find n f p =
    let s f + p in
    if n < s then encode.mk [] n f p else encode.find n s f

f p h t.
    decode.dest f p (h :: t) =
    let s f + p in let n decode.dest s f t in if h then s + n else n

p. p 0 p 1 (n. p n p (n + 1) p (n + 2)) n. p n

l n f p.
    encode.mk l n f p =
    if p = 0 then l
    else if f n then encode.mk ( :: l) (n - f) p (f - p)
    else encode.mk ( :: l) n p (f - p)