(* Copyright (C) 2012  G. Gonthier, B. Ziliani, A. Nanevski, D. Dreyer  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>. *)
From mathcomp
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
(***********************************)
(* option lookup and list prefixes *)
(***********************************)
Section Prefix.
Variable A : Type.
Fixpoint onth (s : seq A) n : option A :=
if s is x :: s' then
if n is n'.+1 then onth s' n' else Some x
else None.
Definition prefix s1 s2 :=
forall n x, onth s1 n = some x -> onth s2 n = some x.

Lemma prefix_size (s t : seq A) : prefix s t -> size s <= size t.