  Infinite-state systems such as distributed protocols are challenging to
verify using interactive theorem provers or automatic verification tools. Of
these techniques, deductive verification is highly expressive but requires the
user to annotate the system with inductive invariants. To relieve the user from
this labor-intensive and challenging task, invariant inference aims to find
inductive invariants automatically. Unfortunately, when applied to
infinite-state systems such as distributed protocols, existing inference
techniques often diverge, which limits their applicability.
  This paper proposes user-guided invariant inference based on phase
invariants, which capture the different logical phases of the protocol. Users
conveys their intuition by specifying a phase structure, an automaton with
edges labeled by program transitions; the tool automatically infers assertions
that hold in the automaton's states, resulting in a full safety proof.The
additional structure from phases guides the inference procedure towards finding
an invariant.
  Our results show that user guidance by phase structures facilitates
successful inference beyond the state of the art. We find that phase structures
are pleasantly well matched to the intuitive reasoning routinely used by domain
experts to understand why distributed protocols are correct, so that providing
a phase structure reuses this existing intuition.
