equational reasoning math foundations of computer science

59
Equational Reasoning Math Foundations of Computer Science

Upload: shana-owen

Post on 25-Dec-2015

224 views

Category:

Documents


2 download

TRANSCRIPT

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.