Obvious:
parent[a and b]
The child axis is implicit in predicates, this means there is no need to mention it.
parent[child::a and child::b] <!-- the same, only longer -->
The use of two separate predicates is possible as long as the conditions are conjunctive ("and"):
parent[a][b] <!-- the same, slightly shorter -->
This saves three characters in expression length. However, the use of two predicates triggers two separate checks, since they are applied one after another. Using one predicate with a boolean operator seems to be the simplest and cleanest approach to me.