Subtipos - PowerPoint PPT Presentation

1 / 74
About This Presentation
Title:

Subtipos

Description:

Una Cola acotada. Los elementos pueden ser puestos y sacados de la cola con ... La cola es acotada en el sentido de que existe un n mero m ximo de elementos que ... – PowerPoint PPT presentation

Number of Views:41
Avg rating:3.0/5.0
Slides: 75
Provided by: afu79
Category:
Tags: cola | la | subtipos

less

Transcript and Presenter's Notes

Title: Subtipos


1
Subtipos
2
Subtipos
  • Un tipo T1 es un subtipo de otro tipo T2 si
    todos los valores contenidos en T1 se encuentran
    también contenidos en T2.
  • Ejemplo
  • Nat es un subtipo de Int.

3
Expresiones de Subtipos
  • Un tipo cualquiera pude ser restringido por un
    predicado resultando en un subtipo del tipo
    original.
  • Forma general

4
Subtipos vs. axiomas
  • type NoVacia l Text l ? lt gt
  • value ultimo_elemento NoVacia ? Char
  • axiom ? l NoVacia ultimo_elemento(l) ? l(len
    l)
  • Podría haberse escrito también
  • value ultimo_elemento Text Char
  • axiom ? l Text ultimo_elemento(l) ? l(len l)
  • pre l ? lt gt

5
EjemploUna Cola acotada
  • Los elementos pueden ser puestos y sacados de la
    cola con una política FIFO.
  • La cola es acotada en el sentido de que existe un
    número máximo de elementos que pueden encontrase
    en ella.

6
(No Transcript)
7
Subtipos vacíos
  • Qué sucede si la restricción del subtipo reduce
    a false? p.e
  • type NoInt i Int false
  • Esta declaración es inútil pero por si sola no
    produce ningún daño.
  • El problema está cuando la usamos, p.e. ...

8
Subtipos vacíos
  • value no_constant NoInt
  • sería equivalente a
  • value no_constant Int
  • axiom no_constant ? i i Int false
  • El axioma reduce a false. Generamos una
    contradicción.

9
Variants
10
Definiciones de Variants
  • Abreviatura para
  • una definición de un sort.
  • algunas definiciones de values
  • constructores para generar valores del sort.
  • posiblemente, destructores para acceder a sus
    partes.
  • posiblemente, reconstructores para modificarlas.
  • algunos axiomas, que definen propiedades sobre
    los values.

11
Definiciones de Variants (1) Constructores de
constantes
  • type
  • Color negro blanco
  • El tipo Color representa los valores constantes
    negro y blanco, también referidos como los
    constructores del tipo.

12
Definiciones de Variants (1)Constructores de
constantes
  • Ejemplo de uso del variant Color
  • type
  • Color negro blanco
  • value
  • invertir Color ? Color
  • axiom
  • invertir(blanco) ? negro,
  • invertir(negro) ? blanco

13
Definiciones de Variants (1)Constructores de
constantes
  • Ejemplo de uso del variant Color
  • type
  • Color negro blanco
  • value
  • invertir Color ? Color
  • invertir(c) ? case c of
  • negro ? blanco,
  • blanco ? negro
  • end

14
Definiciones de Variants (1)Constructores de
constantes
  • El tipo variant Color es una abreviatura para
  • type
  • Color -- sort
  • value
  • negro Color, -- constructor
  • blanco Color -- constructor
  • axiom
  • blanco ? negro, -- disyunción
  • ? p Color ? Bool
  • (p(blanco) ? p(negro)) ? (? c Color p(c))
    -- inducción

15
Definiciones de Variants (2)Constructores de
registros
  • type
  • Collection empty add(Element, Collection )
  • El tipo variant Collection
  • Está definido recursivamente. Los únicos tipos
    recursivos aceptados son los variants.
  • Cuenta con dos valores (values) una constante
    empty y una función add, que es un constructor de
    registros.

16
Definiciones de Variants (2)Constructores de
registros
  • El tipo variant Collection es una abreviatura
    para
  • type
  • Collection -- sort
  • value
  • empty Collection , -- constructor
  • add Element ? Collection ? Collection --
    constructor

17
Definiciones de Variants (2)Constructores de
registros
  • axiom
  • disyunción
  • ? e Element, c Collection empty ? add(e,
    c),
  • inducción
  • ? p Collection ? Bool
  • (p(empty) ?
  • (? e Element, c Collection p(c) ?
    p(add(e, c)))) ?
  • (? c Collection p(c))

18
Definiciones de Variants (2)Destructores de
registros
  • Sirven para extraer los componentes de un
    registro.
  • type
  • List empty add(head Element, tail List )

19
Definiciones de Variants (2)Destructores de
registros
  • El variant List es una abreviatura para
  • un sort (List)
  • cuatro definiciones de values (los dos
    constructores más los dos destructores head y
    tail).
  • cuatro axiomas (el de disjunción, el de inducción
    y dos nuevos axiomas relacionando los
    destructores con su correspondiente constructor).

20
Definiciones de Variants (2)Destructores de
registros
  • El tipo variant List es una abreviatura para
  • type
  • List -- sort
  • value
  • empty List , -- constructor
  • add Element ? List ? List, -- constructor
  • head List Element, -- destructor
  • tail List List -- destructor

21
Definiciones de Variants (2)Destructores de
registros
  • axiom
  • ? e Element, l List empty ? add(e, l),
  • ? p List ? Bool
  • (p(empty) ?
  • (? e Element, l List p(l) ?
    p(add(e, l)))) ?
  • (? l List p(l)),
  • ?e Element, l List head(add(e, l)) ? e,
  • ?e Element, l List tail(add(e, l)) ? l

22
Definiciones de Variants (2)Reconstructores de
registros
  • Sirven para modificar los componentes de un
    registro.
  • type
  • List empty add(head Element ?
    replace_head,
  • tail List ? replace_tail )

23
Definiciones de Variants (2)Reconstructores de
registros
  • La ocurrencia de los reconstructores son una
    abreviatura para las siguientes definiciones, a
    ser agregadas a las anteriores
  • value
  • replace_head Element ? List List,
  • replace_tail List ? List List

24
Definiciones de Variants (2)Reconstructores de
registros
  • axiom
  • ?e, e1 Element, l List
  • replace_head(e, add(e1, l))) ? add(e, l)
  • ?e Element, t,l List
  • replace_tail(t, add(e, l))) ? add(e, t)

25
Definiciones de Variants (3)Uniones disjuntas de
tipos
  • type
  • Figure box(length Real, width Real)
  • circle(radius Real ? re_radius)

26
Definiciones de Variants (3)Uniones disjuntas de
tipos
  • type
  • Figure
  • value
  • box Real ? Real ? Figure, -- constructor
  • circle Real ? Figure, -- constructor
  • length Figure Real, -- destructor
  • width Figure Real, -- destructor
  • radius Figure Real -- destructor
  • re_radius Real ? Figure Figure --
    reconstructor

27
Definiciones de Variants (3)Uniones disjuntas de
tipos
  • axiom
  • ? l, w, r Real box(l,w) ? circle(r),
  • ? p Figure ? Bool
  • ((? l, w Real p(box(l,w))) ?
  • (? r Real p(circle(r)))) ? (? f
    Figure p(f)),
  • ? l, w Real lenght(box(l, w)) ? l,
  • ? l, w Real width(box(l, w)) ? w,
  • ? r Real radius(circle(r)) ? r,
  • ? r, r1 Real re_radius(r, circle(r1))) ?
    circle(r)

28
Definiciones de Variants Wildcards
  • type
  • Color negro blanco _
  • es una abreviatura para
  • type
  • Color -- sort
  • value
  • negro Color, -- constructor
  • blanco Color -- constructor
  • axiom
  • blanco ? negro, -- disjunción. No hay axioma de
    inducción.

29
EjemploÁrboles binarios ordenados
  • Un árbol binario puede
  • ser un árbol vacío, o
  • estar compuesto de un elemento y dos subárboles
    un árbol izquierdo y un árbol derecho.
  • Que esté ordenado significa que cualquiera de los
    elementos que se encuentran en un subárbol
    izquierdo son menores que el elemento tope, el
    cual debe ser menor que cualquiera de los que se
    encuentran en su subárbol derecho.

30
(No Transcript)
31
(No Transcript)
32
(No Transcript)
33
Records
34
Definiciones de Records
  • Cuando en un variant contamos con una única
    alternativa, la cual es una definición de un
    constructor de registro, existe una forma
    abreviada que nos permite omitir el constructor
    en la definición y que resulta más natural.

35
Definiciones de Records
  • type
  • Libro libro(tituloTitulo ? re_titula,
    autor Autor, editorial Editorial,
    año Año)
  • puede ser escrito
  • type
  • Libro
  • titulo Titulo ? re_titula
  • autor Autor
  • editorial Editorial
  • año Año

36
Definiciones de Records
  • un constructor de valores de tipo Libro
  • mk_Libro Titulo ? Autor ? Editorial ? Año ?
    Libro
  • destructores de Libro para acceder a sus partes
  • titulo Libro ? Titulo
  • autor Libro ? Autor
  • editorial Libro ? Editorial
  • año Libro ? Año
  • reconstructores de Libro
  • re_titula Titulo ? Libro ? Libro

37
Definiciones de Records (cont.)
  • axiomas
  • inducción
  • p Libro ? Bool
  • (? t Titulo, a Autor, e Editorial, y Año
  • p(mk_Libro(t, a, e, y))
  • ) ? ? l Libro p(l)

38
Definiciones de Records (cont.)
  • ? t Titulo, a Autor, e Editorial, y Año
  • (titulo(mk_Libro(t, a, e, y)) ? t,
  • ? t Titulo, a Autor, e Editorial, y Año
  • autor (mk_Libro(t, a, e, y)) ? a,
  • ? t Titulo, a Autor, e Editorial, y Año
  • editorial(mk_Libro(t, a, e, y)) ? e,
  • ? t Titulo, a Autor, e Editorial, y Año
  • año(mk_Libro(t, a, e, y)) ? y,
  • ? t, new_t Titulo, a Autor, e Editorial, y
    Año
  • (re_titula(new_t, mk_Libro(t, a, e, y)) ?
    mk_Libro(new_t, a, e, y)

39
Expresiones Case
40
Expresiones Case
  • Selección de una expresión entre varias
    dependiendo del valor de otra expresión.
  • value
  • error_message Nat ? Text
  • error_message(error_code) ? case error_code of
  • 1 ? buffer lleno,
  • 2 ? buffer vacío,
  • _ ? error
  • end

41
Case, forma general
  • case value_expr of
  • pattern1 ? value_expr1
  • patternn ? value_exprn
  • end
  • con n?1
  • El orden de los patrones es significativo.
  • Si ninguno hace matching la expresión case queda
    sub- especificada.

42
Patrones Literales
  • Un patrón literal es un valor de tipo Unit, Bool,
    Int, Real, Text o Char.
  • Un valor hace matching con un literal si el valor
    es igual al literal.

43
Patrones comodines
  • _ es patrón comodín (wildcard pattern).
  • Cualquier valor hace matching con _.
  • Deberían aparecer como último caso.

44
Nombres de valuescomo patrones
  • type
  • Colour black white
  • value
  • invert Colour ? Colour
  • axiom
  • ? c Colour
  • invert(c) ?
  • case c of
  • black ? white,
  • white ? black
  • end

45
Patrones registros, ejemplo
  • type
  • List empty add(head Colour, tail List)
  • value
  • invert_list List ? List
  • axiom
  • ? l List
  • invert_list(l) ?
  • case l of
  • empty ? empty,
  • add(c, l1) ? add(invert(c), invert_list(l1))
  • end

Record pattern
46
Patrones listas, ejemplo
  • value
  • sum Int ? Int
  • axiom
  • ? l Int
  • sum(l) ?
  • case l of
  • ?? ? 0,
  • ?i? l1 ? i sum(l1)
  • end

47
Patrones productos, ejemplo
  • value
  • exclusive_or Bool ? Bool ? Bool
  • axiom
  • ? b1, b2 Bool
  • exclusive_or(b1, b2) ?
  • case (b1, b2) of
  • (true, false) ? true,
  • (false, true) ? true,
  • _ ? false
  • end

48
Patrones productos, ejemplo
  • type
  • List Elem
  • value
  • elements_match Elem ? Elem ? Bool,
  • list_match List ? List ? Bool
  • axiom
  • ? l1, l2 List
  • list_match(l1, l2) ?
  • case (l1, l2) of
  • (lt gt, lt gt) ? true,
  • (lte1gt t1, lte2gt t2) ? elements_match(e1,
    e2) ? list_match(t1, t2),
  • _ ? false
  • end

49
Expresiones Let
50
Expresiones Let
  • Para definir nombres locales para valores
    particulares.
  • Dos tipos de expresiones let
  • Explícitas
  • Implícitas

51
Expresiones Let Explícitas, ejemplo 1
  • let (x, y) (1, 2) in x y end
  • Primero se evalúa la expresión que sigue al .
  • Luego se asocia x a la primera parte e y a la
    segunda.
  • Finalmente se evalúa la expresión que sigue a in.

52
Expresiones Let Explícitas, ejemplo 2
  • value
  • square_head Int Int
  • axiom
  • ? l Int
  • square_head(l) ?
  • let h hd l in ?h ? h? tl l end
  • pre l ? ? ?

53
Expresiones Let Explícitas, ejemplo 3
  • value
  • square_head Int Int
  • axiom
  • ? l Int
  • square_head(l) ?
  • let (h, t) (hd l, tl l) in ?h ? h? t end
  • pre l ? ? ?

54
Expresiones Let Explícitas, ejemplo 4
  • value
  • square_head Int Int
  • axiom
  • ? l Int
  • square_head(l) ?
  • let lthgt t l in ?h ? h? t end
  • pre l ? ? ?

55
Expresiones Let Explícitas, formato
  • let let_binding value_expr1
  • in value_expr2
  • end
  • donde
  • let_binding binding record_pattern
  • list_pattern

56
Expresiones Let Explícitas, propiedades
  • NO recursiva identificadores definidos en
    let_binding no pueden ser referidos en
    value_expr1.
  • Ocurrencias de identificadores en value_expr1 se
    refieren a definiciones externas al let.

57
Expresiones Let Implícitas, ejemplo 1
  • value
  • choose Elem-set Elem
  • choose(s) ? let e Elem e ? s
  • in e
  • end
  • pre s ?

58
Expresiones Let Implícitas, ejemplo 2
  • value
  • some_char Unit Char
  • some_char() ? let c Char in c end

59
Expresiones Let Implícitas Forma general
  • Puede tomar dos formas
  • let typing in expr end
  • let binding type_expr value_expr1 in
    value_expr2 end

60
Expresiones Let anidadas, ejemplo
  • type Queue Nat ? (Nat Elem), Elem
  • value
  • add Elem ? Queue ? Queue
  • add(e, q) ? let (last, map) q in
  • let new_last last 1 in
  • let new_map map new_last ? e in
  • (new_last, new_map)
  • end
  • end
  • end

61
Expresiones Let anidadas, ejemplo
  • type Queue Nat ? (Nat Elem), Elem
  • value
  • add Elem ? Queue ? Queue
  • add(e, q) ? let (last, map) q,
  • new_last last 1,
  • new_map map new_last ? e
  • in
  • (new_last, new_map)
  • end

62
Módulos en RSL
63
Módulos
  • Básicamente dos tipos de módulos en RSL
  • scheme clases
  • object instancias de clases
  • Son las únicas entidades que pueden ser archivos.

64
Class Expressions
  • Una clase, técnicamente, denota una colección de
    sus posibles implementaciones.
  • Las posibles implementaciones son denominadas
    objetos.

65
Class expressions, tipos
  • basic
  • extending
  • renaming
  • hiding
  • with
  • instantition

66
Basic Class Expresions
  • class
  • declaración1
  • declaraciónn
  • end
  • n ? 0
  • Cada declaración puede ser de
  • type
  • value
  • axiom
  • object
  • channel
  • variable

67
Extending Class Expressions
  • Si C1 y C2 son expresiones de clase,
  • extend C1 with C2
  • es una extending class expression.
  • Declaraciones de C2 son agregadas a las de C1.
  • Declaraciones de C2 pueden referirse a entidades
    de C1 pero no viceversa.
  • Declaraciones de C1 y C2 deben ser compatibles.

68
Ejemplo de uso de extend
  • scheme TYPE
  • class
  • type T1
  • end
  • scheme TYPES
  • extend TYPE with
  • class
  • type
  • T2 T1 ? Int,
  • T3
  • end
  • expande en ...

69
Ejemplo de uso de extend
  • scheme TYPES
  • class
  • type
  • T1,
  • T2 T1 ? Int,
  • T3
  • end

70
Hiding Class Expressions
  • Si C es class expression,
  • hide id1 , ..., idn in C
  • Los identificadores id1 , ..., idn NO son
    exportados, y por lo tanto no pueden ser
    referenciados desde fuera del módulo.

71
Ejemplo de hiding
  • scheme LISTA
  • hide aux in class
  • type List
  • value
  • empty List,
  • add Int ? List ? List
  • head List List
  • tail List List
  • aux List ? Nat
  • end

72
Ejemplo de uso incorrecto de LISTA_2
  • scheme USA_MAL_LISTA
  • class
  • object L LISTA
  • value
  • usa_aux L.List ? Nat
  • usa_aux(l) ? L.aux(l)?2
  • end

73
With Class Expressions
  • Si C es class expression,
  • with O1 , ..., On in C
  • O1 , ..., On son object expressions.
  • with X in C, significa que una ocurrencia en C de
    un nombre N definido en X puede referenciarse
    como X.N o solamente N.

74
Ejemplo de uso de with
object TYPES class type
Date, NameText,
AgeNat end
scheme PERSON with TYPES in class
type Person value
birth Person ? Date, name
Person ? Name, age Date ? Person
? Age end
Write a Comment
User Comments (0)
About PowerShow.com