To solve this optimization problem, we first need to define the variables and constraints in a symbolic representation. 

The variables are:
- `x0`: The number of cheeseburgers.
- `x1`: The quantity of rotisserie chickens.

Given these variables, the objective function is to maximize: 
6*x0 + 3*x1

Now, let's list out the constraints based on the problem description:

1. Umami index constraint (minimum): 6*x0 + 4*x1 >= 10
2. Dollar cost constraint (minimum): 6*x0 + 5*x1 >= 18
3. Protein grams constraint (minimum): 4*x0 + 9*x1 >= 56
4. Special constraint: x0 - 3*x1 >= 0
5. Umami index constraint (maximum): 6*x0 + 4*x1 <= 20
6. Dollar cost constraint (maximum): 6*x0 + 5*x1 <= 43
7. Protein grams constraint (maximum): 4*x0 + 9*x1 <= 89

Since `x0` represents the number of cheeseburgers, it must be an integer. However, `x1`, representing the quantity of rotisserie chickens, can be a non-integer value.

Here's the symbolic representation in JSON format:
```json
{
    'sym_variables': [('x0', 'cheeseburgers'), ('x1', 'rotisserie chickens')],
    'objective_function': '6*x0 + 3*x1',
    'constraints': [
        '6*x0 + 4*x1 >= 10',
        '6*x0 + 5*x1 >= 18',
        '4*x0 + 9*x1 >= 56',
        'x0 - 3*x1 >= 0',
        '6*x0 + 4*x1 <= 20',
        '6*x0 + 5*x1 <= 43',
        '4*x0 + 9*x1 <= 89'
    ]
}
```

And here is the Gurobi code to solve this optimization problem:
```python
from gurobipy import *

# Create a new model
m = Model("Optimization_Problem")

# Define variables
x0 = m.addVar(vtype=GRB.INTEGER, name="cheeseburgers")
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="rotisserie_chickens")

# Set objective function
m.setObjective(6*x0 + 3*x1, GRB.MAXIMIZE)

# Add constraints
m.addConstr(6*x0 + 4*x1 >= 10, "umami_index_min")
m.addConstr(6*x0 + 5*x1 >= 18, "dollar_cost_min")
m.addConstr(4*x0 + 9*x1 >= 56, "protein_grams_min")
m.addConstr(x0 - 3*x1 >= 0, "special_constraint")
m.addConstr(6*x0 + 4*x1 <= 20, "umami_index_max")
m.addConstr(6*x0 + 5*x1 <= 43, "dollar_cost_max")
m.addConstr(4*x0 + 9*x1 <= 89, "protein_grams_max")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Cheeseburgers: {x0.x}")
    print(f"Rotisserie chickens: {x1.x}")
    print(f"Objective value: {m.objVal}")
else:
    print("No optimal solution found.")
```