Denotational Semantics in Agda
Data.Irrelevant
Initializing search
    pdmosses/xds-agda
    • About
    • Meta-notation
    • ULC
    • PCF
    • Scheme
    pdmosses/xds-agda
    • About
    • Meta-notation
      • Untyped λ-calculus
      • ULC.All
      • ULC.Variables
      • ULC.Terms
      • ULC.Domains
      • ULC.Environments
      • ULC.Semantics
      • ULC.Checks
      • PCF (Plotkin 1977)
      • PCF.All
      • PCF.Domain Notation
      • PCF.Types
      • PCF.Constants
      • PCF.Variables
      • PCF.Terms
      • PCF.Environments
      • PCF.Checks
      • Core Scheme (R5RS)
      • Scheme.All
      • Scheme.Domain Notation
      • Scheme.Abstract Syntax
      • Scheme.Domain Equations
      • Scheme.Auxiliary Functions
      • Scheme.Semantic Functions

    Data.Irrelevant

    ------------------------------------------------------------------------
    -- The Agda standard library
    --
    -- Wrapper for the proof irrelevance modality
    --
    -- This allows us to store proof irrelevant witnesses in a record and
    -- use projections to manipulate them without having to turn on the
    -- unsafe option --irrelevant-projections.
    -- Cf. Data.Refinement for a use case
    ------------------------------------------------------------------------
    
    {-# OPTIONS --cubical-compatible --safe #-}
    
    module Data.Irrelevant where
    
    open import Level using (Level)
    
    private
      variable
        a b c : Level
        A : Set a
        B : Set b
        C : Set c
    
    ------------------------------------------------------------------------
    -- Type
    
    record Irrelevant (A : Set a) : Set a where
      constructor [_]
      field .irrelevant : A
    open Irrelevant public
    
    ------------------------------------------------------------------------
    -- Algebraic structure: Functor, Appplicative and Monad-like
    
    map : (A → B) → Irrelevant A → Irrelevant B
    map f [ a ] = [ f a ]
    
    pure : A → Irrelevant A
    pure x = [ x ]
    
    infixl 4 _<*>_
    _<*>_ : Irrelevant (A → B) → Irrelevant A → Irrelevant B
    [ f ] <*> [ a ] = [ f a ]
    
    infixl 1 _>>=_
    _>>=_ : Irrelevant A → (.A → Irrelevant B) → Irrelevant B
    [ a ] >>= f = f a
    
    ------------------------------------------------------------------------
    -- Other functions
    
    zipWith : (A → B → C) → Irrelevant A → Irrelevant B → Irrelevant C
    zipWith f a b = ⦇ f a b ⦈
    
    Made with Material for MkDocs