Modules

categorical-crypto

  • Prelude

CategoricalCrypto

  • CategoricalCrypto
  • Abstract
  • Abstract2
  • Abstract2.Equivalence
  • Abstract2.Morphism
  • Abstract2.OAPEmulation
  • Abstract2.WideSubcategory
  • Channel.Category
  • Channel.Core
  • Channel.Selection
  • Examples.Basic
  • Examples.Commitment
  • Examples.RelSetup
  • Examples.Signatures
  • FamilyCategory
  • Machine.Constraints
  • Machine.Core
  • MachineAxioms
  • RandomOracle
  • RandomOracle2
  • SFunM
  • Standard
  • Standard2
  • Standard2.Morphism
  • StandardTV
  • UCSetup
  • UCSetup.Morphism
  • VanishingTV

Categories

  • Actegory
  • Actegory.Underlying
  • Category.EquivClosureHelper
  • Coherence.Monoidal
  • Coherence.Monoidal.Compare
  • Coherence.Monoidal.Diagram
  • Coherence.Monoidal.Frontend
  • Coherence.Monoidal.Frontend.Core
  • Coherence.Monoidal.Frontend.Sigma
  • Coherence.Monoidal.MacLane
  • Coherence.Monoidal.Normalize
  • Coherence.Monoidal.Reflect
  • Coherence.Monoidal.Sigma
  • Coherence.Monoidal.Test.Frontend
  • Coherence.Monoidal.Test.InterchangeStress
  • Coherence.Monoidal.Test.Limitations
  • Coherence.Monoidal.Test.SigmaFrontend
  • Coherence.Monoidal.WireCoherence
  • CoherenceIsos
  • Diagram.Coend.Ext.Setoids
  • Discrete
  • FreeMonoidal
  • FreeStrictMonoidal
  • Functor.Monoidal.CurriedTensor
  • Functor.Monoidal.CurriedTensor.Properties
  • Functor.Monoidal.Properties.Ext
  • Functor.Presheaf.Morphism
  • GradedKleisli
  • GradedKleisli.Functorial
  • GradedKleisli.Functorial.Category
  • GradedKleisli.Regrade
  • KernelCongruence
  • KernelCongruence.Reindex
  • LocallyGraded
  • LocallyGraded.FreeActegory
  • LocallyGraded.FreeActegory.Kleisli
  • LocallyGraded.Kleisli
  • Monad.Graded.Ext
  • Monad.Graded.Morphism
  • Monad.Graded.Pullback
  • Monad.Graded.Uncurried
  • Morphism.Reasoning.Ext
  • NaturalTransformationHelper
  • Properties

Class

  • Monad.Ext

Data

  • List.Properties.Ext
  • Maybe.Ext
  • Nat.Poly

LibExt

  • LibExt
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
{-# OPTIONS --safe --without-K #-}
 
-- The curried tensor X ↦ (X βŠ— -) as a monoidal functor M β†’ Endofunctors π’ž.
 
open import Categories.Category.Monoidal
 
module Categories.Functor.Monoidal.CurriedTensor {o β„“ e} (M : MonoidalCategory o β„“ e) where
 
open import Data.Fin
open import Data.Product
open import Data.Vec using (_∷_; [])
 
open import Categories.Category
open import Categories.Category.Construction.Functors
open import Categories.Category.Monoidal.Construction.Endofunctors
open import Categories.Category.Product
import Categories.Coherence.Monoidal as Coh
open import Categories.Functor renaming (id to idF)
open import Categories.Functor.Monoidal
open import Categories.NaturalTransformation
 
private
module M = MonoidalCategory M
π’ž = M.U
module π’ž = Category π’ž
E = Endofunctors π’ž
module E = MonoidalCategory E
π’žΓ—π’ž = Product π’ž π’ž
 
open M
open import Categories.Category.Monoidal.Utilities M.monoidal
open Shorthands
 
curriedTensor : MonoidalFunctor M E
curriedTensor = record { F = F ; isMonoidal = isMon }
where
open Functor
F : Functor π’ž E.U
F = curry.Fβ‚€ M.βŠ—
 
Src Tgt : Functor π’žΓ—π’ž E.U
Src = E.βŠ— ∘F (F ⁂ F)
Tgt = F ∘F M.βŠ—
 
Ξ΅ : NaturalTransformation idF (Fβ‚€ F unit)
Ξ΅ = ntHelper record { Ξ· = Ξ» _ β†’ λ⇐ ; commute = Ξ» _ β†’ M.unitorΛ‘-commute-to }
 
homo-Ξ· : βˆ€ XY β†’ Fβ‚€ Src XY E.β‡’ Fβ‚€ Tgt XY
homo-Ξ· (X , Y) = ntHelper record { Ξ· = Ξ» _ β†’ α⇐ ; commute = inner }
where
open Category.HomReasoning π’ž
inner : βˆ€ {A B} (f : π’ž [ A , B ]) β†’ α⇐ π’ž.∘ π’ž.id βŠ—β‚ π’ž.id βŠ—β‚ f π’ž.β‰ˆ π’ž.id βŠ—β‚ f π’ž.∘ α⇐
inner f = begin
α⇐ π’ž.∘ (π’ž.id βŠ—β‚ (π’ž.id βŠ—β‚ f)) β‰ˆβŸ¨ M.assoc-commute-to ⟩
((π’ž.id βŠ—β‚ π’ž.id) βŠ—β‚ f) π’ž.∘ α⇐ β‰ˆβŸ¨ F-resp-β‰ˆ M.βŠ— (identity M.βŠ— , π’ž.Equiv.refl) ⟩∘⟨refl ⟩
(π’ž.id βŠ—β‚ f) π’ž.∘ α⇐ ∎
 
homo-commute : βˆ€ {XY Xβ€²Yβ€²} (f : π’žΓ—π’ž [ XY , Xβ€²Yβ€² ]) β†’ homo-Ξ· Xβ€²Yβ€² E.∘ F₁ Src f E.β‰ˆ F₁ Tgt f E.∘ homo-Ξ· XY
homo-commute (m , n) = begin
α⇐ π’ž.∘ π’ž.id βŠ—β‚ n βŠ—β‚ π’ž.id π’ž.∘ m βŠ—β‚ π’ž.id β‰ˆβŸ¨ refl⟩∘⟨ merge ⟩
α⇐ π’ž.∘ m βŠ—β‚ n βŠ—β‚ π’ž.id β‰ˆβŸ¨ M.assoc-commute-to ⟩
(m βŠ—β‚ n) βŠ—β‚ π’ž.id π’ž.∘ α⇐ ∎
where
open Category.HomReasoning π’ž
merge : π’ž.id βŠ—β‚ (n βŠ—β‚ π’ž.id) π’ž.∘ m βŠ—β‚ π’ž.id π’ž.β‰ˆ m βŠ—β‚ n βŠ—β‚ π’ž.id
merge = ⟺ (homomorphism M.βŠ—) β—‹ F-resp-β‰ˆ M.βŠ— (π’ž.identityΛ‘ , π’ž.identityΚ³)
 
βŠ—-homo : NaturalTransformation Src Tgt
βŠ—-homo = ntHelper record { Ξ· = homo-Ξ· ; commute = homo-commute }
 
assoc-law : βˆ€ {X Y Z x} β†’
Ξ±β‡’ βŠ—β‚ π’ž.id π’ž.∘ α⇐ π’ž.∘ π’ž.id βŠ—β‚ π’ž.id π’ž.∘ α⇐ π’ž.β‰ˆ α⇐ π’ž.∘ (π’ž.id βŠ—β‚ α⇐ π’ž.∘ π’ž.id) π’ž.∘ π’ž.id
assoc-law {X} {Y} {Z} {x} = S.solveM lhs rhs
where
module S = Coh.Structural M (X ∷ Y ∷ Z ∷ x ∷ [])
xβ‚€ = S.Var zero
yβ‚€ = S.Var (suc zero)
zβ‚€ = S.Var (suc (suc zero))
qβ‚€ = S.Var (suc (suc (suc zero)))
lhs = (S.Ξ±β‡’ {xβ‚€} {yβ‚€} {zβ‚€} S.βŠ—β‚ S.id {qβ‚€}) S.∘
(S.α⇐ {xβ‚€ S.βŠ—β‚€ yβ‚€} {zβ‚€} {qβ‚€} S.∘
((S.id {xβ‚€ S.βŠ—β‚€ yβ‚€} S.βŠ—β‚ S.id {zβ‚€ S.βŠ—β‚€ qβ‚€}) S.∘ S.α⇐ {xβ‚€} {yβ‚€} {zβ‚€ S.βŠ—β‚€ qβ‚€}))
rhs = S.α⇐ {xβ‚€} {yβ‚€ S.βŠ—β‚€ zβ‚€} {qβ‚€} S.∘
(((S.id {xβ‚€} S.βŠ—β‚ S.α⇐ {yβ‚€} {zβ‚€} {qβ‚€}) S.∘ S.id) S.∘ S.id)
 
unitΛ‘-law : βˆ€ {X x} β†’ Ξ»β‡’ βŠ—β‚ π’ž.id π’ž.∘ α⇐ π’ž.∘ π’ž.id βŠ—β‚ π’ž.id π’ž.∘ λ⇐ π’ž.β‰ˆ π’ž.id
unitΛ‘-law {X} {x} = S.solveM lhs (S.id {xβ‚€ S.βŠ—β‚€ qβ‚€})
where
module S = Coh.Structural M (X ∷ x ∷ [])
xβ‚€ = S.Var zero
qβ‚€ = S.Var (suc zero)
lhs = (S.Ξ»β‡’ {xβ‚€} S.βŠ—β‚ S.id {qβ‚€}) S.∘
(S.α⇐ {S.unit} {xβ‚€} {qβ‚€} S.∘
((S.id {S.unit} S.βŠ—β‚ S.id {xβ‚€ S.βŠ—β‚€ qβ‚€}) S.∘ S.λ⇐ {xβ‚€ S.βŠ—β‚€ qβ‚€}))
 
unitΚ³-law : βˆ€ {X x} β†’ ρ⇒ βŠ—β‚ π’ž.id π’ž.∘ α⇐ π’ž.∘ π’ž.id βŠ—β‚ λ⇐ π’ž.∘ π’ž.id π’ž.β‰ˆ π’ž.id
unitΚ³-law {X} {x} = S.solveM lhs (S.id {xβ‚€ S.βŠ—β‚€ qβ‚€})
where
module S = Coh.Structural M (X ∷ x ∷ [])
xβ‚€ = S.Var zero
qβ‚€ = S.Var (suc zero)
lhs = (S.ρ⇒ {xβ‚€} S.βŠ—β‚ S.id {qβ‚€}) S.∘
(S.α⇐ {xβ‚€} {S.unit} {qβ‚€} S.∘
((S.id {xβ‚€} S.βŠ—β‚ S.λ⇐ {qβ‚€}) S.∘ S.id))
 
isMon : IsMonoidalFunctor M E F
isMon = record
{ Ξ΅ = Ξ΅ ; βŠ—-homo = βŠ—-homo
; associativity = assoc-law ; unitaryΛ‘ = unitΛ‘-law ; unitaryΚ³ = unitΚ³-law }