Notation "x \is A" :=
  (in_unkey x (has_quality 0 A)) (only printing) : bool_scope.Notation "x \is 'a' A" :=
  (in_unkey x (has_quality 1 A)) (only printing) : bool_scope.Notation "x \is 'an' A" :=
  (in_unkey x (has_quality 2 A)) (only printing) : bool_scope.Notation "x \isn't A" := (x \notin has_quality 0 A) : bool_scope.Notation "x \isn't 'a' A" := (x \notin has_quality 1 A) : bool_scope.Notation "x \isn't 'an' A" := (x \notin has_quality 2 A) : bool_scope.Notation "[ 'qualify' x | P ]" := (Qualifier 0 (fun x => P%B)) : form_scope.Notation "[ 'qualify' x : T | P ]" :=
  (Qualifier 0 (fun x : T => P%B)) (only parsing) : form_scope.Notation "[ 'qualify' 'a' x | P ]" := (Qualifier 1 (fun x => P%B)) : form_scope.Notation "[ 'qualify' 'a' x : T | P ]" :=
  (Qualifier 1 (fun x : T => P%B)) (only parsing) : form_scope.Notation "[ 'qualify' 'an' x | P ]" :=
  (Qualifier 2 (fun x => P%B)) : form_scope.Notation "[ 'qualify' 'an' x : T | P ]" :=
  (Qualifier 2 (fun x : T => P%B)) (only parsing) : form_scope.Variant pred_key (p : {pred T}) : Prop := DefaultPredKey.Variant pred_key (p : {pred T}) : Prop := DefaultPredKey.Structure keyed_pred (k : pred_key p) :=
  PackKeyedPred {unkey_pred :> {pred T}; _ : unkey_pred =i p}.Structure keyed_pred (k : pred_key p) :=
  PackKeyedPred {unkey_pred :> {pred T}; _ : unkey_pred =i p}.Structure keyed_pred (k : pred_key p) :=
  PackKeyedPred {unkey_pred :> {pred T}; _ : unkey_pred =i p}.Definition KeyedPred := @PackKeyedPred k p (frefl _).

Lemma keyed_predE : k_p =i p.