@Generable(description: "A mathematical symbol or structured construct.") indirect enum MathToken: Equatable { case integer(Int) case real(Double) case identifier(String) case constant(MathConstantToken) case plus case minus case multiplication(MultiplicationSymbol) case division case power case modulo case factorial case transpose case inverse case determinant case leftParen case rightParen case equal case lessThan case lessThanOrEqual case greaterThan case greaterThanOrEqual case notEqual case matrix(elements: [[[MathToken]]]) case vector(elements: [[MathToken]], orientation: VectorOrientationToken) case functionApplication(function: [MathToken], arguments: [[MathToken]]) case derivative(expression: [MathToken], variable: MathToken, order: Int) case partialDerivative(expression: [MathToken], variables: [MathToken]) case integral(integrand: [MathToken], variable: MathToken, bounds: IntegralBoundsToken) case gradient(expression: [MathToken], variables: [MathToken]) case jacobian(expression: [MathToken], variables: [MathToken]) case sum(expression: [MathToken], variable: MathToken, lowerBound: [MathToken], upperBound: [MathToken]) case product(expression: [MathToken], variable: MathToken, lowerBound: [MathToken], upperBound: [MathToken]) case limit(expression: [MathToken], variable: MathToken, approaches: [MathToken], direction: LimitDirectionToken) case equationSystem(equations: [[MathToken]]) case constraintSystem(relations: [[MathToken]]) }