lean4-htt/tests/lean/calcErrors.lean
Miyahara Kō dd78012ddd
style: replace HEq x y with x ≍ y (#8872)
Although `HEq` was abbreviated as `≍` in #8503, many instances of the
form `HEq x y` still remain.
Therefore, I searched for occurrences of `HEq x y` using the regular
expression `(?<![A-Za-z/@]|``)HEq(?![A-Za-z.])` and replaced as many as
possible with the form `x ≍ y`.
2025-06-20 07:47:33 +00:00

60 lines
2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-! # Check basic `calc` error messages and positions -/
/-! Basic proof failure -/
theorem ex1 (a b c : Nat) (h₁ : a = b) (h₂ : b = c) : a + b = 0 + c + b :=
calc a + b = b + b := by rw [h₁]
_ = 0 + c + b := rfl
/-! Step term mismatch -/
theorem ex2 (a b c : Nat) (h₁ : a = b) (h₂ : b = c) : a + b = 0 + c + b :=
calc a + b = b + b := by rw [h₁]
0 + c + b = 0 + c + b := rfl
-- fixed
theorem ex3 (a b c : Nat) (h₁ : a = b) (h₂ : b = c) : a + b = 0 + c + b :=
calc a + b = b + b := by rw [h₁]
_ = 0 + b + b := by rw [Nat.zero_add]
_ = 0 + c + b := by rw [h₂]
/-! Initial term mismatch -/
theorem ex4 (p : Nat → Prop) (a b : Nat) (h₁ : p a) (h₂ : p b) : p c :=
calc p a := h₁
_ := h₂
/-! Final term mismatch -/
theorem ex5 (p : Nat → Nat → Prop) (a b : Nat) (h₁ : p a b) (h₂ : p b c) : p a c :=
calc p a b := h₁
p _ c := h₂
/-! Relation with bad signature -/
instance {α β γ} : Trans (· ≍ · : α → β → Prop) (· ≍ · : β → γ → Prop) (· ≍ · : αγ → Prop) where
trans h₁ h₂ := HEq.trans h₁ h₂
theorem ex6 {a : α} {b : β} {c : γ} (h₁ : a ≍ b) (h₂ : b ≍ c) : a ≍ c :=
calc a ≍ b := h₁
_ ≍ c := h₂ -- Error because the last two arguments of HEq are not explicit
-- fixed
abbrev HEqRel {α β} (a : α) (b : β) := a ≍ b
infix:50 "===" => HEqRel
instance {α β γ} : Trans (HEqRel : α → β → Prop) (HEqRel : β → γ → Prop) (HEqRel : αγ → Prop) where
trans h₁ h₂ := HEq.trans h₁ h₂
theorem ex7 {a : α} {b : β} {c : γ} (h₁ : a ≍ b) (h₂ : b ≍ c) : a === c :=
calc a === b := h₁
_ === c := h₂
/-!
By enforcing separating newlines in the `calc` parser, we make sure that the next error reported is at `[`
instead of it being interpreted as the beginning of an incomplete calc step. -/
example : 1 + 1 = 2 := by
calc 1 + 1 = 1 + 1 := by rfl
_ = 2 := by rfl [h]