Library ConCaT.CATEGORY_THEORY.NT.InterChangeLaw



Require Export CatFunct.

Set Implicit Arguments.
Unset Strict Implicit.

Section horz_comp.

Variables (A B C : Category) (F G : Functor A B) (F' G' : Functor B C)
  (T : NT F G) (T' : NT F' G').

Definition Ast (a : A) : (F o_F F') a --> (G o_F G') a :=
  T' (F a) o FMor G' (T a).

Lemma Ast_eq :
 forall a : A, FMor F' (T a) o T' (G a) =_S T' (F a) o FMor G' (T a).
Proof.
intro a; apply NatCond.
Qed.

Lemma Ast_nt_law : NT_law Ast.
Proof.
unfold NT_law, Ast, Comp_Functor in |- *.
unfold FMor at 1 in |- *; simpl in |- *.
unfold FMor at 3 in |- *; simpl in |- *.
unfold Comp_FMor in |- *.
intros a b f.
apply Trans with ((FMor F' (T a) o T' (G a)) o FMor G' (FMor G f)).
apply Trans with (FMor F' (FMor F f) o FMor F' (T b) o T' (G b)).
apply Comp_l; apply Sym; apply (Ast_eq b).
apply Trans with (FMor F' (T a) o FMor F' (FMor G f) o T' (G b)).
apply Trans with ((FMor F' (FMor F f) o FMor F' (T b)) o T' (G b)).
apply Ass.
apply Trans with ((FMor F' (T a) o FMor F' (FMor G f)) o T' (G b)).
apply Comp_r.
apply Trans with (FMor F' (FMor F f o T b)).
apply FComp1.
apply Trans with (FMor F' (T a o FMor G f)).
apply FPres; apply NatCond.
apply FComp.
apply Ass1.
apply Trans with (FMor F' (T a) o T' (G a) o FMor G' (FMor G f)).
apply Comp_l; apply NatCond.
apply Ass.
apply Comp_r.
apply (Ast_eq a).
Qed.

Canonical Structure CompH_NT := Build_NT Ast_nt_law.

End horz_comp.

Infix "o_NTh" := CompH_NT (at level 20, right associativity).

Section interchangelaw.

Variables (A B C : Category) (F G H : Functor A B) (F' G' H' : Functor B C).
Variables (T : NT F G) (T' : NT F' G') (U : NT G H) (U' : NT G' H').

Lemma InterChange_law :
 (T o_NTh T') o_NTv U o_NTh U' =_NT (T o_NTv U) o_NTh T' o_NTv U'.
Proof.
unfold Equal_NT in |- *; intro a; simpl in |- *.
unfold CompH_NT, Comp_Functor in |- *; simpl in |- *.
unfold Ast, Comp_tau in |- *; simpl in |- *.
unfold Comp_tau in |- *.
apply
       Trans with ((T' (F a) o U' (F a)) o FMor H' (T a) o FMor H' (U a)).
apply Trans with (T' (F a) o FMor G' (T a) o U' (G a) o FMor H' (U a)).
apply Ass1.
apply Trans with (T' (F a) o U' (F a) o FMor H' (T a) o FMor H' (U a)).
apply Comp_l.
apply Trans with ((FMor G' (T a) o U' (G a)) o FMor H' (U a)).
apply Ass.
apply Trans with ((U' (F a) o FMor H' (T a)) o FMor H' (U a)).
apply Comp_r; apply NatCond.
apply Ass1.
apply Ass.
apply Comp_l; apply FComp1.
Qed.

End interchangelaw.


Definition EqualH_NT (C D : Category) (F G F' G' : Functor C D)
  (T : NT F G) (T' : NT F' G') := forall a : C, T a =_H T' a.

Infix "=_NTH" := EqualH_NT (at level 70).

Section assoc_horz_comp.

Variables (A B C D : Category) (F G : Functor A B)
  (F' G' : Functor B C) (F'' G'' : Functor C D).
Variables (T : NT F G) (T' : NT F' G') (T'' : NT F'' G'').

Lemma CompH_NT_assoc : (T o_NTh T') o_NTh T'' =_NTH T o_NTh T' o_NTh T''.
Proof.
unfold EqualH_NT, CompH_NT in |- *; simpl in |- *.
unfold Ast in |- *; simpl in |- *.
unfold Comp_FOb in |- *.
unfold FMor at 4 in |- *; simpl in |- *.
unfold Comp_FMor in |- *.
intro a.
apply Build_Equal_hom.
apply
       Trans
        with
          (T'' (F' (F a)) o FMor G'' (T' (F a)) o FMor G'' (FMor G' (T a))).
apply Comp_l; apply FComp.
apply Ass.
Qed.

End assoc_horz_comp.