• Nenhum resultado encontrado

Sistemas de Tipos. Cristiano Damiani Vasconcellos.

N/A
N/A
Protected

Academic year: 2021

Share "Sistemas de Tipos. Cristiano Damiani Vasconcellos."

Copied!
24
0
0

Texto

(1)

Sistemas de Tipos

Cristiano Damiani Vasconcellos

[email protected]

Departamento de Ciˆencia da Computa¸c˜ao Universidade do Estado de Santa Catarina

(2)

Tipos

Tipos: Cole¸c˜ao de valores ou objetos que possuem alguma proprie-dade em comum.

Na matem´atica, tipos imp˜oe restri¸c˜oes que evitam paradoxos. Uni-versos n˜ao tipados apresentam inconsistˆencias l´ogicas tais como o paradoxo de Russell.

(3)
(4)

Tipos

Linguagens que n˜ao definem um intervalo de valores que uma vari´avel pode armazenar s˜ao classificadas como n˜ao tipadas. Essas lingua-gens suportam um ´unico tipo que representa todos os valores. λ-c´alculo ´e um exemplo extremo de linguagens n˜ao tipadas.

Uma linguagem de programa¸c˜ao ´e considerada segura (safe) se to-dos os erros de tipos podem ser detectato-dos, ou seja, os tipos n˜ao podem ser violados. Linguagens n˜ao tipadas podem ser consideradas seguras efetuando a verifica¸c˜ao em tempo de execu¸c˜ao.

(5)

Tipos

A defini¸c˜ao de um sistema de tipos no projeto de linguagens de programa¸c˜ao ´e ´util para:

• Estrutura¸c˜ao dos programas e documenta¸c˜ao: os tipo representam abstra¸c˜oes dos dados manipulados pelo programa e podem ajudar na compreens˜ao do c´odigo.

• Detec¸c˜ao de erros: uma grande variedades de erros podem ser detectados automaticamente quando dados e fun¸c˜oes s˜ao usados de forma inconsistente.

• Eficiˆencia: informa¸c˜oes sobre tipos permitem ao computador executar otimiza¸c˜oes no c´odigo gerado.

(6)

Sistemas de Tipos

Sistemas de tipos s˜ao conjuntos de regras de inferˆencia que per-mitem atribuir tipos as vari´aveis e express˜oes de linguagens de pro-grama¸c˜ao. O principal objetivo de um sistema de tipos ´e determinar, em tempo de compila¸c˜ao, se um programa ´e bem comportado, ga-rantindo a ausˆencia de erros de tipos em tempo de execu¸c˜ao. Um sistema capaz de fornecer essa garantia ´e dito consistente (sound ).

Para que seja poss´ıvel provar a consistˆencia do sistema de tipos ´e necess´aria a sua formaliza¸c˜ao.

Prova Matem´atica: Verifica¸c˜ao de uma proposi¸c˜ao por encadeamento de dedu¸c˜oes l´ogicas a partir de um conjunto de axiomas.

(7)

Sistemas de Tipos

A defini¸c˜ao formal de um sistema de tipos ´e feita por um conjunto de enunciados (regras) denominadas senten¸cas (judgments). Sen-ten¸cas s˜ao afirma¸c˜oes sobre objetos sint´aticos de um determinado tipo. Uma senten¸ca tem a forma:

Γ ` e : σ

Essa senten¸ca ´e lida como: no contexto Γ a express˜ao e tem tipo σ ou Γ implica (deriva) em e ter tipo σ. Sendo Γ um contexto, possivelmente vazio, onde est˜ao definidos os tipos das vari´aveis que ocorrem livres em e (Γ = {x1 : σ1, x2 : σ2, . . . , xn : σn}).

(8)

Sistemas de Tipos

A forma geral das regras de inferˆencia ´e:

Γ1` e1: σ1 Γ2` e2: σ2 . . . Γn` en: σn

Γ ` e : σ

As senten¸cas acima da linha horizontal s˜ao as premissas e a senten¸ca abaixo ´e a conclus˜ao. Por exemplo:

Γ ` e1: Nat Γ ` e2: Nat

(9)

λ-C´

alculo Simplesmente de Tipos

Variaveis de Tipos α, β Vari´aveis de Express˜oes x , y , z

Express˜oes e ::= x | λx . e | e e0 Tipo Simples α ::= τ | τ → τ0 Γ ` x : τ (VAR) {x : τ } ∈ Γ Γ ` e : τ → τ0 Γ ` e0 : τ Γ ` e e0 : τ0 (APP) Γ, x : τ0 ` e : τ Γ ` λx .e : τ0 → τ (ABS)

Γ, x : τ representada Γ ∪ {x : τ }, sendo que Γ n˜ao apresenta qualquer suposi¸c˜ao de tipo para x .

(10)

Unifica¸c˜

ao

Unifica¸c˜ao ´e a ideia central do processo de inferˆencia de tipos, um unificador para dois tipos ´e uma substitui¸c˜ao S que: S τ1= S τ2.

Uma substitui¸c˜ao ´e uma fun¸c˜ao que mapeia vari´aveis de tipos em express˜oes de tipos. Uma substitui¸c˜ao pode ser representada como: S = {α1 7→ τ1, α2 7→ τ2, . . . , αn 7→ τn}. A aplica¸c˜ao de uma

substitui¸c˜ao S em um tipo τ (S τ ) resulta na troca de todas as vari´aveis de tipo que ocorrem em τ e pertencem ao dom´ınio de S pelo tipo correspondente em S .

A composi¸c˜ao de substitui¸c˜oes ´e representada por S ◦ S0. Um uni-ficador Sg ´e chamado de unificador mais geral se, para qualquer

(11)

Inferˆ

encia de Tipos

data SimpleType = TVar Id

|TArr SimpleType SimpleType deriving (Eq, Show)

data Expr = Var Id

|App Expr Expr |Lam Id Expr

(12)

Inferˆ

encia de Tipos

tiExpr g (Var i) = return (tiContext g i, []) tiExpr g (App e e’)=

do (t, s1) <- tiExpr g e (t’, s2) <- tiExpr g e’ b <- freshVar

let s3 = unify (apply s2 t) (t’ --> b) return (apply s3 b, s3 @@ s2 @@ s1) tiExpr g (Lam i e) =

do b <- freshVar

(t, s) <- tiExpr (g /+/ [i:>:b]) e return (apply s (b --> t), s)

(13)

Tipo Produto (Product Type, Record )

O produto de dois tipos consistem em um par ordenado de valores, sendo cada valor do tipo especificado. Podemos generalizar o tipo produto como o produto de um conjunto finito de n tipos, sendo n ≥ 0. O tipo unit (tipo unit´ario) ´e representado pelo produto nulo. Γ ` hi : unit Γ ` e : τ Γ ` e0 : τ0 Γ ` e × e0 : τ × τ0 (PAIR) Γ ` e × e : τ × τ0 Γ ` π1(e × e0) : τ (PROJ)Γ ` e × e 0: τ × τ0 Γ ` π2(e × e0) : τ0

(14)

Tipo Uni˜

ao Disjunta (Disjoint Union, Sum Type,

Tagged Union)

A uni˜ao disjunta de dois tipos oferece uma escolha entre dois elemen-tos de tipos possivelmente distinelemen-tos. Cada um dos tipos ´e marcado com uma etiqueta (construtor do tipo) que permite a sele¸c˜ao por casamento de padr˜oes (pattern match).

Γ ` e : τ Γ ` e + e0 : τ + τ0 (SUM) Γ ` e0 : τ0 Γ ` e + e0: τ + τ0 Γ, x1: τ1` e1 : τ Γ, x2 : τ2 ` e2: τ Γ ` e : τ1+ τ2 Γ ` case e of {x1 ⇒ e1 | x2 ⇒ e2} : τ (CASE )

(15)

Booleanos

Um exemplo simples do tipo uni˜ao disjunta ´e o tipo booleano:

Γ ` True : Bool Γ ` False : Bool

Γ ` e : Bool Γ ` e1: τ Γ ` e2 : τ

Γ ` if e then e1 else e2: τ

(16)

Tipos Recursivos

Muitas linguagens permitem a defini¸c˜ao de tipos recursivos, para podermos representar tipos recursivos em usamos um operador de ponto fixo de tipos. A express˜ao de tipo µα.τ denota o isomor-fismo dos tipos que satisfazem a equa¸c˜ao µα.τ ∼= {α 7→ µα.τ }τ . Por exemplo, o tipo Lista de inteiros pode ser definido como:

µα.hi + (Int × α)

Que admite infinitas substitui¸c˜oes de α por hi + (Int × α):

hi + (Int × α)

hi + (Int × hi + (Int × α))

hi + (Int × hi + (Int × hi + (Int × α)))

(17)

Tipos Recursivos

Esse isomorfismo ´e definido por regras de convers˜ao de um tipo µα.τ em [µα.τ /α]τ e vice-versa.

Γ ` e : {α 7→ µα.τ }τ

Γ ` fold e : µα.τ (FOLD)

Γ ` e : µα.τ

(18)

Sistema Hindley-Milner

Em λ-c´alculo simplesmente tipado os tipos s˜ao monom´orficos as vari´aveis de tipos representam um ´unico tipo em um contexto. No sistema Hindley-Milner s˜ao introduzidos tipos quantificados para o suporte ao polimorfismo param´etrico.

Variaveis de Tipos α, β, γ

Tipo Simples τ ::= α | τ → τ0 Tipo Polim´orfico σ ::= τ | ∀α.σ

Figura:Express˜oes de Tipos

ftv (α) = {α}

(19)

Sistema Hindley-Milner

βi ∈ ftv (∀α.τ ) τ/ 0 = {α 7→ τ }τ

∀α.τ > ∀β.τ0

Informalmente podemos dizer que o tipo ∀α.τ ´e mais geral que ∀β.τ0.

Vari´aveis x , y , z Express˜oes e ::= x

| λx. e | e e0

| let x = e in e0

(20)

Sistema Hindley-Milner

Γ ` x : σ {x : σ} ∈ Γ (VAR) Γ ` e : σ Γ ` e0 : σ0 (σ > σ 0) (INST) Γ ` e : σ Γ ` e : ∀α.σ (α∈/ftv (Γ)) (GEN)

(21)

Sistema Hindley-Milner

Γ ` e : τ0→ τ Γ ` e0 : τ0 Γ ` e e0 : τ (APP) Γ, x : τ0 ` e : τ Γ ` λx .e : τ0→ τ (ABS) Γ ` e : σ Γ, x : σ ` e0 : τ Γ ` let x = e in e0: τ (LET)

(22)

Algoritmo W

W (Γ, x ) =

Se Γ(x ) = ∀α1...α2.τ ent~ao ({αi 7→ βi}τ, Id )

sen~ao Falha, sendo βi fresh

W (Γ, e e0) =

let (τ, S1) = W (Γ, e)

(τ0, S2) = W (S1Γ, e0)

S = unificar (S2τ, τ0→ β), sendo β fresh

(23)

Algoritmo W

W (Γ, λx .e) = let (τ, S ) = W (Γ, x : β, e) in (S (β → τ ), S ) W (Γ, let x = e in e0) = let (τ, S1) = W (Γ, e) (τ0, S2) = W (S1Γ, x : fechamento (S1Γ, τ ), e0) in (τ0, S1◦ S2) Sendo fechamento(Γ, τ ) = ∀α.τ e α = ftv (τ ) − ftv (Γ).

(24)

Sistema Hindley-Milner

Consistˆencia (Soundness): Se W (Γ, e) retorna (τ, S ) ent˜ao Γ ` e : τ .

Completude (Completeness): Se Γ ` e : τ0 ent˜ao W (Γ, e) = (τ, S ) tal que para qualquer substitui¸c˜ao S0: τ > S0τ0.

Referências

Documentos relacionados

Passatempo de selfies (photoboot) + 20% e desconto a todos os clientes em artigos da nova coleção..

Na CAA, o aumento de 55,5%, ou R$482,0 milhões é reflexo principalmente do maior volume vendido, aumento da atividade de originação de açúcar para venda no

Diversidade sexual na escola: currículo e prática pedagógica / Alexandre Bortolini ; orientadora: Vera Maria Candau.. Candau,

debêntures realizadas no período, bem como aquisições e vendas de debêntures efetuadas pela Emissora: (Artigo 12, alínea e, inciso XVII da Instrução CVM 28/83). •

Atente-se aos exercícios explicativos de cada conteúdo desenvolvido nas aulas on-line, bem como as atividades semanais e/ou quinzenais do caderno!!..

 Iguatemi São Paulo: As Receitas de Aluguéis cresceram 8,5% principalmente por um Aluguel Mínimo maior, devido a.. reajuste

• O aluno que não for aprovado na prova final, deverá fazer a recuperação final com conteúdo relacionado à matéria do 2º semestre, onde todas as

Os valores de energia de ativação se apresentaram superiores para as amostras com incorporação da fibra de sisal, enquanto que a incorporação da fibra de vidro demonstrou