Zulip Chat Archive
Stream: new members
Topic: Tactic strength pairs: correctness and completeness
Isak Colboubrani (Apr 08 2025 at 17:35):
Are these two claims accurate? Please help me refute them with concrete counterexamples, or let me know if you believe they are unfalsifiable.
Claim 1. In each of the following pairs, the first tactic is strictly stronger than the second. That is, any goal closed by the second tactic is also closed by the first (and not vice versa; additionally, to exclude trivial cases, both tactics in each pair must be capable of closing some goals, and both must be zero-argument).
(aesop, congr)
(aesop, simp_all)
(module, abel)
(nlinarith, linarith)
(tauto, itauto)
(trivial, assumption)
(trivial, contradition)
(trivial, decide)
(trivial, rfl)
Claim 2. The list is complete, meaning that no other tactic pairs exhibit this property.
Aaron Liu (Apr 08 2025 at 18:04):
Claim 1 is false, because you can poison tactics.
Aaron Liu (Apr 08 2025 at 18:04):
Here's an example where I poison trivial
:
Aaron Liu (Apr 08 2025 at 18:09):
Claim 2 is probably false, I found (solve_by_elim, assumption)
Aaron Liu (Apr 08 2025 at 18:12):
There's also (norm_num, norm_num1)
and other similar pairs.
Aaron Liu (Apr 08 2025 at 18:14):
Also (sorry, *)
Isak Colboubrani (Apr 08 2025 at 18:18):
Hehe, I was considering adding a restriction "excluding examples resulting from Aaron's clever 'recursion depth' poisoning trick," but you beat me to it! :) Consider that restriction hereby added.
Isak Colboubrani (Apr 08 2025 at 18:37):
Another restriction to make it more interesting: "strength" achieved from using the sorryAx
axiom is not counted :)
Isak Colboubrani (Apr 08 2025 at 18:43):
@Aaron Liu (solve_by_elim, assumption)
 is a nice addition to the list. Nice find—thank you! What pairs, or class of pairs, are you referring to that are similar to (norm_num, norm_num1)
?
Aaron Liu (Apr 08 2025 at 19:09):
Isak Colboubrani said:
What pairs, or class of pairs, are you referring to that are similar to
(norm_num, norm_num1)
?
(abel, abel1)
(ac_nf, ac_nf0)
(rfl, eq_refl)
(norm_cast, norm_cast0)
(norm_num, norm_num1)
(ring, ring1)
(ring!, ring1!)
etc.
Aaron Liu (Apr 08 2025 at 19:10):
Now that I have these written down, I think some of these pairs don't close strictly more goals.
Isak Colboubrani (Apr 08 2025 at 19:17):
@Aaron Liu Thanks! If we omit the ones you're uncertain about, what remains?
Aaron Liu (Apr 08 2025 at 19:31):
Ok, I just checked and all of these pairs are correct.
Isak Colboubrani (Apr 09 2025 at 10:25):
Below are the updated claims, revised in light of yesterday's counterexample findings (thanks @Aaron Liu -- you're skilled!).
Are these two claims accurate? Please help me refute them with concrete counterexamples, or let me know if you believe they are unfalsifiable.
Claim 1. In each of the following pairs, the first tactic is strictly stronger than the second. That is, any goal closed by the second tactic is also closed by the first (and not vice versa):
(abel, abel1)
(ac_nf, ac_nf0)
(aesop, congr)
(aesop, simp_all)
(module, abel)
(nlinarith, linarith)
(norm_cast, norm_cast0)
(norm_num, norm_num1)
(rfl, eq_refl)
(ring, ring1)
(ring!, ring1!)
(solve_by_elim, assumption)
(tauto, itauto)
(trivial, assumption)
(trivial, contradition)
(trivial, decide)
(trivial, rfl)
(Restrictions to exclude the most trivial cases: 1.) both tactics in each pair must be capable of closing some goals, 2.) both tactics must be zero-argument, 3.) we exclude examples resulting from Aaron's clever "recursion depth" poisoning trick, 4.) we also forbid the use of the sorryAx
axiom.)
Claim 2. The list is complete, meaning that no other tactic pairs exhibit this property.
Aaron Liu (Apr 09 2025 at 10:59):
I will add (aesop, split)
and (abel!, abel1!)
to that.
Robin Arnez (Apr 09 2025 at 17:46):
add (rfl, apply_rfl)
Robin Arnez (Apr 09 2025 at 17:56):
also (norm_num, simp)
ideally but non-confluence might get in the way
Aaron Liu (Apr 09 2025 at 18:15):
Robin Arnez said:
also
(norm_num, simp)
ideally but non-confluence might get in the way
Is norm_num
stronger than simp
!?
Kevin Buzzard (Apr 09 2025 at 18:15):
norm_num
is norm_num1
+ simp
Robin Arnez (Apr 09 2025 at 18:20):
well, to be exact, norm_num
is simp
using norm num extensions which makes this possible which norm_num1; simp
can't do:
example : (1 : ℚ) + [2][0] = 3 := by
norm_num
Last updated: May 02 2025 at 03:31 UTC