Function query

Source
pub fn query(
    egraph: &mut EGraph,
    vars: &[(&str, ArcSort)],
    facts: Facts<String, String>,
) -> Result<QueryResult, Error>
Expand description

Run a query over the database.

use egglog::prelude::*;

let mut egraph = EGraph::default();
egraph.parse_and_run_program(
    None,
    "
(function fib (i64) i64 :no-merge)
(set (fib 0) 0)
(set (fib 1) 1)
(rule (
    (= f0 (fib x))
    (= f1 (fib (+ x 1)))
) (
    (set (fib (+ x 2)) (+ f0 f1))
))
(run 10)
    ",
)?;

let results = query(
    &mut egraph,
    vars![x: i64, y: i64],
    facts![
        (= (fib x) y)
        (= y 13)
    ],
)?;

let x = egraph.base_to_value::<i64>(7);
let y = egraph.base_to_value::<i64>(13);
let results: Vec<_> = results.iter().collect();
assert_eq!(results, [[x, y]]);