Here's a detailed step-by-step version of user21820's proof, as best I could render it. My numbering scheme is probably inconsistent in places, but that makes no real difference. I believe that this proof is incomplete, as noted in the "reasons" column below.
Let me start by stating Hartshorne's axioms.
Note that we have a set $X$ of points, a collection of subsets called lines, and another collection of subsets called planes. A statement like ``$Q$ lies on $l$" means that $Q$ is in the subset $l$.
S1. Two distinct points $P$ and $Q$ lie on one and only one line $l$.
S2. Three non-collinear points $P,Q,R$ lie on a unique plane.
S3. A line $l$ meets a plane $S$ in at least one point.
S4. Two planes $S$ and $T$ have at least a line in common
S5. There exist four non-coplanar points, no three of which are collinear.
S6. Every line $l$ has at least three points.
I've added names in S3 and S6, so that I can write ``S6[of $m$]" as shorthand for the statement "the line $m$ has at least three points," for instance.
Following convention, I'm denoting the unique line through distinct points $P$ and $Q$ by $PQ$, and assuming the usual definitions of collinearity, coplanarity, etc.
We also have ``Fargle's Lemma":
Lemma F: If $S$ and $T$ are distinct planes, then there is a line $k$ such that $k = S \cap T$.
I've marked 3.2.3, 3.2.6 as not-yet-justified, and 3.2.8.1.2 as something I couldn't easily piece together, although I suspect it's fine (modulo 3.2.3 and 3.2.6).
To prove: If (i) $S$ is a plane, (i) $P, Q \in X$, (iii) $P \ne Q$, (iv) $P, Q \in S$ then the line $PQ \subset S$.
\begin{array}{l|l|l}
1 & \text{There are four noncoplanar
points } K,L,M,N & \text{ S4 }\\
2 & \text{There is a point} A \in \{K, L, M, N\} \text{ with } A \notin S& \text{By contradiction} \\
2.1 & \text{Suppose for contradiction that} \{K, L, M, N\} \subset S & \text{Contradiction hypothesis} \\
2.2 & \text{Then } K, L, M, N \text{ are coplanar}& \text{Definition of coplanar}\\
2.3 & \text{This contradicts S1.} & \text{End of contradiction} \\
3 & \text{Cases: }A \notin PQ\text{ or } A \in PQ& \text{Excluded middle.} \\
3.1 & \text{case 1: we assume }A \notin PQ & \text{Statement 3} \\
3.1.1& \text{Let }T\text{ be a plane containing }P,Q \text{ and }A & \text{3.1, S2[of $A$ $P$ $Q$]} \\
3.1.2 & \text{$ S \ne T$ } & \text{Because $A \in T$ (3.1.1) and $A \notin S$ (2) }\\
3.1.3 & \text{$k = S \cap T$ is a line }& \text{Lemma F[of S T], 3.1.2 }\\
3.1.4 & \text{$P, Q \in k$ }& \text{Assumption (iv), 3.1.1 }\\
3.1.5 & \text{$P, Q \in PQ$. }& \text{Axiom S1, defn of PQ.}\\
3.1.6 & \text{$PQ = k$ }& \text{Axiom S1, uniqueness part.}\\
3.1.7 & \text{qed }& \text{concludes proof for case 1. (3.1)}\\
3.2 & \text{case 2: we assume $A \in PQ$ }& \text{statement 3 }\\
3.2.1 & \text{Let $E$ be a point with $E \notin PA$ }& \text{by contradiction }\\
3.2.1.1 & \text{Suppose, for contradiction, that EVERY point} &\\
& \text{is on $PA$, i.e., $X \subset PA$. }& \text{contradiction hypothesis}\\
3.2.1.2 & \text{There are four noncoplanar points } & \\
& \text{$K,L,M,N$, no three collinear. }& \text{Axiom S4 }\\
3.2.1.3 & \text{$K,L,M$ are noncollinear }& \text{3.2.1.2 }\\
3.2.1.4 & \text{$K,L, M$ are collinear }& \text{because all lie in $PA$, by 3.2.2 }\\
3.2.1.5 & \text{Contradiction }& \text{3.2.4, 3.2.5, finishes 3.2.1.1 }\\
3.2.2 & \text{There is a plane $U$ containing
$P, A, $ and $E$.} & \text{noncollinear by 3.2.1; apply S2[of $P$ $A$ $E$].} \\
3.2.3 & \text{$PA = S \cap U$ }& \mathbf{Unjustified. } \text{ Apply LemmaF[of $S$ $U$]. Still need to show $S \ne U$.} \\
3.2.4 & \text{$PA = QA$ }& \text{3.2, Axiom S1 }\\
3.2.5 & \text{There is a plane $V$ containing
$Q, A, $ and $E$.}& \text{3.2.4, 3.2.1, which says they're noncollinear; apply S2[of $Q$ $A$ $E$]. }\\
3.2.6 & \text{$PA = S \cap V$ }& \mathbf{Unjustified. } \text{ Apply Lemma F[of S V]. Need to show $S \ne V$.}\\
3.2.7 & \text{$PA \subset U \cap V$ }& \text{3.2.3, 3.2.6} \\
3.2.8 & \text{cases: $U \ne V$ or $U = V$ }& \text{Excluded middle. } \\
3.2.8.1 & \text{case i: $U \ne V$ }& 3.2.8 \\
3.2.8.1.1 & \text{$PA = U\cap V$ }& \text{Lemma F, 3.2.8.1, 3.2.7 }\\
3.2.8.1.2 & \text{$AE = U\cap V$ }& \mathbf{???} \text{ ``By the same reasoning as above" is too vague for me to work out here.} \\
3.2.8.1.3 & \text{$PA = AE$, hence $P,A,E$ are collinear }& \text{3.2.8.1.1,
3.2.8.1.2, defn of collinear }\\
3.2.8.1.4 & \text{qed}& \text{3.2.8.1.3, closes case i of 3.2.8 }\\
3.2.8.2 & \text{case ii: $U = V$ }& \text{3.2.8} \\
3.2.8.2.1 & \text{The plane $U$ contains $P,Q,A$ }& \text{3.2.3, 3.2.6} \\
3.2.2 & \text{$U \ne S$ }& \text{Because $A \in U$ (3.2.8.2.1) but $A \notin S$ (2)} \\
3.2.3 & \text{$U \cap S$ is a single line $k$ }& \text{3.2.2, Lemma F} \\
3.2.4 & \text{$P,Q \in k$ }& \text{3.2.2,3.2.5, 3.2.8.1, assumption iv.}\\
3.2.5 & \text{$PQ = k$ }& \text{3.2.4, assumption (iii), Axiom S1}\\
3.2.6 & \text{qed} & \text{closes case i of 3.2.8, concludes proof for case 2 (3.1)}\\
\end{array}
By the way, just in case there's some doubt about whether I've got the logic right or am assuming something, here's an Isabelle/HOL representation of the axioms of a projective 3-space and the purported proof above; I've had to use the justification "sorry" for step 3.2.3 unfortunately. I recognize that most people don't know Isabelle, but it seemed like a good exercise just to be sure that all the steps were correct. I'm somewhat embarrassed by the proof of Fargle's lemma --- it feels as if it should be only a couple of lines --- but so be it.
At the end, I've stopped bothering with the proof as written, because it's an easy jump from step 3.2.3 to the conclusion, if only we could find a proof for 3.2.3. (Isabelle's sledgehammer tool gives up, although it has no trouble with any of the earlier steps.)
theory MSE4550757
imports Main
begin
locale P3 =
fixes Points ::"'p set" and Lines :: "'p set set" and Planes:: "'p set set" and join::"'p ⇒ 'p ⇒ ('p set)"
assumes
S0: "Points = (UNIV::'p set)" and
S1a: "⟦P ∈ Points; Q ∈ Points⟧ ⟹ (join P Q) ∈ Lines ∧ P ∈ (join P Q) ∧ Q ∈ (join P Q)" and
S1b: "⟦P ∈ Points; Q ∈ Points; P ≠ Q; k ∈ Lines; P ∈ k; Q ∈ k⟧ ⟹ k = (join P Q) " and
S2: "⟦P ∈ Points; Q ∈ Points; R ∈ Points; distinct[P,Q,R]; R ∉ join P Q⟧ ⟹
(∃! H ∈ Planes . (P ∈ H ∧ Q ∈ H ∧ R ∈ H))" and
S3: "⟦l ∈ Lines; S ∈ Planes⟧ ⟹ (∃ P ∈ Points . P ∈ (l ∩ S))" and
S4: "⟦T ∈ Planes; S ∈ Planes⟧ ⟹ (∃ k ∈ Lines . k ⊆ (T ∩ S))" and
S5: "∃ A B C D . (A ∈ Points ∧ B ∈ Points ∧ C ∈ Points ∧ D ∈ Points ∧
(¬ (∃ H ∈ Planes . A ∈ H ∧ B ∈ H ∧ C ∈ H ∧ D ∈ H)) ∧
(¬ (∃ k ∈ Lines . A ∈ k ∧ B ∈ k ∧ C ∈ k)) ∧
(¬ (∃ k ∈ Lines . A ∈ k ∧ B ∈ k ∧ D ∈ k)) ∧
(¬ (∃ k ∈ Lines . A ∈ k ∧ C ∈ k ∧ D ∈ k)) ∧
(¬ (∃ k ∈ Lines . B ∈ k ∧ C ∈ k ∧ D ∈ k)))" and
S6: "k ∈ Lines ⟹ ∃ P Q R . P ∈ Points ∧ Q ∈ Points ∧ R ∈ Points ∧ distinct[P,Q,R] ∧ P ∈ k ∧ Q ∈ k ∧ R ∈ k"
begin
definition collinear :: "'p ⇒ 'p ⇒ 'p ⇒ bool"
where "collinear A B C = (∃ l. l ∈ Lines ∧ A ∈ l ∧ B ∈ l ∧ C ∈ l)"
definition coplanar :: "'p ⇒ 'p ⇒ 'p ⇒ 'p ⇒ bool"
where "coplanar A B C D = (∃ H. H ∈ Planes ∧ A ∈ H ∧ B ∈ H ∧ C ∈ H ∧ D ∈ H)"
lemma S5alt:
shows "∃ A B C D . (A ∈ Points ∧ B ∈ Points ∧ C ∈ Points ∧ D ∈ Points ∧
(¬ coplanar A B C D) ∧
(¬ collinear A B C) ∧
(¬ collinear A B D) ∧
(¬ collinear A C D) ∧
(¬ collinear B C D))" using S5 coplanar_def collinear_def by metis
lemma collinear_join [iff] :
assumes "P ≠ Q"
shows "collinear P Q X ⟷ X ∈ join P Q"
using S0 S1a S1b assms collinear_def by auto
lemma distinct3_alt:
"distinct[A,B,C] ⟷ (A ≠ B ∧ A ≠ C ∧ B ≠ C)"
by auto
lemma fargle:
fixes S T
assumes "S ≠ T"
assumes "S ∈ Planes ∧ T ∈ Planes"
shows "∃ k . (k ∈ Lines ∧ k = (S ∩ T))"
proof -
obtain k where kfacts: "(k ∈ Lines ∧ k ⊆ (S ∩ T))" using assms S4 by blast
obtain P Q where pqfacts: "P∈ Points ∧ Q ∈ Points ∧ P ∈ k ∧ Q ∈ k ∧ P ≠ Q" using kfacts S6[of k] by auto
have u: "P ∈ S ∧ Q ∈ S ∧ P ∈T ∧ Q∈ T" using kfacts pqfacts by auto
fix X
have a0: "X ∈ S∩T ⟹ collinear P Q X" for X
proof (rule ccontr) (* classical contradiction *)
assume ch: "¬collinear P Q X"
assume minor: "X ∈ S ∩ T"
have d: "distinct[P,Q,X]" using pqfacts ch collinear_def kfacts by force
have b: "∃! H . H ∈ Planes ∧ P ∈ H ∧ Q ∈ H ∧ X ∈ H" using S2[of P Q X] d ch distinct3_alt[of P Q X]
by (simp add: S0 S1a S1b collinear_def)
then have "S = T" using assms u ch b minor by auto
then show False using assms by auto
qed
have a1: "X ∈ S∩T ⟹ X ∈ join P Q" using a0 pqfacts by blast
then have a2: "S ∩ T = join P Q" using S1b a0 kfacts pqfacts by force
then show ?thesis by (simp add: S1a pqfacts)
qed
theorem main:
fixes S P Q
assumes "S ∈ Planes ∧ P ∈ Points ∧ Q ∈ Points"
assumes "P ≠ Q"
assumes "P ∈ S ∧ Q ∈ S"
shows "join P Q ⊆ S"
proof -
obtain A where a2: "A ∈ Points ∧ A ∉ S" using assms S4 S5 by auto (* 2 )
consider (outside) "A ∉ join P Q" | (inside) "A ∈ join P Q" by blast ( 3 )
then show ?thesis
proof (cases)
case outside ( 3.1 )
obtain T where tfacts: "T ∈ Planes ∧ A ∈ T ∧ P ∈ T ∧ Q ∈ T"
by (metis S2 a2 assms(1,2,3) distinct3_alt outside) ( 3.1.1 )
have "S ≠ T" using tfacts a2 by blast ( 3.1.2 )
then obtain k where a313: "k ∈ Lines ∧ k = S ∩ T" using fargle[of S T]
using assms(1) tfacts by blast ( 3.1.3 )
have "P ∈ k ∧ Q ∈ k" by (simp add: a313 assms(3) tfacts)
then have a316: "join P Q = k" using S0 S1b a313 assms(2) by blast ( 3.1.6 )
then show ?thesis by (simp add: a313) ( 3.1.7 )
next
case inside ( 3.2 )
have "A ∈ join P Q" using inside by blast
obtain E where efacts: "E ∈ Points ∧ E ∉ join P A" by (smt (verit) S1a S5 a2 assms(1)) ( 3.2.1 -- 3.2.1.5 )
then obtain U where ufacts: "U ∈ Planes ∧ P ∈ U ∧ E ∈ U ∧ A ∈ U"
by (metis S1a S2 a2 assms(1,3) distinct3_alt) ( 3.2.2 )
then have pa1: "join P A = S ∩ U" sorry ( 3.2.3 )
show ?thesis using pa1 S0 S1a a2 by blast ( cut to the chase and conclude join P Q ⊆ S *)
qed
qed