Reasoning by analogy: a formal reconstruction