Logic Programs as Compact Denotations