language to formulate constraints on topic maps

  • structural: how must particular topics and particular associations look like
  • taxonomy: type hierarchy
  • application specific: "a man can only be legally married to one woman"
forall [ $m is-a man ]
    => forall [ (is-married-to)
                husband : $m
                wife    : $w ]
       => not exists [ (is-married-to)
                       husband : $m
                       wife    : $w2 ]
forall [ $m is-a master ]
=> exists [ $n is-a slave ]

different variables MUST have different values (something's gotta give)