To solve this problem, we first need to translate the natural language description into a symbolic representation of the optimization problem. 

The variables in this problem can be represented symbolically as follows:
- $x_1$ for 'cornichons'
- $x_2$ for 'strips of bacon'
- $x_3$ for 'slices of pizza'

Given these variables, the objective function to maximize is: $7x_1 + x_2 + x_3$

The constraints are:
1. $7x_1 + 6x_2 \leq 22$
2. $7x_1 + x_3 \leq 22$
3. $7x_1 + 6x_2 + x_3 \leq 23$
4. $x_3$ must be an integer.

Symbolic representation:
```json
{
    'sym_variables': [('x1', 'cornichons'), ('x2', 'strips of bacon'), ('x3', 'slices of pizza')],
    'objective_function': '7*x1 + x2 + x3',
    'constraints': [
        '7*x1 + 6*x2 <= 22',
        '7*x1 + x3 <= 22',
        '7*x1 + 6*x2 + x3 <= 23'
    ]
}
```

To solve this problem using Gurobi, we will use Python. We need to ensure that $x_3$ is an integer, which can be achieved by setting its type to `GRB.INTEGER`. Since $x_1$ and $x_2$ can be non-integer, their types will be set to `GRB.CONTINUOUS`.

```python
from gurobi import *

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

# Add variables
x1 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, name="cornichons")
x2 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, name="strips_of_bacon")
x3 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.INTEGER, name="slices_of_pizza")

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

# Add constraints
m.addConstr(7*x1 + 6*x2 <= 22, "fiber_from_cornichons_and_bacon")
m.addConstr(7*x1 + x3 <= 22, "fiber_from_cornichons_and_pizza")
m.addConstr(7*x1 + 6*x2 + x3 <= 23, "total_fiber")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"cornichons: {x1.x}")
    print(f"strips_of_bacon: {x2.x}")
    print(f"slices_of_pizza: {x3.x}")
else:
    print("No optimal solution found")
```