We present Fiat, a library for the Coq proof
assistant supporting refinement of declarative
specifications into efficient functional programs
with a high degree of automation. Each refinement
process leaves a proof trail, checkable by the
normal Coq kernel, justifying its soundness. We
focus on the synthesis of abstract data types that
package methods with private data. We demonstrate
the utility of our framework by applying it to the
synthesis of query structures – abstract data
types with SQL-like query and insert
operations. Fiat includes a library for writing
specifications of query structures in SQL-inspired
notation, expressing operations over relations
(tables) in terms of mathematical sets. This
library includes a set of tactics for automating
the refinement of these specifications into
efficient, correct-by-construction OCaml
code. Using these tactics, a programmer can
generate such an implementation completely
automatically by only specifying the equivalent of
SQL indexes, data structures capturing useful
views of the abstract data. We conclude by
speculating on the new programming modularity
possibilities enabled by an automated refinement
system with proved-correct rules.