1 / 13

Understanding Inductive Sets of Data and BNF in Structural Programming

This chapter explores inductive sets of data through lists and natural numbers, focusing on the definition, induction, and representation using Backus-Naur Form (BNF). It illustrates how to define the simplest elements, construct remaining elements inductively, and apply these principles to programming and proving theorems, e.g., verifying properties of binary trees. It highlights the correlation between BNF definitions and program structures, emphasizing dynamic type-checking in programming. Examples include counting parentheses in binary trees and removing symbols from lists.

shay
Télécharger la présentation

Understanding Inductive Sets of Data and BNF in Structural Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Recall definition of list Chapter 1: Inductive Sets of Data • '() is a list. • If l is a list and a is any object, then (consa l) is a list • More generally: • Define a simplest element • Define remaining elements by induction

  2. Can define (natural) numbers this way: Inductive Sets of Data • 0 is a number • If i is a number, then (si) is a number • E.g., 3 is (s (s (s 0))) – “Church numerals” • Russell & Whitehead (1925): try to build all of arithmethic like this (fails because of Gödel's Incompleteness theorem)

  3. Backus-Nauer Form (BNF) • Simplifies description of inductive data types • <number> ::= 0, 1, 2, … • <list-of-numbers> ::= ( ) • <list-of-numbers> ::= (<number> . <list-of-numbers>) • [where (a . b) is like (cons a b)] • Consists of • Terminals: 0 ) . ( • Non-terminals: <list-of-numbers> • Productions: <list-of-numbers> ::= ()

  4. Can only describe context-free structures; e.g., BNF <bin-search-tree> ::= (<key> . <bin-search-tree> <bin-search-tree>) is inadequate for binary search trees: 7 5 9 11 6 8 3 which require a context-sensitive description

  5. BNF: Notation • Disjunction (this or that): | • <number> ::= <even-number> | <odd-number> • Kleene Star (zero or more): {}* • <list-of-numbers> ::= ({<number>}*) • Kleene Plus (one or more): {}+ • <nonempty-list-of-numbers> ::= ({<number>}+

  6. What can we do with these (BNF) inductive definitions? 1) Prove theorems about data structures. E.g. given <bintree> ::= <symbol> | ( <bintree> <bintree> ) prove that a bintree always has an even # of parens Induction

  7. Basis: A tree derived from <bintree> ::= <symbol> has zero parens. Zero is even. Inductive step: Assume that the relation holds for two bin trees b1, with 2m≥ 0 parens, and b2, with 2n≥ 0 parens. Using the rule <bintree> ::= (<bintree> <bintree>) we make a new bin tree b3 = (b1 b2) from these, which has length 2m+2n+2 = 2[m+n+1], which is even. There is no other way to make a bin tree. Hence the relation holds for any bin tree with zero or more parens, Q.E.D. Induction

  8. Induction What can we do with these (BNF) inductive definitions? 2) Write programs that manipulate inductive data ; count parentheses in a binary tree (define count-bt-parens (lambda (bt) (if (atom? bt) 0 ; base case (+ (count-bt-parens (car bt)) (count-bt-parens (cadr bt)) 2)))) ; inductive step

  9. Important Points • Program mirrors BNF description mirrors proof. (if (atom? bt) 0 <bintree> ::= <symbol> Basis: A tree derived from <bintree> ::= <symbol> has zero parens.

  10. Program mirrors BNF description mirrors proof: (+ (count-bt-parens (car bt)) (count-bt-parens (cadr bt)) 2)))) <bintree> ::= (<bintree> <bintree>) Inductive step: Assume that the relation holds for two bin trees b1, with 2m≥ 0 parens, and b2, with 2n≥ 0 parens....

  11. Follow the Grammar! When defining a program based on structural induction, the structure of the program should be patterned after the structure of the data.

  12. Another Point • Program assumes we're passing it a binary tree: dynamic • type-checking (vs. Java, static / compile-time type check) • Easier to make type errors: • > (count-bt-parens '(dont taze me bro)) • car: expects argument of type <pair>; given (dont taze me bro)

  13. Another Example ; remove first occurrence of symbol from ; list of symbols (define remove-first (lambda(s los) (if (null? los) '() (if (eqv? (car los) s) (cdr los) (cons (car los) (remove-first s (cdr los))))))) <list-of-symbols> ::= ( ) | (<symbol> . <list-of-symbols> )

More Related