Definition not_a_prop {A} (P: A) := True.
Ltac not_a_prop := match goal with
| |- not_a_prop  (prop _) => fail 1
| |- _ => apply Coq.Init.Logic.I
end.

(* Specifications: *)
Lemma flip_prop {A}{NA: NatDed A}: forall P Q,
not_a_prop P -> (P&& !! Q = !! Q && P).