To solve the given optimization problem, we first need to define the decision variables and the objective function. Let's denote:

- \(x_p\) as the amount of pork in kilograms,
- \(x_c\) as the amount of chicken in kilograms.

The objective is to minimize the total cost, which can be represented by the equation:
\[ \text{Minimize} \quad 40x_p + 50x_c \]

Given the constraints:

1. The mixture needs to contain at least 10 units of protein.
2. The mixture needs to contain at least 15 units of fat.

We can represent these constraints using the protein and fat content per kilogram of pork and chicken as follows:

1. Protein constraint: \(2x_p + 3x_c \geq 10\)
2. Fat constraint: \(4x_p + 2x_c \geq 15\)

Additionally, since we cannot have negative amounts of pork or chicken, we also have non-negativity constraints:
\[ x_p \geq 0, \quad x_c \geq 0 \]

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
x_p = m.addVar(lb=0, name="pork")
x_c = m.addVar(lb=0, name="chicken")

# Define the objective function
m.setObjective(40*x_p + 50*x_c, GRB.MINIMIZE)

# Add constraints
m.addConstr(2*x_p + 3*x_c >= 10, name="protein_constraint")
m.addConstr(4*x_p + 2*x_c >= 15, name="fat_constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Pork: {x_p.x} kg")
    print(f"Chicken: {x_c.x} kg")
    print(f"Minimum cost: ${m.objVal}")
else:
    print("No optimal solution found")

```