EXAMPLE-INDUCTION-SCHEME-WITH-MULTIPLE-INDUCTION-STEPS.html -- ACL2 Version 6.3

### EXAMPLE-INDUCTION-SCHEME-WITH-MULTIPLE-INDUCTION-STEPS

induction scheme with more than one induction step

    Major Section:  INTRODUCTION-TO-THE-THEOREM-PROVER

See logic-knowledge-taken-for-granted-inductive-proof for an explanation of what we mean by the induction suggested by a recursive function or a term.

Several Induction Steps: To `(p x i a)` for all `x`, `i`, and `a`, prove each of the following:

    Base Case 1:
    (implies (zp i)
             (p x i a))

    Induction Step 1:
    (implies (and (not (zp i))
                  (equal (parity i) 'even)
                  (p (* x x)
                     (floor i 2)
                     a))
             (p x i a))

    Induction Step 2:
    (implies (and (not (zp i))
                  (not (equal (parity i) 'even))
                  (p x
                     (- i 1)
                     (* x a)))
             (p x i a))

A function that suggests this induction is the binary exponentiation function for natural numbers.

    (defun bexpt (x i a)
      (cond ((zp i) a)
            ((equal (parity i) 'even)
             (bexpt (* x x)
                    (floor i 2)
                    a))
            (t (bexpt x
                      (- i 1)
                      (* x a)
                      )))).

In order to admit this function it is necessary to know that `(floor i 2)` is smaller than `i` in the case above. This can be proved if the community book `"arithmetic-5/top"` has been included from the ACL2 system directory, i.e.,

    (include-book "arithmetic-5/top" :dir :system)

should be executed before defining `bexpt`.