Library GeoCoq.Tarski_dev.Coplanar_trans

Require Export GeoCoq.Tarski_dev.Coplanar_perm.

Section Coplanar_trans.

Context `{TnEQD:Tarski_neutral_dimensionless_with_decidable_point_equality}.

Lemma coplanar_trans_1_aux_1_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col P Q X2
  Bet R A X1
  Bet R B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol3 HCol2 HCol4.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2.

  {
  assert (H : TS A R B Q).
    {
    apply l9_8_2 with X2.

      {
      assert (R X2) by (intro; assert_cols; apply HABR; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; Col.
       X1; assert_cols; Col; Between.
      }

      {
      assert (H1 : A R) by (assert_diffs; auto).
      assert (H2 : Col A R R) by Col.
      assert (H3 : Col X2 B R) by (assert_cols; Col).
      assert (H := l9_19 A R X2 B R H1 H2 H3); rewrite H.
      assert (R X2) by (intro; assert_cols; apply HABR; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; try auto.
      split; try (intro; subst; apply HABR; Col).
      Between.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (H : TS B R A Q).
      {
      apply l9_8_2 with X1.

        {
        assert (R X1) by (intro; assert_cols; apply HABR; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; Col.
         X2; assert_cols; Col; Between.
        }

        {
        assert (H1 : B R) by (assert_diffs; auto).
        assert (H2 : Col B R R) by Col.
        assert (H3 : Col X1 A R) by (assert_cols; Col).
        assert (H := l9_19 B R X1 A R H1 H2 H3); rewrite H.
        assert (R X1) by (intro; assert_cols; apply HABR; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try auto.
        split; try (intro; subst; apply HABR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (HTS1 : TS Q R X1 X2).
      {
      assert (R X1) by (intro; subst; apply HNC; ColR).
      split; try (intro; assert_cols; apply HAQR; ColR).
      assert (R X2) by (intro; subst; apply HNC; ColR).
      split; try (intro; assert_cols; apply HBQR; ColR).
       Q; Col; Between.
      }
    assert (HTS2 : TS Q R A X2).
      {
      apply l9_8_2 with X1; try assumption.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by Col.
      assert (H3 : Col X1 A R) by (assert_cols; Col).
      assert (H := l9_19 Q R X1 A R H1 H2 H3); rewrite H.
      assert (R X1) by (intro; subst; apply HNC; Col).
      split; try (intro; assert_cols; apply HAQR; ColR).
      split; try auto.
      split; try (intro; subst; apply HABR; Col).
      Between.
      }
    assert (H : TS Q R A B).
      {
      apply l9_2.
      apply l9_8_2 with X2; try (apply l9_2; assumption).
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by Col.
      assert (H3 : Col X2 B R) by (assert_cols; Col).
      assert (H := l9_19 Q R X2 B R H1 H2 H3); rewrite H.
      assert (R X2) by (intro; subst; apply HNC; Col).
      split; try (intro; assert_cols; apply HBQR; ColR).
      split; try auto.
      split; try (intro; subst; apply HABR; Col).
      Between.
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_1_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col P Q X2
  Bet R A X1
  Bet B X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol3 HCol2 HCol4.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2.

  {
  assert (H : TS A R B Q).
    {
    apply l9_8_2 with X2.

      {
      assert (R X2) by (intro; assert_cols; apply HNC; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; Col.
       X1; assert_cols; Col; Between.
      }

      {
      assert (H1 : A R) by (assert_diffs; auto).
      assert (H2 : Col A R R) by Col.
      assert (H3 : Col X2 B R) by (assert_cols; Col).
      assert (H := l9_19 A R X2 B R H1 H2 H3); rewrite H.
      assert (R X2) by (intro; assert_cols; apply HNC; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; try auto.
      split; try (intro; subst; apply HABR; Col).
      Between.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (H : TS B R A Q).
      {
      apply l9_8_2 with X1.

        {
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; Col.
         X2; assert_cols; Col; Between.
        }

        {
        assert (H1 : B R) by (assert_diffs; auto).
        assert (H2 : Col B R R) by Col.
        assert (H3 : Col X1 A R) by (assert_cols; Col).
        assert (H := l9_19 B R X1 A R H1 H2 H3); rewrite H.
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try auto.
        split; try (intro; subst; apply HABR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS R Q A B).
      {
      apply l9_31.

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A X1) by (assert_cols; Col).
          assert (H3 : Col Q X2 X1) by (assert_cols; Col).
          assert (H := l9_19 R A Q X2 X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; subst; apply HAQR; Col).
          assert (R X1) by (intro; subst; treat_equalities; apply H1; reflexivity).
          split; try (intro; subst; apply HAQR; ColR).
          Between.
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A R) by Col.
          assert (H3 : Col X2 B R) by (assert_cols; Col).
          assert (H := l9_19 R A X2 B R H1 H2 H3); rewrite H.
          assert (R X2) by (intro; assert_cols; apply HNC; ColR).
          split; try (intro; assert_cols; apply HABR; ColR).
          split; try auto.
          split; try (intro; subst; apply HABR; Col).
          Between.
          }
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B X2) by (assert_cols; Col).
          assert (H3 : Col Q X1 X2) by (assert_cols; Col).
          assert (H := l9_19 R B Q X1 X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; subst; apply HBQR; Col).
          split; try (intro; treat_equalities; assert_cols; apply HAQR; Col).
          Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by Col.
          assert (H3 : Col X1 A R) by (assert_cols; Col).
          assert (H := l9_19 R B X1 A R H1 H2 H3); rewrite H.
          assert (R X1) by (intro; assert_cols; apply HNC; ColR).
          split; try (intro; assert_cols; apply HABR; ColR).
          split; try auto.
          split; try (intro; subst; apply HABR; Col).
          Between.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_1_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col P Q X2
  Bet R A X1
  Bet X2 R B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol3 HCol2 HCol4.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2.

  {
  assert (H : TS R Q A B).
    {
    apply l9_31.

      {
       X2; split.

        {
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; Col.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
         X1; assert_cols; Col; Between.
        }

        {
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; Col.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
         R; assert_cols; Col; Between.
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B X2) by (assert_cols; Col).
        assert (H3 : Col Q X1 X2) by (assert_cols; Col).
        assert (H := l9_19 R B Q X1 X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; subst; apply HBQR; Col).
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; treat_equalities; assert_cols; apply HABR; ColR).
        Between.
        }

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by Col.
        assert (H3 : Col X1 A R) by (assert_cols; Col).
        assert (H := l9_19 R B X1 A R H1 H2 H3); rewrite H.
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try auto.
        split; try (intro; subst; apply HABR; Col).
        Between.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; assert_cols; apply HABR; ColR).
        split; Col.
         R; assert_cols; Col; Between.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R X1) by (assert_cols; Col).
        assert (H3 : Col X2 Q X1) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q X1 H1 H2 H3); rewrite H.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        assert (HX1X2 : X1 X2) by (intro; assert_cols; apply HABR; ColR).
        split; auto.
        split; try (intro; treat_equalities; apply HX1X2; reflexivity).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; assert_cols; apply HABR; ColR).
        split; Col.
         R; assert_cols; Col; Between.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R X1) by (assert_cols; Col).
        assert (H3 : Col X2 Q X1) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q X1 H1 H2 H3); rewrite H.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        assert (HX1X2 : X1 X2) by (intro; assert_cols; apply HABR; ColR).
        split; auto.
        split; try (intro; subst; apply HAQR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_1_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col P Q X2
  Bet A X1 R
  Bet B X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol3 HCol2 HCol4.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2.

  {
  assert (H : TS A R B Q).
    {
    apply l9_8_2 with X2.

      {
      assert (R X2) by (intro; assert_cols; apply HNC; ColR).
      split; try (intro; assert_cols; assert_cols; apply HABR; ColR).
      split; Col.
       X1; assert_cols; split; Col; Between.
      }

      {
      assert (H1 : A R) by (assert_diffs; auto).
      assert (H2 : Col A R R) by Col.
      assert (H3 : Col X2 B R) by (assert_cols; Col).
      assert (H := l9_19 A R X2 B R H1 H2 H3); rewrite H.
      assert (HRX2 : R X2) by (intro; assert_cols; apply HNC; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      assert (HRX1 : R X1) by (intro; assert_cols; apply HNC; ColR).
      assert (HX1X2 : X1 X2) by (intro; assert_cols; apply HABR; ColR).
      split; auto.
      split; try (intro; treat_equalities; apply HRX2; reflexivity).
      Between.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (H : TS B R A Q).
      {
      apply l9_8_2 with X1.

        {
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; assert_cols; apply HABR; ColR).
        split; Col.
         X2; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : B R) by (assert_diffs; auto).
        assert (H2 : Col B R R) by Col.
        assert (H3 : Col X1 A R) by (assert_cols; Col).
        assert (H := l9_19 B R X1 A R H1 H2 H3); rewrite H.
        assert (HRX1 : R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        assert (HRX2 : R X2) by (intro; assert_cols; apply HNC; ColR).
        assert (HX1X2 : X1 X2) by (intro; assert_cols; apply HABR; ColR).
        split; auto.
        split; try (intro; treat_equalities; apply HRX1; reflexivity).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS R Q A B).
      {
      apply l9_31.

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A X1) by (assert_cols; Col).
          assert (H3 : Col Q X2 X1) by (assert_cols; Col).
          assert (H := l9_19 R A Q X2 X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; subst; apply HAQR; Col).
          assert (R X1) by (intro; assert_cols; apply HNC; ColR).
          split; try (intro; treat_equalities; assert_cols; apply HABR; ColR).
          Between.
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A R) by Col.
          assert (H3 : Col X2 B R) by (assert_cols; Col).
          assert (H := l9_19 R A X2 B R H1 H2 H3); rewrite H.
          assert (R X2) by (intro; assert_cols; apply HNC; ColR).
          split; try (intro; assert_cols; apply HABR; ColR).
          split; try auto.
          split; try (intro; subst; apply HABR; Col).
          Between.
          }
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B X2) by (assert_cols; Col).
          assert (H3 : Col Q X1 X2) by (assert_cols; Col).
          assert (H := l9_19 R B Q X1 X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; subst; apply HBQR; Col).
          assert (R X2) by (intro; assert_cols; apply HNC; ColR).
          split; try (intro; treat_equalities; assert_cols; apply HABR; ColR).
          Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by Col.
          assert (H3 : Col X1 A R) by (assert_cols; Col).
          assert (H := l9_19 R B X1 A R H1 H2 H3); rewrite H.
          assert (R X1) by (intro; assert_cols; apply HNC; ColR).
          split; try (intro; assert_cols; apply HABR; ColR).
          split; try auto.
          split; try (intro; subst; apply HABR; Col).
          Between.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_1_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col P Q X2
  Bet A X1 R
  Bet X2 R B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol3 HCol2 HCol4.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2.

  {
  assert (H : TS R Q A B).
    {
    apply l9_31.

      {
       X2; split.

        {
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; Col.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
         X1; assert_cols; Col; Between.
        }

        {
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; subst; apply HABR; Col).
        split; Col.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        try (intro; assert_cols; apply HABR; ColR).
         R; assert_cols; Col; Between.
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B X2) by (assert_cols; Col).
        assert (H3 : Col Q X1 X2) by (assert_cols; Col).
        assert (H := l9_19 R B Q X1 X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; subst; apply HBQR; Col).
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; treat_equalities; assert_cols; apply HABR; ColR).
        Between.
        }

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by Col.
        assert (H3 : Col X1 A R) by (assert_cols; Col).
        assert (H := l9_19 R B X1 A R H1 H2 H3); rewrite H.
        assert (R X1) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try auto.
        split; try (intro; subst; apply HABR; Col).
        Between.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; assert_cols; apply HABR; ColR).
        split; Col.
         R; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R X1) by Col.
        assert (H3 : Col X2 Q X1) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q X1 H1 H2 H3); rewrite H.
        assert (HRX2 : R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        assert (HRX1 : R X1) by (intro; assert_cols; apply HNC; ColR).
        assert (HX1X2 : X1 X2) by (intro; assert_cols; apply HABR; ColR).
        split; auto.
        split; try (intro; subst; assert_cols; apply HAQR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; assert_cols; apply HABR; ColR).
        split; Col.
         R; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R X1) by Col.
        assert (H3 : Col X2 Q X1) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q X1 H1 H2 H3); rewrite H.
        assert (HRX2 : R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        assert (HRX1 : R X1) by (intro; assert_cols; apply HNC; ColR).
        assert (HX1X2 : X1 X2) by (intro; assert_cols; apply HABR; ColR).
        split; auto.
        split; try (intro; subst; assert_cols; apply HAQR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_1_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col P Q X2
  Bet X1 R A
  Bet X2 R B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol3 HCol2 HCol4.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2.

  {
  assert (H : TS B R Q A).
    {
    apply l9_8_2 with X1.

      {
      assert (R X1) by (intro; assert_cols; apply HNC; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; Col.
       R; assert_cols; split; Col; Between.
      }

      {
      assert (H1 : B R) by (assert_diffs; auto).
      assert (H2 : Col B R X2) by (assert_cols; Col).
      assert (H3 : Col X1 Q X2) by (assert_cols; Col).
      assert (H := l9_19 B R X1 Q X2 H1 H2 H3); rewrite H.
      assert (R X1) by (intro; assert_cols; apply HNC; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; try (intro; assert_cols; apply HABR; ColR).
      split; try (intro; subst; apply HBQR; Col).
      Between.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; Col.
         R; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R X1) by (assert_cols; Col).
        assert (H3 : Col X2 Q X1) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q X1 H1 H2 H3); rewrite H.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try (intro; subst; apply HAQR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; Col.
         R; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R X1) by (assert_cols; Col).
        assert (H3 : Col X2 Q X1) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q X1 H1 H2 H3); rewrite H.
        assert (R X2) by (intro; assert_cols; apply HNC; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try (intro; assert_cols; apply HABR; ColR).
        split; try (intro; subst; apply HAQR; Col).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col R A X1
  Col P Q X2
  Col R B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim HCol2; clear HCol2; intro HCol2; elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_1_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_1_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_1_1_3 with P X1 X2; assumption.
    }
  }

  {
  elim HCol2; clear HCol2; intro HCol2.

    {
    assert (H : Coplanar Q R B A) by (apply coplanar_trans_1_aux_1_1_2 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (H : Coplanar Q R B A) by (apply coplanar_trans_1_aux_1_1_3 with P X2 X1; Col; Between); Cop.
    }
  }

  {
  elim HCol2; clear HCol2; intro HCol2; elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_1_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_1_2_3 with P X1 X2; assumption.
    }

    {
    assert (H : Coplanar Q R B A) by (apply coplanar_trans_1_aux_1_2_3 with P X2 X1; Col; Between); Cop.
    }

    {
    apply coplanar_trans_1_aux_1_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_1_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet P B X2
  Bet Q X1 X2
  Bet R X1 X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (H : X2 X1) by auto; assert (HQRX1 := l5_2 X2 X1 Q R H HQX1X2 HRX1X2); clear H.
elim HQRX1; clear HQRX1; intro HQRX1.

  {
  apply between_symmetry in HQX1X2.
  assert (H := inner_pasch P Q X2 B X1 HCol3 HQX1X2); destruct H as [U [HBUQ HPUX1]].
  apply between_symmetry in HPUX1.
  assert (H := l5_3 P A U X1 HCol1 HPUX1).
  elim H; clear H; intro HAPU.

    {
    assert (H : TS Q A R B).
      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R X1) by (assert_cols; Col).
          assert (H3 : Col A P X1) by (assert_cols; Col).
          assert (H := l9_19 Q R A P X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try assumption.
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R X2) by (assert_cols; Col).
          assert (H3 : Col P B X2) by (assert_cols; Col).
          assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
          assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; Between.
          }
        }

        {
         X2; split.

          {
          apply l9_8_2 with P.

            {
            assert (Q B) by (assert_diffs; auto).
            assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
            assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
            split; Col.
            split; try (intro; assert_cols; apply HBQR; ColR).
             B; split; Col; eBetween.
            }

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B U) by (assert_cols; Col).
            assert (H3 : Col P A U) by (assert_cols; Col).
            assert (H := l9_19 Q B P A U H1 H2 H3); rewrite H.
            assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
            assert (HBPQ : ¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
            split; Col.
            split; try (intro; treat_equalities; apply HBPQ; Col).
            split; try (intro; subst; apply HABQ; Col).
            Between.
            }
          }

          {
          assert (Q B) by (assert_diffs; auto).
          assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; assert_cols; apply HBQR; ColR).
           Q; split; Col; eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS B Q R A).
      {
      apply l9_8_2 with P.

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
        assert (HBPQ : ¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
        split; Col.
        split; Col.
         U; split; Col; Between.
        }

        {
         X2; split.

          {
          assert (B Q) by (assert_diffs; auto).
          assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; assert_cols; apply HBQR; ColR).
           B; split; Col; eBetween.
          }

          {
          assert (B Q) by (assert_diffs; auto).
          assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; assert_cols; apply HBQR; ColR).
           Q; split; Col; eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  apply between_symmetry in HRX1X2.
  assert (H := inner_pasch P R X2 B X1 HCol3 HRX1X2); destruct H as [U [HBUR HPUX1]].
  apply between_symmetry in HPUX1.
  assert (H := l5_3 P A U X1 HCol1 HPUX1).
  elim H; clear H; intro HAPU.

    {
    assert (H : TS R A Q B).
      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X1) by (assert_cols; Col).
          assert (H3 : Col A P X1) by (assert_cols; Col).
          assert (H := l9_19 R Q A P X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try assumption.
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X2) by (assert_cols; Col).
          assert (H3 : Col P B X2) by (assert_cols; Col).
          assert (H := l9_19 R Q P B X2 H1 H2 H3); rewrite H.
          assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; Between.
          }
        }

        {
         X2; split.

          {
          apply l9_8_2 with P.

            {
            assert (R B) by (assert_diffs; auto).
            assert (HRX2 : R X2) by (intro; treat_equalities; intuition).
            assert (¬ Col B P R) by (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
            split; Col.
            split; try (intro; assert_cols; apply HBQR; ColR).
             B; split; Col; eBetween.
            }

            {
            assert (H1 : R B) by (assert_diffs; auto).
            assert (H2 : Col R B U) by (assert_cols; Col).
            assert (H3 : Col P A U) by (assert_cols; Col).
            assert (H := l9_19 R B P A U H1 H2 H3); rewrite H.
            assert (HRX2 : R X2) by (intro; treat_equalities; intuition).
            assert (HBPR : ¬ Col B P R) by (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
            split; Col.
            split; try (intro; treat_equalities; apply HABP; Col).
            split; try (intro; treat_equalities; apply HABR; Col).
            Between.
            }
          }

          {
          assert (R B) by (assert_diffs; auto).
          assert (HRX2 : R X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P R) by (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; assert_cols; apply HBQR; ColR).
           R; split; Col; eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS B R Q A).
      {
      apply l9_8_2 with P.

        {
        assert (H1 : B R) by (assert_diffs; auto).
        assert (HRX2 : R X2) by (intro; treat_equalities; intuition).
        assert (HBPR : ¬ Col B P R) by (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
        split; Col.
        split; Col.
         U; split; Col; Between.
        }

        {
         X2; split.

          {
          assert (B R) by (assert_diffs; auto).
          assert (HRX2 : R X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P R) by (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; assert_cols; apply HBQR; ColR).
           B; split; Col; eBetween.
          }

          {
          assert (B R) by (assert_diffs; auto).
          assert (HRX2 : R X2) by (intro; treat_equalities; intuition).
          assert (¬ Col B P R) by (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; Col.
          split; try (intro; assert_cols; apply HBQR; ColR).
           R; split; Col; eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_1_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet P B X2
  Bet Q X1 X2
  Bet X1 X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (H := outer_pasch X1 P X2 R B HRX1X2 HCol3); destruct H as [U [HPUX1 HRBU]].
apply between_symmetry in HPUX1.
assert (H := l5_3 P A U X1 HCol1 HPUX1).
elim H; clear H; intro HAPU.

  {
  assert (H : TS B R Q A).
    {
    apply l9_8_2 with X1.

      {
      assert (H1 : B R) by (assert_diffs; auto).
      assert (HRX1 : R X1) by (intro; treat_equalities; intuition).
      split; try (intro; apply HBQR; ColR).
      split; Col.
       U; split; Col; eBetween.
      }

      {
      assert (H1 : B R) by (assert_diffs; auto).
      assert (H2 : Col B R R) by Col.
      assert (H3 : Col X1 Q R) by (assert_cols; Col).
      assert (H := l9_19 B R X1 Q R H1 H2 H3); rewrite H.
      assert (HRX2 : R X1) by (intro; treat_equalities; intuition).
      split; try (intro; apply HBQR; ColR).
      split; try auto.
      split; assert_diffs; eBetween.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  assert (H : TS R A Q B).
    {
    apply l9_31.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X1) by (assert_cols; Col).
        assert (H3 : Col A P X1) by (assert_cols; Col).
        assert (H := l9_19 R Q A P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try assumption.
        split; try (intro; treat_equalities; intuition).
        Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; Col).
        assert (H3 : Col P B X2) by (assert_cols; Col).
        assert (H := l9_19 R Q P B X2 H1 H2 H3); rewrite H.
        assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
        assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; Between.
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B U) by (assert_cols; Col).
        assert (HBet : Bet U A X1) by eBetween.
        assert (H3 : Col A X1 U) by (assert_cols; Col).
        assert (H := l9_19 R B A X1 U H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        Between.
        }

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by Col.
        assert (H3 : Col X1 Q R) by (assert_cols; Col).
        assert (H := l9_19 R B X1 Q R H1 H2 H3); rewrite H.
        assert (HRX1 : R X1) by (intro; treat_equalities; intuition).
        split; try (intro; apply HBQR; ColR).
        split; try auto.
        split; assert_diffs; eBetween.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_1_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet P B X2
  Bet Q X1 X2
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
elim (eq_dec_points R X1); intro HRX1; elim (eq_dec_points R X2); intro HRX2; treat_equalities.

  {
  subst; intuition.
  }

  {
  assert (H := inner_pasch P Q X2 B R HCol3 HQX1X2); destruct H as [U [HBUQ HPUR]].
   U; right; right.
  assert (P R) by (intro; treat_equalities; intuition).
  split; assert_cols; ColR.
  }

  {
  apply between_symmetry in HQX1X2.
  assert (H := outer_pasch R P X1 Q A HQX1X2 HCol1); destruct H as [U [HPUR HQAU]].
   U; right; left.
  assert (P R) by (intro; treat_equalities; intuition).
  split; assert_cols; ColR.
  }

  {
  assert (H : TS R A Q B).

    {
    apply l9_31.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X1) by (assert_cols; Col).
        assert (H3 : Col A P X1) by (assert_cols; Col).
        assert (H := l9_19 R Q A P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try assumption.
        split; try (intro; treat_equalities; intuition).
        Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; Col).
        assert (H3 : Col P B X2) by (assert_cols; Col).
        assert (H := l9_19 R Q P B X2 H1 H2 H3); rewrite H.
        assert (HQX2 : Q X2) by (intro; treat_equalities; intuition).
        assert (¬ Col B P Q) by (intro; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; Between.
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        apply one_side_symmetry; apply l9_17 with P; Between.
         X2; split.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          split; try (intro; apply HBQR; ColR).
          split; try (intro; apply HBQR; ColR).
           R; split; Col; Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          split; try (intro; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; try (intro; apply HBQR; ColR).
           B; split; Col; Between.
          }
        }

        {
         X2; split.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          split; try (intro; apply HBQR; ColR).
          split; try (intro; apply HBQR; ColR).
           R; split; Col; Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          split; try (intro; apply HBQR; ColR).
          split; try (intro; apply HBQR; ColR).
           R; split; Col; eBetween.
          }
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
Qed.

Unset Regular Subst Tactic.

Lemma coplanar_trans_1_aux_2_1_1_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet P B X2
  Bet X2 Q X1
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (H := l5_3 X2 Q R X1 HQX1X2 HRX1X2).
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (H' := l5_3 X1 Q R X2 HQX1X2 HRX1X2).
elim H; clear H; intro HQRX2; elim H'; clear H'; intro HQRX1.

  {
  assert (H : Bet X1 R Q) by eBetween.
  apply between_symmetry in HQRX1.
  apply between_symmetry in H.
  assert (H' := between_equality R Q X1 HQRX1 H); treat_equalities; exfalso; apply HNC; Col.
  }

  {
  elim (eq_dec_points R X1); intro HRX1; elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    subst; intuition.
    }

    {
    apply between_symmetry in HCol1.
    apply between_symmetry in HCol3.
    assert (H := inner_pasch R X2 P A B HCol1 HCol3); destruct H as [U [HAUX2 HBUR]].
    assert (T: Bet R Q X2) by Between.
    assert (H := inner_pasch A R X2 U Q HAUX2 T); destruct H as [V [RVU HAVQ]].
     V; right; left.
    assert (R U) by (intro; treat_equalities; assert_cols; apply HAQR; ColR).
    assert_cols; split; ColR.
    }

    {
    exfalso; apply HNC; Col.
    }

    {
    assert (H : TS R B Q A).

      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X2) by (assert_cols; Col).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; Between.
          intro; treat_equalities; intuition.
          }

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X1) by (assert_cols; Col).
          assert (H3 : Col P A X1) by (assert_cols; Col).
          assert (H := l9_19 R Q P A X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; Between.
          }
        }

        {
         X1; split.

          {
          apply l9_8_2 with P.

            {
            assert (H1 : R A) by (assert_diffs; auto).
            split; try (intro; apply HRX1; apply l6_21 with Q R P A; assert_diffs; Col).
            split; try (intro; apply HAQR; ColR).
             A; split; Col; Between.
            }

            {
            apply l9_17 with X2; Between.
             X1; split.

              {
              assert (H1 : R A) by (assert_diffs; auto).
              split; try (intro; apply HRX1; apply l6_21 with Q R P A; assert_diffs; Col).
              split; try (intro; apply HAQR; ColR).
               A; split; Col; Between.
              }

              {
              assert (H1 : R A) by (assert_diffs; auto).
              split; try (intro; apply HAQR; ColR).
              split; try (intro; apply HAQR; ColR).
               R; split; Col; Between.
              }
            }
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          split; try (intro; apply HAQR; ColR).
          split; try (intro; apply HAQR; ColR).
           R; split; Col; eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  elim (eq_dec_points Q X1); intro HQX1; elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

    {
    subst; intuition.
    }

    {
    apply between_symmetry in HCol1.
    apply between_symmetry in HCol3.
    assert (H := inner_pasch X2 Q P B A HCol3 HCol1); destruct H as [U [HBUQ HAUX2]].
    assert (T:Bet Q R X2) by auto using between_symmetry.
    assert (H := inner_pasch A Q X2 U R HAUX2 T); destruct H as [V [QVU HAVR]].
     V; right; right.
    assert (Q U) by (intro; treat_equalities; assert_cols; apply HAQR; ColR).
    assert_cols; split; ColR.
    }

    {
    exfalso; apply HNC; Col.
    }

    {
    assert (H : TS Q B R A).

      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R X2) by (assert_cols; Col).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 Q R B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; Between.
          intro; treat_equalities; intuition.
          }

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R X1) by (assert_cols; Col).
          assert (H3 : Col P A X1) by (assert_cols; Col).
          assert (H := l9_19 Q R P A X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; Between.
          }
        }

        {
         X1; split.

          {
          apply l9_8_2 with P.

            {
            assert (H1 : Q A) by (assert_diffs; auto).
            split; try (intro; apply HQX1; apply l6_21 with Q R P A; assert_diffs; Col).
            split; try (intro; apply HAQR; ColR).
             A; split; Col; Between.
            }

            {
            apply l9_17 with X2; Between.
             X1; split.

              {
              assert (H1 : Q A) by (assert_diffs; auto).
              split; try (intro; apply HQX1; apply l6_21 with Q R P A; assert_diffs; Col).
              split; try (intro; apply HAQR; ColR).
               A; split; Col; Between.
              }

              {
              assert (H1 : Q A) by (assert_diffs; auto).
              split; try (intro; apply HAQR; ColR).
              split; try (intro; apply HAQR; ColR).
               Q; split; Col; Between.
              }
            }
          }

          {
          assert (H1 : Q A) by (assert_diffs; auto).
          split; try (intro; apply HAQR; ColR).
          split; try (intro; apply HAQR; ColR).
           Q; split; Col; Between.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  assert (H : Bet X1 Q R) by eBetween.
  apply between_symmetry in HQRX1.
  apply between_symmetry in H.
  assert (H' := between_equality R Q X1 H HQRX1); treat_equalities; exfalso; apply HNC; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2 HCol2 HCol4 HCol1 HCol3.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
assert (HRX1X2 : Col R X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

  {
  apply coplanar_trans_1_aux_2_1_1_1_1 with P X1 X2; assumption.
  }

  {
  elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    apply coplanar_trans_1_aux_2_1_1_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_2_1_1_1_3 with P X1 X2; assumption.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_1_1_1_2 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_2_1_1_1_3 with P X1 X2; Col; Between); Cop.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_1_1_1_1 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_1_1_1_3 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q B A) by (apply coplanar_trans_1_aux_2_1_1_1_3 with P X2 X1; Col; Between); Cop.
    }

    {
    apply coplanar_trans_1_aux_2_1_1_2_2 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2 HCol2 HCol4 HCol1 HCol3.
assert (H : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    split; Col.
    split; Col.
     X2; split; Col; Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X1) by (assert_cols; Col).
    assert (H3 : Col P A X1) by (assert_cols; Col).
    assert (H := l9_19 Q R P A X1 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; Between.
    }
  }
destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
I; assert_cols; Col5.
Qed.

Lemma coplanar_trans_1_aux_2_1_3_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Bet Q X1 X2
  Bet R X1 X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (HOS : OS Q R A B).
  {
  apply one_side_transitivity with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X1) by (assert_cols; Col).
    assert (H3 : Col A P X1) by (assert_cols; Col).
    assert (H := l9_19 Q R A P X1 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; try (intro; treat_equalities; apply HAX1; reflexivity).
    Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; Col).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; Between.
    }
  }
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (H : X2 X1) by auto; assert (HQRX1 := l5_2 X2 X1 Q R H HQX1X2 HRX1X2); clear H.
elim HQRX1; clear HQRX1; intro HQRX1.

  {
  assert (H : TS Q B R A).
    {
    apply l9_31; apply one_side_symmetry; try assumption.
     X2; split.

      {
      assert (H1 : Q A) by (assert_diffs; auto).
      split; Col.
      assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
       Q; split; Col; eBetween.
      }

      {
      assert (H := outer_pasch X2 P X1 Q A HQX1X2 HCol1); destruct H as [U [HPUX2 HQAU]].
      assert (H1 : Q A) by (assert_diffs; auto).
      split; Col.
      assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
       U; split; Col; eBetween.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  assert (H : TS R B Q A).
    {
    apply l9_31; apply one_side_symmetry; apply invert_one_side; try assumption.
     X2; split.

      {
      assert (H1 : A R) by (assert_diffs; auto).
      split; Col.
      assert (R X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
       R; split; Col; eBetween.
      }

      {
      assert (H := outer_pasch X2 P X1 R A HRX1X2 HCol1); destruct H as [U [HPUX2 HRAU]].
      assert (H1 : A R) by (assert_diffs; auto).
      split; Col.
      assert (R X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
       U; split; Col; eBetween.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_3_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Bet Q X1 X2
  Bet X1 X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (H : TS A Q R B).
  {
  apply l9_8_2 with X2.

    {
    apply between_symmetry in HQX1X2.
    assert (H := outer_pasch X2 P X1 Q A HQX1X2 HCol1); destruct H as [U [HPUX2 HQAU]].
    assert (H1 : A Q) by (assert_diffs; auto).
    assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
    split; try (intro; apply HAQR; ColR).
    split; Col.
     U; split; Col; eBetween.
    }

    {
    assert (H1 : A Q) by (assert_diffs; auto).
    assert (H2 : Col A Q Q) by (assert_cols; Col).
    assert (H3 : Col X2 R Q) by (assert_cols; Col).
    assert (H := l9_19 A Q X2 R Q H1 H2 H3); rewrite H.
    assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
    split; try (intro; apply HAQR; ColR).
    split; auto.
    split; try (intro; treat_equalities; intuition).
    eBetween.
    }
  }
destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
I; assert_cols; Col5.
Qed.

Lemma coplanar_trans_1_aux_2_1_3_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Bet Q X1 X2
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (H : TS A Q R B).
  {
  apply l9_8_2 with X2.

    {
    apply between_symmetry in HQX1X2.
    assert (H := outer_pasch X2 P X1 Q A HQX1X2 HCol1); destruct H as [U [HPUX2 HQAU]].
    assert (H1 : A Q) by (assert_diffs; auto).
    assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
    split; try (intro; apply HAQR; ColR).
    split; Col.
     U; split; Col; eBetween.
    }

    {
    assert (H1 : A Q) by (assert_diffs; auto).
    assert (H2 : Col A Q Q) by (assert_cols; Col).
    assert (H3 : Col X2 R Q) by (assert_cols; Col).
    assert (H := l9_19 A Q X2 R Q H1 H2 H3); rewrite H.
    assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
    split; try (intro; apply HAQR; ColR).
    split; auto.
    split; try (intro; treat_equalities; intuition).
    eBetween.
    }
  }
destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
I; assert_cols; Col5.
Qed.

Lemma coplanar_trans_1_aux_2_1_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Bet X1 X2 Q
  Bet X1 X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (HQRX2 := l5_2 X1 X2 Q R HX1X2 HQX1X2 HRX1X2).
assert (HOS : OS Q R A B).
  {
  apply one_side_transitivity with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X1) by (assert_cols; Col).
    assert (H3 : Col A P X1) by (assert_cols; Col).
    assert (H := l9_19 Q R A P X1 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; try (intro; treat_equalities; apply HAX1; reflexivity).
    Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; Col).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; Between.
    }
  }
elim HQRX2; clear HQRX2; intro HQRX2.

  {
  elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

    {
    apply between_symmetry in HRX1X2.
    assert (H := inner_pasch P R X1 A Q HCol1 HRX1X2); destruct H as [U [HAUR HPUQ]].
     U; right; right.
    assert (P Q) by (assert_diffs; auto).
    assert_cols; split; ColR.
    }

    {
    assert (H : TS Q B R A).
      {
      apply l9_31; apply one_side_symmetry; try assumption.
       X2; split.

        {
        assert (H1 : Q A) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HAQR; ColR).
         Q; split; Col; eBetween.
        }

        {
        apply between_symmetry in HQX1X2.
        assert (H := inner_pasch P Q X1 A X2 HCol1 HQX1X2); destruct H as [U [HAUQ HPUX2]].
        assert (H1 : Q A) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HAQR; ColR).
         U; split; Col; eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    apply between_symmetry in HQX1X2.
    assert (H := inner_pasch P Q X1 A R HCol1 HQX1X2); destruct H as [U [HAUQ HPUR]].
     U; right; left.
    assert (P R) by (assert_diffs; auto).
    assert_cols; split; ColR.
    }

    {
    assert (H : TS R B Q A).
      {
      apply l9_31; apply one_side_symmetry; apply invert_one_side; try assumption.
       X2; split.

        {
        assert (H1 : A R) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HAQR; ColR).
         R; split; Col; eBetween.
        }

        {
        apply between_symmetry in HRX1X2.
        assert (H := inner_pasch P R X1 A X2 HCol1 HRX1X2); destruct H as [U [HAUR HPUX2]].
        assert (H1 : A R) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HAQR; ColR).
         U; split; Col; eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Bet X1 X2 Q
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (HOS : OS Q R A B).
  {
  apply one_side_transitivity with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X1) by (assert_cols; Col).
    assert (H3 : Col A P X1) by (assert_cols; Col).
    assert (H := l9_19 Q R A P X1 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; try (intro; treat_equalities; apply HAX1; reflexivity).
    Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; Col).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; Between.
    }
  }
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  assert (H := inner_pasch P Q X1 A R HCol1 HRX1X2); destruct H as [U [HAUQ HPUR]].
  apply between_symmetry in HCol3.
  assert (H := outer_pasch B R P Q U HCol3 HPUR); destruct H as [V [HBVR HQUV]].
   V; right; left.
  assert (Q U) by (intro; treat_equalities; assert_cols; apply HNC; Col).
  assert_cols; split; ColR.
  }

  {
  assert (H : TS Q A B R).
    {
    apply l9_31; try assumption.
    apply one_side_transitivity with P.

      {
      apply between_symmetry in HQX1X2.
      apply between_symmetry in HCol3.
      assert (H := outer_pasch Q B X2 X1 P HQX1X2 HCol3); destruct H as [U [HBUQ HUPX1]].
      assert (H1 : Q B) by (assert_diffs; auto).
      assert (H2 : Col Q B U) by (assert_cols; Col).
      assert (H' : P X1) by (intro; treat_equalities; apply HAX1; reflexivity).
      assert (H3 : Col A P U) by (assert_cols; ColR).
      assert (H := l9_19 Q B A P U H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; apply HABQ; Col).
      split; try (intro; treat_equalities; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
      eBetween.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q B) by (assert_diffs; auto).
        assert (H2 : Col Q B B) by (assert_cols; Col).
        assert (H3 : Col P X2 B) by (assert_cols; Col).
        assert (H := l9_19 Q B P X2 B H1 H2 H3); rewrite H.
        split; try (intro; treat_equalities; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
        split; try (intro; treat_equalities; apply HABP; Col).
        split; Between.
        }

        {
        assert (H1 : Q B) by (assert_diffs; auto).
        assert (H2 : Col Q B Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; Col).
        assert (H := l9_19 Q B X2 R Q H1 H2 H3); rewrite H.
        split; try (intro; apply HBQR; ColR).
        split; auto.
        split; try (intro; assert_diffs; intuition).
        eBetween.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_3_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Bet X2 Q X1
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (HOS : OS Q R A B).
  {
  apply one_side_transitivity with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X1) by (assert_cols; Col).
    assert (H3 : Col A P X1) by (assert_cols; Col).
    assert (H := l9_19 Q R A P X1 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; try (intro; treat_equalities; apply HAX1; reflexivity).
    Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; Col).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; Between.
    }
  }
assert (H := l5_3 X2 Q R X1 HQX1X2 HRX1X2).
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (H' := l5_3 X1 Q R X2 HQX1X2 HRX1X2).
elim H'; clear H'; intro HQRX1; elim H; clear H; intro HQRX2.

  {
  assert (H : Bet X1 R Q) by eBetween.
  apply between_symmetry in HQRX1.
  apply between_symmetry in H.
  assert (H' := between_equality R Q X1 HQRX1 H); treat_equalities; exfalso; apply HNC; Col.
  }

  {
  apply between_symmetry in HCol3.
  assert (H := inner_pasch B X1 X2 P Q HCol3 HQX1X2); destruct H as [U [HPUX1 HBUQ]].
  assert (H := l5_3 P A U X1 HCol1 HPUX1).
  elim H; clear H; intro HAPU.

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      exfalso; apply HNC; Col.
      }

      {
      assert (H : TS Q A B R).
        {
        apply l9_31; try assumption.
        apply one_side_transitivity with P.

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B U) by (assert_cols; Col).
          assert (H3 : Col A P U) by (assert_cols; Col).
          assert (H := l9_19 Q B A P U H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; apply HABQ; ColR).
          split; try (intro; treat_equalities; apply HABP; Col).
          Between.
          }

          {
          apply one_side_transitivity with X2.

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B B) by (assert_cols; Col).
            assert (H3 : Col P X2 B) by (assert_cols; Col).
            assert (H := l9_19 Q B P X2 B H1 H2 H3); rewrite H.
            split; try (intro; treat_equalities; apply HQX2; apply l6_21 with Q R P B; assert_diffs; Col).
            split; try (intro; treat_equalities; apply HABP; Col).
            split; Between.
            }

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B Q) by (assert_cols; Col).
            assert (H3 : Col X2 R Q) by (assert_cols; Col).
            assert (H := l9_19 Q B X2 R Q H1 H2 H3); rewrite H.
            split; try (intro; apply HBQR; ColR).
            split; try auto.
            split; try (intro; treat_equalities; intuition).
            Between.
            }
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }

    {
    elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

      {
        
      assert (T: Bet Q R X2) by auto using between_symmetry.
      assert (H := inner_pasch B Q X2 P R HCol3 T); destruct H as [V [HPVQ HBVR]].
       V; right; left.
      assert_diffs; assert_cols; split; ColR.
      }

      {
      assert (H : TS Q B A R).
        {
        apply l9_8_2 with X1.

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          split; try (intro; apply HBQR; ColR).
          split; Col.
           Q; split; Col; Between.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B U) by (assert_cols; Col).
          assert (H' : P X1) by (intro; treat_equalities; apply HAX1; reflexivity).
          assert (H3 : Col X1 A U) by (assert_cols; ColR).
          assert (H := l9_19 Q B X1 A U H1 H2 H3); rewrite H.
          split; try (intro; apply HBQR; ColR).
          split; try (intro; treat_equalities; apply HBQR; ColR).
          split; try (intro; treat_equalities; apply HABQ; Col).
          eBetween.
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }
  }

  {
  apply between_symmetry in HCol3.
  assert (H := inner_pasch B X1 X2 P R HCol3 HRX1X2); destruct H as [U [HPUX1 HBUR]].
  assert (H := l5_3 P A U X1 HCol1 HPUX1).
  elim H; clear H; intro HAPU.

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities; Cop.
    assert (H : TS R A B Q).
      {
      apply l9_31; apply invert_one_side; try assumption.
      apply one_side_transitivity with P.

        {
        assert (H1 : B R) by (assert_diffs; auto).
        assert (H2 : Col B R U) by (assert_cols; Col).
        assert (H3 : Col A P U) by (assert_cols; Col).
        assert (H := l9_19 B R A P U H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; apply HABR; Col).
        split; try (intro; treat_equalities; apply HABP; Col).
        Between.
        }

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : B R) by (assert_diffs; auto).
          assert (H2 : Col B R B) by (assert_cols; Col).
          assert (H3 : Col P X2 B) by (assert_cols; Col).
          assert (H := l9_19 B R P X2 B H1 H2 H3); rewrite H.
          split; try (intro; treat_equalities; apply HRX2; apply l6_21 with Q R P B; assert_diffs; Col).
          split; try (intro; treat_equalities; intuition).
          split; Between.
          }

          {
          assert (H1 : B R) by (assert_diffs; auto).
          assert (H2 : Col B R R) by (assert_cols; Col).
          assert (H3 : Col X2 Q R) by (assert_cols; Col).
          assert (H := l9_19 B R X2 Q R H1 H2 H3); rewrite H.
          split; try (intro; apply HBQR; ColR).
          split; try auto.
          split; try (intro; treat_equalities; intuition).
          Between.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    elim (eq_dec_points R X1); intro HRX1; treat_equalities.

      {
      apply between_symmetry in HCol1.
      apply between_symmetry in HCol3.
      assert (H := outer_pasch X2 R P B A HCol3 HCol1); destruct H as [V [HRVX2 HBAV]].
       V; left.
      assert_cols; split; ColR.
      }

      {
      assert (H : TS R B A Q).
        {
        apply l9_8_2 with X1.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          split; try (intro; apply HBQR; ColR).
          split; Col.
           R; split; Col; Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B U) by (assert_cols; Col).
          assert (H' : P X1) by (intro; treat_equalities; apply HAX1; reflexivity).
          assert (H3 : Col X1 A U) by (assert_cols; ColR).
          assert (H := l9_19 R B X1 A U H1 H2 H3); rewrite H.
          split; try (intro; apply HBQR; ColR).
          split; try (intro; treat_equalities; apply HBQR; ColR).
          split; try (intro; treat_equalities; apply HABR; Col).
          eBetween.
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }
  }

  {
  assert (H : Bet X1 Q R) by eBetween.
  apply between_symmetry in HQRX1.
  apply between_symmetry in H.
  assert (H' := between_equality R Q X1 H HQRX1); treat_equalities; exfalso; apply HNC; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_2_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet P A X1
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2 HCol2 HCol4 HCol1 HCol3.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
assert (HRX1X2 : Col R X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

  {
  apply coplanar_trans_1_aux_2_1_3_1_1 with P X1 X2; assumption.
  }

  {
  elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    apply coplanar_trans_1_aux_2_1_3_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_2_1_3_1_3 with P X1 X2; assumption.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_2_1_3_1_2 with P X1 X2; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_2_1_3_1_3 with P X1 X2; Col; Between); Cop.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    apply coplanar_trans_1_aux_2_1_3_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_2_1_3_2_3 with P X1 X2; assumption.
    }

    {
    assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_2_1_3_2_3 with P X1 X2; Col; Between); Cop.
    }

    {
    apply coplanar_trans_1_aux_2_1_3_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_2_2_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet A X1 P
  Bet B X2 P
  Bet Q X1 X2
  Bet R X1 X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (H : X2 X1) by auto; assert (HQRX1 := l5_2 X2 X1 Q R H HQX1X2 HRX1X2); clear H.
elim HQRX1; clear HQRX1; intro HQRX1.

  {
  apply between_symmetry in HQX1X2.
  assert (H := outer_pasch B Q X2 P X1 HCol3 HQX1X2); destruct H as [U [HBUQ HPX1U]].
  apply between_symmetry in HCol1.
  assert (HPX1 : P X1) by (intro; treat_equalities; assert_cols; apply HNC; Col).
  assert (H := l5_2 P X1 A U HPX1 HCol1 HPX1U).
  elim H; clear H; intro HAX1U.

    {
    elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

      {
      apply between_symmetry in HRX1X2.
      assert (H := outer_pasch B R X2 P Q HCol3 HRX1X2); destruct H as [V [HBVR HPQV]].
       V; right; left.
      assert_cols; split; ColR.
      }

      {
      assert (H : TS Q B A R).
        {
        apply l9_8_2 with X1.

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          split; try (intro; assert_cols; apply HABQ; ColR).
          split; Col.
           Q; split; Col; Between.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B U) by (assert_cols; Col).
          assert (H3 : Col X1 A U) by (assert_cols; Col).
          assert (H := l9_19 Q B X1 A U H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HABQ; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; subst; apply HABQ; Col).
          Between.
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }

    {
    elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

      {
      apply between_symmetry in HRX1X2.
      assert (H := outer_pasch B R X2 P Q HCol3 HRX1X2); destruct H as [V [HBVR HPQV]].
       V; right; left.
      assert_cols; split; ColR.
      }

      {
      assert (H : TS Q A R B).
        {
        apply l9_31.

          {
           P; split.

            {
            assert (H1 : Q R) by (assert_diffs; auto).
            split; Col.
            split; Col.
             X1; split; Col; Between.
            }

            {
            assert (H1 : Q R) by (assert_diffs; auto).
            split; Col.
            split; Col.
             X2; split; Col; Between.
            }
          }

          {
           X1; split.

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            split; Col.
            split; try (intro; assert_cols; apply HABQ; ColR).
             U; split; Col; Between.
            }

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            split; Col.
            split; try (intro; assert_cols; apply HABQ; ColR).
             Q; split; Col; Between.
            }
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }
  }

  {
  apply between_symmetry in HRX1X2.
  assert (H := outer_pasch B R X2 P X1 HCol3 HRX1X2); destruct H as [U [HBUR HPX1U]].
  apply between_symmetry in HCol1.
  assert (HPX1 : P X1) by (intro; treat_equalities; assert_cols; apply HNC; Col).
  assert (H := l5_2 P X1 A U HPX1 HCol1 HPX1U).
  elim H; clear H; intro HAX1U.

    {
    elim (eq_dec_points R X1); intro HRX1; treat_equalities.

      {
      apply between_symmetry in HQX1X2.
      assert (H := outer_pasch B Q X2 P R HCol3 HQX1X2); destruct H as [V [HBVQ HPRV]].
       V; right; right.
      assert_cols; split; ColR.
      }

      {
      assert (H : TS R B A Q).
        {
        apply l9_8_2 with X1.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          split; try (intro; assert_cols; apply HABR; ColR).
          split; Col.
           R; split; Col; Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B U) by (assert_cols; Col).
          assert (H3 : Col X1 A U) by (assert_cols; Col).
          assert (H := l9_19 R B X1 A U H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HABR; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; subst; apply HABR; Col).
          Between.
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }

    {
    elim (eq_dec_points R X1); intro HRX1; treat_equalities.

      {
      apply between_symmetry in HQX1X2.
      assert (H := outer_pasch B Q X2 P R HCol3 HQX1X2); destruct H as [V [HBVQ HPRV]].
       V; right; right.
      assert_cols; split; ColR.
      }

      {
      assert (H : TS R A Q B).
        {
        apply l9_31.

          {
           P; split.

            {
            assert (H1 : R Q) by (assert_diffs; auto).
            split; Col.
            split; Col.
             X1; split; Col; Between.
            }

            {
            assert (H1 : R Q) by (assert_diffs; auto).
            split; Col.
            split; Col.
             X2; split; Col; Between.
            }
          }

          {
           X1; split.

            {
            assert (H1 : R B) by (assert_diffs; auto).
            split; Col.
            split; try (intro; assert_cols; apply HABR; ColR).
             U; split; Col; Between.
            }

            {
            assert (H1 : R B) by (assert_diffs; auto).
            split; Col.
            split; try (intro; assert_cols; apply HABR; ColR).
             R; split; Col; Between.
            }
          }
        }
      destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
       I; assert_cols; Col5.
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_2_2_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet A X1 P
  Bet B X2 P
  Bet Q X1 X2
  Bet X1 X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

  {
  assert (H : TS B Q R A).
    {
    apply l9_8_2 with P.

      {
      assert (B Q) by (assert_diffs; auto).
      split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
      split; Col.
       Q; split; Col; Between.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (H2 : Col B Q B) by (assert_cols; Col).
        assert (H3 : Col P X2 B) by (assert_cols; Col).
        assert (H := l9_19 B Q P X2 B H1 H2 H3); rewrite H.
        split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
        split; try (intro; treat_equalities; intuition).
        split; Between.
        }

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (H2 : Col B Q Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; Col).
        assert (H := l9_19 B Q X2 R Q H1 H2 H3); rewrite H.
        assert (Q X2) by (intro; treat_equalities; intuition).
        split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
        split; try auto.
        split; try (intro; treat_equalities; intuition).
        Between.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
    
  {
  assert (H := outer_pasch B Q X2 P X1 HCol3 HQX1X2); destruct H as [U [HBUQ HPX1U]].
  apply between_symmetry in HCol1.
  assert (HPX1 : P X1) by (intro; treat_equalities; assert_cols; apply HNC; Col).
  assert (H := l5_2 P X1 A U HPX1 HCol1 HPX1U).
  elim H; clear H; intro HAX1U.

    {
    assert (H : TS Q A R B).
      {
      apply l9_31.

        {
         P; split.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          split; Col.
          split; Col.
           X1; split; Col; Between.
          }

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          split; Col.
          split; Col.
           X2; split; Col; Between.
          }
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B U) by (assert_cols; Col).
          assert (H3 : Col A X1 U) by (assert_cols; Col).
          assert (H := l9_19 Q B A X1 U H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HABQ; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B Q) by (assert_cols; Col).
          assert (H3 : Col X1 R Q) by (assert_cols; Col).
          assert (H := l9_19 Q B X1 R Q H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HABQ; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS B Q R A).
      {
      apply l9_8_2 with X1.

        {
        assert (B Q) by (assert_diffs; auto).
        split; try (intro; assert_cols; apply HABQ; ColR).
        split; Col.
         U; split; Col; Between.
        }

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (H2 : Col B Q Q) by (assert_cols; Col).
        assert (H3 : Col X1 R Q) by (assert_cols; Col).
        assert (H := l9_19 B Q X1 R Q H1 H2 H3); rewrite H.
        split; try (intro; assert_cols; apply HABQ; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; apply HNC; Col).
        eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_2_2_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet A X1 P
  Bet B X2 P
  Bet Q X1 X2
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

  {
  assert (H : TS B Q R A).
    {
    apply l9_8_2 with P.

      {
      assert (B Q) by (assert_diffs; auto).
      split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
      split; Col.
       Q; split; Col; Between.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (H2 : Col B Q B) by (assert_cols; Col).
        assert (H3 : Col P X2 B) by (assert_cols; Col).
        assert (H := l9_19 B Q P X2 B H1 H2 H3); rewrite H.
        split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
        split; try (intro; treat_equalities; intuition).
        split; Between.
        }

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (H2 : Col B Q Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; Col).
        assert (H := l9_19 B Q X2 R Q H1 H2 H3); rewrite H.
        assert (Q X2) by (intro; treat_equalities; intuition).
        split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
        split; try auto.
        split; try (intro; treat_equalities; intuition).
        Between.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
    
  {
  assert (H := outer_pasch B Q X2 P X1 HCol3 HQX1X2); destruct H as [U [HBUQ HPX1U]].
  apply between_symmetry in HCol1.
  assert (HPX1 : P X1) by (intro; treat_equalities; assert_cols; apply HNC; Col).
  assert (H := l5_2 P X1 A U HPX1 HCol1 HPX1U).
  elim H; clear H; intro HAX1U.

    {
    assert (H : TS Q A R B).
      {
      apply l9_31.

        {
         P; split.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          split; Col.
          split; Col.
           X1; split; Col; Between.
          }

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          split; Col.
          split; Col.
           X2; split; Col; Between.
          }
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B U) by (assert_cols; Col).
          assert (H3 : Col A X1 U) by (assert_cols; Col).
          assert (H := l9_19 Q B A X1 U H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HABQ; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B Q) by (assert_cols; Col).
          assert (H3 : Col X1 R Q) by (assert_cols; Col).
          assert (H := l9_19 Q B X1 R Q H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HABQ; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS B Q R A).
      {
      apply l9_8_2 with X1.

        {
        assert (B Q) by (assert_diffs; auto).
        split; try (intro; assert_cols; apply HABQ; ColR).
        split; Col.
         U; split; Col; Between.
        }

        {
        assert (H1 : B Q) by (assert_diffs; auto).
        assert (H2 : Col B Q Q) by (assert_cols; Col).
        assert (H3 : Col X1 R Q) by (assert_cols; Col).
        assert (H := l9_19 B Q X1 R Q H1 H2 H3); rewrite H.
        split; try (intro; assert_cols; apply HABQ; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; apply HNC; Col).
        eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_2_2_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet A X1 P
  Bet B X2 P
  Bet X2 Q X1
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
assert (HQRX2 := l5_3 X2 Q R X1 HQX1X2 HRX1X2).
elim HQRX2; clear HQRX2; intro HQRX2.

  {
  elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

    {
    apply between_symmetry in HCol1.
    assert (H := outer_pasch P Q X1 A R HCol1 HRX1X2); destruct H as [U [HPUQ HARU]].
     U; right; right.
    assert_diffs; assert_cols; split; ColR.
    }

    {
    assert (H : TS A Q B R).
      {
      apply l9_8_2 with X2.

        {
        assert (A Q) by (assert_diffs; auto).
        split; try (intro; assert_cols; apply HAQR; ColR).
        split; Col.
         Q; split; Col; Between.
        }

        {
        apply between_symmetry in HCol1.
        assert (H := outer_pasch P X2 X1 A Q HCol1 HQX1X2); destruct H as [U [HPUX2 HAQU]].
        assert (H1 : A Q) by (assert_diffs; auto).
        assert (H2 : Col A Q U) by (assert_cols; Col).
        assert (HPX2 : P X2) by (intro; treat_equalities; apply HNC; Col).
        assert (H3 : Col X2 B U) by (assert_cols; ColR).
        assert (H := l9_19 A Q X2 B U H1 H2 H3); rewrite H.
        split; try (intro; assert_cols; apply HAQR; ColR).
        split; try (intro; treat_equalities; assert_cols; apply HAQR; ColR).
        split; try (intro; treat_equalities; apply HABQ; Col).
        eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    apply between_symmetry in HCol1.
    assert (H := outer_pasch P R X1 A Q HCol1 HQX1X2); destruct H as [U [HPUR HAQU]].
     U; right; left.
    assert_diffs; assert_cols; split; ColR.
    }

    {
    assert (H : TS A R B Q).
      {
      apply l9_8_2 with X2.

        {
        assert (A R) by (assert_diffs; auto).
        split; try (intro; assert_cols; apply HAQR; ColR).
        split; Col.
         R; split; Col; Between.
        }

        {
        apply between_symmetry in HCol1.
        assert (H := outer_pasch P X2 X1 A R HCol1 HRX1X2); destruct H as [U [HPUX2 HARU]].
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R U) by (assert_cols; Col).
        assert (HPX2 : P X2) by (intro; treat_equalities; apply HNC; Col).
        assert (H3 : Col X2 B U) by (assert_cols; ColR).
        assert (H := l9_19 A R X2 B U H1 H2 H3); rewrite H.
        split; try (intro; assert_cols; apply HAQR; ColR).
        split; try (intro; treat_equalities; assert_cols; apply HAQR; ColR).
        split; try (intro; treat_equalities; apply HABR; Col).
        eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet A X1 P
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2 HCol2 HCol4 HCol1 HCol3.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
assert (HRX1X2 : Col R X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

  {
  apply coplanar_trans_1_aux_2_2_2_1_1 with P X1 X2; assumption.
  }

  {
  elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    apply coplanar_trans_1_aux_2_2_2_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_2_2_2_1_3 with P X1 X2; assumption.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_2_2_1_2 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_2_2_2_1_3 with P X1 X2; Col; Between); Cop.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_2_2_1_1 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_2_2_1_3 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q B A) by (apply coplanar_trans_1_aux_2_2_2_1_3 with P X2 X1; Col; Between); Cop.
    }

    {
    apply coplanar_trans_1_aux_2_2_2_2_2 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet A X1 P
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2 HCol2 HCol4 HCol1 HCol3.
assert (H : TS Q R B A).
  {
  apply l9_8_2 with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    split; Col.
    split; Col.
     X1; split; Col; Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; Col).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; Between.
    }
  }
destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
I; assert_cols; Col5.
Qed.

Lemma coplanar_trans_1_aux_2_3_3_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet X1 P A
  Bet X2 P B
  Bet Q X1 X2
  Bet R X1 X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (H : X2 X1) by auto; assert (HQRX1 := l5_2 X2 X1 Q R H HQX1X2 HRX1X2); clear H.
elim HQRX1; clear HQRX1; intro HQRX1.

  {
  apply between_symmetry in HCol1.
  apply between_symmetry in HRX1X2.
  assert (H := outer_pasch R A X1 X2 P HRX1X2 HCol1); destruct H as [U [HAUR HX2PU]].
  assert (HPX2 : X2 P) by (intro; treat_equalities; apply HNC; Col).
  assert (H := l5_2 X2 P B U HPX2 HCol3 HX2PU).
  elim H; clear H; intro HBPU.

    {
    assert (H : TS R B Q A).
      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X2) by (assert_cols; Col).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try assumption.
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X1) by (assert_cols; Col).
          assert (H3 : Col P A X1) by (assert_cols; Col).
          assert (H := l9_19 R Q P A X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; try assumption.
          Between.
          }
        }

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A U) by (assert_cols; Col).
          assert (H3 : Col B X2 U) by (assert_cols; ColR).
          assert (H := l9_19 R A B X2 U H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          eBetween.
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A R) by (assert_cols; Col).
          assert (H3 : Col X2 Q R) by (assert_cols; Col).
          assert (H := l9_19 R A X2 Q R H1 H2 H3); rewrite H.
          assert (R X2) by (intro; treat_equalities; apply HNC; Col).
          split; try (intro; apply HAQR; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS A R Q B).
      {
      apply l9_8_2 with X2.

        {
        assert (A R) by (assert_diffs; auto).
        assert (R X2) by (intro; treat_equalities; apply HNC; Col).
        split; try (intro; apply HAQR; ColR).
        split; Col.
         U; split; Col; eBetween.
        }

        {
        assert (H1 : A R) by (assert_diffs; auto).
        assert (H2 : Col A R R) by (assert_cols; Col).
        assert (H3 : Col X2 Q R) by (assert_cols; Col).
        assert (H := l9_19 A R X2 Q R H1 H2 H3); rewrite H.
        assert (R X2) by (intro; treat_equalities; apply HNC; Col).
        split; try (intro; apply HAQR; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  apply between_symmetry in HCol1.
  apply between_symmetry in HQX1X2.
  assert (H := outer_pasch Q A X1 X2 P HQX1X2 HCol1); destruct H as [U [HAUQ HX2PU]].
  assert (HPX2 : X2 P) by (intro; treat_equalities; apply HNC; Col).
  assert (H := l5_2 X2 P B U HPX2 HCol3 HX2PU).
  elim H; clear H; intro HBPU.

    {
    assert (H : TS Q B R A).
      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R X2) by (assert_cols; Col).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 Q R B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try assumption.
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R X1) by (assert_cols; Col).
          assert (H3 : Col P A X1) by (assert_cols; Col).
          assert (H := l9_19 Q R P A X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; try assumption.
          Between.
          }
        }

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A U) by (assert_cols; Col).
          assert (H3 : Col B X2 U) by (assert_cols; ColR).
          assert (H := l9_19 Q A B X2 U H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          eBetween.
          }

          {
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by (assert_cols; Col).
          assert (H3 : Col X2 R Q) by (assert_cols; Col).
          assert (H := l9_19 Q A X2 R Q H1 H2 H3); rewrite H.
          assert (Q X2) by (intro; treat_equalities; apply HNC; Col).
          split; try (intro; apply HAQR; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try (intro; treat_equalities; intuition).
          eBetween.
          }
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS A Q R B).
      {
      apply l9_8_2 with X2.

        {
        assert (A Q) by (assert_diffs; auto).
        assert (Q X2) by (intro; treat_equalities; apply HNC; Col).
        split; try (intro; apply HAQR; ColR).
        split; Col.
         U; split; Col; eBetween.
        }

        {
        assert (H1 : A Q) by (assert_diffs; auto).
        assert (H2 : Col A Q Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; Col).
        assert (H := l9_19 A Q X2 R Q H1 H2 H3); rewrite H.
        assert (Q X2) by (intro; treat_equalities; apply HNC; Col).
        split; try (intro; apply HAQR; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        eBetween.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_3_3_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet X1 P A
  Bet X2 P B
  Bet Q X1 X2
  Bet X1 X2 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
apply between_symmetry in HCol1.
assert (H := outer_pasch Q A X1 X2 P HQX1X2 HCol1); destruct H as [U [HAUQ HX2PU]].
assert (HPX2 : X2 P) by (intro; treat_equalities; apply HNC; Col).
assert (H := l5_2 X2 P B U HPX2 HCol3 HX2PU).
elim H; clear H; intro HBPU.

  {
  assert (H : TS Q B R A).
    {
    apply l9_31.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R X2) by (assert_cols; Col).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 Q R B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try assumption.
        split; try (intro; treat_equalities; intuition).
        Between.
        }

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R X1) by (assert_cols; Col).
        assert (H3 : Col P A X1) by (assert_cols; Col).
        assert (H := l9_19 Q R P A X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; try assumption.
        Between.
        }
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A U) by (assert_cols; Col).
        assert (H3 : Col B X2 U) by (assert_cols; ColR).
        assert (H := l9_19 Q A B X2 U H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        eBetween.
        }

        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; Col).
        assert (H := l9_19 Q A X2 R Q H1 H2 H3); rewrite H.
        assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
        split; try (intro; apply HAQR; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        eBetween.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  assert (H : TS A Q R B).
    {
    apply l9_8_2 with X2.

      {
      assert (A Q) by (assert_diffs; auto).
      assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
      split; Col.
       U; split; Col; eBetween.
      }

      {
      assert (H1 : A Q) by (assert_diffs; auto).
      assert (H2 : Col A Q Q) by (assert_cols; Col).
      assert (H3 : Col X2 R Q) by (assert_cols; Col).
      assert (H := l9_19 A Q X2 R Q H1 H2 H3); rewrite H.
      assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
      split; try (intro; treat_equalities; intuition).
      split; try (intro; treat_equalities; intuition).
      eBetween.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
Qed.

Lemma coplanar_trans_1_aux_2_3_3_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet X1 P A
  Bet X2 P B
  Bet Q X1 X2
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
apply between_symmetry in HCol1.
assert (H := outer_pasch Q A X1 X2 P HQX1X2 HCol1); destruct H as [U [HAUQ HX2PU]].
assert (HPX2 : X2 P) by (intro; treat_equalities; apply HNC; Col).
assert (H := l5_2 X2 P B U HPX2 HCol3 HX2PU).
elim H; clear H; intro HBPU.

  {
  assert (H : TS Q B R A).
    {
    apply l9_31.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R X2) by (assert_cols; Col).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 Q R B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try assumption.
        split; try (intro; treat_equalities; intuition).
        Between.
        }

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R X1) by (assert_cols; Col).
        assert (H3 : Col P A X1) by (assert_cols; Col).
        assert (H := l9_19 Q R P A X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; try assumption.
        Between.
        }
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A U) by (assert_cols; Col).
        assert (H3 : Col B X2 U) by (assert_cols; ColR).
        assert (H := l9_19 Q A B X2 U H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        eBetween.
        }

        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; Col).
        assert (H := l9_19 Q A X2 R Q H1 H2 H3); rewrite H.
        assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
        split; try (intro; apply HAQR; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        eBetween.
        }
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }

  {
  assert (H : TS A Q R B).
    {
    apply l9_8_2 with X2.

      {
      assert (A Q) by (assert_diffs; auto).
      assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
      split; Col.
       U; split; Col; eBetween.
      }

      {
      assert (H1 : A Q) by (assert_diffs; auto).
      assert (H2 : Col A Q Q) by (assert_cols; Col).
      assert (H3 : Col X2 R Q) by (assert_cols; Col).
      assert (H := l9_19 A Q X2 R Q H1 H2 H3); rewrite H.
      assert (Q X2) by (intro; treat_equalities; apply HX1X2; reflexivity).
      split; try (intro; apply HAQR; ColR).
      split; try (intro; treat_equalities; intuition).
      split; try (intro; treat_equalities; intuition).
      eBetween.
      }
    }
  destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
   I; assert_cols; Col5.
  }
Qed.

Lemma coplanar_trans_1_aux_2_3_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet X1 P A
  Bet X2 P B
  Bet X2 Q X1
  Bet X2 R X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2;
intros HCol2 HCol4 HCol1 HCol3 HQX1X2 HRX1X2.
apply between_symmetry in HQX1X2.
apply between_symmetry in HRX1X2.
assert (HOS : OS Q R A B).
  {
  apply one_side_transitivity with P.

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X1) by (assert_cols; Col).
    assert (H3 : Col A P X1) by (assert_cols; Col).
    assert (H := l9_19 Q R A P X1 H1 H2 H3); rewrite H.
    split; Col.
    split; try assumption.
    split; try (intro; treat_equalities; intuition).
    Between.
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; Col).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; intuition).
    split; try assumption.
    Between.
    }
  }
assert (H := l5_3 X1 Q R X2 HQX1X2 HRX1X2).
elim H; clear H; intro HQRX1.

  {
  elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

    {
    assert (H : TS Q A R B).
      {
      apply l9_31; try assumption.
      apply one_side_transitivity with X2.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B Q) by (assert_cols; Col).
          assert (H3 : Col A P Q) by (assert_cols; ColR).
          assert (H := l9_19 Q B A P Q H1 H2 H3); rewrite H.
          split; Col.
          split; try assumption.
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B B) by (assert_cols; Col).
          assert (H3 : Col P X2 B) by (assert_cols; ColR).
          assert (H := l9_19 Q B P X2 B H1 H2 H3); rewrite H.
          split; try (intro; assert_diffs; assert_cols; apply HABQ; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try auto.
          Between.
          }
        }

        {
        assert (H1 : Q B) by (assert_diffs; auto).
        assert (H2 : Col Q B Q) by (assert_cols; Col).
        assert (H3 : Col X2 R Q) by (assert_cols; ColR).
        assert (H := l9_19 Q B X2 R Q H1 H2 H3); rewrite H.
        assert (B X2) by (intro; treat_equalities; intuition).
        split; try (intro; apply HBQR; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS Q A R B).
      {
      apply l9_31; try assumption.
       X1; split.

        {
        apply between_symmetry in HCol3.
        assert (H := inner_pasch B X1 X2 P Q HCol3 HQX1X2); destruct H as [U [HPUX1 HBUQ]].
        assert (Q B) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HBQR; ColR).
         U; assert_cols; split; Col; eBetween.
        }

        {
        assert (Q B) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HBQR; ColR).
         Q; split; Col; Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }

  {
  elim (eq_dec_points R X1); intro HRX1; treat_equalities.

    {
    assert (H : TS R A Q B).
      {
      apply l9_31; try (apply invert_one_side; assumption).
      apply one_side_transitivity with X2.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by (assert_cols; Col).
          assert (H3 : Col A P R) by (assert_cols; ColR).
          assert (H := l9_19 R B A P R H1 H2 H3); rewrite H.
          split; Col.
          split; try assumption.
          split; try (intro; treat_equalities; intuition).
          Between.
          }

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B B) by (assert_cols; Col).
          assert (H3 : Col P X2 B) by (assert_cols; ColR).
          assert (H := l9_19 R B P X2 B H1 H2 H3); rewrite H.
          split; try (intro; assert_diffs; assert_cols; apply HABR; ColR).
          split; try (intro; treat_equalities; intuition).
          split; try auto.
          Between.
          }
        }

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by (assert_cols; Col).
        assert (H3 : Col X2 Q R) by (assert_cols; ColR).
        assert (H := l9_19 R B X2 Q R H1 H2 H3); rewrite H.
        assert (B X2) by (intro; treat_equalities; intuition).
        split; try (intro; apply HBQR; ColR).
        split; try (intro; treat_equalities; intuition).
        split; try (intro; treat_equalities; intuition).
        Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }

    {
    assert (H : TS R A Q B).
      {
      apply l9_31; try (apply invert_one_side; assumption).
       X1; split.

        {
        apply between_symmetry in HCol3.
        assert (H := inner_pasch B X1 X2 P R HCol3 HRX1X2); destruct H as [U [HPUX1 HBUR]].
        assert (R B) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HBQR; ColR).
         U; assert_cols; split; Col; eBetween.
        }

        {
        assert (R B) by (assert_diffs; auto).
        split; Col.
        split; try (intro; apply HBQR; ColR).
         R; split; Col; Between.
        }
      }
    destruct H as [HCol5 [HCol6 [I [HCol7 HCol8]]]].
     I; assert_cols; Col5.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B P
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  A X1
  B X2
  X1 X2
  Col Q R X1
  Col Q R X2
  Bet X1 P A
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABP HABQ HABR HAQR HBQR HAX1 HAX2 HX1X2 HCol2 HCol4 HCol1 HCol3.
assert (HQX1X2 : Col Q X1 X2) by (assert_diffs; ColR).
assert (HRX1X2 : Col R X1 X2) by (assert_diffs; ColR).
elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

  {
  apply coplanar_trans_1_aux_2_3_3_1_1 with P X1 X2; assumption.
  }

  {
  elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    apply coplanar_trans_1_aux_2_3_3_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_2_3_3_1_3 with P X1 X2; assumption.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2.

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_3_3_1_2 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_2_3_3_1_3 with P X1 X2; Col; Between); Cop.
    }
  }

  {
  elim HQX1X2; clear HQX1X2; intro HQX1X2; elim HRX1X2; clear HRX1X2; intro HRX1X2.

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_3_3_1_1 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_3_3_1_3 with P X2 X1; Col; Between); Cop.
    }

    {
    assert (Coplanar R Q B A) by (apply coplanar_trans_1_aux_2_3_3_1_3 with P X2 X1; Col; Between); Cop.
    }

    {
    apply coplanar_trans_1_aux_2_3_3_2_2 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P A X1
  Col Q R X1
  Col P B X2
  Col Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points A X1); intro HAX1; subst; Cop.
elim (eq_dec_points B X2); intro HBX2; subst; Cop.
elim (eq_dec_points A P); intro HAP; elim (eq_dec_points B P); intro HBP; subst.

  {
  exfalso; apply HABQ; Col.
  }

  {
   X2; Col5.
  }

  {
   X1; Col5.
  }

  {
  elim (Col_dec A B P); intro HABP.

    {
    assert (HX1X2 : X1 = X2) by (apply l6_21 with Q R P A; Col; ColR); subst.
     X2; assert_diffs; left; split; Col; ColR.
    }

    {
    assert (HX1X2 : X1 X2).
      {
      intro; treat_equalities; elim (eq_dec_points P X1); intro; subst.

        {
        apply HNC; Col.
        }

        {
        apply HABP; ColR.
        }
      }
    elim HCol1; clear HCol1; intro HCol1; elim HCol3; clear HCol3; intro HCol3.

      {
      apply coplanar_trans_1_aux_2_1_1 with P X1 X2; assumption.
      }

      {
      elim HCol3; clear HCol3; intro HCol3.

        {
        apply coplanar_trans_1_aux_2_1_2 with P X1 X2; assumption.
        }

        {
        apply coplanar_trans_1_aux_2_1_3 with P X1 X2; assumption.
        }
      }

      {
      elim HCol1; clear HCol1; intro HCol1.

        {
        assert (H : Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_1_2 with P X2 X1; Col; Between); Cop.
        }

        {
        assert (H : Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_1_3 with P X2 X1; Col; Between); Cop.
        }
      }

      {
      elim HCol1; clear HCol1; intro HCol1; elim HCol3; clear HCol3; intro HCol3.

        {
        apply coplanar_trans_1_aux_2_2_2 with P X1 X2; assumption.
        }

        {
        apply coplanar_trans_1_aux_2_2_3 with P X1 X2; assumption.
        }

        {
        assert (H : Coplanar Q R B A) by (apply coplanar_trans_1_aux_2_2_3 with P X2 X1; Col; Between); Cop.
        }

        {
        apply coplanar_trans_1_aux_2_3_3 with P X1 X2; assumption.
        }
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col R A X1
  Col Q B X2
  Bet P Q X1
  Bet P R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol3 HCol4 HCol1 HCol2.
elim (eq_dec_points R X2); intro HRX2; treat_equalities.
  {
  assert_cols; Cop.
  }

  {
  assert (HTS : TS R A Q X2).
    {
    apply l9_8_2 with P.

      {
      split; Col.
      split; try R; Col.
      intro; apply HRX2; assert_diffs; assert_cols; apply l6_21 with R P A R; Col.
      }

      {
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A X1) by (assert_cols; Col).
      assert (H3 : Col P Q X1) by (assert_cols; Col).
      assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; apply HNC); treat_equalities; Col.
      split; try (intro; apply HAQR); treat_equalities; Col.
      right; Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HRAI HQX2I]]]]; clear H1; clear H2.
  assert (H : Col Q B I).
    {
    assert (Q X2) by (intro; apply HNC; subst; Col).
    assert_cols; ColR.
    }
   I; right; right; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet R A X1
  Bet Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with X1.

    {
    apply l9_2; apply l9_8_2 with P.

      {
      split; Col.
      split; try ( Q; Col).
      intro; assert (R = X1) by (assert_diffs; assert_cols; apply l6_21 with A R Q R; Col);
      treat_equalities; apply HABR; Col.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by Col.
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HNC); treat_equalities; Col.
        split; try (intro; apply HBQR); treat_equalities; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R Q) by Col.
        assert (H3 : Col B X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HABQ); treat_equalities; Col.
        split; try (intro; apply HBQR); treat_equalities; Col.
        }
      }
    }

    {
    apply one_side_symmetry.
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R R) by Col.
    assert (H3 : Col A X1 R) by (assert_cols; Col).
    assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; apply HABR); treat_equalities; Col.
    split; try (intro; apply HABR); treat_equalities; Col.
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; assert_cols; Col.
Qed.

Lemma coplanar_trans_1_aux_3_1_2_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet R A X1
  Bet B X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with X1.

    {
    apply l9_2; apply l9_8_2 with P.

      {
      split; Col.
      split; try ( Q; Col).
      intro; assert (R = X1) by (assert_diffs; assert_cols; apply l6_21 with A R Q R; Col);
      treat_equalities; apply HABR; Col.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by Col.
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HNC); treat_equalities; Col.
        split; try (intro; apply HBQR); treat_equalities; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R Q) by Col.
        assert (H3 : Col B X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HABQ); treat_equalities; Col.
        split; Between.
        intro; subst; apply HNC; assert_cols; Col.
        }
      }
    }

    {
    apply one_side_symmetry.
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R R) by Col.
    assert (H3 : Col A X1 R) by (assert_cols; Col).
    assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; apply HABR); treat_equalities; Col.
    split; try (intro; apply HABR); treat_equalities; Col.
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; assert_cols; Col.
Qed.

Lemma coplanar_trans_1_aux_3_1_2_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet R A X1
  Bet X2 Q B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
apply between_symmetry in HCol4.
assert (H := outer_pasch R B X2 P Q HCol2 HCol4); destruct H as [I [HRIB HPQI]].
assert (HElim : Bet Q I X1 Bet Q X1 I) by (apply l5_2 with P; assert_diffs; Between).
elim HElim; clear HElim; intro HQX1I.

  {
  assert (HTS : TS R B A Q).
    {
    elim (eq_dec_points R X1); intro HRX1.

      {
      exfalso; apply HNC; subst; Col.
      }

      {
      apply l9_8_2 with X1.

        {
        split; try (intro; apply HABR; assert_cols; ColR).
        split; Col.
         I; assert_cols; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by Col.
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        }
      }
    }
    destruct HTS as [H1 [H2 [I' [HRBI' HAQI']]]]; clear H1; clear H2.
     I'; right; left; assert_cols; Col.
  }

  {
  apply between_symmetry in HRIB.
  assert (H := outer_pasch B Q I R X1 HRIB HQX1I); destruct H as [I' [HQI'B HRX1I']].
   I'; right; right.
  assert (Col R A I').
    {
    assert (R X1) by (intro; subst; apply HNC; assert_cols; Col); assert_cols; ColR.
    }
  assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col Q B X2
  Bet P Q X1
  Bet R X2 P
  Bet R A X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_3_1_2_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_3_1_2_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_1_2_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet A X1 R
  Bet Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with X1.

    {
    apply l9_2; apply l9_8_2 with P.

      {
      split; Col.
      split; try ( Q; Col).
      intro; assert (R = X1) by (assert_diffs; assert_cols; apply l6_21 with A R Q R; Col);
      treat_equalities; apply HNC; Col.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by Col.
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HNC); treat_equalities; Col.
        split; try (intro; apply HBQR); treat_equalities; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R Q) by Col.
        assert (H3 : Col B X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HABQ); treat_equalities; Col.
        split; Between.
        intro; subst; apply HNC; assert_cols; Col.
        }
      }
    }

    {
    apply one_side_symmetry.
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R R) by Col.
    assert (H3 : Col A X1 R) by (assert_cols; Col).
    assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; apply HABR); treat_equalities; Col.
    split; try (intro; apply HNC); treat_equalities; Col.
    Between.
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; assert_cols; Col.
Qed.

Lemma coplanar_trans_1_aux_3_1_2_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet A X1 R
  Bet B X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with X1.

    {
    apply l9_2; apply l9_8_2 with P.

      {
      split; Col.
      split; try ( Q; Col).
      intro; assert (R = X1) by (assert_diffs; assert_cols; apply l6_21 with A R Q R; Col);
      treat_equalities; apply HNC; Col.
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by Col.
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HNC); treat_equalities; Col.
        split; try (intro; apply HBQR); treat_equalities; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R Q) by Col.
        assert (H3 : Col B X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; apply HABQ); treat_equalities; Col.
        split; Between.
        intro; subst; apply HNC; assert_cols; Col.
        }
      }
    }

    {
    apply one_side_symmetry.
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R R) by Col.
    assert (H3 : Col A X1 R) by (assert_cols; Col).
    assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; apply HABR); treat_equalities; Col.
    split; try (intro; apply HNC); treat_equalities; Col.
    Between.
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; assert_cols; Col.
Qed.

Lemma coplanar_trans_1_aux_3_1_2_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet A X1 R
  Bet X2 Q B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
apply between_symmetry in HCol4.
assert (H := outer_pasch R B X2 P Q HCol2 HCol4); destruct H as [I [HRIB HPQI]].
assert (HElim : Bet Q I X1 Bet Q X1 I) by (apply l5_2 with P; assert_diffs; Between).
elim HElim; clear HElim; intro HQX1I.

  {
  assert (HTS : TS R B A Q).
    {
    elim (eq_dec_points R X1); intro HRX1.

      {
      exfalso; apply HNC; subst; Col.
      }

      {
      apply l9_8_2 with X1.

        {
        split; try (intro; apply HABR; assert_cols; ColR).
        split; Col.
         I; assert_cols; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by Col.
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; Between.
        }
      }
    }
    destruct HTS as [H1 [H2 [I' [HRBI' HAQI']]]]; clear H1; clear H2.
     I'; right; left; assert_cols; Col.
  }

  {
  apply between_symmetry in HRIB.
  assert (H := outer_pasch B Q I R X1 HRIB HQX1I); destruct H as [I' [HQI'B HRX1I']].
   I'; right; right.
  assert (Col R A I').
    {
    assert (R X1) by (intro; subst; apply HNC; assert_cols; Col); assert_cols; ColR.
    }
  assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col Q B X2
  Bet P Q X1
  Bet R X2 P
  Bet A X1 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_3_1_2_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_3_1_2_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_1_2_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet X1 R A
  Bet Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X1); intro HRX1.

  {
  exfalso; apply HNC; subst; Col.
  }

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_8_2 with X1.

      {
      split; try (intro; apply HABR; assert_cols; ColR).
      split; Col.
       R; Col.
      }

      {
      apply between_symmetry in HCol2.
      assert (H := outer_pasch P Q X2 R B HCol2 HCol4); destruct H as [I [HPIQ HRBI]].
      assert (HIQX1 : Bet I Q X1) by eBetween.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B I) by (assert_cols; Col).
      assert (H3 : Col X1 Q I) by (assert_cols; Col).
      assert (H := l9_19 R B X1 Q I H1 H2 H3); rewrite H.
      split; try (intro; apply HABR; assert_cols; ColR).
      split; try (intro; apply HAQR; treat_equalities; assert_cols; Col).
      split; try (intro; apply HBQR; treat_equalities); Col.
      }
    }
  destruct HTS as [H1 [H2 [I [HRBI HAQI]]]]; clear H1; clear H2.
   I; right; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet X1 R A
  Bet B X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := inner_pasch P A X1 Q R HCol1 (between_symmetry X1 R A HCol3));
destruct H as [I [HQIA HRIP]]; assert (HElim := l5_3 _ _ _ _ HCol2 HRIP).
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  elim HElim; clear HElim; intro HRX2I.

    {
    assert (HTS : TS Q B R A).
      {
      apply l9_31.

        {
        apply one_side_transitivity with P.

          {
          apply one_side_transitivity with X2.

            {
            assert (H1 : Q R) by (assert_diffs; auto).
            assert (H2 : Col Q R Q) by (assert_cols; Col).
            assert (H3 : Col B X2 Q) by (assert_cols; Col).
            assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
            split; Col.
            split; try (assert_diffs; Col).
            split; try (intro; apply HNC; subst; Col).
            Between.
            }

            {
            apply one_side_symmetry.
            assert (H1 : Q R) by (assert_diffs; auto).
            assert (H2 : Col Q R R) by (assert_cols; Col).
            assert (H3 : Col P X2 R) by (assert_cols; Col).
            assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
            split; Col.
            split; try (assert_diffs; Col).
            split; try (intro; apply HBQR; subst; Col).
            Between.
            }
          }

          {
          elim (eq_dec_points R X1); intro HRX1; treat_equalities.

            {
            exfalso; apply HNC; assert_cols; Col.
            }

            {
             X1; split.

              {
              split; Col.
              split; try (intro; apply HAQR; assert_cols; ColR).
               Q; Col.
              }

              {
              split; Col.
              split; try (intro; apply HAQR; assert_cols; ColR).
               R; split; Col; Between.
              }
            }
          }
        }

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by (assert_cols; Col).
          assert (H3 : Col B X2 Q) by (assert_cols; Col).
          assert (H := l9_19 Q A B X2 Q H1 H2 H3); rewrite H.
          split; Col.
          split; try (assert_diffs; Col).
          split; try (intro; apply HNC; subst; Col).
          Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A I) by (assert_cols; Col).
          assert (H3 : Col R X2 I) by (assert_cols; Col).
          assert (H := l9_19 Q A R X2 I H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; apply HAQR; Col).
          split; Between.
          intro; treat_equalities; apply HABQ; assert_cols; ColR.
          }
        }
      }
      destruct HTS as [H1 [H2 [I' [HQBI' HRAI']]]]; clear H1; clear H2.
       I'; right; right; assert_cols; Col.
    }

    {
    assert (HTS : TS Q A B R).
      {
      apply l9_8_2 with X2.

        {
        split; try (intro; apply HABQ; assert_cols; ColR).
        split; Col.
         I; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by (assert_cols; Col).
        assert (H3 : Col B X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q A B X2 Q H1 H2 H3); rewrite H.
        split; Col.
        split; try (assert_diffs; Col).
        split; Between.
        }
      }
    destruct HTS as [H1 [H2 [I' [HQAI' HRBI']]]]; clear H1; clear H2.
     I'; right; left; assert_cols; Col.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet P Q X1
  Bet R X2 P
  Bet X1 R A
  Bet X2 Q B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  assert (HTS : TS Q R A B).
    {
    apply l9_8_2 with X2.

      {
      split; try (intro; apply HBQR; assert_cols; ColR).
      split; Col.
       Q; Col.
      }

      {
      apply one_side_transitivity with P.

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (assert_diffs; Col).
        split; try (intro; subst; apply HBQR; assert_cols; Col).
        Between.
        }

        {
        elim (eq_dec_points R X1); intro HRX1; treat_equalities.

          {
          exfalso; apply HNC; assert_cols; Col.
          }

          {
           X1; split.

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             Q; Col.
            }

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             R; split; Col; Between.
            }
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col Q B X2
  Bet P Q X1
  Bet R X2 P
  Bet X1 R A
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_3_1_2_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_3_1_2_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_1_2_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col R A X1
  Col Q B X2
  Bet P Q X1
  Bet R X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_3_1_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_3_1_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_1_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col R A X1
  Col Q B X2
  Bet P Q X1
  Bet X2 P R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol3 HCol4 HCol1 HCol2.
assert (H := outer_pasch R X1 P X2 Q (between_symmetry X2 P R HCol2) (between_symmetry P Q X1 HCol1));
destruct H as [I [HRX1I HQX2I]].
I; right; right.
elim (eq_dec_points X2 Q); intro HQX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  elim (eq_dec_points R X1); intro HRX1; treat_equalities.

    {
    exfalso; apply HNC; assert_cols; Col.
    }

    {
    split; assert_cols; ColR.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col R A X1
  Col Q B X2
  Bet Q X1 P
  Bet R X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol3 HCol4 HCol1 HCol2.
assert (H := inner_pasch Q R P X1 X2 HCol1 HCol2); destruct H as [I [HRX1I HQX2I]].
elim (eq_dec_points R X1); intro HRX1; elim (eq_dec_points Q X2); intro HQX2;
treat_equalities; Cop.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
   I; right; right; assert_cols; split; ColR.
  }
Qed.

Lemma coplanar_trans_1_aux_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col R A X1
  Col Q B X2
  Bet Q X1 P
  Bet X2 P R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol3 HCol4 HCol1 HCol2.
assert (H := outer_pasch X2 Q P R X1 HCol2 HCol1); destruct H as [I [HRX1I HQX2I]].
elim (eq_dec_points R X1); intro HRX1; elim (eq_dec_points Q X2); intro HQX2;
treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
   I; right; right; assert_cols; split; ColR.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet R A X1
  Bet Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points B X2); intro HBX2; elim (eq_dec_points R X1); intro HRX1; treat_equalities.

  {
  exfalso; apply HABR; Col.
  }

  {
  assert (H := inner_pasch Q R X1 P A (between_symmetry X1 P Q HCol1) HCol3);
  destruct H as [I [HPRI HQAI]]; I; right; left; assert_diffs; assert_cols; split; ColR.
  }

  {
  Cop.
  }

  {
  assert (HTS : TS R B A Q).
    {
    apply l9_8_2 with X1.

      {
      apply l9_8_2 with X2.

        {
        split; try (intro; apply HBQR; assert_cols; ColR).
        split; Col.
         B; split; Col; Between.
        }

        {
        apply one_side_transitivity with P.

          {
          apply one_side_symmetry.
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by (assert_cols; Col).
          assert (H3 : Col P X2 R) by (assert_cols; Col).
          assert (H := l9_19 R B P X2 R H1 H2 H3); rewrite H.
          split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
          split; assert_diffs; Col.
          split; try (intro; treat_equalities); Between.
          }

          {
          assert (H := inner_pasch Q R X2 B P HCol4 (between_symmetry X2 P R HCol2)).
          destruct H as [I [HRBI HPQI]].
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B I) by (assert_cols; Col).
          assert (H3 : Col P X1 I) by (assert_diffs; assert_cols; ColR).
          assert (H := l9_19 R B P X1 I H1 H2 H3); rewrite H.
          split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
          split; try (intro; treat_equalities; apply HNC; assert_diffs; assert_cols; ColR).
          split; try (intro; treat_equalities; apply HAPR; Col).
          left; eBetween.
          }
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B R) by (assert_cols; Col).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    }
  destruct HTS as [H1 [H2 [I [HRBI HAQI]]]]; clear H1; clear H2.
   I; right; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet R A X1
  Bet B X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; ColR.
  }

  {
  assert (HTS : TS Q A B R).
    {
    apply l9_8_2 with X2.

      {
      split; try (intro; assert_cols; apply HABQ; ColR).
      split; Col.
      destruct (inner_pasch Q R X1 P A (between_symmetry X1 P Q HCol1) HCol3) as [I [HPRI HQAI]].
       I; split; Col.
      eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by (assert_cols; Col).
      assert (H3 : Col B X2 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A B X2 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; Col.
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HRBI HAQI]]]]; clear H1; clear H2.
   I; right; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet R A X1
  Bet X2 Q B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; ColR.
  }

  {
  assert (HTS : TS Q R A B).
    {
    apply l9_8_2 with X2.

      {
      split; try (intro; apply HBQR; assert_cols; ColR).
      split; Col.
       Q; split; Col; Between.
      }

      {
      apply one_side_transitivity with P.

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R Q) by (assert_cols; Col).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; try (intro; treat_equalities); Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R R) by (assert_cols; Col).
          assert (H3 : Col A X1 R) by (assert_cols; Col).
          assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col Q B X2
  Bet X1 P Q
  Bet X2 P R
  Bet R A X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_3_3_3_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_3_3_3_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_3_3_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet A X1 R
  Bet Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points B X2); intro HBX2; elim (eq_dec_points R X1); intro HRX1; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  assert (H := outer_pasch A Q X1 R P HCol3 (between_symmetry X1 P Q HCol1));
  destruct H as [I [HQAI HPRI]]; I; right; left; assert_diffs; assert_cols; split; ColR.
  }

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  assert (HTS : TS R B A Q).
    {
    apply l9_8_2 with X1.

      {
      apply l9_8_2 with X2.

        {
        split; try (intro; apply HBQR; assert_cols; ColR).
        split; Col.
         B; split; Col; Between.
        }

        {
        apply one_side_transitivity with P.

          {
          apply one_side_symmetry.
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by (assert_cols; Col).
          assert (H3 : Col P X2 R) by (assert_cols; Col).
          assert (H := l9_19 R B P X2 R H1 H2 H3); rewrite H.
          split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
          split; assert_diffs; Col.
          split; try (intro; treat_equalities); Between.
          }

          {
          assert (H := inner_pasch Q R X2 B P HCol4 (between_symmetry X2 P R HCol2)).
          destruct H as [I [HRBI HPQI]].
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B I) by (assert_cols; Col).
          assert (H3 : Col P X1 I) by (assert_diffs; assert_cols; ColR).
          assert (H := l9_19 R B P X1 I H1 H2 H3); rewrite H.
          split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
          split; try (intro; treat_equalities; apply HNC; assert_diffs; assert_cols; ColR).
          split; try (intro; treat_equalities; apply HAPR; Col).
          left; eBetween.
          }
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B R) by (assert_cols; Col).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col; Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HRBI HAQI]]]]; clear H1; clear H2.
   I; right; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet A X1 R
  Bet B X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch B R X2 Q P HCol4 (between_symmetry X2 P R HCol2));
destruct H as [I [HRBI HPQI]]; assert (HPQ : Q P) by (assert_diffs; Col).
assert (H := l5_2 Q P X1 I HPQ (between_symmetry X1 P Q HCol1) HPQI); clear HPQ;
elim (eq_dec_points P I); intro HPI; treat_equalities.

  {
  elim (eq_dec_points B X2); intro; treat_equalities.

    {
    clear H; assert (H := outer_pasch A Q X1 R P HCol3 (between_symmetry X1 P Q HCol1));
    destruct H as [I [HQAI HPRI]].
     I; right; left; assert_diffs; assert_cols; split; ColR.
    }

    {
    exfalso; apply HNC; assert_diffs; assert_cols; ColR.
    }
  }

  {
  elim (eq_dec_points X1 I); intro HX1I; treat_equalities.

    {
    elim (eq_dec_points R X1); intro; treat_equalities.

      {
      exfalso; apply HNC; assert_cols; Col.
      }

      {
      exfalso; apply HABR; assert_cols; ColR.
      }
    }

    {
    elim H; clear H; intro HPX1I.

      {
      assert (HTS : TS R A Q B).
        {
        apply l9_31.

          {
          apply one_side_transitivity with P.

            {
            apply one_side_transitivity with X1.

              {
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q R) by (assert_cols; Col).
              assert (H3 : Col A X1 R) by (assert_cols; Col).
              assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities); Between.
              apply HNC; assert_cols; ColR.
              }

              {
              apply one_side_symmetry.
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q Q) by (assert_cols; Col).
              assert (H3 : Col P X1 Q) by (assert_cols; Col).
              assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities); Between.
              }
            }

            {
            apply one_side_transitivity with X2.

              {
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q R) by (assert_cols; Col).
              assert (H3 : Col P X2 R) by (assert_cols; Col).
              assert (H := l9_19 R Q P X2 R H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities); Between.
              }

              {
              apply one_side_symmetry.
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q Q) by (assert_cols; Col).
              assert (H3 : Col B X2 Q) by (assert_cols; Col).
              assert (H := l9_19 R Q B X2 Q H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities); Between.
              apply HNC; assert_cols; Col.
              }
            }
          }

          {
          apply one_side_transitivity with P.

            {
            apply one_side_transitivity with X1.

              {
              assert (H1 : R B) by (assert_diffs; auto).
              assert (H2 : Col R B R) by (assert_cols; Col).
              assert (H3 : Col A X1 R) by (assert_cols; Col).
              assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities); Between.
              apply HNC; assert_cols; ColR.
              }

              {
              apply one_side_symmetry.
              assert (H1 : R B) by (assert_diffs; auto).
              assert (H2 : Col R B I) by (assert_cols; Col).
              assert (H3 : Col P X1 I) by (assert_cols; Col).
              assert (H := l9_19 R B P X1 I H1 H2 H3); rewrite H.
              split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
              split; Col.
              split; Between.
              }
            }

            {
            assert (H1 : R B) by (assert_diffs; auto).
            assert (H2 : Col R B I) by (assert_cols; Col).
            assert (H3 : Col P Q I) by (assert_cols; Col).
            assert (H := l9_19 R B P Q I H1 H2 H3); rewrite H.
            split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
            split; Col.
            split; try (intro; treat_equalities; apply HNC; Col).
            Between.
            }
          }
        }
      destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
       I'; right; right; assert_cols; Col.
      }

      {
      elim (eq_dec_points R X1); intro HRX1; treat_equalities.

        {
        exfalso; apply HNC; assert_cols; Col.
        }

        {
        assert (HTS : TS R B A Q).
          {
          apply l9_8_2 with X1.

            {
            split; try (intro; apply HABR; assert_cols; ColR).
            split; Col.
             I; assert_cols; split; Col; eBetween.
            }

            {
            apply one_side_symmetry.
            assert (H1 : R B) by (assert_diffs; auto).
            assert (H2 : Col R B R) by (assert_cols; Col).
            assert (H3 : Col A X1 R) by (assert_cols; Col).
            assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
            split; Col.
            split; assert_diffs; Col.
            split; Between.
            }
          }
        destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
         I'; right; left; assert_cols; Col.
        }
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet A X1 R
  Bet X2 Q B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; ColR.
  }

  {
  assert (HTS : TS Q R A B).
    {
    apply l9_8_2 with X2.

      {
      split; try (intro; apply HBQR; assert_cols; ColR).
      split; Col.
       Q; split; Col; Between.
      }

      {
      apply one_side_transitivity with P.

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col P X2 R) by (assert_cols; Col).
        assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R Q) by (assert_cols; Col).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; try (intro; treat_equalities); Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R R) by (assert_cols; Col).
          assert (H3 : Col A X1 R) by (assert_cols; Col).
          assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; Between.
          intro; subst; apply HNC; assert_cols; Col.
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col Q B X2
  Bet X1 P Q
  Bet X2 P R
  Bet A X1 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_3_3_3_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_3_3_3_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_3_3_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet X1 R A
  Bet Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X1); intro HRX1; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; ColR.
  }

  {
  assert (HTS : TS Q R B A).
    {
    apply l9_8_2 with X1.

      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       R; split; Col; Between.
      }

      {
      apply one_side_transitivity with P.

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R Q) by (assert_cols; Col).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R R) by (assert_cols; Col).
          assert (H3 : Col P X2 R) by (assert_cols; Col).
          assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; try (intro; treat_equalities); Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R Q) by (assert_cols; Col).
          assert (H3 : Col B X2 Q) by (assert_cols; Col).
          assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet X1 R A
  Bet B X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X1); intro HRX1; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; ColR.
  }

  {
  assert (HTS : TS Q R B A).
    {
    apply l9_8_2 with X1.

      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       R; split; Col; Between.
      }

      {
      apply one_side_transitivity with P.

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R Q) by (assert_cols; Col).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }

        {
        apply one_side_transitivity with X2.

          {
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R R) by (assert_cols; Col).
          assert (H3 : Col P X2 R) by (assert_cols; Col).
          assert (H := l9_19 Q R P X2 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; try (intro; treat_equalities); Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R Q) by (assert_cols; Col).
          assert (H3 : Col B X2 Q) by (assert_cols; Col).
          assert (H := l9_19 Q R B X2 Q H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; Between.
          intro; subst; apply HNC; assert_cols; Col.
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; assert_cols; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Bet X1 P Q
  Bet X2 P R
  Bet X1 R A
  Bet X2 Q B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol1 HCol2 HCol3 HCol4.
assert (H1 := inner_pasch Q A X1 P R); assert (H2 := inner_pasch R B X2 P Q);
assert (H1' := H1 (between_symmetry X1 P Q HCol1) (between_symmetry X1 R A HCol3));
assert (H2' := H2 (between_symmetry X2 P R HCol2) (between_symmetry X2 Q B HCol4));
destruct H1' as [I1 [HPAI1 HQRI1]]; clear H1;
destruct H2' as [I2 [HPBI2 HQRI2]]; clear H2.
assert (H := l5_3 Q I1 I2 R (between_symmetry R I1 Q HQRI1) HQRI2);
elim H; clear H; intro HQI1I2.

  {
  assert (H := outer_pasch B Q I2 P I1 (between_symmetry P I2 B HPBI2) HQI1I2);
  destruct H as [I [HQBI HPI1I]].
  elim (eq_dec_points P I1); intro HPI1; treat_equalities.

    {
    exfalso; apply HNC; assert_cols; Col.
    }

    {
    assert (H := l5_1 P I1 A I HPI1 HPAI1 HPI1I); elim H; clear H; intro HPAI.

      {
      assert (HTS : TS Q A B R).
        {
        apply l9_31.

          {
          apply one_side_transitivity with P.

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B I) by (assert_cols; Col).
            assert (H3 : Col A P I) by (assert_cols; Col).
            assert (H := l9_19 Q B A P I H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; apply HABQ; Col).
            split; try (intro; treat_equalities); Between.
            }

            {
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B X2) by (assert_cols; Col).
            assert (H3 : Col P R X2) by (assert_cols; Col).
            assert (H := l9_19 Q B P R X2 H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; apply HBPQ; Col).
            split; try (intro; treat_equalities); Between.
            }
          }

          {
           P; split.

            {
            split; Col.
            split; Col.
             I1; assert_cols; split; Col; Between.
            }

            {
            split; Col.
            split; Col.
             I2; assert_cols; split; Col; Between.
            }
          }
        }
      destruct HTS as [H1 [H2 [I' [HQAI' HRBI']]]]; clear H1; clear H2.
       I'; right; left; assert_cols; Col.
      }

      {
      assert (HTS : TS Q B R A).
        {
        apply l9_8_2 with P.

          {
          split; Col.
          split; Col.
           I; assert_cols; split; Col; Between.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B X2) by (assert_cols; Col).
          assert (H3 : Col P R X2) by (assert_cols; Col).
          assert (H := l9_19 Q B P R X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; apply HBPQ; Col).
          split; try (intro; treat_equalities); Between.
          }
        }
      destruct HTS as [H1 [H2 [I' [HQBI' HRAI']]]]; clear H1; clear H2.
       I'; right; right; assert_cols; Col.
      }
    }
  }

  {
  assert (H := outer_pasch A Q I1 P I2 (between_symmetry P I1 A HPAI1) HQI1I2);
  destruct H as [I [HQAI HPI2I]].
  elim (eq_dec_points P I2); intro HPI2; treat_equalities.

    {
    exfalso; apply HNC; assert_cols; Col.
    }

    {
    assert (H := l5_1 P I2 B I HPI2 HPBI2 HPI2I); elim H; clear H; intro HPBI.

      {
      assert (HTS : TS Q B A R).
        {
        apply l9_31.

          {
          apply one_side_transitivity with P.

            {
            assert (H1 : Q A) by (assert_diffs; auto).
            assert (H2 : Col Q A I) by (assert_cols; Col).
            assert (H3 : Col B P I) by (assert_cols; Col).
            assert (H := l9_19 Q A B P I H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; apply HABQ; Col).
            split; try (intro; treat_equalities); Between.
            }

            {
            apply one_side_transitivity with I1.

              {
              assert (H1 : Q A) by (assert_diffs; auto).
              assert (H2 : Col Q A A) by (assert_cols; Col).
              assert (H3 : Col P I1 A) by (assert_cols; Col).
              assert (H := l9_19 Q A P I1 A H1 H2 H3); rewrite H.
              elim (eq_dec_points A X1); intro HAX1; treat_equalities.

                {
                exfalso; apply HNC; assert_cols; Col.
                }

                {
                split; try (intro; assert_diffs; assert_cols; apply HNC; ColR).
                split; try (intro; treat_equalities; apply HNC; assert_cols; Col).
                split; try (intro; treat_equalities; apply HAQR; assert_cols; Col).
                Between.
                }
              }

              {
              apply one_side_symmetry.
              assert (H1 : Q A) by (assert_diffs; auto).
              assert (H2 : Col Q A Q) by (assert_cols; Col).
              assert (H3 : Col R I1 Q) by (assert_cols; Col).
              assert (H := l9_19 Q A R I1 Q H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities; apply HBPQ; assert_cols; ColR).
              Between.
              }
            }
          }

          {
           P; split.

            {
            split; Col.
            split; Col.
             I2; assert_cols; split; Col; Between.
            }

            {
            split; Col.
            split; Col.
             I1; assert_cols; split; Col; Between.
            }
          }
        }
      destruct HTS as [H1 [H2 [I' [HQBI' HRAI']]]]; clear H1; clear H2.
       I'; right; right; assert_cols; Col.
      }

      {
      assert (HTS : TS Q A R B).
        {
        apply l9_8_2 with P.

          {
          assert_diffs.
          elim (eq_dec_points P I); intro HPI; treat_equalities.

            {
            intuition.
            }

            {
            split; try (intro; apply HABQ; assert_cols; ColR).
            split; Col.
             I; assert_cols; split; Col; Between.
            }
          }

          {
          apply one_side_transitivity with X1.

            {
            assert (H1 : Q A) by (assert_diffs; auto).
            assert (H2 : Col Q A Q) by (assert_cols; Col).
            assert (H3 : Col P X1 Q) by (assert_cols; Col).
            assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
            elim (eq_dec_points P I); intro HPI; treat_equalities.

              {
              intuition.
              }

              {
              split; try (intro; apply HABQ; assert_cols; ColR).
              split; assert_diffs; Col.
              split; try (intro; treat_equalities); Between.
              }
            }

            {
            apply one_side_symmetry.
            assert (H1 : Q A) by (assert_diffs; auto).
            assert (H2 : Col Q A A) by (assert_cols; Col).
            assert (H3 : Col R X1 A) by (assert_cols; Col).
            assert (H := l9_19 Q A R X1 A H1 H2 H3); rewrite H.
            split; Col.
            split; assert_diffs; Col.
            split; try (intro; treat_equalities); Between.
            }
          }
        }
      destruct HTS as [H1 [H2 [I' [HQAI' HRBI']]]]; clear H1; clear H2.
       I'; right; left; assert_cols; Col.
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col Q B X2
  Bet X1 P Q
  Bet X2 P R
  Bet X1 R A
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_3_3_3_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_3_3_3_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_3_3_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A P R
  ¬ Col A Q R
  ¬ Col B P Q
  ¬ Col B Q R
  Col R A X1
  Col Q B X2
  Bet X1 P Q
  Bet X2 P R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAPR HAQR HBPQ HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_3_3_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_3_3_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_3_3_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col R A X1
  Col P R X2
  Col Q B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (Col_dec A P R); intro HAPR.

  {
   X2; right; right.
  assert_diffs; split; ColR.
  }

  {
  elim (Col_dec B P Q); intro HBPQ.

    {
     X1; right; right.
    assert_diffs; split; ColR.
    }

    {
    elim HCol1; clear HCol1; intro HCol1; elim HCol3; clear HCol3; intro HCol3.

      {
      apply coplanar_trans_1_aux_3_1_1 with P X1 X2; assumption.
      }

      {
      elim HCol3; clear HCol3; intro HCol3.

        {
        apply coplanar_trans_1_aux_3_1_2 with P X1 X2; assumption.
        }

        {
        apply coplanar_trans_1_aux_3_1_3 with P X1 X2; assumption.
        }
      }

      {
      elim HCol1; clear HCol1; intro HCol1.

        {
        assert (H : Coplanar R Q B A) by (apply coplanar_trans_1_aux_3_1_2 with P X2 X1; Col); Cop.
        }

        {
        assert (H : Coplanar R Q B A) by (apply coplanar_trans_1_aux_3_1_3 with P X2 X1; Col); Cop.
        }
      }

      {
      elim HCol1; clear HCol1; intro HCol1; elim HCol3; clear HCol3; intro HCol3.

        {
        apply coplanar_trans_1_aux_3_2_2 with P X1 X2; assumption.
        }

        {
        apply coplanar_trans_1_aux_3_2_3 with P X1 X2; assumption.
        }

        {
        assert (H : Coplanar R Q B A) by (apply coplanar_trans_1_aux_3_2_3 with P X2 X1; Col); Cop.
        }

        {
        apply coplanar_trans_1_aux_3_3_3 with P X1 X2; assumption.
        }
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet R A X1
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

  {
  exfalso; apply HAQR; assert_cols; Col.
  }

  {
  assert (HTS : TS Q R B A).
    {
    apply l9_8_2 with P.

      {
      apply l9_2; apply l9_8_2 with X1.

        {
        split; try (intro; apply HNC; assert_cols; ColR).
        split; Col.
         Q; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        }
      }

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R X2) by (assert_cols; Col).
      assert (H3 : Col P B X2) by (assert_cols; Col).
      assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; apply HNC; Col).
      split; try (intro; treat_equalities; apply HBQR; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet R A X1
  Bet B X2 P
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X1); intro HRX1; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_31.

      {
       P; split.

        {
        apply l9_8_2 with X1.

          {
          split; try (intro; apply HAQR; assert_cols; ColR).
          split; Col.
           Q; split; Col; Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q R) by (assert_cols; Col).
          assert (H3 : Col A X1 R) by (assert_cols; Col).
          assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          }
        }

        {
        split; Col.
        split; Col.
         X2; assert_cols; split; Col; Between.
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        }

        {
        apply one_side_symmetry.
        assert (H := outer_pasch P Q X2 B R (between_symmetry B X2 P HCol3) HCol4);
        destruct H as [I [HPQI HRBI]].
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B I) by (assert_cols; Col).
        assert (H3 : Col Q X1 I) by (assert_diffs; assert_cols; ColR).
        assert (H := l9_19 R B Q X1 I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; apply HBQR; Col).
        split; try (intro; treat_equalities; apply HABR; assert_cols; ColR).
        eBetween.
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
   I; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet R A X1
  Bet B X2 P
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch X1 R Q P X2 (between_symmetry P Q X1 HCol1) HCol4);
destruct H as [I [HRX1I HPX2I]].
elim (eq_dec_points P X2); intro HPX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  assert (H := l5_2 P X2 B I HPX2 (between_symmetry B X2 P HCol3) HPX2I);
  elim H; clear H; intro HX2BI.

    {
    assert (HTS : TS R B Q A).
      {
      apply l9_31.

        {
         P; split.

          {
          split; Col.
          split; Col.
           X2; assert_cols; split; Col; Between.
          }

          {
          split; Col.
          split; Col.
          destruct (inner_pasch P R X1 Q A HCol1 HCol2) as [I' [HQRI' HPAI']].
           I'; assert_cols; split; Col.
          }
        }

        {
        apply one_side_transitivity with P.

          {
          elim (eq_dec_points R X1); intro HRX1; treat_equalities.

            {
            exfalso; apply HABR; Col.
            }

            {
            assert (H1 : R A) by (assert_diffs; auto).
            assert (H2 : Col R A I) by (assert_cols; ColR).
            assert (H3 : Col B P I) by (assert_cols; ColR).
            assert (H := l9_19 R A B P I H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; apply HABR; Col).
            split; try (intro; treat_equalities; apply HNC; assert_cols; Col).
            eBetween.
            }
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A X1) by (assert_cols; Col).
          assert (H3 : Col P Q X1) by (assert_cols; ColR).
          assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
          elim (eq_dec_points P X1); intro HPX1; treat_equalities.

            {
            exfalso; apply HNC; Col.
            }

            {
            split; try (intro; apply HNC; assert_cols; ColR).
            split; Col.
            split; try (intro; treat_equalities; apply HAQR; Col).
            Between.
            }
          }
        }
      }
    destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
     I'; right; left; split; Col.
    }

    {
    assert (HTS : TS R A Q B).
      {
      apply l9_8_2 with P.

        {
        assert_diffs.
        elim (eq_dec_points P X1); intro HPX1; treat_equalities.

          {
          exfalso; apply HNC; Col.
          }

          {
          split; try (intro; apply HNC; assert_cols; ColR).
          split; Col.
          elim (eq_dec_points R X1); intro HRX1; treat_equalities.

            {
            exfalso; apply HABR; Col.
            }

            {
             I; assert_cols; split; eBetween; ColR.
            }
          }
        }

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col P Q X1) by (assert_cols; ColR).
        assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
        elim (eq_dec_points P X1); intro HPX1; treat_equalities.

          {
          exfalso; apply HNC; Col.
          }

          {
          split; try (intro; apply HNC; assert_cols; ColR).
          split; Col.
          split; try (intro; treat_equalities; apply HAQR; Col).
          Between.
          }
        }
      }
    destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
     I'; right; right; split; Col.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet R A X1
  Bet B X2 P
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X1); intro HRX1; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  assert (HTS : TS Q A R B).
    {
    apply l9_31.

      {
       P; split.

        {
        apply l9_8_2 with X1.

          {
          split; try (intro; apply HAQR; assert_cols; ColR).
          split; Col.
           Q; split; Col; Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q R) by (assert_diffs; auto).
          assert (H2 : Col Q R R) by (assert_cols; Col).
          assert (H3 : Col A X1 R) by (assert_cols; Col).
          assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          }
        }

        {
        split; Col.
        split; Col.
         X2; assert_cols; split; Col; Between.
        }
      }

      {
      elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

        {
        assert (H1 : Q B) by (assert_diffs; auto).
        assert (H2 : Col Q B X1) by (assert_diffs; assert_cols; ColR).
        assert (H3 : Col A R X1) by (assert_cols; Col).
        assert (H := l9_19 Q B A R X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; apply HABQ; assert_cols; Col).
        Between.
        }

        {
        apply one_side_symmetry; apply l9_17 with X1; Col.
        assert (HBPQ : ¬ Col B P Q).
          {
          intro; apply HQX2; assert_cols; apply l6_21 with R Q P B; Col.
          intro; treat_equalities; apply HNC; Col.
          }
         P; split.

          {
          apply between_symmetry in HCol3; apply between_symmetry in HCol4.
          assert (H := outer_pasch P R X2 B Q HCol3 HCol4); destruct H as [I [HPRI HQBI]].
          split; Col.
          split; Col.
           I; assert_cols; split; Col; Between.
          }

          {
          elim (eq_dec_points Q X1); intro; treat_equalities.

            {
            exfalso; apply HAQR; assert_cols; Col.
            }

            {
            split; try (intro; apply HBPQ; assert_cols; ColR).
            split; Col.
             Q; split; Col; Between.
            }
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
   I; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet R A X1
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_1_1_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_1_1_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_1_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet R A X1
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

  {
  exfalso; apply HAQR; assert_cols; Col.
  }

  {
  assert (HTS : TS Q R B A).
    {
    apply l9_8_2 with P.

      {
      apply l9_2; apply l9_8_2 with X1.

        {
        split; try (intro; apply HNC; assert_cols; ColR).
        split; Col.
         Q; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        }
      }

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R X2) by (assert_cols; Col).
      assert (H3 : Col P B X2) by (assert_cols; Col).
      assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; apply HNC; Col).
      split; try (intro; treat_equalities; apply HBQR; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet P Q X1
  Bet R A X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_1_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_1_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet A X1 R
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

  {
  exfalso; apply HAQR; assert_cols; Col.
  }

  {
  assert (HTS : TS Q R B A).
    {
    apply l9_8_2 with P.

      {
      apply l9_2; apply l9_8_2 with X1.

        {
        split; try (intro; apply HNC; assert_cols; ColR).
        split; Col.
         Q; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }
      }

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R X2) by (assert_cols; Col).
      assert (H3 : Col P B X2) by (assert_cols; Col).
      assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; apply HNC; Col).
      split; try (intro; treat_equalities; apply HBQR; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_2_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet A X1 R
  Bet B X2 P
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A Q B).
  {
  elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    elim (eq_dec_points P X1); intro HPX1; treat_equalities.

      {
      intuition.
      }

      {
      assert (HAPR : ¬ Col A P R).
        {
        intro; apply HNC; assert_diffs; assert_cols; ColR.
        }
      apply l9_8_2 with P.

        {
        split; Col.
        split; Col.
         R; split; Col; Between.
        }

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col P Q X1) by (assert_cols; Col).
        assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
        split; Col.
        split; Col.
        split; try (intro; treat_equalities; apply HAQR; Col).
        Between.
        }
      }
    }

    {
    apply l9_2; apply l9_8_2 with X2.

      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       R; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H := outer_pasch P X2 Q X1 R HCol1 (between_symmetry Q R X2 HCol4)).
      destruct H as [I [HPX2I HRX1I]]; elim (eq_dec_points R X1); intro HRX1; treat_equalities.

        {
        exfalso; apply HNC; assert_cols; Col.
        }

        {
        elim (eq_dec_points P X2); intro HPX2; treat_equalities.

          {
          exfalso; apply HNC; assert_cols; Col.
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A I) by (assert_diffs; assert_cols; ColR).
          assert (H3 : Col B X2 I) by (assert_cols; ColR).
          assert (H := l9_19 R A B X2 I H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; apply HABR; Col).
          split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
          eBetween.
          }
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_1_2_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet A X1 R
  Bet B X2 P
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points P X2); intro HPX2; treat_equalities.

  {
  exfalso; apply HNC; assert_cols; Col.
  }

  {
  elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

    {
    exfalso; apply HAQR; assert_cols; Col.
    }

    {
    elim (eq_dec_points R X1); intro HRX1; treat_equalities.

      {
      exfalso; apply HNC; assert_cols; Col.
      }

      {
      assert (H := outer_pasch X1 R Q P X2 (between_symmetry P Q X1 HCol1) HCol4);
      destruct H as [I [HRX1I HPX2I]].
      elim (l5_2 P X2 B I HPX2 (between_symmetry B X2 P HCol3) HPX2I); intro HX2BI.

        {
        assert (HTS : TS R B Q A).
          {
          apply l9_31.

            {
            apply one_side_transitivity with X1.

              {
               P; split.

                {
                split; Col.
                split; Col.
                 X2; assert_cols; split; Col.
                }

                {
                apply l9_2.
                split; Col.
                split; try (intro; apply HNC; assert_cols; ColR).
                 Q; Col.
                }
              }

              {
              apply one_side_symmetry.
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q R) by Col.
              assert (H3 : Col A X1 R) by (assert_cols; ColR).
              assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              split; try (intro; treat_equalities; apply HNC; assert_cols; Col).
              Between.
              }
            }

            {
            apply one_side_transitivity with P.

              {
              assert (H1 : R A) by (assert_diffs; auto).
              assert (H2 : Col R A I) by (assert_cols; ColR).
              assert (H3 : Col B P I) by (assert_cols; ColR).
              assert (H := l9_19 R A B P I H1 H2 H3); rewrite H.
              split; Col.
              split; try (intro; treat_equalities; apply HABR; Col).
              split; try (intro; treat_equalities; apply HNC; assert_cols; Col).
              eBetween.
              }

              {
              assert (H1 : R A) by (assert_diffs; auto).
              assert (H2 : Col R A X1) by (assert_cols; Col).
              assert (H3 : Col P Q X1) by (assert_cols; Col).
              assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
              show_distinct P X1; try (apply HAQR; Col).
              split; try (intro; apply HAQR; assert_cols; ColR).
              split; Col.
              split; Between.
              }
            }
          }
        destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
         I'; right; left; split; Col.
        }

        {
        assert (HTS : TS R A Q B).
          {
          apply l9_8_2 with P.

            {
            show_distinct P X1; try (apply HAQR; Col).
            assert_diffs.
            split; try (intro; apply HAQR; assert_cols; ColR).
            split; Col.
             I; assert_cols; split; eBetween; ColR.
            }

            {
            assert (H1 : R A) by (assert_diffs; auto).
            assert (H2 : Col R A X1) by (assert_cols; Col).
            assert (H3 : Col P Q X1) by (assert_cols; Col).
            assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
            show_distinct P X1; try (apply HAQR; Col).
            split; try (intro; apply HAQR; assert_cols; ColR).
            split; Col.
            split; Between.
            }
          }
        destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
         I'; right; right; split; Col.
        }
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_2_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet A X1 R
  Bet B X2 P
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch B R X2 P Q HCol3 (between_symmetry X2 Q R HCol4));
destruct H as [I [HRBI HPQI]].
assert (HPQ : P Q) by (assert_diffs; Col).
assert (H := l5_2 P Q X1 I HPQ HCol1 HPQI); elim H; clear HPQ; clear H; intro HQX1I.

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_31.

      {
       P; split.

        {
        apply l9_8_2 with X1.

          {
          show_distinct Q X1; assert_cols; Col.
          split; try (intro; apply HNC; ColR).
          split; Col.
           Q; split; Col; Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q R) by (assert_cols; Col).
          assert (H3 : Col A X1 R) by (assert_cols; Col).
          assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
          split; Col.
          split; assert_diffs; Col.
          split; try (intro; treat_equalities; assert_cols); Between.
          }
        }

        {
        split; Col.
        split; Col.
         X2; assert_cols; split; Col.
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities; assert_cols); Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B I) by (assert_cols; Col).
        assert (H3 : Col Q X1 I) by (assert_cols; Col).
        assert (H := l9_19 R B Q X1 I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        show_distinct R X1; assert_cols; Col.
        split; try (intro; treat_equalities; apply HABR; ColR).
        Between.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }

  {
  assert (HTS : TS R B A Q).
    {
    apply l9_8_2 with X1.

      {
      show_distinct R X1; assert_cols; Col.
      split; try (intro; treat_equalities; apply HABR; ColR).
      split; Col.
       I; assert_cols; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B R) by (assert_cols; Col).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet A X1 R
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_1_2_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_1_2_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_2_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet A X1 R
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

  {
  exfalso; apply HAQR; assert_cols; Col.
  }

  {
  assert (HTS : TS Q R B A).
    {
    apply l9_8_2 with P.

      {
      apply l9_2; apply l9_8_2 with X1.

        {
        split; try (intro; apply HNC; assert_cols; ColR).
        split; Col.
         Q; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q R) by (assert_diffs; auto).
        assert (H2 : Col Q R R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }
      }

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R X2) by (assert_cols; Col).
      assert (H3 : Col P B X2) by (assert_cols; Col).
      assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; apply HNC; Col).
      split; try (intro; treat_equalities; apply HBQR; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
   I; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet P Q X1
  Bet A X1 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_1_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_1_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet P B X2
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch P X2 Q X1 R HCol1 (between_symmetry Q R X2 HCol4));
destruct H as [I[HPX2I HRX1I]].
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
assert (HRAI : Col R A I) by (assert_cols; ColR).
assert (H := l5_3 P B I X2 HCol3 HPX2I); elim H; clear H; intro HPBI.

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_31.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; Col).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
         X1; split.

          {
          split; Col.
          split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
           Q; Col.
          }

          {
          split; Col.
          split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
           R; split; Col; Between.
          }
        }
      }

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A I) by Col.
        assert (H3 : Col B P I) by (assert_cols; Col).
        assert (H := l9_19 R A B P I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col P Q X1) by (assert_cols; Col).
        assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
        show_distinct P X1; Col.
        split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
        split; Col.
        split; try (intro; treat_equalities; Col).
        Between.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_8_2 with P.

      {
      show_distinct P X1; Col.
      split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
      split; Col.
       I; split; Col.
      }

      {
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A X1) by (assert_cols; Col).
      assert (H3 : Col P Q X1) by (assert_cols; Col).
      assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
      show_distinct P X1; Col.
      split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
      split; Col.
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet P B X2
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
elim (eq_dec_points R X2); intro HRX2; treat_equalities.

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_8_2 with X1.

      {
      split; try (intro; apply HABR; assert_cols; ColR).
      split; Col.
       R; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B P) by (assert_cols; Col).
      assert (H3 : Col Q X1 P) by (assert_cols; Col).
      assert (H := l9_19 R B Q X1 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_31.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; Col).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
         X1; split.

          {
          split; Col.
          split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
           Q; Col.
          }

          {
          split; Col.
          split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
           R; split; Col; Between.
          }
        }
      }

      {
      assert (HOS : OS R A X2 Q).
        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; Col).
        assert (H3 : Col Q X2 R) by (assert_cols; Col).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities); Between.
        }
      apply one_side_transitivity with X2; Col.
      apply one_side_symmetry; apply l9_17 with P; Between.
      apply one_side_transitivity with Q; Col.
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A X1) by (assert_cols; Col).
      assert (H3 : Col P Q X1) by (assert_cols; Col).
      assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
      show_distinct P X1; Col.
      split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
      split; Col.
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet P B X2
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with P.

      {
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q X2) by (assert_cols; Col).
      assert (H3 : Col B P X2) by (assert_cols; Col).
      assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }

      {
       X1; split.

        {
        split; Col.
        split; try (intro; treat_equalities; apply HAQR; assert_diffs; assert_cols; ColR).
         Q; Col.
        }

        {
        split; Col.
        split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
         R; split; Col; Between.
        }
      }
    }

    {
    assert (HOS : OS R A X2 Q).
      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; Col).
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities); Between.
      }
    apply one_side_transitivity with X2; Col.
    apply one_side_symmetry; apply l9_17 with P; Between.
    apply one_side_transitivity with Q; Col.
    apply one_side_symmetry.
    assert (H1 : R A) by (assert_diffs; auto).
    assert (H2 : Col R A X1) by (assert_cols; Col).
    assert (H3 : Col P Q X1) by (assert_cols; Col).
    assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
    show_distinct P X1; Col.
    split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
    split; Col.
    split; try (intro; treat_equalities; Col).
    Between.
    }
  }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_1_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet X1 R A
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_1_3_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_1_3_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_3_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet B X2 P
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A Q B).
  {
  elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    elim (eq_dec_points P X1); intro HPX1; treat_equalities.

      {
      intuition.
      }

      {
      assert (HAPR : ¬ Col A P R).
        {
        intro; apply HNC; assert_diffs; assert_cols; ColR.
        }
      apply l9_8_2 with P.

        {
        split; Col.
        split; Col.
         R; split; Col; Between.
        }

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col P Q X1) by (assert_cols; Col).
        assert (H := l9_19 R A P Q X1 H1 H2 H3); rewrite H.
        split; Col.
        split; Col.
        split; try (intro; treat_equalities; apply HAQR; Col).
        Between.
        }
      }
    }

    {
    apply l9_2; apply l9_8_2 with X2.

      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       R; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H := outer_pasch P X2 Q X1 R HCol1 (between_symmetry Q R X2 HCol4)).
      destruct H as [I [HPX2I HRX1I]]; elim (eq_dec_points R X1); intro HRX1; treat_equalities.

        {
        exfalso; apply HNC; assert_cols; Col.
        }

        {
        elim (eq_dec_points P X2); intro HPX2; treat_equalities.

          {
          exfalso; apply HNC; assert_cols; Col.
          }

          {
          assert (H1 : R A) by (assert_diffs; auto).
          assert (H2 : Col R A I) by (assert_diffs; assert_cols; ColR).
          assert (H3 : Col B X2 I) by (assert_cols; ColR).
          assert (H := l9_19 R A B X2 I H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; apply HABR; Col).
          split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
          eBetween.
          }
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_1_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet B X2 P
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
     X1; split.

      {
      split; Col.
      split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
       Q; Col.
      }

      {
      split; Col.
      split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
       R; split; Col; Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_1_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet B X2 P
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
     X1; split.

      {
      split; Col.
      split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
       Q; Col.
      }

      {
      split; Col.
      split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
       R; split; Col; Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_1_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet X1 R A
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_1_3_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_1_3_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_3_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet X2 P B
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q A R B).
  {
  assert (HOS : OS Q A R X2).
    {
    assert (H1 : Q A) by (assert_diffs; auto).
    assert (H2 : Col Q A Q) by Col.
    assert (H3 : Col R X2 Q) by (assert_cols; ColR).
    assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
    split; Col.
    split; assert_diffs; Col.
    }
  assert (HTS1 : TS Q A P R).
    {
    apply l9_2.
    assert (H := inner_pasch P A X1 Q R HCol1 (between_symmetry X1 R A HCol2));
    destruct H as [I [HQAI HPRI]].
    split; Col.
    show_distinct A X1; Col.
    split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
     I; assert_cols; Col.
    }
  assert (HTS2 : TS Q A P X2)
    by (apply l9_2; apply l9_8_2 with R; try apply l9_2; Col).
  apply l9_2; apply l9_8_2 with P; Col.
  destruct HTS2 as [H1 [HQAX2 [I [HQAI HPX2I]]]]; clear H1.
  assert (H1 : Q A) by (assert_diffs; auto).
  assert (H2 : Col Q A I) by (assert_cols; Col).
  assert (H3 : Col P B I) by (show_distinct P X2; Col; assert_cols; ColR).
  assert (H := l9_19 Q A P B I H1 H2 H3); rewrite H.
  split; try (intro; unfold TS in HTS1; spliter; Col).
  split; try (intro; treat_equalities; unfold TS in HTS1; spliter; Col).
  split; try (intro; treat_equalities; Col).
  eBetween.
  }
destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_1_3_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet X2 P B
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

  {
  assert (HTS : TS Q A B R).
    {
    apply l9_8_2 with P.

      {
      apply l9_2.
      assert (H := inner_pasch P A X1 Q R HCol1 (between_symmetry X1 R A HCol2));
        destruct H as [I [HQAI HPRI]].
      split; Col.
      show_distinct A X1; Col.
      split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
       I; assert_cols; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col B P Q) by (assert_cols; Col).
      assert (H := l9_19 Q A B P Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    }
  destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
   I; right; left; split; Col.
  }

  {
  assert (HTS : TS Q A R B).
    {
    assert (HOS : OS Q A R X2).
      {
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col R X2 Q) by (assert_cols; ColR).
      assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities); Between.
      }
    assert (HTS1 : TS Q A P R).
      {
      apply l9_2.
      assert (H := inner_pasch P A X1 Q R HCol1 (between_symmetry X1 R A HCol2));
        destruct H as [I [HQAI HPRI]].
      split; Col.
      show_distinct A X1; Col.
      split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
       I; assert_cols; Col.
      }
    assert (HTS2 : TS Q A P X2)
      by (apply l9_2; apply l9_8_2 with R; try apply l9_2; Col).
    apply l9_2; apply l9_8_2 with P; Col.
    destruct HTS2 as [H1 [HQAX2 [I [HQAI HPX2I]]]]; clear H1.
    assert (H1 : Q A) by (assert_diffs; auto).
    assert (H2 : Col Q A I) by (assert_cols; Col).
    assert (H3 : Col P B I) by (show_distinct P X2; Col; assert_cols; ColR).
    assert (H := l9_19 Q A P B I H1 H2 H3); rewrite H.
    split; try (intro; unfold TS in HTS1; spliter; Col).
    split; try (intro; treat_equalities; unfold TS in HTS1; spliter; Col).
    split; try (intro; treat_equalities; Col).
    eBetween.
    }
  destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
   I; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet P Q X1
  Bet X1 R A
  Bet X2 P B
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := inner_pasch P A X1 Q R HCol1 (between_symmetry X1 R A HCol2));
destruct H as [I1 [HQAI1 HPRI1]];
assert (H := inner_pasch R B X2 Q P (between_symmetry X2 Q R HCol4));
destruct (H (between_symmetry X2 P B HCol3)) as [I2 [HQBI2 HPRI2]]; clear H.
assert (HQI1 : Q I1) by (intro; treat_equalities; assert_cols; Col).
assert (HQI2 : Q I2) by (intro; treat_equalities; assert_cols; Col).
assert (H := l5_3 P I1 I2 R (between_symmetry R I1 P HPRI1) HPRI2); elim H; clear H; intro PI1I2.

  {
  assert (HTS : TS Q B A R).
    {
    apply l9_8_2 with I1.

      {
      split; try (intro; apply HABQ; assert_cols; ColR).
      split; Col.
       I2; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q B) by (assert_diffs; auto).
      assert (H2 : Col Q B Q) by Col.
      assert (H3 : Col A I1 Q) by (show_distinct P X2; Col; assert_cols; ColR).
      assert (H := l9_19 Q B A I1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; assert_diffs; Col).
      split; try (intro; assert_diffs); Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQBI HRAI]]]]; clear H1; clear H2.
   I; right; right; split; Col.
  }

  {
  assert (HTS : TS Q A B R).
    {
    apply l9_8_2 with I2.

      {
      split; try (intro; apply HABQ; assert_cols; ColR).
      split; Col.
       I1; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col B I2 Q) by (show_distinct P X2; Col; assert_cols; ColR).
      assert (H := l9_19 Q A B I2 Q H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; assert_diffs; Col).
      split; try (intro; assert_diffs); Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
   I; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet P Q X1
  Bet X1 R A
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_1_3_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_1_3_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_3_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet P Q X1
  Bet X1 R A
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_1_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_1_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col R A X1
  Col P B X2
  Col Q R X2
  Bet P Q X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol2 HCol3 HCol4 HCol1.
elim HCol2; clear HCol2; intro HCol2.

  {
  apply coplanar_trans_1_aux_4_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol2; clear HCol2; intro HCol2.

    {
    apply coplanar_trans_1_aux_4_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_1_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet P B X2
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X2); intro HRX2; treat_equalities.

  {
  assert (HTS : TS R A B Q).
    {
    apply l9_8_2 with P.

      {
      split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
      split; Col.
       X1; assert_cols; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by Col.
      assert (H3 : Col B P R) by (assert_cols; Col).
      assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; assert_diffs; Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
   I; right; right; split; Col.
  }

  {
  assert (HTS : TS R A B Q).
    {
    assert (HTS : TS R A X2 Q).
      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       R; split; Col; Between.
      }
    apply l9_8_2 with X2; Col.
    elim (eq_dec_points P X1); intro HPX1; treat_equalities.

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A P) by (assert_cols; Col).
      assert (H3 : Col B X2 P) by (assert_cols; Col).
      assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply l9_17 with P; Between.
       Q; split; Col.
      split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
      split; Col.
       X1; assert_cols; split; Col; Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
   I; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_1_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet P B X2
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim (eq_dec_points R X2); intro HRX2; treat_equalities.

  {
  assert (HTS : TS R A B Q).
    {
    apply l9_8_2 with P.

      {
      split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
      split; Col.
       X1; assert_cols; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by Col.
      assert (H3 : Col B P R) by (assert_cols; Col).
      assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; assert_diffs; Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
   I; right; right; split; Col.
  }

  {
  assert (H := inner_pasch P R Q X1 X2 (between_symmetry Q X1 P HCol1) HCol4);
  destruct H as [I [HRX1I HPX2I]].
  assert (H := l5_3 X2 B I P (between_symmetry P B X2 HCol3) HPX2I).
  assert (HARI : Col A R I) by (show_distinct R X1; Col; assert_cols; ColR).
  elim H; clear H; intro HBX2I.

    {
    elim (eq_dec_points Q X1); intro HQX1; treat_equalities.

      {
      assert_cols; Cop.
      }

      {
      assert (HTS : TS R B Q A).
        {
        apply l9_31.

          {
          apply one_side_transitivity with P.

            {
            assert (H1 : R Q) by (assert_diffs; auto).
            assert (H2 : Col R Q X2) by Col.
            assert (H3 : Col B P X2) by (assert_cols; Col).
            assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; Col).
            split; try (intro; treat_equalities; Col).
            Between.
            }

            {
            apply one_side_transitivity with X1.

              {
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q Q) by Col.
              assert (H3 : Col P X1 Q) by (assert_cols; Col).
              assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              }

              {
              apply one_side_symmetry.
              assert (H1 : R Q) by (assert_diffs; auto).
              assert (H2 : Col R Q R) by Col.
              assert (H3 : Col A X1 R) by (assert_cols; Col).
              assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
              split; Col.
              split; assert_diffs; Col.
              }
            }
          }

          {
          apply one_side_transitivity with X2.

            {
            assert (H1 : R A) by (assert_diffs; auto).
            assert (H2 : Col R A I) by Col.
            assert (H3 : Col B X2 I) by (assert_cols; Col).
            assert (H := l9_19 R A B X2 I H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; Col).
            split; try (intro; treat_equalities); Col.
            Between.
            }

            {
            apply one_side_symmetry.
            assert (H1 : R A) by (assert_diffs; auto).
            assert (H2 : Col R A R) by Col.
            assert (H3 : Col Q X2 R) by (assert_cols; Col).
            assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
            split; Col.
            split; assert_diffs; Col.
            }
          }
        }
      destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
       I'; right; left; split; Col.
      }
    }

    {
    assert (HTS : TS R A Q B).
      {
      apply l9_8_2 with X2.

        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
        show_distinct P X2; assert_cols; Col.
         I; split; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by Col.
        assert (H3 : Col Q X2 R) by (assert_cols; Col).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        }
      }
    destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
     I'; right; right; split; Col.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_1_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet P B X2
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q A B R).
  {
  elim (eq_dec_points A X1); intro HAX1; treat_equalities.

    {
    apply l9_8_2 with X2.

      {
      assert_diffs.
      show_distinct Q X2; try (apply HABQ; assert_cols; ColR).
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       Q; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A P) by (assert_cols; Col).
      assert (H3 : Col B X2 P) by (assert_cols; Col).
      assert (H := l9_19 Q A B X2 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      apply l9_8_2 with X1.

        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
         A; split; Col; Between.
        }

        {
        apply one_side_transitivity with P.

          {
          apply one_side_symmetry.
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by Col.
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
          split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }

          {
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by Col.
          assert (H3 : Col P B Q) by (assert_cols; Col).
          assert (H := l9_19 Q A P B Q H1 H2 H3); rewrite H.
          split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }
        }
      }

      {
      assert (HOS : OS Q A X1 P).
        {
        apply one_side_symmetry.
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by Col.
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
        split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      assert (HTS : TS Q A X1 R).
        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
         A; split; Col; Between.
        }
      apply l9_8_2 with X1; Col.
      apply one_side_transitivity with P; Col.
      apply l9_17 with X2; Col.
      apply one_side_transitivity with X1; apply one_side_symmetry; Col.
       R; split; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       Q; split; Col.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet R A X1
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_2_1_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_2_1_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_1_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_1_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet B X2 P
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
    apply one_side_transitivity with X1.

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by Col.
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by Col.
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet B X2 P
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
    apply one_side_transitivity with X1.

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by Col.
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by Col.
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet B X2 P
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
    apply one_side_transitivity with X1.

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by Col.
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by Col.
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet R A X1
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_2_1_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_2_1_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_1_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_1_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet X2 P B
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q A B R).
  {
  elim (eq_dec_points A X1); intro HAX1; treat_equalities.

    {
    assert (HQX2 : Q X2) by (intro; treat_equalities; Col).
    apply l9_2; apply l9_8_2 with X2.

      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       P; assert_cols; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col R X2 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    }

    {
    assert (HOS1 : OS Q A P X1).
      {
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
      split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    assert (HOS2 : OS Q A R X2).
      {
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col R X2 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      }
    assert (HTS : TS Q A P X2).
      {
      apply l9_2; apply l9_8_2 with R; Col.
      apply l9_2; apply l9_8_2 with X1; try apply one_side_symmetry; Col.
      split; try (intro; assert_cols; apply HAQR; ColR).
      split; Col.
       A; split; Col; Between.
      }
    destruct HTS as [Hclear1 [Hclear2 [I [HQAI HPX2I]]]].
    clear Hclear1; clear Hclear2; assert_diffs.
    apply l9_2; apply l9_8_2 with X2; try apply one_side_symmetry; Col.
    split; try (intro; apply HAQR; assert_cols; ColR).
    split; Col.
     I; eBetween.
    }
  }
destruct HTS as [H1 [H2 [I [HQAI HBRI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet X2 P B
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q A B R).
  {
  elim (eq_dec_points A X1); intro HAX1; treat_equalities.

    {
    assert (HQX2 : Q X2).
      {
      intro; treat_equalities; assert_diffs; assert_cols; apply HABQ; ColR.
      }
    apply l9_2; apply l9_8_2 with X2.

      {
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       P; assert_cols; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by Col.
      assert (H3 : Col R X2 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; Between.
      }
    }

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      apply l9_8_2 with P.

        {
        apply l9_8_2 with X1.

          {
          split; try (intro; assert_cols; apply HAQR; ColR).
          split; Col.
           A; split; Col; Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by Col.
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
          split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
          split; assert_diffs; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }
        }

        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by Col.
        assert (H3 : Col P B Q) by (assert_cols; Col).
        assert (H := l9_19 Q A P B Q H1 H2 H3); rewrite H.
        split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
        split; assert_diffs; Col.
        }
      }

      {
      assert (HOS1 : OS Q A P X1).
        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by Col.
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
        split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
        split; assert_diffs; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      assert (HOS2 : OS Q A R X2).
        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by Col.
        assert (H3 : Col R X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      assert (HTS : TS Q A P X2).
        {
        apply l9_2; apply l9_8_2 with R; Col.
        apply l9_2; apply l9_8_2 with X1; try apply one_side_symmetry; Col.
        split; try (intro; assert_cols; apply HAQR; ColR).
        split; Col.
         A; split; Col; Between.
        }
      destruct HTS as [Hclear1 [Hclear2 [I [HQAI HPX2I]]]].
      clear Hclear1; clear Hclear2; assert_diffs.
      apply l9_2; apply l9_8_2 with X2; try apply one_side_symmetry; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       I; eBetween.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQAI HBRI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet R A X1
  Bet X2 P B
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A Q B).
  {
  elim (eq_dec_points P X1); intro HPX1; treat_equalities.

    {
    apply l9_8_2 with X2.

      {
      show_distinct R X2; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       P; assert_cols; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by Col.
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities); Between.
      }
    }

    {
    assert (HTS : TS R A P X2).
      {
      apply l9_2; apply l9_8_2 with Q.

        {
        split; Col.
        split; try (intro; apply HAQR; assert_diffs; assert_cols; ColR).
         X1; assert_cols; Col.
        }

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by Col.
        assert (H3 : Col Q X2 R) by (assert_cols; Col).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; try (intro; treat_equalities); Between.
        }
      }
    apply l9_8_2 with X2.

      {
      destruct HTS as [H1 [H2 [I [HRAI HPX2I]]]]; clear H1; clear H2.
      show_distinct R X2; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       I; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by Col.
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities); Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet R A X1
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_2_1_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_2_1_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_1_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet Q X1 P
  Bet R A X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_2_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_2_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_2_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet A X1 R
  Bet P B X2
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A B Q).
  {
  elim (eq_dec_points P X1); intro HPX1; treat_equalities.

    {
    apply l9_8_2 with X2.

      {
      show_distinct R X2; try (apply HABR; assert_diffs; assert_cols; ColR).
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       R; assert_cols; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A P) by (assert_cols; Col).
      assert (H3 : Col B X2 P) by (assert_cols; Col).
      assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }

    {
    apply l9_8_2 with P.

      {
      split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
      split; Col.
       X1; split; Col; Between.
      }

      {
      elim (eq_dec_points R X2); intro HRX2; treat_equalities.

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; Col).
        assert (H3 : Col B P R) by (assert_cols; Col).
        assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
        split; Col.
        split; assert_diffs; Col.
        split; Between.
        }

        {
        apply l9_17 with X2; Col.
         Q; split.

          {
          split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
          split; Col.
           X1; split; Col; Between.
          }

          {
          split; try (intro; apply HAQR; assert_cols; ColR).
          split; Col.
           R; split; Col; Between.
          }
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_2_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet A X1 R
  Bet P B X2
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q B A R).
  {
  elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

    {
    split; Col.
    split; Col.
     X1; split; Col.
    assert_diffs; assert_cols; ColR.
    }

    {
    elim (eq_dec_points P B); intro HPB; treat_equalities.

      {
      split; Col.
      split; Col.
       X1; assert_cols; Col.
      }

      {
      assert (HTS : TS Q B X1 R).
        {
        apply l9_8_2 with P.

          {
          apply l9_2; apply l9_8_2 with X2.

            {
            split; try (intro; apply HBQR; assert_cols; ColR).
            split; try (intro; apply HBQR; assert_cols; ColR).
             B; split; Col; Between.
            }

            {
            apply one_side_symmetry.
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B Q) by (assert_cols; Col).
            assert (H3 : Col R X2 Q) by (assert_cols; Col).
            assert (H := l9_19 Q B R X2 Q H1 H2 H3); rewrite H.
            split; Col.
            split; assert_diffs; Col.
            split; Between.
            }
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B Q) by (assert_cols; Col).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q B P X1 Q H1 H2 H3); rewrite H.
          split; try (intro; apply HNC; assert_cols; ColR).
          split; assert_diffs; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }
        }
      apply l9_8_2 with X1; Col.
      destruct HTS as [H1 [H2 [I [HQBI HRX1I]]]]; clear H1; clear H2.
      assert (HRX1 : R X1) by (intro; treat_equalities; Col).
      apply one_side_symmetry.
      assert (H1 : Q B) by (assert_diffs; auto).
      assert (H2 : Col Q B I) by (assert_cols; Col).
      assert (H3 : Col A X1 I) by (assert_cols; ColR).
      assert (H := l9_19 Q B A X1 I H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      show_distinct Q X1; assert_cols; Col.
      split; try (intro; treat_equalities; apply HNC; ColR).
      eBetween.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQBI HARI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_2_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet A X1 R
  Bet P B X2
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch X2 P Q R X1 HCol4 (between_symmetry Q X1 P HCol1));
destruct H as [I [HPX2I HRX1I]].
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
assert (H := l5_3 X2 B I P (between_symmetry P B X2 HCol3) HPX2I);
elim H; clear H; intro HBX2I.

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_31.

      {
      apply one_side_transitivity with I.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; Col).
        assert (H3 : Col B I X2) by (assert_cols; ColR).
        assert (H := l9_19 R Q B I X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q R) by (assert_cols; Col).
        assert (H3 : Col A I R) by (assert_cols; ColR).
        assert (H := l9_19 R Q A I R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        assert (HE := l5_2 R X1 A I HRX1 (between_symmetry A X1 R HCol2) HRX1I).
        elim HE; eBetween.
        }
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A I) by (assert_cols; ColR).
        assert (H3 : Col B X2 I) by (assert_cols; Col).
        assert (H := l9_19 R A B X2 I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; ColR).
        assert (H3 : Col Q X2 R) by (assert_cols; Col).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_8_2 with X2.

      {
      show_distinct R X2; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       I; assert_cols; split; Col; ColR.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; ColR).
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet A X1 R
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_2_2_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_2_2_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_2_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet A X1 R
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
    apply one_side_transitivity with X1.

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; ColR).
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by (assert_cols; ColR).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_2_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet A X1 R
  Bet X2 P B
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := inner_pasch Q B X2 R P HCol4 (between_symmetry X2 P B HCol3));
destruct H as [I [HRBI HPQI]].
assert (H := l5_3 P X1 I Q (between_symmetry Q X1 P HCol1) HPQI); elim H; clear H; intro PX1I.

  {
  assert (HTS : TS R B A Q).
    {
    apply l9_8_2 with X1.

      {
      show_distinct R X1; assert_cols; Col.
      split; try (intro; apply HABR; assert_cols; ColR).
      split; Col.
       I; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B R) by (assert_cols; ColR).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_31.

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q R) by (assert_cols; ColR).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }

        {
        apply one_side_transitivity with P.

          {
          apply one_side_symmetry.
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q Q) by (assert_cols; ColR).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X2) by (assert_cols; ColR).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          Between.
          }
        }
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B R) by (assert_cols; ColR).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R B) by (assert_diffs; auto).
        assert (H2 : Col R B I) by (assert_cols; ColR).
        assert (HPX1 : P X1).
          {
          intro; treat_equalities; assert_diffs; assert_cols; apply HABR; ColR.
          }
        assert (H3 : Col Q X1 I) by (assert_cols; ColR).
        assert (H := l9_19 R B Q X1 I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        show_distinct R X1; assert_cols; Col.
        split; try (intro; treat_equalities; apply HABR; ColR).
        eBetween.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_2_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet A X1 R
  Bet X2 P B
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A Q B).
  {
  elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    apply l9_2; apply l9_8_2 with P.

      {
      split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
      split; Col.
       X1; assert_cols; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; ColR).
      assert (H3 : Col B P R) by (assert_cols; Col).
      assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }

    {
    apply l9_8_2 with X2.

      {
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
         P; assert_cols; Col.
        }

        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
        assert (H := inner_pasch P R Q X1 X2 (between_symmetry Q X1 P HCol1) HCol4);
        destruct H as [I [HRX1I HPX2I]].
        show_distinct R X1; assert_cols; Col.
         I; split; eBetween; ColR.
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; ColR).
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_2_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet A X1 R
  Bet X2 P B
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A Q B).
  {
  elim (eq_dec_points R X2); intro HRX2; treat_equalities.

    {
    apply l9_2; apply l9_8_2 with P.

      {
      split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
      split; Col.
       X1; assert_cols; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; ColR).
      assert (H3 : Col B P R) by (assert_cols; Col).
      assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }

    {
    apply l9_8_2 with X2.

      {
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
         P; assert_cols; Col.
        }

        {
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
        assert (H := outer_pasch X2 P Q R X1 HCol4 (between_symmetry Q X1 P HCol1));
        destruct H as [I [HPX2I HRX1I]].
        show_distinct R X1; assert_cols; Col.
         I; split; eBetween; ColR.
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; ColR).
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet A X1 R
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_2_2_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_2_2_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_2_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet Q X1 P
  Bet A X1 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_2_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_2_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet X1 R A
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
assert (HTS : TS Q R B A).
  {
  apply l9_8_2 with X1.

    {
    show_distinct R X1; assert_cols; Col.
    split; try (intro; apply HAQR; ColR).
    split; Col.
     R; Col.
    }

    {
    apply one_side_transitivity with P.

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; ColR).
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R X2) by (assert_cols; ColR).
      assert (H3 : Col B P X2) by (assert_cols; Col).
      assert (H := l9_19 Q R B P X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_3_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet X1 R A
  Bet B X2 P
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch P Q X2 B R (between_symmetry B X2 P HCol3) HCol4);
destruct H as [I [HPQI HRBI]].
assert (H := l5_3 P X1 I Q (between_symmetry Q X1 P HCol1) HPQI); elim H; clear H; intro PX1I.

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_31.

      {
       X1; split.

        {
        split; Col.
        show_distinct R X1; assert_cols; Col.
        split; try (intro; apply HAQR; ColR).
         R; split; Col; Between.
        }

        {
        apply l9_2; apply l9_8_2 with P.

          {
          split; Col.
          split; Col.
           X2; assert_cols; split; Col; Between.
          }

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q Q) by (assert_cols; ColR).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }
        }
      }

      {
       X1; split.

        {
        split; Col.
        show_distinct R X1; assert_cols; Col.
        split; try (intro; apply HABR; ColR).
         R; split; Col; Between.
        }

        {
        split; Col.
        show_distinct R X1; assert_cols; Col.
        split; try (intro; apply HABR; ColR).
         I; split; Col; eBetween.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_8_2 with X1.

      {
      show_distinct R X1; assert_cols; Col.
      split; try (intro; apply HABR; ColR).
      split; Col.
       R; Col.
      }

      {
      apply one_side_symmetry.
      assert (HPX1 : P X1).
        {
        intro; treat_equalities; apply HABR; assert_diffs; assert_cols; ColR.
        }
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B I) by (assert_cols; ColR).
      assert (H3 : Col Q X1 I) by (assert_cols; ColR).
      assert (H := l9_19 R B Q X1 I H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      show_distinct R X1; assert_cols; Col.
      split; try (intro; treat_equalities; apply HABR; ColR).
      eBetween.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet X1 R A
  Bet B X2 P
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
  apply l9_31.

    {
     X1; split.

      {
      apply l9_2; apply l9_8_2 with P.

        {
        split; Col.
        split; Col.
         X2; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; ColR).
        assert (H3 : Col P X1 Q) by (assert_cols; ColR).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }

      {
      split; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
       R; split; Col; Between.
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
       P; split.

        {
        split; Col.
        split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
         R; Col.
        }

        {
        split; Col.
        split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
         X1; assert_cols; Col.
        }
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H := inner_pasch P R Q X1 X2 (between_symmetry Q X1 P HCol1) HCol4);
        destruct H as [I [HRX1I HPX2I]].
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A I) by (assert_cols; ColR).
        assert (HPX2 : P X2) by (intro; treat_equalities; assert_cols; Col).
        assert (H3 : Col B X2 I) by (assert_cols; ColR).
        assert (H := l9_19 R A B X2 I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
        eBetween.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; ColR).
        assert (H3 : Col Q X2 R) by (assert_cols; ColR).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet Q X1 P
  Bet X1 R A
  Bet B X2 P
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
  apply l9_31.

    {
     X1; split.

      {
      apply l9_2; apply l9_8_2 with P.

        {
        split; Col.
        split; Col.
         X2; assert_cols; split; Col; Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; ColR).
        assert (H3 : Col P X1 Q) by (assert_cols; ColR).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }

      {
      split; Col.
      split; try (intro; apply HAQR; assert_cols; ColR).
       R; split; Col; Between.
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
       P; split.

        {
        split; Col.
        split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
         R; Col.
        }

        {
        split; Col.
        split; try (intro; apply HABR; assert_diffs; assert_cols; ColR).
         X1; assert_cols; Col.
        }
      }

      {
      apply one_side_transitivity with X2.

        {
        assert (H := outer_pasch X2 P Q R X1 HCol4 (between_symmetry Q X1 P HCol1));
        destruct H as [I [HPX2I HRX1I]].
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A I) by (assert_cols; ColR).
        assert (HPX2 : P X2) by (intro; treat_equalities; assert_cols; Col).
        assert (H3 : Col B X2 I) by (assert_cols; ColR).
        assert (H := l9_19 R A B X2 I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; apply HAQR; assert_cols; ColR).
        eBetween.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; ColR).
        assert (H3 : Col Q X2 R) by (assert_cols; ColR).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Between.
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet X1 R A
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_2_3_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_2_3_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_3_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet Q X1 P
  Bet X1 R A
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
assert (HTS : TS Q R B A).
  {
  apply l9_8_2 with X1.

    {
    show_distinct R X1; assert_cols; Col.
    split; try (intro; apply HAQR; ColR).
    split; Col.
     R; Col.
    }

    {
    apply one_side_transitivity with P.

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; ColR).
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      split; assert_diffs; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R X2) by (assert_cols; ColR).
      assert (H3 : Col B P X2) by (assert_cols; Col).
      assert (H := l9_19 Q R B P X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet Q X1 P
  Bet X1 R A
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_2_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_2_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col R A X1
  Col P B X2
  Col Q R X2
  Bet Q X1 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol2 HCol3 HCol4 HCol1.
elim HCol2; clear HCol2; intro HCol2.

  {
  apply coplanar_trans_1_aux_4_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol2; clear HCol2; intro HCol2.

    {
    apply coplanar_trans_1_aux_4_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_1_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet R A X1
  Bet P B X2
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := inner_pasch X1 X2 Q P R HCol1 (between_symmetry Q R X2 HCol4));
destruct H as [I [HPX2I HRX1I]].
assert (H := l5_3 P B I X2 HCol3 HPX2I); elim H; clear H; intro HPBI.

  {
  assert (HTS : TS R B Q A).
    {
    apply l9_31.

      {
      apply one_side_transitivity with X1.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X2) by (assert_cols; ColR).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          Between.
          }

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q Q) by (assert_cols; ColR).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          split; try (intro; treat_equalities); Between.
          }
        }

        {
        apply one_side_symmetry.
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q R) by (assert_cols; ColR).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }
      }

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (HRX1 : R X1) by (intro; treat_equalities; Col).
        assert (H2 : Col R A I) by (assert_cols; ColR).
        assert (H3 : Col B P I) by (assert_cols; Col).
        assert (H := l9_19 R A B P I H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; ColR).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        show_distinct R X1; Col.
        show_distinct P I; try (apply HABR; assert_cols; ColR).
        split; try (intro; treat_equalities; apply HABR; assert_cols; ColR).
        Between.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }

  {
  assert (HTS : TS R A Q B).
    {
    assert (HRX1 : R X1) by (intro; treat_equalities; Col).
    elim (eq_dec_points P I); intro HPI; treat_equalities.

      {
      apply l9_2; apply l9_8_2 with X2.

        {
        show_distinct R X2; try (apply HABR; assert_diffs; assert_cols; ColR).
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
         R; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A P) by (assert_cols; ColR).
        assert (H3 : Col B X2 P) by (assert_cols; Col).
        assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }

      {
      apply l9_8_2 with P.

        {
        show_distinct P X1; try (apply HABR; assert_cols; ColR).
        split; try (intro; apply HAQR; assert_diffs; assert_cols; ColR).
        split; Col.
         I; assert_cols; split; Between; ColR.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; ColR).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        show_distinct R X1; Col.
        show_distinct P I; try (apply HABR; assert_cols; ColR).
        split; try (intro; treat_equalities; apply HABR; assert_cols; ColR).
        Between.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_1_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet R A X1
  Bet P B X2
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with X1.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; ColR).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; ColR).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities); Between.
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q R) by (assert_cols; ColR).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; Col).
        assert (H3 : Col B P R) by (assert_cols; Col).
        assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; try (intro; treat_equalities); Col; Between.
        }

        {
        apply one_side_symmetry; apply l9_17 with P; Between.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; apply HABR; assert_diffs; assert_cols; ColR).
        Between.
        }
      }

      {
      assert (HOS : OS R A X2 Q).
        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by Col.
        assert (H3 : Col Q X2 R) by (assert_cols; Col).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }
      apply one_side_transitivity with X2; Col.
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A P) by (assert_cols; ColR).
        assert (H3 : Col B X2 P) by (assert_cols; Col).
        assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        apply one_side_symmetry; apply l9_17 with P; Between.
        apply one_side_transitivity with Q; Col.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; ColR).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        Between.
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_1_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet R A X1
  Bet P B X2
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with X1.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; ColR).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; ColR).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities); Between.
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q R) by (assert_cols; ColR).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }

    {
    assert (HOS : OS R A X2 Q).
      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by Col.
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; Col).
      Between.
      }
    apply one_side_transitivity with X2; Col.
    elim (eq_dec_points P X1); intro HPX1; treat_equalities.

      {
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A P) by (assert_cols; ColR).
      assert (H3 : Col B X2 P) by (assert_cols; Col).
      assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }

      {
      apply one_side_symmetry; apply l9_17 with P; Between.
      apply one_side_transitivity with Q; Col.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A X1) by (assert_cols; ColR).
      assert (H3 : Col Q P X1) by (assert_cols; Col).
      assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet R A X1
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_3_1_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_3_1_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_1_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet R A X1
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
    apply one_side_transitivity with X1.

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; ColR).
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by (assert_cols; ColR).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_1_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet R A X1
  Bet X2 P B
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with X1.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; ColR).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; ColR).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities); Between.
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q R) by (assert_cols; ColR).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by Col.
        assert (H3 : Col B P R) by (assert_cols; Col).
        assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; apply HABR; assert_diffs; assert_cols; ColR).
        Between.
        }
      }

      {
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
         X2; split.

          {
          split; Col.
          split; try (intro; assert_cols; apply HAQR; ColR).
           P; assert_cols; split; Col; Between.
          }

          {
          split; Col.
          split; try (intro; assert_cols; apply HAQR; ColR).
           R; Col.
          }
        }

        {
        assert (HTS : TS R A P X2).
          {
          apply l9_8_2 with Q.

            {
            split; Col.
            split; try (intro; assert_cols; apply HAQR; ColR).
             R; Col.
            }

            {
             assert (H1 : R A) by (assert_diffs; auto).
             assert (H2 : Col R A X1) by (assert_cols; Col).
             assert (H3 : Col Q P X1) by (assert_cols; Col).
             assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
             split; Col.
             split; try (intro; treat_equalities; Col).
             split; Between.
            }
          }
         X2; split.

          {
          apply l9_8_2 with P; Col.
          destruct HTS as [HAPR [HARX2 [I [HARI HPX2I]]]].
          assert (HPX2 : P X2) by (intro; treat_equalities; Col).
          assert (H2 : Col R A I) by Col.
          assert (H3 : Col P B I) by (assert_cols; ColR).
          assert (H := l9_19 R A P B I); rewrite H; Col.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          eBetween.
          intro; subst A; Col.
          }

          {
          split; Col.
          split; try (intro; apply HAQR; assert_cols; ColR).
           R; Col.
          }
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_1_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet R A X1
  Bet X2 P B
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q A B R).
  {
  elim (eq_dec_points A X1); intro HAX1; treat_equalities.

    {
    apply l9_2; apply l9_8_2 with X2.

      {
      show_distinct Q X2; try (apply HABQ; assert_diffs; assert_cols; ColR).
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
       P; assert_cols; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by (assert_cols; Col).
      assert (H3 : Col R X2 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; apply HABQ; assert_cols; ColR).
      Between.
      }
    }

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      apply l9_8_2 with P.

        {
        apply l9_8_2 with X1.

          {
          split; try (intro; apply HAQR; assert_cols; ColR).
          split; Col.
           A; split; Col; Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by (assert_cols; Col).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q A P X1 Q H1 H2 H3); rewrite H.
          split; try (intro; apply HAQR; assert_diffs; assert_cols; ColR).
          assert_diffs; split; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }
        }

        {
        apply one_side_symmetry.
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by (assert_cols; Col).
        assert (H3 : Col B P Q) by (assert_cols; Col).
        assert (H := l9_19 Q A B P Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }
      }

      {
      assert (HOS : OS Q A R X2).
        {
        assert (H1 : Q A) by (assert_diffs; auto).
        assert (H2 : Col Q A Q) by (assert_cols; Col).
        assert (H3 : Col R X2 Q) by (assert_cols; Col).
        assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Between.
        }
      assert (HTS : TS Q A P X2).
        {
        apply l9_2; apply l9_8_2 with R; Col.
        split; Col.
        split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
        destruct (inner_pasch Q R X1 P A (between_symmetry X1 P Q HCol1) HCol2) as [I [HPRI HQAI]].
         I; assert_cols; split; Col; Between.
        }
      apply l9_2; apply l9_8_2 with X2; try (apply one_side_symmetry; Col).
      split; try (intro; apply HAQR; assert_cols; ColR).
      split; Col.
      destruct HTS as [Hc1 [Hc2 [I [HQAI HPX2I]]]].
       I; eBetween.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_1_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet R A X1
  Bet X2 P B
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := inner_pasch Q R X1 P A (between_symmetry X1 P Q HCol1) HCol2);
destruct H as [I1 [HPRI1 HQAI1]].
apply between_symmetry in HCol3; apply between_symmetry in HCol4.
assert (H := inner_pasch R B X2 Q P HCol4 HCol3); destruct H as [I2 [HQBI2 HPRI2]].
assert (H := l5_3 P I1 I2 R HPRI1 HPRI2); elim H; clear H; intro PI1I2.

  {
  assert (HTS : TS Q B A R).
    {
    apply l9_8_2 with I1.

      {
      show_distinct Q I1; assert_cols; Col.
      split; try (intro; apply HABQ; ColR).
      split; Col.
       I2; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q B) by (assert_diffs; auto).
      assert (H2 : Col Q B Q) by (assert_cols; Col).
      assert (H3 : Col A I1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q B A I1 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQBI HRAI]]]]; clear H1; clear H2.
   I; right; right; split; Col.
  }

  {
  assert (HTS : TS Q A B R).
    {
    apply l9_8_2 with I2.

      {
      show_distinct Q I2; assert_cols; Col.
      split; try (intro; apply HABQ; ColR).
      split; Col.
       I1; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q A) by (assert_diffs; auto).
      assert (H2 : Col Q A Q) by (assert_cols; Col).
      assert (H3 : Col B I2 Q) by (assert_cols; Col).
      assert (H := l9_19 Q A B I2 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
   I; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet R A X1
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_3_1_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_3_1_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_1_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet X1 P Q
  Bet R A X1
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_3_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_3_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_2_1_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet A X1 R
  Bet P B X2
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HOS : OS R Q A B).
  {
  apply one_side_transitivity with X1.

    {
    assert (H1 : R Q) by (assert_diffs; auto).
    assert (H2 : Col R Q R) by (assert_cols; Col).
    assert (H3 : Col A X1 R) by (assert_cols; Col).
    assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
    split; Col.
    assert_diffs; split; Col.
    split; try (intro; treat_equalities; assert_cols; Col).
    Between.
    }

    {
    apply one_side_transitivity with P.

      {
      apply one_side_symmetry.
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q Q) by (assert_cols; Col).
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities); Between.
      }

      {
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q X2) by (assert_cols; Col).
      assert (H3 : Col P B X2) by (assert_cols; Col).
      assert (H := l9_19 R Q P B X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }
    }
  }
assert (H := inner_pasch X1 X2 Q P R HCol1 (between_symmetry Q R X2 HCol4));
destruct H as [I [HPX2I HRX1I]].
assert (H := l5_3 P B I X2 HCol3 HPX2I); elim H; clear H; intro HPBI.

  {
  assert (HTS : TS R B Q A).
    {
    assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
    apply l9_31; try (apply one_side_symmetry; Col).
    apply one_side_transitivity with P.

      {
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A X1) by (assert_cols; Col).
      assert (H3 : Col Q P X1) by (assert_cols; Col).
      assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      show_distinct P X2; assert_cols; Col.
      show_distinct P I; try (apply HABR; ColR).
      split; try (intro; treat_equalities; apply HABR; assert_diffs; ColR).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A I) by (assert_cols; ColR).
      assert (H3 : Col B P I) by (assert_cols; Col).
      assert (H := l9_19 R A B P I H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; apply HABR; assert_cols; ColR).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }

  {
  assert (HTS : TS R A Q B).
    {
    assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
    elim (eq_dec_points P X1); intro HPX1; treat_equalities.

      {
      apply l9_2; apply l9_8_2 with X2.

        {
        show_distinct R X2; try (apply HABR; assert_cols; ColR).
        split; try (intro; apply HAQR; assert_cols; ColR).
        split; Col.
         R; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A P) by (assert_cols; ColR).
        assert (H3 : Col B X2 P) by (assert_cols; Col).
        assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }

      {
      apply l9_8_2 with P.

        {
        split; try (intro; apply HNC; assert_diffs; assert_cols; ColR).
        split; Col.
         I; assert_cols; split; Col; ColR.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        Between.
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_2_1_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet A X1 R
  Bet P B X2
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with P.

      {
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q X2) by (assert_cols; Col).
      assert (H3 : Col B P X2) by (assert_cols; Col).
      assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; Col).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities); Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; Col).
        assert (H3 : Col B P R) by (assert_cols; Col).
        assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; apply HABR; assert_diffs; assert_cols; ColR).
        Between.
        }
      }

      {
      assert (HOS : OS R A X2 Q).
        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; Col).
        assert (H3 : Col Q X2 R) by (assert_cols; Col).
        assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }
      apply one_side_transitivity with X2; Col.
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A P) by (assert_cols; Col).
        assert (H3 : Col B X2 P) by (assert_cols; Col).
        assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        apply one_side_symmetry; apply l9_17 with P; Between.
        apply one_side_transitivity with Q; Col.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities); Between.
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_2_1_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet A X1 R
  Bet P B X2
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with P.

      {
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q X2) by (assert_cols; Col).
      assert (H3 : Col B P X2) by (assert_cols; Col).
      assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }

      {
      apply one_side_transitivity with X1.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; Col).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities); Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }
    }

    {
    assert (HOS : OS R A X2 Q).
      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A R) by (assert_cols; Col).
      assert (H3 : Col Q X2 R) by (assert_cols; Col).
      assert (H := l9_19 R A Q X2 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities); Between.
      }
    apply one_side_transitivity with X2; Col.
    elim (eq_dec_points P X1); intro HPX1; treat_equalities.

      {
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A P) by (assert_cols; Col).
      assert (H3 : Col B X2 P) by (assert_cols; Col).
      assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities; Col).
      Between.
      }

      {
      apply one_side_symmetry; apply l9_17 with P; Between.
      apply one_side_transitivity with Q; Col.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A X1) by (assert_cols; Col).
      assert (H3 : Col Q P X1) by (assert_cols; Col).
      assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      split; try (intro; treat_equalities); Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet A X1 R
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_3_2_1_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_3_2_1_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_2_1_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet A X1 R
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS Q R A B).
  {
  apply l9_8_2 with P.

    {
    split; Col.
    split; Col.
     X2; assert_cols; split; Col; Between.
    }

    {
    apply one_side_transitivity with X1.

      {
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; Col).
      assert (H3 : Col P X1 Q) by (assert_cols; Col).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R R) by (assert_cols; Col).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 Q R A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_2_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet A X1 R
  Bet X2 P B
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_31.

    {
    apply one_side_transitivity with X1.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q X2) by (assert_cols; Col).
        assert (H3 : Col B P X2) by (assert_cols; Col).
        assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; Col).
        Between.
        }

        {
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q Q) by (assert_cols; Col).
        assert (H3 : Col P X1 Q) by (assert_cols; Col).
        assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; Col).
        Between.
        }
      }

      {
      apply one_side_symmetry.
      assert (H1 : R Q) by (assert_diffs; auto).
      assert (H2 : Col R Q R) by (assert_cols; Col).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
      apply one_side_transitivity with P.

        {
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A R) by (assert_cols; Col).
        assert (H3 : Col B P R) by (assert_cols; Col).
        assert (H := l9_19 R A B P R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        split; try (intro; treat_equalities; apply HABR; assert_diffs; assert_cols; ColR).
        Between.
        }
      }

      {
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
         X2; split.

          {
          split; Col.
          split; try (intro; apply HAQR; assert_cols; ColR).
           P; assert_cols; split; Col; Between.
          }

          {
          split; Col.
          split; try (intro; apply HAQR; assert_cols; ColR).
           R; Col.
          }
        }

        {
        assert (HTS : TS R A P X2).
          {
          apply l9_8_2 with Q.

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             R; Col.
            }

            {
            assert (H1 : R A) by (assert_diffs; auto).
            assert (H2 : Col R A X1) by (assert_cols; Col).
            assert (H3 : Col Q P X1) by (assert_cols; Col).
            assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
            split; Col.
            split; try (intro; treat_equalities; Col).
            split; try (intro; treat_equalities); Between.
            }
          }
         X2; split.

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
            destruct HTS as [Hc1 [Hc2 [I [HRAI HPX2I]]]].
             I; split; Col; eBetween.
            }

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             R; Col.
            }
        }
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_2_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet A X1 R
  Bet X2 P B
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch R B X2 Q P HCol4 (between_symmetry X2 P B HCol3));
destruct H as [I [HRBI HPQI]].
assert (HQP : Q P) by (assert_diffs; Col).
assert (H := l5_2 Q P X1 I HQP (between_symmetry X1 P Q HCol1) HPQI); elim H; clear H; intro HPX1I.

  {
  assert (HTS : TS R A Q B).
    {
    apply l9_31.

      {
      apply one_side_symmetry.
      apply one_side_transitivity with X1.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q X2) by (assert_cols; Col).
          assert (H3 : Col B P X2) by (assert_cols; Col).
          assert (H := l9_19 R Q B P X2 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          Between.
          }

          {
          assert (H1 : R Q) by (assert_diffs; auto).
          assert (H2 : Col R Q Q) by (assert_cols; Col).
          assert (H3 : Col P X1 Q) by (assert_cols; Col).
          assert (H := l9_19 R Q P X1 Q H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          split; try (intro; treat_equalities; Col).
          Between.
          }
        }

        {
        apply one_side_symmetry.
        assert (H1 : R Q) by (assert_diffs; auto).
        assert (H2 : Col R Q R) by (assert_cols; Col).
        assert (H3 : Col A X1 R) by (assert_cols; Col).
        assert (H := l9_19 R Q A X1 R H1 H2 H3); rewrite H.
        split; Col.
        assert_diffs; split; Col.
        split; try (intro; treat_equalities; assert_cols; Col).
        Between.
        }
      }

      {
      elim (eq_dec_points P X1); intro HPX1; treat_equalities.

        {
        apply one_side_transitivity with P.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by (assert_cols; Col).
          assert (H3 : Col A P R) by (assert_cols; Col).
          assert (H := l9_19 R B A P R H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B I) by (assert_cols; Col).
          assert (H3 : Col Q P I) by (assert_cols; Col).
          assert (H := l9_19 R B Q P I H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; assert_diffs; assert_cols; apply HABR; ColR).
          Between.
          }
        }

        {
        apply one_side_transitivity with X1.

          {
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B R) by (assert_cols; Col).
          assert (H3 : Col A X1 R) by (assert_cols; Col).
          assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          split; try (intro; treat_equalities; assert_cols; Col).
          Between.
          }

          {
          apply one_side_symmetry.
          assert (H1 : R B) by (assert_diffs; auto).
          assert (H2 : Col R B I) by (assert_cols; Col).
          assert (H3 : Col Q X1 I) by (assert_cols; ColR).
          assert (H := l9_19 R B Q X1 I H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          show_distinct R X1; assert_cols; Col.
          split; try (intro; treat_equalities; apply HABR; ColR).
          eBetween.
          }
        }
      }
    }
  destruct HTS as [H1 [H2 [I' [HRAI' HQBI']]]]; clear H1; clear H2.
   I'; right; right; split; Col.
  }

  {
  assert (HTS : TS R B A Q).
    {
    apply l9_8_2 with X1.

      {
      show_distinct R X1; assert_cols; Col.
      split; try (intro; apply HABR; ColR).
      split; Col.
       I; assert_cols; split; Col; eBetween.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R B) by (assert_diffs; auto).
      assert (H2 : Col R B R) by (assert_cols; Col).
      assert (H3 : Col A X1 R) by (assert_cols; Col).
      assert (H := l9_19 R B A X1 R H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities; assert_cols; Col).
      Between.
      }
    }
  destruct HTS as [H1 [H2 [I' [HRBI' HQAI']]]]; clear H1; clear H2.
   I'; right; left; split; Col.
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_2_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet A X1 R
  Bet X2 P B
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := inner_pasch R B X2 Q P); destruct H as [I [HQBI HPRI]]; Between.
assert (HTS : TS Q B R A).
  {
  elim (eq_dec_points P B); intro HPB; treat_equalities.

    {
    split; Col.
    split; Col.
     X1; assert_cols; split; Col; Between.
    }

    {
    elim (eq_dec_points P I); intro HPI; treat_equalities.

      {
      split; Col.
      split; Col.
       X1; assert_diffs; assert_cols; split; Between; ColR.
      }

      {
      assert (HTS : TS Q B R X1).
        {
        assert (HQX2 : Q X2).
          {
          intro; treat_equalities; assert_diffs; assert_cols; apply HNC; ColR.
          }
        apply l9_2; apply l9_8_2 with P.

          {
          split; try (intro; assert_cols; apply HNC; ColR).
          split; Col.
           I; assert_cols; Col.
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B Q) by (assert_cols; Col).
          assert (H3 : Col P X1 Q) by (assert_cols; ColR).
          assert (H := l9_19 Q B P X1 Q H1 H2 H3); rewrite H.
          split; try (intro; assert_cols; apply HNC; ColR).
          assert_diffs; split; Col.
          split; try (intro; treat_equalities); Between.
          }
        }
      split; Col.
      split; Col.
      destruct HTS as [Hc1 [Hc2 [I' [HQBI' HRX1I']]]].
       I'; assert_cols; split; Col; eBetween.
      }
    }
  }
destruct HTS as [H1 [H2 [I' [HQBI' HQRI']]]]; clear H1; clear H2.
I'; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet A X1 R
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_3_2_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_3_2_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_2_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet X1 P Q
  Bet A X1 R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_3_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_3_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_3_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet X1 R A
  Bet P B X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
assert (HTS : TS Q R A B).
  {
  apply l9_2; apply l9_8_2 with P.

    {
    apply l9_8_2 with X1.

      {
      show_distinct Q X1; Col.
      split; try (intro; apply HNC; assert_cols; ColR).
      split; Col.
       R; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; Col).
      assert (H3 : Col P X1 Q) by (assert_cols; ColR).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities); Between.
      }
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; ColR).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; Col).
    split; try (intro; treat_equalities; Col).
    Between.
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_3_2_1 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet X1 R A
  Bet B X2 P
  Bet Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R A Q B).
  {
  elim (eq_dec_points P X1); intro HPX2; treat_equalities.

    {
    apply l9_2; apply l9_8_2 with X2.

      {
      show_distinct R X2; assert_diffs; assert_cols; try (apply HABR; ColR).
      split; try (intro; apply HAQR; ColR).
      split; Col.
       R; split; Col; Between.
      }

      {
      apply one_side_symmetry.
      assert (H1 : R A) by (assert_diffs; auto).
      assert (H2 : Col R A P) by (assert_cols; Col).
      assert (H3 : Col B X2 P) by (assert_cols; Col).
      assert (H := l9_19 R A B X2 P H1 H2 H3); rewrite H.
      split; Col.
      split; try (intro; treat_equalities; Col).
      show_distinct R X2; assert_diffs; assert_cols; try (apply HABR; ColR).
      split; try (intro; treat_equalities; apply HAQR; ColR).
      Between.
      }
    }

    {
    elim (eq_dec_points R X2); intro HRX2; treat_equalities.

      {
      apply l9_8_2 with P.

        {
        split; try (intro; assert_diffs; assert_cols; apply HABR; ColR).
        split; Col.
         R; split; Col; Between.
        }

        {
        apply one_side_symmetry.
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        Between.
        }
      }

      {
      assert (HTS1 : TS R A X2 Q).
        {
        split; try (intro; assert_cols; apply HAQR; ColR).
        split; Col.
         R; split; Col; Between.
        }
      apply l9_2; apply l9_8_2 with X2; Col.
      assert (HTS2 : TS R A P X2).
        {
        apply l9_8_2 with Q; try (apply l9_2; Col).
        assert (H1 : R A) by (assert_diffs; auto).
        assert (H2 : Col R A X1) by (assert_cols; Col).
        assert (H3 : Col Q P X1) by (assert_cols; Col).
        assert (H := l9_19 R A Q P X1 H1 H2 H3); rewrite H.
        split; Col.
        split; try (intro; treat_equalities; Col).
        Between.
        }
       P; split; apply l9_2; Col.
      split; try (intro; assert_diffs; assert_cols; apply HAQR; ColR).
      split; Col.
      destruct HTS2 as [Hc1 [Hc2 [I [HRAI HPX2I]]]].
       I; assert_cols; split; Col; eBetween.
      }
    }
  }
destruct HTS as [H1 [H2 [I [HRAI HQBI]]]]; clear H1; clear H2.
I; right; right; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_3_2_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet X1 R A
  Bet B X2 P
  Bet R X2 Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (H := outer_pasch A Q R X1 X2); destruct H as [I1 [HQAI1 HX1X2I1]]; Between.
assert (H := outer_pasch Q B P X1 X2); destruct H as [I2 [HQBI2 HX1X2I2]]; Between.
assert (HRX1 : R X1) by (intro; treat_equalities; assert_cols; Col).
assert (HX1X2 : X1 X2) by (intro; treat_equalities; apply HAQR; assert_cols; ColR).
elim (eq_dec_points I1 I2); intro HI1I2; treat_equalities.

  {
  elim (eq_dec_points Q I1); intro HQI1; treat_equalities.

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      assert (HTS : TS Q A R B).
        {
        apply l9_31.

          {
           X1; split.

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             R; split; Col; Between.
            }

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
            assert_diffs; Q; split; Col; eBetween.
            }
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B X1) by (assert_diffs; assert_cols; ColR).
          assert (H3 : Col A R X1) by (assert_cols; Col).
          assert (H := l9_19 Q B A R X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          Between.
          }
        }
      destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
       I; right; left; split; Col.
      }

      {
      exfalso; apply HAQR; assert_cols; ColR.
      }
    }

    {
    exfalso; apply HABQ; assert_cols; ColR.
    }
  }

  {
  elim (eq_dec_points Q I1); intro HQI1; elim (eq_dec_points Q I2); intro HQI2; treat_equalities.

    {
    intuition.
    }

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      assert (HTS : TS Q A R B).
        {
        apply l9_31.

          {
           X1; split.

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             R; split; Col; Between.
            }

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             Q; split; Col; eBetween.
            }
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B X1) by (assert_diffs; assert_cols; ColR).
          assert (H3 : Col A R X1) by (assert_cols; Col).
          assert (H := l9_19 Q B A R X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          Between.
          }
        }
      destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
       I; right; left; split; Col.
      }

      {
      exfalso; apply HAQR; assert_cols; ColR.
      }
    }

    {
    elim (eq_dec_points Q X2); intro HQX2; treat_equalities.

      {
      assert (HTS : TS Q A R B).
        {
        apply l9_31.

          {
           X1; split.

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
             R; split; Col; Between.
            }

            {
            split; Col.
            split; try (intro; apply HAQR; assert_cols; ColR).
            assert_diffs; Q; split; Col; eBetween.
            }
          }

          {
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B X1) by (assert_diffs; assert_cols; ColR).
          assert (H3 : Col A R X1) by (assert_cols; Col).
          assert (H := l9_19 Q B A R X1 H1 H2 H3); rewrite H.
          split; Col.
          split; try (intro; treat_equalities; Col).
          split; try (intro; treat_equalities; Col).
          Between.
          }
        }
      destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
       I; right; left; split; Col.
      }

      {
      exfalso; apply HAQR; assert_cols; ColR.
      }
    }

    {
    assert (H := l5_2 X1 X2 I1 I2 HX1X2 HX1X2I1 HX1X2I2); elim H; clear H; intro HX2I1I2.

      {
      assert (HTS : TS Q A R B).
        {
        apply l9_2; apply l9_8_2 with I2.

          {
          apply l9_2; apply l9_8_2 with X2.

            {
            show_distinct Q X2; assert_diffs; assert_cols; try (apply HABQ; ColR).
            split; try (intro; apply HABQ; ColR).
            split; try (intro; apply HABQ; ColR).
             I1; Col.
            }

            {
            apply one_side_symmetry.
            assert (H1 : Q A) by (assert_diffs; auto).
            assert (H2 : Col Q A Q) by (assert_cols; Col).
            assert (H3 : Col R X2 Q) by (assert_cols; Col).
            assert (H := l9_19 Q A R X2 Q H1 H2 H3); rewrite H.
            split; Col.
            assert_diffs; split; Col.
            show_distinct Q X2; assert_cols; try (apply HABQ; ColR).
            Between.
            }
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q A) by (assert_diffs; auto).
          assert (H2 : Col Q A Q) by (assert_cols; Col).
          assert (H3 : Col B I2 Q) by (assert_cols; Col).
          assert (H := l9_19 Q A B I2 Q H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Col.
          }
        }
      destruct HTS as [H1 [H2 [I [HQAI HRBI]]]]; clear H1; clear H2.
       I; right; left; split; Col.
      }

      {
      assert (HTS : TS Q B R A).
        {
        apply l9_2; apply l9_8_2 with I1.

          {
          apply l9_2; apply l9_8_2 with X2.

            {
            show_distinct Q X2; assert_cols; try (apply HABQ; ColR).
            split; try (intro; apply HBQR; ColR).
            split; try (intro; apply HABQ; ColR).
             I2; Col.
            }

            {
            apply one_side_symmetry.
            assert (H1 : Q B) by (assert_diffs; auto).
            assert (H2 : Col Q B Q) by (assert_cols; Col).
            assert (H3 : Col R X2 Q) by (assert_cols; Col).
            assert (H := l9_19 Q B R X2 Q H1 H2 H3); rewrite H.
            split; Col.
            assert_diffs; split; Col.
            show_distinct Q X2; assert_cols; try (apply HABQ; ColR).
            Between.
            }
          }

          {
          apply one_side_symmetry.
          assert (H1 : Q B) by (assert_diffs; auto).
          assert (H2 : Col Q B Q) by (assert_cols; Col).
          assert (H3 : Col A I1 Q) by (assert_cols; Col).
          assert (H := l9_19 Q B A I1 Q H1 H2 H3); rewrite H.
          split; Col.
          assert_diffs; split; Between.
          }
        }
      destruct HTS as [H1 [H2 [I [HQBI HRQI]]]]; clear H1; clear H2.
       I; right; right; split; Col.
      }
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_3_2_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Bet X1 P Q
  Bet X1 R A
  Bet B X2 P
  Bet X2 Q R
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
assert (HTS : TS R B Q A).
  {
  apply l9_8_2 with X1.

    {
    show_distinct R X1; assert_cols; Col.
    split; try (intro; apply HABR; ColR).
    split; Col.
     R; Col.
    }

    {
    assert (H := outer_pasch B R X2 P Q); destruct H as [I [HBRI HPQI]]; Between.
    apply one_side_symmetry.
    assert (H1 : R B) by (assert_diffs; auto).
    assert (H2 : Col R B I) by (assert_cols; Col).
    assert (H3 : Col Q X1 I) by (assert_diffs; assert_cols; ColR).
    assert (H := l9_19 R B Q X1 I H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; Col).
    show_distinct R X1; assert_cols; Col.
    split; try (intro; apply HABR; ColR).
    assert_diffs; eBetween.
    }
  }
destruct HTS as [H1 [H2 [I [HRBI HQAI]]]]; clear H1; clear H2.
I; right; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_3_2 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet X1 R A
  Bet B X2 P
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
elim HCol4; clear HCol4; intro HCol4.

  {
  apply coplanar_trans_1_aux_4_3_3_2_1 with P X1 X2; assumption.
  }

  {
  elim HCol4; clear HCol4; intro HCol4.

    {
    apply coplanar_trans_1_aux_4_3_3_2_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_3_2_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col Q R X2
  Bet X1 P Q
  Bet X1 R A
  Bet X2 P B
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol4 HCol1 HCol2 HCol3.
assert (HTS : TS Q R A B).
  {
  apply l9_2; apply l9_8_2 with P.

    {
    apply l9_8_2 with X1.

      {
      show_distinct Q X1; Col.
      split; try (intro; apply HNC; assert_cols; ColR).
      split; Col.
       R; Col.
      }

      {
      apply one_side_symmetry.
      assert (H1 : Q R) by (assert_diffs; auto).
      assert (H2 : Col Q R Q) by (assert_cols; Col).
      assert (H3 : Col P X1 Q) by (assert_cols; ColR).
      assert (H := l9_19 Q R P X1 Q H1 H2 H3); rewrite H.
      split; Col.
      assert_diffs; split; Col.
      split; try (intro; treat_equalities); Between.
      }
    }

    {
    assert (H1 : Q R) by (assert_diffs; auto).
    assert (H2 : Col Q R X2) by (assert_cols; Col).
    assert (H3 : Col P B X2) by (assert_cols; ColR).
    assert (H := l9_19 Q R P B X2 H1 H2 H3); rewrite H.
    split; Col.
    split; try (intro; treat_equalities; Col).
    split; try (intro; treat_equalities; Col).
    Between.
    }
  }
destruct HTS as [H1 [H2 [I [HQRI HABI]]]]; clear H1; clear H2.
I; left; split; Col.
Qed.

Lemma coplanar_trans_1_aux_4_3_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P B X2
  Col Q R X2
  Bet X1 P Q
  Bet X1 R A
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol3 HCol4 HCol1 HCol2.
elim HCol3; clear HCol3; intro HCol3.

  {
  apply coplanar_trans_1_aux_4_3_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol3; clear HCol3; intro HCol3.

    {
    apply coplanar_trans_1_aux_4_3_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4_3 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col R A X1
  Col P B X2
  Col Q R X2
  Bet X1 P Q
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol2 HCol3 HCol4 HCol1.
elim HCol2; clear HCol2; intro HCol2.

  {
  apply coplanar_trans_1_aux_4_3_1 with P X1 X2; assumption.
  }

  {
  elim HCol2; clear HCol2; intro HCol2.

    {
    apply coplanar_trans_1_aux_4_3_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1_aux_4 : P Q R A B X1 X2,
  ¬ Col P Q R
  ¬ Col A B Q
  ¬ Col A B R
  ¬ Col A Q R
  ¬ Col B Q R
  Col P Q X1
  Col R A X1
  Col P B X2
  Col Q R X2
  Coplanar Q R A B.
Proof.
intros P Q R A B X1 X2 HNC HABQ HABR HAQR HBQR HCol1 HCol2 HCol3 HCol4.
elim HCol1; clear HCol1; intro HCol1.

  {
  apply coplanar_trans_1_aux_4_1 with P X1 X2; assumption.
  }

  {
  elim HCol1; clear HCol1; intro HCol1.

    {
    apply coplanar_trans_1_aux_4_2 with P X1 X2; assumption.
    }

    {
    apply coplanar_trans_1_aux_4_3 with P X1 X2; assumption.
    }
  }
Qed.

Lemma coplanar_trans_1 : P Q R A B,
  ¬Col P Q R Coplanar P Q R A Coplanar P Q R B Coplanar Q R A B.
Proof.
intros P Q R A B HNC HCop1 HCop2.
destruct HCop1 as [X1 HCop1].
destruct HCop2 as [X2 HCop2].
elim (Col_dec A B Q); intro HABQ; Cop.
elim (Col_dec A B R); intro HABR; Cop.
elim (Col_dec A Q R); intro HAQR; Cop.
elim (Col_dec B Q R); intro HBQR; Cop.
elim HCop1; clear HCop1; intro HCop1; try (destruct HCop1 as [HCol1 HCol2]).

  {
  elim HCop2; clear HCop2; intro HCop2; try (destruct HCop2 as [HCol3 HCol4]).

    {
    apply coplanar_trans_1_aux_1 with P X1 X2; assumption.
    }

    {
    elim HCop2; clear HCop2; intro HCop2; try (destruct HCop2 as [HCol3 HCol4]).

      {
      apply coplanar_trans_1_aux_3 with P X1 X2; assumption.
      }

      {
      apply coplanar_trans_1_aux_4 with P X1 X2; assumption.
      }
    }
  }

  {
  elim HCop1; clear HCop1; intro HCop1; try (destruct HCop1 as [HCol1 HCol2]).

    {
    elim HCop2; clear HCop2; intro HCop2; try (destruct HCop2 as [HCol3 HCol4]).

      {
      assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_3 with P X1 X2; Col); Cop.
      }

      {
      elim HCop2; clear HCop2; intro HCop2; try (destruct HCop2 as [HCol3 HCol4]).

        {
        assert (H1 : ¬ Col P R Q) by Col.
        assert (H2 : ¬ Col A R Q) by Col.
        assert (H3 : ¬ Col B R Q) by Col.
        assert (H := coplanar_trans_1_aux_1 P R Q A B X1 X2 H1 HABR HABQ H2 H3 HCol1 HCol2 HCol3 HCol4); Cop.
        }

        {
        assert (Coplanar R Q A B) by (apply coplanar_trans_1_aux_4 with P X1 X2; Col); Cop.
        }
      }
    }

    {
    elim HCop2; clear HCop2; intro HCop2; try (destruct HCop2 as [HCol3 HCol4]).

      {
      assert (Coplanar Q R B A) by (apply coplanar_trans_1_aux_4 with P X2 X1; Col); Cop.
      }

      {
      elim HCop2; clear HCop2; intro HCop2; try (destruct HCop2 as [HCol3 HCol4]).

        {
        assert (Coplanar R Q B A) by (apply coplanar_trans_1_aux_4 with P X2 X1; Col); Cop.
        }

        {
        apply coplanar_trans_1_aux_2 with P X1 X2; assumption.
        }
      }
    }
  }
Qed.

Lemma coplanar_pseudo_trans : A B C D P Q R,
  ¬ Col P Q R
  Coplanar P Q R A
  Coplanar P Q R B
  Coplanar P Q R C
  Coplanar P Q R D
  Coplanar A B C D.
Proof.
intros A B C D P Q R HNC HCop1 HCop2 HCop3 HCop4.
elim (Col_dec R A B); intro HRAB.

  {
  elim (Col_dec R C D); intro HRCD.

    {
     R; Col5.
    }

    {
    elim (Col_dec Q R C); intro HQRC.

      {
      assert (HQRD : ¬ Col Q R D) by (intro; assert_diffs; apply HRCD; ColR).
      assert (HCop5 := coplanar_trans_1 P Q R D A HNC HCop4 HCop1).
      assert (HCop6 := coplanar_trans_1 P Q R D B HNC HCop4 HCop2).
      assert (HCop7 := coplanar_trans_1 P Q R D C HNC HCop4 HCop3).
      assert (HCop8 := coplanar_trans_1 Q R D C A HQRD HCop7 HCop5).
      assert (HCop9 := coplanar_trans_1 Q R D C B HQRD HCop7 HCop6).
      assert (HRDC : ¬ Col R D C) by Col.
      assert (HCop := coplanar_trans_1 R D C A B HRDC HCop8 HCop9).
      Cop.
      }

      {
      assert (HCop5 := coplanar_trans_1 P Q R C A HNC HCop3 HCop1).
      assert (HCop6 := coplanar_trans_1 P Q R C B HNC HCop3 HCop2).
      assert (HCop7 := coplanar_trans_1 P Q R C D HNC HCop3 HCop4).
      assert (HCop8 := coplanar_trans_1 Q R C D A HQRC HCop7 HCop5).
      assert (HCop9 := coplanar_trans_1 Q R C D B HQRC HCop7 HCop6).
      assert (HCop := coplanar_trans_1 R C D A B HRCD HCop8 HCop9).
      Cop.
      }
    }
  }

  {
  elim (Col_dec Q R A); intro HQRA.

    {
    assert (HQRB : ¬ Col Q R B) by (intro; assert_diffs; apply HRAB; ColR).
    assert (HCop5 := coplanar_trans_1 P Q R B A HNC HCop2 HCop1).
    assert (HCop6 := coplanar_trans_1 P Q R B C HNC HCop2 HCop3).
    assert (HCop7 := coplanar_trans_1 P Q R B D HNC HCop2 HCop4).
    assert (HCop8 := coplanar_trans_1 Q R B A C HQRB HCop5 HCop6).
    assert (HCop9 := coplanar_trans_1 Q R B A D HQRB HCop5 HCop7).
    assert (HRBA : ¬ Col R B A) by Col.
    assert (HCop := coplanar_trans_1 R B A C D HRBA HCop8 HCop9).
    Cop.
    }

    {
    assert (HCop5 := coplanar_trans_1 P Q R A B HNC HCop1 HCop2).
    assert (HCop6 := coplanar_trans_1 P Q R A C HNC HCop1 HCop3).
    assert (HCop7 := coplanar_trans_1 P Q R A D HNC HCop1 HCop4).
    assert (HCop8 := coplanar_trans_1 Q R A B C HQRA HCop5 HCop6).
    assert (HCop9 := coplanar_trans_1 Q R A B D HQRA HCop5 HCop7).
    assert (HCop := coplanar_trans_1 R A B C D HRAB HCop8 HCop9).
    Cop.
    }
  }
Qed.

End Coplanar_trans.