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_antisymmetric : forall l, (forall x, f x = true -> g x = true -> False) -> before_func f g l -> before_func g f l -> False.