## Problem Description and Symbolic Representation

The problem can be broken down into the following components:

- **Variables:**
  - Let \(x_1\) be the number of coats sold.
  - Let \(x_2\) be the number of shirts sold.

- **Objective Function:**
  - The profit from selling one coat is $12, and the profit from selling one shirt is $8. Therefore, the total profit \(P\) can be represented as:
    \[ P = 12x_1 + 8x_2 \]

- **Constraints:**
  - The store can spend at most $50,000 on coats and shirts. Given that a coat costs $55 and a shirt costs $25, we have:
    \[ 55x_1 + 25x_2 \leq 50000 \]
  - At least 60 but at most 100 coats are sold each month:
    \[ 60 \leq x_1 \leq 100 \]
  - The number of shirts sold is at most four times the number of coats sold:
    \[ x_2 \leq 4x_1 \]
  - Non-negativity constraints (assuming \(x_1, x_2 \geq 0\)):
    \[ x_1 \geq 0, x_2 \geq 0 \]
  However, given \(x_1 \geq 60\), the \(x_1 \geq 0\) and \(x_2 \geq 0\) constraints are implicitly satisfied.

## Symbolic Representation

```json
{
  'sym_variables': [('x1', 'coats'), ('x2', 'shirts')],
  'objective_function': '12*x1 + 8*x2',
  'constraints': [
    '55*x1 + 25*x2 <= 50000',
    '60 <= x1 <= 100',
    'x2 <= 4*x1'
  ]
}
```

## Gurobi Code

```python
import gurobipy as gp

def solve_optimization_problem():
    # Create a new model
    model = gp.Model("clothing_store_optimization")

    # Define variables
    x1 = model.addVar(lb=60, ub=100, name="coats")  # Number of coats
    x2 = model.addVar(name="shirts")  # Number of shirts

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

    # Budget constraint
    model.addConstr(55*x1 + 25*x2 <= 50000, name="budget_constraint")

    # Shirts sold constraint
    model.addConstr(x2 <= 4*x1, name="shirts_sold_constraint")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gp.GRB.OPTIMAL:
        print(f"Optimal solution: Coats = {x1.varValue}, Shirts = {x2.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("The model is infeasible")

solve_optimization_problem()
```