Definition fincl A B (AsubB : A `<=` B) (a : A) : B :=
[` (fsubsetP AsubB) _ (valP a)].
Definition fsub B A : {set B} := [set x : B | val x \in A].

(* Specifications: *)
Lemma fsubE A B (AsubB : A `<=` B) :
fsub B A = [set fincl AsubB x | x : A].
Lemma fincl_fsub A B (AsubB : A `<=` B) (a : A) :
fincl AsubB a \in fsub B A.
Lemma fsubset_trans : transitive (@fsubset K).
Lemma fsubsetIidr A B : (B `<=` A `&` B) = (B `<=` A).
Lemma fsetUidPl A B : reflect (A `|` B = A) (B `<=` A).
Hint Resolve fsub_inj.
Lemma eqEfsubset A B : (A == B) = (A `<=` B) && (B `<=` A).
Lemma subEfproper A B : A `<=` B = (A == B) || (A `<` B).
Lemma eqEfcard A B : (A == B) = (A `<=` B) &&
(#|` B| <= #|` A|)%N.
Lemma fproperEcard A B :
(A `<` B) = (A `<=` B) && (#|` A| < #|` B|)%N.
Lemma fsub0set A : fset0 `<=` A.
Lemma fproper_sub_trans B A C : A `<` B -> B `<=` C -> A `<` C.
Lemma fsub_proper_trans B A C :
A `<=` B -> B `<` C -> A `<` C.
Lemma fsubset_neq0 A B : A `<=` B -> A != fset0 -> B != fset0.
Lemma fset_0Vmem A : (A = fset0) + {x : K | x \in A}.
Lemma fset1P x a : reflect (x = a) (x \in [fset a]).
Lemma fsetU1K a B : a \notin B -> (a |` B) `\ a = B.
Lemma fset2P x a b : reflect (x = a \/ x = b) (x \in [fset a; b]).
Lemma in_fset2 x a b : (x \in [fset a; b]) = (x == a) || (x == b).
Lemma fsetSU A B C : A `<=` B -> A `|` C `<=` B `|` C.
Lemma fsetSI A B C : A `<=` B -> A `&` C `<=` B `&` C.
Lemma fsetDS C A B : A `<=` B -> C `\` B `<=` C `\` A.
Lemma fsetDSS A B C D : A `<=` C -> D `<=` B -> A `\` B `<=` C `\` D.
Hint Resolve fsubsetIl fsubsetIr fsubsetDl fsubD1set.