I remember there are some functions that manipulates on theorems, say, give an iff thm, it turns A \equiv B into A ==>B or B ==>A. And there is also a function, maybe called conjunction1 conjunction2 or something like that, that takes a A /\ B into A and B.
I like them, but forgot their names, are they documented somewhere?
iffD1 and iffD2
find_theorems "?A = ?B ⟹ ?A ⟹ ?B"
Mathias Fleury said:
iffD1 and iffD2
Thanks! Is iffD1[OF sth] the only thing to do here? I saw somewhere it is possible to write sth[... a function] to take one direction of the sth.
Oh I found it in my old files.
sth[unfolded sth_def, THEN conjunct2,THEN conjunct2,THEN conjunct2,
THEN conjunct2]
And I can also do [THEN iffD1].
Note that these things like OF, of, THEN, symmetric etc. are called attributes. In this form they typically transform one or more theorems in some way.
Manuel Eberl said:
Note that these things like
OF,of,THEN,symmetricetc. are called attributes. In this form they typically transform one or more theorems in some way.
Thank you for the terminology! I asked an expert to look up these things, and the conclusion is that this is documented in
https://isabelle.in.tum.de/dist/Isabelle2024/doc/isar-ref.pdf
on page 323. There are very little of them and is not such flexible. I am then taught that unlike in HOL4, Isabelle intends to let the user write things out, and the community does not appreciate that style. (That is a bit sad for me, but I will live with it.)
Btw, is there a way to use, e.g. THEN, to split a rule into multiple conclusions?
lemma conj3: assumes "A ∧ B ∧ C" shows "A" "B" "C" sorry
lemma a: "(0::nat) < 3 ∧ (0::nat) < 6 ∧ (0::nat) < 9" sorry
thm a[THEN conj3] (* Error: Expected singleton fact "conj3" (length 3) *)
How about conj3[OF a]?
Oops :laughter_tears: Yep that's exactly what I wanted
Nice! That is helpful as well!
Last updated: Nov 13 2025 at 04:27 UTC