1/* Simple Translog, August, 1999. *****************************************
    2
    3  Written in: OCLh
    4  Originator: Donghong Liu      Aug 99
    5  Updated:    Lee McCLuskey     Sept 99
    6
    7   Derived from Univ. of Maryland's literal-based specification     
    8
    9This model captures the object structure and actions in a "transport
   10logistics" domain where packages have to be transported around 
   11different locations in different cities, using trucks and trains */
   12
   13/*********************** sort hierarchy *****************************/
   14
   15domain_name(translog4).
   16
   17sorts(non_primitive_sorts, [
   18       location, city_location,tcentre,not_tcentre, route, 
   19       physical_obj, vehicle, railv]).
   20sorts(primitive_sorts, [
   21        airport, aircraft, train_station, post_office, clocation, city, package, 
   22        train, traincar, truck, road_route, rail_route, region]).
   23sorts(physical_obj, [vehicle, package]).
   24sorts(vehicle, [railv,truck,aircraft]).
   25sorts(railv, [traincar,train]).
   26sorts(location, [city_location,city,airport]).
   27sorts(city_location, [tcentre,not_tcentre]).
   28sorts(tcentre, [train_station]).
   29sorts(not_tcentre, [clocation,post_office]).
   30sorts(route, [road_route, rail_route]).
   31
   32objects(aircraft,[ac1,ac2,ac3,ac4,ac5,ac6,ac7,ac8,ac9,ac10,ac11,ac12,
   33     ac13,ac14,ac15,ac16]).
   34objects(airport, [ap1, ap2, ap3, ap4 ]).
   35
   36objects(train_station, [ 
   37                        city1_ts1_x,city2_ts1_x,city3_ts1_x,
   38                        city1_ts1_y,city2_ts1_y,city3_ts1_y,
   39                        city1_ts1_z,city2_ts1_z,city3_ts1_z,
   40                        city1_ts1,city2_ts1,city3_ts1]).
   41objects(clocation, [ 
   42                        city1_cl1_x,city1_cl2_x,city2_cl1_x,city3_cl1_x,
   43                        city1_cl1_y,city1_cl2_y,city2_cl1_y,city3_cl1_y,
   44                        city1_cl1_z,city1_cl2_z,city2_cl1_z,city(n3cl1z),
   45                        city1_cl1,city1_cl2,city2_cl1,city3_cl1]).
   46objects(post_office, [ post_1]).
   47objects(city, [ 
   48                        city1_x, city2_x, city3_x,
   49                        city1_y, city2_y, city3_y,
   50                        city1_z, city2_z, city3_z,
   51                        city1, city2, city3]).
   52objects(train,[ 
   53                        train1_x,train2_x,
   54                        train1_z,train2_z,
   55                        train1_y,train2_y,
   56                        train1,train2]).
   57objects(traincar,[ 
   58                        traincar1_x,
   59                        traincar1_z,
   60                        traincar1_y,
   61                        traincar1]).
   62objects(road_route, [ 
   63                        road_route_21_x,road_route_32_x, road_route_31_x ,
   64                        road_route_21_z,road_route_32_z, road_route_31_z ,
   65                        road_route_21_y,road_route_32_y, road_route_31_y ,
   66                        road_route_21,road_route_32, road_route_31 ]).
   67objects(rail_route,[
   68                        rail_route(n2x),rail_route(n3x) ,
   69                        rail_route(n2z),rail_route(n3z) ,
   70                        rail_route(n2y),rail_route(n3y) ,
   71                        rail_route_2,rail_route_3 ]).
   72objects(truck, [
   73                        truck_1_x, truck(n2x), truck(n3x), truck_11_x, truck_22_x, truck_33_x,
   74                        truck_1_z, truck(n2z), truck(n3z), truck_11_z, truck_22_z, truck_33_z,
   75                        truck_1_y, truck(n2y), truck(n3y), truck_11_y, truck_22_y, truck_33_y,
   76                        truck_1, truck_2, truck_3, truck_11, truck_22, truck_33]).
   77
   78objects(package,[pk_1, pk_2, pk_3, pk_4, pk_5, pk_6, 
   79                  pk_1_x, pk(n2x), pk(n3x), pk_4_x, pk_5_x, pk_6_x,
   80                  pk_1_z, pk(n2z), pk(n3z), pk_4_z, pk_5_z, pk_6_z,
   81                  pk_1_y, pk(n2y), pk(n3y), pk_4_y, pk_5_y, pk_6_y]).
   82
   83objects(region,[east,west,south,north]).
   84
   85/*********************** predcate defns ***********************************/
   86
   87predicates([
   88% dynamic 
   89  at(physical_obj,city_location),
   90  moveable(vehicle),
   91  available(vehicle),
   92  busy(vehicle),
   93  attached(railv,railv),
   94  unattached(railv),
   95  waiting(package),
   96  certified(package),
   97  uncertified(package),
   98  loaded(package,truck),
   99  loaded(package,traincar),
  100  loaded(package,aircraft),
  101  delivered(package),
  102% static
  103  rv_compatible(route,vehicle),
  104  ap_serves(airport,city),
  105  connects(route,location,location),
  106  in_city(location, city),
  107  in_region(location,region),
  108  serves_region(airport,region),
  109  route_available(route) ]).
  110
  111/*********************** invariants ****************************************/
  112
  113% LHS vars univ. quantified over primitive sorts
  114% RHS free vars are existentially quantified
  115
  116implied_invariant([loaded(P,V)], [at(V,L),at(P,L)]).
  117
  118inconsistent_constraint([certified(P), not_insured(P)]).
  119
  120atomic_invariants([
  121      rv_compatible(rail_route,traincar),
  122      rv_compatible(rail_route,train),
  123      rv_compatible(road_route,truck),
  124
  125      serves_region(ap1,east),
  126      in_city(ap1,city1),in_region(ap1,east),
  127
  128      in_city(city1_cl1,city1), in_city(city1_ts1,city1),
  129      in_city(city1_cl2,city1), in_city(city1_ts2,city1),
  130      in_city(city2_cl1,city2), in_city(city2_ts1,city2),
  131      in_city(city3_cl1,city3), in_city(city3_ts1,city3),
  132      serves(city1_ts1,city1), serves(city1_ts2,city1),
  133      serves(city2_ts1,city2),
  134      serves(city3_ts1,city3),
  135      route_available(road_route_31),
  136      connects(road_route_31,city3,city1),
  137      connects(road_route_31,city1,city3),
  138      route_available(road_route_32),
  139      connects(road_route_32,city3,city2),
  140      connects(road_route_32,city2,city3),
  141      route_available(rail_route_1),
  142      connects(rail_route_1,city1_ts2,city1_ts1),
  143      connects(rail_route_1,city1_ts1,city1_ts2),
  144      route_available(rail_route_2),
  145      connects(rail_route_2,city2_ts1,city1_ts1),
  146      connects(rail_route_2,city1_ts1,city2_ts1),
  147      connects(road_route_21,city2,city1),
  148      route_available(road_route_21),
  149      connects(road_route_21,city1,city2),
  150
  151      in_region(city1_ts1,east),in_region(city1,east),
  152      in_region(city2_ts1,east), in_region(city2,east),
  153      in_region(city3_ts1,east), in_region(city3,east),
  154      in_region(city1_ts2,east), in_region(city1_cl1,east),
  155      in_region(city1_cl2,east), in_region(city2_cl1,east),
  156      in_region(city3_cl1,east), 
  157
  158      serves_region(ap2,west),
  159      in_city(ap2,city1_x),in_region(ap2,west),
  160
  161      in_region(city1_ts1_x,west),in_region(city1_x,west),
  162      in_region(city2_ts1_x,west), in_region(city2_x,west),
  163      in_region(city3_ts1_x,west), in_region(city3_x,west),
  164      in_region(city1_ts2_x,west), in_region(city1_cl1_x,west),
  165      in_region(city1_cl2_x,west), in_region(city2_cl1_x,west),
  166      in_region(city3_cl1_x,west), 
  167
  168      in_city(city1_cl1_x,city1_x), in_city(city1_ts1_x,city1_x),
  169      in_city(city1_cl2_x,city1_x), in_city(city1_ts2_x,city1_x),
  170      in_city(city2_cl1_x,city2_x), in_city(city2_ts1_x,city2_x),
  171      in_city(city3_cl1_x,city3_x), in_city(city3_ts1_x,city3_x),
  172      serves(city1_ts1_x,city1_x), serves(city1_ts2_x,city1_x),
  173      serves(city2_ts1_x,city2_x),
  174      serves(city3_ts1_x,city3_x),
  175      route_available(road_route_31_x),
  176      connects(road_route_31_x,city3_x,city1_x),
  177      connects(road_route_31_x,city1_x,city3_x),
  178      route_available(road_route_32_x),
  179      connects(road_route_32_x,city3_x,city2_x),
  180      connects(road_route_32_x,city2_x,city3_x),
  181      route_available(rail_route_1_x),
  182      connects(rail_route_1_x,city1_ts2_x,city1_ts1_x),
  183      connects(rail_route_1_x,city1_ts1_x,city1_ts2_x),
  184      route_available(rail_route(n2x)),
  185      connects(rail_route(n2x),city2_ts1_x,city1_ts1_x),
  186      connects(rail_route(n2x),city1_ts1_x,city2_ts1_x),
  187
  188      connects(road_route_21_x,city1_x,city2_x),
  189      connects(road_route_21_x,city2_x,city1_x),
  190      route_available(road_route_21_x),
  191
  192      serves_region(ap3,south),
  193      in_city(ap3,city1_y),in_region(ap3,south),
  194
  195      in_region(city1_ts1_y,south),in_region(city1_y,south),
  196      in_region(city2_ts1_y,south), in_region(city2_y,south),
  197      in_region(city3_ts1_y,south), in_region(city3_y,south),
  198      in_region(city1_ts2_y,south), in_region(city1_cl1_y,south),
  199      in_region(city1_cl2_y,south), in_region(city2_cl1_y,south),
  200      in_region(city3_cl1_y,south), 
  201
  202      in_city(city1_cl1_y,city1_y), in_city(city1_ts1_y,city1_y),
  203      in_city(city1_cl2_y,city1_y), in_city(city1_ts2_y,city1_y),
  204      in_city(city2_cl1_y,city2_y), in_city(city2_ts1_y,city2_y),
  205      in_city(city3_cl1_y,city3_y), in_city(city3_ts1_y,city3_y),
  206      serves(city1_ts1_y,city1_y), serves(city1_ts2_y,city1_y),
  207      serves(city2_ts1_y,city2_y),
  208      serves(city3_ts1_y,city3_y),
  209      route_available(road_route_31_y),
  210      connects(road_route_31_y,city3_y,city1_y),
  211      connects(road_route_31_y,city1_y,city3_y),
  212      route_available(road_route_32_y),
  213      connects(road_route_32_y,city3_y,city2_y),
  214      connects(road_route_32_y,city2_y,city3_y),
  215      route_available(rail_route_1_y),
  216      connects(rail_route_1_y,city1_ts2_y,city1_ts1_y),
  217      connects(rail_route_1_y,city1_ts1_y,city1_ts2_y),
  218      route_available(rail_route(n2y)),
  219      connects(rail_route(n2y),city2_ts1_y,city1_ts1_y),
  220      connects(rail_route(n2y),city1_ts1_y,city2_ts1_y),
  221
  222      connects(road_route_21_y,city1_y,city2_y),
  223      connects(road_route_21_y,city2_y,city1_y),
  224      route_available(road_route_21_y),
  225
  226      serves_region(ap4,north),
  227      in_city(ap4,city1_z),in_region(ap4,north),
  228
  229      in_region(city1_ts1_z,north),in_region(city1_z,north),
  230      in_region(city2_ts1_z,north), in_region(city2_z,north),
  231      in_region(city3_ts1_z,north), in_region(city3_z,north),
  232      in_region(city1_ts2_z,north), in_region(city1_cl1_z,north),
  233      in_region(city1_cl2_z,north), in_region(city2_cl1_z,north),
  234      in_region(city(n3cl1z),north), 
  235
  236      in_city(city1_cl1_z,city1_z), in_city(city1_ts1_z,city1_z),
  237      in_city(city1_cl2_z,city1_z), in_city(city1_ts2_z,city1_z),
  238      in_city(city2_cl1_z,city2_z), in_city(city2_ts1_z,city2_z),
  239      in_city(city(n3cl1z),city3_z), in_city(city3_ts1_z,city3_z),
  240      serves(city1_ts1_z,city1_z), serves(city1_ts2_z,city1_z),
  241      serves(city2_ts1_z,city2_z),
  242      serves(city3_ts1_z,city3_z),
  243      route_available(road_route_31_z),
  244      connects(road_route_31_z,city3_z,city1_z),
  245      connects(road_route_31_z,city1_z,city3_z),
  246      route_available(road_route_32_z),
  247      connects(road_route_32_z,city3_z,city2_z),
  248      connects(road_route_32_z,city2_z,city3_z),
  249      route_available(rail_route_1_z),
  250      connects(rail_route_1_z,city1_ts2_z,city1_ts1_z),
  251      connects(rail_route_1_z,city1_ts1_z,city1_ts2_z),
  252      route_available(rail_route(n2z)),
  253      connects(rail_route(n2z),city2_ts1_z,city1_ts1_z),
  254      connects(rail_route(n2z),city1_ts1_z,city2_ts1_z),
  255
  256      connects(road_route_21_z,city1_z,city2_z),
  257      connects(road_route_21_z,city2_z,city1_z),
  258      route_available(road_route_21_z)
  259     ]).
  260
  261/*********************** ss classes ****************************************/
  262
  263substate_classes(physical_obj, P,
  264       [
  265        [at(P,L)]
  266       ]).
  267substate_classes(railv, V,
  268       [
  269        [unattached(V)] , [attached(V,V1)]
  270       ]).
  271substate_classes(vehicle, T,
  272       [
  273        [moveable(T),available(T)], 
  274        [moveable(T),busy(T)] 
  275       ]).
  276
  277substate_classes(package, P,
  278       [
  279        [uncertified(P)],
  280        [waiting(P),certified(P)],
  281        [loaded(P,V),certified(P)],
  282        [delivered(P)]
  283      ])