Let's put the original rule in a formal specification:

First, all lists have order. In the original rule, you put a matching condition as: 
```ListItem(typedDeclaration(_, F1:CId)) ListItem(typedDeclaration(_, F2:CId)) _,```

This condition is with a "when" condition, and you also put the second rule said that if a field is in the end of the list and if the offset is less than our offset, then it is also OK. 

Hence, from these two rules, I believe that you mean you try to locate a field that either it has a child in the list, and its offset is less than our offset and its child offset is greater than our offset, or the field does not have a child in the list and its offset must be less than our offset.

That is what I understand of your original rule. Do you mean that we can forget about the original rule and just match the first field which is less than our field?