proposition: Lemma list_sim_unique : forall l m m', (forall x y y', In x l -> In y m -> In y' m' -> R x y -> R x y' -> y = y') -> list_sim l m -> list_sim l m' -> m = m'.
proof: Proof. induction l; intros; inversion H0; inversion H1; trivial. rewrite (H x y y0). rewrite (IHl ys ys0); trivial. intros. destruct (list_In_nth l x1 H12) as [p lp]. apply H with x1; trivial. right; trivial. rewrite <- H5; right; trivial. rewrite <- H10; right; trivial. rewrite H2; auto with datatypes. rewrite <- H5; left; trivial. rewrite <- H10; left; trivial. rewrite H2; trivial. rewrite H2; trivial. Qed.
imports: Coq(Setoid Morphisms Basics) CoLoR(ListExtras NatUtil LogicUtil)