Idris.Termination

idris-1.3.4: Functional Programming Language with Dependent Types

License | BSD3
Maintainer | The Idris Community.
Safe Haskell | None
Language | Haskell2010

Idris.Termination

Description

Synopsis

- buildSCG :: (FC, Name) -> Idris ()
- checkAllCovering :: FC -> [Name] -> Name -> Name -> Idris ()
- checkDeclTotality :: (FC, Name) -> Idris Totality
- checkIfGuarded :: Name -> Idris ()
- checkPositive :: [Name] -> (Name, Type) -> Idris Totality
- checkSizeChange :: Name -> Idris Totality
- verifyTotality :: (FC, Name) -> Idris ()

# Documentation

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

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

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

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

checkDeclTotality :: (FC, Name) -> Idris Totality #

checkIfGuarded :: Name -> Idris () #

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

checkPositive #

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

checkSizeChange :: Name -> Idris Totality #

verifyTotality :: (FC, Name) -> Idris () #