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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
{-# OPTIONS --safe --without-K #-}
 
-- Morphisms of UC setups.
 
module CategoricalCrypto.UCSetup.Morphism where
 
open import Function.Bundles
open import Level
open import Relation.Binary.Bundles
 
open import Categories.Category
open import Categories.Category.Instance.Setoids
open import Categories.Category.Monoidal
open import Categories.Functor renaming (id to idF)
open import Categories.Functor.Presheaf
open import Categories.Functor.Presheaf.Morphism
open import Categories.Monad.Graded
open import Categories.Monad.Graded.Morphism
 
open import CategoricalCrypto.UCSetup
 
private variable
o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ o₂ ℓ₂ e₂ o₂′ ℓ₂′ e₂′ o₃ ℓ₃ e₃ o₃′ ℓ₃′ e₃′ cs ℓs : Level
 
module _ (𝕊 : UCSetup o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ cs ℓs)
(𝕊′ : UCSetup o₂ ℓ₂ e₂ o₂′ ℓ₂′ e₂′ cs ℓs) where
private
module S = UCSetup 𝕊
module S′ = UCSetup 𝕊′
 
record UCSetupMorphism : Set (o₁ ⊔ ℓ₁ ⊔ e₁ ⊔ o₁′ ⊔ ℓ₁′ ⊔ e₁′
⊔ o₂ ⊔ ℓ₂ ⊔ e₂ ⊔ o₂′ ⊔ ℓ₂′ ⊔ e₂′ ⊔ cs ⊔ ℓs) where
field
effect : GradedKleisliMorphism S.ℳ S′.ℳ
 
open GradedKleisliMorphism effect public
 
field
ν : PresheafMorphism F S.ℰ S′.ℰ
 
module ν = PresheafMorphism ν
 
-- Keeping 𝒞, ℐ and ℳ and replacing ℰ by a presheaf that receives ℰ's tests
module _ {𝒞 : Category o₁′ ℓ₁′ e₁′} {ℐ : MonoidalCategory o₁ ℓ₁ e₁}
{ℳ : GradedKleisliTriple ℐ 𝒞}
(ℰ ℰ′ : Presheaf 𝒞 (Setoids cs ℓs)) where
 
changeKernel : PresheafMorphism idF ℰ ℰ′
→ UCSetupMorphism (record { 𝒞 = 𝒞 ; ℐ = ℐ ; ℳ = ℳ ; ℰ = ℰ })
(record { 𝒞 = 𝒞 ; ℐ = ℐ ; ℳ = ℳ ; ℰ = ℰ′ })
changeKernel ν = record { effect = idMorphism 𝒞 ℐ ℳ ; ν = ν }
 
------------------------------------------------------------------------
-- Identity and composition
------------------------------------------------------------------------
 
idᵁ : (𝕊 : UCSetup o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ cs ℓs) → UCSetupMorphism 𝕊 𝕊
idᵁ 𝕊 = changeKernel ℰ ℰ (idᵛ ℰ)
where open UCSetup 𝕊
 
module _ {𝕊 : UCSetup o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ cs ℓs}
{𝕊′ : UCSetup o₂ ℓ₂ e₂ o₂′ ℓ₂′ e₂′ cs ℓs}
{𝕊″ : UCSetup o₃ ℓ₃ e₃ o₃′ ℓ₃′ e₃′ cs ℓs} where
 
composeᵁ : UCSetupMorphism 𝕊′ 𝕊″ → UCSetupMorphism 𝕊 𝕊′ → UCSetupMorphism 𝕊 𝕊″
composeᵁ 𝕄′ 𝕄 = record
{ effect = composeMorphism 𝕄′.effect 𝕄.effect
; ν = _∘ᵛ_ {G = 𝕄.F} {F = 𝕄′.F} 𝕄′.ν 𝕄.ν }
where module 𝕄 = UCSetupMorphism 𝕄
module 𝕄′ = UCSetupMorphism 𝕄′
 
module _ {𝕊 : UCSetup o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ cs ℓs}
{𝕊′ : UCSetup o₂ ℓ₂ e₂ o₂′ ℓ₂′ e₂′ cs ℓs}
(𝕄 : UCSetupMorphism 𝕊 𝕊′) where
private
module S′ = UCSetup 𝕊′
module 𝕄 = UCSetupMorphism 𝕄
module 𝕄∘id = UCSetupMorphism (composeᵁ 𝕄 (idᵁ 𝕊))
module id∘𝕄 = UCSetupMorphism (composeᵁ (idᵁ 𝕊′) 𝕄)
module ℰ = Functor (UCSetup.ℰ 𝕊)
module ℰ′ {A} = Setoid (Functor.₀ S′.ℰ (𝕄.F.₀ A))
 
identityʳ-κ : ∀ {X A} → 𝕄∘id.κ {X} {A} S′.𝒞.≈ 𝕄.κ
identityʳ-κ = S′.𝒞.elimʳ 𝕄.F.identity
 
identityˡ-κ : ∀ {X A} → id∘𝕄.κ {X} {A} S′.𝒞.≈ 𝕄.κ
identityˡ-κ = S′.𝒞.identityˡ
 
identityʳ-ν : ∀ {A} {x : Setoid.Carrier (ℰ.₀ A)}
→ 𝕄∘id.ν.η A ⟨$⟩ x ℰ′.≈ 𝕄.ν.η A ⟨$⟩ x
identityʳ-ν = ℰ′.refl
 
identityˡ-ν : ∀ {A} {x : Setoid.Carrier (ℰ.₀ A)}
→ id∘𝕄.ν.η A ⟨$⟩ x ℰ′.≈ 𝕄.ν.η A ⟨$⟩ x
identityˡ-ν = ℰ′.refl
 
------------------------------------------------------------------------
-- The epi/mono factorization
------------------------------------------------------------------------
 
module Factorization {𝕊 : UCSetup o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ cs ℓs}
{𝕊′ : UCSetup o₂ ℓ₂ e₂ o₂′ ℓ₂′ e₂′ cs ℓs}
(𝕄 : UCSetupMorphism 𝕊 𝕊′) where
open UCSetupMorphism 𝕄
 
imageSetup : UCSetup o₁ ℓ₁ e₁ o₁′ ℓ₁′ e₁′ cs ℓs
imageSetup = record
{ 𝒞 = UCSetup.𝒞 𝕊 ; ℐ = UCSetup.ℐ 𝕊 ; ℳ = UCSetup.ℳ 𝕊 ; ℰ = image ν }
 
coarsen-to-image : UCSetupMorphism 𝕊 imageSetup
coarsen-to-image = changeKernel (UCSetup.ℰ 𝕊) (image ν) (toImage ν)
 
image-morphism : UCSetupMorphism imageSetup 𝕊′
image-morphism = record { effect = effect ; ν = fromImage ν }