Предположим, у нас есть цель
a + b + c + d = a + c + b + d
, где a, b, c, d: nat
и лемма plus_comm
из Arith
:
plus_comm
: forall n m : nat, n + m = m + n
Можно сделать
rewrite plus_comm.
для получения d + (a + b + c) = a + c + b + d
и rewrite (plus_comm a b).
для получения b + a + c + d = a + c + b + d
.
Но выполнение rewrite (plus_comm b c)
или rewrite (plus_comm c d)
приведет кошибка, аналогичная
Found no subterm matching "b + c" in the current goal.
Вопрос. Почему это так, и что мы можем сделать, чтобы переписать b + c
как c + b
в цели?
Редактировать. Переписать b + c
как c + b
мы можем сделать
rewrite (plus_assoc_reverse a).
rewrite (plus_comm b c).
rewrite plus_assoc.
Для доказательства леммы с помощью reflexivity.
Есть ли более элегантный способ?