lean4-htt/tests/lean/run/3922.lean
jrr6 23b23c1236
feat: validate, expose names, and add hovers for all suggestion tactics (#7474)
This PR updates `rw?`, `show_term`, and other tactic-suggesting tactics
to suggest `expose_names` when necessary and validate tactics prior to
suggesting them, as `exact?` already did, and it also ensures all such
tactics produce hover info in the messages showing tactic suggestions.

This introduces a breaking change in the `TryThis` API: the `type?`
parameter of `addRewriteSuggestion` is now an `LOption`, not an
`Option`, to obviate the need for a hack we previously used to indicate
that a rewrite closed the goal.

Closes #7350
2025-04-07 01:11:39 +00:00

40 lines
1.2 KiB
Text

/-!
# Issue 3922
The `apply?` tactic would apply `symm` to every hypothesis in the local context,
leading to these new hypotheses being included in the term even if they weren't used.
They also created unelaboratable terms such as `?_ (id (r.symm h₂))`.
-/
set_option linter.unusedVariables false
-- set up a binary relation
axiom r : Nat → Nat → Prop
-- that is symmetric
axiom r.symm {a b : Nat} : r a b → r b a
-- and has some other property
axiom r.trans {a b c : Nat} : r a b → r b c → r a c
/--
info: Try this: refine r.symm ?_
---
info: found a partial proof, but the corresponding tactic failed:
(expose_names; refine r.trans ?_ ?_)
It may be possible to correct this proof by adding type annotations, explicitly specifying implicit arguments, or eliminating unnecessary function abstractions.
---
warning: declaration uses 'sorry'
-/
#guard_msgs (ordering := sorted) in
example (a b c : Nat) (h₁ : r b a) (h₂ : r b c) : r c a := by
apply?
-- now attach the `symm` attribute to `r.symm`
attribute [symm] r.symm
/-- info: Try this: exact r.trans (id (r.symm h₂)) h₁ -/
#guard_msgs in
example (a b c : Nat) (h₁ : r b a) (h₂ : r b c) : r c a := by
apply?