(* Impredicative or, which can emulate a classical not-implies. *)
Definition unless condition property : Prop :=
 forall goal : Prop, (condition -> goal) -> (property -> goal) -> goal.Notation "{ 'on' cd , 'bijective' f }" := (bijective_on (mem cd) f)
  (at level 0, f at level 8,
   format "{ 'on'  cd ,  'bijective'  f }") : 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).