fact: Record contract (i : interface) (Ω : Type) : Type := make_contract { witness_update (ω : Ω) : forall (α : Type), i α -> α -> Ω ; caller_obligation (ω : Ω) : forall (α : Type), i α -> Prop ; callee_obligation (ω : Ω) : forall (α : Type), i α -> α -> Prop }.
imports: Coq(Setoid Morphisms) ExtLib(StateMonad MonadState MonadTrans) FreeSpec.Core(Interface Impure Semantics Component)