16
Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons Institute, Nov. 10, 2016

Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Functional Programmingover

Sets with Atoms

Bartek Klin, University of Warsaw(joint work with Michał Szynwelski)

Simons Institute, Nov. 10, 2016

Page 2: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Related talks here

2

M. Bojańczyk, Orbit-finite sets

A. Murawski, New results on register automata

J. Ochremiak, FO-definable CSPs

Page 3: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Programming with finite sets

3

type Set a = [a]

empty :: Set a

insert :: a -> Set a -> Set a

filter :: (a -> Bool) -> Set a -> Set a

map :: (a -> b) -> Set a -> Set b

sum :: Set (Set a) -> Set a

...

Haskell syntax used

Page 4: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Example: transitive closure

4

comp :: Set (a,b) -> Set (b,c) -> Set (a,c)comp s r = ...

transCl :: Set (a,a) -> Set (a,a)transCl r = let r1 = comp r r in if isSubsetOf r1 r then r else transCl (union r1 r)

> transCl [(1,2),(2,3)]

[(1,2),(2,3),(1,3)]

Page 5: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Other examples

5

1. Graph 2-colorability

twoColorable :: Set (a,a) -> Bool

- look for cycles of odd length

2. Graph 3-colorability

threeColorable :: Set (a,a) -> Bool

- generate all 3-partitions of vertices - for each of them, check legality

Page 6: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Sets with atoms

6

A - the set of atoms (think )A = (N,=)

A(2) = {(d, e) | d, e 2 A, d 6= e}✓A2

◆= {{d, e} | d, e 2 A, d 6= e}

R = {(5, 2)} ⇥ {(2, d) | d �= 5} ⇥ {(d, d)}

2

5

5

2

R2

5

5

2

R⇤

Page 7: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Sets with atoms

7

A graph:

- nodes: {(a, b) : a, b 2 A : a 6= b}- edges:

�{(a, b), (b, c)} : a, b, c 2 A

: a 6= b ^ b 6= c ^ a 6= c

cabe

db

ab

bc

cdde

ea

ad

ec

It is not 3-colorable.

How to program with these structures?

Page 8: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

NLambda: a Haskell library

8

type Set a = ...

empty :: Set a

insert :: a -> Set a -> Set a

map :: (a -> b) -> Set a -> Set b

sum :: Set (Set a) -> Set a

...

isEmpty :: Set a -> Formula

atoms :: Set Atom

type Atom

Page 9: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Example

9

> atoms{a : for a in A}

> map (\a -> map (\b -> (a,b)) atoms) atoms

{{(a,b) : for b in A} : for a in A}

> sum it{(a,b) : for a,b in A}

> filter (\(a,b) -> eq a b) it{(a,a) : for a in A}

> forAll (\a -> member a atoms) atomsTrue

Page 10: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

NLambda: a Haskell library

10

type Set a = [(a,[Var],Formula)]

empty :: Set a

insert :: a -> Set a -> Set a

map :: (a -> b) -> Set a -> Set b

sum :: Set (Set a) -> Set a

...

isEmpty :: Set a -> Formula

atoms :: Set Atom

type Atom

Page 11: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Semantics

11

- Orbit-finite sets internally representedby FO formulas and set-builder expressions

- Condition evaluation delayed when possible:

> ite (eq a b) (singleton c) atoms

{c : a=b, d : a!=b for d in A}

an SMT solver- Formulas evaluated by calling

> isEmpty atoms

False

Page 12: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Example: transitive closure

12

comp :: Set (a,b) -> Set (b,c) -> Set (a,c)comp s r = ...

transCl :: Set (a,a) -> Set (a,a)transCl r = let r1 = comp r r in ite (isSubsetOf r1 r) r (transCl (union r1 r))

The same code!*

*essentially

Page 13: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

Other examples

13

- Graph 2-colorability

twoColorable :: Set (a,a) -> Bool

Also the same code*

*essentially

- Angluin algorithm for automata learning

- interact with a teacher to learn an automaton

- Moerman, Sammartino, Silva, K., Szynwelski:Learning nominal automata, POPL’17

Page 14: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

3-colorability

14

threeColorable :: Set (a,a) -> Bool

- generate all 3-partitions of vertices ...

Cannot be done!

Different code:- if coloring exists then an equivariant one exists- generate 3-partitions of orbits ...supports :: NType a => [Atom] -> a -> Boolorbits :: NType a => Set a -> Set (Set a)...

Ordered atoms needed

Page 15: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

The easy, the hard & the impossible

15

Easy: code copied verbatim*

transCl :: Set (a,a) -> Set (a,a)

twoColorable :: Set (a,a) -> BoollearnAngluin :: ...

*essentially

Impossible: atom enumerationtoList :: Set a -> [a]foldl :: (b -> a -> b) -> b -> Set a -> b

threeColorable :: Set (a,a) -> Bool

Hard: supports, orbits etc. required

Page 16: Functional Programming over Sets with Atoms · 2020-01-03 · Functional Programming over Sets with Atoms Bartek Klin, University of Warsaw (joint work with Michał Szynwelski) Simons

Simons Inst., 11/10/2016

NLambda

16

Available at:

http://www.mimuw.edu.pl/~szynwelski/nlambda/

Ongoing work:

- closer integration with Haskell- LOIS: the same thing, but for C++

(Kopczyński, Toruńczyk: POPL’17)- understand the hard crowd