@callback compose(caps :: [any()]) :: MapSet.t()
@callback grants(capability :: any()) :: [any()]
@callback implies?(cap1 :: any(), cap2 :: any()) :: boolean()