Another way to do this is to check for the hypothesis that you're inserting. I use this pattern pretty commonly.
Ltac aux :=
repeat match goal with
| [X: ?n <> 0 |- _] =>
match goal with
| [ _ : 0 < n |- _ ] => fail 1
| _ => pose proof (ne_gt0 X)
end
end.
Goal forall x y z, x <> 0 -> y <> 0 -> 0 < y -> z <> 0 -> x+y+z <> 0.
intros x y z Hx Hy Hy' Hz; aux.
Admitted.
Here, fail 1 causes the failure to go up one level, causing the mach with ?n <> 0 to fail. So, we're checking for every hypothesis of the form ?n <> 0 and, for each of those checking to make sure that we don't already have the fact that n < 0 recorded. If we don't, then we record it.