## Problem Description and Symbolic Representation

The problem can be broken down into the following components:

- **Variables:**
  - $x_1$ represents the number of regular pies.
  - $x_2$ represents the number of premium pies.

- **Objective Function:**
  The objective is to maximize profit. The profit from $x_1$ regular pies at $8 each and $x_2$ premium pies at $10 each is given by $8x_1 + 10x_2$.

- **Constraints:**
  - The demand for regular pies is at most 50: $x_1 \leq 50$.
  - The demand for premium pies is at most 30: $x_2 \leq 30$.
  - The total number of pies cannot exceed 60: $x_1 + x_2 \leq 60$.
  - Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$.

## Symbolic Representation

```json
{
    'sym_variables': [('x1', 'regular pies'), ('x2', 'premium pies')],
    'objective_function': 'Maximize 8*x1 + 10*x2',
    'constraints': [
        'x1 <= 50',
        'x2 <= 30',
        'x1 + x2 <= 60',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

## Gurobi Code

```python
import gurobipy as gp

# Create a new model
model = gp.Model("PieShop")

# Define variables
x1 = model.addVar(lb=0, name="regular_pies")  # Number of regular pies
x2 = model.addVar(lb=0, name="premium_pies")  # Number of premium pies

# Objective function: Maximize profit
model.setObjective(8*x1 + 10*x2, gp.GRB.MAXIMIZE)

# Constraints
model.addConstr(x1 <= 50, name="regular_demand")
model.addConstr(x2 <= 30, name="premium_demand")
model.addConstr(x1 + x2 <= 60, name="total_pies")

# Solve the model
model.optimize()

# Print solution
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution: x1 = {x1.varValue}, x2 = {x2.varValue}")
    print(f"Maximum profit: ${8*x1.varValue + 10*x2.varValue}")
else:
    print("No optimal solution found.")
```