nth_rw
rw
はマッチした項をすべて置き換えてしまいます。特定の項だけを書き換えたいとき、nth_rw
が使用できます。対象の式中に現れる順番を1始まりで指定することで、項を指定します。
import Mathlib.Tactic.NthRewrite
import Mathlib.Algebra.Group.Basic -- 群の定義を import する
-- `G` は群
variable (G : Type) [Group G]
example (a b : G) : a * b⁻¹ = 1 ↔ a = b := by
-- `one_mul: 1 * b = b` を使って `b` を `1 * b` に書き換えたい
try
-- 仮に普通に `rw` しようとすると…
rw [← one_mul b]
-- 左側にある `b` まで一緒に置き換わってしまった!
show a * (1 * b)⁻¹ = 1 ↔ a = 1 * b
-- これは失敗
fail
-- `b` は2回出現するが、2番目だけ置き換える
nth_rw 2 [← one_mul b]
-- `mul_inv_eq_iff_eq_mul: a * b⁻¹ = c ↔ a = c * b` を使う
exact mul_inv_eq_iff_eq_mul