Fixpoint before_func {A: Type} (f : A -> bool) (g : A -> bool) (l : list A) : Prop :=
  match l with
  | [] => False
  | a :: l' =>
    f a = true \/
    (g a = false /\ before_func f g l')
  end.Definition before_func_dec : forall l, {before_func f g l} + {~ before_func f g l}.

Lemma before_func_prepend : forall l l', before_func f g l -> (forall x, In x l' -> g x = false) -> before_func f g (l' ++ l).