1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "formal_topology/basic_pairs.ma".
16 include "formal_topology/o-basic_pairs.ma".
17 include "formal_topology/relations_to_o-algebra.ma".
19 definition o_basic_pair_of_basic_pair: basic_pair → Obasic_pair.
22 [ apply (POW (concr b));
23 | apply (POW (form b));
24 | apply (POW⎽⇒ ?); apply (rel b); ]
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).
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;
37 apply (respects_comp2 ?? POW (concr BP1) (form BP1) (form BP2) (⊩\sub BP1) r\sub\f);
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).
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);]
55 apply (.= (respects_comp2 ?? POW (concr S) (concr T) (form T) (a\sub\c) (⊩\sub T))^-1);
57 apply (.= (respects_comp2 ?? POW (concr S) (concr T) (form T) (b\sub\c) (⊩\sub T))^-1);
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)).
69 [ apply (o_relation_pair_of_relation_pair S T);
70 | apply (o_relation_pair_of_relation_pair_is_morphism S T)]
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);]
84 apply prop22;[2,4,6,8: apply rule #;]
85 apply (respects_id2 ?? POW (concr o));
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))
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);]
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);
108 definition BP_to_OBP: carr3 (arrows3 CAT2 (category2_of_category1 BP) OBP).
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;]
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));
121 apply (.= respects_comp2 ?? POW (concr S) (concr T) (form T) g \sub \c (⊩ \sub T));
126 theorem BP_to_OBP_full: full2 ?? BP_to_OBP.
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);
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);
137 apply (let xxxx ≝POW in (respects_comp2 ?? POW (concr S) (form S) (form T) (rel S) gf)^-1)]
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‡#));