To solve Mary's diet problem, we first need to translate the natural language description into a symbolic representation. Let's define the variables and the objective function.

We have two types of food items: protein drink and fruit snack. We can represent the number of servings of each as follows:
- Let $x_1$ be the number of servings of protein drink.
- Let $x_2$ be the number of servings of fruit snack.

The objective is to minimize the total cost, which can be represented as:
\[ \text{Minimize:} \quad 4x_1 + 12x_2 \]

Now, let's list the constraints based on the requirements for vitamins A and C, and proteins:
- Vitamin A constraint: $45x_1 + 400x_2 \geq 100$
- Vitamin C constraint: $200x_1 + 600x_2 \geq 500$
- Protein constraint: $300x_1 + 200x_2 \geq 3000$

Also, since Mary cannot buy a negative number of servings, we have:
- Non-negativity constraints: $x_1 \geq 0$, $x_2 \geq 0$

The symbolic representation in JSON format is:

```json
{
    'sym_variables': [('x1', 'protein drink'), ('x2', 'fruit snack')],
    'objective_function': '4*x1 + 12*x2',
    'constraints': [
        '45*x1 + 400*x2 >= 100',
        '200*x1 + 600*x2 >= 500',
        '300*x1 + 200*x2 >= 3000',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

Now, let's implement this problem in Gurobi using Python:

```python
from gurobipy import *

# Create a new model
model = Model("Marys_Diet")

# Define the variables
x1 = model.addVar(vtype=GRB.CONTINUOUS, name="protein_drink", lb=0)
x2 = model.addVar(vtype=GRB.CONTINUOUS, name="fruit_snack", lb=0)

# Set the objective function
model.setObjective(4*x1 + 12*x2, GRB.MINIMIZE)

# Add constraints
model.addConstr(45*x1 + 400*x2 >= 100, "Vitamin_A")
model.addConstr(200*x1 + 600*x2 >= 500, "Vitamin_C")
model.addConstr(300*x1 + 200*x2 >= 3000, "Proteins")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution found: {x1.varName} = {x1.x}, {x2.varName} = {x2.x}")
    print(f"Objective function value: {model.objVal}")
else:
    print("No optimal solution found")
```