68
Logical Reasoning for Disjoint Permissions Xuan-Bach Le Aquinas Hobor ESOP 2018, Thessaloniki, Greece

Logical Reasoning for Disjoint Permissions

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Logical Reasoning for Disjoint Permissions

Logical Reasoning for Disjoint Permissions

Xuan-Bach Le Aquinas Hobor

ESOP 2018, Thessaloniki, Greece

Page 2: Logical Reasoning for Disjoint Permissions

This talk is about ...

Permission reasoning in Concurrent Separation Logic

Page 3: Logical Reasoning for Disjoint Permissions

3

Some notations

● Mapsto predicate

x

Page 4: Logical Reasoning for Disjoint Permissions

4

Some notations

● Mapsto predicate

● Fractional mapsto predicate

x

x

Page 5: Logical Reasoning for Disjoint Permissions

5

Some notations

● Mapsto predicate

● Fractional mapsto predicate

● Disjoint conjunction

x

x

Page 6: Logical Reasoning for Disjoint Permissions

6

Predicate multiplication

permission predicate

Page 7: Logical Reasoning for Disjoint Permissions

7

Ownership reasoning

class Example {

   BinaryTree t;

   void shareTree{

fork();

     readTree(t);

wait();

  deallocate(t);

   }

}

Page 8: Logical Reasoning for Disjoint Permissions

8

Ownership reasoning

class Example {

   BinaryTree t;

   void shareTree{

fork();

     readTree(t);

wait();

  deallocate(t);

   }

}

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 9: Logical Reasoning for Disjoint Permissions

9

Case study: Rational permissions

● Model:

● Examples:

● Combine permissions:

Page 10: Logical Reasoning for Disjoint Permissions

10

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 11: Logical Reasoning for Disjoint Permissions

11

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 12: Logical Reasoning for Disjoint Permissions

12

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 13: Logical Reasoning for Disjoint Permissions

13

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 14: Logical Reasoning for Disjoint Permissions

14

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 15: Logical Reasoning for Disjoint Permissions

15

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 16: Logical Reasoning for Disjoint Permissions

16

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 17: Logical Reasoning for Disjoint Permissions

17

Reasoning with rational permissions (expected result)

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 18: Logical Reasoning for Disjoint Permissions

18

Shortcomming of Rationals

Page 19: Logical Reasoning for Disjoint Permissions

19

Shortcomming of Rationals

Page 20: Logical Reasoning for Disjoint Permissions

20

Shortcomming of Rationals

The latter is always a tree possibly a DAG!

a

b

00

Page 21: Logical Reasoning for Disjoint Permissions

21

Diagnosis

● Without permissions

is not satisfiable

x v x v

Page 22: Logical Reasoning for Disjoint Permissions

22

Diagnosis

● Without permissions

● With permissions

is not satisfiable

is equivalent to

x v x v

x (v,1/2) x (v,1/2) x (v,1)

Page 23: Logical Reasoning for Disjoint Permissions

23

Diagnosis

● Without permissions

● With permissions

is not satisfiable

is equivalent to

x v x v

x (v,1/2) x (v,1/2) x (v,1)

Rational permissions fail to preserve the disjointness property of Separation Logic!

Page 24: Logical Reasoning for Disjoint Permissions

24

This talk

1. Disjoint permission model

2. Inference systems

3. Disjoint permission analysis

Page 25: Logical Reasoning for Disjoint Permissions

25

Disjoint permission model

partial addition

total multiplication

additive identity

multiplicative identity

Page 26: Logical Reasoning for Disjoint Permissions

26

Disjoint permission model

● Axioms from semiring:– Commutativity over addition

– Associativity over multiplication

– Right distributivity of multiplication over addition

– ...

● Disjointness axiom:

Page 27: Logical Reasoning for Disjoint Permissions

27

Disjoint permission model

● Axioms from semiring:– Commutativity over addition

– Associativity over multiplication

– Right distributivity of multiplication over addition

– ...

● Disjointness axiom:

Not true with rationals!

Page 28: Logical Reasoning for Disjoint Permissions

28

Enable efficient bi-abduction reasoning

● Complete a partial entailment

● With disjoint permissions

● Automatic tool ShareInfer

Page 29: Logical Reasoning for Disjoint Permissions

29

Enable efficient bi-abduction reasoning

● Complete a partial entailment

● With disjoint permissions

● Automatic tool ShareInfer

Page 30: Logical Reasoning for Disjoint Permissions

30

Enable efficient bi-abduction reasoning

● Complete a partial entailment

● With disjoint permissions

● Automatic tool ShareInfer

Page 31: Logical Reasoning for Disjoint Permissions

31

Roadmap

● Predicate multiplication with disjoint permissions

● Inference systems

● Disjoint permissions analysis

Page 32: Logical Reasoning for Disjoint Permissions

32

Overview of inference system● 10/13 rules are bidirectional

● Some rules don’t hold with rational permissions

Page 33: Logical Reasoning for Disjoint Permissions

33

A closer look

Initiate the sharing mechanism

DOTFULL

Page 34: Logical Reasoning for Disjoint Permissions

34

A closer look

Collapse nested permissions

DOTDOT

Page 35: Logical Reasoning for Disjoint Permissions

35

A closer look

Splitting permissions over predicate

precise(P): P cannot hold in 2 subheaps simultaneously

DOTPLUS

Page 36: Logical Reasoning for Disjoint Permissions

36

A closer look

Distribute permissions over predicates

uniform( ): all addresses have permission

DOTSTAR

Page 37: Logical Reasoning for Disjoint Permissions

37

Inductive Reasoning(honourable mention)

● Inference system for inductive reasoning

– 8 inference rules

– Induction over finiteness of fractional heap

– Can prove side conditions precise, uniform

– Implementation: ShareInfer tool

Page 38: Logical Reasoning for Disjoint Permissions

38

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

Page 39: Logical Reasoning for Disjoint Permissions

39

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

Page 40: Logical Reasoning for Disjoint Permissions

40

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

Page 41: Logical Reasoning for Disjoint Permissions

41

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

Page 42: Logical Reasoning for Disjoint Permissions

42

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

DotStar

Page 43: Logical Reasoning for Disjoint Permissions

43

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

DotStar

Page 44: Logical Reasoning for Disjoint Permissions

44

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

DotPlus

DotStar

Page 45: Logical Reasoning for Disjoint Permissions

45

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

DotPlus

DotFull

DotStar

Page 46: Logical Reasoning for Disjoint Permissions

46

Example

Parent process

fork()

readTree(t)

wait()

deallocate(t)

Child process

readTree(t)

wait()

DotFull

DotPlus

DotPlus

DotFull

DotStar

Page 47: Logical Reasoning for Disjoint Permissions

47

Soundness

● Prove over fractional heap model:

a1

... ...

an

Page 48: Logical Reasoning for Disjoint Permissions

48

Soundness

● Prove over fractional heap model:

a1

... ...

an

a1

... ...

an

a1

... ...

an

● Heap multiplication:

Page 49: Logical Reasoning for Disjoint Permissions

49

Soundness

● Prove over fractional heap model:

a1

... ...

an

a1

... ...

an

a1

... ...

an

● Heap multiplication:

● Predicate multiplication:

Page 50: Logical Reasoning for Disjoint Permissions

50

Soundness

disjoint permission axioms inference rules

Page 51: Logical Reasoning for Disjoint Permissions

51

Soundness

disjoint permission axioms inference rules

Example:

Associativity of

Page 52: Logical Reasoning for Disjoint Permissions

52

Roadmap

● Predicate multiplication with disjoint permissions

● Inference systems

● Disjoint permissions analysis

Page 53: Logical Reasoning for Disjoint Permissions

53

Inference rules force permission axioms

inference rules disjoint permission axioms

Page 54: Logical Reasoning for Disjoint Permissions

54

Inference rules force permission axioms

inference rules disjoint permission axioms

DOTFULL

Example:

Page 55: Logical Reasoning for Disjoint Permissions

55

Inference rules force permission axioms

inference rules disjoint permission axioms

Proof sketch: Let P be and .

By definition,

As , we also have Thus . QED

x

x

DOTFULL

Example:

Page 56: Logical Reasoning for Disjoint Permissions

56

Disjointness in a multiplicative setting

● Disjointness axiom (D)

● Left distributivity (LD)

● Right distributivity (RD)

Page 57: Logical Reasoning for Disjoint Permissions

57

Disjointness in a multiplicative setting

● Disjointness axiom (D)

● Left distributivity (LD)

● Right distributivity (RD)

D + LD + RD + other standard axioms Trivial models

Page 58: Logical Reasoning for Disjoint Permissions

58

Disjointness in a multiplicative setting

● Disjointness axiom (D)

● Left distributivity (LD)

● Right distributivity (RD)

D + LD + RD + other standard axioms Good models

Page 59: Logical Reasoning for Disjoint Permissions

59

Disjointness in a multiplicative setting

Multiplicative left inverse (LI):

Page 60: Logical Reasoning for Disjoint Permissions

60

Disjointness in a multiplicative setting

Multiplicative left inverse (LI):

D + (LD or RD) + LI + other axioms Trivial models

Page 61: Logical Reasoning for Disjoint Permissions

61

Disjointness in a multiplicative setting

Multiplicative left inverse (LI):

D + (LD or RD) + LI + other axioms Good models

Page 62: Logical Reasoning for Disjoint Permissions

62

Scaling separation algebra

Capture characteristics of fractional heaps

Heap components Permission components

Page 63: Logical Reasoning for Disjoint Permissions

63

Scaling separation algebra

Capture characteristics of fractional heaps

a1

a2

a1

a3

a1

a2

a3

Heap join:

Page 64: Logical Reasoning for Disjoint Permissions

64

Scaling separation algebra

Capture characteristics of fractional heaps

mul( , )

a1

... ...

an

a1

... ...

an

Heap mul:

Page 65: Logical Reasoning for Disjoint Permissions

65

Scaling separation algebra

Capture characteristics of fractional heaps

Heap force:

force( , )

a1

... ...

an

a1

... ...

an

Page 66: Logical Reasoning for Disjoint Permissions

66

Scaling separation algebra

14 axioms for scaling separation algebra

Axioms for fractional heaps

Page 67: Logical Reasoning for Disjoint Permissions

67

A graphical summary

Disjoint permission axioms

Inference rules for predicate multiplication

Scaling separationalgebra

Page 68: Logical Reasoning for Disjoint Permissions

68

Conclusion

● We proposed inference systems (with tool support) for predicate multiplication with disjoint permissions.

● Our soundness proof is verified in Coq using fractional heap model and Scaling Separation Algebra.

● We justified why certain properties of disjoint permissions cannot hold simultaneously.

● Future work: further investigation for permission algebra and Scaling Separation Algebra.

Thank you!