Improving dependency management via formal semantics