convert

ローカルコンテキストに現在のゴールに近いけれども等しくはない h があるとき、exact h としても失敗します。しかし convert h は成功する可能性があり、成功した場合は h とゴールの差分を新たなゴールとします。

import Mathlib.Tactic.Convert

variable (a b c: Nat)

example (f : Nat → Nat) (h : f (a + b) = 0) (hc: a + b = c) : f (c) = 0 := by
  -- `h` はゴールと等しくないので失敗する
  fail_if_success exact [h]

  -- `h` とゴールの差分を新たなゴールにする
  convert h

  -- ゴールが `⊢ c = a + b` に変わっている
  show c = a + b

  rw [hc]