如何拆分两个列表的相等性?

How to split equality of two lists?

我有以下目标和背景:

  A : Type
  eqb : A -> A -> bool
  H : forall a1 a2 : A, eqb a1 a2 = true <-> a1 = a2
  x : A
  l1' : list A
  IHl1' : forall l2 : list A, eqb_list eqb l1' l2 = true <-> l1' = l2
  y : A
  l2' : list A
  IHl2' : eqb_list eqb (x :: l1') l2' = true <-> x :: l1' = l2'
  H0 : x = y
  H1 : l1' = l2'
  ============================
  x :: l1' = y :: l2'

有没有一种策略可以让我应用H0H1并完成这个证明?

谢谢

是的,它叫做 rewrite(参见 refman)。你可以做到

rewrite H0, H1.

或者

rewrite H0.
rewrite H1.

编辑:您也可以使用 f_equal (doc),这应该会立即实现您的目标。