Describir: Pseudo-Boolean programming and applications