This PR adds support for interactivity to the combined "try this" messages that were introduced in #9966. In doing so, it moves the link to apply a suggestion to a separate `[apply]` button in front of the suggestion. Hints with diffs remain unchanged, as they did not previously support interacting with terms in the diff, either. <img width="379" height="256" alt="Suggestion with interactive message" src="https://github.com/user-attachments/assets/7838ebf6-0613-46e7-bc88-468a05acbf51" />
34 lines
1 KiB
Text
34 lines
1 KiB
Text
def Set := Nat → Prop
|
|
|
|
namespace Set
|
|
|
|
def singleton (a : Nat) : Set := fun b ↦ b = a
|
|
|
|
def compl (s : Set) : Set := fun x ↦ ¬ s x
|
|
|
|
@[simp]
|
|
theorem compl_iff (s : Set) (x : Nat) : s.compl x ↔ ¬ s x := Iff.rfl
|
|
|
|
@[simp]
|
|
theorem singleton_iff {a b : Nat} : singleton b a ↔ a = b := Iff.rfl
|
|
|
|
open Classical
|
|
|
|
noncomputable def indicator (s : Set) (x : Nat) : Nat := if s x then 1 else 0
|
|
|
|
@[simp] -- remove `simp` attribute --> works (and the trace changes)
|
|
theorem indicator_of {s : Set} {a : Nat} (h : s a) : indicator s a = 1 := if_pos h
|
|
|
|
@[simp]
|
|
theorem indicator_of_not {s : Set} {a : Nat} (h : ¬ s a) : indicator s a = 0 := if_neg h
|
|
|
|
/--
|
|
info: Try this:
|
|
[apply] simp only [compl_iff, singleton_iff, not_true_eq_false, not_false_eq_true, indicator_of_not]
|
|
-/
|
|
#guard_msgs in
|
|
theorem test : indicator (compl <| singleton 0) 0 = 0 := by
|
|
simp? -- should not leave out `singleton_iff`
|
|
|
|
theorem test' : indicator (compl <| singleton 0) 0 = 0 := by
|
|
simp only [compl_iff, singleton_iff, not_true_eq_false, not_false_eq_true, indicator_of_not]
|