(spec-impl form pred gfn cpred?) (spec-impl form pred gfn cpred? unc)
Do not call this directly, use 'spec'