idris-1.1.0: Functional Programming Language with Dependent Types

Idris.Termination

Description

Synopsis

# Documentation

checkAllCovering :: FC -> [Name] -> Name -> Name -> Idris () Source #

Check whether function and all descendants cover all cases (partial is okay, as long as it's due to recursion)

Check whether all Inf arguments to the name end up guaranteed to be guarded by constructors (conservatively... maybe this can do better later). Essentially, all it does is check that every branch is a constructor application with no other function applications.

If so, set the AllGuarded flag which can be used by the productivity check

Arguments

 :: [Name] the group of type declarations -> (Name, Type) the constructor -> Idris Totality

Check if, in a given group of type declarations mut_ns, the constructor cn : ty is strictly positive, and update the context accordingly

calcTotality :: FC -> Name -> [([Name], Term, Term)] -> Idris Totality Source #

Calculate the totality of a function from its patterns. Either follow the size change graph (if inductive) or check for productivity (if coinductive)

buildSCG :: (FC, Name) -> Idris () Source #

Calculate the size change graph for this definition

SCG for a function f consists of a list of: (g, [(a1, sizechange1), (a2, sizechange2), ..., (an, sizechangen)])

where g is a function called a1 ... an are the arguments of f in positions 1..n of g sizechange1 ... sizechange2 is how their size has changed wrt the input to f Nothing, if the argument is unrelated to the input

Constructors

 Toplevel Unguarded Guarded Delayed

Instances

 Source # MethodsshowList :: [Guardedness] -> ShowS #

buildSCG' :: IState -> Name -> [(Term, Term)] -> [Name] -> [SCGEntry] Source #

collapseNothing :: [(Maybe a, b)] -> [(Maybe a, b)] Source #