Declarative Program Analysis