We are currently using func.func with optional constraints and hyperparams attributes attached. This adds complexity in trying to find the operation they are attached to and requires dialect-level verifiers, which won't run when the attribute is missing. The verification is also awkward because it runs prior to the body being verified. A top-level operation could make these mandatory and default-valued to empty, simplifying verification.