cduce, an xml-oriented programming language: from theory ...gc/slides/sblp07-slides.pdf · several...

605
logoP7 SBLP ’07 CDuce, an XML-Oriented Programming Language: From Theory to Practice Giuseppe Castagna CNRS Universit´ e Paris 7 - Denis Diderot Natal, 24th of May, 2007 G. Castagna: CDuce, an XML-Oriented Programming Language 1/107

Upload: others

Post on 09-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

CDuce, an XML-Oriented ProgrammingLanguage:

From Theory to Practice

Giuseppe Castagna

CNRSUniversite Paris 7 - Denis Diderot

Natal, 24th of May, 2007

G. Castagna: CDuce, an XML-Oriented Programming Language 1/107

Page 2: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Outline of the talk

1 XML Programming in CDuceXML Regular Expression Types and Patterns

XML Programming in CDuceNine good reasons to use Regular Expression types/patterns

Tools on top of CDuce

2 Theoretical Foundations

Semantic subtyping

Subtyping algorithms

CDuce functional core

Extension to other type constructors

3 Beyond XML.

Application of the theory to the π-calculus

New results on Milner’s encoding

G. Castagna: CDuce, an XML-Oriented Programming Language 2/107

Page 3: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Outline of the talk

1 XML Programming in CDuceXML Regular Expression Types and Patterns

XML Programming in CDuceNine good reasons to use Regular Expression types/patterns

Tools on top of CDuce

2 Theoretical Foundations

Semantic subtyping

Subtyping algorithms

CDuce functional core

Extension to other type constructors

3 Beyond XML.

Application of the theory to the π-calculus

New results on Milner’s encoding

G. Castagna: CDuce, an XML-Oriented Programming Language 2/107

Page 4: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Outline of the talk

1 XML Programming in CDuceXML Regular Expression Types and Patterns

XML Programming in CDuceNine good reasons to use Regular Expression types/patterns

Tools on top of CDuce

2 Theoretical Foundations

Semantic subtyping

Subtyping algorithms

CDuce functional core

Extension to other type constructors

3 Beyond XML.

Application of the theory to the π-calculus

New results on Milner’s encoding

G. Castagna: CDuce, an XML-Oriented Programming Language 2/107

Page 5: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Outline of the talk

1 XML Programming in CDuceXML Regular Expression Types and Patterns

XML Programming in CDuceNine good reasons to use Regular Expression types/patterns

Tools on top of CDuce

2 Theoretical Foundations

Semantic subtyping

Subtyping algorithms

CDuce functional core

Extension to other type constructors

3 Beyond XML.

Application of the theory to the π-calculus

New results on Milner’s encoding

G. Castagna: CDuce, an XML-Oriented Programming Language 2/107

Page 6: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

PART 1: XML PROGRAMMING INCDUCE

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 3/107

Page 7: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Programming with XML

Level 0: textual representation of XML documents

AWK, sed, Perl

Level 1: abstract view provided by a parser

SAX, DOM, . . .

Level 2: untyped XML-specific languages

XSLT, XPath

Level 3: XML types taken seriously (aka: related work)

XDuce, XtaticXQueryCω (Microsoft). . .

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 4/107

Page 8: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Programming with XML

Level 0: textual representation of XML documents

AWK, sed, Perl

Level 1: abstract view provided by a parser

SAX, DOM, . . .

Level 2: untyped XML-specific languages

XSLT, XPath

Level 3: XML types taken seriously (aka: related work)

XDuce, XtaticXQueryCω (Microsoft). . .

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 4/107

Page 9: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Programming with XML

Level 0: textual representation of XML documents

AWK, sed, Perl

Level 1: abstract view provided by a parser

SAX, DOM, . . .

Level 2: untyped XML-specific languages

XSLT, XPath

Level 3: XML types taken seriously (aka: related work)

XDuce, XtaticXQueryCω (Microsoft). . .

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 4/107

Page 10: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Programming with XML

Level 0: textual representation of XML documents

AWK, sed, Perl

Level 1: abstract view provided by a parser

SAX, DOM, . . .

Level 2: untyped XML-specific languages

XSLT, XPath

Level 3: XML types taken seriously (aka: related work)

XDuce, XtaticXQueryCω (Microsoft). . .

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 4/107

Page 11: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Programming with XML

Level 0: textual representation of XML documents

AWK, sed, Perl

Level 1: abstract view provided by a parser

SAX, DOM, . . .

Level 2: untyped XML-specific languages

XSLT, XPath

Level 3: XML types taken seriously (aka: related work)

XDuce, XtaticXQueryCω (Microsoft). . .

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 4/107

Page 12: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Presentation of CDuceFeatures:

Oriented to XML processingType centricGeneral-purpose featuresVery efficient

Inteded use:Small “adapters” between different XML applicationsLarger applications that use XMLWeb developmentWeb services

Status:Public release available (0.4.1): documentation and tutorials.

Integration with standardsInternally: Unicode, XML, Namespaces, XML SchemaExternally: DTD, WSDL

Several tools: graphical queries, code embedding (a la php)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 5/107

Page 13: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Presentation of CDuceFeatures:

Oriented to XML processingType centricGeneral-purpose featuresVery efficient

Inteded use:Small “adapters” between different XML applicationsLarger applications that use XMLWeb developmentWeb services

Status:Public release available (0.4.1): documentation and tutorials.

Integration with standardsInternally: Unicode, XML, Namespaces, XML SchemaExternally: DTD, WSDL

Several tools: graphical queries, code embedding (a la php)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 5/107

Page 14: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Presentation of CDuceFeatures:

Oriented to XML processingType centricGeneral-purpose featuresVery efficient

Inteded use:Small “adapters” between different XML applicationsLarger applications that use XMLWeb developmentWeb services

Status:Public release available (0.4.1): documentation and tutorials.

Integration with standardsInternally: Unicode, XML, Namespaces, XML SchemaExternally: DTD, WSDL

Several tools: graphical queries, code embedding (a la php)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 5/107

Page 15: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Presentation of CDuceFeatures:

Oriented to XML processingType centricGeneral-purpose featuresVery efficient

Inteded use:Small “adapters” between different XML applicationsLarger applications that use XMLWeb developmentWeb services

Status:Public release available (0.4.1): documentation and tutorials.

Integration with standardsInternally: Unicode, XML, Namespaces, XML SchemaExternally: DTD, WSDL

Several tools: graphical queries, code embedding (a la php)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 5/107

Page 16: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Presentation of CDuceFeatures:

Oriented to XML processingType centricGeneral-purpose featuresVery efficient

Inteded use:Small “adapters” between different XML applicationsLarger applications that use XMLWeb developmentWeb services

Status:Public release available (0.4.1): documentation and tutorials.

Integration with standardsInternally: Unicode, XML, Namespaces, XML SchemaExternally: DTD, WSDL

Several tools: graphical queries, code embedding (a la php)

Used both for teaching and in production code.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 5/107

Page 17: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types, Types, Types!!!

Types are pervasive in CDuce:Static validation

E.g.: does the transformation produce valid XHTML ?

Type-driven programming semanticsAt the basis of the definition of patternsDynamic dispatchOverloaded functions

Type-driven compilationOptimizations made possible by static typesAvoids unnecessary and redundant tests at runtimeAllows a more declarative style

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 6/107

Page 18: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types, Types, Types!!!

Types are pervasive in CDuce:Static validation

E.g.: does the transformation produce valid XHTML ?

Type-driven programming semanticsAt the basis of the definition of patternsDynamic dispatchOverloaded functions

Type-driven compilationOptimizations made possible by static typesAvoids unnecessary and redundant tests at runtimeAllows a more declarative style

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 6/107

Page 19: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types, Types, Types!!!

Types are pervasive in CDuce:Static validation

E.g.: does the transformation produce valid XHTML ?

Type-driven programming semanticsAt the basis of the definition of patternsDynamic dispatchOverloaded functions

Type-driven compilationOptimizations made possible by static typesAvoids unnecessary and redundant tests at runtimeAllows a more declarative style

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 6/107

Page 20: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types, Types, Types!!!

Types are pervasive in CDuce:Static validation

E.g.: does the transformation produce valid XHTML ?

Type-driven programming semanticsAt the basis of the definition of patternsDynamic dispatchOverloaded functions

Type-driven compilationOptimizations made possible by static typesAvoids unnecessary and redundant tests at runtimeAllows a more declarative style

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 6/107

Page 21: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Regular ExpressionTypes and Patterns for XML

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 7/107

Page 22: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types & patterns: the functional languages perspective

Types are sets of values

Values are decomposed by patterns

Patterns are roughly values with capture variables

Instead of

let x = fst(e) inlet y = snd(e) in (y,x)

with pattern one can write

let (x,y) = e in (y,x)

which syntactic sugar for

match e with (x,y) -> (y,x)

“match” is more interesting than “let”, since it can testseveral “|||”-separated patterns.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 8/107

Page 23: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types & patterns: the functional languages perspective

Types are sets of values

Values are decomposed by patterns

Patterns are roughly values with capture variables

Instead of

let x = fst(e) inlet y = snd(e) in (y,x)

with pattern one can write

let (x,y) = e in (y,x)

which syntactic sugar for

match e with (x,y) -> (y,x)

“match” is more interesting than “let”, since it can testseveral “|||”-separated patterns.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 8/107

Page 24: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types & patterns: the functional languages perspective

Types are sets of values

Values are decomposed by patterns

Patterns are roughly values with capture variables

Instead of

let x = fst(e) inlet y = snd(e) in (y,x)

with pattern one can write

let (x,y) = e in (y,x)

which syntactic sugar for

match e with (x,y) -> (y,x)

“match” is more interesting than “let”, since it can testseveral “|||”-separated patterns.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 8/107

Page 25: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types & patterns: the functional languages perspective

Types are sets of values

Values are decomposed by patterns

Patterns are roughly values with capture variables

Instead of

let x = fst(e) inlet y = snd(e) in (y,x)

with pattern one can write

let (x,y) = e in (y,x)

which syntactic sugar for

match e with (x,y) -> (y,x)

“match” is more interesting than “let”, since it can testseveral “|||”-separated patterns.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 8/107

Page 26: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Types & patterns: the functional languages perspective

Types are sets of values

Values are decomposed by patterns

Patterns are roughly values with capture variables

Instead of

let x = fst(e) inlet y = snd(e) in (y,x)

with pattern one can write

let (x,y) = e in (y,x)

which syntactic sugar for

match e with (x,y) -> (y,x)

“match” is more interesting than “let”, since it can testseveral “|||”-separated patterns.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 8/107

Page 27: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 28: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 29: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 30: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 31: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , nnn) -> n| (( ,ttt), nnn) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 32: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 33: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil‘nil‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 34: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 35: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 36: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List)(Any,List)(Any,List) | ‘nil

fun length (x:(List,Int)(List,Int)(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 37: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 38: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil‘nil‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 39: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 40: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (AnyAnyAny,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 41: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Key idea behind regular patterns

Patterns are types with capture variables

Define types: patterns come for free.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 42: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Key idea behind regular patterns

Patterns are types with capture variables

Define types: patterns come for free.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 43: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Example: tail-recursive version of length for lists:

type List = (Any,List) | ‘nil

fun length (x:(List,Int)) : Int =match x with| (‘nil , n) -> n| (( ,t), n) -> length(t,n+1)

So patterns are values with capture variables, wildcards, constants.

But if we:

1 use for types the same constructors as for values(e.g. (s,t) instead of s × t)

2 use values to denote singleton types(e.g. ‘nil in the list type);

3 consider the wildcard “ ” as synonym of Any

Key idea behind regular patterns

Patterns are types with capture variables

Define types: patterns come for free.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 9/107

Page 44: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

Patterns are tightly connected to boolean type constructors,that is unions (|), intersections (&) and differences (\):

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 45: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

Patterns are tightly connected to boolean type constructors,that is unions (|), intersections (&) and differences (\):

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 46: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

Patterns are tightly connected to boolean type constructors,that is unions (|), intersections (&) and differences (\):

type List = (Any,List) ||| ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 47: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

Patterns are tightly connected to boolean type constructors,that is unions (|), intersections (&) and differences (\):

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

To type this function we need basic types products, singletons,. . .

t ::= Int | v | (t, t) |

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 48: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

Patterns are tightly connected to boolean type constructors,that is unions (|), intersections (&) and differences (\):

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

To type this function we need basic types products, singletons,. . .

t ::= Int | v | (t, t) | t|t | t&t | t\t | Empty | Any

but also boolean type constructors.Let us type the function.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 49: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

To type this function we need basic types products, singletons,. . .

t ::= Int | v | (t, t) | t|t | t&t | t\t | Empty | Any

but also boolean type constructors.Let us type the function.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 50: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 51: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 52: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The first branch is executed only for values and are both in(List,Int) and in ***(‘nil,n) +++ = (‘nil,Any)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 53: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The first branch is executed only for values and are both in(List,Int) and in ***(‘nil,n) +++ = (‘nil,Any)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 54: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The first branch is executed only for values and are both in(List,Int) and in ***(‘nil,n) +++ = (‘nil,Any)

(List,Int) & (‘nil,Any) = (‘nil,Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 55: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The first branch is executed only for values and are both in(List,Int) and in ***(‘nil,n) +++ = (‘nil,Any)

(List,Int) & (‘nil,Any) = (‘nil,Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 56: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The first branch is executed only for values and are both in(List,Int) and in ***(‘nil,n) +++ = (‘nil,Any)

(List,Int) & (‘nil,Any) = (‘nil,Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 57: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The second branch is executed for values that are in(List,Int) not in ***(‘nil,n)+++ and in ***(( ,t),n)+++

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 58: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The second branch is executed for values that are in(List,Int) not in ***(‘nil,n)+++ and in ***(( ,t),n)+++

((List,Int)\ (‘nil,Any))&((Any,Any),Any) = ((Any,List),Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 59: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The second branch is executed for values that are in(List,Int) not in ***(‘nil,n)+++ and in ***(( ,t),n)+++

((List,Int)\ (‘nil,Any))&((Any,Any),Any) = ((Any,List),Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 60: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The second branch is executed for values that are in(List,Int) not in ***(‘nil,n)+++ and in ***(( ,t),n)+++

((List,Int)\ (‘nil,Any))&((Any,Any),Any) = ((Any,List),Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 61: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The match expression has type the union of the possible results

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 62: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The match expression has type the union of the possible results

Int | Int = Int

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 63: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The match expression has type the union of the possible results

Int | Int = Int

The function is well-typed

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 64: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Which types should we start from?

t = v | v value of type t and ***p+++ = v | v matches pattern p(this is a type)

type List = (Any,List) | ‘nil|||

fun length (x :(List,Int)) : Int =match x with| (‘nil , n) -> n Int| (( ,t), n) -> length(t,n+1) Int

The match expression has type the union of the possible results

Int | Int = Int

The function is well-typed

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 10/107

Page 65: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 66: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 67: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 68: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 69: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t&&& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \\\ *** p1+++)&&& *** p2+++;- The type of the match is t1|||t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 70: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 71: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 72: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 73: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car &&& (Guaranteed |||(Any\\\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 74: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 75: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) &&& (Int,Int->Int)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 76: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Roadmap to extend it to XML:

1 Define types for XML documents,2 Add boolean type constructors,3 Define patterns as types with capture variables

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 77: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Roadmap to extend it to XML:

1 Define types for XML documents,2 Add boolean type constructors,3 Define patterns as types with capture variables

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 78: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Roadmap to extend it to XML:

1 Define types for XML documents,2 Add boolean type constructors,3 Define patterns as types with capture variables

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 79: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Unions, intersections, differences

Boolean operators are needed to type pattern matching:match e with p1 -> e1 | p2 -> e2

- To infer the type t1 of e1 we need t& *** p1+++ (where e : t);

- To infer the type t2 of e2 we need (t \ *** p1+++)& *** p2+++;- The type of the match is t1|t2 .

Boolean type constructors are useful for programming:

map catalogue withx :: (Car & (Guaranteed |(Any\Used)) -> x

Select in catalogue all cars that if used then are guaranteed.

Intersection types yield overloaded functions:+ : (String,String->String) & (Int,Int->Int)

Roadmap to extend it to XML:

1 Define types for XML documents,2 Add boolean type constructors,3 Define patterns as types with capture variables

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 11/107

Page 80: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book Book]<book year="1997"><title>[’Object-Oriented Programming’]</title><author><last>[’Castagna’]</last><first>[’Giuseppe’]</first>

</author>]<price>[’56’]</price>’Bikhauser’

</book>]<book year="2007"><title>[’SBLP Proceedings’]</title><editor><last>[’Bigonha’]</last><first>[’Roberto’]</first>

</editor>]’SBC’

</book>]</bib>]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 81: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book Book]<book year="1997">[<title>[’Object-Oriented Programming’]<author>[<last>[’Castagna’]<first>[’Giuseppe’]

]<price>[’56’]’Bikhauser’

]<book year="2007">[<title>[’SBLP Proceedings’]<editor><last>[’Bigonha’]<first>[’Roberto’]

]’SBC’

]]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 82: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book Book]<book year="1997">[<title>[’Object-Oriented Programming’]<author>[<last>[’Castagna’]<first>[’Giuseppe’]

]<price>[’56’]’Bikhauser’

]<book year="2007">[<title>[’SBLP Proceedings’]<editor><last>[’Bigonha’]<first>[’Roberto’]

]’SBC’

]]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 83: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book Book] String = [PCDATA] = [Char*]<book year=String>[<title><author>[<last>[PCDATA]<first>[PCDATA]

]<price>[PCDATA]PCDATA

]<book year=String>[<title>[PCDATA]<editor><last>[PCDATA]<first>[PCDATA]

]PCDATA

]]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 84: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book Book]type Book = <book year=String>[

Title(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 85: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 86: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 87: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*] Kleene startype Book = <book year=String>[

Title(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 88: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[ attribute types

Title(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 89: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title nested elements(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 90: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title(Author+ | Editor+) unionsPrice?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 91: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title(Author+ | Editor+)Price? optional elemsPCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 92: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title(Author+ | Editor+)Price?PCDATA] mixed content

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 93: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML syntax

type Bib = <bib>[Book*]type Book = <book year=String>[

Title(Author+ | Editor+)Price?PCDATA]

type Author = <author>[Last First]type Editor = <editor>[Last First]type Title = <title>[PCDATA]type Last = <last>[PCDATA]type First = <first>[PCDATA]type Price = <price>[PCDATA]

This and: singletons, intersections, differences, Empty, and Any.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 12/107

Page 94: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

TY

PES

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 95: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 96: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[x::Book*] -> x

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 97: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[x::Book*] -> x

The pattern binds x to the sequence of all books in the bibliographyPAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 98: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[x::Book*] -> x

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 99: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[x::Book*] -> x

Returns the content of bibs.PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 100: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[( x::<book year="2005"> | y:: )*] -> x@y

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 101: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[( x::<book year="2005"> | y:: )*] -> x@y

Binds x to the sequence of all this year’s books, and y to all theother books.

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 102: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[( x::<book year="2005"> | y:: )*] -> x@y

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 103: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[( x::<book year="2005"> | y:: )*] -> x@y

Returns the concatenation (i.e., “@”) of the two captured sequencesPAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 104: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[(x::<book year="1990">[ * Publisher\"ACM"] | )*] -> x

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 105: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[(x::<book year="1990">[ * Publisher\"ACM"] | )*] -> x

Binds x to the sequence of books published in 1990 from publishersothers than “ACM” and discards all the others.

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 106: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[(x::<book year="1990">[ * Publisher\"ACM"] | )*] -> x

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 107: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[(x::<book year="1990">[ * Publisher\"ACM"] | )*] -> x

Returns all the captured booksPAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 108: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[(x::<book year="1990">[ * Publisher\"ACM"] | )*] -> x

Returns all the captured books

Exact type inference:

E.g.: if we match the pattern [(x::Int| )*] against an expressionof type [Int* String Int] the type deduced for x is [Int+]

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 109: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Patterns

Patterns = Types + Capture variables

type Bib = <bib>[Book*]type Book = <book year=String>[Title Author+ Publisher]type Publisher = StringT

YPES

match bibs with<bib>[(x::<book year="1990">[ * Publisher\"ACM"] | )*] -> x

Returns all the captured books

Exact type inference:

E.g.: if we match the pattern [(x::Int| )***] against an expressionof type [Int* String Int] the type deduced for x is [Int+++]

PAT

TERN

S

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 13/107

Page 110: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XML-programming in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 14/107

Page 111: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: basic usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Extract subsequences (union polymorphism)

fun (Invited|Talk -> [Author+])< >[ Title x::Author* ] -> x

Extract subsequences of non-consecutive elements:

fun ([(Invited|Talk|Event)*] -> ([Invited*], [Talk*]))[ (i::Invited | t::Talk | )* ] -> (i,t)

Perl-like string processing (String = [Char*])

fun parse email (String -> (String,String))| [ local:: * ’@’ domain:: * ] -> (local,domain)| -> raise "Invalid email address"

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 15/107

Page 112: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: basic usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Extract subsequences (union polymorphism)

fun (Invited|Talk -> [Author+])< >[ Title x::Author* ] -> x

Extract subsequences of non-consecutive elements:

fun ([(Invited|Talk|Event)*] -> ([Invited*], [Talk*]))[ (i::Invited | t::Talk | )* ] -> (i,t)

Perl-like string processing (String = [Char*])

fun parse email (String -> (String,String))| [ local:: * ’@’ domain:: * ] -> (local,domain)| -> raise "Invalid email address"

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 15/107

Page 113: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: basic usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Extract subsequences (union polymorphism)

fun (Invited|Talk -> [Author+])< >[ Title x::Author* ] -> x

Extract subsequences of non-consecutive elements:

fun ([(Invited|Talk|Event)*] -> ([Invited*], [Talk*]))[ (i::Invited | t::Talk | )* ] -> (i,t)

Perl-like string processing (String = [Char*])

fun parse email (String -> (String,String))| [ local:: * ’@’ domain:: * ] -> (local,domain)| -> raise "Invalid email address"

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 15/107

Page 114: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: basic usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Extract subsequences (union polymorphism)

fun (Invited|Talk -> [Author+])< >[ Title x::Author* ] -> x

Extract subsequences of non-consecutive elements:

fun ([(Invited|Talk|Event)*] -> ([Invited*], [Talk*]))[ (i::Invited | t::Talk | )* ] -> (i,t)

Perl-like string processing (String = [Char*])

fun parse email (String -> (String,String))| [ local:: * ’@’ domain:: * ] -> (local,domain)| -> raise "Invalid email address"

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 15/107

Page 115: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 116: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 117: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 118: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 119: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 120: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 121: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 122: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 123: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Functions: advanced usage

type Program = <program>[ Day* ]type Day = <day date=String>[ Invited? Talk+ ]type Invited = <invited>[ Title Author+ ]type Talk = <talk>[ Title Author+ ]

Functions can be higher-order and overloaded

let patch program(p :[Program], f :(Invited -> Invited) &&& (Talk -> Talk)):[Program]

= xtransform p with (Invited | Talk) & x -> [ (f x) ]

Higher-order, overloading, subtyping provide name/code sharing...

let first author ([Program] -> [Program];Invited -> Invited;Talk -> Talk)

| [ Program ] & p -> patch program (p,first author)| <invited>[ t a * ] -> <invited>[ t a ]| <talk>[ t a * ] -> <talk>[ t a ]

Even more compact: replace the last two branches with:

<(k)>[ t a * ] -> <(k)>[ t a ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 16/107

Page 124: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Query language: CQL

Instead of just variablesselect e from

x1 in e1 p1...

xn in en pn

where c

Biblio = <bib>[Book*]Book = <book year=String>[Title (Author+|Editor+) Price?]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 17/107

Page 125: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Query language: CQL

Instead of just variables use patternsselect e from

p1 in e1...

pn in en

where c

Biblio = <bib>[Book*]Book = <book year=String>[Title (Author+|Editor+) Price?]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 17/107

Page 126: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Query language: CQL

Instead of just variables use patternsselect e from

p1 in e1...

pn in en

where c

fun getTitles(bibs : Biblio) : [(<book>[Title])*]

<bib>[b::Book*]<book year="1990">[ t::Title + <price>"69.99" ]in b

(1) captures in b all the books of a bibliography(2) captures in t the title of a book if it is of 1990 and costs 69.99

Biblio = <bib>[Book*]Book = <book year=String>[Title (Author+|Editor+) Price?]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 17/107

Page 127: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Query language: CQL

Instead of just variables use patternsselect e from

p1 in e1...

pn in en

where c

fun getTitles(bibs : Biblio) : [(<book>[Title])*]select <book>t from<bib>[b::Book*] in bibs,<book year="1990">[ t::Title + <price>"69.99" ] in b

Selects from bibs the titles of all books of 1990 and of price 69.99and has type Biblio->[(<book>[Title])*]

Biblio = <bib>[Book*]Book = <book year=String>[Title (Author+|Editor+) Price?]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 17/107

Page 128: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Query language: CQL

Instead of just variables use patternsselect e from

p1 in e1...

pn in en

where c

fun getTitles(bibs : Biblio) : [(<book>[Title])*]select <book>t from<bib>[b::Book*] in bibs,<book year="1990">[ t::Title + <price>"69.99" ] in b

Selects from bibs the titles of all books of 1990 and of price 69.99and has type Biblio->[(<book>[Title])*]

Biblio = <bib>[Book*]Book = <book year=String>[Title (Author+|Editor+) Price?]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 17/107

Page 129: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Query language: CQL

Instead of just variables use patternsselect e from

p1 in e1...

pn in en

where c

fun getTitles(bibs : Biblio) : [(<book>[Title])*]select <book>t from<bib>[b::Book*] in bibs,<book year="1990">[ t::Title + <price>"69.99" ] in b

Selects from bibs the titles of all books of 1990 and of price 69.99and has type Biblio -> [(<book>[Title])*]

Biblio = <bib>[Book*]Book = <book year=String>[Title (Author+|Editor+) Price?]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 17/107

Page 130: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XPath encoding

For instance in CQL (. . . but see Xtatic for a very different encoding):

All children of e with tag tag (e/tag )

select x from < ..>[( x::(<tag ..> )| )*] in e

All attributes labelled by id (e/@id )

select x from < id =x ..> in e

Notice that regexp patterns can define non-unary queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 18/107

Page 131: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XPath encoding

For instance in CQL (. . . but see Xtatic for a very different encoding):

All children of e with tag tag (e/tag )

select x from < ..>[( x::(<tag ..> )| )*] in e

All attributes labelled by id (e/@id )

select x from < id =x ..> in e

Notice that regexp patterns can define non-unary queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 18/107

Page 132: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XPath encoding

For instance in CQL (. . . but see Xtatic for a very different encoding):

All children of e with tag tag (e/tag )

select x from < ..>[( x::(<tag ..> )| )*] in e

All attributes labelled by id (e/@id )

select x from < id =x ..> in e

Notice that regexp patterns can define non-unary queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 18/107

Page 133: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XPath encoding

For instance in CQL (. . . but see Xtatic for a very different encoding):

All children of e with tag tag (e/tag )

select x from < ..>[( x::(<tag ..> )| )*] in e

All attributes labelled by id (e/@id )

select x from < id =x ..> in e

Notice that regexp patterns can define non-unary queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 18/107

Page 134: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

XPath encoding

For instance in CQL (. . . but see Xtatic for a very different encoding):

All children of e with tag tag (e/tag )

select x from < ..>[( x::(<tag ..> )| )*] in e

All attributes labelled by id (e/@id )

select x from < id =x ..> in e

Notice that regexp patterns can define non-unary queries.

Rationale

CQL, Xtatic, add syntactic sugar for XPath . . .

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 18/107

Page 135: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

. . . it is all syntactic sugar!

Types

t ::= Int | v | (t, t) | t→→→t | t ∨ t | t ∧ t | ¬t | Any

Patterns

p ::= t | x | (p, p) | p ∨ p | p ∧ p

Example:

type Book = <book>[Title (Author+|Editor+) Price?]

encoded as

Book = (‘book, (Title,X ∨ Y ))X = (Author,X ∨ (Price, ‘nil) ∨ ‘nil)Y = (Editor,Y ∨ (Price, ‘nil) ∨ ‘nil)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 19/107

Page 136: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

. . . it is all syntactic sugar!

Types

t ::= Int | v | (t, t) | t→→→t | t ∨ t | t ∧ t | ¬t | Any

Patterns

p ::= t | x | (p, p) | p ∨ p | p ∧ p

Example:

type Book = <book>[Title (Author+|Editor+) Price?]

encoded as

Book = (‘book, (Title,X ∨ Y ))X = (Author,X ∨ (Price, ‘nil) ∨ ‘nil)Y = (Editor,Y ∨ (Price, ‘nil) ∨ ‘nil)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 19/107

Page 137: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

. . . it is all syntactic sugar!

Types

t ::= Int | v | (t, t) | t→→→t | t ∨ t | t ∧ t | ¬t | Any

Patterns

p ::= t | x | (p, p) | p ∨ p | p ∧ p

Example:

type Book = <book>[Title (Author+|Editor+) Price?]

encoded as

Book = (‘book, (Title,X ∨ Y ))X = (Author,X ∨ (Price, ‘nil) ∨ ‘nil)Y = (Editor,Y ∨ (Price, ‘nil) ∨ ‘nil)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 19/107

Page 138: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

. . . it is all syntactic sugar!

Types

t ::= Int | v | (t, t) | t→→→t | t ∨ t | t ∧ t | ¬t | Any

Patterns

p ::= t | x | (p, p) | p ∨ p | p ∧ p

Example:

type Book = <book>[Title (Author+|Editor+) Price?]

encoded as

Book = (‘book, (Title,X ∨ Y ))X = (Author,X ∨ (Price, ‘nil) ∨ ‘nil)Y = (Editor,Y ∨ (Price, ‘nil) ∨ ‘nil)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 19/107

Page 139: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Some reasons to consider regularexpression types and patterns

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 20/107

Page 140: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Some good reasons to consider regexp patterns/types

Theoretical reason: very compact

Nine practical reasons:

1 Classic usage2 Informative error messages3 Error mining4 Efficient execution5 Compact programs6 Logical optimisation of pattern-based queries7 Pattern matches as building blocks for iterators8 Type/pattern-based data pruning for memory usage optimisation9 Type-based query optimisation

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 21/107

Page 141: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Some good reasons to consider regexp patterns/types

Theoretical reason: very compact (6= simple)

Nine practical reasons:

1 Classic usage2 Informative error messages3 Error mining4 Efficient execution5 Compact programs6 Logical optimisation of pattern-based queries7 Pattern matches as building blocks for iterators8 Type/pattern-based data pruning for memory usage optimisation9 Type-based query optimisation

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 21/107

Page 142: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Some good reasons to consider regexp patterns/types

Theoretical reason: very compact (6= simple)

Nine practical reasons:

1 Classic usage2 Informative error messages3 Error mining4 Efficient execution5 Compact programs6 Logical optimisation of pattern-based queries7 Pattern matches as building blocks for iterators8 Type/pattern-based data pruning for memory usage optimisation9 Type-based query optimisation

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 21/107

Page 143: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Some good reasons to consider regexp patterns/types

Theoretical reason: very compact (6= simple)

Nine practical reasons:

1 Classic usage2 Informative error messages3 Error mining4 Efficient execution5 Compact programs6 Logical optimisation of pattern-based queries7 Pattern matches as building blocks for iterators8 Type/pattern-based data pruning for memory usage optimisation9 Type-based query optimisation

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 21/107

Page 144: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 145: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 146: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 147: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 148: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 149: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 150: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 151: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

1. Classic usages of types

Not much to say here, just notice that:

Singletons, unions, intersections, and differences have set-theoreticsemantics on “types as set of values”: they are easy to understand.

A natural and powerful specification and constraint language:

It is possible to specify constraints such as:If the attribute a has value x, then e-elements that donot contain f-elements must contain two g-elements.

Types can be composed:type WithPrice = < ..>[ * Price *]type ThisYear = < year="2005">

then <bib>[((Biblio&ThisYear)\WithPrice)*] defines a viewcontaining only this year’s books that do not have price element.

Not very innovative but useful properties

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 22/107

Use these types as usual: static detection of errors, partialcorrectness, schema specification

Page 152: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

In case of error return a sample value in the difference of theinferred type and the expected one

Page 153: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

In case of error return a sample value in the difference of theinferred type and the expected one

Page 154: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[(t::Title | a::Author | )+] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 155: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[(t::Title | a::Author | )+] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 156: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[(t::Title | a::Author | )+] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 157: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[(t::Title | a::Author | )+] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 158: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[(t::Title | a::Author | )+] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 159: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[(t::Title | a::Author | )+] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 160: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

2. Informative error messages

List of books of a given year, stripped of the Editors and Price

fun onlyAuthors (year:Int,books:[Book*]):[Book*] =select <book year=y>(t@a) from<book year=y>[ t::Title a::Author+++ * ] in books

where int of(y) = year

Returns the following error message:Error at chars 81-83:

select <book year=y>(t@a) fromThis expression should have type:[ Title (Editor+|Author+) Price? ]but its inferred type is:[ Title Author+ | Title ]which is not a subtype, as shown by the sample:

[ <title>[ ] ]

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 23/107

type Book = <book year=String>[Title (Author+|Editor+) Price?]

In case of error return a sample value in the difference of theinferred type and the expected one

Page 161: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining

type Person = <person>[ Name Children ]type Children = <children>[Person+]type Name = <name>[PCDATA]

Warning at chars 57-76:type Children = <children>[Person+]This definition yields an empty type for ChildrenWarning at chars 14-39:type Person = <person>[ Name Children ]This definition yields an empty type for Person

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 24/107

Detection of Empty Types

Page 162: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining

type Person = <person>[ Name Children ]type Children = <children>[Person+]type Name = <name>[PCDATA]

Warning at chars 57-76:type Children = <children>[Person+]This definition yields an empty type for ChildrenWarning at chars 14-39:type Person = <person>[ Name Children ]This definition yields an empty type for Person

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 24/107

Detection of Empty Types

Page 163: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 164: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 165: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 166: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 167: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 168: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 169: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 170: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

3. Error mining (continued)

fun extract(x:[Book*]) =select (z,y) from<book ..>[ z::Title y::(<author> |<edtor> )+ * ] in x

Despite the typo the function is well-typed:- no typing rule is violated- the pattern is not useless, it can match authors

They are not regexp-patterns specific:bibs/book/(title|prize)

Such errors are not always typos: they can be conceptual errors.

Can be formally characterised and statically detected by thetypes/patterns presented here and integrated in current reg-exp type-checkers with no overhead

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 25/107

Spot subtle errors that elude current type checking technology

Page 171: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 172: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 173: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 174: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 175: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 176: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 177: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 178: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 179: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 180: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 181: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 182: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 183: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Very hard to program it in XSLT

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 184: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

4. Compact programs

type Person = FPerson | MPerson;;type FPerson = <person gender ="F">[ Name Children ];;type MPerson = <person gender ="M">[ Name Children ];;type Children = <children>[Person*];;type Name = <name>[String];;

type Man = <man>[ Name Sons Daughters ];;type Woman = <woman>[ Name Sons Daughters ];;type Sons = <sons>[ Man* ];;type Daughters = <daughters>[ Woman* ];;

let fun sort (MPerson -> Man ; FPerson -> Woman)<person gender=gen>[ n <children>[(mc::MPerson | fc::FPerson)*] ] ->

let tag = match gen with "M" -> ‘man | "F" -> ‘woman inlet s = map mc with x -> sort x in mc:[MPerson*] ⇒ s:[Man*]let d = map fc with x -> sort x in fc:[FPerson*] ⇒ d:[Woman*]<(tag)>[ n <sons>s <daughters>d ];;

Note

Although sort:Person -> Man | Woman, the declarationfun sort (Person -> Man | Woman)

wouldn’t type-check (fails for the recursive calls).Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 26/107

Page 185: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 186: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 187: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 188: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 189: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 190: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 191: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 192: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 193: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

Computing the optimal solution requires to fully exploit inter-sections and differences of types

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 194: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

5. Efficient execution

Idea: if types tell you that something cannot happen, don’t test it.

type A = <a>[A*]type B = <b>[B*]

fun check(x : A|B) = match x with A -> 1 | B -> 0

fun check(x : A|B) = match x with <a> -> 1 | -> 0

No backtracking.

Whole parts of the matched data are not checked

New kind of push-down tree automata

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 27/107

Use static type information to perform an optimal set of tests

Page 195: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 196: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

1 merge distinct patterns that work on a common sequence,

2 transform where clauses into patterns,

3 transform paths into nested pattern-based selections, then merge.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 197: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

1 merge distinct patterns that work on a common sequence,

2 transform where clauses into patterns,

3 transform paths into nested pattern-based selections, then merge.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 198: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

1 merge distinct patterns that work on a common sequence,

2 transform where clauses into patterns,

3 transform paths into nested pattern-based selections, then merge.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 199: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

select <book year=y>[t] fromb in bibs/book,p in b/price,t in b/title,y in b/@year

where p = <price>"69.99"

optimised as

select <book year=y> t from<bib>[b::Book*] in bibs,<book year=y>[ t::Title + <price>"69.99" ] in b

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 200: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

select <book year=y>[t] fromb in bibs/book,p in b/price,t in b/title,y in b/@year

where p = <price>"69.99"

optimised as

select <book year=y> t from<bib>[b::Book*] in bibs,<book year=y>[ t::Title + <price>"69.99" ] in b

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 201: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

6. Logical pattern-specific optimisation of queries

select <book year=y>[t] fromb in bibs/book,p in b/price,t in b/title,y in b/@year

where p = <price>"69.99"

optimised as

select <book year=y> t from<bib>[b::Book*] in bibs,<book year=y>[ t::Title + <price>"69.99" ] in b

These optimisations are orthogonal to the classical optimisa-tions: they sum up and bring a further gain of performance

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 28/107

Transform the from clauses so as to capture in a single patternas much information as possible

Page 202: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 203: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

In XML processing it is important to allow the programmer todefine her/his own iterators.

XML complex structure makes virtually impossible for a lan-guage to provide a set of iterators covering all possible cases

Iterators programmed in the language are far less preciselytyped than built-in operators (require massive usage of casting).

This may explain why there is less consensus on iterators thanon extractors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 204: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

In XML processing it is important to allow the programmer todefine her/his own iterators.

XML complex structure makes virtually impossible for a lan-guage to provide a set of iterators covering all possible cases

Iterators programmed in the language are far less preciselytyped than built-in operators (require massive usage of casting).

This may explain why there is less consensus on iterators thanon extractors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 205: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

In XML processing it is important to allow the programmer todefine her/his own iterators.

XML complex structure makes virtually impossible for a lan-guage to provide a set of iterators covering all possible cases

Iterators programmed in the language are far less preciselytyped than built-in operators (require massive usage of casting).

This may explain why there is less consensus on iterators thanon extractors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 206: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

In XML processing it is important to allow the programmer todefine her/his own iterators.

XML complex structure makes virtually impossible for a lan-guage to provide a set of iterators covering all possible cases

Iterators programmed in the language are far less preciselytyped than built-in operators (require massive usage of casting).

This may explain why there is less consensus on iterators thanon extractors.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 207: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

In XML processing it is important to allow the programmer todefine her/his own iterators.

XML complex structure makes virtually impossible for a lan-guage to provide a set of iterators covering all possible cases

Iterators programmed in the language are far less preciselytyped than built-in operators (require massive usage of casting).

This may explain why there is less consensus on iterators thanon extractors.

How to define new iterators?

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 208: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 209: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 210: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 211: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 212: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 213: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 214: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 215: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 216: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 217: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

7. Pattern matches as building blocks for iterators

Hosoya’s smart idea: Define regular expression over pattern-matches “p -> e” (rather than over patterns).

select e from p in e ′ = filter[(p->e| ->[])*](e ′)

map e with p1->e1|...|pn->en = filter[(p1->e1|...|pn->en)*](e)

match e with p1->e1|...|pn->en = filter[p1->e1|...|pn->en]([e])

In-depth iterators are obtained by recursive filters

If instead of regexp we use the core-algebra, then it is possibleto define more powerful iterators.

Type precision obtained by specific typing, as for patterns.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 29/107

Build regexp of “pattern matches” for user-defined iterators

Page 218: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 219: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 220: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 221: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 222: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 223: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 224: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 225: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Data matched by wildcards “ ” not in the scope of a capturevariable are not necessary to the evaluation. Use boolean typeconstructors to determine the program data-need.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 226: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

8. Type/pattern-based pruning to optimise memory usage

Given a query q execute it on documents in which parts notnecessary to evaluate q are pruned. Recently adopted in mainmemory XML query engines, e.g. [Marian-Simeon], [Bressan et al.].

We can start from the optimal compilation of patterns: Compilepatterns in order to have as many “ ” wildcards as possible

fun check(x : A|B) = match x with A -> 1 | B -> 0

compiled as

fun check(x : A|B) = match x with <a> -> 1 | -> 0

Data matched by wildcards “ ” not in the scope of a capturevariable are not necessary to the evaluation. Use boolean typeconstructors to determine the program data-need.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 30/107

Use type analysis to determine which parts of an XML dataneed not to be loaded in main memory

Page 227: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 228: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 229: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 230: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 231: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 232: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 233: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

bibs : <bib>[ (<book year=String>[Title (Author+|Editor+) Price?])* ]

Use the precision of the type system in query optimisation

Page 234: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

bibs : <bib>[ (<book year=String>[Title (Author+|Editor+) Price?])* ]

Use the precision of the type system in query optimisation

Page 235: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

bibs : <bib>[ (<book year=String>[Title (Author+|Editor+) Price?])* ]

Use the precision of the type system in query optimisation

Page 236: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 237: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

9. Type-based query optimisation

Data description is more precise:E.g. in IMDB there are constraints such as:

If a show-element contains season-elements,then its type-attribute is "TV Series".

Transformation description is more precise:Exact type inference for pattern variables.Finer type inference for queries:

for bibs/book/(title|author|editor)infer type [(Title (Author+|Editor+))*]rather than [(Title|Author|Editor)*]

DTD/Schema already used to optimise access to XMLdata on disk. It should be possible to use also the precisionof regexp types to optimise secondary memory queries.

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 31/107

Use the precision of the type system in query optimisation

Page 238: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 239: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 240: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 241: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 242: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 243: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 244: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 245: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 246: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Not enough

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 247: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Other features

CDuce is a fully featured programming language:

General purpose features: records, tuples, references, integers,booleans, exceptions, . . .

Strings (operators, regular expressions, lazy implementation)

Data specific iterators

Namespaces

XML schema validation

URI’s, and file operations

Unicode

Not enoughLibraries and external tools are also needed

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 32/107

Page 248: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

On top of CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 33/107

Page 249: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Full integration with OCaml

Embedding of CDuce code in XML documents

Graphical queries

Security (control flow analysis)

Web-services

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 34/107

Page 250: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Full integration with OCaml

Embedding of CDuce code in XML documents

Graphical queries

Security (control flow analysis)

Web-services

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 34/107

Page 251: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 252: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 253: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 254: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 255: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 256: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 257: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

CDuce↔OCaml Integration

A CDuce application that requires OCaml code

Reuse existing librairies

Abstract data structures : hash tables, sets, ...Numerical computations, system callsBindings to C libraries : databases, networks, ...

Implement complex algorithms

An OCaml application that requires CDuce code

CDuce used as an XML input/output/transformation layer

Configuration filesXML serialization of datasXHTML code production

Need to seamlessly call OCaml code in CDuce and viceversa

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 35/107

Page 258: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 259: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 260: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 261: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 262: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 263: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 264: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 265: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Main Challenges

1 Seamless integration:No explicit conversion function in programs:the compiler performs the conversions

2 Type safety:No explicit type cast in programs:the standard type-checkers ensure type safety

What we need:

A mapping between OCaml and CDuce types and values

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 36/107

Page 266: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 267: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 268: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 269: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 270: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 271: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 272: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 273: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

How to integrate the two type systems?

The translation can go just one way: OCaml → CDuce

⊕⊕⊕ CDuce uses (semantic) subtyping; OCaml does notIf we translate CDuce types into OCaml ones :- soundness requires the translation to be monotone;- no subtyping in Ocaml implies a constant translation;⇒ CDuce typing would be lost.

⊕⊕⊕ CDuce has unions, intersections, differences,heterogeneous lists; OCaml does not⇒ OCaml types are not enough to translate CDuce types.

OCaml supports type polymorphism; CDuce does not.⇒ Polymorphic OCaml libraries/functions must be first instantied

to be used in CDuce

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 37/107

Page 274: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

In practice

1 Define a mapping T from OCaml types to CDuce types.

t (OCaml) T(t) (CDuce)int min int- -max intstring Latin1t1 ∗ t2 (T(t1),T(t2))t1 → t2 T(t1) → T(t2)t list [T(t)∗]t array [T(t)∗]t option [T(t)?]t ref ref T(t)A1 of t1 | . . . | An of tn (‘A1,T(t1)) | . . . | (‘An,T(tn))l1 = t1; . . . ; ln = tn l1 = T(t1); . . . ; ln = T(tn)

2 Define a retraction pair between OCaml and CDuce values.

ocaml2cduce: t → T(t)cduce2ocaml: T(t) → t

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 38/107

Page 275: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

In practice

1 Define a mapping T from OCaml types to CDuce types.

t (OCaml) T(t) (CDuce)int min int- -max intstring Latin1t1 ∗ t2 (T(t1),T(t2))t1 → t2 T(t1) → T(t2)t list [T(t)∗]t array [T(t)∗]t option [T(t)?]t ref ref T(t)A1 of t1 | . . . | An of tn (‘A1,T(t1)) | . . . | (‘An,T(tn))l1 = t1; . . . ; ln = tn l1 = T(t1); . . . ; ln = T(tn)

2 Define a retraction pair between OCaml and CDuce values.

ocaml2cduce: t → T(t)cduce2ocaml: T(t) → t

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 38/107

Page 276: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

In practice

1 Define a mapping T from OCaml types to CDuce types.

t (OCaml) T(t) (CDuce)int min int- -max intstring Latin1t1 ∗ t2 (T(t1),T(t2))t1 → t2 T(t1) → T(t2)t list [T(t)∗]t array [T(t)∗]t option [T(t)?]t ref ref T(t)A1 of t1 | . . . | An of tn (‘A1,T(t1)) | . . . | (‘An,T(tn))l1 = t1; . . . ; ln = tn l1 = T(t1); . . . ; ln = T(tn)

2 Define a retraction pair between OCaml and CDuce values.

ocaml2cduce: t → T(t)cduce2ocaml: T(t) → t

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 38/107

Page 277: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

In practice

1 Define a mapping T from OCaml types to CDuce types.

t (OCaml) T(t) (CDuce)int min int- -max intstring Latin1t1 ∗ t2 (T(t1),T(t2))t1 → t2 T(t1) → T(t2)t list [T(t)∗]t array [T(t)∗]t option [T(t)?]t ref ref T(t)A1 of t1 | . . . | An of tn (‘A1,T(t1)) | . . . | (‘An,T(tn))l1 = t1; . . . ; ln = tn l1 = T(t1); . . . ; ln = T(tn)

2 Define a retraction pair between OCaml and CDuce values.

ocaml2cduce: t → T(t)cduce2ocaml: T(t) → t

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 38/107

Page 278: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling OCaml from CDuce

Easy

Use M.f to call the function f exported by the OCaml module M

The CDuce compiler checks type soundness and then- applies cduce2ocaml to the arguments of the call- calls the OCaml function- applies ocaml2cduce to the result of the call

Example: use ocaml-mysql library in CDuce

let db = Mysql.connect Mysql.defaults;;

match Mysql.list dbs db ‘None [] with| (‘Some,l) -> print [ ’Databases: ’ !(string of l) ’\ n’ ]| ‘None -> [];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 39/107

Page 279: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling OCaml from CDuce

Easy

Use M.f to call the function f exported by the OCaml module M

The CDuce compiler checks type soundness and then- applies cduce2ocaml to the arguments of the call- calls the OCaml function- applies ocaml2cduce to the result of the call

Example: use ocaml-mysql library in CDuce

let db = Mysql.connect Mysql.defaults;;

match Mysql.list dbs db ‘None [] with| (‘Some,l) -> print [ ’Databases: ’ !(string of l) ’\ n’ ]| ‘None -> [];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 39/107

Page 280: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling OCaml from CDuce

Easy

Use M.f to call the function f exported by the OCaml module M

The CDuce compiler checks type soundness and then- applies cduce2ocaml to the arguments of the call- calls the OCaml function- applies ocaml2cduce to the result of the call

Example: use ocaml-mysql library in CDuce

let db = Mysql.connect Mysql.defaults;;

match Mysql.list dbs db ‘None [] with| (‘Some,l) -> print [ ’Databases: ’ !(string of l) ’\ n’ ]| ‘None -> [];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 39/107

Page 281: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling OCaml from CDuce

Easy

Use M.f to call the function f exported by the OCaml module M

The CDuce compiler checks type soundness and then- applies cduce2ocaml to the arguments of the call- calls the OCaml function- applies ocaml2cduce to the result of the call

Example: use ocaml-mysql library in CDuce

let db = Mysql.connect Mysql.defaults;;

match Mysql.list dbs db ‘None [] with| (‘Some,l) -> print [ ’Databases: ’ !(string of l) ’\ n’ ]| ‘None -> [];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 39/107

Page 282: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling OCaml from CDuce

Easy

Use M.f to call the function f exported by the OCaml module M

The CDuce compiler checks type soundness and then- applies cduce2ocaml to the arguments of the call- calls the OCaml function- applies ocaml2cduce to the result of the call

Example: use ocaml-mysql library in CDuce

let db = Mysql.connect Mysql.defaults;;

match Mysql.list dbs db ‘None [] with| (‘Some,l) -> print [ ’Databases: ’ !(string of l) ’\ n’ ]| ‘None -> [];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 39/107

Page 283: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling OCaml from CDuce

Easy

Use M.f to call the function f exported by the OCaml module M

The CDuce compiler checks type soundness and then- applies cduce2ocaml to the arguments of the call- calls the OCaml function- applies ocaml2cduce to the result of the call

Example: use ocaml-mysql library in CDuce

let db = Mysql.connect Mysql.defaults;;

match Mysql.list dbs db ‘None [] with| (‘Some,l) -> print [ ’Databases: ’ !(string of l) ’\ n’ ]| ‘None -> [];;

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 39/107

Page 284: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling CDuce from OCaml

Needs little work

Compile a CDuce module as an OCaml binary module by providinga OCaml (.mli) interface. Use it as a standard Ocaml module.

The CDuce compiler:1 Checks that if val f :t in the .mli file, then the CDuce type

of f is a subtype of T(t)2 Produces the OCaml glue code to export CDuce values as

OCaml ones and bind OCaml values in the CDuce module.

Example: use CDuce to compute a factorial:

(* File cdnum.mli: *)val fact: Big int.big int -> Big int.big int

(* File cdnum.cd: *)let aux ((Int,Int) -> Int)| (x, 0 | 1) -> x| (x, n) -> aux (x * n, n - 1)

let fact (x : Int) : Int = aux(1,x)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 40/107

Page 285: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling CDuce from OCaml

Needs little work

Compile a CDuce module as an OCaml binary module by providinga OCaml (.mli) interface. Use it as a standard Ocaml module.

The CDuce compiler:1 Checks that if val f :t in the .mli file, then the CDuce type

of f is a subtype of T(t)2 Produces the OCaml glue code to export CDuce values as

OCaml ones and bind OCaml values in the CDuce module.

Example: use CDuce to compute a factorial:

(* File cdnum.mli: *)val fact: Big int.big int -> Big int.big int

(* File cdnum.cd: *)let aux ((Int,Int) -> Int)| (x, 0 | 1) -> x| (x, n) -> aux (x * n, n - 1)

let fact (x : Int) : Int = aux(1,x)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 40/107

Page 286: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling CDuce from OCaml

Needs little work

Compile a CDuce module as an OCaml binary module by providinga OCaml (.mli) interface. Use it as a standard Ocaml module.

The CDuce compiler:1 Checks that if val f :t in the .mli file, then the CDuce type

of f is a subtype of T(t)2 Produces the OCaml glue code to export CDuce values as

OCaml ones and bind OCaml values in the CDuce module.

Example: use CDuce to compute a factorial:

(* File cdnum.mli: *)val fact: Big int.big int -> Big int.big int

(* File cdnum.cd: *)let aux ((Int,Int) -> Int)| (x, 0 | 1) -> x| (x, n) -> aux (x * n, n - 1)

let fact (x : Int) : Int = aux(1,x)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 40/107

Page 287: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling CDuce from OCaml

Needs little work

Compile a CDuce module as an OCaml binary module by providinga OCaml (.mli) interface. Use it as a standard Ocaml module.

The CDuce compiler:1 Checks that if val f :t in the .mli file, then the CDuce type

of f is a subtype of T(t)2 Produces the OCaml glue code to export CDuce values as

OCaml ones and bind OCaml values in the CDuce module.

Example: use CDuce to compute a factorial:

(* File cdnum.mli: *)val fact: Big int.big int -> Big int.big int

(* File cdnum.cd: *)let aux ((Int,Int) -> Int)| (x, 0 | 1) -> x| (x, n) -> aux (x * n, n - 1)

let fact (x : Int) : Int = aux(1,x)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 40/107

Page 288: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Calling CDuce from OCaml

Needs little work

Compile a CDuce module as an OCaml binary module by providinga OCaml (.mli) interface. Use it as a standard Ocaml module.

The CDuce compiler:1 Checks that if val f :t in the .mli file, then the CDuce type

of f is a subtype of T(t)2 Produces the OCaml glue code to export CDuce values as

OCaml ones and bind OCaml values in the CDuce module.

Example: use CDuce to compute a factorial:

(* File cdnum.mli: *)val fact: Big int.big int -> Big int.big int

(* File cdnum.cd: *)let aux ((Int,Int) -> Int)| (x, 0 | 1) -> x| (x, n) -> aux (x * n, n - 1)

let fact (x : Int) : Int = aux(1,x)

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 40/107

Page 289: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Embedded CDuce

Embed CDuce in XML/XHTML a la PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...><% include "cgi.cd" %><html><head><title>Hello World</title>

</head><body><p><% "Hello," @ " World !!!" %>

</p></body>

</html>

Compiled rather than interpreted

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 41/107

Page 290: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Embedded CDuce

Embed CDuce in XML/XHTML a la PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...><% include "cgi.cd" %><html><head><title>Hello World</title>

</head><body><p><% "Hello," @ " World !!!" %>

</p></body>

</html>

Compiled rather than interpreted

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 41/107

Page 291: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Embedded CDuce

Embed CDuce in XML/XHTML a la PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...><% include "cgi.cd" %><html><head><title>Hello World</title>

</head><body><p><% "Hello," @ " World !!!" %>

</p></body>

</html>

Compiled rather than interpreted

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 41/107

Page 292: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Embedded CDuce

Embed CDuce in XML/XHTML a la PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...><% include "cgi.cd" %><html><head><title>Hello World</title>

</head><body><p><% "Hello," @ " World !!!" %>

</p></body>

</html>

Compiled rather than interpreted

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 41/107

Page 293: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Embedded CDuce

Embed CDuce in XML/XHTML a la PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...><% include "cgi.cd" %><html><head><title>Hello World</title>

</head><body><p><% "Hello," @ " World !!!" %>

</p></body>

</html>

Compiled rather than interpreted

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 41/107

Page 294: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction 2. Regexp types/patterns 3. XML Programming in CDuce 3. Properties 4. Toolkit SBLP ’07

Embedded CDuce

A short demo

Part 1: XML Programming in CDuce G. Castagna: CDuce, an XML-Oriented Programming Language 42/107

Page 295: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

PART 2: THEORETICALFOUNDATIONS

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 43/107

Page 296: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Goal

The goal is to show how to take your favourite type constructors

×××, →→→, . . . , chan(), . . .

and add boolean combinators:

∨∨∨, ∧∧∧, ¬¬¬

so that they behave set-theoretically w.r.t. ≤

WHY?

Short answer: YOU JUST SAW IT!

Recap:- to encode XML types- to define XML patterns- to precisely type pattern matching

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 44/107

Page 297: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Goal

The goal is to show how to take your favourite type constructors

×××, →→→, . . . , chan(), . . .

and add boolean combinators:

∨∨∨, ∧∧∧, ¬¬¬

so that they behave set-theoretically w.r.t. ≤

WHY?

Short answer: YOU JUST SAW IT!

Recap:- to encode XML types- to define XML patterns- to precisely type pattern matching

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 44/107

Page 298: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Goal

The goal is to show how to take your favourite type constructors

×××, →→→, . . . , chan(), . . .

and add boolean combinators:

∨∨∨, ∧∧∧, ¬¬¬

so that they behave set-theoretically w.r.t. ≤

WHY?

Short answer: YOU JUST SAW IT!

Recap:- to encode XML types- to define XML patterns- to precisely type pattern matching

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 44/107

Page 299: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Goal

The goal is to show how to take your favourite type constructors

×××, →→→, . . . , chan(), . . .

and add boolean combinators:

∨∨∨, ∧∧∧, ¬¬¬

so that they behave set-theoretically w.r.t. ≤

WHY?

Short answer: YOU JUST SAW IT!

Recap:- to encode XML types- to define XML patterns- to precisely type pattern matching

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 44/107

Page 300: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 301: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 302: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 303: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 304: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 305: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 306: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Handling subtyping without combinators is easy:constructors do not mix, e.g. :

s2 ≤ s1 t1 ≤ t2s1 → t1 ≤ s2 → t2

With combinators is much harder:combinators distribute over constructors, e.g.

(s1∨∨∨s2) → t R (s1 → t)∧∧∧(s2 → t)

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 307: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Not a particularly new idea. Many attempts(e.g. Aiken&Wimmers, Damm,. . . , Hosoya&Pierce).

None fully satisfactory. (no negation, or no function types,or restrictions on unions and intersections, . . . )

Starting point of what follows: the approach ofHosoya&Pierce.

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 308: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Not a particularly new idea. Many attempts(e.g. Aiken&Wimmers, Damm,. . . , Hosoya&Pierce).

None fully satisfactory. (no negation, or no function types,or restrictions on unions and intersections, . . . )

Starting point of what follows: the approach ofHosoya&Pierce.

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 309: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

In details

t ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

Not a particularly new idea. Many attempts(e.g. Aiken&Wimmers, Damm,. . . , Hosoya&Pierce).

None fully satisfactory. (no negation, or no function types,or restrictions on unions and intersections, . . . )

Starting point of what follows: the approach ofHosoya&Pierce.

MAIN IDEA

Instead of defining the subtyping relation so that it conforms tothe semantic of types, define the semantics of types and derive thesubtyping relation.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 45/107

Page 310: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Semantic subtyping

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 46/107

Page 311: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Semantic subtyping

1 Define a set-theoretic semantics of the types:

J K : Types −→ P(D)

2 Define the subtyping relation as follows:

s ≤ tdef⇐⇒ JsK ⊆ JtK

KEY OBSERVATION 1:

The model of types may be independent from a model of terms

Hosoya and Pierce use the model of values:JtKV = v | ` v : t

Ok because the only values of XDuce are XML documents

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 47/107

Page 312: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Semantic subtyping

1 Define a set-theoretic semantics of the types:

J K : Types −→ P(D)

2 Define the subtyping relation as follows:

s ≤ tdef⇐⇒ JsK ⊆ JtK

KEY OBSERVATION 1:

The model of types may be independent from a model of terms

Hosoya and Pierce use the model of values:JtKV = v | ` v : t

Ok because the only values of XDuce are XML documents

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 47/107

Page 313: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Semantic subtyping

1 Define a set-theoretic semantics of the types:

J K : Types −→ P(D)

2 Define the subtyping relation as follows:

s ≤ tdef⇐⇒ JsK ⊆ JtK

KEY OBSERVATION 1:

The model of types may be independent from a model of terms

Hosoya and Pierce use the model of values:JtKV = v | ` v : t

Ok because the only values of XDuce are XML documents

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 47/107

Page 314: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Semantic subtyping

1 Define a set-theoretic semantics of the types:

J K : Types −→ P(D)

2 Define the subtyping relation as follows:

s ≤ tdef⇐⇒ JsK ⊆ JtK

KEY OBSERVATION 1:

The model of types may be independent from a model of terms

Hosoya and Pierce use the model of values:JtKV = v | ` v : t

Ok because the only values of XDuce are XML documents

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 47/107

Page 315: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Semantic subtyping

1 Define a set-theoretic semantics of the types:

J K : Types −→ P(D)

2 Define the subtyping relation as follows:

s ≤ tdef⇐⇒ JsK ⊆ JtK

KEY OBSERVATION 1:

The model of types may be independent from a model of terms

Hosoya and Pierce use the model of values:JtKV = v | ` v : t

Ok because the only values of XDuce are XML documents

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 47/107

Page 316: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 317: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 318: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 319: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 320: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 321: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 322: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t((JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 323: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 324: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 325: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 326: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 327: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 328: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 329: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 330: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 331: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 332: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 333: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 334: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 335: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 336: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 337: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 338: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 339: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 340: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 341: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 342: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 343: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 344: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 345: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 346: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 347: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 348: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 349: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 350: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 351: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 352: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 353: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 354: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 355: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Circularity

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 356: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 357: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t((JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 358: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t((JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 359: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t

,,

JtKV

` e : t ` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 360: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t

,,

JtKV

` e : t

CC

` v : t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 361: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t

,,

JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 362: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t

,,

JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 363: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t

,,

???((JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 364: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Bootstrap

Model of values

t ≤ s ⇐⇒ JtKV ⊆ JsKV where JtKV = v | ` v : t

No longer works with arrow types: values are λ-abstractions andneed (sub)typing to be defined

JtKD

t ≤ t

,,

???((JtKV

` e : t

CC

` v : tgg

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 48/107

Page 365: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Step 1 : Model

Define when J K : Types −→ P(D) yields a set-theoretic model.

Easy for the combinators:Jt1∨∨∨t2K = Jt1K ∪ Jt2KJt1∧∧∧t2K = Jt1K ∩ Jt2KJ¬¬¬tK = D\JtKJ0K = ∅J1K = D

Hard for constructors:Jt1×××t2K = Jt1K× Jt2KJt1→→→t2K = ???

Think semantically!

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 49/107

Page 366: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Step 1 : Model

Define when J K : Types −→ P(D) yields a set-theoretic model.

Easy for the combinators:Jt1∨∨∨t2K = Jt1K ∪ Jt2KJt1∧∧∧t2K = Jt1K ∩ Jt2KJ¬¬¬tK = D\JtKJ0K = ∅J1K = D

Hard for constructors:Jt1×××t2K = Jt1K× Jt2KJt1→→→t2K = ???

Think semantically!

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 49/107

Page 367: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Step 1 : Model

Define when J K : Types −→ P(D) yields a set-theoretic model.

Easy for the combinators:Jt1∨∨∨t2K = Jt1K ∪ Jt2KJt1∧∧∧t2K = Jt1K ∩ Jt2KJ¬¬¬tK = D\JtKJ0K = ∅J1K = D

Hard for constructors:Jt1×××t2K = Jt1K× Jt2KJt1→→→t2K = ???

Think semantically!

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 49/107

Page 368: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Step 1 : Model

Define when J K : Types −→ P(D) yields a set-theoretic model.

Easy for the combinators:Jt1∨∨∨t2K = Jt1K ∪ Jt2KJt1∧∧∧t2K = Jt1K ∩ Jt2KJ¬¬¬tK = D\JtKJ0K = ∅J1K = D

Hard for constructors:Jt1×××t2K = Jt1K× Jt2KJt1→→→t2K = ???

Think semantically!

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 49/107

Page 369: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Step 1 : Model

Define when J K : Types −→ P(D) yields a set-theoretic model.

Easy for the combinators:Jt1∨∨∨t2K = Jt1K ∪ Jt2KJt1∧∧∧t2K = Jt1K ∩ Jt2KJ¬¬¬tK = D\JtKJ0K = ∅J1K = D

Hard for constructors:Jt1×××t2K = Jt1K× Jt2KJt1→→→t2K = ???

Think semantically!

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 49/107

Page 370: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Step 1 : Model

Define when J K : Types −→ P(D) yields a set-theoretic model.

Easy for the combinators:Jt1∨∨∨t2K = Jt1K ∪ Jt2KJt1∧∧∧t2K = Jt1K ∩ Jt2KJ¬¬¬tK = D\JtKJ0K = ∅J1K = D

Hard for constructors:Jt1×××t2K = Jt1K× Jt2KJt1→→→t2K = ???

Think semantically!

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 49/107

Page 371: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = ???

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 372: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = functions from JtK to JsK

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 373: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = f ⊆ D2 | ∀(d1, d2)∈ f . d1∈JtK ⇒ d2∈JsK

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 374: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = P(JtK× JsK) ( Xdef= complement of X )

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 375: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = P(JtK× JsK) (∗)

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 376: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = P(JtK× JsK) (∗)

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 377: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = P(JtK× JsK) (∗)

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 378: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = P(JtK× JsK) (∗)

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 379: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Intuition

(×JsK)Jt→→→sK = P(JtK× JsK) (∗)

Impossible since it requires P(D2) ⊆ D

KEY OBSERVATION 2:

We need the model to state how types are related rather thanwhat the types are

Accept every J K that behaves w.r.t. ⊆ as if equation (∗) held,namely

Jt1→→→s1K ⊆ Jt2→→→s2K ⇐⇒ P(Jt1K× Js1K) ⊆ P(Jt2K× Js2K)

and similarly for any boolean combination of arrow types.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 50/107

Page 380: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Technically . . .

1 Take J K : Types → P(D) such thatJt1∨∨∨t2K = Jt1K ∪ Jt2K Jt1∧∧∧t2K = Jt1K ∩ Jt2KJ0K = ∅ J1K = DJ¬¬¬tK = D\JtK [combinator semantics]

2 Define EJ K : Types → P(D2 + P(D2)) as follows

EJt1×××t2Kdef= Jt1K× Jt2K ⊆ D2

EJt1→→→t2Kdef= P(Jt1K× Jt2K) ⊆ P(D2)

EJt1∨∨∨t2Kdef= EJt1K ∪ EJt2K... [constructor semantics]

3 Model: Instead of requiring JtK = EJtK, accept J K if

JtK = ∅ ⇐⇒ EJtK = ∅

(which is equivalent to JsK ⊆ JtK ⇐⇒ EJsK ⊆ EJtK)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 51/107

Page 381: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Technically . . .

1 Take J K : Types → P(D) such thatJt1∨∨∨t2K = Jt1K ∪ Jt2K Jt1∧∧∧t2K = Jt1K ∩ Jt2KJ0K = ∅ J1K = DJ¬¬¬tK = D\JtK [combinator semantics]

2 Define EJ K : Types → P(D2 + P(D2)) as follows

EJt1×××t2Kdef= Jt1K× Jt2K ⊆ D2

EJt1→→→t2Kdef= P(Jt1K× Jt2K) ⊆ P(D2)

EJt1∨∨∨t2Kdef= EJt1K ∪ EJt2K... [constructor semantics]

3 Model: Instead of requiring JtK = EJtK, accept J K if

JtK = ∅ ⇐⇒ EJtK = ∅

(which is equivalent to JsK ⊆ JtK ⇐⇒ EJsK ⊆ EJtK)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 51/107

Page 382: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Technically . . .

1 Take J K : Types → P(D) such thatJt1∨∨∨t2K = Jt1K ∪ Jt2K Jt1∧∧∧t2K = Jt1K ∩ Jt2KJ0K = ∅ J1K = DJ¬¬¬tK = D\JtK [combinator semantics]

2 Define EJ K : Types → P(D2 + P(D2)) as follows

EJt1×××t2Kdef= Jt1K× Jt2K ⊆ D2

EJt1→→→t2Kdef= P(Jt1K× Jt2K) ⊆ P(D2)

EJt1∨∨∨t2Kdef= EJt1K ∪ EJt2K... [constructor semantics]

3 Model: Instead of requiring JtK = EJtK, accept J K if

JtK = ∅ ⇐⇒ EJtK = ∅

(which is equivalent to JsK ⊆ JtK ⇐⇒ EJsK ⊆ EJtK)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 51/107

Page 383: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Technically . . .

1 Take J K : Types → P(D) such thatJt1∨∨∨t2K = Jt1K ∪ Jt2K Jt1∧∧∧t2K = Jt1K ∩ Jt2KJ0K = ∅ J1K = DJ¬¬¬tK = D\JtK [combinator semantics]

2 Define EJ K : Types → P(D2 + P(D2)) as follows

EJt1×××t2Kdef= Jt1K× Jt2K ⊆ D2

EJt1→→→t2Kdef= P(Jt1K× Jt2K) ⊆ P(D2)

EJt1∨∨∨t2Kdef= EJt1K ∪ EJt2K... [constructor semantics]

3 Model: Instead of requiring JtK = EJtK, accept J K if

JtK = ∅ ⇐⇒ EJtK = ∅

(which is equivalent to JsK ⊆ JtK ⇐⇒ EJsK ⊆ EJtK)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 51/107

Page 384: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Technically . . .

1 Take J K : Types → P(D) such thatJt1∨∨∨t2K = Jt1K ∪ Jt2K Jt1∧∧∧t2K = Jt1K ∩ Jt2KJ0K = ∅ J1K = DJ¬¬¬tK = D\JtK [combinator semantics]

2 Define EJ K : Types → P(D2 + P(D2)) as follows

EJt1×××t2Kdef= Jt1K× Jt2K ⊆ D2

EJt1→→→t2Kdef= P(Jt1K× Jt2K) ⊆ P(D2)

EJt1∨∨∨t2Kdef= EJt1K ∪ EJt2K... [constructor semantics]

3 Model: Instead of requiring JtK = EJtK, accept J K if

JtK = ∅ ⇐⇒ EJtK = ∅

(which is equivalent to JsK ⊆ JtK ⇐⇒ EJsK ⊆ EJtK)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 51/107

Page 385: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Technically . . .

1 Take J K : Types → P(D) such thatJt1∨∨∨t2K = Jt1K ∪ Jt2K Jt1∧∧∧t2K = Jt1K ∩ Jt2KJ0K = ∅ J1K = DJ¬¬¬tK = D\JtK [combinator semantics]

2 Define EJ K : Types → P(D2 + P(D2)) as follows

EJt1×××t2Kdef= Jt1K× Jt2K ⊆ D2

EJt1→→→t2Kdef= P(Jt1K× Jt2K) ⊆ P(D2)

EJt1∨∨∨t2Kdef= EJt1K ∪ EJt2K... [constructor semantics]

3 Model: Instead of requiring JtK = EJtK, accept J K if

JtK = ∅ ⇐⇒ EJtK = ∅

(which is equivalent to JsK ⊆ JtK ⇐⇒ EJsK ⊆ EJtK)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 51/107

Page 386: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The main intuition

To characterize ≤ all is needed is the test of emptyness

Indeed: s ≤ t ⇔ JsK ⊆ JtK ⇔ JsK ∩ JtK = ∅⇔ Js∧∧∧¬¬¬tK = ∅

Instead of JtK = EJtK, the weaker JtK=∅ ⇔ EJtK=∅suffices for ≤.

J K and EJ K must have the same zeros

We relaxed our requirement but . . .

DOES A MODEL EXIST?

Is it possible to define J K : Types → P(D) that satisfies the modelconditions, in particular a JK such that JtK=∅ ⇔ EJtK=∅?

YES: an example within two slides

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 52/107

Page 387: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The main intuition

To characterize ≤ all is needed is the test of emptyness

Indeed: s ≤ t ⇔ JsK ⊆ JtK ⇔ JsK ∩ JtK = ∅⇔ Js∧∧∧¬¬¬tK = ∅

Instead of JtK = EJtK, the weaker JtK=∅ ⇔ EJtK=∅suffices for ≤.

J K and EJ K must have the same zeros

We relaxed our requirement but . . .

DOES A MODEL EXIST?

Is it possible to define J K : Types → P(D) that satisfies the modelconditions, in particular a JK such that JtK=∅ ⇔ EJtK=∅?

YES: an example within two slides

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 52/107

Page 388: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The main intuition

To characterize ≤ all is needed is the test of emptyness

Indeed: s ≤ t ⇔ JsK ⊆ JtK ⇔ JsK ∩ JtK = ∅⇔ Js∧∧∧¬¬¬tK = ∅

Instead of JtK = EJtK, the weaker JtK=∅ ⇔ EJtK=∅suffices for ≤.

J K and EJ K must have the same zeros

We relaxed our requirement but . . .

DOES A MODEL EXIST?

Is it possible to define J K : Types → P(D) that satisfies the modelconditions, in particular a JK such that JtK=∅ ⇔ EJtK=∅?

YES: an example within two slides

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 52/107

Page 389: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The main intuition

To characterize ≤ all is needed is the test of emptyness

Indeed: s ≤ t ⇔ JsK ⊆ JtK ⇔ JsK ∩ JtK = ∅⇔ Js∧∧∧¬¬¬tK = ∅

Instead of JtK = EJtK, the weaker JtK=∅ ⇔ EJtK=∅suffices for ≤.

J K and EJ K must have the same zeros

We relaxed our requirement but . . .

DOES A MODEL EXIST?

Is it possible to define J K : Types → P(D) that satisfies the modelconditions, in particular a JK such that JtK=∅ ⇔ EJtK=∅?

YES: an example within two slides

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 52/107

Page 390: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The main intuition

To characterize ≤ all is needed is the test of emptyness

Indeed: s ≤ t ⇔ JsK ⊆ JtK ⇔ JsK ∩ JtK = ∅⇔ Js∧∧∧¬¬¬tK = ∅

Instead of JtK = EJtK, the weaker JtK=∅ ⇔ EJtK=∅suffices for ≤.

J K and EJ K must have the same zeros

We relaxed our requirement but . . .

DOES A MODEL EXIST?

Is it possible to define J K : Types → P(D) that satisfies the modelconditions, in particular a JK such that JtK=∅ ⇔ EJtK=∅?

YES: an example within two slides

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 52/107

Page 391: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The main intuition

To characterize ≤ all is needed is the test of emptyness

Indeed: s ≤ t ⇔ JsK ⊆ JtK ⇔ JsK ∩ JtK = ∅⇔ Js∧∧∧¬¬¬tK = ∅

Instead of JtK = EJtK, the weaker JtK=∅ ⇔ EJtK=∅suffices for ≤.

J K and EJ K must have the same zeros

We relaxed our requirement but . . .

DOES A MODEL EXIST?

Is it possible to define J K : Types → P(D) that satisfies the modelconditions, in particular a JK such that JtK=∅ ⇔ EJtK=∅?

YES: an example within two slides

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 52/107

Page 392: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The role of EJK

EJK characterizes the behavior of types (for what it concerns ≤ onecan consider JtK = EJtK): it depends on the language the types areintended for.

Variations are possible. Our choice

EJt1→→→t2K = P(Jt1K× Jt2K)accounts for languages that are:

1 Non-deterministic :Admits functions in which (d , d1) and (d , d2) with d1 6= d2.

2 Non-terminating :a function in Jt→→→sK may be not total on JtK.E.g.

Jt→→→0K = functions diverging on t

3 Overloaded :J(t1∨∨∨t2)→→→(s1∧∧∧s2)K J(t1→→→s1)∧∧∧(t2→→→s2)K

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 53/107

Page 393: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The role of EJK

EJK characterizes the behavior of types (for what it concerns ≤ onecan consider JtK = EJtK): it depends on the language the types areintended for.

Variations are possible. Our choice

EJt1→→→t2K = P(Jt1K× Jt2K)accounts for languages that are:

1 Non-deterministic :Admits functions in which (d , d1) and (d , d2) with d1 6= d2.

2 Non-terminating :a function in Jt→→→sK may be not total on JtK.E.g.

Jt→→→0K = functions diverging on t

3 Overloaded :J(t1∨∨∨t2)→→→(s1∧∧∧s2)K J(t1→→→s1)∧∧∧(t2→→→s2)K

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 53/107

Page 394: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The role of EJK

EJK characterizes the behavior of types (for what it concerns ≤ onecan consider JtK = EJtK): it depends on the language the types areintended for.

Variations are possible. Our choice

EJt1→→→t2K = P(Jt1K× Jt2K)accounts for languages that are:

1 Non-deterministic :Admits functions in which (d , d1) and (d , d2) with d1 6= d2.

2 Non-terminating :a function in Jt→→→sK may be not total on JtK.E.g.

Jt→→→0K = functions diverging on t

3 Overloaded :J(t1∨∨∨t2)→→→(s1∧∧∧s2)K J(t1→→→s1)∧∧∧(t2→→→s2)K

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 53/107

Page 395: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The role of EJK

EJK characterizes the behavior of types (for what it concerns ≤ onecan consider JtK = EJtK): it depends on the language the types areintended for.

Variations are possible. Our choice

EJt1→→→t2K = P(Jt1K× Jt2K)accounts for languages that are:

1 Non-deterministic :Admits functions in which (d , d1) and (d , d2) with d1 6= d2.

2 Non-terminating :a function in Jt→→→sK may be not total on JtK.E.g.

Jt→→→0K = functions diverging on t

3 Overloaded :J(t1∨∨∨t2)→→→(s1∧∧∧s2)K J(t1→→→s1)∧∧∧(t2→→→s2)K

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 53/107

Page 396: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The role of EJK

EJK characterizes the behavior of types (for what it concerns ≤ onecan consider JtK = EJtK): it depends on the language the types areintended for.

Variations are possible. Our choice

EJt1→→→t2K = P(Jt1K× Jt2K)accounts for languages that are:

1 Non-deterministic :Admits functions in which (d , d1) and (d , d2) with d1 6= d2.

2 Non-terminating :a function in Jt→→→sK may be not total on JtK.E.g.

Jt→→→0K = functions diverging on t

3 Overloaded :J(t1∨∨∨t2)→→→(s1∧∧∧s2)K J(t1→→→s1)∧∧∧(t2→→→s2)K

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 53/107

Page 397: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

The role of EJK

EJK characterizes the behavior of types (for what it concerns ≤ onecan consider JtK = EJtK): it depends on the language the types areintended for.

Variations are possible. Our choice

EJt1→→→t2K = P(Jt1K× Jt2K)accounts for languages that are:

1 Non-deterministic :Admits functions in which (d , d1) and (d , d2) with d1 6= d2.

2 Non-terminating :a function in Jt→→→sK may be not total on JtK.E.g.

Jt→→→0K = functions diverging on t

3 Overloaded :J(t1∨∨∨t2)→→→(s1∧∧∧s2)K J(t1→→→s1)∧∧∧(t2→→→s2)K

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 53/107

Page 398: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Closing the circle

1 Take any model (B, JKB) to bootstrap the definition.

2 Defines ≤B t ⇐⇒ JsKB ⊆ JtKB

3 Take any “appropriate” language L and use ≤B to type it

Γ `B e : t

4 Define a new interpretation JtKV = v ∈ V | `B v : t ands ≤V t ⇐⇒ JsKV ⊆ JtKV

5 If L is “appropriate” (`B v : t ⇐⇒ 6`B v : ¬¬¬t) then JKV is amodel and

s ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 54/107

Page 399: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Closing the circle

1 Take any model (B, JKB) to bootstrap the definition.

2 Defines ≤B t ⇐⇒ JsKB ⊆ JtKB

3 Take any “appropriate” language L and use ≤B to type it

Γ `B e : t

4 Define a new interpretation JtKV = v ∈ V | `B v : t ands ≤V t ⇐⇒ JsKV ⊆ JtKV

5 If L is “appropriate” (`B v : t ⇐⇒ 6`B v : ¬¬¬t) then JKV is amodel and

s ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 54/107

Page 400: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Closing the circle

1 Take any model (B, JKB) to bootstrap the definition.

2 Defines ≤B t ⇐⇒ JsKB ⊆ JtKB

3 Take any “appropriate” language L and use ≤B to type it

Γ `B e : t

4 Define a new interpretation JtKV = v ∈ V | `B v : t ands ≤V t ⇐⇒ JsKV ⊆ JtKV

5 If L is “appropriate” (`B v : t ⇐⇒ 6`B v : ¬¬¬t) then JKV is amodel and

s ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 54/107

Page 401: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Closing the circle

1 Take any model (B, JKB) to bootstrap the definition.

2 Defines ≤B t ⇐⇒ JsKB ⊆ JtKB

3 Take any “appropriate” language L and use ≤B to type it

Γ `B e : t

4 Define a new interpretation JtKV = v ∈ V | `B v : t ands ≤V t ⇐⇒ JsKV ⊆ JtKV

5 If L is “appropriate” (`B v : t ⇐⇒ 6`B v : ¬¬¬t) then JKV is amodel and

s ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 54/107

Page 402: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Closing the circle

1 Take any model (B, JKB) to bootstrap the definition.

2 Defines ≤B t ⇐⇒ JsKB ⊆ JtKB

3 Take any “appropriate” language L and use ≤B to type it

Γ `B e : t

4 Define a new interpretation JtKV = v ∈ V | `B v : t ands ≤V t ⇐⇒ JsKV ⊆ JtKV

5 If L is “appropriate” (`B v : t ⇐⇒ 6`B v : ¬¬¬t) then JKV is amodel and

s ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 54/107

Page 403: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Closing the circle

1 Take any model (B, JKB) to bootstrap the definition.

2 Defines ≤B t ⇐⇒ JsKB ⊆ JtKB

3 Take any “appropriate” language L and use ≤B to type it

Γ `B e : t

4 Define a new interpretation JtKV = v ∈ V | `B v : t ands ≤V t ⇐⇒ JsKV ⊆ JtKV

5 If L is “appropriate” (`B v : t ⇐⇒ 6`B v : ¬¬¬t) then JKV is amodel and

s ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 54/107

Page 404: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 405: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 406: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 407: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 408: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 409: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 410: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 411: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 412: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 413: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Exhibit a model

Does a model exists? (i.e. a J K such that JtK = ∅ ⇐⇒ EJtK = ∅)YES: take (U , J KU ) where

1 U least solution of X = X 2 + Pf (X2)

2 J KU is defined as:

J0KU = ∅ J1KU = U J¬¬¬tKU = U\JtKUJs∨∨∨tKU = JsKU∪ JtKU Js∧∧∧tKU = JsKU∩ JtKUJs×××tKU = JsKU × JtKU Jt→→→sKU = Pf (JtKU× JsKU )

It is a model: Pf (JtKU× JsKU ) = ∅ ⇐⇒ P(JtKU× JsKU ) = ∅

It is the best model: for any other model J KD

t1 ≤D t2 ⇒ t1 ≤U t2

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 55/107

Page 414: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Subtyping Algorithms.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 56/107

Page 415: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Canonical forms

Every (recursive) typet ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

is equivalent (semantically, that is w.r.t. ≤) to a type of the form:∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

1 Put it in disjunctive normal form, e.g.(a1∧∧∧a2∧∧∧¬¬¬a3)∨∨∨(a4∧∧∧¬¬¬a5)∨∨∨(¬¬¬a6∧∧∧¬¬¬a7)∨∨∨(a8∧∧∧a9)

2 Transform to have only homogeneous intersections, e.g.((s1×××t1)∧∧∧¬¬¬(s2×××t2)) ∨∨∨ (¬¬¬(s3→→→t3)∧∧∧¬¬¬(s4→→→t4)) ∨∨∨ (s5×××t5)

3 Group negative and positive atoms in the intersections:∨∨∨(P,N)∈S

((∧∧∧a∈P

a)∧∧∧(∧∧∧a∈N

¬¬¬a))

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 57/107

Page 416: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Canonical forms

Every (recursive) typet ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

is equivalent (semantically, that is w.r.t. ≤) to a type of the form:∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

1 Put it in disjunctive normal form, e.g.(a1∧∧∧a2∧∧∧¬¬¬a3)∨∨∨(a4∧∧∧¬¬¬a5)∨∨∨(¬¬¬a6∧∧∧¬¬¬a7)∨∨∨(a8∧∧∧a9)

2 Transform to have only homogeneous intersections, e.g.((s1×××t1)∧∧∧¬¬¬(s2×××t2)) ∨∨∨ (¬¬¬(s3→→→t3)∧∧∧¬¬¬(s4→→→t4)) ∨∨∨ (s5×××t5)

3 Group negative and positive atoms in the intersections:∨∨∨(P,N)∈S

((∧∧∧a∈P

a)∧∧∧(∧∧∧a∈N

¬¬¬a))

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 57/107

Page 417: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Canonical forms

Every (recursive) typet ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

is equivalent (semantically, that is w.r.t. ≤) to a type of the form:∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

1 Put it in disjunctive normal form, e.g.(a1∧∧∧a2∧∧∧¬¬¬a3)∨∨∨(a4∧∧∧¬¬¬a5)∨∨∨(¬¬¬a6∧∧∧¬¬¬a7)∨∨∨(a8∧∧∧a9)

2 Transform to have only homogeneous intersections, e.g.((s1×××t1)∧∧∧¬¬¬(s2×××t2)) ∨∨∨ (¬¬¬(s3→→→t3)∧∧∧¬¬¬(s4→→→t4)) ∨∨∨ (s5×××t5)

3 Group negative and positive atoms in the intersections:∨∨∨(P,N)∈S

((∧∧∧a∈P

a)∧∧∧(∧∧∧a∈N

¬¬¬a))

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 57/107

Page 418: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Canonical forms

Every (recursive) typet ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

is equivalent (semantically, that is w.r.t. ≤) to a type of the form:∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

1 Put it in disjunctive normal form, e.g.(a1∧∧∧a2∧∧∧¬¬¬a3)∨∨∨(a4∧∧∧¬¬¬a5)∨∨∨(¬¬¬a6∧∧∧¬¬¬a7)∨∨∨(a8∧∧∧a9)

2 Transform to have only homogeneous intersections, e.g.((s1×××t1)∧∧∧¬¬¬(s2×××t2)) ∨∨∨ (¬¬¬(s3→→→t3)∧∧∧¬¬¬(s4→→→t4)) ∨∨∨ (s5×××t5)

3 Group negative and positive atoms in the intersections:∨∨∨(P,N)∈S

((∧∧∧a∈P

a)∧∧∧(∧∧∧a∈N

¬¬¬a))

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 57/107

Page 419: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Canonical forms

Every (recursive) typet ::= B | t×××t | t→→→t | t∨∨∨t | t∧∧∧t | ¬t | 0 | 1

is equivalent (semantically, that is w.r.t. ≤) to a type of the form:∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

1 Put it in disjunctive normal form, e.g.(a1∧∧∧a2∧∧∧¬¬¬a3)∨∨∨(a4∧∧∧¬¬¬a5)∨∨∨(¬¬¬a6∧∧∧¬¬¬a7)∨∨∨(a8∧∧∧a9)

2 Transform to have only homogeneous intersections, e.g.((s1×××t1)∧∧∧¬¬¬(s2×××t2)) ∨∨∨ (¬¬¬(s3→→→t3)∧∧∧¬¬¬(s4→→→t4)) ∨∨∨ (s5×××t5)

3 Group negative and positive atoms in the intersections:∨∨∨(P,N)∈S

((∧∧∧a∈P

a)∧∧∧(∧∧∧a∈N

¬¬¬a))

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 57/107

Page 420: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Subtyping decomposition

Some ugly formulas:∧∧∧i∈I

ti×××si ≤∨∨∨i∈J

ti×××si

⇐⇒ ∀J ′ ⊆ J.

(∧∧∧i∈I

ti ≤∨∨∨i∈J′

ti

)or

∧∧∧i∈I

si ≤∨∨∨

i∈J\J′si

∧∧∧i∈I

ti→→→si ≤∨∨∨i∈J

ti→→→si

⇐⇒ ∃j ∈ J.∀I ′ ⊆ I .

(tj ≤

∨∨∨i∈I ′

ti

)or

I ′ 6= I et∧∧∧

i∈I\I ′si ≤ sj

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 58/107

Page 421: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Decision procedure

s ≤ t?

Recall that:

s ≤ t ⇐⇒ JsK ∩ JtK = ∅ ⇐⇒ Js∧∧∧¬¬¬tK = ∅ ⇐⇒ s∧∧∧¬¬¬t = 0

1 Consider s∧∧∧¬¬¬t

2 Put it in canonical form∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

3 Decide (coinductively) whether the two summands are bothempty by applying the ugly formulas of the previous slide.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 59/107

Page 422: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Decision procedure

s ≤ t?

Recall that:

s ≤ t ⇐⇒ JsK ∩ JtK = ∅ ⇐⇒ Js∧∧∧¬¬¬tK = ∅ ⇐⇒ s∧∧∧¬¬¬t = 0

1 Consider s∧∧∧¬¬¬t

2 Put it in canonical form∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

3 Decide (coinductively) whether the two summands are bothempty by applying the ugly formulas of the previous slide.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 59/107

Page 423: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Decision procedure

s ≤ t?

Recall that:

s ≤ t ⇐⇒ JsK ∩ JtK = ∅ ⇐⇒ Js∧∧∧¬¬¬tK = ∅ ⇐⇒ s∧∧∧¬¬¬t = 0

1 Consider s∧∧∧¬¬¬t

2 Put it in canonical form∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

3 Decide (coinductively) whether the two summands are bothempty by applying the ugly formulas of the previous slide.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 59/107

Page 424: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Decision procedure

s ≤ t?

Recall that:

s ≤ t ⇐⇒ JsK ∩ JtK = ∅ ⇐⇒ Js∧∧∧¬¬¬tK = ∅ ⇐⇒ s∧∧∧¬¬¬t = 0

1 Consider s∧∧∧¬¬¬t

2 Put it in canonical form∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

3 Decide (coinductively) whether the two summands are bothempty by applying the ugly formulas of the previous slide.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 59/107

Page 425: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Decision procedure

s ≤ t?

Recall that:

s ≤ t ⇐⇒ JsK ∩ JtK = ∅ ⇐⇒ Js∧∧∧¬¬¬tK = ∅ ⇐⇒ s∧∧∧¬¬¬t = 0

1 Consider s∧∧∧¬¬¬t

2 Put it in canonical form∨∨∨(P,N)∈Π

((∧∧∧

s×××t∈P

s×××t)∧∧∧(∧∧∧

s×××t∈N

¬¬¬(s×××t)))∨∨∨

(P,N)∈Σ

((∧∧∧

s→→→t∈P

s→→→t)∧∧∧(∧∧∧

s→→→t∈N

¬¬¬(s→→→t)))

3 Decide (coinductively) whether the two summands are bothempty by applying the ugly formulas of the previous slide.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 59/107

Page 426: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Application to a language.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 60/107

Page 427: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Language

e : := x variable

| µf (s1→→→t1;...;sn→→→tn)(x).e abstraction, n ≥ 1| e1e2 application| (e1,e2) pair| πi (e) projection, i = 1, 2| (x = e ∈∈∈ t)???e1:e2 binding type case

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 61/107

Page 428: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Typing

Γ ` e : s ≤BtΓ ` e : t

(subsumption)

(∀i) Γ, (f : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn), (x : si ) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn(abstr)

(for s1 ≡ s∧∧∧t, s2 ≡ s∧∧∧¬¬¬t)

Γ ` e : s Γ, (x : s1) ` e1 : t1 Γ, (x : s2) ` e2 : t2

Γ ` (x = e ∈∈∈ t)???e1:e2 :∨∨∨i |si 6'0 ti

(typecase)

Consider:

µf(Int→→→Int;Bool→→→Bool)(x).(y = x ∈∈∈ Int)???(y + 1):not(y)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 62/107

Page 429: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Typing

Γ ` e : s ≤BtΓ ` e : t

(subsumption)

(∀i) Γ, (f : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn), (x : si ) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn(abstr)

(for s1 ≡ s∧∧∧t, s2 ≡ s∧∧∧¬¬¬t)

Γ ` e : s Γ, (x : s1) ` e1 : t1 Γ, (x : s2) ` e2 : t2

Γ ` (x = e ∈∈∈ t)???e1:e2 :∨∨∨i |si 6'0 ti

(typecase)

Consider:

µf(Int→→→Int;Bool→→→Bool)(x).(y = x ∈∈∈ Int)???(y + 1):not(y)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 62/107

Page 430: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Typing

Γ ` e : s ≤BtΓ ` e : t

(subsumption)

(∀i) Γ, (f : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn), (x : si ) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn(abstr)

(for s1 ≡ s∧∧∧t, s2 ≡ s∧∧∧¬¬¬t)

Γ ` e : s Γ, (x : s1) ` e1 : t1 Γ, (x : s2) ` e2 : t2

Γ ` (x = e ∈∈∈ t)???e1:e2 :∨∨∨i |si 6'0 ti

(typecase)

Consider:

µf(Int→→→Int;Bool→→→Bool)(x).(y = x ∈∈∈ Int)???(y + 1):not(y)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 62/107

Page 431: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Typing

Γ ` e : s ≤BtΓ ` e : t

(subsumption)

(∀i) Γ, (f : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn), (x : si ) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn(abstr)

(for s1 ≡ s∧∧∧t, s2 ≡ s∧∧∧¬¬¬t)

Γ ` e : s Γ, (x : s1) ` e1 : t1 Γ, (x : s2) ` e2 : t2

Γ ` (x = e ∈∈∈ t)???e1:e2 :∨∨∨i |si 6'0 ti

(typecase)

Consider:

µf(Int→→→Int;Bool→→→Bool)(x).(y = x ∈∈∈ Int)???(y + 1):not(y)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 62/107

Page 432: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Typing

Γ ` e : s ≤BtΓ ` e : t

(subsumption)

(∀i) Γ, (f : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn), (x : si ) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn(abstr)

(for s1 ≡ s∧∧∧t, s2 ≡ s∧∧∧¬¬¬t)

Γ ` e : s Γ, (x : s1) ` e1 : t1 Γ, (x : s2) ` e2 : t2

Γ ` (x = e ∈∈∈ t)???e1:e2 :∨∨∨i |si 6'0 ti

(typecase)

Consider:

µf(Int→→→Int;Bool→→→Bool)(x).(y = x ∈∈∈ Int)???(y + 1):not(y)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 62/107

Page 433: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Typing

Γ ` e : s ≤BtΓ ` e : t

(subsumption)

(∀i) Γ, (f : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn), (x : si ) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : s1→→→t1∧∧∧ . . .∧∧∧sn→→→tn(abstr)

(for s1 ≡ s∧∧∧t, s2 ≡ s∧∧∧¬¬¬t)

Γ ` e : s Γ, (x : s1) ` e1 : t1 Γ, (x : s2) ` e2 : t2

Γ ` (x = e ∈∈∈ t)???e1:e2 :∨∨∨i |si 6'0 ti

(typecase)

Consider:

µf(Int→→→Int;Bool→→→Bool)(x).(y = x ∈∈∈ Int)???(y + 1):not(y)

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 62/107

Page 434: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Reduction

(µf (...)(x).e)v → e[x/v , (µf (...)(x).e)/f ](x = v ∈∈∈ t)???e1:e2 → e1[x/v ] if v ∈ JtK(x = v ∈∈∈ t)???e1:e2 → e2[x/v ] if v 6∈ JtK

wherev ::= µf (...)(x).e | (v ,v)

And we haves ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 63/107

Page 435: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Reduction

(µf (...)(x).e)v → e[x/v , (µf (...)(x).e)/f ](x = v ∈∈∈ t)???e1:e2 → e1[x/v ] if v ∈ JtK(x = v ∈∈∈ t)???e1:e2 → e2[x/v ] if v 6∈ JtK

wherev ::= µf (...)(x).e | (v ,v)

And we haves ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 63/107

Page 436: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Reduction

(µf (...)(x).e)v → e[x/v , (µf (...)(x).e)/f ](x = v ∈∈∈ t)???e1:e2 → e1[x/v ] if v ∈ JtK(x = v ∈∈∈ t)???e1:e2 → e2[x/v ] if v 6∈ JtK

wherev ::= µf (...)(x).e | (v ,v)

And we haves ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 63/107

Page 437: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Reduction

(µf (...)(x).e)v → e[x/v , (µf (...)(x).e)/f ](x = v ∈∈∈ t)???e1:e2 → e1[x/v ] if v ∈ JtK(x = v ∈∈∈ t)???e1:e2 → e2[x/v ] if v 6∈ JtK

wherev ::= µf (...)(x).e | (v ,v)

And we haves ≤B t ⇐⇒ s ≤V t

The circle is closed

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 63/107

Page 438: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Why does it work?

s ≤B t ⇐⇒ s ≤V t (1)

Equation (1) (actually, ⇒) states that the language is quite rich,since there always exists a value to separate two distinct types; i.e.its set of values is a model of types with “enough points”

For any model B,s 6≤B t =⇒ there exists v such that ` v : s and 6` v : t

In particular, thanks to multiple arrows in λ-abstractions:∧∧∧i=1..k

si→→→ti 6≤ t

then the two types are distinguished by µf (s1→→→t1;...;sk→→→tk)(x).e

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 64/107

Page 439: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Why does it work?

s ≤B t ⇐⇒ s ≤V t (1)

Equation (1) (actually, ⇒) states that the language is quite rich,since there always exists a value to separate two distinct types; i.e.its set of values is a model of types with “enough points”

For any model B,s 6≤B t =⇒ there exists v such that ` v : s and 6` v : t

In particular, thanks to multiple arrows in λ-abstractions:∧∧∧i=1..k

si→→→ti 6≤ t

then the two types are distinguished by µf (s1→→→t1;...;sk→→→tk)(x).e

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 64/107

Page 440: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Why does it work?

s ≤B t ⇐⇒ s ≤V t (1)

Equation (1) (actually, ⇒) states that the language is quite rich,since there always exists a value to separate two distinct types; i.e.its set of values is a model of types with “enough points”

For any model B,s 6≤B t =⇒ there exists v such that ` v : s and 6` v : t

In particular, thanks to multiple arrows in λ-abstractions:∧∧∧i=1..k

si→→→ti 6≤ t

then the two types are distinguished by µf (s1→→→t1;...;sk→→→tk)(x).e

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 64/107

Page 441: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Advantages for the programmer

The programmer does not need to know the gory details. All s/heneeds to retain is

1 Types are the set of values of that type

2 Subtyping is set inclusion

Furthermore the propertys 6≤ t =⇒ there exists v such that ` v : s and 6` v : t

is fundamental for meaningful error messages:

Exibit the v at issue rather than pointing to the failure of somededuction rule.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 65/107

Page 442: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Advantages for the programmer

The programmer does not need to know the gory details. All s/heneeds to retain is

1 Types are the set of values of that type

2 Subtyping is set inclusion

Furthermore the propertys 6≤ t =⇒ there exists v such that ` v : s and 6` v : t

is fundamental for meaningful error messages:

Exibit the v at issue rather than pointing to the failure of somededuction rule.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 65/107

Page 443: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Advantages for the programmer

The programmer does not need to know the gory details. All s/heneeds to retain is

1 Types are the set of values of that type

2 Subtyping is set inclusion

Furthermore the propertys 6≤ t =⇒ there exists v such that ` v : s and 6` v : t

is fundamental for meaningful error messages:

Exibit the v at issue rather than pointing to the failure of somededuction rule.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 65/107

Page 444: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Advantages for the programmer

The programmer does not need to know the gory details. All s/heneeds to retain is

1 Types are the set of values of that type

2 Subtyping is set inclusion

Furthermore the propertys 6≤ t =⇒ there exists v such that ` v : s and 6` v : t

is fundamental for meaningful error messages:

Exibit the v at issue rather than pointing to the failure of somededuction rule.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 65/107

Page 445: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Advantages for the programmer

The programmer does not need to know the gory details. All s/heneeds to retain is

1 Types are the set of values of that type

2 Subtyping is set inclusion

Furthermore the propertys 6≤ t =⇒ there exists v such that ` v : s and 6` v : t

is fundamental for meaningful error messages:

Exibit the v at issue rather than pointing to the failure of somededuction rule.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 65/107

Page 446: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Extensions.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 66/107

Page 447: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

ref types

Jref tK = ref v | v ∈ JtK

In practice equivalent to

EJref tK =

JtK if JtK 6= ∅∅ otherwise

(2)

Deduce the subtyping relation

(∧∧∧

ref s∈P

ref s) ≤ (∨∨∨

ref t∈N

ref t) ⇐⇒∃ref s ∈ P, s ' 0, or∃ref s1 ∈ P, ∃ref s2 ∈ P, s1 6' s2, or∃ref s ∈ P, ∃ref t ∈ N, s ' t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 67/107

Page 448: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

ref types

Jref tK = ref v | v ∈ JtK

In practice equivalent to

EJref tK =

JtK if JtK 6= ∅∅ otherwise

(2)

Deduce the subtyping relation

(∧∧∧

ref s∈P

ref s) ≤ (∨∨∨

ref t∈N

ref t) ⇐⇒∃ref s ∈ P, s ' 0, or∃ref s1 ∈ P, ∃ref s2 ∈ P, s1 6' s2, or∃ref s ∈ P, ∃ref t ∈ N, s ' t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 67/107

Page 449: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

ref types

Jref tK = ref v | v ∈ JtK

In practice equivalent to

EJref tK =

JtK if JtK 6= ∅∅ otherwise

(2)

Deduce the subtyping relation

(∧∧∧

ref s∈P

ref s) ≤ (∨∨∨

ref t∈N

ref t) ⇐⇒∃ref s ∈ P, s ' 0, or∃ref s1 ∈ P, ∃ref s2 ∈ P, s1 6' s2, or∃ref s ∈ P, ∃ref t ∈ N, s ' t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 67/107

Page 450: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

ref types

Jref tK = ref v | v ∈ JtK

In practice equivalent to

EJref tK =

JtK if JtK 6= ∅∅ otherwise

(2)

Deduce the subtyping relation

(∧∧∧

ref s∈P

ref s) ≤ (∨∨∨

ref t∈N

ref t) ⇐⇒∃ref s ∈ P, s ' 0, or∃ref s1 ∈ P, ∃ref s2 ∈ P, s1 6' s2, or∃ref s ∈ P, ∃ref t ∈ N, s ' t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 67/107

Page 451: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 452: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 453: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 454: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 455: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 456: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 457: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

lazy types

If we define t = Int×××t then t ' 0.

Use s = Int×××lazy s.

(µf (Int→s)(x).(x ,lazy (f (x + 1))))0

Jlazy tK = lazy e | e is closed and e : t

But each lazy e is identified by all the possible results it canreturn, namely v | e →∗ v, from which we deduce:

EJlazy tK = P(JtK)

Deduce the subtyping relation(∧∧∧

lazy s∈P lazy s) ≤ (∨∨∨

lazy t∈N lazy t) ⇐⇒∃lazy t ∈ N : ∀P ′ ⊆ P(

∧∧∧lazy s∈P′s) ≤ t

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 68/107

Page 458: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Summarizing

J0K = ∅; J1K = D;Jt1∨∨∨t2K = Jt1K ∪ Jt2K;Jt1∧∧∧t2K = Jt1K ∩ Jt2K;J¬¬¬tK = D\JtK;JtK = ∅ ⇐⇒ EJtK = ∅

where the extensional interpretation associated to J K is defined as:

EJt→→→sK = P(JtK× JsK)EJt×××sK = JtK× JsKEJlazy tK = P(JtK)

EJref tK =

JtK if JtK 6= ∅∅ otherwise

. . .

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 69/107

Page 459: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Summarizing

J0K = ∅; J1K = D;Jt1∨∨∨t2K = Jt1K ∪ Jt2K;Jt1∧∧∧t2K = Jt1K ∩ Jt2K;J¬¬¬tK = D\JtK;JtK = ∅ ⇐⇒ EJtK = ∅

where the extensional interpretation associated to J K is defined as:

EJt→→→sK = P(JtK× JsK)EJt×××sK = JtK× JsKEJlazy tK = P(JtK)

EJref tK =

JtK if JtK 6= ∅∅ otherwise

. . .

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 69/107

Page 460: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

Summary of the theory

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 70/107

Page 461: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 462: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 463: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 464: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 465: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 466: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 467: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

1. Introduction – 2. Semantic subtyping – 3. Algorithms – 4. Language – 5. Extensions – 6. Recap – SBLP ’07

La morale de l’histoire est . . .

If you have a strong semantic intuition of your favorite languageand you want to add set-theoretic ∨∨∨, ∧∧∧, ¬¬¬ types then:

1 Define EJ K for your type constructors so that it matches yoursemantic intuition

2 Find a model (any model). [may be not easy/possible]

3 Use the subtyping relation induced by the model to type yourlanguage: if the intuition was right then the set of values isalso a model, otherwise tweak it. [may be not easy/possible]

4 Use the set-theoretic properties of the model (actually ofEJ K) to decompose the emptyness test for your typeconstructors, and hence derive a subtyping algorithm.

[may be not easy/possible]5 Enjoy.

Part 2: Theoretical Foundations G. Castagna: CDuce, an XML-Oriented Programming Language 71/107

Page 468: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

PART 3: BEYOND XML

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 72/107

Page 469: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 470: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 471: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 472: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 473: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

The subtyping relation is not very rich:- compare the level of nesting of the same constructor- type constructors do not mix

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 474: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

Enrich subtyping by adding type combinators

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 475: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Types for π

In the beginning was the channel type (well, the sorts) . . .

Then came subtyping with its polarities . . .

Enrich subtyping by adding type combinators

Types t ::= b basic types| t×××t products| ch(t) I/O channel type

| ch+(t) input channel type| ch−(t) output channel type

| ¬¬¬t| t∨∨∨t| t∧∧∧t| 0

| 1

boolean combinators

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 73/107

Page 476: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K = htyp

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 477: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K = channels whose shape fits objects of type t htyp

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 478: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K = channels whose shape fits objects of type t htyp

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 479: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K = channels whose shape fits objects of type t htyp

From the viewpoint of subtyping, channels can bedistinguished only on the objects they transport

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 480: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =set of objects of type t htyp

From the viewpoint of subtyping, channels can bedistinguished only on the objects they transport

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 481: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK htyp

From the viewpoint of subtyping, channels can bedistinguished only on the objects they transport

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 482: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

From the viewpoint of subtyping, channels can bedistinguished only on the objects they transport

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 483: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

pth

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 484: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

Jch+(t)K = JsK | s ≤ t pth

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 485: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

Jch+(t)K = JsK | s ≤ t pth

ch−(t) types all channels on which I can write a t-message

otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 486: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

Jch+(t)K = JsK | s ≤ t pth

ch−(t) types all channels on which I can write a t-message

Jch−(t)K = JsK | s ≥ t otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 487: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

Jch+(t)K = JsK | s ≤ t covariance of input channels

ch−(t) types all channels on which I can write a t-message

Jch−(t)K = JsK | s ≥ t contravariance of output chans

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 488: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

Jch+(t)K = JsK | s ≤ t pth

ch−(t) types all channels on which I can write a t-message

Jch−(t)K = JsK | s ≥ t otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 489: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: intuition

A type t denotes the set of objects of type t.

A channel is like a box with a particular shapeThe box can contain only objects that fit that shape

Jch(t)K =JtK invariance of channel types

ch+(t) types all channels on which I expect to read a t-message

Jch+(t)K = JsK | JsK ⊆ JtK pth

ch−(t) types all channels on which I can write a t-message

Jch−(t)K = JsK | JsK ⊇ JtK otp

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 74/107

Page 490: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 491: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 492: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 493: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

We need D = B+ JDK (not straightforward)

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 494: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Then definet ≤ s

def⇐⇒ JtK ⊆ JsK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 495: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Then definet ≤ s

def⇐⇒ JtK ⊆ JsK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 496: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Then definet ≤ s

def⇐⇒ JtK ⊆ JsK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 497: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Set-theoretic model: formal definition

Define J−K : Types → P(D):

Jt1∨∨∨t2K = Jt1K ∪ Jt2K, Jt1∧∧∧t2K = Jt1K ∩ Jt2K,J¬¬¬tK = D \ JtK, J0K = ∅, J1K = D.

Jt1×××t2K = Jt1K×Jt2KJch+(t)K = JsK | JsK ⊆ JtKJch−(t)K = JsK | JsK ⊇ JtK

Then definet ≤ s

def⇐⇒ JtK ⊆ JsK

Some induced equations:

ch−(t)∧∧∧ch+(t) = ch(t)

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

ch−(s)∨∨∨ch−(t) ≤ ch−(s∧∧∧t)

Can be checked graphicallyPart 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 75/107

Page 498: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

s

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 499: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

s t

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 500: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

s t

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 501: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∧∧∧ch−(t) = ch−(s∨∨∨t)

s∨∨∨t

s t

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 502: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∨∨∨ch−(t) ch−(s∧∧∧t)

s t

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 503: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∨∨∨ch−(t) ch−(s∧∧∧t)

s t

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 504: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch−(s)∨∨∨ch−(t) ch−(s∧∧∧t)

s∧∧∧t

s t

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 76/107

Page 505: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Atoms

Checking subtyping is not always so straightforward:

Remember?ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

In some cases the condition to check involves atoms(i.e., types with a singleton interpretation)

Consider:

two types t1 6= t2

t2 ≤ t1

let us try to check the relation above

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 77/107

Page 506: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Atoms

Checking subtyping is not always so straightforward:

Remember?ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

In some cases the condition to check involves atoms(i.e., types with a singleton interpretation)

Consider:

two types t1 6= t2

t2 ≤ t1

let us try to check the relation above

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 77/107

Page 507: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Atoms

Checking subtyping is not always so straightforward:

Remember?ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

In some cases the condition to check involves atoms(i.e., types with a singleton interpretation)

Consider:

two types t1 6= t2

t2 ≤ t1

let us try to check the relation above

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 77/107

Page 508: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Atoms

Checking subtyping is not always so straightforward:

Remember?ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

In some cases the condition to check involves atoms(i.e., types with a singleton interpretation)

Consider:

two types t1 6= t2

t2 ≤ t1

let us try to check the relation above

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 77/107

Page 509: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 510: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 511: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 512: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 513: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

The two sets have these two points in common, namely ch(t1) andch(t2).

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 514: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

The disequation holds if there are no other points in the left handside

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 515: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

ch+(t1)∧∧∧ch−(t2) ≤ ch+(t2)∨∨∨ch−(t1)

t1

t2

It depends on whether t1∧∧∧¬¬¬t2 is atomic: that is whether there isnothing between t1 and t2

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 78/107

Page 516: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Which kind of π-calculus fit these types?

Consider again

ch+(t1)∨∨∨ch+(t2) ch+(t1∨∨∨t2)

Containment is strict, so we want programs that distinguishthese two types

We must be able to dynamically check the type of messagesarriving a channel

Use type-case in read actions.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 79/107

Page 517: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Which kind of π-calculus fit these types?

Consider again

ch+(t1)∨∨∨ch+(t2) ch+(t1∨∨∨t2)

Containment is strict, so we want programs that distinguishthese two types

We must be able to dynamically check the type of messagesarriving a channel

Use type-case in read actions.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 79/107

Page 518: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Which kind of π-calculus fit these types?

Consider again

ch+(t1)∨∨∨ch+(t2) ch+(t1∨∨∨t2)

Containment is strict, so we want programs that distinguishthese two types

We must be able to dynamically check the type of messagesarriving a channel

Use type-case in read actions.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 79/107

Page 519: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Which kind of π-calculus fit these types?

Consider again

ch+(t1)∨∨∨ch+(t2) ch+(t1∨∨∨t2)

Containment is strict, so we want programs that distinguishthese two types

We must be able to dynamically check the type of messagesarriving a channel

Use type-case in read actions.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 79/107

Page 520: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Which kind of π-calculus fit these types?

Consider again

ch+(t1)∨∨∨ch+(t2) ch+(t1∨∨∨t2)

Containment is strict, so we want programs that distinguishthese two types

We must be able to dynamically check the type of messagesarriving a channel

Use type-case in read actions.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 79/107

Page 521: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Channels α ::= x variables| ct channel constants

Processes P ::= α(α) output|

∑i∈I α(x :ti ).Pi guarded input

| P1‖P2 parallel| (νct)P restriction| !P replication

Reduction

cs1(c

t2) ‖

∑i∈I cs

1(x : ti )Pi → Pj [ct2/x ] if ch(t) ≤ tj

Type case

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 80/107

Page 522: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Channels α ::= x variables| ct channel constants

Processes P ::= α(α) output|

∑i∈I α(x :ti ).Pi guarded input

| P1‖P2 parallel| (νct)P restriction| !P replication

Reduction

cs1(c

t2) ‖

∑i∈I cs

1(x : ti )Pi → Pj [ct2/x ] if ch(t) ≤ tj

Type case

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 80/107

Page 523: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Channels α ::= x variables| ct channel constants

Processes P ::= α(α) output|

∑i∈I α(x :ti ).Pi guarded input

| P1‖P2 parallel| (νct)P restriction| !P replication

Reduction

cs1(c

t2) ‖

∑i∈I cs

1(x : ti )Pi → Pj [ct2/x ] if ch(t) ≤ tj

Type case

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 80/107

Page 524: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Channels α ::= x variables| ct channel constants

Processes P ::= α(α) output|

∑i∈I α(x :ti ).Pi guarded input

| P1‖P2 parallel| (νct)P restriction| !P replication

Reduction

cs1(c

ttt2) ‖

∑i∈I cs

1(x : ti )Pi → Pjjj [ct2/x ] if ch(t)ch(t)ch(t) ≤ tjtjtj

Type case

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 80/107

Page 525: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Channels α ::= x variables| ct channel constants

Processes P ::= α(α) output|

∑i∈I α(x :ti ).Pi guarded input

| P1‖P2 parallel| (νct)P restriction| !P replication

Reduction

cs1(c

t2ct2ct2) ‖

∑i∈I cs

1(x : ti )Pi → Pj [ct2/x ] if ch(t) ≤ tj

Type case call-by-value

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 80/107

Page 526: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The π∧,∨-calculus

Channels α ::= x variables| ctctct channel constants

Processes P ::= α(α) output|

∑i∈I α(x :ti ).Pi guarded input

| P1‖P2 parallel| (νct)P restriction| !P replication

Reduction

cs1(c

t2) ‖

∑i∈I cs

1(x : ti )Pi → Pj [ct2/x ] if ch(t) ≤ tj

Type case call-by-value

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 80/107

Page 527: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Encoding λ∧,∨ into π∧,∨.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 81/107

Page 528: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-calculus types

Types τ ::= b basic types| τ×××τ product types| ch+(τ) | ch−(τ) channel types

| ¬¬¬τ| τ∧∧∧τ| τ∨∨∨τ| 0

| 1

bolean combinators

They may be recursive

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 82/107

Page 529: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-calculus types

Trade channels for arrows

Types τ ::= b basic types| τ×××τ product types| ch+(τ) | ch−(τ) channel types

| ¬¬¬τ| τ∧∧∧τ| τ∨∨∨τ| 0

| 1

bolean combinators

They may be recursive

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 82/107

Page 530: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-calculus types

Trade channels for arrows

Types τ ::= b basic types| τ×××τ product types| τ→→→τ arrow types

| ¬¬¬τ| τ∧∧∧τ| τ∨∨∨τ| 0

| 1

bolean combinators

They may be recursive

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 82/107

Page 531: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-calculus types

Trade channels for arrows

Types τ ::= b basic types| τ×××τ product types| τ→→→τ arrow types

| ¬¬¬τ| τ∧∧∧τ| τ∨∨∨τ| 0

| 1

bolean combinators

They may be recursive

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 82/107

Page 532: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 533: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 534: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 535: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 536: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 537: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 538: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 539: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

(σ→→→τ)∧∧∧(σ→→→τ ′) = (σ→→→τ∧∧∧τ ′)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 540: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

(σ→→→τ)∧∧∧(σ→→→τ ′) = (σ→→→τ∧∧∧τ ′)

(σ1∨∨∨σ2)→→→(τ1∧∧∧τ2) (σ1→→→τ1)∧∧∧(σ2→→→τ2)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 541: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

(σ→→→τ)∧∧∧(σ→→→τ ′) = (σ→→→τ∧∧∧τ ′)

(σ1∨∨∨σ2)→→→(τ1∧∧∧τ2) (σ1→→→τ1)∧∧∧(σ2→→→τ2)

Overloading

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 542: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨ set-theoretic model

Define J−K : Types → P(D):

Jτ1∨∨∨τ2K = Jτ1K ∪ Jτ2K, Jτ1∧∧∧τ2K = Jτ1K ∩ Jτ2K,J¬¬¬τK = D \ JτK, J0K = ∅, J1K = D.

Jτ1×××τ2K = Jτ1K×Jτ2K

Jτ1→→→τ2K =Pf(Jτ1K×Jτ2K)

As beforeτ1 ≤ τ2

def⇐⇒ Jτ1K ⊆ Jτ2K

Two interesting equations:

(σ→→→τ)∧∧∧(σ→→→τ ′) = (σ→→→τ∧∧∧τ ′)

(σ1∨∨∨σ2)→→→(τ1∧∧∧τ2) (σ1→→→τ1)∧∧∧(σ2→→→τ2)

Degenerated form of overloading

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 83/107

Page 543: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-terms

Terms e ::= x variable| (e,e) pair| πi (e) projections| ee application

| λV

i σi→→→τi x .e abstraction λV

i σi x

| (e∈τ)?e:e type case (e∈τ)?e:

Overloaded function opposite : (int→→→int)∧∧∧(bool→→→bool)

λ(int→→→int)∧∧∧(bool→→→bool)x .(x ∈int)(−x):(¬x)

Note thatopposite 6∈ (int∨∨∨bool)→→→(int∧∧∧bool︸ ︷︷ ︸

0

)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 84/107

Page 544: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-terms

Terms e ::= x variable| (e,e) pair| πi (e) projections| ee application

| λV

i σi→→→τi x .e abstraction λV

i σi x

| (e∈τ)?e:e type case (e∈τ)?e:

Overloaded function opposite : (int→→→int)∧∧∧(bool→→→bool)

λ(int→→→int)∧∧∧(bool→→→bool)x .(x ∈int)(−x):(¬x)

Note thatopposite 6∈ (int∨∨∨bool)→→→(int∧∧∧bool︸ ︷︷ ︸

0

)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 84/107

Page 545: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-terms

Terms e ::= x variable| (e,e) pair| πi (e) projections| ee application

| λV

i σi→→→τi x .e abstraction λV

i σi x

| (e∈τ)?e:e type case (e∈τ)?e:

Overloaded function opposite : (int→→→int)∧∧∧(bool→→→bool)

λ(int→→→int)∧∧∧(bool→→→bool)x .(x ∈int)(−x):(¬x)

Note thatopposite 6∈ (int∨∨∨bool)→→→(int∧∧∧bool︸ ︷︷ ︸

0

)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 84/107

Page 546: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

λ∧,∨-terms

Terms e ::= x variable| (e,e) pair| πi (e) projections| ee application

| λV

i σi→→→τi x .e abstraction λV

i σi x

| (e∈τ)?e:e type case (e∈τ)?e:

Overloaded function opposite : (int→→→int)∧∧∧(bool→→→bool)

λ(int→→→int)∧∧∧(bool→→→bool)x .(x ∈int)(−x):(¬x)

Note thatopposite 6∈ (int∨∨∨bool)→→→(int∧∧∧bool︸ ︷︷ ︸

0

)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 84/107

Page 547: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The broken but instructive encoding

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 85/107

Page 548: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Functions as processes

Milner’s encoding:

xα = α(x)

λx .eα = (ν f )(α(f ) ‖ !(f (x , b).eb))

e1e2α = (ν a)(ν b)(e1a ‖ a(w).(e2b ‖ b(h).w(h, α)))

Intuition:

A function is called by providing an input and a channel onwhich the output should be returned

Akin to CPS transform

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 86/107

Page 549: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The encoding of types

All types can be encoded homomorphically

σ×××τ = σ×××τ

σ∧∧∧τ = σ∧∧∧τ

...

Except arrow types:

σ→→→τ = ch−(σ×××ch−(τ))

A function is represented by a channel on which one can send theinput value and the return channel

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 87/107

Page 550: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Problem

The encoding of types does not respect the equations

We have

σ→→→(τ1∧∧∧τ2) = (σ→→→τ1)∧∧∧(σ→→→τ2)

but

σ→→→(τ1∧∧∧τ2) (σ→→→τ1)∧∧∧(σ→→→τ2)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 88/107

Page 551: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Problem

The encoding of types does not respect the equations

Technically the problem is in the inequation

ch−(s∧∧∧t) ch−(s)∨∨∨ch−(t)

that implies

σ→→→(τ1∧∧∧τ2) (σ→→→τ1)∧∧∧(σ→→→τ2)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 88/107

Page 552: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Problem

The reason is “output-based” overloading

A λ∧,∨-function does type-case matching only on input:

σ→→→(τ1∧∧∧τ2) = (σ→→→τ1)∧∧∧(σ→→→τ2)

Encoding can perform type-case on the expected output too

σ→→→(τ1∧∧∧τ2) (σ→→→τ1)∧∧∧(σ→→→τ2)

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 89/107

Page 553: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

The working encoding

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 90/107

Page 554: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Toward a solution

We want to stay as close as possible to Milner’s encoding:

σ→→→τ = ch−(σ×××ch−(τ))

where:

1. ch−(t) ≤ chλ(t) it can transport return channels

2. chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t)

3. s ≤ t ⇐⇒ chλ(t) ≤ chλ(s)

it preserves type equations

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 91/107

Page 555: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Toward a solution

We want to stay as close as possible to Milner’s encoding:

σ→→→τ = ch−(σ×××chλ(τ))

where:

1. ch−(t) ≤ chλ(t) it can transport return channels

2. chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t)

3. s ≤ t ⇐⇒ chλ(t) ≤ chλ(s)

it preserves type equations

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 91/107

Page 556: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Toward a solution

We want to stay as close as possible to Milner’s encoding:

σ→→→τ = ch−(σ×××chλ(τ))

where:

1. ch−(t) ≤ chλ(t) it can transport return channels

2. chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t)

3. s ≤ t ⇐⇒ chλ(t) ≤ chλ(s)

it preserves type equations

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 91/107

Page 557: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Toward a solution

We want to stay as close as possible to Milner’s encoding:

σ→→→τ = ch−(σ×××chλ(τ))

where:

1. ch−(t) ≤ chλ(t) it can transport return channels

2. chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t)

3. s ≤ t ⇐⇒ chλ(t) ≤ chλ(s)

it preserves type equations

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 91/107

Page 558: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Toward a solution

We want to stay as close as possible to Milner’s encoding:

σ→→→τ = ch−(σ×××chλ(τ))

where:

1. ch−(t) ≤ chλ(t) it can transport return channels

2. chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t)

3. s ≤ t ⇐⇒ chλ(t) ≤ chλ(s)

it preserves type equations

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 91/107

Page 559: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Toward a solution

We want to stay as close as possible to Milner’s encoding:

σ→→→τ = ch−(σ×××chλ(τ))

where:

1. ch−(t) ≤ chλ(t) it can transport return channels

2. chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t)

3. s ≤ t ⇐⇒ chλ(t) ≤ chλ(s)

it preserves type equations

Does it exist?

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 91/107

Page 560: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 561: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t); must distribute on intersections2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 562: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t); must distribute on intersections2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 563: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s); must be contravariant3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 564: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s); must be contravariant3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 565: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t); must contain the channel type

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 566: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t); must contain the channel type

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 567: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 568: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Key point

chλ(t) adds to ch−(t) all channels that can send values both insideand outside t. That is, all the channels for which the result ofchecking if their messages are of type t cannot be predicted.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 569: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

Define chλ(t) as(¬¬¬ch−(¬¬¬t)∨∨∨ch(1))

1 chλ(s∧∧∧t) = chλ(s)∨∨∨chλ(t);2 s ≤ t ⇐⇒ chλ(t) ≤ chλ(s);3 ch−(t) ≤ chλ(t);

Observe:

Jchλ(t)\ch−(t)K = cs | t 6≤ s & ¬¬¬t 6≤ s ∪ c1

Type obfuscation

λ-channels introduce some latent noise that makes it impossible todetermine which (output) type they encode

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 92/107

Page 570: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

This is why it works.

It rules out “output-based” overloading functions

It is impossible to test whether a channel of typechλ(s)∨∨∨chλ(t) was meant to be of type chλ(s) or chλ(t);

The caller can in principle confuse such functions(by using a channel that is in chλ(t) \ ch−(t))

Callers don’t do it, but types must reflect this

Type obfuscation

λ-channels introduce some latent noise that makes it impossible todetermine which (output) type they encode

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 93/107

Page 571: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Definition of chλ(−)

This is why it works.

It rules out “output-based” overloading functions

It is impossible to test whether a channel of typechλ(s)∨∨∨chλ(t) was meant to be of type chλ(s) or chλ(t);

The caller can in principle confuse such functions(by using a channel that is in chλ(t) \ ch−(t))

Callers don’t do it, but types must reflect this

Like the Police in Utopia

Everybody behaves well in Utopia, but the Police is the visible rep-resentation of the fact the everybody behaves well

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 93/107

Page 572: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Encoding of types

A map− : Tλ → Tπ

0 = 0, 1 = 1

¬¬¬τ = ¬¬¬τσ∨∨∨τ = σ∨∨∨τ, σ∧∧∧τ = σ∧∧∧τσ×××τ = σ×××τσ→→→τ = ch−(σ×××chλ(τ))

Theorem

Let σ and τ be λ∧,∨-types, then:σ ≤ τ ⇐⇒ σ ≤ τ.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 94/107

Page 573: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Encoding of terms

A glance at the encoding

(e∈ t)?e1:e2α =(ν a)((a(x :t).e1α + a(x :¬¬¬t).e2α) ‖ ea)

oppositeα =(ν f )(α(f ) ‖ f (x :int, b:ch−(int)).−xb

+f (x :bool, b:ch−(bool)).¬¬¬xb

+f (x :int∨∨∨bool, b:“noise”).0

Recall the type of opposite is (int→→→int)∧∧∧(bool→→→bool)

“noise” = (chλ(int) \ ch−(int))∨∨∨(chλ(bool) \ ch−(bool))

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 95/107

Page 574: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

Correctness

Theorem

The encoding preserves typability

Theorem

The encoding preserves behaviour:If e −→∗ v, then ec −→∗∼= vc 6−→∗

If e diverges, then so ec does.

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 96/107

Page 575: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

So what?

Contribution: yet another encoding!

However

it shows the relevance of semantic subtyping

it is a study of overloading and CPS

the encoded function has more power(emphasized by the presence of type case)

introduction of “type obfuscation” technique

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 97/107

Page 576: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

So what?

Contribution: yet another encoding!

However

it shows the relevance of semantic subtyping

it is a study of overloading and CPS

the encoded function has more power(emphasized by the presence of type case)

introduction of “type obfuscation” technique

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 97/107

Page 577: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

So what?

Contribution: yet another encoding!

However

it shows the relevance of semantic subtyping

it is a study of overloading and CPS

the encoded function has more power(emphasized by the presence of type case)

introduction of “type obfuscation” technique

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 97/107

Page 578: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

2. Graphical subtyping — 3. π∧,∨-calculus — 4. λ∧,∨-calculus — 5. The encoding SBLP ’07

So what?

Contribution: yet another encoding!

However

it shows the relevance of semantic subtyping

it is a study of overloading and CPS

the encoded function has more power(emphasized by the presence of type case)

introduction of “type obfuscation” technique

Part 3: Beyond XML G. Castagna: CDuce, an XML-Oriented Programming Language 97/107

Page 579: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

PART 4: CONCLUSION

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 98/107

Page 580: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 581: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 582: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 583: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 584: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 585: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 586: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 587: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 588: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Conclusion

Regexp patterns start from two simple ideas:Use the same constructors for types and valueDefine patterns as types with capture variables

Tightly connected with boolean combinators,make several aspects programmer-friendly:

Semantic types are set of values, and unions, intersections,and differences behave set-theoretically.Concepts are easier for the programmer (e.g. subtyping)Informative error messages.Precise and powerful specification language

Several benefits:Types yield highly efficient runtime: in main memory itoutperforms efficiency-oriented XQuery processors such asQizx and Qexo [XMark and XQuery Use Cases benchmarks].High precision in typing queries, iterators, complex transformations.Multiple usages without the need of introducing new specificformalisms (error mining, data pruning, logical optimisations,constraint specifications,. . . )

Part 4: Conclusion G. Castagna: CDuce, an XML-Oriented Programming Language 99/107

Page 589: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

PART 5: REFERENCES

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 100/107

Page 590: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References

On the web

www.cduce.org. Distribution, documentations, tutorials, mailing lists,tips and tricks,. . .

Um curso de programacao CDuce, em Portugues, esta disponıvel naUniversidade Nova de Lisboa

Language

V. Benzaken, G. Castagna, and A. Frisch:CDuce: an XML-Centric General-Purpose Language. In ICFP ’03, ACMPress, 2003.

H. Hosoya, A. Frisch, and G. Castagna:Parametric Polymorphism for XML. In POPL ’05, ACM Press, 2005.

G. Castagna, D. Colazzo, and A. Frisch:Error Mining for Regular Expression Patterns. In ICTCS 2005, LNCSn.3701, Springer, 2005.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 101/107

Page 591: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References

On the web

www.cduce.org. Distribution, documentations, tutorials, mailing lists,tips and tricks,. . .

Um curso de programacao CDuce, em Portugues, esta disponıvel naUniversidade Nova de Lisboa

Language

V. Benzaken, G. Castagna, and A. Frisch:CDuce: an XML-Centric General-Purpose Language. In ICFP ’03, ACMPress, 2003.

H. Hosoya, A. Frisch, and G. Castagna:Parametric Polymorphism for XML. In POPL ’05, ACM Press, 2005.

G. Castagna, D. Colazzo, and A. Frisch:Error Mining for Regular Expression Patterns. In ICTCS 2005, LNCSn.3701, Springer, 2005.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 101/107

Page 592: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References (continued)

Theory

G. Castagna and A. Frisch: A gentle introduction to semantic subtyping.

In PPDP ’05, ACM Press (full version) and ICALP ’05, LNCS n. 3580,Springer (summary), 2005. Joint ICALP-PPDP keynote talk.

A. Frisch, G. Castagna, and V. Benzaken: Semantic Subtyping. InLICS ’02, IEEE Computer Society Press, 2002.

G. Castagna:Semantic subtyping: challenges, perspectives, and open problems. InICTCS 2005, LNCS 3701, Springer, 2005.

Queries

V. Benzaken, G. Castagna, and C. Miachon:A Full Pattern-based Paradigm for XML Query Processing. In PADL ’05,LNCS n.3350, Springer, January, 2005.

G. Castagna: Patterns and types for querying XML. In Proceedings of

DBPL 2005, LNCS n.3774 (full version) and XSym 2005, LNCS n.3671(summary), Springer, 2005. Joint invited talk.

V. Benzaken G. Castagna, D. Colazzo, and K. Nguyen:Type-Based XML Projection. In VLDB 2006, pag.271-282, 2006.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 102/107

Page 593: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References (continued)

Theory

G. Castagna and A. Frisch: A gentle introduction to semantic subtyping.

In PPDP ’05, ACM Press (full version) and ICALP ’05, LNCS n. 3580,Springer (summary), 2005. Joint ICALP-PPDP keynote talk.

A. Frisch, G. Castagna, and V. Benzaken: Semantic Subtyping. InLICS ’02, IEEE Computer Society Press, 2002.

G. Castagna:Semantic subtyping: challenges, perspectives, and open problems. InICTCS 2005, LNCS 3701, Springer, 2005.

Queries

V. Benzaken, G. Castagna, and C. Miachon:A Full Pattern-based Paradigm for XML Query Processing. In PADL ’05,LNCS n.3350, Springer, January, 2005.

G. Castagna: Patterns and types for querying XML. In Proceedings of

DBPL 2005, LNCS n.3774 (full version) and XSym 2005, LNCS n.3671(summary), Springer, 2005. Joint invited talk.

V. Benzaken G. Castagna, D. Colazzo, and K. Nguyen:Type-Based XML Projection. In VLDB 2006, pag.271-282, 2006.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 102/107

Page 594: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References (end)

Implementation

A. Frisch Regular tree language recognition with static information InTCS 2004 LNCS Springer.

A. Frisch, and L. Cardelli Greedy regular expression matching. In ICALP2004 LNCS Springer.

Concurrency

G. Castagna, R. De Nicola, and D. Varacca:Semantic subtyping for the Pi-calculus. In LICS ’05, IEEE ComputerSociety Press, 2005.

G. Castagna, M. Dezani-Ciancaglini, and D. Varacca:Encoding CDuce into the Pi-calculus. In CONCUR 200, LNCS n.4137,LNCS, Springer, 2006.

Security

V. Benzaken, M. Burelle, and G. Castagna:Information flow security for XML transformations. In ASIAN ’03, LNCSn.2896, LNCS, Springer, December, 2003.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 103/107

Page 595: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References (end)

Implementation

A. Frisch Regular tree language recognition with static information InTCS 2004 LNCS Springer.

A. Frisch, and L. Cardelli Greedy regular expression matching. In ICALP2004 LNCS Springer.

Concurrency

G. Castagna, R. De Nicola, and D. Varacca:Semantic subtyping for the Pi-calculus. In LICS ’05, IEEE ComputerSociety Press, 2005.

G. Castagna, M. Dezani-Ciancaglini, and D. Varacca:Encoding CDuce into the Pi-calculus. In CONCUR 200, LNCS n.4137,LNCS, Springer, 2006.

Security

V. Benzaken, M. Burelle, and G. Castagna:Information flow security for XML transformations. In ASIAN ’03, LNCSn.2896, LNCS, Springer, December, 2003.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 103/107

Page 596: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

References (end)

Implementation

A. Frisch Regular tree language recognition with static information InTCS 2004 LNCS Springer.

A. Frisch, and L. Cardelli Greedy regular expression matching. In ICALP2004 LNCS Springer.

Concurrency

G. Castagna, R. De Nicola, and D. Varacca:Semantic subtyping for the Pi-calculus. In LICS ’05, IEEE ComputerSociety Press, 2005.

G. Castagna, M. Dezani-Ciancaglini, and D. Varacca:Encoding CDuce into the Pi-calculus. In CONCUR 200, LNCS n.4137,LNCS, Springer, 2006.

Security

V. Benzaken, M. Burelle, and G. Castagna:Information flow security for XML transformations. In ASIAN ’03, LNCSn.2896, LNCS, Springer, December, 2003.

Part 5: References G. Castagna: CDuce, an XML-Oriented Programming Language 103/107

Page 597: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

PART 5: ADDITIONAL SLIDES

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 104/107

Page 598: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 1: a model may not exist

t = int ∨∨∨ (ref(int) ∧∧∧ ref(t))

Is t equal to int?

t = int ⇐⇒ (ref(int) ∧∧∧ ref(t)) = ∅ ⇐⇒ t 6= int

but also

t 6= int ⇐⇒ (ref(int) ∧∧∧ ref(t)) 6= ∅ ⇐⇒ t = int

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 105/107

Page 599: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 1: a model may not exist

t = int ∨∨∨ (ref(int) ∧∧∧ ref(t))

Is t equal to int?

t = int ⇐⇒ (ref(int) ∧∧∧ ref(t)) = ∅ ⇐⇒ t 6= int

but also

t 6= int ⇐⇒ (ref(int) ∧∧∧ ref(t)) 6= ∅ ⇐⇒ t = int

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 105/107

Page 600: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 1: a model may not exist

t = int ∨∨∨ (ref(int) ∧∧∧ ref(t))

Is t equal to int?

t = int ⇐⇒ (ref(int) ∧∧∧ ref(t)) = ∅ ⇐⇒ t 6= int

but also

t 6= int ⇐⇒ (ref(int) ∧∧∧ ref(t)) 6= ∅ ⇐⇒ t = int

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 105/107

Page 601: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 2: the real abstr typing rule

t ≡ (∧∧∧

i=1..n si→→→ti )\(∨∨∨

j=1..m s ′j→→→t ′j ) 6≤ 0

(∀i) Γ, (f : t), (x : si) ` e : ti

Γ ` µf (s1→→→t1;...;sn→→→tn)(x).e : t(abstr)

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 106/107

Page 602: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 3: A different definition for EJ K

Note that according to the previous EJ K:

s → t ≤ 1→ 1 (3)

Every application is well typed. Add a distinguished Ω to denote aruntime type error, modify

EJt→→→sK = f ⊆ D×(D∪Ω) | ∀(d1, d2) ∈ f . d1 ∈ JtK ⇒ d2 ∈ JsK

(3) no longer holds since the constant map ¬¬¬s 7→ Ω, is in the lefthand type but not in the right one.∧∧∧

i∈I (ti→→→si ) ≤∨∨∨

j∈J(t′j→→→s ′j ) ⇐⇒

∃j ∈ J.

t ′j ≤

∨∨∨i∈I ti ∧

∀I ′ ⊆ I . (t ′j ≤∨∨∨

i∈I ′ ti ) ∨ (∧∧∧

i∈I\I ′ si ≤ s ′j )

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 107/107

Page 603: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 3: A different definition for EJ K

Note that according to the previous EJ K:

s → t ≤ 1→ 1 (3)

Every application is well typed. Add a distinguished Ω to denote aruntime type error, modify

EJt→→→sK = f ⊆ D×(D∪Ω) | ∀(d1, d2) ∈ f . d1 ∈ JtK ⇒ d2 ∈ JsK

(3) no longer holds since the constant map ¬¬¬s 7→ Ω, is in the lefthand type but not in the right one.∧∧∧

i∈I (ti→→→si ) ≤∨∨∨

j∈J(t′j→→→s ′j ) ⇐⇒

∃j ∈ J.

t ′j ≤

∨∨∨i∈I ti ∧

∀I ′ ⊆ I . (t ′j ≤∨∨∨

i∈I ′ ti ) ∨ (∧∧∧

i∈I\I ′ si ≤ s ′j )

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 107/107

Page 604: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 3: A different definition for EJ K

Note that according to the previous EJ K:

s → t ≤ 1→ 1 (3)

Every application is well typed. Add a distinguished Ω to denote aruntime type error, modify

EJt→→→sK = f ⊆ D×(D∪Ω) | ∀(d1, d2) ∈ f . d1 ∈ JtK ⇒ d2 ∈ JsK

(3) no longer holds since the constant map ¬¬¬s 7→ Ω, is in the lefthand type but not in the right one.∧∧∧

i∈I (ti→→→si ) ≤∨∨∨

j∈J(t′j→→→s ′j ) ⇐⇒

∃j ∈ J.

t ′j ≤

∨∨∨i∈I ti ∧

∀I ′ ⊆ I . (t ′j ≤∨∨∨

i∈I ′ ti ) ∨ (∧∧∧

i∈I\I ′ si ≤ s ′j )

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 107/107

Page 605: CDuce, an XML-Oriented Programming Language: From Theory ...gc/slides/sblp07-slides.pdf · Several tools: graphical queries, code embedding (`a la php) Part 1: XML Programming in

logoP7

SBLP ’07

Addendum 3: A different definition for EJ K

Note that according to the previous EJ K:

s → t ≤ 1→ 1 (3)

Every application is well typed. Add a distinguished Ω to denote aruntime type error, modify

EJt→→→sK = f ⊆ D×(D∪Ω) | ∀(d1, d2) ∈ f . d1 ∈ JtK ⇒ d2 ∈ JsK

(3) no longer holds since the constant map ¬¬¬s 7→ Ω, is in the lefthand type but not in the right one.∧∧∧

i∈I (ti→→→si ) ≤∨∨∨

j∈J(t′j→→→s ′j ) ⇐⇒

∃j ∈ J.

t ′j ≤

∨∨∨i∈I ti ∧

∀I ′ ⊆ I . (t ′j ≤∨∨∨

i∈I ′ ti ) ∨ (∧∧∧

i∈I\I ′ si ≤ s ′j )

Part 5: ADDENDA G. Castagna: CDuce, an XML-Oriented Programming Language 107/107