]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/contribs/formal_topology/overlap/relations_to_o-algebra.ma
faithful
[helm.git] / helm / software / matita / contribs / formal_topology / overlap / relations_to_o-algebra.ma
index 781514e0757cfdbd2e33811ac1ba9f0c3d1c2210..7f327c4972130fcb143b5aa1eb45f2eafb6bbc60 100644 (file)
@@ -30,26 +30,18 @@ definition SUBSETS: objs1 SET → OAlgebra.
   | 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;
-    (* senza questa change, universe inconsistency *)
-    whd; change in ⊢ (? ? (λ_:%.?)) with (carr I);
-    exists; [apply i] assumption;
+  | intros; split; [ intros 4; apply (f ? f1 i); | intros 3; intro; apply (f i ? f1); ]
+  | intros; split;
+     [ intros 4; apply f; exists; [apply i] assumption;
+     | intros 3; intros; cases f1; apply (f w a x); ]
   | 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;
-       (* senza questa change, universe inconsistency *)
-       change in ⊢ (? ? (λ_:%.?)) with (carr I);
-       exists [apply w1] exists [apply w] assumption;
-     | cases e; cases x; exists; [apply w1]
-        [ assumption
-        | (* senza questa change, universe inconsistency *)
-          whd; change in ⊢ (? ? (λ_:%.?)) with (carr I);
-          exists; [apply w] assumption]]
+     [ cases f; cases x1; exists [apply w1] exists [apply w] assumption;
+     | cases e; cases x; exists; [apply w1] [ assumption | exists; [apply w] assumption]]
   | intros; intros 2; cases (f (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‡#));
@@ -60,30 +52,30 @@ definition orelation_of_relation: ∀o1,o2:REL. arrows1 ? o1 o2 → arrows2 OA (
  intros;
  constructor 1;
   [ constructor 1; 
-     [ apply (λU.image ?? t U);
+     [ apply (λU.image ?? c U);
      | intros; apply (#‡e); ]
   | constructor 1;
-     [ apply (λU.minus_star_image ?? t U);
+     [ apply (λU.minus_star_image ?? c U);
      | intros; apply (#‡e); ]
   | constructor 1;
-     [ apply (λU.star_image ?? t U);
+     [ apply (λU.star_image ?? c U);
      | intros; apply (#‡e); ]
   | constructor 1;
-     [ apply (λU.minus_image ?? t U);
+     [ apply (λU.minus_image ?? c U);
      | intros; apply (#‡e); ]
   | intros; split; intro;
-     [ change in f with (∀a. a ∈ image ?? t p → a ∈ q);
-       change with (∀a:o1. a ∈ p → a ∈ star_image ?? t q);
+     [ change in f with (∀a. a ∈ image ?? c p → a ∈ q);
+       change with (∀a:o1. a ∈ p → a ∈ star_image ?? c q);
        intros 4; apply f; exists; [apply a] split; assumption;
-     | change in f with (∀a:o1. a ∈ p → a ∈ star_image ?? t q);
-       change with (∀a. a ∈ image ?? t p → a ∈ q);
+     | change in f with (∀a:o1. a ∈ p → a ∈ star_image ?? c q);
+       change with (∀a. a ∈ image ?? c p → a ∈ q);
        intros; cases f1; cases x; clear f1 x; apply (f ? f3); assumption; ]
   | intros; split; intro;
-     [ change in f with (∀a. a ∈ minus_image ?? t p → a ∈ q);
-       change with (∀a:o2. a ∈ p → a ∈ minus_star_image ?? t q);
+     [ change in f with (∀a. a ∈ minus_image ?? c p → a ∈ q);
+       change with (∀a:o2. a ∈ p → a ∈ minus_star_image ?? c q);
        intros 4; apply f; exists; [apply a] split; assumption;
-     | change in f with (∀a:o2. a ∈ p → a ∈ minus_star_image ?? t q);
-       change with (∀a. a ∈ minus_image ?? t p → a ∈ q);
+     | change in f with (∀a:o2. a ∈ p → a ∈ minus_star_image ?? c q);
+       change with (∀a. a ∈ minus_image ?? c p → a ∈ q);
        intros; cases f1; cases x; clear f1 x; apply (f ? f3); assumption; ]
   | intros; split; intro; cases f; clear f;
      [ cases x; cases x2; clear x x2; exists; [apply w1]
@@ -95,7 +87,7 @@ definition orelation_of_relation: ∀o1,o2:REL. arrows1 ? o1 o2 → arrows2 OA (
 qed.
 
 lemma orelation_of_relation_preserves_equality:
- ∀o1,o2:REL.∀t,t': arrows1 ? o1 o2. eq1 ? t t' → orelation_of_relation ?? t = orelation_of_relation ?? t'.
+ ∀o1,o2:REL.∀t,t': arrows1 ? o1 o2. t = t' → eq2 ? (orelation_of_relation ?? t) (orelation_of_relation ?? t').
  intros; split; unfold orelation_of_relation; simplify; intro; split; intro;
  simplify; whd in o1 o2;
   [ change with (a1 ∈ minus_star_image ?? t a → a1 ∈ minus_star_image ?? t' a);
@@ -116,28 +108,23 @@ lemma orelation_of_relation_preserves_equality:
     apply (. #‡(e‡#)); ]
 qed.
 
-lemma hint: ∀o1,o2:OA. Type_OF_setoid2 (arrows2 ? o1 o2) → carr2 (arrows2 OA o1 o2).
- intros; apply t;
-qed.
-coercion hint.
-
 lemma orelation_of_relation_preserves_identity:
- ∀o1:REL. orelation_of_relation ?? (id1 ? o1) = id2 OA (SUBSETS o1).
+ ∀o1:REL. eq2 ? (orelation_of_relation ?? (id1 ? o1)) (id2 OA (SUBSETS o1)).
  intros; split; intro; split; whd; intro; 
   [ change with ((∀x. x ♮(id1 REL o1) a1→x∈a) → a1 ∈ a); intros;
     apply (f a1); change with (a1 = a1); apply refl1;
   | change with (a1 ∈ a → ∀x. x ♮(id1 REL o1) a1→x∈a); intros;
     change in f1 with (x = a1); apply (. f1‡#); apply f;
   | alias symbol "and" = "and_morphism".
-    change with ((∃y: carr o1.a1 ♮(id1 REL o1) y ∧ y∈a) → a1 ∈ a);
+    change with ((∃y:o1.a1 ♮(id1 REL o1) y ∧ y∈a) → a1 ∈ a);
     intro; cases e; clear e; cases x; clear x; change in f with (a1=w);
     apply (. f‡#); apply f1;
-  | change with (a1 ∈ a → ∃y: carr o1.a1 ♮(id1 REL o1) y ∧ y∈a);
+  | change with (a1 ∈ a → ∃y:o1.a1 ♮(id1 REL o1) y ∧ y∈a);
     intro; exists; [apply a1]; split; [ change with (a1=a1); apply refl1; | apply f]
-  | change with ((∃x: carr o1.x ♮(id1 REL o1) a1∧x∈a) → a1 ∈ a);
+  | change with ((∃x:o1.x ♮(id1 REL o1) a1∧x∈a) → a1 ∈ a);
     intro; cases e; clear e; cases x; clear x; change in f with (w=a1);
     apply (. f^-1‡#); apply f1;
-  | change with (a1 ∈ a → ∃x: carr o1.x ♮(id1 REL o1) a1∧x∈a);
+  | change with (a1 ∈ a → ∃x:o1.x ♮(id1 REL o1) a1∧x∈a);
     intro; exists; [apply a1]; split; [ change with (a1=a1); apply refl1; | apply f]
   | change with ((∀y.a1 ♮(id1 REL o1) y→y∈a) → a1 ∈ a); intros;
     apply (f a1); change with (a1 = a1); apply refl1;
@@ -145,12 +132,9 @@ lemma orelation_of_relation_preserves_identity:
     change in f1 with (a1 = y); apply (. f1^-1‡#); apply f;]
 qed.
 
-lemma hint2: ∀S,T. carr2 (arrows2 OA S T) → Type_OF_setoid2 (arrows2 OA S T).
- intros; apply c;
-qed.
-coercion hint2.
-
 (* CSC: ???? forse un uncertain mancato *)
+alias symbol "eq" = "setoid2 eq".
+alias symbol "compose" = "category1 composition".
 lemma orelation_of_relation_preserves_composition:
  ∀o1,o2,o3:REL.∀F: arrows1 ? o1 o2.∀G: arrows1 ? o2 o3.
   orelation_of_relation ?? (G ∘ F) =
@@ -164,10 +148,35 @@ lemma orelation_of_relation_preserves_composition:
     split; [ assumption | exists; [apply w] split; assumption ]
   | cases e; cases x; cases f1; cases x1; clear e x f1 x1; exists; [apply w1 ]
     split; [ exists; [apply w] split; assumption | assumption ]
-  | cases e; cases x; cases f; cases x1; clear e x f x1; exists; [ apply w1 ]
+  | unfold arrows1_of_ORelation_setoid; 
+    cases e; cases x; cases f; cases x1; clear e x f x1; exists; [ apply w1 ]
     split; [ assumption | exists; [apply w] split; assumption ]
-  | cases e; cases x; cases f1; cases x1; clear e x f1 x1; exists; [apply w1 ]
+  | unfold arrows1_of_ORelation_setoid in e; 
+    cases e; cases x; cases f1; cases x1; clear e x f1 x1; exists; [apply w1 ]
     split; [ exists; [apply w] split; assumption | assumption ]
   | whd; intros; apply f; exists; [ apply y] split; assumption;
   | cases f1; clear f1; cases x; clear x; apply (f w); assumption;]
 qed.
+
+definition SUBSETS': carr3 (arrows3 CAT2 (category2_of_category1 REL) OA).
+ constructor 1;
+  [ apply SUBSETS;
+  | intros; constructor 1;
+     [ apply (orelation_of_relation S T);
+     | intros; apply (orelation_of_relation_preserves_equality S T a a' e); ]
+  | apply orelation_of_relation_preserves_identity;
+  | simplify; intros;
+    apply (.= (orelation_of_relation_preserves_composition o1 o2 o4 f1 (f3∘f2)));
+    apply (#‡(orelation_of_relation_preserves_composition o2 o3 o4 f2 f3)); ]
+qed.
+
+theorem SUBSETS_faithful:
+ ∀S,T.∀f,g:arrows2 (category2_of_category1 REL) S T.
+  map_arrows2 ?? SUBSETS' ?? f = map_arrows2 ?? SUBSETS' ?? g → f=g.
+ intros; unfold SUBSETS' in e; simplify in e; cases e;
+ unfold orelation_of_relation in e3; simplify in e3; clear e e1 e2 e4;
+ intros 2; lapply (e3 (singleton ? x)); cases Hletin;
+ split; intro; [ lapply (s y); | lapply (s1 y); ]
+  [2,4: exists; [1,3:apply x] split; [1,3: assumption |*: change with (x=x); apply rule #]
+  |*: cases Hletin1; cases x1; change in f3 with (eq1 ? x w); apply (. f3‡#); assumption;]
+qed.
\ No newline at end of file