Flatten telescope: (Γ : Tel) -> [Type Γ]
ModuleAgda-2.7.0.1Haskell2010
Agda.TypeChecking.Telescope
- 3 types
- 1 class
- 60 values
- PackageAgda-2.7.0.1
- Exports64
- LanguageHaskell2010
- LicenceMIT
- SourceTelescope.hs
Turn a context into a flat telescope: all entries live in the whole context.
(Γ : Context) -> [Type Γ]
Order a flattened telescope in the correct dependeny order: Γ -> Permutation (Γ -> Γ~)
Since reorderTel tel uses free variable analysis of type in tel,
the telescope should be normalised.
Unflatten: turns a flattened telescope into a proper telescope. Must be properly ordered.
A variant of unflattenTel which takes the size of the last argument as an argument.
Rename the variables in the telescope to the given names
Precondition: size xs == size tel.
Get the suggested names from a telescope
A variant of teleNamedArgs which takes the argument names (and the argument info) from the first telescope and the variable names from the second telescope.
Precondition: the two telescopes have the same length.
Split the telescope at the specified position.
Permute telescope: permutes or drops the types in the telescope according to the given permutation. Assumes that the permutation preserves the dependencies in the telescope.
For example (Andreas, 2016-12-18, issue #2344):
tel = (A : Set) (X : _18 A) (i : Fin (_m_23 A X))
tel (de Bruijn) = 2:Set, 1:_18 0, 0:Fin(_m_23 1 0)
flattenTel tel = 2:Set, 1:_18 0, 0:Fin(_m_23 1 0) |- [ Set, _18 2, Fin (_m_23 2 1) ]
perm = 0,1,2 -> 0,1 (picks the first two)
renaming _ perm = [var 0, var 1, error] -- THE WRONG RENAMING!
renaming _ (flipP perm) = [error, var 1, var 0] -- The correct renaming!
apply to flattened tel = ... |- [ Set, _18 1, Fin (_m_23 1 0) ]
permute perm it = ... |- [ Set, _18 1 ]
unflatten (de Bruijn) = 1:Set, 0: _18 0
unflatten = (A : Set) (X : _18 A)
Like permuteTel, but start with a context.
Recursively computes dependencies of a set of variables in a given telescope. Any dependencies outside of the telescope are ignored.
Computes the set of variables in a telescope whose type depend on one of the variables in the given set (including recursive dependencies). Any dependencies outside of the telescope are ignored.
A telescope split in two.
Constructors
SplitTelfirstPart :: TelescopesecondPart :: TelescopesplitPerm :: PermutationThe permutation takes us from the original telescope to
firstPart ++ secondPart.
splitTelescope Split a telescope into the part that defines the given variables and the part that doesn't.
See Agda.TypeChecking.Tests.prop_splitTelescope.
splitTelescopeExact As splitTelescope, but fails if any additional variables or reordering would be needed to make the first part well-typed.
instantiateTelescope :: Telescope⊢ Γ
-> IntΓ ⊢ var k : A de Bruijn _level_
-> DeBruijnPatternΓ ⊢ u : A
-> Maybe (Telescope, PatternSubstitution, Permutation)
Try to instantiate one variable in the telescope (given by its de Bruijn level) with the given value, returning the new telescope and a substitution to the old one. Returns Nothing if the given value depends (directly or indirectly) on the variable.
Try to eta-expand one variable in the telescope (given by its de Bruijn level)
Gather leading Πs of a type in a telescope.
telViewUpTo n t takes off the first n function types of t.
Takes off all if n < 0.
telViewUpTo' n p t takes off $t$
the first n (or arbitrary many if n < 0) function domains
as long as they satify p.
telViewUpToPath n t takes off $t$
the first n (or arbitrary many if n < 0) function domains or Path types.
telViewUpToPath n t = fst $ telViewUpToPathBoundary'n t- [ (i,(x,y))
] = [(i=0) -> x, (i=1) -> y]
Like telViewUpToPath but also returns the Boundary expected
by the Path types encountered. The boundary terms live in the
telescope given by the TelView.
Each point of the boundary has the type of the codomain of the Path type it got taken from, see fullBoundary.
(TelV Γ b, [(i,t_i,u_i)]) <- telViewUpToPathBoundary n a
Input: Δ ⊢ a
Output: ΔΓ ⊢ b
ΔΓ ⊢ i : I
ΔΓ ⊢ [ (i=0) -> t_i; (i=1) -> u_i ] : b
(TelV Γ b, [(i,t_i,u_i)]) <- telViewUpToPathBoundaryP n a
Input: Δ ⊢ a
Output: Δ.Γ ⊢ b
Δ.Γ ⊢ T is the codomain of the PathP at variable i
Δ.Γ ⊢ i : I
Δ.Γ ⊢ [ (i=0) -> t_i; (i=1) -> u_i ] : T
Useful to reconstruct IApplyP patterns after teleNamedArgs Γ.
teleElimsB args bs = es
Input: Δ.Γ ⊢ args : Γ
Δ.Γ ⊢ T is the codomain of the PathP at variable i
Δ.Γ ⊢ i : I
Δ.Γ ⊢ bs = [ (i=0) -> t_i; (i=1) -> u_i ] : T
Output: Δ.Γ | PiPath Γ bs A ⊢ es : A
Reduces Type.
Reduces Type.
Returns Left (a,b) in case the type is Pi a b or PathP b _ _.
Assumes the Type is in whnf.
Assumes Type is in whnf.
Decomposing a function type.
If the given type is a Pi, pass its parts to the first continuation.
If not (or blocked), pass the reduced type to the second continuation.
If the given type is a Pi, pass its parts to the first continuation.
If not (or blocked), pass the reduced type to the second continuation.
If the given type is blocked or not a Pi, pass it reduced to the first continuation.
If it is a Pi, pass its parts to the second continuation.
If the given type is blocked or not a Pi, pass it reduced to the first continuation.
If it is a Pi, pass its parts to the second continuation.
A safe variant of piApply.
Methods
piApplyM' :: (MonadReduce m, HasBuiltins m) => m Empty -> Type -> a -> m TypepiApplyM :: (MonadReduce m, HasBuiltins m) => Type -> a -> m Type
Instances4PiApplyM
PiApplyM TermDefined in Agda-2.7.0.1 · Agda.TypeChecking.TelescopePiApplyM a => PiApplyM (Arg a)Defined in Agda-2.7.0.1 · Agda.TypeChecking.TelescopePiApplyM a => PiApplyM [a]Defined in Agda-2.7.0.1 · Agda.TypeChecking.TelescopePiApplyM a => PiApplyM (Named n a)Defined in Agda-2.7.0.1 · Agda.TypeChecking.Telescope
Compute type arity
Fold a telescope into a monadic computation, adding variables to the context at each step.