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