Suppose I have two integer and non-negative decision variables $a$ and $b$ in a linear program and a constant $c$, how can I express with linear inequalities that $(a = c) \implies (b = 0)$?
You can separate the two cases when $c$ is an integer and when it is not.
What I've tried so far is: $a - c \ge b$ but that's a too strict constraint as many values like $a = 0$, $b = c = 1$ don't work anymore.
Introduce three new binary decision variables, $x$, $y$, and $z$:
Introduce a new constant: $$\delta = \begin{cases} \min\{c - \lfloor c\rfloor, \lceil c\rceil - c\}, & \text{if $c$ is not an integer} \\ 1, & \text{if $c$ is an integer} \end{cases}$$ (i.e., if $c$ is not an integer, $\delta$ is the smaller of the two distances from $c$ to its nearest integers).
Let $M$ be a large positive constant.
Enforce the definitions of the new decision variables with the following constraints: $$\begin{align} c - a + \delta & \le Mx \\ a - c + \delta & \le My \\ x + y - 1 & \le z \end{align}$$
The logic is:
Then, the constraint $$b \le M(1-z),$$ ensures that if $z=1$ (i.e., if $a=c$), then $b=0$.
A few notes: