First-order logic can't represent the possibility that a property holds about an object. In first-order logic you can state that something holds or that something does not hold (through it's negation). Otherwise you can't say anything else about it. You certainly can't represent the notion that a property might hold.
For systems that incorporate certainty and possibility, you can take a look at modal logic.
If you really want to make a distinction between "is flying" and "can fly" in first-order logic, you can set
- $dove(x)$ to mean "$x$ is a dove",
- $canfly(x)$ to mean "$x$ can fly" and
- $fly(x)$ to mean "$x$ is flying".
- $\exists x(dove(x)\land canfly(x))$ means "there is a dove $x$ that can fly" and
- $\exists x(dove(x)\land fly(x))$ means "there is a dove $x$ that is flying".
1) You could post a new question about this. Maybe someone can answer with more certainty than mine.
2) What does the sentence $\exists x(dove(x)\land can(x,fly))$ violate in first-order logic?
The sentence itself is syntactically invalid. It does not make sense, because the distinction between terms (objects) and properties is not clear. In $P(x)$, $x$ is a term (a variable, an object) and $P$ is a property that should hold about object $x$. For the sentence to make sense we must assume that $fly$ is an object. So then, $can(x,fly)$ is a property over two objects. However, it is clear that you intended $fly$ to be a property ($fly(x)$).