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 (number of fish tacos and number of chicken tacos), formulating an objective function that represents the total profit, and listing all constraints as semi-algebraic expressions.

### Symbolic Representation

Let's define:
- \(x_1\) as the number of fish tacos,
- \(x_2\) as the number of chicken tacos.

The **objective function** is to maximize profit, given by \(6x_1 + 4x_2\), since each fish taco gives a profit of $6 and each chicken taco gives a profit of $4.

The **constraints** are:
1. \(x_1 \geq 20\) (at least 20 fish tacos must be sold),
2. \(x_2 \geq 40\) (at least 40 chicken tacos must be sold),
3. \(x_1 \leq 50\) (no more than 50 fish tacos can be made),
4. \(x_2 \leq 60\) (no more than 60 chicken tacos can be made),
5. \(x_1 + x_2 \leq 80\) (total number of tacos cannot exceed 80 due to the limit on taco shells).

### Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'number of fish tacos'), ('x2', 'number of chicken tacos')],
    'objective_function': '6*x1 + 4*x2',
    'constraints': ['x1 >= 20', 'x2 >= 40', 'x1 <= 50', 'x2 <= 60', 'x1 + x2 <= 80']
}
```

### Gurobi Code

To solve this linear programming problem using Gurobi in Python, we will use the following code:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(lb=20, ub=50, vtype=GRB.INTEGER, name="fish_tacos")
x2 = m.addVar(lb=40, ub=60, vtype=GRB.INTEGER, name="chicken_tacos")

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

# Add constraints
m.addConstr(x1 + x2 <= 80, "total_tacos_limit")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of fish tacos: {x1.x}")
    print(f"Number of chicken tacos: {x2.x}")
    print(f"Total profit: {6*x1.x + 4*x2.x}")
else:
    print("No optimal solution found")
```