proposition: Lemma list_beq_correct' {A} {eq_A : A -> A -> bool} {dec_eq_A : forall x y : A, {x = y} + {x <> y}} (eq_A_correct : forall x y, eq_A x y = dec_eq_A x y) {x y : list A} : list_beq eq_A x y = list_eq_dec' dec_eq_A x y.
proof: Proof. unfold list_eq_dec'; erewrite list_beq_correct. do 2 edestruct list_eq_dec; subst; simpl; congruence. Unshelve. intros ??; rewrite eq_A_correct; edestruct dec_eq_A; simpl; congruence. intros ??; rewrite eq_A_correct; edestruct dec_eq_A; simpl; congruence. Qed.
imports: Coq.Lists.List Coq.Lists.SetoidList Coq.Bool.Bool Coq.Arith.PeanoNat Coq.Strings.Ascii Coq.Strings.String Coq.Logic.Eqdep_dec Fiat.Common