Yo pense este ejercicio de otra forma a como fue resuelto. Considero que no esta mal ya que algunos aspectos que en los procedimientos tiene en cuenta, yo con Pre-condiciones me adelanto para que esos casos no se den. Y con los otros procedimientos se solucione estos aspectos antes de invocar estos con pre-condiciones.
PROCEDURE insertar (d:Dominio; r:Rango; VAR t:TablaInyectiva); (* Inserta la correspondencia d:r creando una nueva entrada en la tabla t o actualizando la correspondiente al elemento d, si existiera (para mantener la funcionalidad). Además, si hay una correspondencia d':r en t, la borra para mantener la propiedad de inyectividad *)
PROCEDURE borrar (d:Dominio; VAR t:TablaInyectiva); (* Si estaDefinida(d,t) borra la correspondencia correspondiente a d en la tabla t; en caso contrario la operación no tiene efecto sobre t *)
Solución mia:
(*PRE: NOT estaDefinida(d,t)*)
(*PRE: no hay una correspondencia d':r en t *)
PROCEDURE insertar (d:Dominio; r:Rango; VAR t:TablaInyectiva);
(* Inserta la correspondencia d:r creando una nueva entrada en la tabla t *)
(* PRE: estaDefinida(d,t) *)
PROCEDURE borrar (d:Dominio; VAR t:TablaInyectiva);
(* Borra la correspondencia correspondiente a d en la tabla t *)
La pregunta en si es ¿Se toma como valida mi resolucion? muchas gracias