rename_i

rename_i は, がついてアクセス不能になった変数に名前を付けることができます.

一般に,rename_i x₁ x₂ ... xₐ により,最初の a 個のアクセス不能変数に名前を付けることができます.

example {n : Nat} (h0 : n ≠ 0) : n ≥ 1 := by
  cases n

  case zero =>
    contradiction

  case succ _ =>
    -- `n✝` が infoview に表示される
    -- これは `succ` の引数に名前をつけなかったため

    -- 名前をつける
    rename_i n
    show Nat.succ n ≥ 1

    simp

必要な変数をアクセス不能にしてしまうこと自体を避けるべきであるため,rename_i を使うべき場面は多くありませんが remane_i の使用によりコードが簡単になることがあります.

variable {m : Nat}

/-- 自然数が0でも1でも2でもなければ3以上.
`case` をネストさせて示した場合. -/
example (h0 : m ≠ 0) (h1 : m ≠ 1) (h2 : m ≠ 2) : 3 ≤ m := by
  cases m with
  | zero => contradiction
  | succ m =>
    cases m with
    | zero => contradiction
    | succ m =>
      cases m with
      | zero => contradiction
      | succ m =>
        show 3 ≤ m + 3
        simp

/-- 自然数が0でも1でも2でもなければ3以上.
`rename_i` を使って示した場合. -/
example (h0 : m ≠ 0) (h1 : m ≠ 1) (h2 : m ≠ 2) : 3 ≤ m := by
  -- 仮定から `m = 0, 1, 2` のときは考えなくていい
  repeat
    cases m
    contradiction
    rename_i m

  -- 自然数 `m` に対して `3 ≤ m + 3` を示せばよい
  clear h0 h1 h2
  show 3 ≤ m + 3

  -- これは明らか
  simp

/-- 補足.おそらく最も簡潔な証明. -/
example (h0 : m ≠ 0) (h1 : m ≠ 1) (h2 : m ≠ 2) : 3 ≤ m := by
  let .succ m := m
  let .succ m := m
  let .succ m := m

  show 3 ≤ m + 3
  simp