Necessity and sufficiency in abstract conditional reasoning