Difficulty of Programming
Constructive proof: given a theorem ∀ x ∃ y P(x,y) , prove it by constructing a y that satisfies the theorem.
During program synthesis, witnesses are constructed for existential terms. The witnesses correspond to subroutines in the SPICE library ( concrete terms).
specification → theorem → proof → program