5.3. Contract representation
The four coroutine clause families (relies, guarantees, yields, resumes) live
on Procedure.contracts : CoroutineContracts, a sum type whose Coroutine case
carries all four lists and whose Regular case carries none. Procedure.kind is
recovered from which case is present, so a regular procedure cannot hold a stray
relies clause. Both lowering paths consume these clauses and reset contracts to
Regular, so downstream passes treat the result as an ordinary procedure.