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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
{-# OPTIONS --safe --without-K #-}
--------------------------------------------------------------------------------
-- Improved TC
--------------------------------------------------------------------------------
 
module Reflection.TCI where
 
open import Meta.Prelude
 
open import Data.List using (map)
 
import Agda.Builtin.Reflection as R'
import Reflection as R
open import Reflection.Syntax
 
open import Class.Monad hiding (Monad-TC)
open import Class.MonadError using (MonadError)
open import Class.MonadReader
open import Class.MonadTC
 
open Monad
 
TC : Set ℓ → Set ℓ
TC = ReaderT TCEnv R.TC
 
Monad-TC : Monad TC
Monad-TC = Monad-ReaderT
 
MonadReader-TC : MonadReader TCEnv TC ⦃ Monad-TC ⦄
MonadReader-TC = MonadReader-ReaderT
 
instance _ = Class.MonadError.MonadError-TC
 
MonadError-TC : MonadError (List ErrorPart) TC
MonadError-TC = MonadError-ReaderT
 
applyReductionOptions : TC A → TC A
applyReductionOptions x r@record { reduction = onlyReduce red } = R'.withReduceDefs (true , red) (x r)
applyReductionOptions x r@record { reduction = dontReduce red } = R'.withReduceDefs (false , red) (x r)
 
applyNormalisation : TC A → TC A
applyNormalisation x r@record { normalisation = n } = R.withNormalisation n (applyReductionOptions x r)
 
applyReconstruction : TC A → TC A
applyReconstruction x r@record { reconstruction = false } = x r
applyReconstruction x r@record { reconstruction = true } = R'.withReconstructed true (x r)
 
applyNoConstraints : TC A → TC A
applyNoConstraints x r@record { noConstraints = false } = x r
applyNoConstraints x r@record { noConstraints = true } = R'.noConstraints (x r)
 
applyExtContext : Telescope → R.TC A → R.TC A
applyExtContext [] x = x
applyExtContext (t ∷ ts) x = applyExtContext ts $ (uncurry R.extendContext) t x
 
liftTC : R.TC A → TC A
liftTC x = λ r → applyExtContext (r .TCEnv.localContext) x
 
liftTC1 : (A → R.TC B) → A → TC B
liftTC1 f a = liftTC (f a)
 
liftTC2 : (A → B → R.TC C) → A → B → TC C
liftTC2 f a b = liftTC (f a b)
 
liftTC3 : (A → B → C → R.TC D) → A → B → C → TC D
liftTC3 f a b c = liftTC (f a b c)
 
module MonadTCI where
unify : Term → Term → TC ⊤
unify = applyNoConstraints ∘₂ liftTC2 R.unify
 
typeError : List ErrorPart → TC A
typeError = liftTC1 R.typeError
 
inferType : Term → TC Type
inferType = applyReconstruction ∘ applyNormalisation ∘ liftTC1 R.inferType
 
checkType : Term → Type → TC Term
checkType = (applyReconstruction ∘ applyNormalisation) ∘₂ liftTC2 R.checkType
 
normalise : Term → TC Term
normalise = applyReductionOptions ∘ applyReconstruction ∘ liftTC1 R.normalise
 
reduce : Term → TC Term
reduce = applyReductionOptions ∘ applyReconstruction ∘ liftTC1 R.reduce
 
quoteTC : A → TC Term
quoteTC = applyNormalisation ∘ liftTC1 R.quoteTC
 
unquoteTC : Term → TC A
unquoteTC = liftTC1 R.unquoteTC
 
quoteωTC : ∀ {A : Setω} → A → TC Term
quoteωTC = λ a → liftTC (R'.quoteωTC a)
 
freshName : String → TC Name
freshName = liftTC1 R.freshName
 
declareDef : Arg Name → Type → TC ⊤
declareDef = liftTC2 R.declareDef
 
declarePostulate : Arg Name → Type → TC ⊤
declarePostulate = liftTC2 R.declarePostulate
 
defineFun : Name → List Clause → TC ⊤
defineFun = liftTC2 R.defineFun
 
getType : Name → TC Type
getType = applyReconstruction ∘ liftTC1 R.getType
 
getDefinition : Name → TC Definition
getDefinition = applyReconstruction ∘ liftTC1 R.getDefinition
 
blockOnMeta : Meta → TC A
blockOnMeta = liftTC1 R.blockOnMeta
 
commitTC : TC ⊤
commitTC = liftTC R.commitTC
 
isMacro : Name → TC Bool
isMacro = liftTC1 R.isMacro
 
debugPrint : String → ℕ → List ErrorPart → TC ⊤
debugPrint = liftTC3 R.debugPrint
 
runSpeculative : TC (A × Bool) → TC A
runSpeculative = R.runSpeculative ∘_
 
getInstances : Meta → TC (List Term)
getInstances = liftTC1 R'.getInstances
 
MonadTC-TCI : MonadTC TC ⦃ Monad-TC ⦄ ⦃ MonadError-TC ⦄
MonadTC-TCI = record { MonadTCI }