fact: Definition correct_component `{MayProvide jx j} `(c : component i jx) `(ci : contract i Ωi) `(cj : contract j Ωj) (pred : Ωi -> Ωj -> Prop) : Prop := forall (ωi : Ωi) (ωj : Ωj) (init : pred ωi ωj) `(e : i α) (o_caller : caller_obligation ci ωi e), pre (to_hoare cj $ c α e) ωj /\ forall (x : α) (ωj' : Ωj) (run : post (to_hoare cj $ c α e) ωj x ωj'), callee_obligation ci ωi e x /\ pred (witness_update ci ωi e x) ωj'.
imports: ExtLib(StateMonad) FreeSpec.Core(Contract HoareFacts SemanticsFacts InstrumentFacts)