+interpretation "singleton" 'singl a = (fun11 __ (singleton _) a).
+
+definition big_intersects:
+ ∀A:SET.∀I:SET.unary_morphism2 (setoid1_of_setoid I ⇒ Ω \sup A) (setoid2_of_setoid1 (Ω \sup A)).
+ intros; constructor 1;
+ [ intro; whd; whd in I;
+ apply ({x | ∀i:I. x ∈ t i});
+ simplify; intros; split; intros; [ apply (. (e‡#)); | apply (. (e \sup -1‡#)); ]
+ apply H;
+ | intros; split; intros 2; simplify in f ⊢ %; intro;
+ [ apply (. (#‡(e i))); apply f;
+ | apply (. (#‡(e i)\sup -1)); apply f]]
+qed.
+
+definition big_union:
+ ∀A:SET.∀I:SET.unary_morphism2 (setoid1_of_setoid I ⇒ Ω \sup A) (setoid2_of_setoid1 (Ω \sup A)).
+ intros; constructor 1;
+ [ intro; whd; whd in I;
+ apply ({x | ∃i:I. x ∈ t i});
+ simplify; intros; split; intros; cases H; clear H; exists; [1,3:apply w]
+ [ apply (. (e‡#)); | apply (. (e \sup -1‡#)); ]
+ apply x;
+ | intros; split; intros 2; simplify in f ⊢ %; cases f; clear f; exists; [1,3:apply w]
+ [ apply (. (#‡(e w))); apply x;
+ | apply (. (#‡(e w)\sup -1)); apply x]]
+qed.
+
+(* incluso prima non funziona piu' nulla *)
+include "o-algebra.ma".
+
+
+axiom daemon: False.
+definition SUBSETS: SET → OAlgebra.
+ intro A; constructor 1;
+ [ apply (Ω \sup A);
+ | apply subseteq;
+ | apply overlaps;
+ | apply big_intersects;
+ | apply big_union;
+ | apply ({x | True});
+ simplify; intros; apply (refl1 ? (eq1 CPROP));
+ | apply ({x | False});
+ simplify; intros; apply (refl1 ? (eq1 CPROP));
+ | intros; whd; intros; assumption
+ | intros; whd; split; assumption
+ | intros; apply transitive_subseteq_operator; [2: apply f; | skip | assumption]
+ | intros; cases f; exists [apply w] assumption
+ | intros; intros 2; apply (f ? f1 i);
+ | intros; intros 2; apply f; exists; [apply i] assumption;
+ | intros 3; cases f;
+ | intros 3; constructor 1;
+ | intros; cases f; exists; [apply w]
+ [ assumption
+ | whd; intros; cases i; simplify; assumption]
+ | intros; split; intro;
+ [ cases f; cases x1; exists [apply w1] exists [apply w] assumption;
+ | cases H; cases x; exists; [apply w1] [assumption | exists; [apply w] assumption]]
+ | intros; intros 2; cases (H (singleton ? a) ?);
+ [ exists; [apply a] [assumption | change with (a = a); apply refl1;]
+ | change in x1 with (a = w); change with (mem A a q); apply (. (x1 \sup -1‡#));
+ assumption]]
+qed.
\ No newline at end of file