A Formal Treatment of Non-Monotonic Reasoning