We present a logic programming language which uses a four-valued bilattice as the underlying framework for semantics of programs. The two orderings of the bilattice reflect the concepts of truth and knowledge. The space of truth values includes not only true and false, but also other truth values which represent no information or conflicting information. Programs are interpreted according to their knowledge content, resulting in a monotonic semantic operator . We present a novel procedural semantics similar to resolution which can retrieve both negative and positive information about a particular goal in a uniform setting. We extend the bilattice-based fixpoint and procedural semantics to incorporate a version of Closed World Assumption. We give soundness and completeness results, with and without the presence of Closed World Assumption. These results are general and are not restricted to ground atomic goals. We further develop the concept of substitution unification and study som...