Get the latest tech news

Towards Bottom-Up Enumeration in miniKanren via Pruning and Memoization


We present two small library combinators on top of plain miniKanren, designed to bring bottom-up enumeration with observational deduplication, the standard tool in non-relational program-by-example (PBE) synthesizers, into the relational setting. The first combinator, prune, deduplicates an answer stream by a user-supplied key, typically the input/output behavior of the candidate. The second, defrel/bank, memoizes a relation against canonical fresh variables so that a single pruned answer stream is built bottom-up and replayed at every call site. We also discuss a weighted variant, defrel/bank-w, which attaches admissible upper bounds to immature streams to recover best-first enumeration in cases where the natural depth-first canonical order misses compact representatives. On a preliminary PBE benchmark of arithmetic and string synthesis targets, defrel/bank substantially outperforms the depth-bounded baseline on most deep targets, while losing on a small family where the canonical depth-first enumeration order misses compact representatives. We leave a broader empirical evaluation to an extended version of this paper.

None

Get the Android app

Or read this on Hacker News

Read more on:

Photo of memoization

memoization

Photo of miniKanren

miniKanren

Photo of pruning

pruning

Related news:

News photo

How to Achieve Pruning When Querying by Non-Partitioned Columns in PostgreSQL

News photo

Datalog in miniKanren

News photo

Show HN: I built a Ruby gem that handles memoization with a ttl