(**  Impredicative or, which can emulate a classical not-implies.  **)
Definition unless condition property : Prop :=
 forall goal : Prop, (condition -> goal) -> (property -> goal) -> goal.Notation "\unless C , P" := (unless C P) : type_scope.

(* Specifications: *)
Lemma unlessL C P : implies C (\unless C, P).
Lemma unlessR C P : implies P (\unless C, P).
Lemma unless_sym C P : implies (\unless C, P) (\unless P, C).
Lemma unlessP (C P : Prop) : (\unless C, P) <-> C \/ P.
Lemma bind_unless C P {Q} : implies (\unless C, P) (\unless (\unless C, Q), P).
Lemma unless_contra b C : implies (~~ b -> C) (\unless C, b).