- | intros; split; unfold o_relation_pair_of_relation_pair; simplify;
- unfold o_basic_pair_of_basic_pair; simplify; ]
- | simplify; intros; whd; split; unfold o_relation_pair_of_relation_pair; simplify;
- unfold o_basic_pair_of_basic_pair;
-simplify in ⊢ (? ? ? (? % ? ?) ?);
-simplify in ⊢ (? ? ? (? ? % ?) ?);
-simplify in ⊢ (? ? ? ? (? % ? ?));
-simplify in ⊢ (? ? ? ? (? ? % ?));
- | simplify; intros; whd; split;unfold o_relation_pair_of_relation_pair; simplify;
- unfold o_basic_pair_of_basic_pair;simplify;
-*)
\ No newline at end of file
+ | intros (a b Eab); split; unfold o_relation_pair_of_relation_pair; simplify;
+ unfold o_basic_pair_of_basic_pair; simplify;
+ [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x);
+ | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
+ | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
+ | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
+ simplify;
+ apply (prop12);
+ apply (.= (respects_comp2 ?? POW (concr S) (concr T) (form T) (a\sub\c) (⊩\sub T))^-1);
+ apply sym2;
+ apply (.= (respects_comp2 ?? POW (concr S) (concr T) (form T) (b\sub\c) (⊩\sub T))^-1);
+ apply sym2;
+ apply prop12;
+ apply Eab;
+ ]
+ | simplify; intros; whd; split;
+ [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x);
+ | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
+ | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
+ | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
+ simplify;
+ apply prop12;
+ apply prop22;[2,4,6,8: apply rule #;]
+ apply (respects_id2 ?? POW (concr o));
+ | simplify; intros; whd; split;
+ [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x);
+ | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
+ | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
+ | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
+ simplify;
+ apply prop12;
+ apply prop22;[2,4,6,8: apply rule #;]
+ apply (respects_comp2 ?? POW (concr o1) (concr o2) (concr o3) f1\sub\c f2\sub\c);]
+qed.
+
+theorem BP_to_OBP_faithful:
+ ∀S,T.∀f,g:arrows2 (category2_of_category1 BP) S T.
+ map_arrows2 ?? BP_to_OBP ?? f = map_arrows2 ?? BP_to_OBP ?? g → f=g.
+ intros; change with ( (⊩) ∘ f \sub \c = (⊩) ∘ g \sub \c);
+ apply (POW_faithful);
+ apply (.= respects_comp2 ?? POW (concr S) (concr T) (form T) f \sub \c (⊩ \sub T));
+ apply sym2;
+ apply (.= respects_comp2 ?? POW (concr S) (concr T) (form T) g \sub \c (⊩ \sub T));
+ apply sym2;
+ apply e;
+qed.
+
+theorem BP_to_OBP_full: ∀S,T.∀f. exT22 ? (λg. map_arrows2 ?? BP_to_OBP S T g = f).
+ intros;
+ cases (POW_full (concr S) (concr T) (Oconcr_rel ?? f)) (gc Hgc);
+ cases (POW_full (form S) (form T) (Oform_rel ?? f)) (gf Hgf);
+ exists[
+ constructor 1; [apply gc|apply gf]
+ apply (POW_faithful);
+ apply (let xxxx ≝POW in .= respects_comp2 ?? POW (concr S) (concr T) (form T) gc (rel T));
+ apply rule (.= Hgc‡#);
+ apply (.= Ocommute ?? f);
+ apply (.= #‡Hgf^-1);
+ apply (let xxxx ≝POW in (respects_comp2 ?? POW (concr S) (form S) (form T) (rel S) gf)^-1)]
+ split;
+ [ change in match or_f_minus_star_ with (λq,w,x.fun12 ?? (or_f_minus_star q w) x);
+ | change in match or_f_minus_ with (λq,w,x.fun12 ?? (or_f_minus q w) x);
+ | change in match or_f_ with (λq,w,x.fun12 ?? (or_f q w) x);
+ | change in match or_f_star_ with (λq,w,x.fun12 ?? (or_f_star q w) x);]
+ simplify; apply (†(Hgc‡#));
+qed.