Fibonacci numbers example#

%3 outer_cluster_i64-10912160959110460649 cluster_i64-10912160959110460649 outer_cluster_i64-16783941965674463102 cluster_i64-16783941965674463102 outer_cluster_fib-4208978898528913939-value cluster_fib-4208978898528913939-value outer_cluster_fib-11743562013128004906-value cluster_fib-11743562013128004906-value outer_cluster_i64-4208978898528913939 cluster_i64-4208978898528913939 outer_cluster_i64-0 cluster_i64-0 outer_cluster_fib-10912160959110460649-value cluster_fib-10912160959110460649-value outer_cluster_fib-16783941965674463102-value cluster_fib-16783941965674463102-value outer_cluster_fib-0-value cluster_fib-0-value outer_cluster_i64-5040379952546458196 cluster_i64-5040379952546458196 outer_cluster_fib-10080759905092916392-value cluster_fib-10080759905092916392-value outer_cluster_i64-11743562013128004906 cluster_i64-11743562013128004906 outer_cluster_fib-5040379952546458196-value cluster_fib-5040379952546458196-value outer_cluster_i64-10080759905092916392 cluster_i64-10080759905092916392 outer_cluster_i64-5871781006564002453 cluster_i64-5871781006564002453 outer_cluster_fib-5871781006564002453-value cluster_fib-5871781006564002453-value outer_cluster_i64-17615343019692007359 cluster_i64-17615343019692007359 outer_cluster_fib-17615343019692007359-value cluster_fib-17615343019692007359-value fib-4208978898528913939:s->i64-4208978898528913939 fib-11743562013128004906:s->i64-11743562013128004906 fib-10912160959110460649:s->i64-10912160959110460649 fib-16783941965674463102:s->i64-16783941965674463102 fib-0:s->i64-0 fib-10080759905092916392:s->i64-10080759905092916392 fib-5040379952546458196:s->i64-5040379952546458196 fib-5871781006564002453:s->i64-5871781006564002453 fib-17615343019692007359:s->i64-17615343019692007359 i64-10912160959110460649 5 i64-16783941965674463102 6 fib-4208978898528913939 fib i64-4208978898528913939 7 fib-4208978898528913939-value 21 fib-11743562013128004906 fib i64-11743562013128004906 2 fib-11743562013128004906-value 2 i64-0 0 fib-10912160959110460649 fib fib-10912160959110460649-value 8 fib-16783941965674463102 fib fib-16783941965674463102-value 13 fib-0 fib fib-0-value 1 i64-5040379952546458196 4 fib-10080759905092916392 fib i64-10080759905092916392 8 fib-10080759905092916392-value 34 fib-5040379952546458196 fib fib-5040379952546458196-value 5 i64-5871781006564002453 1 fib-5871781006564002453 fib fib-5871781006564002453-value 1 i64-17615343019692007359 3 fib-17615343019692007359 fib fib-17615343019692007359-value 3


from __future__ import annotations

from egglog import *

egraph = EGraph()


@egraph.function
def fib(x: i64Like) -> i64:  # type: ignore[empty-body]
    ...


f0, f1, x = vars_("f0 f1 x", i64)
egraph.register(
    set_(fib(0)).to(i64(1)),
    set_(fib(1)).to(i64(1)),
    rule(
        eq(f0).to(fib(x)),
        eq(f1).to(fib(x + 1)),
    ).then(set_(fib(x + 2)).to(f0 + f1)),
)
egraph.run(7)
egraph.check(eq(fib(i64(7))).to(i64(21)))
egraph

Total running time of the script: (0 minutes 0.174 seconds)

Gallery generated by Sphinx-Gallery