X-Git-Url: http://git.megacz.com/?p=coq-categories.git;a=blobdiff_plain;f=src%2FIsomorphisms_ch1_5.v;h=422d4bbf75c4dfb0c8a138ad22f238a6f2f7d538;hp=fd9e19a6d5462cdaa1ae5087e3e875cad7e54f34;hb=57dfee583c84915cb6b3aadfa1dba692681499b3;hpb=ff3003c261295c60d367580b6700396102eb5a9c diff --git a/src/Isomorphisms_ch1_5.v b/src/Isomorphisms_ch1_5.v index fd9e19a..422d4bb 100644 --- a/src/Isomorphisms_ch1_5.v +++ b/src/Isomorphisms_ch1_5.v @@ -1,6 +1,5 @@ Generalizable All Variables. -Require Import Preamble. -Require Import General. +Require Import Notations. Require Import Categories_ch1_3. Require Import Functors_ch1_4. @@ -45,7 +44,7 @@ Definition iso_id `{C:Category}(A:C) : Isomorphic A A. Defined. (* the composition of two isomorphisms is an isomorphism *) -Definition id_comp `{C:Category}{a b c:C}(i1:Isomorphic a b)(i2:Isomorphic b c) : Isomorphic a c. +Definition iso_comp `{C:Category}{a b c:C}(i1:Isomorphic a b)(i2:Isomorphic b c) : Isomorphic a c. intros; apply (@Build_Isomorphic _ _ C a c (#i1 >>> #i2) (#i2⁻¹ >>> #i1⁻¹)); setoid_rewrite juggle3; [ setoid_rewrite (iso_comp1 i2) | setoid_rewrite (iso_comp2 i1) ]; @@ -53,6 +52,7 @@ Definition id_comp `{C:Category}{a b c:C}(i1:Isomorphic a b)(i2:Isomorphic b c) [ setoid_rewrite (iso_comp1 i1) | setoid_rewrite (iso_comp2 i2) ]; reflexivity. Defined. +Notation "a >>≅>> b" := (iso_comp a b). Definition functors_preserve_isos `{C1:Category}`{C2:Category}{Fo}(F:Functor C1 C2 Fo){a b:C1}(i:Isomorphic a b) : Isomorphic (F a) (F b). @@ -102,3 +102,48 @@ Lemma iso_shift_left' `{C:Category} : forall {a b c:C}(f:a~>b)(g:a~>c)(i:Isomorp symmetry. apply right_identity. Qed. + +Lemma isos_forward_equal_then_backward_equal `{C:Category}{a}{b}(i1 i2:a ≅ b) : #i1 ~~ #i2 -> #i1⁻¹ ~~ #i2⁻¹. + intro H. + setoid_rewrite <- left_identity at 1. + setoid_rewrite <- (iso_comp2 i2). + setoid_rewrite associativity. + setoid_rewrite <- H. + setoid_rewrite iso_comp1. + setoid_rewrite right_identity. + reflexivity. + Qed. + +Lemma iso_inv_inv `{C:Category}{a}{b}(i:a ≅ b) : #(i⁻¹)⁻¹ ~~ #i. + unfold iso_inv; simpl. + reflexivity. + Qed. + +(* the next four lemmas are handy for setoid_rewrite; they let you avoid having to get the associativities right *) +Lemma iso_comp2_right : forall `{C:Category}{a b}(i:a≅b) c (g:b~>c), iso_backward i >>> (iso_forward i >>> g) ~~ g. + intros. + setoid_rewrite <- associativity. + setoid_rewrite iso_comp2. + apply left_identity. + Qed. + +Lemma iso_comp2_left : forall `{C:Category}{a b}(i:a≅b) c (g:c~>b), (g >>> iso_backward i) >>> iso_forward i ~~ g. + intros. + setoid_rewrite associativity. + setoid_rewrite iso_comp2. + apply right_identity. + Qed. + +Lemma iso_comp1_right : forall `{C:Category}{a b}(i:a≅b) c (g:a~>c), iso_forward i >>> (iso_backward i >>> g) ~~ g. + intros. + setoid_rewrite <- associativity. + setoid_rewrite iso_comp1. + apply left_identity. + Qed. + +Lemma iso_comp1_left : forall `{C:Category}{a b}(i:a≅b) c (g:c~>a), (g >>> iso_forward i) >>> iso_backward i ~~ g. + intros. + setoid_rewrite associativity. + setoid_rewrite iso_comp1. + apply right_identity. + Qed.