Require Export List.
Require Export ListSet.
Set Implicit Arguments.
Unset Strict Implicit.
(*********************************************************************)
(*                  Some List Functions                              *)
(*********************************************************************)
Definition front (A : Set) (l : list A) : list A := rev (tail (rev l)).
Definition last (A : Set) (l : list A) := head (rev l).
Fixpoint take (A : Set) (n : nat) (l : list A) {struct l} :
list A :=
match l with
| nil => nil (A:=A)
| a :: l' => match n with
| O => nil (A:=A)
| S m => a :: take m l'
end
end.
Fixpoint allunique (A : Set) (l : list A) {struct l} : Prop :=
match l with
| nil => True
| x :: l' => IF In x l' then False else allunique l'
end.
(*********************************************************************)
(*                  Some Functions for ListSet                       *)
(*********************************************************************)
Definition IsEmpty (A : Set) (B : set A) := forall x : A, ~ set_In x B.
Definition Included (A : Set) (B C : set A) :=
forall x : A, set_In x B -> set_In x C.

Lemma AllWaysIncluded : forall (A : Set) (B : set A), Included B B.