To solve the given optimization problem, we first need to translate the natural language description into a symbolic representation. This involves defining the variables, the objective function, and the constraints using algebraic terms.

The variables in this problem are:
- `x1`: representing the number of potatoes,
- `x2`: representing the number of bananas.

The objective function to be minimized is: `6*x1 + 7*x2`.

The constraints are:
1. `2*x1` (grams of carbohydrates from potatoes) plus `12*x2` (grams of carbohydrates from bananas) must be at least 39 grams: `2*x1 + 12*x2 >= 39`.
2. The total grams of carbohydrates from both potatoes and bananas must not exceed 91 grams, but there's an additional constraint stating it cannot exceed 61 grams when combined: `2*x1 + 12*x2 <= 61` (considering the stricter constraint).
3. `-5*x1 + 7*x2 >= 0`, representing the relationship between potatoes and bananas.
4. `x1` must be an integer, as we are limited to a non-fractional amount of potatoes.

The symbolic representation of this problem can be summarized as follows:
```json
{
    'sym_variables': [('x1', 'potatoes'), ('x2', 'bananas')],
    'objective_function': '6*x1 + 7*x2',
    'constraints': [
        '2*x1 + 12*x2 >= 39',
        '2*x1 + 12*x2 <= 61',
        '-5*x1 + 7*x2 >= 0',
        'x1 is an integer'
    ]
}
```

Given this symbolic representation, we can now write the Gurobi code to solve this optimization problem. Note that Gurobi is a powerful tool for solving mathematical optimization problems and requires Python.

Here's how you could implement it in Python using Gurobi:
```python
from gurobipy import *

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

# Add variables to the model
x1 = m.addVar(vtype=GRB.INTEGER, name="potatoes")  # x1 represents potatoes and must be an integer
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="bananas")  # x2 represents bananas and can be a fraction

# Set the objective function to minimize
m.setObjective(6*x1 + 7*x2, GRB.MINIMIZE)

# Add constraints to the model
m.addConstr(2*x1 + 12*x2 >= 39, name="carbohydrates_min")  # Minimum carbohydrates constraint
m.addConstr(2*x1 + 12*x2 <= 61, name="carbohydrates_max")  # Maximum carbohydrates constraint
m.addConstr(-5*x1 + 7*x2 >= 0, name="potatoes_bananas_relationship")  # Relationship between potatoes and bananas

# Optimize the model
m.optimize()

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