Functional Data Structures

Similar documents
Verified Analysis of Functional Data Structures

Amortized Complexity Verified

Amortized Complexity Verified

INF2220: algorithms and data structures Series 1

16. Binary Search Trees. [Ottman/Widmayer, Kap. 5.1, Cormen et al, Kap ]

16. Binary Search Trees. [Ottman/Widmayer, Kap. 5.1, Cormen et al, Kap ]

Chapter 5 Data Structures Algorithm Theory WS 2017/18 Fabian Kuhn

Red-black Trees of smlnj Studienarbeit. Angelika Kimmig

Advanced Implementations of Tables: Balanced Search Trees and Hashing

8 Priority Queues. 8 Priority Queues. Prim s Minimum Spanning Tree Algorithm. Dijkstra s Shortest Path Algorithm

Assignment 5: Solutions

Priority queues implemented via heaps

Search Trees. Chapter 10. CSE 2011 Prof. J. Elder Last Updated: :52 AM

AVL Trees. Properties Insertion. October 17, 2017 Cinda Heeren / Geoffrey Tien 1

Computing N-th Roots using the Babylonian Method

Imperative Insertion Sort

A General Method for the Proof of Theorems on Tail-recursive Functions

A Simple Implementation Technique for Priority Search Queues

Quiz 1 Solutions. Problem 2. Asymptotics & Recurrences [20 points] (3 parts)

ASYMPTOTIC COMPLEXITY SEARCHING/SORTING

Jacques Fleuriot. Automated Reasoning Rewrite Rules

Binary Search Trees. Lecture 29 Section Robb T. Koether. Hampden-Sydney College. Fri, Apr 8, 2016

AVL Trees. Manolis Koubarakis. Data Structures and Programming Techniques

Data Structures and Algorithms " Search Trees!!

Fibonacci Heaps These lecture slides are adapted from CLRS, Chapter 20.

Landau Symbols. Manuel Eberl. November 28, 2018

Sorting Algorithms. We have already seen: Selection-sort Insertion-sort Heap-sort. We will see: Bubble-sort Merge-sort Quick-sort

Search Trees. EECS 2011 Prof. J. Elder Last Updated: 24 March 2015

CS Data Structures and Algorithm Analysis

Binary Decision Diagrams. Graphs. Boolean Functions

Fundamental Algorithms

Data Structures and and Algorithm Xiaoqing Zheng

IS 709/809: Computational Methods in IS Research Fall Exam Review

ENS Lyon Camp. Day 2. Basic group. Cartesian Tree. 26 October

Binary Search Trees. Motivation

Splay Trees. CMSC 420: Lecture 8

An Isabelle/HOL Formalization of the Textbook Proof of Huffman s Algorithm

16. Binary Search Trees

Data Structures and Algorithms Winter Semester

16. Binary Search Trees

Problem. Problem Given a dictionary and a word. Which page (if any) contains the given word? 3 / 26

ELEMENTARY NUMBER THEORY AND METHODS OF PROOF

5 + 9(10) + 3(100) + 0(1000) + 2(10000) =

arxiv: v1 [math.co] 22 Jan 2013

Binary Decision Diagrams

CS 151. Red Black Trees & Structural Induction. Thursday, November 1, 12

1. Introduction to commutative rings and fields

Binary Search Trees. Dictionary Operations: Additional operations: find(key) insert(key, value) erase(key)

A Tight Lower Bound for Top-Down Skew Heaps

3 Propositional Logic

Solutions. Prelim 2[Solutions]

1. Introduction to commutative rings and fields

Induction and recursion. Chapter 5

past balancing schemes require maintenance of balance info at all times, are aggresive use work of searches to pay for work of rebalancing

Solution suggestions for examination of Logic, Algorithms and Data Structures,

Computing Square Roots using the Babylonian Method

Chapter 5 Arrays and Strings 5.1 Arrays as abstract data types 5.2 Contiguous representations of arrays 5.3 Sparse arrays 5.4 Representations of

Lecture 17: Trees and Merge Sort 10:00 AM, Oct 15, 2018

Asymptotic Algorithm Analysis & Sorting

2.5.2 Basic CNF/DNF Transformation

Lecture 1 : Data Compression and Entropy

Optimal Tree-decomposition Balancing and Reachability on Low Treewidth Graphs

Inge Li Gørtz. Thank you to Kevin Wayne for inspiration to slides

Automated Reasoning. Lecture 9: Isar A Language for Structured Proofs

Imperative Insertion Sort

Outline. Computer Science 331. Cost of Binary Search Tree Operations. Bounds on Height: Worst- and Average-Case

Heaps and Priority Queues

Discrete Mathematics

Amortized Complexity Main Idea

Analysis of Algorithms. Outline 1 Introduction Basic Definitions Ordered Trees. Fibonacci Heaps. Andres Mendez-Vazquez. October 29, Notes.

A General Lower Bound on the I/O-Complexity of Comparison-based Algorithms

Chapter Summary. Mathematical Induction Strong Induction Well-Ordering Recursive Definitions Structural Induction Recursive Algorithms

CS361 Homework #3 Solutions

CMPS 6610 Fall 2018 Shortest Paths Carola Wenk

Discrete Mathematics Review

Analysis of Algorithms I: Asymptotic Notation, Induction, and MergeSort

The Tortoise and the Hare Algorithm

Single Source Shortest Paths

Fundamental Algorithms 11

Reduced Ordered Binary Decision Diagrams

Review Of Topics. Review: Induction

CS213d Data Structures and Algorithms

Prelim 2[Solutions] Solutions. 1. Short Answer [18 pts]

T U M I N S T I T U T F Ü R I N F O R M A T I K. Binary Search on Two-Dimensional Data. Riko Jacob

FIBONACCI HEAPS. preliminaries insert extract the minimum decrease key bounding the rank meld and delete. Copyright 2013 Kevin Wayne

Asymptotic Enumeration of Compacted Binary Trees

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

Postorder Preimages. arxiv: v3 [math.co] 2 Feb Colin Defant 1. 1 Introduction

University of Toronto Department of Electrical and Computer Engineering. Final Examination. ECE 345 Algorithms and Data Structures Fall 2016

HW #4. (mostly by) Salim Sarımurat. 1) Insert 6 2) Insert 8 3) Insert 30. 4) Insert S a.

Reckhow s Theorem. Yuval Filmus. November 2010

Algorithms and Data Structures 2016 Week 5 solutions (Tues 9th - Fri 12th February)

Data Structure. Mohsen Arab. January 13, Yazd University. Mohsen Arab (Yazd University ) Data Structure January 13, / 86

Chapter 10 Search Structures

Biased Quantiles. Flip Korn Graham Cormode S. Muthukrishnan

Analyse et Conception Formelle. Lesson 4. Proofs with a proof assistant

Lecture 5: Splay Trees

Algorithms Theory. 08 Fibonacci Heaps

Induction and Recursion

Part 1: Propositional Logic

Transcription:

Functional Data Structures with Isabelle/HOL Tobias Nipkow Fakultät für Informatik Technische Universität München 2017-2-3 1

Part II Functional Data Structures 2

Chapter 1 Binary Trees 3

1 Binary Trees 2 Basic Functions 3 Interlude: Arithmetic in Isabelle 4 More Basic Functions 5 Complete and Balanced Trees 4

1 Binary Trees 2 Basic Functions 3 Interlude: Arithmetic in Isabelle 4 More Basic Functions 5 Complete and Balanced Trees 5

Library/Tree.thy 6

Binary trees datatype a tree = Leaf Node ( a tree) a ( a tree) Abbreviations: Leaf l, a, r Node l a r In the sequel: tree = binary tree 7

1 Binary Trees 2 Basic Functions 3 Interlude: Arithmetic in Isabelle 4 More Basic Functions 5 Complete and Balanced Trees 8

Tree traversal inorder :: a tree a list inorder = [] inorder l, x, r = inorder l @ [x] @ inorder r preorder :: a tree a list preorder = [] preorder l, x, r = x # preorder l @ preorder r postorder :: a tree a list postorder = [] postorder l, x, r = postorder l @ postorder r @ [x] 9

size :: a tree nat = 0 l,, r = l + r + 1 Size size1 :: a tree nat t 1 = t + 1 = 1 = 1 l, x, r 1 = l 1 + r 1 Lemma The number of leaves in t is t 1. Warning:. and. 1 only on slides 10

Height height :: a tree nat h( ) = 0 h( l,, r ) = max (h(l)) (h(r)) + 1 Lemma h(t) t Lemma t 1 2 h(t) Warning: h(.) only on slides 11

1 Binary Trees 2 Basic Functions 3 Interlude: Arithmetic in Isabelle 4 More Basic Functions 5 Complete and Balanced Trees 12

3 Interlude: Arithmetic in Isabelle Numeric Types Chains of (In)Equations Proof Automation 13

Numeric types: nat, int, real Need conversion functions (inclusions): int :: nat int real :: nat real real of int :: int real If you need type real, import theory Complex Main instead of Main 14

Numeric types: nat, int, real Isabelle inserts conversion functions automatically (with theory Complex Main) If there are multiple correct completions, Isabelle chooses an arbitrary one Examples (i::int) + (n::nat) i + int n ((n::nat) + n) :: real real(n+n), real n + real n 15

Numeric types: nat, int, real Coercion in the other direction: nat :: int nat floor :: real int ceiling :: real int 16

Overloaded arithmetic operations Numbers are overloaded: 0, 1, 2,... :: a Basic arithmetic functions are overloaded: op +, op, op :: a a a :: a a Division on nat and int: op div, op mod :: a a a Division on real: op / :: a a a Exponentiation with nat: op ˆ :: a nat a Exponentiation with real: op powr :: a a a Absolute value: abs :: a a 17

3 Interlude: Arithmetic in Isabelle Numeric Types Chains of (In)Equations Proof Automation 18

Textbook proof t 1 = t 2 justification = t 3 justification. = t n justification In Isabelle: have "t 1 = t 2 " proof also have "... = t 3 " proof. also have "... = t n " proof finally have "t 1 = t n ". Chains of equations... is literally three dots 19

Chains of equations and inequations Instead of = you may also use and <. Example have "t 1 < t 2 " proof also have "... = t 3 " proof. also have "... t n " proof finally have "t 1 < t n ". 20

How to interpret... have "t 1 t 2 " proof also have "... = t 3 " proof Here... is internally replaced by t 2 In general, if this is the formula p t 1 t 2 where p is some constant, then... stands for t 2. 21

3 Interlude: Arithmetic in Isabelle Numeric Types Chains of (In)Equations Proof Automation 22

Only: variables numbers number variable +, =,, <,,,, Linear formulas Examples Linear: Nonlinear: 3 x + 5 y z x < z x x x 23

Extended linear formulas Also allowed: min, max even, odd t div n, t mod n where n is a number conversion functions nat, floor, ceiling, abs 24

Automatic proof of arithmetic formulas by arith Proof method arith tries to solve arithmetic formulas. Succeeds or fails Decision procedure for extended linear formulas; for types nat and int, the extended linear formulas may also contain and Nonlinear subformulas are viewed as (new) variables; for example, x x x is viewed as x y 25

Automatic proof of arithmetic formulas by (simp add: algebra simps) The lemmas list algebra simps helps to simplify arithmetic formulas It applies associativity, commutativity and distributivity of + and. This may prove the formula, may make it simpler, or may make it unreadable. It is a decision procedure for equations over rings (e.g. int) 26

Automatic proof of arithmetic formulas by (simp add: field simps) The lemmas list field simps extends algebra simps by rules for / Can only cancel common terms in a quotient, e.g. x y / (x z), if x 0 can be proved. 27

End of interlude, back to trees... 28

Tree.thy t 1 2 h(t) 29

1 Binary Trees 2 Basic Functions 3 Interlude: Arithmetic in Isabelle 4 More Basic Functions 5 Complete and Balanced Trees 30

Minimal height min height :: a tree nat mh( ) = 0 mh( l,, r ) = min (mh(l)) (mh(r)) + 1 Lemma mh(t) h(t) Lemma 2 mh(t) t 1 Warning: mh(.) only on slides 31

Internal path length ipl :: a tree nat ipl = 0 ipl l,, r = ipl l + l + ipl r + r Why relevant? Upper bound? 32

1 Binary Trees 2 Basic Functions 3 Interlude: Arithmetic in Isabelle 4 More Basic Functions 5 Complete and Balanced Trees 33

Complete tree complete :: a tree bool complete = True complete l,, r = (complete l complete r h(l) = h(r)) Lemma complete t = (mh(t) = h(t)) Lemma complete t = t 1 = 2 h(t) Lemma t 1 = 2 h(t) = complete t Lemma t 1 = 2 mh(t) = complete t Corollary complete t = t 1 < 2 h(t) Corollary complete t = 2 mh(t) < t 1 34

Complete tree: ipl Lemma A complete tree of height h has internal path length (h 2) 2 h + 2. In a search tree, finding the node labelled x takes as many steps as the path from the root to x is long. Thus the average time to find an element that is in the tree is ipl t / t. Lemma Let t be a complete search tree of height h. The average time to find a random element that is in the tree is asymptotically h 2 (as h approaches ): ipl t / t h 2 35

Complete tree: ipl A problem: (h 2) 2 h + 2 is only correct if interpreted over type int, not nat. Correct version: Lemma complete t = int (ipl t) = (int (h(t)) 2) 2 h(t) + 2 We do not cover the Isabelle formalization of limits. 36

Balanced tree balanced :: a tree bool balanced t = (h(t) mh(t) 1) Balanced trees have optimal height: Lemma If balanced t t t then h(t) h(t ). 37

Warning The terms complete and balanced are not defined uniquely in the literature. For example, Knuth calls complete what we call balanced. 38

Chapter 2 Search Trees 39

6 Unbalanced BST 7 AVL Trees 8 Red-Black Trees 40

Most of the material focuses on BSTs = binary search trees 41

Any tree represents a set: BSTs represent sets set tree :: a tree a set set tree = {} set tree l, x, r = set tree l {x} set tree r A BST represents a set that can be searched in time O(h(t)) Function set tree is called an abstraction function because it maps the implementation to the abstract mathematical object 42

bst :: a tree bool bst bst = True bst l, a, r = (bst l bst r ( x set tree l. x < a) ( x set tree r. a < x)) Type a must be in class linorder ( a :: linorder) where linorder are linear orders (also called total orders). Note: nat, int and real are in class linorder 43

Interface An implementation of sets of elements of type provide An implementation type s empty :: s insert :: a s s delete :: a s s isin :: s a bool a must 44

Alternative interface Instead of a set, a search tree can also implement a map from a to b: An implementation type m empty :: m update :: a b m m delete :: a m m lookup :: m a b option Sets are a special case of maps 45

Comparison of elements We assume that the element type a is a linear order Instead of using < and directly: datatype cmp val = LT EQ GT cmp x y = (if x < y then LT else if x = y then EQ else GT) 46

6 Unbalanced BST 7 AVL Trees 8 Red-Black Trees 47

Implementation type: a tree empty = Leaf Implementation insert x =, x, insert x l, a, r = (case cmp x a of LT insert x l, a, r EQ l, a, r GT l, a, insert x r ) 48

Implementation isin x = False isin l, a, r x = (case cmp x a of LT isin l x EQ True GT isin r x) 49

Implementation delete x = delete x l, a, r = (case cmp x a of LT delete x l, a, r EQ if r = then l else let (a, r ) = del min r in l, a, r GT l, a, delete x r ) del min l, a, r = (if l = then (a, r) else let (x, l ) = del min l in (x, l, a, r )) 50

6 Unbalanced BST Correctness Correctness Proof Method Based on Sorted Lists 51

Why is this implementation correct? Because empty insert delete isin simulate {} {.} {.} : set tree empty = {} set tree (insert x t) = set tree t {x} set tree (delete x t) = set tree t {x} isin t x = (x set tree t) Under the assumption bst t 52

Also: bst must be invariant bst empty bst t = bst (insert x t) bst t = bst (delete x t) 53

6 Unbalanced BST Correctness Correctness Proof Method Based on Sorted Lists 54

sorted :: a list bool sorted [] = True sorted [x] = True sorted (x # y # zs) = (x < y sorted (y # zs)) No duplicates! 55

Structural invariant The proof method works not just for unbalanced trees. We assume that there is some structural invariant on the search tree: inv : s bool e.g. some balance criterion. 56

Correctness of insert inv t sorted (inorder t) = inorder (insert x t) = ins list x (inorder t) where ins list :: a a list a list inserts an element into a sorted list. Also covers preservation of bst 57

Correctness of delete inv t sorted (inorder t) = inorder (delete x t) = del list x (inorder t) where del list :: a a list a list deletes an element from a sorted list. Also covers preservation of bst 58

Correctness of isin inv t sorted (inorder t) = isin t x = (x elems (inorder t)) where elems :: a list a set converts a list into a set. 59

6 Unbalanced BST 7 AVL Trees 8 Red-Black Trees 60

Data_Structures/AVL_Set.thy 61

6 Unbalanced BST 7 AVL Trees 8 Red-Black Trees 62

Data_Structures/RBT_Set.thy 63

Relationship to 2-3-4 trees 64

datatype color = Red Black Red-black trees datatype a rbt = Leaf Node color ( a tree) a ( a tree) Abbreviations: Leaf c, l, a, r Node c l a r R l a r Node Red l a r B l a r Node Black l a r 65

Color color :: a rbt color color = Black color c,,, = c paint :: color a rbt a rbt paint c = paint c, l, a, r = c, l, a, r 66

Invariants rbt :: a rbt bool rbt t = (invc t invh t color t = Black) invc :: a rbt bool invc = True invc c, l,, r = (invc l invc r (c = Red color l = Black color r = Black)) 67

Invariants invh :: a rbt bool invh = True invh, l,, r = (invh l invh r bh(l) = bh(r)) bheight :: a rbt nat bh( ) = 0 bh( c, l,, ) = (if c = Black then bh(l) + 1 else bh(l)) 68

Exercise Is invh what we want? Define a function Bpl :: a rbt nat set such that Bpl t ( black path lengths ) is the set of all n such that there is a path from the root of t to a leaf that contains exactly n black nodes. Prove invh t = Bpl t = {bh(t)} 69

Logarithmic height Lemma rbt t = h(t) 2 log 2 t 1 70

insert :: a a rbt a rbt insert x t = paint Black (ins x t) Insertion ins :: a a rbt a rbt ins x = R x ins x (B l a r) = (case cmp x a of LT balil (ins x l) a r EQ B l a r GT balir l a (ins x r)) ins x (R l a r) = (case cmp x a of LT R (ins x l) a r EQ R l a r GT R l a (ins x r)) 71

Adjusting colors ins x (B l a r) =... bal (ins x l) a r... bal l a (ins x r)... balil, balir :: a rbt a a rbt a rbt Combine arguments l a r into tree, ideally l, a, r Treat invariant violation Red-Red in l/r balil (R (R t 1 a 1 t 2 ) a 2 t 3 ) a 3 t 4 = R (B t 1 a 1 t 2 ) a 2 (B t 3 a 3 t 4 ) balil (R t 1 a 1 (R t 2 a 2 t 3 )) a 3 t 4 = R (B t 1 a 1 t 2 ) a 2 (B t 3 a 3 t 4 ) Principle: replace Red-Red by Red-Black Last equation: balil l a r = B l a r Symmetric: balir 72

Correctness via sorted lists Lemma inorder (balil l a r) = inorder l @ a # inorder r inorder (balir l a r) = inorder l @ a # inorder r Lemma sorted (inorder t) = inorder (ins x t) = ins list x (inorder t) Corollary sorted (inorder t) = inorder (insert x t) = ins list x (inorder t) Proofs easy! 73

Preservation of invariant Theorem rbt t = rbt (insert x t) 74

Chapter 3 Priority Queues 75

9 Priority Queues 10 Leftist Heap 11 Skew Heap 12 Priority Queues Based on Braun Trees 76

9 Priority Queues 10 Leftist Heap 11 Skew Heap 12 Priority Queues Based on Braun Trees 77

Priority queue informally Collection of elements with priorities Operations: empty emptiness test insert get element with minimal priority delete element with minimal priority We focus on the priorities: element = priority 78

Priority queues are multisets The same element can be contained multiple times in a priority queue = The abstract view of a priority queue is a multiset 79

Multisets in Isabelle Import "Library/Multiset" 80

Interface of implementation The type of elements (= priorities) a is a linear order An implementation of a priority queue of elements of type a must provide An implementation type empty :: q is empty :: q bool insert :: a q q get min :: q a del min :: q q q 81

More operations merge :: q q q Often provided decrease key/priority Not easy in functional setting 82

Correctness of implementation A priority queue represents a multiset of priorities. Correctness proof requires: Abstraction function: Invariant: mset :: q a multiset invar :: q bool 83

Correctness of implementation Must prove invar q = mset empty = {#} is empty q = (mset q = {#}) mset (insert x q) = mset q + {#x#} mset (del min q) = mset q {#get min q#} q empty = get min q set q ( x set q. get min q x) where set q = set mset (mset q) invar empty invar (insert x q) invar (del min q) 84

Terminology A tree is a heap if for every subtree the root is all elements in the subtrees. The term heap is frequently used synonymously with priority queue. 85

Priority queue via heap empty = is empty h = (h = ) get min, a, = a Assume we have merge insert a t = merge, a, t del min l, a, r = merge l r 86

Priority queue via heap A naive merge: merge t 1 t 2 = (case (t 1,t 2 ) of (, ) t 2 (, ) t 1 ( l 1,a 1,r 1, l 2,a 2,r 2 ) if a 1 a 2 then merge l 1 r 1, a 1, t 2 else t 1, a 2, merge l 2 r 2 Challenge: how to maintaining some kind of balance 87

9 Priority Queues 10 Leftist Heap 11 Skew Heap 12 Priority Queues Based on Braun Trees 88

Data_Structures/Leftist_Heap.thy 89

Leftist tree informally The rank of a tree is the depth of the rightmost leaf. In a leftist tree, the rank of every left child is the rank of its right sibling 90

Implementation type datatype a lheap = Leaf Node nat ( a tree) a ( a tree) Abbreviations and h, l, a, r as usual Abstraction function: mset tree :: a lheap a multiset mset tree = {#} mset tree, l, a, r = {#a#} + mset tree l + mset tree r 91

Heap heap :: a lheap bool heap = True heap, l, a, r = (heap l heap r ( x # mset tree l + mset tree r. a x)) 92

Leftist tree rank :: a lheap nat rank = 0 rank,,, r = rank r + 1 Node n, l, a, r : n = rank of node ltree :: a lheap bool ltree = True ltree n, l,, r = (n = rank r + 1 rank r rank l ltree l ltree r) 93

Leftist heap invariant invar h = (heap h ltree h) 94

Why leftist tree? Lemma ltree t = 2 rank t t 1 Lemma Execution time of merge t 1 t 2 is bounded by rank t 1 + rank t 2 95

merge Principle: descend on the right merge t 2 = t 2 merge t 1 = t 1 merge n 1, l 1, a 1, r 1 n 2, l 2, a 2, r 2 = (if a 1 a 2 then node l 1 a 1 (merge r 1 n 2, l 2, a 2, r 2 ) else node l 2 a 2 (merge r 2 n 1, l 1, a 1, r 1 )) node :: a lheap a a lheap a lheap node l a r = (let rl = rk l; rr = rk r in if rr rl then rr + 1, l, a, r else rl + 1, r, a, l ) where rk n,,, = n 96

merge merge n 1, l 1, a 1, r 1 n 2, l 2, a 2, r 2 = (if a 1 a 2 then node l 1 a 1 (merge r 1 n 2, l 2, a 2, r 2 ) else node l 2 a 2 (merge r 2 n 1, l 1, a 1, r 1 )) Function merge terminates because decreases with every recursive call. 97

Functional correctness proofs including preservation of invar Straightforward 98

Logarithmic complexity Complexity measures t merge, t insert t del min: count calls of merge. Lemma t merge l r rank l + rank r + 1 Lemma ltree l ltree r = t merge l r log 2 l 1 + log 2 r 1 + 1 Lemma ltree t = t insert x t log 2 t 1 + 2 Lemma ltree t = t del min t 2 log 2 t 1 + 1 99

Can we avoid the rank info in each node? 100

9 Priority Queues 10 Leftist Heap 11 Skew Heap 12 Priority Queues Based on Braun Trees 101

Archive of Formal Proofs https: //www.isa-afp.org/entries/skew_heap.shtml 102

Note: merge is called meld 103

Implementation type Ordinary binary trees Invariant: heap 104

Principle: swap subtrees when descending meld meld h 1 h 2 = (case h 1 of h 2 l 1, a 1, r 1 case h 2 of h 1 l 2, a 2, r 2 if a 1 a 2 then meld h 2 r 1, a 1, l 1 else meld h 1 r 2, a 2, l 2 ) Function meld terminates because... 105

Functional correctness proofs including preservation of heap Straightforward 106

Logarithmic complexity Amortized only: Theorem A sequence of n insert, del min and meld operations runs in time O(n log n). = Average cost of each operation is O(log n) (even in the worst case) 107

9 Priority Queues 10 Leftist Heap 11 Skew Heap 12 Priority Queues Based on Braun Trees 108

Archive of Formal Proofs https://www.isa-afp.org/entries/priority_ Queue_Braun.shtml 109

What is a Braun tree? braun :: a tree bool braun = True braun l, x, r = ( r l l Suc r braun l braun r) Lemma braun t = 2 h(t) 2 t + 1 110

Priority queue implementation Implementation type: ordinary binary trees Invariants: heap and braun No merge insert and del min defined explicitly 111

insert insert :: a a tree a tree insert a =, a, insert a l, x, r = (if a < x then insert x r, a, l else insert a r, x, l ) Correctness and preservation of invariant straightforward. 112

del min del min :: a tree a tree del min = del min, x, r = del min l, x, r = (let (y, l ) = del left l in sift down r y l ) 113

sift down sift down :: a tree a a tree a tree sift down a =, a, sift down, x, a = (if a x then, x,, a, else, a,, x, ) sift down l 1, x 1, r 1 a l 2, x 2, r 2 = (if a x 1 a x 2 then l 1, x 1, r 1, a, l 2, x 2, r 2 else if x 1 x 2 then sift down l 1 a r 1, x 1, l 2, x 2, r 2 else l 1, x 1, r 1, x 2, sift down l 2 a r 2 ) 114

Functional correctness proofs for deletion including preservation of heap and braun Many lemmas, mostly straightforward 115

Logarithmic complexity Running time of insert, del left and sift down (and therefore del min) bounded by height Remember: braun t = 2 h(t) 2 t + 1 = Above running times logarithmic in size 116

Sorting with priority queue pq [] = empty pq (x#xs) = insert x (pq xs) mins q = (if is empty q then [] else get min h # mins (del min h)) sort pq = mins pq Complexity of sort: O(n log n) if all priority queue functions have complexity O(log n) 117

Sorting with priority queue pq [] = empty pq (x#xs) = insert x (pq xs) Not optimal. Linear time possible. 118