Add BeamExtract (approximate DAG extractor) and DagExpr (canonical multi-rooted DAG expression)#358
Open
recmo wants to merge 9 commits intoegraphs-good:mainfrom
Open
Add BeamExtract (approximate DAG extractor) and DagExpr (canonical multi-rooted DAG expression)#358recmo wants to merge 9 commits intoegraphs-good:mainfrom
recmo wants to merge 9 commits intoegraphs-good:mainfrom
Conversation
Member
|
Hi- thanks for your PR! Could this PR be a separate crate? This algorithm could be a great contribution to the extraction gym! It works over a serialized egraph that both egg and egglog export to. |
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds two new structs:
DagExpr. This generalizesRecExprby allowing multiple roots. It also maintains strong invariants on minimality and canonical order, essentially being a unique representation of a given DAG for the roots.BeamExtract. A DAG extractor based onDagExprthat uses beam search to approximate the optimal.One cool thing I realized while building this is that if we add a minor restriction on
Language(the ordering of nodes is preserved under a monotonically increasing map of node Ids), then the merging twoDagExprs can be done using a linear time merge sort variant.I'm wondering if this minor restriction should be added to the docs of
Languageas a requirement, or an additional marker trait languages need to implement.It may make sense to use
DagExprfor theLpExtractresult as well, but that would be breaking the public API.