Higher-Order Concurrent Separation Logic: Why and How Lars Birkedal - - PowerPoint PPT Presentation

higher order concurrent separation logic why and how
SMART_READER_LITE
LIVE PREVIEW

Higher-Order Concurrent Separation Logic: Why and How Lars Birkedal - - PowerPoint PPT Presentation

Higher-Order Concurrent Separation Logic: Why and How Lars Birkedal Aarhus University Nijmegen, Netherlands Dec, 2015 Modular Reasoning about Higher-Order Concurrent Imperative Programs 1 / 33 Introduction Goal Program logics for


slide-1
SLIDE 1

Higher-Order Concurrent Separation Logic: Why and How

Lars Birkedal Aarhus University Nijmegen, Netherlands Dec, 2015

Modular Reasoning about Higher-Order Concurrent Imperative Programs

1 / 33

slide-2
SLIDE 2

Introduction

Goal

◮ Program logics for modular reasoning about partial

correctness of higher-order, concurrent, imperative code programs.

2 / 33

slide-3
SLIDE 3

Outline

  • 1. Why higher-order logic + guarded recursion is useful

for expressing such modular specs

◮ via example of layered and recursive abstraction.

  • 2. Why impredicative protocols to govern shared state

◮ via example verification of lock implementation ◮ invariants to enforce protocols ◮ monoids to express protocols (ownership)

  • 3. How the logic is modelled and showed sound (key ideas)

◮ BI-hyperdoctrine over ultra-metric spaces, Kripke model

with recursively defined worlds.

  • 4. Overview of resources to learn more

◮ tutorial material ◮ papers: iCAP [ESOP-2014] and Iris [POPL-2015] ◮ paper on formalization: ModuRes Library [ITP-2015]

  • 5. Overview of features in iCAP and Iris not covered today

3 / 33

slide-4
SLIDE 4

Higher-Order Programming

◮ Programming features

◮ HO functions ◮ Interfaces in OO languages ◮ Function Pointers in low-level languages

◮ for

◮ Building libraries ◮ Returning libraries ◮ Parameterization

◮ Point:

◮ Features important for modularizing large programs ◮ Allow programming relative to unknown code

◮ Goal: Logics and Models that support correspondingly

modular specifications of code.

4 / 33

slide-5
SLIDE 5

Example: Layered and Recursive Abstractions

◮ Modular library specifications that supports

layering of abstractions and recursive abstractions.

5 / 33

slide-6
SLIDE 6

Example: Layered and Recursive Abstractions

◮ Modular library specifications that supports

layering of abstractions and recursive abstractions.

Lock LinkedList HashMap

5 / 33

slide-7
SLIDE 7

Example: Layered and Recursive Abstractions

◮ Modular library specifications that supports

layering of abstractions and recursive abstractions.

Lock LinkedList HashMap

M1 M2

5 / 33

slide-8
SLIDE 8

Recursive Abstractions

Reentrant Event Loop Library

delegate void handler ( ) ; interface IEventLoop { void loop ( ) ; void s i g n a l ( ) ; void when ( handler f ) ; }

6 / 33

slide-9
SLIDE 9

Recursive Abstractions

Reentrant Event Loop Library

delegate void handler ( ) ; interface IEventLoop { void loop ( ) ; void s i g n a l ( ) ; void when ( handler f ) ; } Event handlers are allowed to emit events!

6 / 33

slide-10
SLIDE 10

Recursive Abstractions

Reentrant Event Loop Library

delegate void handler ( ) ; interface IEventLoop { void loop ( ) ; void s i g n a l ( ) ; void when ( handler f ) ; } Event handlers are allowed to emit events! A library that allows us to close Landin’s Knot / perform recursion through the store.

6 / 33

slide-11
SLIDE 11

Recursive Abstractions

Reentrant Event Loop Library

delegate void handler ( ) ; interface IEventLoop { void loop ( ) ; void s i g n a l ( ) ; void when ( handler f ) ; } Event handlers are allowed to emit events! A library that allows us to close Landin’s Knot / perform recursion through the store. Realistic examples of this form: libevent, Node.js, Twisted, ... C5, GUI libraries, Joins library, ...

6 / 33

slide-12
SLIDE 12

A Modular Lock Specification

∃isLock, locked : Val × Prop → Prop. ∀R : Prop. {R} new Lock() {isLock(ret, R)} {isLock(x, R)} x.Acquire() {locked(x, R) ∗ R} {locked(x, R) ∗ R} x.Release() {isLock(x, R)} ∀x : Val. isLock(x, R) ⇔ isLock(x, R) ∗ isLock(x, R)

7 / 33

slide-13
SLIDE 13

A Modular Lock Specification

∃isLock, locked : Val × Prop → Prop. ∀R : Prop. {R} new Lock() {isLock(ret, R)} {isLock(x, R)} x.Acquire() {locked(x, R) ∗ R} {locked(x, R) ∗ R} x.Release() {isLock(x, R)} ∀x : Val. isLock(x, R) ⇔ isLock(x, R) ∗ isLock(x, R)

Standard sep. logic lock specification The resource invariant R describes the resources protected by the lock.

7 / 33

slide-14
SLIDE 14

A Modular Lock Specification

∃isLock, locked : Val × Prop → Prop. ∀R : Prop. {R} new Lock() {isLock(ret, R)} {isLock(x, R)} x.Acquire() {locked(x, R) ∗ R} {locked(x, R) ∗ R} x.Release() {isLock(x, R)} ∀x : Val. isLock(x, R) ⇔ isLock(x, R) ∗ isLock(x, R)

7 / 33

slide-15
SLIDE 15

A Modular Lock Specification

∃isLock, locked : Val × Prop → Prop. ∀R : Prop. {R} new Lock() {isLock(ret, R)} {isLock(x, R)} x.Acquire() {locked(x, R) ∗ R} {locked(x, R) ∗ R} x.Release() {isLock(x, R)} ∀x : Val. isLock(x, R) ⇔ isLock(x, R) ∗ isLock(x, R)

Third-order quantification.

7 / 33

slide-16
SLIDE 16

A Modular Lock Specification

∀R : Prop. ∃isLock, locked : Val → Prop. {R} new Lock() {isLock(ret)} {isLock(x)} x.Acquire() {locked(x) ∗ R} {locked(x) ∗ R} x.Release() {isLock(x)} ∀x : Val. isLock(x) ⇔ isLock(x) ∗ isLock(x)

7 / 33

slide-17
SLIDE 17

A Modular Lock Specification

∀R : Prop. ∃isLock, locked : Val → Prop. {R} new Lock() {isLock(ret)} {isLock(x)} x.Acquire() {locked(x) ∗ R} {locked(x) ∗ R} x.Release() {isLock(x)} ∀x : Val. isLock(x) ⇔ isLock(x) ∗ isLock(x)

Second-order quantification.

7 / 33

slide-18
SLIDE 18

A Modular Lock Specification

∀R : Prop. ∃isLock, locked : Val → Prop. {R} new Lock() {isLock(ret)} {isLock(x)} x.Acquire() {locked(x) ∗ R} {locked(x) ∗ R} x.Release() {isLock(x)} ∀x : Val. isLock(x) ⇔ isLock(x) ∗ isLock(x)

This specification might suffice for layering of abstractions, but not for all recursive abstractions.

7 / 33

slide-19
SLIDE 19

Recursive Abstractions

Event Loop Memory Safety Specification

∃eloop : Val → Prop. {emp} new EventLoop() {eloop(ret)} {eloop(x)} x.loop() {eloop(x)} {eloop(x)} x.signal() {eloop(x)} {eloop(x) ∗ P} x.when(f) {eloop(x)} ∀x : Val. eloop(x) ⇔ eloop(x) ∗ eloop(x) where P = f → {emp}{emp}

8 / 33

slide-20
SLIDE 20

Recursive Abstractions

Event Loop Memory Safety Specification

∃eloop : Val → Prop. {emp} new EventLoop() {eloop(ret)} {eloop(x)} x.loop() {eloop(x)} {eloop(x)} x.signal() {eloop(x)} {eloop(x) ∗ P} x.when(f) {eloop(x)} ∀x : Val. eloop(x) ⇔ eloop(x) ∗ eloop(x) where P = f → {emp}{emp}

Event handler must run without any resources but emitting an event requires an eloop(x) resource!

8 / 33

slide-21
SLIDE 21

Recursive Abstractions

Reentrant Event Loop Memory Safety Specification

∃eloop : Val → Prop. {emp} new EventLoop() {eloop(ret)} {eloop(x)} x.loop() {eloop(x)} {eloop(x)} x.signal() {eloop(x)} {eloop(x) ∗ P} x.when(f) {eloop(x)} ∀x : Val. eloop(x) ⇔ eloop(x) ∗ eloop(x) where P = f → {eloop(x)}{eloop(x)}

8 / 33

slide-22
SLIDE 22

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ Since we are interested in memory safety, eloop has to

specify the memory footprint of the event loop.

9 / 33

slide-23
SLIDE 23

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ Since we are interested in memory safety, eloop has to

specify the memory footprint of the event loop.

◮ Since an event loop can call handlers, its footprint include

the footprint of its handlers.

◮ Since handlers can signal events, the footprint of handlers

include the footprint of their event loop.

9 / 33

slide-24
SLIDE 24

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ Since we are interested in memory safety, eloop has to

specify the memory footprint of the event loop.

◮ Since an event loop can call handlers, its footprint include

the footprint of its handlers.

◮ Since handlers can signal events, the footprint of handlers

include the footprint of their event loop.

◮ The footprint of an event loop is thus recursively defined.

9 / 33

slide-25
SLIDE 25

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ Imagine an implementation that maintains a set of signal

handlers and a set of pending signals, protected by a lock:

class EventLoop : IEventLoop { private Lock lock ; private Set<handler > h a n d l e r s ; private Set<s i g n a l > s i g n a l s ; . . . }

◮ Tying Landin’s Knot using a reference protected by a lock.

10 / 33

slide-26
SLIDE 26

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

11 / 33

slide-27
SLIDE 27

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

◮ We define eloop using guarded recursion and the

third-order isLock representation predicate:

eloop =fix(λeloop : Val → Prop. λx : Val. ∃l. x.lock → l ∗ isLock(l, ∃y, z, A, B. set(y, A) ∗ set(z, B) ∗ x.handlers → y ∗ x.signals → z ∗ ∀a ∈ A. ⊲ a → {eloop(x)}{eloop(x)}))

11 / 33

slide-28
SLIDE 28

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

◮ We define eloop using guarded recursion and the

third-order isLock representation predicate:

eloop =fix(λeloop : Val → Prop. λx : Val. ∃l. x.lock → l ∗ isLock(l, ∃y, z, A, B. set(y, A) ∗ set(z, B) ∗ x.handlers → y ∗ x.signals → z ∗ ∀a ∈ A. ⊲ a → {eloop(x)}{eloop(x)}))

11 / 33

slide-29
SLIDE 29

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

◮ We define eloop using guarded recursion and the

third-order isLock representation predicate:

eloop =fix(λeloop : Val → Prop. λx : Val. ∃l. x.lock → l ∗ isLock(l, ∃y, z, A, B. set(y, A) ∗ set(z, B) ∗ x.handlers → y ∗ x.signals → z ∗ ∀a ∈ A. ⊲ a → {eloop(x)}{eloop(x)}))

11 / 33

slide-30
SLIDE 30

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

◮ We define eloop using guarded recursion and the

third-order isLock representation predicate:

eloop =fix(λeloop : Val → Prop. λx : Val. ∃l. x.lock → l ∗ isLock(l, ∃y, z, A, B. set(y, A) ∗ set(z, B) ∗ x.handlers → y ∗ x.signals → z ∗ ∀a ∈ A. ⊲ a → {eloop(x)}{eloop(x)}))

11 / 33

slide-31
SLIDE 31

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

◮ We define eloop using guarded recursion and the

third-order isLock representation predicate:

eloop =fix(λeloop : Val → Prop. λx : Val. ∃l. x.lock → l ∗ isLock(l, ∃y, z, A, B. set(y, A) ∗ set(z, B) ∗ x.handlers → y ∗ x.signals → z ∗ ∀a ∈ A. ⊲ a → {eloop(x)}{eloop(x)}))

11 / 33

slide-32
SLIDE 32

Recursive Abstractions

Verifying a lock-based event loop implementation

◮ The footprint of an event loop is thus recursively

defined and the recursion “goes through the lock”.

◮ We define eloop using guarded recursion and the

third-order isLock representation predicate:

eloop =fix(λeloop : Val → Prop. λx : Val. ∃l. x.lock → l ∗ isLock(l, ∃y, z, A, B. set(y, A) ∗ set(z, B) ∗ x.handlers → y ∗ x.signals → z ∗ ∀a ∈ A. ⊲ a → {eloop(x)}{eloop(x)}))

Must be non-expansive!

11 / 33

slide-33
SLIDE 33

Summary

◮ Higher-order logic + guarded recursion useful for

specifying layered and recursive abstractions.

◮ Next: impredicative protocols for verifying module

implementations

12 / 33

slide-34
SLIDE 34

A Modular Lock Specification

Verifying a spinlock implementation

◮ Upon allocating a lock, we introduce a protocol to govern

the sharing of the lock and through the lock.

13 / 33

slide-35
SLIDE 35

A Modular Lock Specification

Verifying a spinlock implementation

◮ Upon allocating a lock, we introduce a protocol to govern

the sharing of the lock and through the lock.

◮ A lock can be in one of two abstract states:

Locked Unlocked

Unlock Lock

13 / 33

slide-36
SLIDE 36

A Modular Lock Specification

Verifying a spinlock implementation

◮ Upon allocating a lock, we introduce a protocol to govern

the sharing of the lock and through the lock.

◮ A lock can be in one of two abstract states:

Locked Unlocked

Unlock Lock

x.locked → 1

13 / 33

slide-37
SLIDE 37

A Modular Lock Specification

Verifying a spinlock implementation

◮ Upon allocating a lock, we introduce a protocol to govern

the sharing of the lock and through the lock.

◮ A lock can be in one of two abstract states:

Locked Unlocked

Unlock Lock

x.locked → 1 x.locked → 0 ∗ R ∗ ...

13 / 33

slide-38
SLIDE 38

A Modular Lock Specification

◮ Protocol expressed via invariant:

I(R) = (x.locked → 1) ∨ (x.locked → 0 ∗ R ∗ •)

14 / 33

slide-39
SLIDE 39

A Modular Lock Specification

◮ Protocol expressed via invariant:

I(R) = (x.locked → 1) ∨ (x.locked → 0 ∗ R ∗ •)

locked unlocked

14 / 33

slide-40
SLIDE 40

A Modular Lock Specification

◮ Protocol expressed via invariant:

I(R) = (x.locked → 1) ∨ (x.locked → 0 ∗ R ∗ •)

◮ Parameterized by R, any predicate, including one referring

to protocols, hence impredicative protocols.

locked unlocked

14 / 33

slide-41
SLIDE 41

A Modular Lock Specification

◮ Protocol expressed via invariant:

I(R) = (x.locked → 1) ∨ (x.locked → 0 ∗ R ∗ •)

◮ Parameterized by R, any predicate, including one referring

to protocols, hence impredicative protocols.

◮ Only the owner of the lock should be able to unlock:

◮ Expressed via monoid: the • is an element of a partial

commutative monoid (PCM), with one non-neutral element, which is not duplicable.

◮ Also uses standard PCM of heaps.

locked unlocked

14 / 33

slide-42
SLIDE 42

Summary

◮ Monoids to express protocols on shared state ◮ Invariants to enforce protocol governing shared state ◮ Protocol parametric in R: impredicative protocols.

15 / 33

slide-43
SLIDE 43

Fine-Grained Concurrent Data Structures

◮ Modular Bag Specification (excerpt)

∃bag : RId × Val → Prop. {emp} new Bag(−) {ret. ∃n : RId. bag(n, ret) ∗ retcont

0.5

→ ∅} ∀P, Q : Val × Val → Prop. ∀n : RId. ∀X : Pm(Val). ∀x, y : Val. xcont

0.5

→ X ∗ P(x, y) ⊑RId\{n} xcont

0.5

→ (X ∪ {y}) ∗ Q(x, y)) ⇒ {bag(n, x) ∗ P(x, y)} x.Push(y) {bag(n, x) ∗ Q(x, y)}

◮ Parameterization to allow clients to reason about what

should happen at linearization points (inspired by Jacobs and Piessens):

16 / 33

slide-44
SLIDE 44

Verification of Implementation using Helping

pending accepted ack’ed revoked

Accept Revoke Ack

◮ pending: an offer has been made and it is waiting for

somebody to accept it,

◮ accepted: the offer has been accepted, ◮ ack’ed: we have acknowledged that somebody has

accepted the offer,

◮ revoked: in case we revoke the offer (since no one

accepted it and now we will re-attempt to push).

17 / 33

slide-45
SLIDE 45

Interpretation of states

Ioffer(pending) = x.state → 0 ∗ P(b, y) ∗ ∀X : Pm(Val). ∀x, y : Val. xcont

0.5

→ X ∗ P(x, y) ⊑RId\{n} xcont

0.5

→ (X ∪ {y}) ∗ Q(x, y) Ioffer(accepted) = x.state → 1 ∗ Q(b, y) Ioffer(revoked) = x.state → 2 Ioffer(ack’ed) = x.state → 1

18 / 33

slide-46
SLIDE 46

Summary

◮ Key logical tools: impredicative protocols and view shifts.

(the depicted state transition system can be encoded using PCMs, as we indicated for locks earlier)

◮ iCap was the first logic to allow verification of such FCDs

against such general specs.

19 / 33

slide-47
SLIDE 47

Model Ideas

◮ Prop = W →mon P(M)

◮ M a PCM (a product of all the necessary monoids) ◮ W : worlds, keeping track of invariants 20 / 33

slide-48
SLIDE 48

Model Ideas

◮ Prop = W →mon P(M)

◮ M a PCM (a product of all the necessary monoids) ◮ W : worlds, keeping track of invariants

◮ W = N ⇀fin Prop

◮ names of invariants are natural numbers ◮ each invariant described by a predicate (recall I(R) for

the lock)

20 / 33

slide-49
SLIDE 49

Model Ideas

◮ Prop = W →mon P(M)

◮ M a PCM (a product of all the necessary monoids) ◮ W : worlds, keeping track of invariants

◮ W = N ⇀fin Prop

◮ names of invariants are natural numbers ◮ each invariant described by a predicate (recall I(R) for

the lock)

◮ So need something like

Prop ∼ = (N ⇀fin Prop) →mon P(M)

20 / 33

slide-50
SLIDE 50

Model Ideas

◮ Our approach: solve in model of guarded type theory:

Prop ∼ = ◮(N ⇀fin Prop) →mon P(M)

◮ iCAP: use topos of trees and construct model

synthetically

◮ Iris: more explicit using subcat U corresponding to

ultrametric spaces.

21 / 33

slide-51
SLIDE 51

Model in U

◮ Let U be category of complete bisected ultrametric

spaces and non-expansive maps.

◮ Equivalently described as complete ordered families of

equivalence relations and non-expansive maps (cofe).

◮ Use uniform predicates instead of just predicates:

UPred(M) = Nop →mon P↑(M) Two such are n-equal if they agree up to level n.

◮ Can model guarded predicates (the ⊲) by “shifting a

uniform predicate to the right”.

◮ Solve

Prop ∼ = ◮((N ⇀fin Prop) →mon

ne

UPred(M))

22 / 33

slide-52
SLIDE 52

Model in U

◮ Theorem U( , Prop) is a BI-hyperdoctrine, which also

◮ models guarded recursive predicates ◮ models invariants ◮ also models hoare triples and associated proof rules, but

  • mitted from presentation today

23 / 33

slide-53
SLIDE 53

Model in U

◮ Theorem U( , Prop) is a BI-hyperdoctrine, which also

◮ models guarded recursive predicates ◮ models invariants ◮ also models hoare triples and associated proof rules, but

  • mitted from presentation today

◮ Explicitly:

◮ Γ ⊢ φ : prop is interpreted as a non-expansive function

from [ [Γ] ] to Prop.

23 / 33

slide-54
SLIDE 54

[ [Γ ⊢ M =τ N] ]γw =

  • (n, r) | [

[Γ ⊢ M : τ] ]γ

n+1

= [ [Γ ⊢ N : τ] ]γ

  • [

[Γ ⊢ ⊤] ]γw = N × M [ [Γ ⊢ φ ∧ ψ] ]γw = [ [Γ ⊢ φ] ]γw ∩ [ [Γ ⊢ ψ] ]γw [ [Γ ⊢ ⊥] ]γw = ∅ [ [Γ ⊢ φ ∨ ψ] ]γw = [ [Γ ⊢ φ] ]γw ∪ [ [Γ ⊢ ψ] ]γw [ [Γ ⊢ φ = ⇒ ψ] ]γw = ∀w′ ≥ w, ∀n′ ≤ n, ∀r′ ≥ r, (n′, r′) ∈ [ [Γ ⊢ φ] ]γw′ ⇒ (n′, r′) ∈ [ [Γ ⊢ ψ] ]γw′ [ [Γ ⊢ ∀x : σ, φ] ]γw =

  • d∈[

[σ] ]

[ [Γ, x : σ ⊢ φ] ](γ,d)w [ [Γ ⊢ ∃x : σ, φ] ]γw =

  • d∈[

[σ] ]

[ [Γ, x : σ ⊢ φ] ](γ,d)w

24 / 33

slide-55
SLIDE 55

[ [Γ ⊢ ⊲φ] ]γw = {(0, r) | r ∈ M} ∪ {(n + 1, r) | (n, r) ∈ [ [Γ ⊢ φ] ]γw} [ [Γ ⊢ emp] ]γw = N × M [ [Γ ⊢ φ ⋆ ψ] ]γw = {(n, r) | ∃r1, r2, r = r1 · r2∧ (n, r1) ∈ [ [Γ ⊢ φ] ]γw ∧ (n, r2) ∈ [ [Γ ⊢ ψ] ]γw} [ [Γ ⊢ φ → ⋆ψ] ]γw = {(n, r) | ∀w ′ ≥ w, ∀n′ ≤ n, ∀r ′#r. (n′, r ′) ∈ [ [Γ ⊢ φ] ]γw ′ ∧ (n′, r · r ′) ∈ [ [Γ ⊢ ψ] ]γw ′}

25 / 33

slide-56
SLIDE 56

Recursively defined predicates

When p occurs under a ⊲ in φ, then [ [Γ ⊢ µp.φ : propτ] ]γ = fix(λx : [ [propτ] ]. [ [Γ, p : propτ ⊢ φ : propτ] ](γ,x)) Here fix yields the fixed point of the contractive function,

26 / 33

slide-57
SLIDE 57

Invariant predicates

[ [Γ ⊢ φ

K]

]γw = {(n, r) | w([ [Γ ⊢ K] ]γ)

n+1

= ι([ [Γ ⊢ φ] ]γ)}.

27 / 33

slide-58
SLIDE 58

Model in U

◮ Theorem U( , Prop) is a BI-hyperdoctrine, which also

◮ models guarded recursive predicates ◮ models invariants

◮ Key Observation (Iris):

◮ By choosing monoids appropriately, we can encode many

(all ?) kinds of protocols and ownership disciplines and derive rules for other concurrent separation logics

28 / 33

slide-59
SLIDE 59

Use of Interactive Theorem Proving

◮ Verify meta-theory (model construction and soundness of

all proof rules, relative to operational semantics of concrete programming language).

◮ Tool(s) for experimenting with larger program

verification.

◮ Support for higher-order quantification is important.

◮ Earlier work: Charge! (with Bengtson, Jensen,

Sieczkowski)

◮ For sequential OO language, logic without invariants. ◮ Shallow embedding of logic, Coq tactics to automate

part of the reasoning.

◮ Non-trivial to reason efficiently in embedded logic. 29 / 33

slide-60
SLIDE 60

Use of Interactive Theorem Proving

◮ ModuRes Coq Library [ITP-2015]

◮ Implementation of U and solutions to g.r. domain eqn’s. ◮ Draft tutorial material online (model of ML references) ◮ Used to verify meta-theory of Iris

◮ Ongoing and Future Work (with Krebbers, Jung, Dreyer,

Bengtson, . . . )

◮ New tool for concurrency reasoning based on

improvement of ModuRes Coq Library

◮ Hope to make use of progress by Malecha and Bengtson

  • n reflective tactics.

30 / 33

slide-61
SLIDE 61

To Learn More

◮ Elementary tutorial notes on categorical logic (including

above theorem)

◮ Papers:

◮ ModuRes Coq Library [ITP-2015] ◮ iCAP [ESOP-2014] ◮ Iris [POPL-215] ◮ Cover many other aspects, e.g. advanced FCDs, logical

atomicity (definable) as in TaDa.

◮ http://cs.au.dk/~birke/modures/

31 / 33

slide-62
SLIDE 62

More Ongoing and Future Work

◮ Defining logical relations in Iris (a la Plokin-Abadi for

System F), to prove relational properties, e.g.,

◮ security properties such as non-interference ◮ optimizations based on type and effect systems

◮ Liveness properties.

32 / 33

slide-63
SLIDE 63

Thank You

Acknowledgements

◮ Kasper Svendsen ◮ Aleˇ

s Bizjak

◮ Filip Sieczkowski ◮ Yannick Zakowski ◮ Derek Dreyer ◮ Aaron Turon ◮ Ralf Jung ◮ David Swasey

33 / 33