(** Total order on strings. *)
Fixpoint compare (x y : t) : comparison :=
  match x, y with
  | [], [] => Eq
  | [], _ => Lt
  | _, [] => Gt
  | x :: xs, y :: ys =>
    match Char.compare x y with
    | Eq => compare xs ys
    | c => c
    end
  end.

(* Specifications: *)
Lemma compare_implies_eq : forall (x y : t), compare x y = Eq -> x = y.
Lemma compare_same_is_eq : forall (x : t), compare x x = Eq.