Equational Reasoning Math Foundations of Computer Science.

59
Equational Reasoning Math Foundations of Computer Science

Transcript of Equational Reasoning Math Foundations of Computer Science.

Page 1: Equational Reasoning Math Foundations of Computer Science.

Equational Reasoning

Math Foundations of Computer Science

Page 2: Equational Reasoning Math Foundations of Computer Science.

Topics Review of propositional calculus

Decision procedure Finite number of test cases Generating counter examples Deduction

Reasoning about programs Properties of equals Definitional axioms and input contracts Input contracts Testing conjectures Formal proofs

Page 3: Equational Reasoning Math Foundations of Computer Science.

Objective

To provide a formal system for reasoning about programs using logical deduction and equational reasoning

Page 4: Equational Reasoning Math Foundations of Computer Science.

Propositional Calculus

There is a decision procedure for determining the validity/satisfiability of a formula from the propositional calculus Truth table Only need to check a finite number of cases! Can find counter example if not valid

Can also use deduction to derive formulas from other formulas Soundness and Completeness

Page 5: Equational Reasoning Math Foundations of Computer Science.

Example with Truth Table

A (B C) (A B) C

A B C B C A B A (B C) (A B) C

0 0 0 1 0 1 1

0 0 1 1 0 1 1

0 1 0 0 0 1 1

0 1 1 1 0 1 1

1 0 0 1 0 1 1

1 0 1 1 0 1 1

1 1 0 0 1 0 0

1 1 1 1 1 1 1

Page 6: Equational Reasoning Math Foundations of Computer Science.

Counterexample with Truth Table

A (B C) (A B) C

A B C B C A B A (B C) (A B) C

0 0 0 1 1 1 0

0 0 1 1 1 1 1

0 1 0 0 1 1 0

0 1 1 1 1 1 1

1 0 0 1 0 1 1

1 0 1 1 0 1 1

1 1 0 0 1 0 0

1 1 1 1 1 1 1

Page 7: Equational Reasoning Math Foundations of Computer Science.

Counterexample with Tree

CA

B C A B

1 0

Page 8: Equational Reasoning Math Foundations of Computer Science.

Counterexample with Tree

CA

B C A B

1 0

0

0

1

Page 9: Equational Reasoning Math Foundations of Computer Science.

Counterexample with Tree

CA

B C A B

1 0

0

0

10

0

Page 10: Equational Reasoning Math Foundations of Computer Science.

Counterexample with Tree

CA

B C A B

1 0

0

0

10

00 0

1

Page 11: Equational Reasoning Math Foundations of Computer Science.

Example with Deduction

A (B C) (A B) C A (B C) A (B C) A ( B C) (A B) C (A B) C (A B) C

Page 12: Equational Reasoning Math Foundations of Computer Science.

Proof in ACL2ACL2 >QUERY

(thm (implies (and (booleanp A) (booleanp B) (booleanp C))

(iff (implies A (implies B C))

(implies (and A B) C))))

<< Starting proof tree logging >>

Q.E.D.

Summary

Form: ( THM ...)

Rules: NIL

Time: 0.00 seconds (prove: 0.00, print: 0.00, proof tree: 0.00, other: 0.00)

Proof succeeded.

Page 13: Equational Reasoning Math Foundations of Computer Science.

Counterexample in ACL2ACL2 >QUERY

(thm (implies (and (booleanp A) (booleanp B) (booleanp C))

(iff (implies A (implies B C))

(implies (implies A B) C))))

<< Starting proof tree logging >>

Goal'

Goal''

Goal'''

Goal'4'

**Summary of testing**

We tested 500 examples across 1 subgoals, of which 2 (2 unique) satisfied

the hypotheses, and found 2 counterexamples and 0 witnesses.

Page 14: Equational Reasoning Math Foundations of Computer Science.

Counterexample in ACL2We falsified the conjecture. Here are counterexamples:

[found in : "Goal'4'"]

(NOT (BOOLEANP B))

-- (C NIL), (B T) and (A NIL)

-- (C NIL), (B NIL) and (A NIL)

Page 15: Equational Reasoning Math Foundations of Computer Science.

Counterexample in ACL2Summary

Form: ( THM ...)

Rules: ((:COMPOUND-RECOGNIZER BOOLEANP-COMPOUND-RECOGNIZER)

(:DEFINITION IFF)

(:DEFINITION NOT)

(:EXECUTABLE-COUNTERPART BOOLEANP)

(:EXECUTABLE-COUNTERPART NOT))

Time: 0.19 seconds (prove: 0.05, print: 0.00, proof tree: 0.02, other: 0.12)

Prover steps counted: 281

*** Note: No checkpoints to print. ***

ACL2 Error in ( THM ...): See :DOC failure.

******** FAILED ********

Page 16: Equational Reasoning Math Foundations of Computer Science.

Reasoning about Numbers

Conjecture: a+b = a*b [a,b] Is this valid? Satisfiable?

b = a/(a-1) (0,0), (2,2), (3,3/2) …

Page 17: Equational Reasoning Math Foundations of Computer Science.

Counterexample in ACL2ACL2 >EVENT

(test? (implies (and (rationalp a) (rationalp b))

(equal (+ a b) (* a b))))

**Summary of testing**

We tested 291 examples across 1 subgoals, of which 276 (276 unique)

satisfied the hypotheses, and found 273 counterexamples and 3 witnesses.

We falsified the conjecture. Here are counterexamples:

[found in : "top"]

-- (A 0) and (B 1/5)

-- (A -1/4) and (B -2)

-- (A 1) and (B -2/11)

Cases in which the conjecture is true include:

[found in : "top"]

-- (A 1/4) and (B -1/3)

-- (A -1/3) and (B 1/4)

-- (A 0) and (B 0)

Test? found a counterexample.

Page 18: Equational Reasoning Math Foundations of Computer Science.

Reasoning about Numbers

Conjecture: a+b = b+a [a,b] Is this valid? Satisfiable?

Must test infinitely many examples

Page 19: Equational Reasoning Math Foundations of Computer Science.

Proof in ACL2ACL2 >QUERY

(thm (implies (and (rationalp a) (rationalp b))

(equal (+ a b) (+ b a))))

<< Starting proof tree logging >>

Q.E.D.

Summary

Form: ( THM ...)

Rules: ((:EXECUTABLE-COUNTERPART TAU-SYSTEM))

Time: 0.00 seconds (prove: 0.00, print: 0.00, proof tree: 0.00, other: 0.00)

Prover steps counted: 18

Proof succeeded.

Page 20: Equational Reasoning Math Foundations of Computer Science.

How was ACL2 able to do this?

Arithmetic defined through functions and ACL2 can reason about functions. Also axioms provided for built-in functions.

Equational Reasoning Repeatedly replace ACL expressions by equal

expressions to either compute the value of an expression of check to see if two expressions are equal

Page 21: Equational Reasoning Math Foundations of Computer Science.

Proof

Proofs use formal reasoning Axioms for built-in functions (consp, if, equal) Every time we define a function that ACL2s

admits, we also get a definitional axiom an axiom stating that the function is equal to its body.

I.E. Replace a function call by its body substituting the formal parameters with the actual arguments

Reason using properties of equality and first order logic

Page 22: Equational Reasoning Math Foundations of Computer Science.

Equality

x = y (equal x y) = t⇒ x y (equal x y) = nil⇒

= is an equivalence relation Reflexive x = x Symmetric x = y y = x Transitive x = y y = z x = z (chain together a

sequence of equations) Equality Axiom Schema for Functions

(x1 = y1 ∧ x∧ n = yn) (f x⇒ 1 xn) = (f y1 yn)

To reason about constants, we can use evaluation

Page 23: Equational Reasoning Math Foundations of Computer Science.

Axioms

(first (cons x y)) = x (rest (cons x y)) = y

Otherwise nil (consp (cons x y)) = t

Otherwise nil x = nil (if x y z) = z⇒ x nil (if x y z) = y⇒

Page 24: Equational Reasoning Math Foundations of Computer Science.

Example

Reason about the following functions

(defunc len (x)

:input-contract t

:output-contract (natp (len x))

(if (atom x)

0

(+ 1 (len (rest x)))))

Page 25: Equational Reasoning Math Foundations of Computer Science.

Example

(defunc atom (x)

:input-contract t

:output-contract (booleanp (atom x))

(not (consp x)))

(defunc not (a)

:input-contract (booleanp a)

:output-contract (booleanp (not a))

(if a nil t))

Page 26: Equational Reasoning Math Foundations of Computer Science.

Example

Theorem: (equal (len (cons x (list z))) 2) (len (cons x (list z))) (if (atom (cons x (list z))) 0 (+ 1 (len (rest (cons

x (list z)))))) {def of len} (if (atom (cons x (list z))) 0 (+ 1 (len (list z))))

{first-rest axiom} (if (not (consp (cons x (list z)))) 0 (+ 1 (len (list

z)))) {def of atom}

Page 27: Equational Reasoning Math Foundations of Computer Science.

Example Continued (if (if (consp (cons x (list z))) nil t) 0 (+ 1 (len (list

z)))) {def of not} (if (if t nil t) 0 (+ 1 (len (list z)))) {consp axiom} (if nil 0 (+ 1 (len (list z)))) {if axiom} (+ 1 (len (list z))) {if axiom} (+ 1 (len (cons z nil))) {expand list macro} … (+ 1 1) = 2

Page 28: Equational Reasoning Math Foundations of Computer Science.

Fill in … (+ 1 (len (cons z nil))) {expand list macro} (+ 1 (if (atom (cons z nil)) 0 (+ 1 (len (rest (cons z

nil)))))) {def of len} (+ 1 (if (atom (cons z nil)) 0 (+ 1 (len nil)))) {rest

axiom} (+ 1 (if (not (consp (cons z nil))) 0 (+ 1 (len nil))))

{def of atom} (+ 1 (if (if (consp (cons z nil)) nil t) 0 (+ 1 (len

nil)))) {def of not} (+ 1 (if (if t nil t) 0 (+ 1 (len nil)))) {consp axiom}

Page 29: Equational Reasoning Math Foundations of Computer Science.

Fill in … (+ 1 (if nil 0 (+ 1 (len nil)))) {if axiom} (+ 1 (+ 1 (len nil))) {if axiom} (+ 1 (+ 1 (if (atom nil) 0 (+ 1 (len (rest nil)))))) {def

of len} (+ 1 (+ 1 (if (not (consp nil)) 0 (+ 1 (len (rest

nil)))))) {def of atom} (+ 1 (+ 1 (if (if (consp nil) nil t) 0 (+ 1 (len (rest

nil)))))) {def of not} (+ 1 (+ 1 (if (if nil nil t) 0 (+ 1 (len (rest nil))))))

{consp axiom}

Page 30: Equational Reasoning Math Foundations of Computer Science.

Fill in … (+ 1 (+ 1 (if (if nil nil t) 0 (+ 1 (len (rest nil))))))

{consp axiom} (+ 1 (+ 1 (if t 0 (+ 1 (len (rest nil)))))) {if axiom} (+ 1 (+ 1 0)) {if axiom} 2 {arithmetic}

Page 31: Equational Reasoning Math Foundations of Computer Science.

Example Proof

Conjecture: (equal (len (cons x (list z)))(len (cons y (list z))))

The previous theorem showed (len (cons x (list z))) = 2

Similar reasoning shows (len (cons y (list z))) = 2

Alternatively we can substitute x=y in the theorem to obtain (len (cons y (list z))) = 2

Page 32: Equational Reasoning Math Foundations of Computer Science.

Instantiation

Derive | from . That is, if is a theorem and is a substitution, then by instantiation, | is a theorem. Substitution ((var1 term1) . . . (varn termn))

Example. From the theorem (equal (first (cons x y)) x)

We can derive (equal (first (cons (foo x) (bar z))) (foo x))

Page 33: Equational Reasoning Math Foundations of Computer Science.

Counter Example

Same type of reasoning can be use to prove conjectures false

Conjecture: (equal (len (list x)) (len x))(equal (len (list nil)) (len nil))

Compute (len nil) and (len (list nil)) and compare

Page 34: Equational Reasoning Math Foundations of Computer Science.

Counter Example(len nil) (if (atom nil) 0 (+ 1 (len (rest nil))))) [def of len](if t 0 (+ 1 (len (rest nil))))) [def of atom]0 [if axiom](len (list nil))(if (atom (list nil)) 0 (+ 1 (len (rest (list nil))))))

[def of len](if nil 0 (+ 1 (len (rest nil))))) [def of atom](+ 1 (len (rest nil)))) [if axiom]

Page 35: Equational Reasoning Math Foundations of Computer Science.

Counter Example

(len (list nil))(if (atom (list nil)) 0 (+ 1 (len (rest (list

nil)))))) [def of len](if nil 0 (+ 1 (len (rest (list nil))))) [def of

atom](+ 1 (len (rest (list nil))))) [if axiom](+ 1 (len nil)) [first-rest axiom](+ 1 0) [previous calculation]1 0

Page 36: Equational Reasoning Math Foundations of Computer Science.

Definition of Append

(defunc app (a b)

:input-contract (and (listp a) (listp b))

:output-contract (and (listp (app a b))

(equal (len (app a b))

(+ (len a) (len b))))

(if (endp a)

b

(cons (first a) (app (rest a) b))))

Page 37: Equational Reasoning Math Foundations of Computer Science.

Necessary Functions

(defunc listp (l)

:input-contract t

:output-contract (booleanp (listp l))

(if (consp l)

(listp (rest l))

(equal l ())))

(defunc endp (a)

:input-contract (listp a)

:output-contract (booleanp (endp a))

(equal a nil))

Page 38: Equational Reasoning Math Foundations of Computer Science.

Proving Properties

Associativity of app (app x (app y z)) = (app (app x y) z) Definitional axiom Input contracts and context Formal reasoning needed for induction Base Case when x = nil

(endp x) (listp x) (listp y) (listp z) ⇒(app (app x y) z) = (app x (app y z))

General case assuming inductive hypothesis (listp (rest x)) (listp y) (listp z) ∧ ∧ ⇒

(app (app (rest x) y) z) = (app (rest x) (app y z))

Page 39: Equational Reasoning Math Foundations of Computer Science.

Definitional Axiom

(listp a) (listp b)∧

⇒ (app a b)

=

(if (endp a)

b

(cons (first a) (app (rest a) b)))

Can’t expand body unless (listp a) and (listp b)

In general every time we “successfully admit a function” we get an axiom: ic (f x⇒ 1 ... xn) = body

Can’t expand body unless ic is satisfied.

Page 40: Equational Reasoning Math Foundations of Computer Science.

Application of Append

Theorem [CA]: (listp y) (listp z) (app (cons x y) z) = (cons x (app y z)) (app (cons x y) z) (if (endp (cons x y)) z (cons (first (cons x y))

(app (rest (cons x y)) z))) [def of app and inst] (if nil z (cons (first (cons x y)) (app (rest (cons x

y)) z))) [def of endp and consp axiom] (cons (first (cons x y)) (app (rest (cons x y)) z))

[if axiom] (cons x (app y z)) [axioms for first and rest]

Page 41: Equational Reasoning Math Foundations of Computer Science.

Base Case

Theorem: (endp x) (listp x) (listp y) (listp z) ⇒(app (app x y) z) = (app x (app y z))

Page 42: Equational Reasoning Math Foundations of Computer Science.

Conjecture Contract Checking

Make sure all hypotheses are present in your conjectures

Conjecture: (endp x) ⇒ (app (app x y) z) = (app x (app y z))

Taking into account all input contracts Conjecture: (endp x) (listp x) (listp y)

(listp z) ⇒ (app (app x y) z) = (app x (app y z))

Page 43: Equational Reasoning Math Foundations of Computer Science.

Context

Conjecture: (endp x) (listp x) (listp y) (listp z) ⇒ (app (app x y) z) = (app x (app y z)) (implies (and (endp x) (listp x) (listp y) (listp z))

(iff (app (app x y) z) (app x (app y z))

hyp1 hyp∧ 2 ∧ hyp∧ n conc⇒ Context = {hyp1, hyp2,…, hypn}

Context of conjecture = {(endp x), (listp x), (listp y), (listp z)}

Page 44: Equational Reasoning Math Foundations of Computer Science.

Implications of Context

Conjecture: (endp x) (listp x) (listp y) (listp z) ⇒ (app (app x y) z) = (app x (app y z))

C1. (endp x)C2. (listp x)C3. (listp y)C4. (listp z)C5. x = nil {C1, C2}

Page 45: Equational Reasoning Math Foundations of Computer Science.

Testing Conjecture(let ((x nil)

(y nil)

(z nil))

(implies (and (endp x)

(listp x)

(listp y)

(listp z))

(equal (app (app x y) z)

(app x (app y z)))))

Page 46: Equational Reasoning Math Foundations of Computer Science.

Testing Conjecture(test?

(implies (and (endp x)

(listp x)

(listp y)

(listp z))

(equal (app (app x y) z)

(app x (app y z)))))

Page 47: Equational Reasoning Math Foundations of Computer Science.

Proof of Conjecture

Theorem: (endp x) (listp x) (listp y) (listp z) ⇒ (app (app x y) z) = (app x (app y z))

C1. (endp x)C2. (listp x)C3. (listp y)C4. (listp z)C5. x = nil {C1, C2}

(app (app x y) z)(app y z) [def of app, def of endp, C5, if axiom] (app x (app y z) ) [def of app, def of endp, C5, if axiom]

Page 48: Equational Reasoning Math Foundations of Computer Science.

General Case

Theorem. [(consp x) (listp x) (listp y) ∧ ∧(listp z)

[(listp (rest x)) (listp y) (listp z)∧ ∧ ⇒ (app (app (rest x) y) z) = (app (rest

x) (app y z))]] ⇒ (app (app x y) z) = (app x (app y z))

Page 49: Equational Reasoning Math Foundations of Computer Science.

Rearranging Contexts(consp x)

[[(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]

⇒ [(listp x) (listp y) (listp z)∧ ∧

⇒ (app (app x y) z) = (app x (app y z))]]

[(consp x) [(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]

⇒ [(listp x) (listp y) (listp z)∧ ∧

⇒ (app (app x y) z) = (app x (app y z))]]

Page 50: Equational Reasoning Math Foundations of Computer Science.

Rearranging Contexts

[(consp x) [(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]

⇒ [(listp x) (listp y) (listp z)∧ ∧

⇒ (app (app x y) z) = (app x (app y z))]]

[(consp x) (listp x) (listp y) (listp z) ∧ ∧ [(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]]

⇒ (app (app x y) z) = (app x (app y z))

Page 51: Equational Reasoning Math Foundations of Computer Science.

Context of Conjecture

Conjecture: (app (app x y) z) = (app x (app y z))

C1. (consp x)C2. (listp x)C3. (listp y)C4. (listp z)

C5. [(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]

Page 52: Equational Reasoning Math Foundations of Computer Science.

Modus Ponens

(A B A) B

AA BB

Page 53: Equational Reasoning Math Foundations of Computer Science.

Extending Context

C1. (consp x)C2. (listp x)C3. (listp y)C4. (listp z)

C5. [(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]

C6. (listp (rest x)) [C1, C2, def of listp]C7. (app (app (rest x) y) z) = (app (rest x) (app y z))

[C6, C3, C4, C5, MP]

Page 54: Equational Reasoning Math Foundations of Computer Science.

Proof of Theorem Theorem. [(consp x) (listp x) (listp y) (listp z) ∧ ∧ [(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]]

⇒ (app (app x y) z) = (app x (app y z))

Proof (app (app x y) z) (app (cons (first x) (app (rest x) y)) z) [def app, C1, C2, C3] (cons (first x) (app (app (rest x) y) z)) [Thm CA,C3,C4,C6] (cons (first x) (app (rest x) (app y z))) [C7] (app x (app y z))) [def app, C1, C2, C3, C4]

Page 55: Equational Reasoning Math Foundations of Computer Science.

Induction Scheme Base Case

(endp x) (listp x) (listp y) (listp z) ⇒ (app (app x y) z) = (app x (app y z))

Induction Step [(consp x) (listp x) (listp y) (listp z) ∧ ∧

[(listp (rest x)) (listp y) (listp z)∧ ∧

⇒ (app (app (rest x) y) z) = (app (rest x) (app y z))]] ⇒ (app (app x y) z) = (app x (app y z))

Conclude (assuming termination) (app (app x y) z) = (app x (app y z))

Page 56: Equational Reasoning Math Foundations of Computer Science.

Induction in ACL2ACL2 >QUERY (thm (implies (and (true-listp x) (true-listp y) (true-listp z)) (equal (app (app x y) z) (app x (app y z)))))

<< Starting proof tree logging >>^^^ Checkpoint Goal ^^^

*1 (the initial Goal, a key checkpoint) is pushed for proof by induction.

Perhaps we can prove *1 by induction. Five induction schemes are suggested

by this conjecture. These merge into three derived induction schemes.However, two of these are flawed and so we are left with one viablecandidate.

We will induct according to a scheme suggested by (APP X Y). Thissuggestion was produced using the :induction rules APP-INDUCTION-

SCHEME,APP-INDUCTION-SCHEME-FROM-DEFINITION and TRUE-LISTP. If we let

(:P X Y Z)denote *1 above then the induction scheme we'll use is(AND (IMPLIES (NOT (AND (TRUE-LISTP X) (TRUE-LISTP Y))) (:P X Y Z)) (IMPLIES (AND (AND (TRUE-LISTP X) (TRUE-LISTP Y)) (NOT (ENDP X)) (:P (CDR X) Y Z)) (:P X Y Z)) (IMPLIES (AND (AND (TRUE-LISTP X) (TRUE-LISTP Y)) (ENDP X)) (:P X Y Z))).This induction is justified by the same argument used to admit APP.When applied to the goal at hand the above induction scheme producesthree nontautological subgoals.^^^ Checkpoint *1 ^^^Subgoal *1/3Subgoal *1/3'Subgoal *1/2Subgoal *1/1Subgoal *1/1'

*1 is COMPLETED!Thus key checkpoint Goal is COMPLETED!

Q.E.D.

SummaryForm: ( THM ...)Rules: ((:DEFINITION APP-DEFINITION-RULE) (:DEFINITION ENDP) (:DEFINITION NOT) (:DEFINITION TRUE-LISTP) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP-INDUCTION-SCHEME) (:INDUCTION APP-INDUCTION-SCHEME-FROM-DEFINITION) (:INDUCTION TRUE-LISTP) (:REWRITE APP-CONTRACT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LIST::TRUE-LISTP-OF-CONS) (:REWRITE LIST::TRUE-LISTP-OF-NON-CONSP))Time: 0.37 seconds (prove: 0.19, print: 0.00, proof tree: 0.03, other:

0.16)Prover steps counted: 10932

Proof succeeded.

Page 57: Equational Reasoning Math Foundations of Computer Science.

Induction in ACL2We will induct according to a scheme suggested by (APP X Y). Thissuggestion was produced using the :induction rules APP-INDUCTION-

SCHEME,APP-INDUCTION-SCHEME-FROM-DEFINITION and TRUE-LISTP. If we let

(:P X Y Z)denote *1 above then the induction scheme we'll use is(AND (IMPLIES (NOT (AND (TRUE-LISTP X) (TRUE-LISTP Y))) (:P X Y Z)) (IMPLIES (AND (AND (TRUE-LISTP X) (TRUE-LISTP Y)) (NOT (ENDP X)) (:P (CDR X) Y Z)) (:P X Y Z)) (IMPLIES (AND (AND (TRUE-LISTP X) (TRUE-LISTP Y)) (ENDP X)) (:P X Y Z))).

Page 58: Equational Reasoning Math Foundations of Computer Science.

Induction in ACL2This induction is justified by the same argument used to admit APP.When applied to the goal at hand the above induction scheme producesthree nontautological subgoals.^^^ Checkpoint *1 ^^^Subgoal *1/3Subgoal *1/3'Subgoal *1/2Subgoal *1/1Subgoal *1/1'

*1 is COMPLETED!Thus key checkpoint Goal is COMPLETED!

Q.E.D.

Page 59: Equational Reasoning Math Foundations of Computer Science.

Induction in ACL2SummaryForm: ( THM ...)Rules: ((:DEFINITION APP-DEFINITION-RULE) (:DEFINITION ENDP) (:DEFINITION NOT) (:DEFINITION TRUE-LISTP) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP-INDUCTION-SCHEME) (:INDUCTION APP-INDUCTION-SCHEME-FROM-DEFINITION) (:INDUCTION TRUE-LISTP) (:REWRITE APP-CONTRACT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LIST::TRUE-LISTP-OF-CONS) (:REWRITE LIST::TRUE-LISTP-OF-NON-CONSP))Time: 0.37 seconds (prove: 0.19, print: 0.00, proof tree: 0.03, other: 0.16)Prover steps counted: 10932

Proof succeeded.