  Synthetic Separation Logic (SSL) is a formalism that powers SuSLik, the
state-of-the-art approach for the deductive synthesis of provably-correct
programs in C-like languages that manipulate Heap-based linked data structures.
Despite its expressivity, SSL suffers from two shortcomings that hinder its
utility. First, its main specification component, inductive predicates, only
admits first-order definitions of data structure shapes, which leads to the
proliferation of ''boiler-plate'' predicates for specifying common patterns.
Second, SSL requires concrete definitions of data structures to synthesise
programs that manipulate them, which results in the need to change a
specification for a synthesis task every time changes are introduced into the
layout of the involved structures.
  We propose to significantly lift the level of abstraction used in writing
Separation Logic specifications for synthesis -- both simplifying the approach
and making the specifications more usable and easy to read and follow. We avoid
the need to repetitively re-state low-level representation details throughout
the specifications -- allowing the reuse of different implementations of the
same data structure by abstracting away the details of a specific layout used
in memory. Our novel high-level front-end language called Pika significantly
improves the expressiveness of SuSLik.
  We implemented a layout-agnostic synthesiser from Pika to SuSLik enabling
push-button synthesis of C programs with in-place memory updates, along with
the accompanying full proofs that they meet Separation Logic-style
specifications, from high-level specifications that resemble ordinary
functional programs. Our experiments show that our tool can produce C code that
is comparable in its performance characteristics and is sometimes faster than
Haskell.
