Section dup_drop_reorder.
Variable A : Type.
Hypothesis A_eq_dec : forall x y : A, {x = y} + {x <> y}.
Inductive dup_drop_step : list A -> list A -> Prop :=
| DDS_dup : forall l p,
In p l ->
dup_drop_step l (p :: l)
| DDS_drop : forall xs p ys,
dup_drop_step (xs ++ p :: ys) (xs ++ ys).
Definition dup_drop_step_star := clos_refl_trans_n1 _ dup_drop_step.
Proof using.
intros.
apply clos_rt_rtn1_iff.
eapply rt_trans; apply clos_rt_rtn1_iff; eauto.
Qed.
Proof using.
intros.
econstructor; eauto.
Qed.
Proof using.
intros.
apply clos_rt_rtn1_iff.
apply clos_rt_rt1n_iff.
econstructor; [eauto|].
apply clos_rt_rt1n_iff.
apply clos_rt_rtn1_iff.
auto.
Qed.
Proof using.
intros.
eapply dup_drop_step_star_step_1n; eauto.
constructor.
Qed.

Lemma dup_drop_swap :
forall l x y,
dup_drop_step_star (x :: y :: l) (y :: x :: l).