Definition rem A x : list X :=
    filter (fun z => Dec (z <> x)) A.

(* Specifications: *)
Lemma in_rem_iff x A y : x el rem A y <-> x el A /\ x <> y.
Lemma rem_not_in x y A : x = y \/ ~ x el A -> ~ x el rem A y.
Lemma rem_in x y A : x el rem A y -> x el A.
Lemma rem_neq x y A : x <> y -> x el A -> x el rem A y.
Lemma rem_comm A x y : rem (rem A x) y = rem (rem A y) x.
Lemma rem_fst x A : rem (x::A) x = rem A x.
Lemma rem_fst' x y A : x <> y -> rem (x::A) y = x::rem A y.
Lemma rem_id x A : ~ x el A -> rem A x = A.
Lemma in_rem_iff x A y : x el rem A y <-> x el A /\ x <> y.
Lemma rem_not_in x y A : x = y \/ ~ x el A -> ~ x el rem A y.
Lemma rem_in x y A : x el rem A y -> x el A.
Lemma rem_neq x y A : x <> y -> x el A -> x el rem A y.
Lemma rem_comm A x y : rem (rem A x) y = rem (rem A y) x.
Lemma rem_fst x A : rem (x::A) x = rem A x.
Lemma rem_fst' x y A : x <> y -> rem (x::A) y = x::rem A y.
Lemma rem_id x A : ~ x el A -> rem A x = A.