Advertisement
Guest User

Untitled

a guest
Feb 28th, 2015
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. open util/ordering[Time] as to
  2.  
  3. module Construtora
  4.  
  5. sig Time {}
  6.  
  7. --------------------------------------------------------------------------------------
  8. -- ASSINATURAS (Definindo as Assinaturas do Modelo) (11) --
  9. --------------------------------------------------------------------------------------
  10. one abstract sig Cidade{
  11. construtora: one Construtora
  12.  
  13. }
  14.  
  15. sig CampinaGrande extends Cidade{
  16. }
  17.  
  18. one sig Construtora{
  19. contratos: set Contrato,
  20. equipesPedreiros: EquipePedreiros set -> Time,
  21. equipeEngenheiro: one EquipeEngenheiros
  22. }
  23.  
  24. sig Contrato{
  25. construcao: Construcao one -> Time
  26. }
  27.  
  28. abstract sig Construcao{
  29. equipePedreiros: EquipePedreiros one -> Time,
  30. equipeEngenheiros: EquipeEngenheiros lone -> Time
  31. }
  32.  
  33. sig Predio, CondominioPopular, EstadioFutebol extends Construcao{}
  34.  
  35. sig EquipePedreiros{
  36. }
  37.  
  38. one sig EquipeEngenheiros{
  39. engenheiros: some Engenheiro
  40. }
  41.  
  42. abstract sig Engenheiro{}
  43.  
  44. sig EngenheiroEletricista extends Engenheiro{}
  45.  
  46. sig EngenheiroCivil extends Engenheiro{}
  47.  
  48. --PREDICADOS
  49. pred todoContratoTemUmaConstrutora[]{
  50. all c:Construtora | #c.contratos = 3
  51. }
  52.  
  53. pred todoConstrucaoSoTemUmaEquipeDePedreirosUnica []{
  54. all c1, c2: Construcao |( c1 != c2) => (c1.equipePedreiros != c2.equipePedreiros)
  55. }
  56.  
  57. pred todaEquipeDePedreirosDaConstrucaoEstaNaConstrutora[]{
  58. all c: Construtora, cons: Construcao |
  59. (cons.equipePedreiros in c.equipesPedreiros)
  60. }
  61.  
  62. pred todaEquipeDePredeirosEstaNaConstrutora[t: Time]{
  63. all c: Construtora, ep: EquipePedreiros |
  64. (ep in c.equipesPedreiros.t)
  65. }
  66.  
  67. pred todaEquipeDePedreiroEstaEmUmaUnicaConstrucao[t: Time]{
  68. all c: Construcao, e: EquipePedreiros |
  69. (e in c.equipePedreiros.t => (all co: Construcao - c | e !in co.equipePedreiros.t))
  70. }
  71.  
  72. pred todaConstrucaoTemUmContrato[t: Time]{
  73. all c: Contrato, e: Construcao |
  74. (e in c.construcao.t => (all co: Contrato - c | e !in co.construcao.t))
  75. }
  76.  
  77. pred todaEquipeDeEngenheirosTem2Engenheiros[]{
  78. all e: EquipeEngenheiros | #e.engenheiros = 2
  79. }
  80.  
  81. /*pred todaEquipeDeEngenheirosTemUmEletricista[]{
  82. all e1: EquipeEngenheiros, e2: EngenheiroEletricista | e2 in e1.engenheiros
  83. }
  84.  
  85. pred todaEquipeDeEngenheirosTemUmCivil[]{
  86. all e1: EquipeEngenheiros, e2: EngenheiroCivil | e2 in e1.engenheiros
  87. }*/
  88.  
  89. pred umaEquipeEngenheirosTrabalhaEmUmaContrucaoPorVez[t: Time]{
  90. all c1, c2: Construcao |
  91. (c1 != c2 and #c1.equipeEngenheiros.t = 1) => (#c2.equipeEngenheiros.t = 0)
  92. }
  93.  
  94. pred init[t: Time]{
  95. }
  96.  
  97. --FATOS
  98. fact especificacoes{
  99. #Contrato = 3
  100. #Predio = 1
  101. #CondominioPopular = 1
  102. #EstadioFutebol = 1
  103. #EquipePedreiros = 4
  104. #Engenheiro = 2
  105. #EngenheiroEletricista = 1
  106. #EngenheiroCivil = 1
  107. todoContratoTemUmaConstrutora
  108. todoConstrucaoSoTemUmaEquipeDePedreirosUnica
  109. todaEquipeDePedreirosDaConstrucaoEstaNaConstrutora
  110. todaEquipeDeEngenheirosTem2Engenheiros
  111. //todaEquipeDeEngenheirosTemUmEletricista
  112. //todaEquipeDeEngenheirosTemUmCivil
  113. all t: Time | umaEquipeEngenheirosTrabalhaEmUmaContrucaoPorVez[t]
  114. all t: Time | todaEquipeDePredeirosEstaNaConstrutora[t]
  115. all t: Time | todaEquipeDePedreiroEstaEmUmaUnicaConstrucao[t]
  116. all t: Time | todaConstrucaoTemUmContrato[t]
  117. init[Time]
  118. }
  119.  
  120. pred show[]{}
  121. run show for 10
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement