|
| 1 | +# Herb.jl Projects |
| 2 | + |
| 3 | + |
| 4 | + |
| 5 | +Wouldn’t it be great if Julia would program itself? |
| 6 | +Tell it what you want, Julia magic happens, and you get your program directly. |
| 7 | +We introduce Herb.jl, a library written in Julia that gets us a step |
| 8 | +closer to our big goal. |
| 9 | +[Herb.jl](https://herb-ai.github.io/) is a library for program synthesis: The task of automatically generating programs from a given specification. |
| 10 | +Here, “a program” could be anything, from an actual Python program over moves in chess to the synthesis of biochemical molecules. |
| 11 | +There are numerous works on program synthesis, all speaking a different language in code and terminology. |
| 12 | +We want to make developing, comparing, and applying ideas in program synthesis easier. |
| 13 | + |
| 14 | +Herb’s main goal is, therefore, two-fold. |
| 15 | +First, we aim to provide a toolbox for 1. developing new program synthesizers or 2. easily re-implementing existing ones. |
| 16 | +Second, we aim to unify many different flavors of program synthesis under a joint framework, making program synthesizers easy to use on new problems. |
| 17 | + |
| 18 | +If you have any questions or ideas, please [contact Tilman ](mailto:[email protected]). |
| 19 | + |
| 20 | +## Project 1: Optimizations |
| 21 | +**Difficulty:** Medium |
| 22 | + |
| 23 | +**Estimated Duration:** 350 hours |
| 24 | + |
| 25 | +**Project Overview:** |
| 26 | +`Herb.jl` has an outstanding performance in enumerating programs. |
| 27 | +Every generated program also needs to be evaluated, making evaluation the main bottleneck in finding a suitable program. |
| 28 | +We want to improve this aspect by leveraging various well-engineered projects from the Julia community. |
| 29 | + |
| 30 | +First, we have so far lessened the burden of evaluation by developing custom interpreters. |
| 31 | +This is time-consuming and error-prone, so we would like to avoid it. |
| 32 | +The core challenge here is that the explore programs don't have a fixed structure and are constructed during synthesis; therefore, they cannot be compiled ahead of time. |
| 33 | +The Julia package `DynamicExpressions.jl` is developed to overcome this exact problem, allowing for "ridiculously fast symbolic expressions". |
| 34 | +We would like to integrate `DynamicExpressions.jl` into our ecosystem and get a faster evaluation of Julia programs *for free*. |
| 35 | + |
| 36 | + |
| 37 | +Second, Herb is limited to Julia so far. |
| 38 | +Our goal is, however, to make Herb a *language agnostic* program synthesis library. |
| 39 | +We would like to extend Herb with connections to other interpreters for common languages like Python, Java, Prolog, et cetera. |
| 40 | +This would make it possible for Herb users to use any programming language that fits their needs. |
| 41 | + |
| 42 | +Third, another crucial aspect of every program synthesis engine is the construction of candidate programs. |
| 43 | +State-of-the-art program synthesis tools, like CVC5, have invested significant time into optimizing the program construction step, resulting in significantly improved performance. |
| 44 | +We want to map these ideas into Herb. |
| 45 | + |
| 46 | +**Minimum goal:** |
| 47 | +Connect `DynamicExpressions.jl` to `Herb.jl`. |
| 48 | +This involves implementing the expression interface from `DynamicExpressions.jl` for `Herb.jl`’s expression tree formulation. |
| 49 | + |
| 50 | +**Extended goal:** |
| 51 | +Add support for at least one non-Julia program interpreter or add tricks from CVC5 to Herb. |
| 52 | + |
| 53 | +**Recommended skills:** |
| 54 | +- basic knowledge of data structures |
| 55 | +- interest in program optimization |
| 56 | +- the eagerness to learn to write and optimize code |
| 57 | + |
| 58 | +**Mentors:** Reuben Gardos-Reid, Tilman Hinnerichs and Sebastijan Dumancic |
| 59 | + |
| 60 | +**Some literature:** |
| 61 | +- The Program Synthesis book (by Gulwani et al., [link](https://www.microsoft.com/en-us/research/wp-content/uploads/2017/10/program_synthesis_now.pdf) |
| 62 | +- CVC4SY paper: [link](https://link.springer.com/chapter/10.1007/978-3-030-25543-5_5) |
| 63 | +- `DynamicExpression.jl`: [link](https://ai.damtp.cam.ac.uk/dynamicexpressions/dev/) |
| 64 | +- Our website: [link](https://herb-ai.github.io/) |
| 65 | + |
| 66 | +## Project 2: HerbLearn Integration |
| 67 | +**Difficulty:** Medium |
| 68 | + |
| 69 | +**Estimated Duration:** 350h |
| 70 | + |
| 71 | +**Problem description:** |
| 72 | +Neurally-guided program synthesizers form a popular class of synthesizers, which learn a heuristic to guide program generation. |
| 73 | +Following Herb's paradigm to unify the field, we want to reach the same goal for this sub-field. |
| 74 | +Specifically, learning guiding policies comprise the same building blocks of 1. program sampling, 2. program-data-encoding, 3. policy learning with respect to a loss function, and 4. deploying that strategy. |
| 75 | + |
| 76 | +In this project, we want to implement these building blocks to allow researchers to reuse the modules directly. |
| 77 | +To guide this project, we implemented a template structure to follow and extend. |
| 78 | + |
| 79 | +**Minimum goal:** |
| 80 | +Implement a naive but modular strategy for all four steps. |
| 81 | +To allow for easy integration of with existing models, we aim to implement the machine learning part using Flux.jl. |
| 82 | + |
| 83 | +**Extended goal:** |
| 84 | +The extended goal is to deepen one or more of these modules that fit the student's interests. |
| 85 | +The literature provides numerous ideas on how to make all four steps smarter individually. |
| 86 | +Concretely, this could include |
| 87 | +- smarter program-sampling, |
| 88 | +- different program encoding strategies from the literature, |
| 89 | +- implementing and applying different loss functions, and |
| 90 | +- incorporating this with different search procedures. |
| 91 | + |
| 92 | +**Recommended skills:** |
| 93 | + - Basic knowledge of machine learning principles (neural networks, model training, ...) |
| 94 | + - Preferably prior experiences with Flux.jl |
| 95 | + |
| 96 | +**Mentors:** Tilman Hinnerichs, Reuben Gardos-Reid and Sebastijan Dumancic |
| 97 | + |
| 98 | +**Some literature:** |
| 99 | +- The Program Synthesis book (by Gulwani et al., [link](https://www.microsoft.com/en-us/research/wp-content/uploads/2017/10/program_synthesis_now.pdf) |
| 100 | +- Our website: [https://herb-ai.github.io/](https://herb-ai.github.io/) |
| 101 | +- BUSTLE: Bottom-up Program Synthesis through learning-guided exploration: [link](https://arxiv.org/pdf/2007.14381) |
| 102 | +- DeepCoder [link](https://arxiv.org/pdf/1611.01989) |
| 103 | +- DreamCoder [link](https://dl.acm.org/doi/pdf/10.1145/3453483.3454080) |
0 commit comments