open import Categories.Category.Core open import Categories.Category.Cartesian open import Categories.Object.NaturalNumbers.Parametrized open import Categories.Category.BinaryProducts open import Categories.Object.Terminal import Categories.Morphism.Reasoning as MR module Misc.PrimitiveRecursion {o β e} {π : Category o β e} (cartesian : Cartesian π) (PNNO : ParametrizedNNO π cartesian) where open Cartesian cartesian open Category π open MR π open Equiv open HomReasoning open ParametrizedNNO PNNO open BinaryProducts products renaming (unique to β¨β©-unique; Ξ· to β-Ξ·) open Terminal terminal using (!; !-unique) Ο' : β {X Y : Obj} β X β Y β Y Γ X Γ N β Y β X Γ N β Y Γ X Γ N Ο' {X} {Y} f g = universal {X = Y Γ X Γ N} β¨ f , β¨ id , z β ! β© β© β¨ g , β¨ Οβ β Οβ , s β Οβ β Οβ β© β© p-rec : β {X Y : Obj} β X β Y β Y Γ (X Γ N) β Y β X Γ N β Y p-rec {X} {Y} f g = Οβ β Ο' f g p-rec-IB : β {X Y : Obj} (f : X β Y) (g : Y Γ X Γ N β Y) β p-rec f g β β¨ id , z β ! β© β f p-rec-IB {X} {Y} f g = (pullΚ³ (sym commuteβ)) β projectβ p-rec-IS : β {X Y : Obj} (f : X β Y) (g : Y Γ X Γ N β Y) β p-rec f g β ( id β s ) β g β Ο' f g p-rec-IS {X} {Y} f g = (pullΚ³ (sym commuteβ)) β pullΛ‘ projectβ ΟββΟββΟ' : β {X Y : Obj} (f : X β Y) (g : Y Γ X Γ N β Y) β Οβ β Οβ β Ο' f g β Οβ ΟββΟββΟ' f g = begin Οβ β Οβ β Ο' f g ββ¨ unique (sym zeroβ) (sym succβ) β© universal id id ββ¨ sym (unique (sym projectβ) (sym Οβββ)) β© Οβ β where zeroβ : (Οβ β Οβ β Ο' f g) β β¨ id , z β ! β© β id zeroβ = begin (Οβ β Οβ β Ο' f g) β β¨ id , z β ! β© ββ¨ pullΚ³ (pullΚ³ (sym commuteβ)) β© Οβ β Οβ β β¨ f , β¨ id , z β ! β© β© ββ¨ reflβ©ββ¨ projectβ β© Οβ β β¨ id , z β ! β© ββ¨ projectβ β© id β succβ : (Οβ β Οβ β Ο' f g) β (id β s) β id β Οβ β Οβ β Ο' f g succβ = begin (Οβ β Οβ β Ο' f g) β (id β s) ββ¨ pullΚ³ (pullΚ³ (sym commuteβ)) β© Οβ β Οβ β β¨ g , β¨ Οβ β Οβ , s β Οβ β Οβ β© β© β Ο' f g ββ¨ reflβ©ββ¨ pullΛ‘ projectβ β© Οβ β β¨ Οβ β Οβ , s β Οβ β Οβ β© β Ο' f g ββ¨ pullΛ‘ projectβ β© (Οβ β Οβ) β Ο' f g ββ¨ (sym identityΛ‘) β reflβ©ββ¨ assoc β© id β Οβ β Οβ β Ο' f g β ΟββΟββΟ' : β {X Y : Obj} (f : X β Y) (g : Y Γ X Γ N β Y) β Οβ β Οβ β Ο' f g β Οβ ΟββΟββΟ' f g = begin Οβ β Οβ β Ο' f g ββ¨ unique (sym zeroβ) (sym succβ) β© universal (z β !) s ββ¨ sym (unique (sym projectβ) (sym Οβββ)) β© Οβ β where zeroβ : (Οβ β Οβ β Ο' f g) β β¨ id , z β ! β© β z β ! zeroβ = begin (Οβ β Οβ β Ο' f g) β β¨ id , z β ! β© ββ¨ pullΚ³ (pullΚ³ (sym commuteβ)) β© Οβ β Οβ β β¨ f , β¨ id , z β ! β© β© ββ¨ reflβ©ββ¨ projectβ β© Οβ β β¨ id , z β ! β© ββ¨ projectβ β© z β ! β succβ : (Οβ β Οβ β Ο' f g) β (id β s) β s β Οβ β Οβ β Ο' f g succβ = begin (Οβ β Οβ β Ο' f g) β (id β s) ββ¨ pullΚ³ (pullΚ³ (sym commuteβ)) β© Οβ β Οβ β β¨ g , β¨ Οβ β Οβ , s β Οβ β Οβ β© β© β Ο' f g ββ¨ reflβ©ββ¨ pullΛ‘ projectβ β© Οβ β β¨ Οβ β Οβ , s β Οβ β Οβ β© β Ο' f g ββ¨ pullΛ‘ projectβ β© (s β Οβ β Οβ) β Ο' f g ββ¨ assocΒ²Ξ²Ξ΅ β© s β Οβ β Οβ β Ο' f g β Ο'-charac : β {X Y : Obj} (f : X β Y) (g : Y Γ X Γ N β Y) β Ο' f g β β¨ p-rec f g , β¨ Οβ , Οβ β© β© Ο'-charac f g = sym (β¨β©-unique refl (sym (β¨β©-unique (ΟββΟββΟ' f g) (ΟββΟββΟ' f g)))) p-induction : β {X Y : Obj} (f : X β Y) (g : Y Γ X Γ N β Y) (w : X Γ N β Y) β f β w β β¨ id , z β ! β© β g β β¨ w , id β© β w β (id β s) β p-rec f g β w p-induction {X} {Y} f g w eqβ eqβ = begin Οβ β Ο' f g ββ¨ reflβ©ββ¨ (sym (unique zeroβ succβ)) β© Οβ β w' ββ¨ projectβ β© w β where w' : X Γ N β Y Γ X Γ N w' = β¨ w , id β© zeroβ : β¨ f , β¨ id , z β ! β© β© β w' β β¨ id , z β ! β© zeroβ = sym (begin w' β β¨ id , z β ! β© ββ¨ β¨β©β β© β¨ w β β¨ id , z β ! β© , id β β¨ id , z β ! β© β© ββ¨ β¨β©-congβ (sym eqβ) identityΛ‘ β© β¨ f , β¨ id , z β ! β© β© β) succβ : β¨ g , β¨ Οβ β Οβ , s β Οβ β Οβ β© β© β β¨ w , id β© β β¨ w , id β© β (id β s) succβ = begin β¨ g , β¨ Οβ β Οβ , s β Οβ β Οβ β© β© β β¨ w , id β© ββ¨ β¨β©β β© β¨ g β β¨ w , id β© , β¨ Οβ β Οβ , s β Οβ β Οβ β© β β¨ w , id β© β© ββ¨ β¨β©-congβ refl β¨β©β β© β¨ g β β¨ w , id β© , β¨ (Οβ β Οβ) β β¨ w , id β© , (s β Οβ β Οβ) β β¨ w , id β© β© β© ββ¨ β¨β©-congβ eqβ (β¨β©-congβ (cancelΚ³ projectβ) (pullΚ³ (cancelΚ³ projectβ))) β© β¨ w β (id β s) , β¨ Οβ , s β Οβ β© β© ββ¨ β¨β©-congβ refl (β¨β©-congβ (sym identityΛ‘) refl β sym βββ¨β©) β© β¨ w β (id β s) , (id β s) β β¨ Οβ , Οβ β© β© ββ¨ β¨β©-congβ refl (elimΚ³ β-Ξ·) β© β¨ w β (id β s) , (id β s) β© ββ¨ β¨β©-congβ refl (sym identityΛ‘) β sym β¨β©β β© β¨ w , id β© β (id β s) β