Refactor with lattice function for primitives

O (primitives) are guarded by contracts. Symbolic values that satisfy
the contracts cause a symbolic value to flow out of the primitive.