When should I use Rosette's shallow vs. deep embedding for program synthesis?
问题 Some tutorials for Rosette introduce program synthesis using shallow embedding and others using deep embedding. After reading Torlak et Bodik's "Growing Solver-Aided Languages with ROSETTE", it seems the shallow embedding is good for fast prototyping (since it does not require defining DSL & interpreter) and the deep embedding is good for making queries with stronger correctness guarantees. Is this a good rule of thumb for deciding which embedding to use? What are good reasons for using