dependent type theory of stateful higher order functions
play

Dependent Type Theory of Stateful Higher-Order Functions Aleksandar - PowerPoint PPT Presentation

Dependent Type Theory of Stateful Higher-Order Functions Aleksandar Nanevski Harvard University joint with Greg Morrisett and Lars Birkedal TYPES 2006, Nottingham April 20, 2006 Dependent Type Theory of Stateful Higher-Order Functions p.


  1. Dependent Type Theory of Stateful Higher-Order Functions Aleksandar Nanevski Harvard University joint with Greg Morrisett and Lars Birkedal TYPES 2006, Nottingham April 20, 2006 Dependent Type Theory of Stateful Higher-Order Functions – p. 1

  2. Dependent type theory • Type theory is a program logic: − types can express and enforce precise program properties • Doubles up as a programming language. • Prototypical higher-order language (e.g, polymorphism, inductive/recursive types, subset types, etc.) • Problem: must be purely functional − recursion allowed, if you prove termination − effects like state, IO, etc., usually second class Dependent Type Theory of Stateful Higher-Order Functions – p. 2

  3. Hoare Logic • Logic for imperative programs. • Specifies partial correctness via Hoare triple { P } E { Q } : − if P holds, then E diverges or terminates in a state Q − P : precondition − Q : postcondition • Usually targets first-order languages − but recent advances in the higher-order case • Reasoning about state and aliasing very streamlined − Separation Logic by O’Hearn, Pym, Reynolds, Yang... Dependent Type Theory of Stateful Higher-Order Functions – p. 3

  4. Type theory for imperative programs • Why not integrate Hoare Logic into a Type Theory? • Benefits: − types can enforce correct use of effectful programs − add effects to type theory − preserves equational reasoning about pure programs • Idea: follow specifications-as-types principle − Type of Hoare triples { P } x : A { Q } − precondition P , postcondition Q , return result of type A . − Dependencies allow P and Q to talk about program data. • In this talk: Hoare Type Theory (HTT) − for reasoning about state and aliasing Dependent Type Theory of Stateful Higher-Order Functions – p. 4

  5. Outline • Introduction � • Assertion logic • Types and terms • Typechecking • Conclusions Dependent Type Theory of Stateful Higher-Order Functions – p. 5

  6. Heaps • Partial functions, assigning to each natural number at most one value. • Assertion seleq τ ( H, M, N ) : − In the heap H , location M points to N : τ . • Function upd τ ( H, M, N ) : − Returns a new heap in which M points to N : τ . • τ is a monomorphic type. Dependent Type Theory of Stateful Higher-Order Functions – p. 6

  7. Axioms on heaps • McCarthy’s axioms for functional arrays. seleq A ( upd A ( H, M, N ) , M, N ) (ax1) M 1 � = M 2 ∧ seleq A ( upd B ( H, M 1 , N 1 ) , M 2 , N 2 ) ⊃ (ax2) seleq A ( H, M 2 , N 2 ) • And: seleq A ( empty , M, N ) ⊃ ⊥ (ax3) seleq A ( H, M, N 1 ) ∧ seleq A ( H, M, N 2 ) ⊃ N 1 = N 2 (ax4) Dependent Type Theory of Stateful Higher-Order Functions – p. 7

  8. Assertions • Classical multi-sorted first-order logic with equality • Sorts: heaps and all types of HTT • Plus: type polymorphism (predicative) • Examples − heap equality can be defi ned: H 1 = H 2 ≡ ∀ l : nat . ∀ α. ∀ x : α. seleq α ( H 1 , l, x ) ⊂⊃ seleq α ( H 2 , l, x ) − Also defi nable: disjoint union H = H 1 ⊎ H 2 Dependent Type Theory of Stateful Higher-Order Functions – p. 8

  9. Some derived assertions • We can define propositions from Separation Logic. − Variable mem denotes current heap. ≡ ( mem = empty ) emp M �→ τ N ≡ ( mem = upd τ ( empty , M, N )) M ֒ → τ N ≡ seleq τ ( mem , M, N ) P ∗ Q ≡ ∃ h 1 , h 2 : heap . ( mem = h 1 ⊎ h 2 ) ∧ [ h 1 / mem ] P ∧ [ h 2 / mem ] Q P — ∗ Q ≡ ∀ h 1 , h 2 : heap . ( h 2 = h 1 ⊎ mem ) ⊃ [ h 1 / mem ] P ⊃ [ h 2 / mem ] Q this ( H ) ≡ ( mem = H ) Dependent Type Theory of Stateful Higher-Order Functions – p. 9

  10. Example: swap • Swap content of locations x and y (here natural numbers). • Spec with no aliasing between x and y : − α , β : type variables swap : ∀ α. ∀ β. Π x : nat . Π y : nat . { x �→ α m ∗ y �→ β n } r : 1 { x �→ β n ∗ y �→ α m } • For a spec with aliasing, use ∧ instead of ∗ Dependent Type Theory of Stateful Higher-Order Functions – p. 10

  11. Example: swap • Swap content of locations x and y (here natural numbers). • Spec with no aliasing between x and y : − α , β : type variables swap : ∀ α. ∀ β. Π x : nat . Π y : nat . m : α.n : β. { x �→ α m ∗ y �→ β n } r : 1 { x �→ β n ∗ y �→ α m } • For a spec with aliasing, use ∧ instead of ∗ • m , n : dummy variables Dependent Type Theory of Stateful Higher-Order Functions – p. 10

  12. Outline • Introduction � • Assertion logic � • Types and terms • Typechecking • Conclusions Dependent Type Theory of Stateful Higher-Order Functions – p. 11

  13. Type structure • Primitive types: nat , bool , 1 • Dependent functions: Π x : A. B – standard • Polymorphic types: ∀ α. A – standard • Hoare types: { P } x : A { Q } − Hoare types are monads − encapsulate effectful computations − but also formalize reasoning by strongest postconditions Dependent Type Theory of Stateful Higher-Order Functions – p. 12

  14. Term structure • Pure fragment: higher-order functions, polymorphism... • Impure fragment – first-order imperative language − sequence of commands, ending with a return value − primitives for allocation, strong update, lookup, deallocation, conditionals, recursion − recursive functions must be annotated with a type • Monadic constructs: − dia E · suspends the effectful computation E · suspension is pure, so it can appear in types − let dia x = M in E · run M , then E Dependent Type Theory of Stateful Higher-Order Functions – p. 13

  15. Monadic terms • Definition and typing of characteristic monadic terms: : A → M ( A ) = unit λx. dia x : ( A → B ) → M ( A ) → M ( B ) = map λf. λx. dia ( let dia y = x in f y ) : M ( M ( A )) → M ( A ) = idemp λx. dia ( let dia y = x in let dia z = y in z ) Dependent Type Theory of Stateful Higher-Order Functions – p. 14

  16. Monadic terms • Definition and typing of characteristic monadic terms: : A → M ( A ) = unit λx. dia x : ( A → B ) → M ( A ) → M ( B ) = map λf. λx. dia ( let dia y = x in f y ) : M ( M ( A )) → M ( A ) = idemp λx. dia ( let dia y = x in let dia z = y in z ) • Dependently typed unit : : Π x : A. { P } y : A { x = y ∧ P } = unit’ λx. dia x Dependent Type Theory of Stateful Higher-Order Functions – p. 14

  17. Example: swap • Swap content of x and y swap : ∀ α . ∀ β . Π x:nat. Π y:nat. m: α . n: β . { x �→ α m * y �→ β n } r : unit { x �→ β n * y �→ α m } = Λ α . Λ β . λ x. λ y. dia (u = !x; v = !y; y := u; x := v; ( )) Dependent Type Theory of Stateful Higher-Order Functions – p. 15

  18. Example: swap twice • Swapping twice in a row is identity. identity = Λ α . Λ β . λ x. λ y. dia(let dia = swap α β x y = swap β α x y dia in ( ) end) − Heap invariance apparent from the type. identity : ∀ α . ∀ β . Π x:nat. Π y:nat. m: α ,n: β ,h:heap. { (x �→ α m * y �→ β n) ∧ this(h) } r : 1 { this(h) } Dependent Type Theory of Stateful Higher-Order Functions – p. 16

  19. Outline • Introduction � • Assertion logic � • Types and terms � • Typechecking • Conclusions Dependent Type Theory of Stateful Higher-Order Functions – p. 17

  20. Judgments • Typechecking by computing strongest postconditions. • Typechecking is completely syntax-directed. − effectful programs are (part of) the proofs of their specs − remaining part of the proof must discharge intermediate assertions − no whole-program reasoning • Judgment: ∆; P ⊢ E ⇒ x : A. Q − ∆ : variable context − E : computation − P : what holds before E runs (precondition) − A : return result − Q : how the heap is changed after E (strongest postcondition) − Q is output Dependent Type Theory of Stateful Higher-Order Functions – p. 18

  21. Typechecking deallocation • dealloc ( M ); E − deallocates memory at location M , and proceeds to run E Dependent Type Theory of Stateful Higher-Order Functions – p. 19

  22. Typechecking deallocation • dealloc ( M ); E − deallocates memory at location M , and proceeds to run E • Typing rule: ∆; P ⊢ dealloc ( M ); E ⇒ y : B. Q Dependent Type Theory of Stateful Higher-Order Functions – p. 19

  23. Typechecking deallocation • dealloc ( M ); E − deallocates memory at location M , and proceeds to run E • Typing rule: ∆ ⊢ M : nat ∆; P ⊢ dealloc ( M ); E ⇒ y : B. Q Dependent Type Theory of Stateful Higher-Order Functions – p. 19

  24. Typechecking deallocation • dealloc ( M ); E − deallocates memory at location M , and proceeds to run E • Typing rule: ∆ ⊢ M : nat ∆ ⊢ P ⊃ ( M ֒ → − ) ∆; P ⊢ dealloc ( M ); E ⇒ y : B. Q • proving P ⊃ ( M ֒ → − ) can be postponed Dependent Type Theory of Stateful Higher-Order Functions – p. 19

  25. Typechecking deallocation • dealloc ( M ); E − deallocates memory at location M , and proceeds to run E • Typing rule: ∆ ⊢ M : nat ∆ ⊢ P ⊃ ( M ֒ → − ) ∆; ⊢ E ⇒ y : B. Q ∆; P ⊢ dealloc ( M ); E ⇒ y : B. Q • proving P ⊃ ( M ֒ → − ) can be postponed Dependent Type Theory of Stateful Higher-Order Functions – p. 19

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend