Text this: Foundations of bilevel programming