Arithmetic patternsΒΆ

An arithmetic pattern consists of an arithmetic expression, containing one or more variables, used as a pattern. For example,

f(n+2) = ...
f(2n+7) = ...
f(p/q) = ...
f(-p/(q+1)) = ...

are all examples of arithmetic patterns. A full description of how arithmetic patterns work would be too complex to include here; put simply, an arithmetic pattern matches whenever the input is a number of the given form. For example, f(2n+1) = ... matches whenever there is a number n such that the input is of the form 2n+1. This is a common way to define functions depending on whether the input is even or odd:

f : N -> N
f(2n)   = ... n ...     -- even inputs
f(2n+1) = ... n ...     -- odd inputs

Note that f(p/q) matches whenever the input is a rational number with a numerator of p and a denominator of q. In all other cases, arithmetic patterns are generally required to have only one variable. Otherwise, the pattern is ambiguous. For example, f(a+b) = ... is not allowed, since a + b = n has many solutions for a given n; for a given input, there is generally no way to determine what a and b should be.

Arithmetic patterns can sometimes allow us to define things in an alternative way that does not require subtraction. For example, one way to define the factorial function is as follows:

fact : N -> N
fact(0)   = 1
fact(n+1) = (n+1) * fact(n)

In the second clause, instead of writing fact(n) = n * fact(n .- 1), we can express that the clause only applies to natural numbers that are one more than another natural number.