To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of interest (ice cream and cheese units), formulating the objective function that represents the profit, and translating the constraints into algebraic expressions.

Let's denote:
- $x_1$ as the number of units of ice cream produced.
- $x_2$ as the number of units of cheese produced.

The objective is to maximize profits. Given that the profit per unit of ice cream ($x_1$) is $2.5 and the profit per unit of cheese ($x_2$) is $4, the objective function can be written as:
\[ \text{Maximize:} \quad 2.5x_1 + 4x_2 \]

The constraints are:
1. The ice cream team can produce at most 50 units of ice cream per day: $x_1 \leq 50$.
2. The cheese team can produce at most 80 units of cheese per day: $x_2 \leq 80$.
3. The shared processing machine can process at most 100 units of total items per day: $x_1 + x_2 \leq 100$.

Non-negativity constraints are also implied since the production cannot be negative:
- $x_1 \geq 0$
- $x_2 \geq 0$

Thus, the symbolic representation of the problem is:
```json
{
  'sym_variables': [('x1', 'units of ice cream'), ('x2', 'units of cheese')],
  'objective_function': '2.5*x1 + 4*x2',
  'constraints': ['x1 <= 50', 'x2 <= 80', 'x1 + x2 <= 100', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this problem using Gurobi in Python, we can write the following code:

```python
from gurobipy import *

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

# Create variables
x1 = m.addVar(lb=0, name="units_of_ice_cream")
x2 = m.addVar(lb=0, name="units_of_cheese")

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

# Add constraints
m.addConstr(x1 <= 50, "ice_cream_production_limit")
m.addConstr(x2 <= 80, "cheese_production_limit")
m.addConstr(x1 + x2 <= 100, "shared_machine_capacity")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal production: {x1.varName} = {x1.x}, {x2.varName} = {x2.x}")
    print(f"Maximum profit: {m.objVal}")
else:
    print("No optimal solution found")
```