Library tarski_to_coapp_theory

Require Export Ch06_out_lines.
Require Import tactics_axioms.


Section Tarski_is_a_Coapp_theory.

Context `{MT:Tarski_neutral_dimensionless}.
Context `{EqDec:EqDecidability Tpoint}.

Definition diff : arity Tpoint 2 := fun A B : TpointA B.

Lemma diff_perm_1 : A B, app_1_n diff A Bapp_n_1 diff B A.
Proof.
unfold diff.
simpl.
auto.
Qed.

Lemma diff_perm_2 : A B (X : cartesianPower Tpoint 0), app_2_n diff A B Xapp_2_n diff B A X.
Proof.
unfold diff.
unfold app_2_n.
simpl.
auto.
Qed.

Definition col : arity Tpoint 3 := Col.

Lemma col_perm_1 : A (X : cartesianPower Tpoint 2), app_1_n col A Xapp_n_1 col X A.
Proof.
unfold col.
simpl.
Col.
Qed.

Lemma col_perm_2 : A B (X : cartesianPower Tpoint 1), app_2_n col A B Xapp_2_n col B A X.
Proof.
unfold col.
unfold app_2_n.
simpl.
Col.
Qed.

Lemma diff_or_col : A (X : cartesianPower Tpoint 2), app_1_n col A X app diff X.
Proof.
unfold col.
unfold diff.
simpl.
intros.
elim (eq_dec_points (fst X) (snd X)); intro H; try rewrite H; Col.
Qed.

Lemma pseudo_trans : A B C (X : cartesianPower Tpoint 1),
  app_1_n diff A Xapp_2_n col B A Xapp_2_n col C A Xapp_2_n col B C X.
Proof.
unfold col.
unfold diff.
unfold app_2_n.
simpl.
eCol.
Qed.

Global Instance Tarski_is_a_Coapp_theory : (Coapp_theory (Build_Arity Tpoint 0) (Build_Coapp_predicates (Build_Arity Tpoint 0) diff Col)).
Proof.
exact (Build_Coapp_theory (Build_Arity Tpoint 0) (Build_Coapp_predicates (Build_Arity Tpoint 0) diff Col) diff_perm_1 diff_perm_2 col_perm_1 col_perm_2 diff_or_col pseudo_trans).
Qed.

End Tarski_is_a_Coapp_theory.