To solve David's problem, we need to determine the optimal amounts of regular and premium supplementation that meet his minimum requirements for iron and calcium while minimizing the total cost.

Let's denote:
- $x$ as the amount (in grams) of regular supplementation used,
- $y$ as the amount (in grams) of premium supplementation used.

The objective is to minimize the total cost, which can be represented by the function $0.04x + 0.08y$, since regular supplementation costs $0.04 per gram and premium supplementation costs $0.08 per gram.

We have two constraints based on David's minimum requirements:
1. For iron: $0.20x + 0.25y \geq 30$ (since regular supplementation is 20% iron and premium supplementation is 25% iron, and he needs at least 30 grams of iron).
2. For calcium: $0.30x + 0.40y \geq 50$ (since regular supplementation is 30% calcium and premium supplementation is 40% calcium, and he needs at least 50 grams of calcium).

We also have non-negativity constraints since the amounts of supplementation cannot be negative:
- $x \geq 0$
- $y \geq 0$

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

```python
from gurobipy import *

# Create a model
m = Model("David_Supplementation")

# Define variables
x = m.addVar(lb=0, name="Regular_Supplementation")  # Amount of regular supplementation in grams
y = m.addVar(lb=0, name="Premium_Supplementation")  # Amount of premium supplementation in grams

# Objective function: Minimize total cost
m.setObjective(0.04*x + 0.08*y, GRB.MINIMIZE)

# Constraints
m.addConstr(0.20*x + 0.25*y >= 30, name="Iron_Requirement")
m.addConstr(0.30*x + 0.40*y >= 50, name="Calcium_Requirement")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Regular supplementation: {x.x} grams")
    print(f"Premium supplementation: {y.x} grams")
    print(f"Total cost: ${0.04*x.x + 0.08*y.x}")
else:
    print("No optimal solution found")

```