Verifying Linked Data Structure Implementations

Total Page:16

File Type:pdf, Size:1020Kb

Verifying Linked Data Structure Implementations Verifying Linked Data Structure Implementations Karen Zee Viktor Kuncak Martin Rinard MIT CSAIL EPFL I&C MIT CSAIL Cambridge, MA Lausanne, Switzerland Cambridge, MA [email protected] viktor.kuncak@epfl.ch [email protected] Abstract equivalent conjunction of properties. By processing each conjunct separately, Jahob can use different provers to es- The Jahob program verification system leverages state of tablish different parts of the proof obligations. This is the art automated theorem provers, shape analysis, and de- possible thanks to formula approximation techniques[10] cision procedures to check that programs conform to their that create equivalent or semantically stronger formulas ac- specifications. By combining a rich specification language cepted by the specialized decision procedures. with a diverse collection of verification technologies, Jahob This paper presents our experience using the Jahob sys- makes it possible to verify complex properties of programs tem to obtain full correctness proofs for a collection of that manipulate linked data structures. We present our re- linked data structure implementations. Unlike systems that sults using Jahob to achieve full functional verification of a are designed to verify partial correctness properties, Jahob collection of linked data structures. verifies the full functional correctness of the data structure implementation. Not only do our results show that such full functional verification is feasible, the verified data struc- 1 Introduction tures and algorithms provide concrete examples that can help developers better understand how to achieve similar results in future efforts. Linked data structures such as lists, trees, graphs, and hash tables are pervasive in modern software systems. But because of phenomena such as aliasing and indirection, it 2 Example has been a challenge to develop automated reasoning sys- tems that are capable of proving important correctness prop- In this section we use a verified association list to demon- erties of such data structures. strate how developers specify data structure implementa- Jahob is a program verification system that leverages a tions in Jahob. Figure 1 presents selected portions of the rich specification language and a diversity of automated the- AssocList class. This class maintains a list of key, value oremprovers and decision procedures to verify complex pairs. Our system works with Java programs augmented properties of programs that manipulate linked data struc- with specifications. The specifications appear as special tures. Our specifications use abstract sets and relations to comments of the form /*: ... */ or //:, enabling the use of stan- characterize the abstract state of the data structure. A ver- dard Java compilers and virtual machines. The first com- ified abstraction function defines abstract sets and relations ment in Figure 1 identifies the abstract state content of the in terms of concrete objects and references that the imple- association list as a relation in the form of a set of pairs of mentation manipulates at run time. Specifications use ab- objects (we present the abstraction function that defines this stract sets and relations to state externally visible properties abstract state below).1 of the data structure state and to specify method precondi- The put(k0,v0) method inserts the pair (k0,v0) into the tions and postconditions. These specifications capture all of association list, returning the previous association for k0 (if the semantic information that the developer needs to use the such an association exists). The requires clause indicates data structure. Jahob establishes desired program properties using a 1Our examples use mathematical notation for concepts such as set number of external decision procedures, Nelson-Oppen union and universal quantification. While our source code files encode provers, and first-order provers. It automatically generates this notation in text, Isabelle’s version of the ProofGeneral Emacs mode renders the specifications within Java code in mathematical notation. The verification condition formulas from the program and its figures correspond to what the user sees on the screen in such mode. See specification, then splits each verification condition into an the screen shots at http://javaverification.org. 978-1-4244-1694-3/08/$25.00 ©2008 IEEE 1 Authorized licensed use limited to: MIT Libraries. Downloaded on September 7, 2009 at 09:45 from IEEE Xplore. Restrictions apply. class AssocList f vardefs ”content == first.. cnt”; // : public specvar content :: ”(obj ∗ obj) set” invariant CntDef: public Object put(Object k0, Object v0) ”8 x.x 2 Node ^ x 2 alloc ^ x 6= null ! /∗ : requires ”k0 6= null ^ v0 6= null” x.. cnt= f(x.. key,x.. value) g[ x..next..cnt ^ modifies content (8 v.(x.. key,v) 2= x..next..cnt)”; ensures invariant CntNull: ”( result= null ! content= old content [f (k0, v0)g) ^ ”8 x.x 2 Node ^ x 2 alloc ^ x= null ! x..cnt= fg”; ( result 6= null ! private static specvar edge ::”obj ) obj ) bool”; content= old content −f (k0, result) g[f (k0, v0)g)” ∗/ vardefs ”edge ==( λ xy.(x 2 Node ^ y=x..next) _ f...g (x 2 AssocList ^ y=x..first))”; g invariant InjInv: Figure 1. Association List put method ”8 x1 x2y.y 6= null ^ edge x1y ^ edge x2y ! x1=x2”; Figure 3. Abstraction Function and Selected public /∗: claimedby AssocList ∗/ class Node f Invariants public Object key; public Object value; public Node next; // : public ghost specvar cnt :: ”(obj ∗ obj) set” = ”fg” g Figure 2. Node Definition mantic domain in which the verification takes place. The domain is an infinite set of objects. Classes correspond to sets of objects within this domain. Fields correspond to to- that it is the client’s responsibility to ensure that neither k0 tal functions from objects to values— each object has all of nor v0 is null. The modifies clause indicates that the method the fields from all of the classes. If the object is not a mem- observably changes nothing except the abstract state con- ber of a given class, the values of all of the fields from that tent of the association list. The ensures clause states that class are simply null. For example, x 2 Node states that ob- the abstract state content after the method executes is the ject x has class Node. The expression x..next is a shorthand abstract state old content from before the method executed for the application of function next to object x, with the next augmented with the new association (k0,v0). Any previous function modeling the Java field next. association (k0,result) is removed from the association list, with result returned as the result of the put method. It re- turns null if no such previous association exists. public Object get(Object k0) Figure 2 presents the definition of the Node class, which /∗ : requires ”k0 6= null” ensures ”(result 6= null ! (k0, result) 2 content) ^ contains the key, value, and next fields that implement the ( result= null !: (9 v.(k0,v) 2 content))” ∗/ linked list of key, value pairs in the association list. The f assertion claimedby AssocList specifies that only the meth- Node current = first ; while /∗: inv ”8 v.((k0,v) 2 content)= ods in the AssocList class can access these fields. Jahob ((k0,v) 2 current..cnt)” ∗/ enforces this visibility condition by a syntactic check. (current != null ) f if (current.key == k0) f return current.value; g Each Node object has a specification variable cnt. This current = current.next; variable holds a set of pairs representing all of the associa- g tions in the part of the association list starting at the given return null ; g Node object. It is initialized to the empty set, is explicitly Figure 4. Implementation of the get method updated as the implementation manipulates the list of nodes, and is conceptually part of the state of the corresponding Node object. It is used only during the verification of the Figure 4 presents the implementation of the get(k0) association list and does not exist when the program runs. method. This method searches the list to find the Node con- The purpose of the cnt variable in the specification is to de- taining the key k0, then returns the corresponding value v fine the abstract state content of the association list. (or null if no such value exists). The loop invariant states Figure 3 presents the invariants that characterize the cnt that the pair (k0, value) is in the association list if and only specification variable and the corresponding abstract state if it is in the part of the list remaining to be searched—in content of the association list. The variable first holds a ref- effect, that the the search does not skip the Node with key erence to the first Node in the linked list that implements k0. Given the specification and the invariants, Jahob is ca- the association list; the abstract state content is the value of pable of verifying that this method 1) correctly implements the cnt specification variable of the first node in the list. The its specification, and 2) correctly preserves the invariants. CntDef invariant recursively defines cnt for non-null nodes In addition to this method, the association list contains as the key, value pair in the node union the value of cnt for other methods that check membership of keys in the asso- the next node in the list. The CntNull invariant defines cnt ciation list, add associations to the list, and remove associa- as empty for the null object. tions from the list. For each of these methods, Jahob is able The syntax of these invariants reflects the underlying se- to statically verify full functional specifications. 2 Authorized licensed use limited to: MIT Libraries. Downloaded on September 7, 2009 at 09:45 from IEEE Xplore. Restrictions apply. provides a facility to spawn provers in parallel and succeed MONA SPASS E CVC3 Z3 as soon as at least one of them succeeds.
Recommended publications
  • Device Tree 101
    Device Tree 101 Device Tree 101 Organized in partnership with ST February 9, 2021 Thomas Petazzoni embedded Linux and kernel engineering [email protected] © Copyright 2004-2021, Bootlin. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 1/56 Who is speaking ? I Thomas Petazzoni I Chief Technical Officer at Bootlin I Joined in 2008, employee #1 I Embedded Linux & Linux kernel engineer, open-source contributor I Author of the Device Tree for Dummies talk in 2013/2014 I Buildroot co-maintainer I Linux kernel contributor: ≈ 900 contributions I Member of Embedded Linux Conference (Europe) program committee I Based in Toulouse, France - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 2/56 Agenda I Bootlin introduction I STM32MP1 introduction I Why the Device Tree ? I Basic Device Tree syntax I Device Tree inheritance I Device Tree specifications and bindings I Device Tree and Linux kernel drivers I Common properties and examples - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 3/56 Bootlin I In business since 2004 I Team based in France I Serving customers worldwide I 18% revenue from France I 44% revenue from EU except France I 38% revenue outside EU I Highly focused and recognized expertise I Embedded Linux I Linux kernel I Embedded Linux build systems I Activities
    [Show full text]
  • Slide Set 17 for ENCM 339 Fall 2015
    Slide Set 17 for ENCM 339 Fall 2015 Steve Norman, PhD, PEng Electrical & Computer Engineering Schulich School of Engineering University of Calgary Fall Term, 2015 SN's ENCM 339 Fall 2015 Slide Set 17 slide 2/46 Contents Data structures Abstract data types Linked data structures A singly-linked list type in C++ Operations and implementation of SLListV1 The Big 3 for a linked-list class Ordered linked lists SN's ENCM 339 Fall 2015 Slide Set 17 slide 3/46 Outline of Slide Set 17 Data structures Abstract data types Linked data structures A singly-linked list type in C++ Operations and implementation of SLListV1 The Big 3 for a linked-list class Ordered linked lists SN's ENCM 339 Fall 2015 Slide Set 17 slide 4/46 Data structures In discussion of programming, the term data structure means a collection of data items, organized to support some of the following goals: I fast insertion or removal of data items I fast access to data items I fast searching for the location of a particular data item, if the item is in the collection I maintaining items in some kind of sorted order I keeping the memory footprint of the collection as small as possible There are design trade-offs|no single data structure design is best for all of the above goals. SN's ENCM 339 Fall 2015 Slide Set 17 slide 5/46 Here are two kinds of data structures that everybody in this course should be familiar with: I arrays I C and C++ structure objects We're about to study a kind of data structure called a linked list.
    [Show full text]
  • Full Functional Verification of Linked Data Structures
    Full Functional Verification of Linked Data Structures Karen Zee Viktor Kuncak Martin C. Rinard MIT CSAIL, Cambridge, MA, USA EPFL, I&C, Lausanne, Switzerland MIT CSAIL, Cambridge, MA, USA ∗ [email protected] viktor.kuncak@epfl.ch [email protected] Abstract 1. Introduction We present the first verification of full functional correctness for Linked data structures such as lists, trees, graphs, and hash tables a range of linked data structure implementations, including muta- are pervasive in modern software systems. But because of phenom- ble lists, trees, graphs, and hash tables. Specifically, we present the ena such as aliasing and indirection, it has been a challenge to de- use of the Jahob verification system to verify formal specifications, velop automated reasoning systems that are capable of proving im- written in classical higher-order logic, that completely capture the portant correctness properties of such data structures. desired behavior of the Java data structure implementations (with the exception of properties involving execution time and/or mem- 1.1 Background ory consumption). Given that the desired correctness properties in- In principle, standard specification and verification approaches clude intractable constructs such as quantifiers, transitive closure, should work for linked data structure implementations. But in prac- and lambda abstraction, it is a challenge to successfully prove the tice, many of the desired correctness properties involve logical generated verification conditions. constructs such transitive closure and
    [Show full text]
  • Fast Sequential Summation Algorithms Using Augmented Data Structures
    Fast Sequential Summation Algorithms Using Augmented Data Structures Vadim Stadnik [email protected] Abstract This paper provides an introduction to the design of augmented data structures that offer an efficient representation of a mathematical sequence and fast sequential summation algorithms, which guarantee both logarithmic running time and logarithmic computational cost in terms of the total number of operations. In parallel summation algorithms, logarithmic running time is achieved by high linear computational cost with a linear number of processors. The important practical advantage of the fast sequential summation algorithms is that they do not require supercomputers and can run on the cheapest single processor systems. Layout 1. Motivation 2. Parallel Summation Algorithms 3. Choice of Data Structure 4. Geometric Interpretation 5. Representation of Sequence 6. Fast Sequential Summation Algorithms 7. Mean Value and Standard Deviation 8. Other Data Structures 1. Motivation The original version of the fast sequential summation algorithms described here was implemented in C++ using data structures that support interfaces of STL containers [1]. These interesting and important algorithms can be implemented in many other programming languages. This discussion provides an introduction to the design of data structures, which significantly improve performance of summation algorithms. The fast summation algorithms have been developed by applying the method of augmenting data structures [2]. This powerful method can be used to solve a wide range of problems. It helps design advanced data structures that support more efficient algorithms than basic data structures. The main disadvantage of this method is its complexity, which makes the use of this method difficult in practice.
    [Show full text]
  • Linked List Data Structure
    Linked List Data Structure Static and Dynamic data structures A static data structure is an organization of collection of data that is fixed in size. as memory ,(مسبقا") This results in the maximum size needing to be known in advance cannot be reallocated at a later. Arrays are example of static data structure. A dynamic data structure , where in with the latter the size of the structure can dynamically grow or shrink in size as needed. Linked lists are example of dynamic data structure. Linked Lists Like arrays, Linked List is a linear data structure. Unlike arrays, linked list elements are not stored at contiguous location; the elements are linked using pointers. It consists of group of nodes in a sequence which is divided in two parts. Each node consists of its own data and the address of the next node and forms a chain. Linked Lists are used to create trees and graphs. What are different between linked lists and arrays? Arrays Linked lists Have a pre-determined fixed No fixed size; grow one element at a time size Array items are store Element can be stored at any place contiguously Easy access to any element in No easy access to i-th element , need to hop through all previous constant time elements start from start Size = n x sizeof(element) Size = n x sizeof (element) + n x sizeof(reference) Insertion and deletion at Insertion and deletion are simple and faster particular position is complex(shifting) Only element store Each element must store element and pointer to next element (extra memory for storage pointer).
    [Show full text]
  • CSI33 Data Structures
    Outline CSI33 Data Structures Department of Mathematics and Computer Science Bronx Community College December 2, 2015 CSI33 Data Structures Outline Outline 1 Chapter 13: Heaps, Balances Trees and Hash Tables Hash Tables CSI33 Data Structures Chapter 13: Heaps, Balances Trees and Hash TablesHash Tables Outline 1 Chapter 13: Heaps, Balances Trees and Hash Tables Hash Tables CSI33 Data Structures Chapter 13: Heaps, Balances Trees and Hash TablesHash Tables Python Dictionaries Various names are given to the abstract data type we know as a dictionary in Python: Hash (The languages Perl and Ruby use this terminology; implementation is a hash table). Map (Microsoft Foundation Classes C/C++ Library; because it maps keys to values). Dictionary (Python, Smalltalk; lets you "look up" a value for a key). Association List (LISP|everything in LISP is a list, but this type is implemented by hash table). Associative Array (This is the technical name for such a structure because it looks like an array whose 'indexes' in square brackets are key values). CSI33 Data Structures Chapter 13: Heaps, Balances Trees and Hash TablesHash Tables Python Dictionaries In Python, a dictionary associates a value (item of data) with a unique key (to identify and access the data). The implementation strategy is the same in any language that uses associative arrays. Representing the relation between key and value is a hash table. CSI33 Data Structures Chapter 13: Heaps, Balances Trees and Hash TablesHash Tables Python Dictionaries The Python implementation uses a hash table since it has the most efficient performance for insertion, deletion, and lookup operations. The running times of all these operations are better than any we have seen so far.
    [Show full text]
  • CIS 120 Midterm I October 13, 2017 Name (Printed): Pennkey (Penn
    CIS 120 Midterm I October 13, 2017 Name (printed): PennKey (penn login id): My signature below certifies that I have complied with the University of Pennsylvania’s Code of Academic Integrity in completing this examination. Signature: Date: • Do not begin the exam until you are told it is time to do so. • Make sure that your username (a.k.a. PennKey, e.g. stevez) is written clearly at the bottom of every page. • There are 100 total points. The exam lasts 50 minutes. Do not spend too much time on any one question. • Be sure to recheck all of your answers. • The last page of the exam can be used as scratch space. By default, we will ignore anything you write on this page. If you write something that you want us to grade, make sure you mark it clearly as an answer to a problem and write a clear note on the page with that problem telling us to look at the scratch page. • Good luck! 1 1. Binary Search Trees (16 points total) This problem concerns buggy implementations of the insert and delete functions for bi- nary search trees, the correct versions of which are shown in Appendix A. First: At most one of the lines of code contains a compile-time (i.e. typechecking) error. If there is a compile-time error, explain what the error is and one way to fix it. If there is no compile-time error, say “No Error”. Second: even after the compile-time error (if any) is fixed, the code is still buggy—for some inputs the function works correctly and produces the correct BST, and for other inputs, the function produces an incorrect tree.
    [Show full text]
  • Trees • Binary Trees • Traversals of Trees • Template Method Pattern • Data
    TREES • trees • binary trees • traversals of trees • template method pattern • data structures for trees Trees 1 Trees •atree represents a hierarchy - organization structure of a corporation Electronics R’Us R&D Sales Purchasing Manufacturing Domestic International TV CD Tuner Canada S. America Overseas Africa Europe Asia Australia - table of contents of a book student guide overview grading environment programming support code exams homeworks programs Trees 2 Another Example • Unix or DOS/Windows file system /user/rt/courses/ cs016/ cs252/ grades grades homeworks/ programs/ projects/ hw1 hw2 hw3 pr1 pr2 pr3 papers/ demos/ buylow sellhigh market Trees 3 Terminology • A is the root node. • B is the parent of D and E. • C is the sibling of B • D and E are the children of B. • D, E, F, G, I are external nodes, or leaves. • A, B, C, H are internal nodes. • The depth (level) of E is 2 • The height of the tree is 3. • The degree of node B is 2. A B C D E F G H I Property: (# edges) = (#nodes) − 1 Trees 4 Binary Trees • Ordered tree: the children of each node are ordered. • Binary tree: ordered tree with all internal nodes of degree 2. • Recursive definition of binary tree: •Abinary tree is either -anexternal node (leaf), or -aninternal node (the root) and two binary trees (left subtree and right subtree) Trees 5 Examples of Binary Trees • arithmetic expression + × × + 5 4 + × + 7 2 3 + 2 8 1 + 4 6 ((((3 × (1 + (4 + 6))) + (2 + 8)) × 5) + ( 4 × (7 + 2))) •river Trees 6 Properties of Binary Trees •(# external nodes ) = (# internal nodes) + 1 •(#
    [Show full text]
  • CSCI 2041: Data Types in Ocaml
    CSCI 2041: Data Types in OCaml Chris Kauffman Last Updated: Thu Oct 18 22:43:05 CDT 2018 1 Logistics Assignment 3 multimanager Reading I Manage multiple lists I OCaml System Manual: I Records to track lists/undo Ch 1.4, 1.5, 1.7 I option to deal with editing I Practical OCaml: Ch 5 I Higher-order funcs for easy bulk operations Goals I Post tomorrow I Tuples I Due in 2 weeks I Records I Algebraic / Variant Types Next week First-class / Higher Order Functions 2 Overview of Aggregate Data Structures / Types in OCaml I Despite being an older functional language, OCaml has a wealth of aggregate data types I The table below describe some of these with some characteristics I We have discussed Lists and Arrays at some length I We will now discuss the others Elements Typical Access Mutable Example Lists Homoegenous Index/PatMatch No [1;2;3] Array Homoegenous Index Yes [|1;2;3|] Tuples Heterogeneous PatMatch No (1,"two",3.0) Records Heterogeneous Field/PatMatch No/Yes {name="Sam"; age=21} Variant Not Applicable PatMatch No type letter = A | B | C; Note: data types can be nested and combined in any way I Array of Lists, List of Tuples I Record with list and tuple fields I Tuple of list and Record I Variant with List and Record or Array and Tuple 3 Tuples # let int_pair = (1,2);; val int_pair : int * int = (1, 2) I Potentially mixed data # let mixed_triple = (1,"two",3.0);; I Commas separate elements val mixed_triple : int * string * float = (1, "two", 3.) I Tuples: pairs, triples, quadruples, quintuples, etc.
    [Show full text]
  • Alexandria Manual
    alexandria Manual draft version Alexandria software and associated documentation are in the public domain: Authors dedicate this work to public domain, for the benefit of the public at large and to the detriment of the authors' heirs and successors. Authors intends this dedication to be an overt act of relinquishment in perpetuity of all present and future rights under copyright law, whether vested or contingent, in the work. Authors understands that such relinquishment of all rights includes the relinquishment of all rights to enforce (by lawsuit or otherwise) those copyrights in the work. Authors recognize that, once placed in the public domain, the work may be freely reproduced, distributed, transmitted, used, modified, built upon, or oth- erwise exploited by anyone for any purpose, commercial or non-commercial, and in any way, including by methods that have not yet been invented or conceived. In those legislations where public domain dedications are not recognized or possible, Alexan- dria is distributed under the following terms and conditions: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTIC- ULAR PURPOSE AND NONINFRINGEMENT.
    [Show full text]
  • 8.1 Doubly Linked List
    CMSC 132, Object-Oriented Programming II Summer 2017 Lecture 8: Lecturer: Anwar Mamat Disclaimer: These notes may be distributed outside this class only with the permission of the Instructor. 8.1 Doubly Linked List Like a singly linked list, a doubly-linked list is a linked data structure that consists of a set of sequentially linked records called nodes. Unlike a singly linked list, each node of the doubly singly list contains two fields that are references to the previous and to the next node in the sequence of nodes. The beginning and ending nodes' previous and next links, respectively, point to some kind of terminator, typically a sentinel node or null, to facilitate traversal of the list. Listing 1: Doubly Linked List Node Class 1 class Node<E>{ 2 E data; 3 Node previous; 4 Node next; 5 Node(E item){ 6 data = item; 7 } 8 } Usually Node class is nested inside the LinkedList class, and members of Node are private. 8.1.1 Create a simple linked list Now, let us create a simple linked list. 1 Node<String> n1 = new Node("Alice"); 2 Node<String> n2 = new Node("Bob"); 3 Node<String> n3 = new Node("Cathy"); 4 n1.next = n2; 5 n2.previous = n1; 6 n2.next = n3; 7 n3.previous = n2; This linked list represents this: Alice Bob Cathy 8.1.2 Display the Linked List We can display all the linked list: 8-1 8-2 Lecture 8: 1 Node<String> current = first; 2 while(current != null){ 3 System.out.println(current.data); 4 current = current.next; 5 } We can also display all the linked list in reverse order: 1 Node<String> current = tail; 2 while(current != null){ 3 System.out.println(current.data); 4 current = current.previous; 5 } 8.1.3 Insert a node Now, let us insert a node between \Bob" and \Cathy".
    [Show full text]
  • TAL Recognition in O(M(N2)) Time
    TAL Recognition in O(M(n2)) Time Sanguthevar Rajasekaran Dept. of CISE, Univ. of Florida raj~cis.ufl.edu Shibu Yooseph Dept. of CIS, Univ. of Pennsylvania [email protected] Abstract time needed to multiply two k x k boolean matri- ces. The best known value for M(k) is O(n 2"3vs) We propose an O(M(n2)) time algorithm (Coppersmith, Winograd, 1990). Though our algo- for the recognition of Tree Adjoining Lan- rithm is similar in flavor to those of Graham, Har- guages (TALs), where n is the size of the rison, & Ruzzo (1976), and Valiant (1975) (which input string and M(k) is the time needed were Mgorithms proposed for recognition of Con- to multiply two k x k boolean matrices. text Pree Languages (CFLs)), there are crucial dif- Tree Adjoining Grammars (TAGs) are for- ferences. As such, the techniques of (Graham, et al., malisms suitable for natural language pro- 1976) and (Valiant, 1975) do not seem to extend to cessing and have received enormous atten- TALs (Satta, 1993). tion in the past among not only natural language processing researchers but also al- gorithms designers. The first polynomial 2 Tree Adjoining Grammars time algorithm for TAL parsing was pro- A Tree Adjoining Grammar (TAG) consists of a posed in 1986 and had a run time of O(n6). quintuple (N, ~ U {~}, I, A, S), where Quite recently, an O(n 3 M(n)) algorithm N is a finite set of has been proposed. The algorithm pre- nonterminal symbols, sented in this paper improves the run time is a finite set of terminal symbols disjoint from of the recent result using an entirely differ- N, ent approach.
    [Show full text]