docs: def _extract_lower_bound(self, name: str, expr: Expression) -> Optional[Expression]:
          '''Returns the lower bound expression of the action with given `name`.'''
          etype = expr.etype
          args = expr.args
          if etype[1] in ['<=', '<']:
              if args[1].is_pvariable_expression() and args[1].name == name:
                  return args[0]
          elif etype[1] in ['>=', '>']:
              if args[0].is_pvariable_expression() and args[0].name == name:
                  return args[1]
          return None