1 semântica de ações ações básicas, ações funcionais e notação de dados

42
1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

Upload: internet

Post on 19-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

1

Semântica de Ações

Ações Básicas, Ações Funcionais e Notação de Dados

Page 2: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

2

Notação de Ações Básica

ações básicas são usadas para especificar fluxo de controle

ações básicas não estão relacionadas com nenhuma espécie de informação corrente

a execução de uma ação consiste de passos atômicos de execução, feitos por um ou mais agentes

consideraremos um único agente

Page 3: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

3

Ações Básicas

ações primitivascomplete : action .escape : action .fail : action .diverge : action .commit : action .unfold : action .

Page 4: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

4

Ações Básicas (cont.)

combinadores de açõesunfolding _ :: action -> action ._ or _ :: action, action -> action ._ and _ :: action, action -> action ._ and then _ :: action, action -> action .

Page 5: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

5

Exemplos de Ações Básicas

completecomplete or failcomplete and then failunfolding (unfold or fail)

Page 6: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

6

Semântica da Notação de Ações

Regras de Inferência (Semântica Natural)

antecedente1 antecedente2 ... antecedenten

consequente

Açõest, b, s |- a > o, t’, b’, s’

Produtorest, b, s |- y > d

Page 7: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

Semântica das Ações Básicast, b, s |- complete > completed, (), {}, s

t, b, s |- a1 > completed, t1, b1, s1 t, b, s1 |- a2 > completed, t2, b2, s2

mergeable b1 b2

t, b, s |- a1 and a2 > completed, t1 ^ t2, b1 + b2, s2

(COMPLETE)

(AND-3)

(AND-2)

(AND-1)

t, b, s |- a1 > o1, t1, b1, s1 o1 <> completed

t, b, s |- a1 and a2 > o1, t1, b1, s1

t, b, s |- a1 > completed, t1, b1, s1 t, b, s1 |- a2 > o2, t2, b2, s2

o2 <> completed

t, b, s |- a1 and a2 > o2, t2, b2, s2

t, b, s |- fail > failed, (), {}, s (FAIL)

Page 8: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

8

Comandos

/NanoSpecimen/Abstract Syntax/Comandos

grammar:(1) Comando = [[ Identificador := Expressão ]]

| [[ while Expressão do Comando end ]]| [[ local Declaração in Comando end ]]| [[ Comando ; Comando ]] .

Page 9: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

/NanoSpecimen/Semantic Functions/Comandos

introduces: execute _ .

execute _ :: Comando -> action .

(1) ...

(2) execute [[ while E:Expressão do C:Comando ]] =unfolding

| | evaluate E| then| | | check (it is 1) and then execute C and then unfold| | or| | | check not (it is 1) .

Page 10: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

(3) …

(4) execute [[ C1:Comando ; C2:Comando ]] =execute C1 and then execute C2 .

Page 11: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

11

Notação de Ações Funcional

açõesgive _ :: yielder -> action .regive : action .choose _ :: yielder -> action .check _ :: yielder -> action ._ then _ :: action, action -> action .

produtoresgiven _ :: data -> yielder .given _ # _ :: datum, positive-integer -> yielder .it : yielder .

Page 12: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

12

Exemplos de Ações Funcionais

give 5give sum(3,4)choose a natural(check true and then give 1) or (check not true

and then give 0)

Page 13: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

Semântica das Ações Funcionais

t, b, s |- y > d

t, b, s |- give y > completed, (d), {}, s

t, b, s |- a1 > completed, t1, b1, s1 t1, b, s1 |- a2 > completed, t2, b2, s2

t, b, s |- a1 then a2 > completed, t2, b1 + b2, s2

(GIVE)

(THEN-3)

(THEN-2)

(THEN-1)

t, b, s |- a1 > o1, t1, b1, s1 o1 <> completed

t, b, s |- a1 then a2 > o1, t1, b1, s1

t, b, s |- a1 > completed, t1, b1, s1 t1, b, s1 |- a2 > o2, t2, b2, s2

o2 <> completed

t, b, s |- a1 then a2 > o2, t2, b2, s2

Page 14: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

/NanoSpecimen/Abstract Syntax/Expressões

grammar: Expressão = Numeral-Inteiro

| Identificador| [[ if Expressão then Expressão else Expressão ]]| [[ Identificador ( Expressão ) ]]| [[ Expressão Operador Expressão ]]| [[ ( Expressão ) ]] .

Operador = + | - | * | / | = | < .

Page 15: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

/NanoSpecimen/Semantic Functions/Expressões

introduces: avalie _ .

avalie _ :: Expressão -> action .

(1) avalie N:Numeral-Inteiro = give the valor-de N .

(2) avalie I:Identificador =| give the integer bound to token-de Ior| give the integer stored in the cell bound to token-de I .

(3) avalie [[ I:Identificador ( E:Expressão ) ]] =| avalie Ethen| enact (application of the abstraction bound to token-de I

to the given integer) .

Page 16: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

(4) avalie [[if E1:Expressão then E2:Expressão else E3:Expressão ]] =| avalie E1

then| | (check it is true) and then avalie E2

| or| | (check not(it is true) and then avalie E3 .

(5) avalie [[ E1:Expressão O:Operador E2:Expressão ]] =| avalie E1 and avalie E2

then| apliqueOperador O .

(6) avalie [[ ( E:Expressão ) ]] = avalie E .

Page 17: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

/NanoSpecimen/Semantic Functions/Operadores

introduces: aplicaOperador _ .

aplicaOperador _ :: Operador -> action .

(1) aplicaOperador “+” =give sum(the given integer#1, the given integer#2) .

(2) aplicaOperador “-” =give difference(the given integer#1, the given integer#2) .

(3) aplicaOperador “*” =give product(the given integer#1, the given integer#2) .

(4) aplicaOperador “/” =give quotient(the given integer#1, the given integer#2) .

Page 18: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

(5) aplicaOperador “=“ = | check (the given integer#1 is the given integer#2)| and then give 1or| check not(the given integer#1 is the given integer#2)| and then give 0 .

(6) aplicaOperador “<“ = | check (the given integer#1 is less than the given integer#2)| and then give 1or| check not(the given integer#1 is less than the given integer#2)| and then give 0 .

Page 19: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

19

Notação de Dados

Page 20: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

20

Notação de Dados

General.

Instant.

Tuples.

Truth-Values.

Numbers.

Characters.

Lists.

Strings.

Syntax.

Sets.

Maps.

Page 21: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

21

Tuplas

Genericscomponent = .

Basicstuple > component.

() : tuple.

( _ , _ ) :: tuple, tuple tuple (total, associative, unit is ()).

_? :: tuple -> tuple .

_ * :: tuple -> tuple .

_ + :: tuple -> tuple .

_ - :: tuple, natural -> tuple .

Page 22: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

22

Tuplas (cont.)

Specificscount _ :: tuple -> natural (total)._ is _ :: tuple, tuple -> truth-value (partial).

Page 23: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

23

Booleanos (Truth-Values)

Basics truth-value = true | false (individual).

Specifics if _ then _ else_ :: truth-value, x, y -> x | y (linear) .when _ then _ :: truth-value, x - > x (partial) . there is _ :: x -> truth-value (total) .not _ :: truth-value -> truth-value (total) .both _ :: (truth-value,truth-value) -> truth-value .either _ :: (truth-value,truth-value) -> truth-value .

Page 24: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

24

Números Naturais

Basics natural = 0 | positive-integer (disjoint). 0 : natural. successor _ :: natural positive-integer (total, injective).

Specifics 1, 2, 3, 4, 5, 6, 7, 8, 9 : natural. _0, _1, _2, _3, _4, _5, _6, _7, _8, _9 : natural natural (total). sum _ :: natural* natural (total, associative, commutative, unit is 0). product _ :: natural* natural (total, associative, commutative, unit is 1).

Page 25: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

25

Números Inteiros

Basics integer = 0 | nonzero-integer (disjoint).nonzero-integer = positive-integer | negative-integer (disjoint). successor _ :: integer integer (total, injective).predecessor _ :: integer integer (total, injective).

Specificsnegation _ :: integer integer (total).absolute _ :: integer integer (total).difference _ :: (integer, integer) integer (total).

Page 26: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

26

Caracteres

Basicscharacter = .character of _ :: natural -> character (partial, injective) .code _ :: character -> natural (total, injective) .

Alphanumericscharacter >= digit | letter (disjoint) .digit = ‘0’ | ‘1’ | ... | ‘9’ (individual) . letter = lowercase letter | uppercase letter (disjoint) . lowercase _ :: character -> character (total).uppercase _ :: character -> character (total).

Page 27: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

27

Caracteres (cont.)

ASCIIcode _ :: character -> natural [max octal “177”] (total) .character = graphic-character | control-character .

Page 28: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

28

Generics item = .

Basics flat-list = list of item*. list of _ :: item* flat-list (total, injective).

Specifics _ [_] :: flat-list, item flat-list. items _ :: flat-list items* (total, injective). head _ :: flat-list item (partial). tail _ :: flat-list flat-list (partial). empty-list : flat-list. concatenation _ :: flat-list* flat-list (total, associative, unit is empty-list).

Listas Não-aninhadas

Page 29: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

29

Generics leaf = item | .

Basics list = list of tree* . tree = leaf | list (disjoint) . list of _ :: tree* -> list (total, injective) .

Listas Aninhadas

Page 30: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

30

Listas Aninhadas (cont.)

Specifics _ [ _ ] :: list, tree -> list . branches _ :: list -> tree* (total, injective) . leaves _ :: head _ :: tail _ :: empty-list : list . concatenation _ :: list* -> list (total, associative, unit is empty-list) .

Page 31: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

31

Basics character item. string = flat-list [character]. string of _ :: character* string (total, injective). characters _ :: string character* (total, injective). ““ : string. _ ^ _ :: string, string string (total, associative, unit is ““).

Alphanumerics lowercase _ :: string string (total). uppercase _ :: string string (total). decimal _ :: string of digit+ natural (total). octal _ :: string of octal-digit+ natural (total). octal-digit = ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’.

Strings

Page 32: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

32

Basics syntax-tree = character | list [syntax-tree] (disjoint) .

Specifics [[ ]] : syntax-tree. [[ _ ]] :: syntax-tree* syntax-tree (total) . [[ _ _ ]] :: syntax-tree*, syntax-tree* syntax-tree (total) .

... : syntax-tree* . : syntax-tree* syntax-tree (total) . : syntax-tree*, syntax-tree* syntax-tree (total) .

...

Sintaxe (Árvores Sintáticas)

Page 33: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

33

Generics nonset-element = . _ is _ :: nonset-element, nonset-element truth-value (total).

Basics set = set of element*. element = nonset-element | set (disjoint). set of _ :: element* set (individual).

Conjuntos

Page 34: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

34

Conjuntos (cont.)

Specifics_ [ _ ] :: set, element set.elements _ :: set element* (strict, linear).empty-set : set._ [in _ ] :: element, set element (partial)._ [not in _] :: element, set element (partial).

Page 35: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

35

Generics nonmap-range = .

Basics map = disjoint-union (map of element to range)*. range = nonmap-range | map (disjoint). map of _ to _ :: element, range map (total, injective). empty-map : map. disjoint-union _ :: map* map

(partial, associative, commutative, unit is empty-map) . mapped-set _ :: map -> set (total) .

Mapeamentos

Page 36: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

36

Mapeamentos (cont.)

Specifics _ [ _ to _ ] :: set, element set . _ at _ :: map, element range (partial) . overlay _ :: map* map (total, associative, idempotent,

unit is empty-map) . _ restricted to _ :: map, set -> map (total) . _ omitting _ :: map, set -> map (total) .

Page 37: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

37

Action Notation/Basic/Data

includes: Data Notation/General . datum <= component . datum >= truth-value | rational | character | list | set | map |

abstraction (disjoint) . distinct-datum <= datum . distinct-datum >= truth-value | rational | character |

list [distinct-datum] | set [distinct-datum] | map [distinct-datum to distinct-datum] .

includes: Data Notation/Instant/Distinction (distinct-datum for s). data = datum* . a _, an _, the _, of _, some _ :: data -> data (total) .

Page 38: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

38

Algumas Inclusões entre Sortes de Dados Padrões

tuple

item

truth-value

component

flat-listcharacter

string

set

approximation

map

range

tree

nonmap-range

listsyntax-tree

positive-rationalnatural

0

nonzero-rationalleaf

integer

rational

letterdigit

element

nonset-element

graphic-charactercontrol-character

nonzero-integer negative-rational

negative-integerpositive-integer

Page 39: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

/NanoSpecimen/Abstract Syntax

needs: DataNotation/Characters/ASCII (letter, digit)closed.grammar:

Identificadores

Identificador = letter | Identificador letter | Identificador digit .

Literais

Numeral-Inteiro = digit | Numeral-Inteiro digit .

Page 40: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

/NanoSpecimen/Semantic Functions/Identificadores

introduces: token-de _ .

token-de _ :: Identificador -> token .

(1) token-de I:Identificador = I .

/NanoSpecimen/Semantic Functions/Literais

introduces: valor-de _ .

valor-de _ :: Numeral-Inteiro -> integer .

(1) valor-de [[ 0 ]] = 0 . ...

(10) valor-de [[ 9 ]] = 9 .

(11) valor-de [[ N D ]] = sum (product (valor-de N, 10), valor-de D) .

Page 41: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

41

Resumo/Notação de Dados

A notação de tuplas inclui uma forma de expressões regulares.

Tuplas são usadas para prover operações com um número arbitrário de argumentos.

Vários sortes, como component, são deixados abertos para uma especialização quando necessária.

Caracteres podem ser especializados para qualquer conjunto de caracteres desejado, como ASCII, por exemplo.

Page 42: 1 Semântica de Ações Ações Básicas, Ações Funcionais e Notação de Dados

42

Resumo/Notação de Dados

Listas, conjuntos e mapeamentos podem ser aninhados, enquanto tuplas podem ser só concatenadas.

Árvores sintáticas têm unicamente caracteres como ramos. Strings são listas planas de caracteres, por isso também árvores sintáticas.