To solve the optimization problem described, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of regular and premium ice cream, formulating the objective function that represents the total profit, and listing all constraints based on the given information.

The symbolic representation can be defined as follows:
- Let `x1` represent the number of regular ice creams made.
- Let `x2` represent the number of premium ice creams made.

The objective function, which aims to maximize the total profit, can be written as: 
\[ \text{Maximize} \quad 1x_1 + 2.50x_2 \]

The constraints based on the problem description are:
1. The demand for regular ice cream is at most 40: \( x_1 \leq 40 \)
2. The demand for premium ice cream is at most 25: \( x_2 \leq 25 \)
3. The total number of ice creams made cannot exceed 60: \( x_1 + x_2 \leq 60 \)
4. Non-negativity constraints, since the quantities of ice cream made cannot be negative: \( x_1 \geq 0, x_2 \geq 0 \)

In symbolic notation with natural language objects, we have:
```json
{
    'sym_variables': [('x1', 'number of regular ice creams'), ('x2', 'number of premium ice creams')],
    'objective_function': 'Maximize 1*x1 + 2.50*x2',
    'constraints': ['x1 <= 40', 'x2 <= 25', 'x1 + x2 <= 60', 'x1 >= 0', 'x2 >= 0']
}
```

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

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(lb=0, name="regular_ice_cream")
x2 = m.addVar(lb=0, name="premium_ice_cream")

# Set the objective function
m.setObjective(1*x1 + 2.50*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 <= 40, "regular_demand")
m.addConstr(x2 <= 25, "premium_demand")
m.addConstr(x1 + x2 <= 60, "total_production")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of regular ice creams: {x1.x}")
    print(f"Number of premium ice creams: {x2.x}")
    print(f"Total profit: {m.objVal}")
else:
    print("No optimal solution found")
```