specification
[NAMES] --- THING ------------------------------------- | name: NAMES |--------------------------- | name in NAMES -----------------------------------------------
--- CLASSIC_REALM ----------------------------- | THING |--------------------------- | THING ----------------------------------------------- --- HOST_REALM ----------------------------- | THING |--------------------------- | THING -----------------------------------------------CLASSIC_REALM and HOST_REALM disjointly divide THING.
forall x:THING @ ((x in CLASSIC_REALM ) \/ (x in HOST_REALM )) /\ (x in CLASSIC_REALM ) => not (x in HOST_REALM)
| AtomicConcept : P CLASSIC_REALM; | AtomicRole : P (CLASSIC_REALM & THING); | AtomicAttr : P (CLASSIC_REALM --> THING);
| % The different flavours of interstection... | Intersect_C : AtomicConcept & AtomicConcept --> AtomicConcept; | Intersect_R : AtomicRole & AtomicRole --> AtomicRole; | Intersect_A : AtomicAttr & AtomicAttr --> AtomicAttr; | | % Role and attribute value restriction... | Restrict_R : AtomicRole & AtomicConcept --> AtomicConcept; | Restrict_A : AtomicAttr & AtomicConcept --> AtomicConcept; | | % Minimum and Maximum number restriction... | MinRestrict : N & AtomicRole --> AtomicConcept; | MaxRestrict : N & AtomicRole --> AtomicConcept; | | % Equality Restriction | EqRestrict : seq AtomicAttr & seq AtomicAttr --> AtomicConcept;
Atomic Extensions: The interpretation of an atomic concept is everything it subsumes. The interpretation of an atomic role is some relation between objects in the CLASSIC_REALM and objects in the universe. Since attributes are just single-valued roles, their interpretations are functions instead of relations.
Intersections: The extension of an intersection is just the set intersection of the extensions of the operands.
Value Restrictions: The extension of a value restriction is all those objects that have the specified role filled with an object in the extension of the specified concept.
Number Restriction: The extension of a number restriction is all those CLASSIC objects with at least (most) the specified number of fillers for the specified role.
exists y: AtomicConcept @ y=y | Interp_C: AtomicConcept --> P CLASSIC_REALM; | Interp_R: AtomicRole --> P (CLASSIC_REALM & THING); % | Interp_A: AtomicAttr --> P (CLASSIC_REALM +-> THING); | Interp_A: AtomicAttr --> P (CLASSIC_REALM & THING); | CLASSIC_THING : CLASSIC_REALM; |------------------------ | Interp_C(CLASSIC_THING) = CLASSIC_REALM; | | % Intersections... | forall c,d: AtomicConcept @ | Interp_C(Intersect_C(c,d)) = Interp_C(c) && Interp_C(d); | forall r,s: AtomicRole @ | Interp_R(Intersect_R(r,s)) = Interp_R(r) && Interp_R(s); | forall a,b: AtomicAttr @ | Interp_A(Intersect_A(a,b)) = Interp_A(a) && Interp_A(b); | | % Role and attribute value restriction... | forall r: AtomicRole @ forall c: AtomicConcept @ | Interp_C(Restrict_R(r,c)) = {d:CLASSIC_REALM | forall x:THING @ | (d -> x) in Interp_R(r) => x in Interp_C(c)}; | forall a: AtomicAttr @ forall c: AtomicConcept @ | Interp_C(Restrict_A(a,c)) = {d:CLASSIC_REALM | forall x:THING @ | (d -> x) in Interp_A(a) => x in Interp_C(c)}; | | % Minimum number restriction, Maximum number restriction... | forall n: N @ forall r: AtomicRole @ | Interp_C(MinRestrict(n,r))= {d:CLASSIC_REALM | | #{x:THING | (d -> x) in Interp_R(r)} < n+1}; | forall n: N @ forall r: AtomicRole @ | Interp_C(MaxRestrict(n,r))= {d:CLASSIC_REALM | | #{x:THING | (d -> x) in Interp_R(r)} > n-1}; | | % Equality restriction | forall sa, sb: seq AtomicAttr @ | Interp_C(EqRestrict(sa,sb)) = {d:CLASSIC_REALM | | #sa=1 /\ #sb=1 /\ | (exists x: THING @ | (d -> x) in Interp_A(head sa) /\ | (d -> x) in Interp_A(head sb)) | \/ #sa>1 /\ #sb=1 /\ | (exists c:CLASSIC_REALM @ exists x: THING @ | (d -> c) in Interp_A(head sa) /\ | c in Interp_C(EqRestrict(tail sa,sb)) /\ | (d -> x) in Interp_A(head sb)) | \/ #sa=1 /\ #sb>1 /\ | (exists c:CLASSIC_REALM @ exists x: THING @ | (d -> x) in Interp_A(head sa) /\ | (d -> c) in Interp_A(head sb) /\ | c in Interp_C(EqRestrict(sa,tail sb))) | \/ #sa>1 /\ #sb>1 /\ | (exists c,e:CLASSIC_REALM @ exists x: THING @ | (d -> c) in Interp_A(head sa) /\ | c in Interp_C(EqRestrict(tail sa,tail sb)) /\ | (d -> e) in Interp_A(head sb) /\ | e in Interp_C(EqRestrict(tail sa,tail sb))) | }
[DescrGraph] %forward declaration to be overriddenA bit of housekeeping: we need the maximum number of fillers for a role to be either a natrual number or infinity.
MAX_SPEC ::= infinity | const << N >>A R_Edge is a tuple,
--- R_Edge ------------------------------------- | role : NAMES; | min_ : N; | max_ : MAX_SPEC; | restrictionGraph : DescrGraph; |--------------------- | 1=1 ------------------------------------------------A Node is a set of concept names (the atoms of the node) together with a bag of R_Edges (the roles of the node).
--- Node -------------------------------------- | concepts : P THING; %?? | r_edges : bag R_Edge |--------------------- | 1=1 ------------------------------------------------An A_Edge is an attribute edge and is a binary role, so it has exactly two nodes...
--- A_Edge ---------------------------------------- | node1, node2 : Node; | attr : NAMES; |--------------------- | 1=1 ------------------------------------------------Finally, a description graph may be defined. A description graph has a set of nodes, a bag of A_Edges, and a distinguished node r in the set of nodes.
--- DescrGraph --------------------------------- | nodes : P Node; | edges : bag A_Edge; | r: Node; |--------------------- | r in nodes; ------------------------------------------------
end specification