Module Type Mereology (dolce:DOLCE_root)(proto:Protothetic dolce).
Set Typeclasses Axioms Are Instances.
(* ====================== ONTOLOGICAL AXIOM  ============================= *)
Parameter epsilon : relation N.
(* no typing on singulars and plurals *)
Notation "A 'ε' b" := (epsilon A b)  (at level 40).
(************** Meta rules of existential introduction/elimination  ********)
(* ==================================== ONTOLOGICAL DEFINITIONS =============================== *)
Parameter exist_at_least      : N->Prop.
Parameter D1                  : forall a, exist_at_least a ≡≡ ¬forall A, ¬(A ε a).                  (* D1 *)
Parameter exist_at_most       : N -> Prop.
Parameter D2                  : forall a:N, exist_at_most a ≡≡ forall B C, B ε a ∧ C ε a ⊃ B ε C.   (* D2 *)
Parameter exist_exactly       : N -> Prop.
Parameter D3                  : forall A, exist_exactly A ≡≡ forall b, A ε b.                       (* D3 *)
Parameter singular_equality   : N -> N -> Prop.
Parameter D4                  : forall A B,  singular_equality A B ≡≡ (A ε B ∧ B ε A).              (* D4 *)
Parameter singular_difference : N -> N -> Prop.
Parameter D5                  : forall A B, singular_difference A B ≡≡ (A ε A ∧ B ε B ∧
¬singular_equality A B).   (* D5 *)
Parameter weak_equality       : N -> N -> Prop.
Parameter D6                  : forall a b,  weak_equality a b ≡≡ forall A, (A ε a ≡≡ A ε b).       (* D6 *)
Parameter strong_equality     : N -> N -> Prop.
Parameter D7                  : forall a b, strong_equality a b ≡≡ ((¬forall G, ¬(G ε a)) ∧
forall G, (G ε a) ≡≡ (G ε b)).   (* D7 *)
Parameter weak_inclusion      : N -> N -> Prop.
Parameter D8                  : forall a b, weak_inclusion a b ≡≡ forall A, (A ε a) ⊃ (A ε b).      (* D8 *)
Parameter strong_inclusion    : N -> N -> Prop.
Parameter D9                  : forall a b, strong_inclusion a b ≡≡ (¬forall A, ¬(A ε a)) ∧ (forall C, C ε a ⊃ C ε b).    (* D9 *)
Parameter partial_inclusion   : N -> N -> Prop.
Parameter D10                 : forall a b, partial_inclusion a b ≡≡ ¬forall G, ¬(G ε a ∧ G ε b).   (* D10 *)
Parameter empty               : N.
Parameter D13                 : forall A, A ε empty ≡≡ (A ε A ∧ ¬(A ε A)).                          (* D13 *)
Parameter universal           : N.
Parameter D14                 : forall A, A ε universal ≡≡ (A ε A).                                 (* D14 *)
Parameter distinct            : N -> N.
Parameter D15                 : forall A b, A ε (distinct b) ≡≡ (A ε A ∧ ¬(A ε b)).                 (* D15 *)
Parameter meet                : N -> N -> N.
Parameter D16                 : forall A a b,  A ε (meet a b) ≡≡ (A ε A ∧ A ε a ∧ A ε b).           (* D16 *)
(* =========================== ONTOLOGICAL THEOREMS =============================== *)
Class Antisymmetric  (R:relation N) :=
antisymmetry : forall a b, R a b ∧ R b a ⊃ singular_equality a b.
Class Reflexive  (R:relation N) :=
reflexivity : forall A, A ε A ⊃ R A A.
Class Transitive  (R:relation N) :=
transitivity : forall A B C, R A B ∧ R B C ⊃ R A C.
Class POrder (R:relation N) := {
por_refl    :> Reflexive R;
por_antisym :> Antisymmetric R;
por_trans   :> Transitive R}.
(* =================================================================== *)

Lemma OntoT2 : forall A a, A ε a ⊃ forall C D, ((C ε A) ∧ (D ε A)) ⊃ (C ε D).