Hi. I'd like to modify the claset so that safe and clarsimp do _not_ do the following
lemma
‹¬(A ⊆ B) ⟹ C›
apply safe_step
(* proof (prove)
goal (1 subgoal):
1. ⋀x. ¬ C ⟹ x ∈ A ⟹ x ∈ B *)
However, I'm struggling with identifying the lemma/code that triggers this transformation. Can someone help?
It applies something like subsetI.
It seems to apply contraposition and then subsetI. It is not clear why it applies contraposition though...
It would be enough to know how to disable it :-)
To remove a rule (intro/dest/elim...) from the claset you can use the rule del attribute, for example with declare subsetI[rule del]. See also section 9.4.2 of the isar-ref.
After that the safe_step does nothing on your example goal.
Thank you. I should have clarified that removing subsetI goes too far in my case -- I only want to avoid it in conjunction with contraposition.
I tried disabling all contraposition theorems that I found using find_theorems but to no avail. Maybe contraposition is baked into safe_step?
Last updated: Nov 07 2025 at 16:23 UTC