Agda-2.5.3: A dependently typed functional programming language and proof assistant

Safe HaskellNone
LanguageHaskell2010

Agda.TypeChecking.SizedTypes.Syntax

Contents

Description

Syntax of size expressions and constraints.

Synopsis

Syntax

newtype Offset Source #

Constant finite sizes n >= 0.

Constructors

O Int 

Instances

Enum Offset Source # 
Eq Offset Source # 

Methods

(==) :: Offset -> Offset -> Bool #

(/=) :: Offset -> Offset -> Bool #

Num Offset Source # 
Ord Offset Source # 
Show Offset Source # 
MeetSemiLattice Offset Source # 

Methods

meet :: Offset -> Offset -> Offset Source #

Pretty Offset Source # 
TruncateOffset Offset Source # 
ValidOffset Offset Source # 
Negative Offset Source # 

Methods

negative :: Offset -> Bool Source #

Plus Offset Offset Offset Source # 

Methods

plus :: Offset -> Offset -> Offset Source #

Plus Offset Weight Weight Source # 

Methods

plus :: Offset -> Weight -> Weight Source #

Plus Weight Offset Weight Source # 

Methods

plus :: Weight -> Offset -> Weight Source #

Plus (SizeExpr' r f) Offset (SizeExpr' r f) Source #

Add offset to size expression.

Methods

plus :: SizeExpr' r f -> Offset -> SizeExpr' r f Source #

newtype Rigid Source #

Fixed size variables i.

Constructors

RigidId 

Fields

newtype Flex Source #

Size meta variables X to solve for.

Constructors

FlexId 

Fields

Instances

Eq Flex Source # 

Methods

(==) :: Flex -> Flex -> Bool #

(/=) :: Flex -> Flex -> Bool #

Ord Flex Source # 

Methods

compare :: Flex -> Flex -> Ordering #

(<) :: Flex -> Flex -> Bool #

(<=) :: Flex -> Flex -> Bool #

(>) :: Flex -> Flex -> Bool #

(>=) :: Flex -> Flex -> Bool #

max :: Flex -> Flex -> Flex #

min :: Flex -> Flex -> Flex #

Show Flex Source # 

Methods

showsPrec :: Int -> Flex -> ShowS #

show :: Flex -> String #

showList :: [Flex] -> ShowS #

Pretty Flex Source # 

data SizeExpr' rigid flex Source #

Size expressions appearing in constraints.

Constructors

Const

Constant number n.

Fields

Rigid

Variable plus offset i + n.

Fields

Infty

Infinity .

Flex

Meta variable X + n.

Fields

Instances

Ord f => Substitute r f (SizeExpr' r f) Source # 

Methods

subst :: Solution r f -> SizeExpr' r f -> SizeExpr' r f Source #

Flexs flex (SizeExpr' rigid flex) Source # 

Methods

flexs :: SizeExpr' rigid flex -> Set flex Source #

Rigids r (SizeExpr' r f) Source # 

Methods

rigids :: SizeExpr' r f -> Set r Source #

Subst Term (SizeExpr' NamedRigid SizeMeta) Source #

Only for raise.

Functor (SizeExpr' rigid) Source # 

Methods

fmap :: (a -> b) -> SizeExpr' rigid a -> SizeExpr' rigid b #

(<$) :: a -> SizeExpr' rigid b -> SizeExpr' rigid a #

Foldable (SizeExpr' rigid) Source # 

Methods

fold :: Monoid m => SizeExpr' rigid m -> m #

foldMap :: Monoid m => (a -> m) -> SizeExpr' rigid a -> m #

foldr :: (a -> b -> b) -> b -> SizeExpr' rigid a -> b #

foldr' :: (a -> b -> b) -> b -> SizeExpr' rigid a -> b #

foldl :: (b -> a -> b) -> b -> SizeExpr' rigid a -> b #

foldl' :: (b -> a -> b) -> b -> SizeExpr' rigid a -> b #

foldr1 :: (a -> a -> a) -> SizeExpr' rigid a -> a #

foldl1 :: (a -> a -> a) -> SizeExpr' rigid a -> a #

toList :: SizeExpr' rigid a -> [a] #

null :: SizeExpr' rigid a -> Bool #

length :: SizeExpr' rigid a -> Int #

elem :: Eq a => a -> SizeExpr' rigid a -> Bool #

maximum :: Ord a => SizeExpr' rigid a -> a #

minimum :: Ord a => SizeExpr' rigid a -> a #

sum :: Num a => SizeExpr' rigid a -> a #

product :: Num a => SizeExpr' rigid a -> a #

Traversable (SizeExpr' rigid) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> SizeExpr' rigid a -> f (SizeExpr' rigid b) #

sequenceA :: Applicative f => SizeExpr' rigid (f a) -> f (SizeExpr' rigid a) #

mapM :: Monad m => (a -> m b) -> SizeExpr' rigid a -> m (SizeExpr' rigid b) #

sequence :: Monad m => SizeExpr' rigid (m a) -> m (SizeExpr' rigid a) #

(Eq flex, Eq rigid) => Eq (SizeExpr' rigid flex) Source # 

Methods

(==) :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Bool #

(/=) :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Bool #

(Ord flex, Ord rigid) => Ord (SizeExpr' rigid flex) Source # 

Methods

compare :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Ordering #

(<) :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Bool #

(<=) :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Bool #

(>) :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Bool #

(>=) :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> Bool #

max :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> SizeExpr' rigid flex #

min :: SizeExpr' rigid flex -> SizeExpr' rigid flex -> SizeExpr' rigid flex #

(Show flex, Show rigid) => Show (SizeExpr' rigid flex) Source # 

Methods

showsPrec :: Int -> SizeExpr' rigid flex -> ShowS #

show :: SizeExpr' rigid flex -> String #

showList :: [SizeExpr' rigid flex] -> ShowS #

(Pretty r, Pretty f) => Pretty (SizeExpr' r f) Source # 
TruncateOffset (SizeExpr' r f) Source # 
ValidOffset (SizeExpr' r f) Source # 

Methods

validOffset :: SizeExpr' r f -> Bool Source #

Plus (SizeExpr' r f) Offset (SizeExpr' r f) Source #

Add offset to size expression.

Methods

plus :: SizeExpr' r f -> Offset -> SizeExpr' r f Source #

Plus (SizeExpr' r f) Label (SizeExpr' r f) Source # 

Methods

plus :: SizeExpr' r f -> Label -> SizeExpr' r f Source #

Plus (SizeExpr' r f) Weight (SizeExpr' r f) Source # 

Methods

plus :: SizeExpr' r f -> Weight -> SizeExpr' r f Source #

data Cmp Source #

Comparison operator, e.g. for size expression.

Constructors

Lt

<.

Le

.

Instances

Bounded Cmp Source # 

Methods

minBound :: Cmp #

maxBound :: Cmp #

Enum Cmp Source # 

Methods

succ :: Cmp -> Cmp #

pred :: Cmp -> Cmp #

toEnum :: Int -> Cmp #

fromEnum :: Cmp -> Int #

enumFrom :: Cmp -> [Cmp] #

enumFromThen :: Cmp -> Cmp -> [Cmp] #

enumFromTo :: Cmp -> Cmp -> [Cmp] #

enumFromThenTo :: Cmp -> Cmp -> Cmp -> [Cmp] #

Eq Cmp Source # 

Methods

(==) :: Cmp -> Cmp -> Bool #

(/=) :: Cmp -> Cmp -> Bool #

Ord Cmp Source #

Comparison operator is ordered Lt < Le.

Methods

compare :: Cmp -> Cmp -> Ordering #

(<) :: Cmp -> Cmp -> Bool #

(<=) :: Cmp -> Cmp -> Bool #

(>) :: Cmp -> Cmp -> Bool #

(>=) :: Cmp -> Cmp -> Bool #

max :: Cmp -> Cmp -> Cmp #

min :: Cmp -> Cmp -> Cmp #

Show Cmp Source # 

Methods

showsPrec :: Int -> Cmp -> ShowS #

show :: Cmp -> String #

showList :: [Cmp] -> ShowS #

Dioid Cmp Source # 
MeetSemiLattice Cmp Source # 

Methods

meet :: Cmp -> Cmp -> Cmp Source #

Top Cmp Source # 

Methods

top :: Cmp Source #

isTop :: Cmp -> Bool Source #

Pretty Cmp Source # 

data Constraint' rigid flex Source #

Constraint: an inequation between size expressions, e.g. X < ∞ or i + 3 ≤ j.

Constructors

Constraint 

Fields

Instances

PrettyTCM SizeConstraint Source #

Assumes we are in the right context.

Subst Term SizeConstraint Source # 
Ord f => Substitute r f (Constraint' r f) Source # 

Methods

subst :: Solution r f -> Constraint' r f -> Constraint' r f Source #

Ord flex => Flexs flex (Constraint' rigid flex) Source # 

Methods

flexs :: Constraint' rigid flex -> Set flex Source #

Ord r => Rigids r (Constraint' r f) Source # 

Methods

rigids :: Constraint' r f -> Set r Source #

Functor (Constraint' rigid) Source # 

Methods

fmap :: (a -> b) -> Constraint' rigid a -> Constraint' rigid b #

(<$) :: a -> Constraint' rigid b -> Constraint' rigid a #

Foldable (Constraint' rigid) Source # 

Methods

fold :: Monoid m => Constraint' rigid m -> m #

foldMap :: Monoid m => (a -> m) -> Constraint' rigid a -> m #

foldr :: (a -> b -> b) -> b -> Constraint' rigid a -> b #

foldr' :: (a -> b -> b) -> b -> Constraint' rigid a -> b #

foldl :: (b -> a -> b) -> b -> Constraint' rigid a -> b #

foldl' :: (b -> a -> b) -> b -> Constraint' rigid a -> b #

foldr1 :: (a -> a -> a) -> Constraint' rigid a -> a #

foldl1 :: (a -> a -> a) -> Constraint' rigid a -> a #

toList :: Constraint' rigid a -> [a] #

null :: Constraint' rigid a -> Bool #

length :: Constraint' rigid a -> Int #

elem :: Eq a => a -> Constraint' rigid a -> Bool #

maximum :: Ord a => Constraint' rigid a -> a #

minimum :: Ord a => Constraint' rigid a -> a #

sum :: Num a => Constraint' rigid a -> a #

product :: Num a => Constraint' rigid a -> a #

Traversable (Constraint' rigid) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Constraint' rigid a -> f (Constraint' rigid b) #

sequenceA :: Applicative f => Constraint' rigid (f a) -> f (Constraint' rigid a) #

mapM :: Monad m => (a -> m b) -> Constraint' rigid a -> m (Constraint' rigid b) #

sequence :: Monad m => Constraint' rigid (m a) -> m (Constraint' rigid a) #

(Show rigid, Show flex) => Show (Constraint' rigid flex) Source # 

Methods

showsPrec :: Int -> Constraint' rigid flex -> ShowS #

show :: Constraint' rigid flex -> String #

showList :: [Constraint' rigid flex] -> ShowS #

(Pretty r, Pretty f) => Pretty (Constraint' r f) Source # 

Polarities to specify solutions.

data PolarityAssignment flex Source #

Assigning a polarity to a flexible variable.

Constructors

PolarityAssignment Polarity flex 

type Polarities flex = Map flex Polarity Source #

Type of solution wanted for each flexible.

getPolarity :: Ord flex => Polarities flex -> flex -> Polarity Source #

Default polarity is Least.

Solutions.

newtype Solution rigid flex Source #

Partial substitution from flexible variables to size expression.

Constructors

Solution 

Fields

Instances

Ord f => Substitute r f (Solution r f) Source # 

Methods

subst :: Solution r f -> Solution r f -> Solution r f Source #

(Show rigid, Show flex) => Show (Solution rigid flex) Source # 

Methods

showsPrec :: Int -> Solution rigid flex -> ShowS #

show :: Solution rigid flex -> String #

showList :: [Solution rigid flex] -> ShowS #

Null (Solution rigid flex) Source # 

Methods

empty :: Solution rigid flex Source #

null :: Solution rigid flex -> Bool Source #

(Pretty r, Pretty f) => Pretty (Solution r f) Source # 

class Substitute r f a where Source #

Executing a substitution.

Minimal complete definition

subst

Methods

subst :: Solution r f -> a -> a Source #

Instances

Substitute r f a => Substitute r f [a] Source # 

Methods

subst :: Solution r f -> [a] -> [a] Source #

Ord f => Substitute r f (Solution r f) Source # 

Methods

subst :: Solution r f -> Solution r f -> Solution r f Source #

Substitute r f a => Substitute r f (Map k a) Source # 

Methods

subst :: Solution r f -> Map k a -> Map k a Source #

Ord f => Substitute r f (Constraint' r f) Source # 

Methods

subst :: Solution r f -> Constraint' r f -> Constraint' r f Source #

Ord f => Substitute r f (SizeExpr' r f) Source # 

Methods

subst :: Solution r f -> SizeExpr' r f -> SizeExpr' r f Source #

Constraint simplification

simplify1 :: (Pretty f, Pretty r, Eq r) => CTrans r f -> CTrans r f Source #

Returns an error message if we have a contradictory constraint.

ifLe :: Cmp -> a -> a -> a Source #

Le acts as True, Lt as False.

compareOffset :: Offset -> Cmp -> Offset -> Bool Source #

Interpret Cmp as relation on Offset.

Printing

Wellformedness

class ValidOffset a where Source #

Offsets + n must be non-negative

Minimal complete definition

validOffset

Methods

validOffset :: a -> Bool Source #

class TruncateOffset a where Source #

Make offsets non-negative by rounding up.

Minimal complete definition

truncateOffset

Methods

truncateOffset :: a -> a Source #

Computing variable sets

class Rigids r a where Source #

The rigid variables contained in a pice of syntax.

Minimal complete definition

rigids

Methods

rigids :: a -> Set r Source #

Instances

(Ord r, Rigids r a) => Rigids r [a] Source # 

Methods

rigids :: [a] -> Set r Source #

Ord r => Rigids r (Constraint' r f) Source # 

Methods

rigids :: Constraint' r f -> Set r Source #

Rigids r (SizeExpr' r f) Source # 

Methods

rigids :: SizeExpr' r f -> Set r Source #

class Flexs flex a | a -> flex where Source #

The flexibe variables contained in a pice of syntax.

Minimal complete definition

flexs

Methods

flexs :: a -> Set flex Source #

Instances

Flexs SizeMeta HypSizeConstraint Source # 
(Ord flex, Flexs flex a) => Flexs flex [a] Source # 

Methods

flexs :: [a] -> Set flex Source #

Ord flex => Flexs flex (Constraint' rigid flex) Source # 

Methods

flexs :: Constraint' rigid flex -> Set flex Source #

Flexs flex (SizeExpr' rigid flex) Source # 

Methods

flexs :: SizeExpr' rigid flex -> Set flex Source #