| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Agda.TypeChecking.Primitive.Cubical.Base
Description
Implementations of the basic primitives of Cubical Agda: The interval and its operations.
Synopsis
- requireCubical :: Cubical -> String -> TCM ()
- primIntervalType :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Type
- primIMin' :: TCM PrimitiveImpl
- primIMax' :: TCM PrimitiveImpl
- primDepIMin' :: TCM PrimitiveImpl
- primINeg' :: TCM PrimitiveImpl
- imax :: HasBuiltins m => m Term -> m Term -> m Term
- imin :: HasBuiltins m => m Term -> m Term -> m Term
- ineg :: HasBuiltins m => m Term -> m Term
- data Command
- data KanOperation
- kanOpName :: KanOperation -> String
- data TermPosition
- = Head
- | Eliminated
- headStop :: PureTCM m => TermPosition -> m Term -> m Bool
- data FamilyOrNot a
- familyOrNot :: IsString p => FamilyOrNot a -> p
- combineSys :: forall (m :: Type -> Type). HasBuiltins m => NamesT m Term -> NamesT m Term -> [(NamesT m Term, NamesT m Term)] -> NamesT m Term
- combineSys' :: forall (m :: Type -> Type). HasBuiltins m => NamesT m Term -> NamesT m Term -> [(NamesT m Term, NamesT m Term)] -> NamesT m (Term, Term)
- fiber :: forall (m :: Type -> Type). (HasBuiltins m, HasConstInfo m) => NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term
- hfill :: forall (m :: Type -> Type). (HasBuiltins m, HasConstInfo m) => NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term
- decomposeInterval' :: HasBuiltins m => Term -> m [(IntMap BoolSet, [Term])]
- decomposeInterval :: HasBuiltins m => Term -> m [(IntMap Bool, [Term])]
- reduce2Lam :: Term -> ReduceM (Blocked Term)
- isCubicalSubtype :: PureTCM m => Type -> m (Maybe (Term, Term, Term, Term))
Documentation
Arguments
| :: Cubical | Which variant of Cubical Agda is required? |
| -> String | Why, exactly, do we need Cubical to be enabled? |
| -> TCM () |
Checks that the correct variant of Cubical Agda is activated.
Note that --erased-cubical "counts as" --cubical in erased
contexts.
primIntervalType :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Type Source #
Our good friend the interval type.
primIMin' :: TCM PrimitiveImpl Source #
Implements both the min connection and conjunction on the
cofibration classifier.
primIMax' :: TCM PrimitiveImpl Source #
Implements both the max connection and disjunction on the
cofibration classifier.
primDepIMin' :: TCM PrimitiveImpl Source #
primDepIMin expresses that cofibrations are closed under Σ.
Thus, it serves as a dependent version of primIMin (which, recall,
implements _∧_). This is required for the construction of the Kan
operations in Id.
primINeg' :: TCM PrimitiveImpl Source #
Negation on the interval. Negation satisfies De Morgan's laws, and their implementation is handled here.
imax :: HasBuiltins m => m Term -> m Term -> m Term Source #
A helper for evaluating max on the interval in TCM&co.
imin :: HasBuiltins m => m Term -> m Term -> m Term Source #
A helper for evaluating min on the interval in TCM&co.
ineg :: HasBuiltins m => m Term -> m Term Source #
A helper for evaluating neg on the interval in TCM&co.
data KanOperation Source #
Our Kan operations are transp and hcomp. The KanOperation
record stores the data associated with a Kan operation on arbitrary
types: A cofibration and an element of that type.
Constructors
| TranspOp | A transport problem consists of a cofibration, marking where the transport is constant, and a term to move from the fibre over i0 to the fibre over i1. |
| HCompOp | A composition problem consists of a partial element and a base. Semantically, this is justified by the types being Kan fibrations, i.e., having the lifting property against trivial cofibrations. While the specified cofibration may not be trivial, (φ ∨ ~ r) for r ∉ φ is *always* a trivial cofibration. |
Fields
| |
kanOpName :: KanOperation -> String Source #
The built-in name associated with a particular Kan operation.
data TermPosition Source #
For the Kan operations in Glue and hcomp {Type}, we optimise
evaluation a tiny bit by differentiating the term produced when
evaluating a Kan operation by itself vs evaluating it under unglue.
Constructors
| Head | |
| Eliminated |
Instances
| Show TermPosition Source # | |
Defined in Agda.TypeChecking.Primitive.Cubical.Base Methods showsPrec :: Int -> TermPosition -> ShowS # show :: TermPosition -> String # showList :: [TermPosition] -> ShowS # | |
| Eq TermPosition Source # | |
Defined in Agda.TypeChecking.Primitive.Cubical.Base | |
headStop :: PureTCM m => TermPosition -> m Term -> m Bool Source #
If we're computing a Kan operation for one of the "unstable" type
formers (Glue, hcomp {Type}), this tells us whether the type will
reduce further, and whether we should care.
When should we care? When we're in the Head TermPosition. When
will the type reduce further? When φ, its formula, is not i1.
data FamilyOrNot a Source #
Are we looking at a family of things, or at a single thing?
Instances
familyOrNot :: IsString p => FamilyOrNot a -> p Source #
Helper functions for building terms
Arguments
| :: forall (m :: Type -> Type). HasBuiltins m | |
| => NamesT m Term | |
| -> NamesT m Term | |
| -> [(NamesT m Term, NamesT m Term)] | A list of |
| -> NamesT m Term |
Build a partial element. The type of the resulting partial element
can depend on the computed extent, which we denote by φ here. Note
that φ is the n-ary disjunction of all the ψs.
combineSys' :: forall (m :: Type -> Type). HasBuiltins m => NamesT m Term -> NamesT m Term -> [(NamesT m Term, NamesT m Term)] -> NamesT m (Term, Term) Source #
Build a partial element, and compute its extent. See combineSys
for the details.
fiber :: forall (m :: Type -> Type). (HasBuiltins m, HasConstInfo m) => NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term Source #
Helper function for constructing the type of fibres of a function over a given point.
hfill :: forall (m :: Type -> Type). (HasBuiltins m, HasConstInfo m) => NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term -> NamesT m Term Source #
Helper function for constructing the filler of a given composition problem.
decomposeInterval' :: HasBuiltins m => Term -> m [(IntMap BoolSet, [Term])] Source #
Decompose an interval expression φ : I into a set of possible
assignments for the variables mentioned in φ, together any leftover
neutral terms that could not be put into IntervalView form.
decomposeInterval :: HasBuiltins m => Term -> m [(IntMap Bool, [Term])] Source #
Decompose an interval expression i : I as in
decomposeInterval', but discard any inconsistent mappings.