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]