  FGL is a successor to GL, a proof procedure for ACL2 that allows complicated
finitary conjectures to be translated into efficient Boolean function
representations and proved using SAT solvers. A primary focus of FGL is to
allow greater programmability using rewrite rules. While the FGL rewriter is
modeled on ACL2's rewriter, we have added several features in order to make
rewrite rules more powerful. A particular focus is to make it more convenient
for rewrite rules to use information from the syntactic domain, allowing them
to replace built-in primitives and meta rules in many cases. Since it is easier
to write, maintain, and prove the soundness of rewrite rules than to do the
same for rules programmed at the syntactic level, these features help make it
feasible for users to precisely program the behavior or the rewriter. We
describe the new features that FGL's rewriter implements, discuss the solutions
to some technical problems that we encountered in their implementation, and
assess the feasibility of adding these features to the ACL2 rewriter.
