I'm trying to prove something using Isar; so far, I've gotten to a goal that looks like this:
(∀P Q. P ≠ Q ⟶ (∃!l. plmeets P l ∧ plmeets Q l)) ∧
(∀P l. ¬ plmeets P l ⟶ (∃!m. affine_plane_data.parallel plmeets l m ∧ plmeets P m)) ∧
(∃P Q. P ≠ Q ∧ (∃R. P ≠ R ∧ Q ≠ R ∧ ¬ affine_plane_data.collinear plmeets P Q R))
(here plmeets
is a function I've defined, where plmeets P l
is shorthand for "the point P lies on the line l" in an affine plane, but I don't think that's important to my question.)
This goal is a conjunction of three things. I've actually already proved lemmas that seem to me to be very close to each of these things. For instance, I have
lemma four_points_a1: "P ≠ Q ⟹ ∃! l . plmeets P l ∧ plmeets Q l"
which produces the output
theorem four_points_a1: ?P ≠ ?Q ⟹ ∃!l. plmeets ?P l ∧ plmeets ?Q l
which you can see is almost exactly the first of the three conjoined items. (I admit that my other lemmas aren't quite so exactly matched to the other two items, but I'll work on that).
I'd like to say "because of lemma four_points_a1, all we have left to prove is item2 ∧ item3
" and I'm pretty sure there's a way to do this. But looking at the "Programming and Proving" book doesn't suggest anything to me. In Isabelle, rather than Isar, I suppose I'd apply conjI
twice to split the one goal into three, and then resolve the first goal.
But I cannot see how to do this in Isar.