COMP4161: Advanced Topics in Software Verification. fun. Gerwin Klein, June Andronick, Ramana Kumar S2/2016. data61.csiro.au

Similar documents
Theorem Proving Principles, Techniques, Applications Recursion

Isabelle s meta-logic. p.1

type classes & locales

COMP 4161 NICTA Advanced Course. Advanced Topics in Software Verification. Toby Murray, June Andronick, Gerwin Klein

λ calculus is inconsistent

A CRASH COURSE IN SEMANTICS

COMP 4161 Data61 Advanced Course. Advanced Topics in Software Verification. Gerwin Klein, June Andronick, Christine Rizkallah, Miki Tanaka

Efficient Mergesort. Christian Sternagel. October 11, 2017

10 Years of Partiality and General Recursion in Type Theory

Overview. A Compact Introduction to Isabelle/HOL. Tobias Nipkow. System Architecture. Overview of Isabelle/HOL

Functional Programming with Isabelle/HOL

Efficient Mergesort. Christian Sternagel. August 28, 2014

Functional Programming and Modeling

Programming and Proving in

HOL DEFINING HIGHER ORDER LOGIC LAST TIME ON HOL CONTENT. Slide 3. Slide 1. Slide 4. Slide 2 WHAT IS HIGHER ORDER LOGIC? 2 LAST TIME ON HOL 1

locales ISAR IS BASED ON CONTEXTS CONTENT Slide 3 Slide 1 proof - fix x assume Ass: A. x and Ass are visible Slide 2 Slide 4 inside this context

Reasoning about programs. Chapter 9 of Thompson

Functional Logic Programming: From Theory to Curry

Programming with Universes, Generically

Programming Languages 3. Definition and Proof by Induction

Defining Recursive Functions in Isabelle/HOL

Programming and Proving in Isabelle/HOL

The Worker/Wrapper Transformation

Typed Scheme: Scheme with Static Types

Programming with (co-)inductive types in Coq

Organisatorials. About us. Binary Search (java.util.arrays) When Tue 9:00 10:30 Thu 9:00 10:30. COMP 4161 NICTA Advanced Course

Concrete Semantics. A Proof Assistant Approach. Tobias Nipkow Fakultät für Informatik Technische Universität München

Exercise 1 ( = 24 points)

Functional Programming. Overview. Topics. Recall λ-terms. Examples

An Introduction to Isabelle/HOL 2008

The Worker/Wrapper Transformation

Induction in Coq. Nate Foster Spring 2018

Week 5 Tutorial Structural Induction

Overview. A normal-order language. Strictness. Recursion. Infinite data structures. Direct denotational semantics. Transition semantics

Functional Programming. Overview. Topics. Definition n-th Fibonacci Number. Graph

Recursion. Tjark Weber. Functional Programming 1. Based on notes by Sven-Olof Nyström. Tjark Weber (UU) Recursion 1 / 37

Induction and Semantics in Dafny

COMPUTER SCIENCE TRIPOS

Basic Foundations of Isabelle/HOL

Inductive datatypes in HOL. lessons learned in Formal-Logic Engineering

Verification of Selection and Heap Sort Using Locales

Coq with Classes. Matthieu Sozeau. Journées PPS 2011 September 5th 2011 Trouville, France. Project Team πr 2 INRIA Paris

Shell CSCE 314 TAMU. Haskell Functions

Infinite Objects and Proofs 1

2 Programming and Proving

Haske k ll An introduction to Functional functional programming using Haskell Purely Lazy Example: QuickSort in Java Example: QuickSort in Haskell

Fall 2018 Lecture N

CS 4110 Programming Languages & Logics. Lecture 28 Recursive Types

Multi-paradigm Declarative Languages

An introduction introduction to functional functional programming programming using usin Haskell

CS 320 Midterm Exam. Fall 2018

CSCI.6962/4962 Software Verification Fundamental Proof Methods in Computer Science (Arkoudas and Musser) Chapter p. 1/27

Hoare Logic. COMP2600 Formal Methods for Software Engineering. Rajeev Goré

Declaring Numbers. Bernd Braßel, Frank Huch and Sebastian Fischer. Department of Computer Science, University of Kiel, Germany

Typed Racket: Racket with Static Types

Lecture 19: Functions, Types and Data Structures in Haskell

Exercise 1 ( = 18 points)

Induction for Data Types

Lambda calculus. Wouter Swierstra and Alejandro Serrano. Advanced functional programming - Lecture 6

CS 4110 Programming Languages & Logics. Lecture 27 Recursive Types

CS 440: Programming Languages and Translators, Spring 2019 Mon

Mathematics for Computer Scientists 2 (G52MC2)

Proving Properties of Recursive Functions and Data Structures. CS 270 Math Foundations of CS Jeremy Johnson

Exercise 1 ( = 22 points)

Proving Properties on Programs From the Coq Tutorial at ITP 2015

Course year Typeclasses and their instances

Theory Exploration on Infinite Structures. Master s thesis in Computer Science Algorithms, Languages, and Logic SÓLRÚN HALLA EINARSDÓTTIR

Verification of an LCF-Style First-Order Prover with Equality

Combining Static and Dynamic Contract Checking for Curry

Multi-paradigm Declarative Languages

The design of a programming language for provably correct programs: success and failure

Processadors de Llenguatge II. Functional Paradigm. Pratt A.7 Robert Harper s SML tutorial (Sec II)

1. M,M sequential composition: try tactic M; if it succeeds try tactic M. sequential composition (, )

Declarative Programming with Function Patterns

CSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Functions

Isabelle Tutorial: System, HOL and Proofs

Foundations of Computation

Advanced features of Functional Programming (Haskell)

Isabelle/HOL:Selected Features and Recent Improvements

Functional Programming and Haskell

PROGRAMMING IN HASKELL. CS Chapter 6 - Recursive Functions

QIR Specification. Romain Vernoux. January 6, Notations 2

Foundations of Dataflow Analysis

Recursion. Lars-Henrik Eriksson. Functional Programming 1. Based on a presentation by Tjark Weber and notes by Sven-Olof Nyström

Lambda Calculus and Type Inference

COMP 382: Reasoning about algorithms

Getting Started with AutoCorres

A heuristic method for formally verifying real inequalities

Lecture 5: Lazy Evaluation and Infinite Data Structures

Formalization of First-Order Syntactic Unification

Higher Order Functions in Haskell

Lecture 4: Higher Order Functions

Functional Programming in Haskell Part I : Basics

The Prototype Verification System PVS

Inference rule for Induction

Exercise 1 (2+2+2 points)

Lecture 8: Summary of Haskell course + Type Level Programming

A Verified Compiler from Isabelle/HOL to CakeML

Programs and Proofs in Isabelle/HOL

MLW. Henk Barendregt and Freek Wiedijk assisted by Andrew Polonsky. March 26, Radboud University Nijmegen

Transcription:

COMP4161: Advanced Topics in Software Verification fun Gerwin Klein, June Andronick, Ramana Kumar S2/2016 data61.csiro.au

Content Intro & motivation, getting started [1] Foundations & Principles Lambda Calculus, natural deduction [1,2] Higher Order Logic [3 a ] Term rewriting [4] Proof & Specification Techniques Inductively defined sets, rule induction [5] Datatypes, recursion, induction [6, 7] Hoare logic, proofs about programs, C verification [8 b,9] (mid-semester break) Writing Automated Proof Methods [10] Isar, codegen, typeclasses, locales [11 c,12] a a1 due; b a2 due; c a3 due 2 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

General Recursion The Choice 3 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

General Recursion The Choice Limited expressiveness, automatic termination primrec 3 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

General Recursion The Choice Limited expressiveness, automatic termination primrec High expressiveness, termination proof may fail fun 3 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

General Recursion The Choice Limited expressiveness, automatic termination primrec High expressiveness, termination proof may fail fun High expressiveness, tweakable, termination proof manual function 3 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun examples fun sep :: a a list a list where sep a (x # y # zs) = x # a # sep a (y # zs) sep a xs = xs 4 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun examples fun sep :: a a list a list where sep a (x # y # zs) = x # a # sep a (y # zs) sep a xs = xs fun ack :: nat nat nat where ack 0 n = Suc n ack (Suc m) 0 = ack m 1 ack (Suc m) (Suc n) = ack m (ack (Suc m) n) 4 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun The definiton: pattern matching in all parameters arbitrary, linear constructor patterns reads equations sequentially like in Haskell (top to bottom) proves termination automatically in many cases (tries lexicographic order) 5 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun The definiton: pattern matching in all parameters arbitrary, linear constructor patterns reads equations sequentially like in Haskell (top to bottom) proves termination automatically in many cases (tries lexicographic order) Generates own induction principle 5 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun The definiton: pattern matching in all parameters arbitrary, linear constructor patterns reads equations sequentially like in Haskell (top to bottom) proves termination automatically in many cases (tries lexicographic order) Generates own induction principle May fail to prove termination: use function (sequential) instead allows you to prove termination manually 5 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun induction principle Each fun definition induces an induction principle 6 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun induction principle Each fun definition induces an induction principle For each equation: show P holds for lhs, provided P holds for each recursive call on rhs 6 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

fun induction principle Each fun definition induces an induction principle For each equation: show P holds for lhs, provided P holds for each recursive call on rhs Example sep.induct: [[ a. P a []; a w. P a [w] a x y zs. P a (y#zs) = P a (x#y#zs); ]] = P a xs 6 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Termination Isabelle tries to prove termination automatically For most functions this works with a lexicographic termination relation. 7 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Termination Isabelle tries to prove termination automatically For most functions this works with a lexicographic termination relation. Sometimes not 7 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Termination Isabelle tries to prove termination automatically For most functions this works with a lexicographic termination relation. Sometimes not error message with unsolved subgoal 7 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Termination Isabelle tries to prove termination automatically For most functions this works with a lexicographic termination relation. Sometimes not error message with unsolved subgoal You can prove automation separately. function (sequential) quicksort where quicksort [] = [] quicksort (x#xs) = quicksort [y xs.y x]@[x]@ quicksort [y xs.x < y] by pat completeness auto termination by (relation measure length ) (auto simp: less Suc eq le) 7 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Termination Isabelle tries to prove termination automatically For most functions this works with a lexicographic termination relation. Sometimes not error message with unsolved subgoal You can prove automation separately. function (sequential) quicksort where quicksort [] = [] quicksort (x#xs) = quicksort [y xs.y x]@[x]@ quicksort [y xs.x < y] by pat completeness auto termination by (relation measure length ) (auto simp: less Suc eq le) function is the fully tweakable, manual version of fun 7 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Demo

How does fun/function work? Recall primrec: defined one recursion operator per datatype D 9 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Recall primrec: defined one recursion operator per datatype D inductive definition of its graph (x, f x) D rel 9 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Recall primrec: defined one recursion operator per datatype D inductive definition of its graph (x, f x) D rel prove totality: x. y. (x, y) D rel 9 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Recall primrec: defined one recursion operator per datatype D inductive definition of its graph (x, f x) D rel prove totality: x. y. (x, y) D rel prove uniqueness: (x, y) D rel (x, z) D rel y = z 9 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Recall primrec: defined one recursion operator per datatype D inductive definition of its graph (x, f x) D rel prove totality: x. y. (x, y) D rel prove uniqueness: (x, y) D rel (x, z) D rel y = z recursion operator for datatype D rec, defined via THE. 9 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Recall primrec: defined one recursion operator per datatype D inductive definition of its graph (x, f x) D rel prove totality: x. y. (x, y) D rel prove uniqueness: (x, y) D rel (x, z) D rel y = z recursion operator for datatype D rec, defined via THE. primrec: apply datatype recursion operator 9 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Similar strategy for fun: a new inductive definition for each fun f 10 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Similar strategy for fun: a new inductive definition for each fun f extract recursion scheme for equations in f define graph f rel inductively, encoding recursion scheme 10 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Similar strategy for fun: a new inductive definition for each fun f extract recursion scheme for equations in f define graph f rel inductively, encoding recursion scheme prove totality (= termination) prove uniqueness (automatic) 10 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Similar strategy for fun: a new inductive definition for each fun f extract recursion scheme for equations in f define graph f rel inductively, encoding recursion scheme prove totality (= termination) prove uniqueness (automatic) derive original equations from f rel export induction scheme from f rel 10 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Can separate and defer termination proof: skip proof of totality 11 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Can separate and defer termination proof: skip proof of totality instead derive equations of the form: x f dom f x =... similarly, conditional induction principle 11 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Can separate and defer termination proof: skip proof of totality instead derive equations of the form: x f dom f x =... similarly, conditional induction principle f dom = acc f rel acc = accessible part of f rel the part that can be reached in finitely many steps 11 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

How does fun/function work? Can separate and defer termination proof: skip proof of totality instead derive equations of the form: x f dom f x =... similarly, conditional induction principle f dom = acc f rel acc = accessible part of f rel the part that can be reached in finitely many steps termination = x. x f dom still have conditional equations for partial functions 11 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Proving Termination Command termination fun name sets up termination goal x. x fun name dom Three main proof methods: 12 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Proving Termination Command termination fun name sets up termination goal x. x fun name dom Three main proof methods: lexicographic order (default tried by fun) 12 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Proving Termination Command termination fun name sets up termination goal x. x fun name dom Three main proof methods: lexicographic order (default tried by fun) size change (different automated technique) 12 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Proving Termination Command termination fun name sets up termination goal x. x fun name dom Three main proof methods: lexicographic order (default tried by fun) size change (different automated technique) relation R (manual proof via well-founded relation) 12 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders Definition < r is well founded if well founded induction holds wf r P. ( x. ( y < r x.p y) P x) ( x. P x) 13 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders Definition < r is well founded if well founded induction holds wf r P. ( x. ( y < r x.p y) P x) ( x. P x) Well founded induction rule: wf r x. ( y <r x. P y) = P x P a 13 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders Definition < r is well founded if well founded induction holds wf r P. ( x. ( y < r x.p y) P x) ( x. P x) Well founded induction rule: wf r x. ( y <r x. P y) = P x P a Alternative definition (equivalent): there are no infinite descending chains, or (equivalent): every nonempty set has a minimal element wrt < r min r Q x y Q. y r x wf r = ( Q {}. m Q. min r Q m) 13 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders: Examples < on IN is well founded well founded induction = complete induction 14 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders: Examples < on IN is well founded well founded induction = complete induction > and on IN are not well founded 14 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders: Examples < on IN is well founded well founded induction = complete induction > and on IN are not well founded x < r y = x dvd y x 1 on IN is well founded the minimal elements are the prime numbers 14 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders: Examples < on IN is well founded well founded induction = complete induction > and on IN are not well founded x < r y = x dvd y x 1 on IN is well founded the minimal elements are the prime numbers (a, b) < r (x, y) = a < 1 x a = x b < 2 y is well founded if < 1 and < 2 are 14 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders: Examples < on IN is well founded well founded induction = complete induction > and on IN are not well founded x < r y = x dvd y x 1 on IN is well founded the minimal elements are the prime numbers (a, b) < r (x, y) = a < 1 x a = x b < 2 y is well founded if < 1 and < 2 are A < r B = A B finite B is well founded 14 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Well Founded Orders: Examples < on IN is well founded well founded induction = complete induction > and on IN are not well founded x < r y = x dvd y x 1 on IN is well founded the minimal elements are the prime numbers (a, b) < r (x, y) = a < 1 x a = x b < 2 y is well founded if < 1 and < 2 are A < r B = A B finite B is well founded and in general are not well founded More about well founded relations: Term Rewriting and All That 14 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme So far for termination. What about the recursion scheme? 15 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Examples: So far for termination. What about the recursion scheme? Not fixed anymore as in primrec. fun fib where fib 0 = 1 fib (Suc 0) = 1 fib (Suc (Suc n)) = fib n + fib (Suc n) 15 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Examples: So far for termination. What about the recursion scheme? Not fixed anymore as in primrec. fun fib where fib 0 = 1 fib (Suc 0) = 1 fib (Suc (Suc n)) = fib n + fib (Suc n) Recursion: Suc (Suc n) n, Suc (Suc n) Suc n 15 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Examples: So far for termination. What about the recursion scheme? Not fixed anymore as in primrec. fun fib where fib 0 = 1 fib (Suc 0) = 1 fib (Suc (Suc n)) = fib n + fib (Suc n) Recursion: Suc (Suc n) n, Suc (Suc n) Suc n fun f where f x = (if x = 0 then 0 else f (x - 1) * 2) 15 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Examples: So far for termination. What about the recursion scheme? Not fixed anymore as in primrec. fun fib where fib 0 = 1 fib (Suc 0) = 1 fib (Suc (Suc n)) = fib n + fib (Suc n) Recursion: Suc (Suc n) n, Suc (Suc n) Suc n fun f where f x = (if x = 0 then 0 else f (x - 1) * 2) Recursion: x 0 = x x - 1 15 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Higher Oder: datatype a tree = Leaf a Branch a tree list fun treemap :: ( a a) a tree a tree where treemap fn (Leaf n) = Leaf (fn n) treemap fn (Branch l) = Branch (map (treemap fn) l) 16 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Higher Oder: datatype a tree = Leaf a Branch a tree list fun treemap :: ( a a) a tree a tree where treemap fn (Leaf n) = Leaf (fn n) treemap fn (Branch l) = Branch (map (treemap fn) l) Recursion: x set l = (fn, Branch l) (fn, x) 16 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Higher Oder: datatype a tree = Leaf a Branch a tree list fun treemap :: ( a a) a tree a tree where treemap fn (Leaf n) = Leaf (fn n) treemap fn (Branch l) = Branch (map (treemap fn) l) Recursion: x set l = (fn, Branch l) (fn, x) How to extract the context information for the call? 16 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Extracting context for equations 17 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Extracting context for equations Congruence Rules! 17 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Recall rule if cong: Extracting context for equations Congruence Rules! [ b = c; c = x = u; c = y = v ] = (if b then x else y) = (if c then u else v) 17 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Recall rule if cong: Extracting context for equations Congruence Rules! [ b = c; c = x = u; c = y = v ] = (if b then x else y) = (if c then u else v) Read: for transforming x, use b as context information, for y use b. 17 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Extracting the Recursion Scheme Recall rule if cong: Extracting context for equations Congruence Rules! [ b = c; c = x = u; c = y = v ] = (if b then x else y) = (if c then u else v) Read: for transforming x, use b as context information, for y use b. In fun def: for recursion in x, use b as context, for y use b. 17 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Congruence Rules for fun defs The same works for function definitions. declare my rule[fundef cong] 18 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Congruence Rules for fun defs The same works for function definitions. declare my rule[fundef cong] (if cong already added by default) Another example (higher-order): [ xs = ys; x. x set ys = f x = g x ] = map f xs = map g ys 18 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Congruence Rules for fun defs The same works for function definitions. declare my rule[fundef cong] (if cong already added by default) Another example (higher-order): [ xs = ys; x. x set ys = f x = g x ] = map f xs = map g ys Read: for recursive calls in f, f is called with elements of xs 18 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

Demo

Further Reading Alexander Krauss, Automating Recursive Definitions and Termination Proofs in Higher-Order Log PhD thesis, TU Munich, 2009. http://www4.in.tum.de/~krauss/diss/krauss_phd.pdf 20 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

We have seen today... General recursion with fun/function 21 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

We have seen today... General recursion with fun/function Induction over recursive functions 21 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

We have seen today... General recursion with fun/function Induction over recursive functions How fun works 21 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License

We have seen today... General recursion with fun/function Induction over recursive functions How fun works Termination, partial functions, congruence rules 21 COMP4161 c Data61, CSIRO: provided under Creative Commons Attribution License