Call matrix indices = function argument indices.
Machine integer Int is sufficient, since we cannot index more arguments than we have addresses on our machine.
:: a typeCtrl KGHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27
ModuleAgda-2.7.0.1Haskell2010
Call matrix indices = function argument indices.
Machine integer Int is sufficient, since we cannot index more arguments than we have addresses on our machine.
Call matrices.
A call matrix for a call f --> g has dimensions ar(g) × ar(f).
Each column corresponds to one formal argument of caller f.
Each row corresponds to one argument in the call to g.
In the presence of dot patterns, a call argument can be related
to several different formal arguments of f.
See e.g. testsucceedDotPatternTermination.agda:
data D : Nat -> Set where
cz : D zero
c1 : forall n -> D n -> D (suc n)
c2 : forall n -> D n -> D n
f : forall n -> D n -> Nat
f .zero cz = zero
f .(suc n) (c1 n d) = f n (c2 n d)
f n (c2 .n d) = f n d
Call matrices (without guardedness) are
-1 -1 n < suc n and n < c1 n d
? = c2 n d <= c1 n d
= -1 n <= n and n < c2 n d
? -1 d < c2 n d
Here is a part of the original documentation for call matrices (kept for historical reasons):
This datatype encodes information about a single recursive
function application. The columns of the call matrix stand for
source function arguments (patterns). The rows of the matrix stand for
target function arguments. Element (i, j) in the matrix should
be computed as follows:
Functor CallMatrix'Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixFoldable CallMatrix'Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixTraversable CallMatrix'Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixPretty CallMatrixDefined in Agda-2.7.0.1 · Agda.Termination.CallMatrixCallComb CallMatrixDefined in Agda-2.7.0.1 · Agda.Termination.CallMatrixCall matrix multiplication.
f --(m1)--> g --(m2)--> h is combined to f --(m2 mul m1)--> h
Note the reversed order of multiplication:
The matrix c1 of the second call g-->h in the sequence
f-->g-->h is multiplied with the matrix c2 of the first call.
Preconditions:
m1 has dimensions ar(g) × ar(f).
m2 has dimensions ar(h) × ar(g).
Postcondition:
m1 >*< m2 has dimensions ar(h) × ar(f).
NotWorse CallMatrixDefined in Agda-2.7.0.1 · Agda.Termination.CallMatrixEq a => Eq (CallMatrix' a)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixOrd a => Ord (CallMatrix' a)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrix(HasZero a, Show a) => Show (CallMatrix' a)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixPartialOrd a => PartialOrd (CallMatrix' a)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixHasZero a => Diagonal (CallMatrix' a) aDefined in Agda-2.7.0.1 · Agda.Termination.CallMatrixCallComb CallMatrixDefined in Agda-2.7.0.1 · Agda.Termination.CallMatrixCall matrix multiplication.
f --(m1)--> g --(m2)--> h is combined to f --(m2 mul m1)--> h
Note the reversed order of multiplication:
The matrix c1 of the second call g-->h in the sequence
f-->g-->h is multiplied with the matrix c2 of the first call.
Preconditions:
m1 has dimensions ar(g) × ar(f).
m2 has dimensions ar(h) × ar(g).
Postcondition:
m1 >*< m2 has dimensions ar(h) × ar(f).
Monoid cinfo => CallComb (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixCall matrix set product is the Cartesian product.
Monoid cinfo => CallComb (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixAugmented call matrix multiplication.
Call matrix augmented with path information.
CallMatrixAugaugCallMatrix :: CallMatrixThe matrix of the (composed call).
augCallInfo :: cinfoMeta info, like call path.
Eq cinfo => Eq (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixShow cinfo => Show (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixPretty cinfo => Pretty (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixPartialOrd (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixMonoid cinfo => CallComb (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixAugmented call matrix multiplication.
NotWorse (CallMatrixAug cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixDiagonal (CallMatrixAug cinfo) OrderDefined in Agda-2.7.0.1 · Agda.Termination.CallMatrixSingleton (CallMatrixAug cinfo) (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixNon-augmented call matrix.
Sets of incomparable call matrices augmented with path information. Use overloaded null, empty, singleton, mappend.
CMSetcmSet :: Favorites (CallMatrixAug cinfo)Show cinfo => Show (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixSemigroup (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixMonoid (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixPretty cinfo => Pretty (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixNull (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixMonoid cinfo => CallComb (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixCall matrix set product is the Cartesian product.
CombineNewOld (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallGraphCollection (Call cinfo) (CallGraph cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallGraphSingleton (Call cinfo) (CallGraph cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallGraphSingleton (CallMatrixAug cinfo) (CMSet cinfo)Defined in Agda-2.7.0.1 · Agda.Termination.CallMatrixInsert into a call matrix set.
Union two call matrix sets.
Convert into a list of augmented call matrices.