proposition: Lemma list_before_snoc a l x y : list_before (l ++ a :: nil) x y <-> a = y /\ In x l /\ ~ In y l /\ NoDup l \/ ~ In a l /\ list_before l x y.
proof: Proof. rewrite list_before_app; ins. rewrite nodup_app, disjoint_one_r in *. split; ins; desf; splits; eauto with hahn; try (edestruct list_before_singl; eassumption). red in H0; desf. Qed.
imports: Arith HahnBase HahnList HahnRelationsBasic