Mak Making Induction Manif ing Induction Manifest in est in - - PowerPoint PPT Presentation

mak making induction manif ing induction manifest in est
SMART_READER_LITE
LIVE PREVIEW

Mak Making Induction Manif ing Induction Manifest in est in - - PowerPoint PPT Presentation

Mak Making Induction Manif ing Induction Manifest in est in Modular Modular ACL2 CL2 Carl Eastlund Matthias Felleisen cce@ccs.neu.edu matthias@ccs.neu.edu Northeastern University Boston, MA, USA 1 Pr Prog ogram V am Verif erifica


slide-1
SLIDE 1

Mak Making Induction Manif ing Induction Manifest in est in Modular Modular ACL2 CL2

Carl Eastlund Matthias Felleisen cce@ccs.neu.edu matthias@ccs.neu.edu Northeastern University Boston, MA, USA

1

slide-2
SLIDE 2

Pr Prog

  • gram V

am Verif erifica ication in A tion in ACL2 CL2

2

slide-3
SLIDE 3

Program (C, VHDL) Model (ACL2)

  • Test Suite

Formal Verification

3

slide-4
SLIDE 4

(defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (defthm insert-preserves-setp (implies (setp s) (setp (insert x s))))

4

slide-5
SLIDE 5

Termination Argument (Trivial)? ! (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) ! Rewrite Rule. Validity? ! (defthm insert-preserves-setp (implies (setp s) (setp (insert x s)))) ! Rewrite Rule.

5

slide-6
SLIDE 6

(defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (defthm join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s))))

6

slide-7
SLIDE 7

Termination Argument? ! (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) ! Rewrite Rule + Induction Scheme. Validity by Induction? ! (defthm join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s)))) ! Rewrite Rule.

7

slide-8
SLIDE 8

(defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (defthm insert-preserves-setp (implies (setp s) (setp (insert x s)))) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (defthm join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s))))

8

slide-9
SLIDE 9

(defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (defthm insert-preserves-setp (implies (setp s) (setp (insert x s)))) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (defthm join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s))))

9

slide-10
SLIDE 10

?

(defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (defthm join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s))))

10

slide-11
SLIDE 11

? ? ?

(defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (defthm join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s))))

11

slide-12
SLIDE 12

Tak aking a Pr ing a Prog

  • gram Apar

am Apart

12

slide-13
SLIDE 13

(interface Insert (sig setp (s)) (sig insert (x s)) (con insert-preserves-setp (implies (setp s) (setp (insert x s))))) (interface Join (extend Insert) (sig join (l s)) (con join-preserves-setp (implies (and (true-listp l) (setp s)) (setp (join l s)))))

13

slide-14
SLIDE 14

(module JoinMod (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join))

14

slide-15
SLIDE 15

(module JoinMod (import Insert) ! Names + Rewrite Rules. Termination Argument? ! (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) ! Rewrite Rule + Induction Scheme. Validity by Induction? ! (export Join))

15

slide-16
SLIDE 16

(interface BigStep (sig eval (e)) #|contracts|#) (interface SmallStep (sig step (e)) #|contracts|# (sig step-all (e)) #|contracts|#) (interface Equivalence (extend BigStep SmallStep) (con big-step=small-step (implies (expr-p e) (equal (eval e) (step-all e)))))

16

slide-17
SLIDE 17

(module SmallStepMod (defun step (e) ...) (defun step-all (e) (cond ((integerp e) e) ((calc-p e) (step-all (step e))))) (export SmallStep))

17

slide-18
SLIDE 18

(module SmallStepMod (defun step (e) ...) Termination Argument? ! (defun step-all (e) (cond ((integerp e) e) ((calc-p e) (step-all (step e))))) ! Rewrite Rule + Induction Scheme. Validity by Induction? ! (export SmallStep))

18

slide-19
SLIDE 19

(module EquivalenceMod (import BigStep SmallStep) (export Equivalence))

19

slide-20
SLIDE 20

(module EquivalenceMod (import BigStep SmallStep) ! Names + Rewrite Rules. Validity by Induction? ! (export Equivalence))

20

slide-21
SLIDE 21

(module EquivalenceMod (import BigStep SmallStep) ! Names + Rewrite Rules. Termination Argument? ! (defun recursion (e) (cond ((integerp e) nil) ((calc-p e) (recursion (step e))))) ! Rewrite Rule + Induction Scheme. Validity by Induction? ! (export Equivalence))

21

slide-22
SLIDE 22

(interface BigStep (sig eval (e)) #|contracts|#) (interface SmallStep (sig step (e)) #|contracts|# (sig step-all (e)) #|contracts|# ) (interface Equivalence (extend BigStep SmallStep) (con big-step=small-step (implies (expr-p e) (equal (eval e) (step-all e)))))

22

slide-23
SLIDE 23

(interface BigStep (sig eval (e)) #|contracts|#) (interface SmallStep (sig step (e)) #|contracts|# (sig step-all (e)) #|contracts|# (fun recursion (e) (cond ((integerp e) nil) ((calc-p e) (recursion (step e)))))) (interface Equivalence (extend BigStep SmallStep) (con big-step=small-step (implies (expr-p e) (equal (eval e) (step-all e)))))

23

slide-24
SLIDE 24

(interface BigStep (sig eval (e)) #|contracts|#) (interface SmallStep (sig step (e)) #|contracts|# (fun step-all (e) (cond ((integerp e) e) ((calc-p e) (step-all (step e))))) ) (interface Equivalence (extend BigStep SmallStep) (con big-step=small-step (implies (expr-p e) (equal (eval e) (step-all e)))))

24

slide-25
SLIDE 25

(module SmallStepMod (defun step (e) ...) Validity and Termination Argument? ! (export SmallStep) ! Names, Rewrite Rules, and Induction Scheme.)

25

slide-26
SLIDE 26

(module EquivalenceMod (import BigStep SmallStep) ! Names, Rewrite Rules, and Induction Scheme. Validity by Induction? ! (export Equivalence))

26

slide-27
SLIDE 27

(defun D (x) d) (defthm E e) (defun F (y) f) (defthm G g) (defun H (z) h) (defthm I i)

27

slide-28
SLIDE 28

(defun D (x) d) (defthm E e) (defun F (y) f) (defthm G g) (defun H (z) h) (defthm I i)

28

slide-29
SLIDE 29

(interface A (defun D (x) d) (defthm E e)) (interface B (extend A) (defun F (y) f) (defthm G g)) (interface C (extend A B) (defun H (z) h) (defthm I i))

29

slide-30
SLIDE 30

(interface A (fun D (x) d) (defthm E e)) (interface B (extend A) (fun F (y) f) (defthm G g)) (interface C (extend A B) (fun H (z) h) (defthm I i))

30

slide-31
SLIDE 31

(interface A (fun D (x) d) (con E e)) (interface B (extend A) (fun F (y) f) (con G g)) (interface C (extend A B) (fun H (z) h) (con I i))

31

slide-32
SLIDE 32

(interface A (fun D (x) d) (con E e)) (interface B (extend A) (fun F (y) f) (con G g)) (interface C (extend A B) (fun H (z) h) (con I i)) (module M (export A)) (module N (import A) (export B)) (module O (import A B) (export C))

32

slide-33
SLIDE 33

Lemma Lemma Modular Modular ACL2 CL2 Optimiz Optimized ed random/type 0.05s 0.05s 0.05s tick/type 0.01s 142.88s 2.00s tick/in-bounds 0.01s 136.67s 2.28s tick/uncrossed 0.02s 320.84s 2.29s

33

slide-34
SLIDE 34

Putting a Pr Putting a Prog

  • gram Bac

am Back Tog

  • gether

ether

34

slide-35
SLIDE 35

(link InsertJoinMod (InsertMod JoinMod)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

35

slide-36
SLIDE 36

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

36

slide-37
SLIDE 37

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

37

slide-38
SLIDE 38

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

38

slide-39
SLIDE 39

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

39

slide-40
SLIDE 40

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

40

slide-41
SLIDE 41

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (import Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

41

slide-42
SLIDE 42

(module InsertJoinMod (defun setp (s) (no-duplicatesp-equal s)) (defun insert (x s) (add-to-set-eql x s)) (export Insert) (defun join (l s) (if (endp l) s (insert (car l) (join (cdr l) s)))) (export Join)) (invoke InsertJoinMod) (join (list 1 2 3) (list 2 3 4))

42

slide-43
SLIDE 43

(module M (export I)) (module N (import I) (export J))

43

slide-44
SLIDE 44

(module M (export I)) + (module N (import I) (export J)) = (link MN (M N))

44

slide-45
SLIDE 45

(module M (export I)) + (module N (import I) (export J)) = (module MN (export I) (export J))

45

slide-46
SLIDE 46

(module M (export I)) + (module N (import I) (export J)) = (module MN (export I) (export J)) I

46

slide-47
SLIDE 47

(module M (export I)) + (module N (import I) (export J)) = (module MN (export I) (export J)) I , I ⇒ J

47

slide-48
SLIDE 48

(module M (export I)) + (module N (import I) (export J)) = (module MN (export I) (export J)) I , I ⇒ J

  • I J

48

slide-49
SLIDE 49

Pr Prog

  • gram

am Modular Modular ACL2 CL2 Worm 135.40s 134.77s Interpreter 116.37s 115.67s Graph (DFS/NLG) 9.00s 9.03s Graph (DFS/ELG) 13.88s 13.82s Graph (BFS/NLG) 158.11s 158.19s Graph (BFS/ELG) 445.15s 444.28s

49

slide-50
SLIDE 50

Modular A Modular ACL2: CL2: sound, sound, expr xpressiv essive, and ef and efficient. icient.

50

slide-51
SLIDE 51

Thank Y hank You

  • u

Modular ACL2: http://www.ccs.neu.edu/~cce/acl2/

51