]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/formal_topology/overlap/basic_pairs_to_o-basic_pairs.ma
Additional contribs.
[helm.git] / helm / software / matita / contribs / formal_topology / overlap / basic_pairs_to_o-basic_pairs.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 include "basic_pairs.ma".
16 include "o-basic_pairs.ma".
17 include "relations_to_o-algebra.ma".
18
19 (* Qui, per fare le cose per bene, ci serve la nozione di funtore categorico *)
20 definition o_basic_pair_of_basic_pair: basic_pair → Obasic_pair.
21  intro b;
22  constructor 1;
23   [ apply (map_objs2 ?? POW (concr b));
24   | apply (map_objs2 ?? POW (form b));
25   | apply (map_arrows2 ?? POW (concr b) (form b) (rel b)); ]
26 qed.
27
28 definition o_relation_pair_of_relation_pair:
29  ∀BP1,BP2. relation_pair BP1 BP2 →
30   Orelation_pair (o_basic_pair_of_basic_pair BP1) (o_basic_pair_of_basic_pair BP2).
31  intros;
32  constructor 1;
33   [ apply (map_arrows2 ?? POW (concr BP1) (concr BP2) (r \sub \c));
34   | apply (map_arrows2 ?? POW (form BP1) (form BP2) (r \sub \f));
35   | apply (.= (respects_comp2 ?? POW (concr BP1) (concr BP2) (form BP2)  r\sub\c (⊩\sub BP2) )^-1);
36     cut ( ⊩ \sub BP2 ∘ r \sub \c =_12 r\sub\f ∘ ⊩ \sub BP1) as H;
37     [ apply (.= †H);
38       apply (respects_comp2 ?? POW (concr BP1) (form BP1) (form BP2) (⊩\sub BP1) r\sub\f);
39     | apply commute;]]
40 qed.
41
42 lemma o_relation_pair_of_relation_pair_is_morphism : 
43   ∀S,T:category2_of_category1 BP.    
44   ∀a,b:arrows2 (category2_of_category1 BP) S T.a=b → 
45    (eq2 (arrows2 OBP (o_basic_pair_of_basic_pair S) (o_basic_pair_of_basic_pair T))) 
46     (o_relation_pair_of_relation_pair S T a) (o_relation_pair_of_relation_pair S T b).
47 intros 2 (S T);       
48       intros (a b Eab); split; unfold o_relation_pair_of_relation_pair; simplify;
49        unfold o_basic_pair_of_basic_pair; simplify;
50        [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x); 
51        | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
52        | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
53        | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
54        simplify;
55        apply (prop12);
56        apply (.= (respects_comp2 ?? POW (concr S) (concr T) (form T) (a\sub\c) (⊩\sub T))^-1);
57        apply sym2;
58        apply (.= (respects_comp2 ?? POW (concr S) (concr T) (form T) (b\sub\c) (⊩\sub T))^-1);
59        apply sym2;
60        apply prop12;
61        apply Eab;
62 qed.
63
64 lemma o_relation_pair_of_relation_pair_morphism : 
65   ∀S,T:category2_of_category1 BP.
66   unary_morphism2 (arrows2 (category2_of_category1 BP) S T)
67    (arrows2 OBP (o_basic_pair_of_basic_pair S) (o_basic_pair_of_basic_pair T)).
68 intros (S T);
69    constructor 1;
70      [ apply (o_relation_pair_of_relation_pair S T);
71      | apply (o_relation_pair_of_relation_pair_is_morphism S T)]
72 qed.
73
74 lemma o_relation_pair_of_relation_pair_morphism_respects_id:
75  ∀o:category2_of_category1 BP.
76   o_relation_pair_of_relation_pair_morphism o o (id2 (category2_of_category1 BP) o)
77   = id2 OBP (o_basic_pair_of_basic_pair o).
78    simplify; intros; whd; split; 
79        [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x); 
80        | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
81        | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
82        | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
83     simplify;
84     apply prop12;
85     apply prop22;[2,4,6,8: apply rule #;]
86     apply (respects_id2 ?? POW (concr o));
87 qed. 
88
89 lemma o_relation_pair_of_relation_pair_morphism_respects_comp:
90   ∀o1,o2,o3:category2_of_category1 BP.
91   ∀f1:arrows2 (category2_of_category1 BP) o1 o2.
92   ∀f2:arrows2 (category2_of_category1 BP) o2 o3.
93   (eq2 (arrows2 OBP (o_basic_pair_of_basic_pair o1) (o_basic_pair_of_basic_pair o3)))
94     (o_relation_pair_of_relation_pair_morphism o1 o3 (f2 ∘ f1))
95     (comp2 OBP ???
96       (o_relation_pair_of_relation_pair_morphism o1 o2 f1)
97       (o_relation_pair_of_relation_pair_morphism o2 o3 f2)).
98    simplify; intros; whd; split;
99        [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x); 
100        | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
101        | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
102        | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
103     simplify;
104     apply prop12;
105     apply prop22;[2,4,6,8: apply rule #;]
106     apply (respects_comp2 ?? POW (concr o1) (concr o2) (concr o3) f1\sub\c f2\sub\c);
107 qed.
108
109 definition BP_to_OBP: carr3 (arrows3 CAT2 (category2_of_category1 BP) OBP).
110  constructor 1;
111   [ apply o_basic_pair_of_basic_pair;
112   | intros; apply o_relation_pair_of_relation_pair_morphism;
113   | apply o_relation_pair_of_relation_pair_morphism_respects_id;
114   | apply o_relation_pair_of_relation_pair_morphism_respects_comp;]
115 qed.
116
117 theorem BP_to_OBP_faithful:
118  ∀S,T.∀f,g:arrows2 (category2_of_category1 BP) S T.
119   map_arrows2 ?? BP_to_OBP ?? f = map_arrows2 ?? BP_to_OBP ?? g → f=g.
120  intros; change with ( (⊩) ∘ f \sub \c = (⊩) ∘ g \sub \c);
121  apply (POW_faithful);
122  apply (.= respects_comp2 ?? POW (concr S) (concr T) (form T) f \sub \c (⊩ \sub T));
123  apply sym2;
124  apply (.= respects_comp2 ?? POW (concr S) (concr T) (form T) g \sub \c (⊩ \sub T));
125  apply sym2;
126  apply e;
127 qed.
128
129 theorem BP_to_OBP_full: 
130    ∀S,T.∀f. exT22 ? (λg. map_arrows2 ?? BP_to_OBP S T g = f).
131  intros; 
132  cases (POW_full (concr S) (concr T) (Oconcr_rel ?? f)) (gc Hgc);
133  cases (POW_full (form S) (form T) (Oform_rel ?? f)) (gf Hgf);
134  exists[
135    constructor 1; [apply gc|apply gf]
136    apply (POW_faithful);
137    apply (let xxxx ≝POW in .= respects_comp2 ?? POW (concr S) (concr T) (form T) gc (rel T));
138    apply rule (.= Hgc‡#);
139    apply (.= Ocommute ?? f);
140    apply (.= #‡Hgf^-1);
141    apply (let xxxx ≝POW in (respects_comp2 ?? POW (concr S) (form S) (form T) (rel S) gf)^-1)]
142  split;
143   [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x); 
144   | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
145   | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
146   | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
147  simplify; apply (†(Hgc‡#));
148 qed.