Structural induction
https://en.wikipedia.org/wiki/Structural_induction
Structural induction, a proof method
used in mathematical logic, is a generalization of mathematical induction over natural numbers and can be further generalized to arbitrary Noetherian induction.
Structural recursion is a recursion method bearing the same relationship to structural induction as ordinary recursion bears to ordinary mathematical induction.
Structural induction is used to prove that some proposition P(x)
holds for all x
of some sort of recursively defined structure (formulas, lists, trees).
A well-founded partial order is defined on the structures ("subformula" for formulas, "sublist" for lists, and "subtree" for trees).
The structural induction proof is a proof that the proposition holds
for all the minimal structures and that
if it holds for the immediate substructures of a certain structure S, then it must hold for S also.
Formally speaking, this then satisfies the premises of an axiom of well-founded induction, which asserts that these two conditions are sufficient for the proposition to hold for all x.
A structurally recursive function uses the same idea to define a recursive function:
base case handle each minimal structure and
recursive case is a rule for recursion
Structural recursion is usually proved correct by structural induction; in particularly easy cases, the inductive step is often left out.
The length
and (++
) functions in the example below are structurally recursive.
For example, if the structures are lists, one usually introduces the partial order <
, in which L < M
whenever list L
is the tail of list M
.
Under this ordering, the empty list Nil
is the unique minimal element.
A structural induction proof of proposition P(L)
consists of 2 parts:
proof that
P(Nil)
is true andproof that if
P(L)
is true for some listL
, and ifL
is the tail of listM
, (M = _:L
) thenP(M)
must also be true.
A structural induction proof of proposition P(xs)
consists of 2 parts:
proof that
P([])
is true andproof that if
P(xs)
is true for some listxs
, and ifxs
is the tail of list(x:xs)
, thenP(x:xs)
must also be true.
Eventually, there may exist more than one base or inductive case, depending on how the function or structure was constructed. In those cases, a structural induction proof of some proposition P(l)
consists of:
a proof that
P(BC)
is true for each base caseBC
a proof that if
P(I)
is true for some instanceI
, andM
can be obtained fromI
by applying any one recursive rule once, thenP(M)
must also be true.
Last updated
Was this helpful?