Albert Berger and I were talking about navigating around an animal’s body parts using relationships. we wanted to be able to move from part to part using adjacency and so on, rather than just by moving from part to part by how they are put together. So, for example, going down the oesophagus to the stomach and turning left to find the pancreas. the pancreas is not directly connected to the stomach, but is nearby.

anyway, to help think this through I made a "cube of cubes". That is, a cube represents a body part and it is next to lots of other cubes. I used this as a highly styalised body — very styalised indeed. (sort of voxel like)

In a cube of cubes, a cube not at a face is surrounded by a cube on each face; a cube aligned on an edge and a cube touching each corner. This makes a total of 8 + 12 + 8 = 28 cubes. cubes at the edge have fewer adjacent cubes in the expected ways.

This is obviously hard work to do by hand; putting in up to 28 adjacency relationships by hand. So, I used inverses and sub-property chains to do most of the work for me. For a single, non-face cube I asserted an "up", "right" and "forward" property. Each of these properties has an inverse. So, for an individual cube A we asert a forward property to an individual cube B; the inverse of "forward" is "backward" and we automatically infer the inverse from the individual B. In this way, we can infer the missing three "face" relationships and have up/down; left/right and forward/backward for a non-face cube.

we can do sub-property chains for all the remaining adjacencies

- For an individual non-face cube A we can go forwards and left to find the cube that fits on the edge and lies between the forward cube and the cube to the left. we can say "forward O left implies front left"e;
- We can carry on doing this for all the cubes on the edges of the cube in question: Front right; back left; back right; up left; up right; up front; and so on.
- For a cube at a " point" we can go "front O up O left" to get the cube on the top left hand corner of the cube in question.
- again, we can do a series of sub-property chains based on up, left, and front (together with their inverses) to infer all these extra relationships.

this works fine. You can find a five by five cube ontology here. It has one class "cube" and a disproportionally complex property hierarchy. Each cube is an individual asserted to connect to only three neighbours. All other neighbour relationships are inferred. I wrote a little PERL script to generate the TBox and ABox in Manchester OWL Syntax. This script is in the zip file containing the cube ontology; I rarely programme these days and I had to get some rusty wheels turning again. One corner is the individual c000 and the diagonally opposite corner is, in this case, c444, with c222 being the central cube.

Here is the generated Manchester syntax for cube c222:

Individual: c222 Types: [in cubes.owl] Cube Facts: [in cubes.owl] hasNextFrontFace c221, hasNextRightFace c212, hasNextTopFace c122

Of course, there is more than one route from a given cube to a neighbouring cube. For the cube at the top right of a given cube, we can go:

- Front right and up;
- Front up and right;
- Right, front and up;
- Right, up and front;
- Up, front and right;
- Up, right and front;
- and many more that take routes longer than three — down, front, right, up and up, will also get you there.

this is all fine; it works. the properties for edges and corners have lots of sub-property chains (I think I have them all). what doesn’t work is having these properties functional. I want a constraint that a given cube can have only one cube touching each corner on the diagonal. a functional characteristic, however, makes a property non-simple. this means that sub-property chains will not work.

below are the inferences made on one of the cubes (c222, the central one):

hasNextFrontFace c221 hasNextTopFace c122 hasNextRightFace c212 hasFrontTopLeftCorner c131 hasBackBottomLeftCorner c333 hasBackTopRightCorner c113 hasFrontBottomLeftCorner c331 hasBackBottomEdge c323 hasBackTopLeftCorner c133 hasBottomRightEdge c312 hasNextBackFace c223 hasNextEdge c211 hasNextEdge c231 hasNextEdge c132 hasNextEdge c312 hasNextEdge c121 hasNextEdge c233 hasNextEdge c112 hasNextEdge c213 hasNextEdge c332 hasNextEdge c323 hasTopRightEdge c112 hasFrontRightEdge c211 hasFrontTopRightCorner c111 hasBottomLeftEdge c332 hasBackRightEdge c213 hasBackLeftEdge c233 hasFrontBottomRightCorner c311 hasBackBottomRightCorner c313 hasNextCube c012 hasNextCube c122 hasNextCube c131 hasNextCube c034 hasNextCube c314 hasNextCube c044 hasNextCube c123 hasNextCube c322 hasNextCube c222 hasNextCube c003 hasNextCube c310 hasNextCube c130 hasNextCube c240 hasNextCube c243 hasNextCube c224 hasNextCube c411 hasNextCube c042 hasNextCube c303 hasNextCube c320 hasNextCube c441 hasNextCube c030 hasNextCube c041 hasNextCube c124 hasNextCube c112 hasNextCube c413 hasNextCube c024 hasNextCube c110 hasNextCube c114 hasNextCube c013 hasNextCube c031 hasNextCube c113 hasNextCube c443 hasNextCube c234 hasNextCube c430 hasNextCube c340 hasNextCube c423 hasNextCube c444 hasNextCube c332 hasNextCube c242 hasNextCube c420 hasNextCube c032 hasNextCube c343 hasNextCube c341 hasNextCube c312 hasNextCube c212 hasNextCube c233 hasNextCube c313 hasNextCube c344 hasNextCube c321 hasNextCube c324 hasNextCube c334 hasNextCube c213 hasNextCube c424 hasNextCube c133 hasNextCube c301 hasNextCube c302 hasNextCube c232 hasNextCube c001 hasNextCube c304 hasNextCube c223 hasNextCube c330 hasNextCube c421 hasNextCube c103 hasNextCube c134 hasNextCube c011 hasNextCube c014 hasNextCube c210 hasNextCube c142 hasNextCube c412 hasNextCube c433 hasNextCube c000 hasNextCube c244 hasNextCube c401 hasNextCube c431 hasNextCube c434 hasNextCube c403 hasNextCube c020 hasNextCube c342 hasNextCube c432 hasNextCube c230 hasNextCube c323 hasNextCube c200 hasNextCube c414 hasNextCube c004 hasNextCube c333 hasNextCube c040 hasNextCube c101 hasNextCube c023 hasNextCube c410 hasNextCube c021 hasNextCube c102 hasNextCube c400 hasNextCube c220 hasNextCube c043 hasNextCube c010 hasNextCube c104 hasNextCube c241 hasNextCube c422 hasNextCube c211 hasNextCube c404 hasNextCube c141 hasNextCube c311 hasNextCube c022 hasNextCube c002 hasNextCube c214 hasNextCube c111 hasNextCube c442 hasNextCube c231 hasNextCube c132 hasNextCube c143 hasNextCube c140 hasNextCube c120 hasNextCube c204 hasNextCube c033 hasNextCube c202 hasNextCube c100 hasNextCube c331 hasNextCube c300 hasNextCube c203 hasNextCube c402 hasNextCube c201 hasNextCube c221 hasNextCube c121 hasNextCube c440 hasNextCube c144 hasFrontTopEdge c121 hasNextCorner c113 hasNextCorner c331 hasNextCorner c333 hasNextCorner c311 hasNextCorner c313 hasNextCorner c131 hasNextCorner c111 hasNextCorner c133 hasNextBottomFace c322 hasNextFace c232 hasNextFace c122 hasNextFace c212 hasNextFace c221 hasNextFace c223 hasNextFace c322 hasFrontLeftEdge c231 hasNextLeftFace c232 hasTopLeftEdge c132

Notice that that we have lots of entailments like "hasNextCube" due to the superproperties of all the properties also being entailled on a cube.

The inferences for cube c000 are:

hasBackLeftEdge c011 hasBackBottomLeftCorner c111 hasNextEdge c011 hasNextEdge c101 hasNextEdge c110 hasBackBottomEdge c101 hasNextCube c012 hasNextCube c122 hasNextCube c131 hasNextCube c034 hasNextCube c314 hasNextCube c044 hasNextCube c123 hasNextCube c322 hasNextCube c222 hasNextCube c003 hasNextCube c310 hasNextCube c130 hasNextCube c240 hasNextCube c243 hasNextCube c224 hasNextCube c411 hasNextCube c042 hasNextCube c303 hasNextCube c320 hasNextCube c441 hasNextCube c030 hasNextCube c041 hasNextCube c124 hasNextCube c112 hasNextCube c413 hasNextCube c024 hasNextCube c110 hasNextCube c114 hasNextCube c013 hasNextCube c031 hasNextCube c113 hasNextCube c443 hasNextCube c234 hasNextCube c430 hasNextCube c340 hasNextCube c423 hasNextCube c444 hasNextCube c332 hasNextCube c242 hasNextCube c420 hasNextCube c032 hasNextCube c343 hasNextCube c341 hasNextCube c312 hasNextCube c212 hasNextCube c233 hasNextCube c313 hasNextCube c344 hasNextCube c321 hasNextCube c324 hasNextCube c334 hasNextCube c213 hasNextCube c424 hasNextCube c133 hasNextCube c301 hasNextCube c302 hasNextCube c232 hasNextCube c001 hasNextCube c304 hasNextCube c223 hasNextCube c330 hasNextCube c421 hasNextCube c103 hasNextCube c134 hasNextCube c011 hasNextCube c014 hasNextCube c210 hasNextCube c142 hasNextCube c412 hasNextCube c433 hasNextCube c000 hasNextCube c244 hasNextCube c401 hasNextCube c431 hasNextCube c434 hasNextCube c403 hasNextCube c020 hasNextCube c342 hasNextCube c432 hasNextCube c230 hasNextCube c323 hasNextCube c200 hasNextCube c414 hasNextCube c004 hasNextCube c333 hasNextCube c040 hasNextCube c101 hasNextCube c023 hasNextCube c410 hasNextCube c021 hasNextCube c102 hasNextCube c400 hasNextCube c220 hasNextCube c043 hasNextCube c010 hasNextCube c104 hasNextCube c241 hasNextCube c422 hasNextCube c211 hasNextCube c404 hasNextCube c141 hasNextCube c311 hasNextCube c022 hasNextCube c002 hasNextCube c214 hasNextCube c111 hasNextCube c442 hasNextCube c231 hasNextCube c132 hasNextCube c143 hasNextCube c140 hasNextCube c120 hasNextCube c204 hasNextCube c033 hasNextCube c202 hasNextCube c100 hasNextCube c331 hasNextCube c300 hasNextCube c203 hasNextCube c402 hasNextCube c201 hasNextCube c221 hasNextCube c121 hasNextCube c440 hasNextCube c144 hasBottomLeftEdge c110 hasNextLeftFace c010 hasNextCorner c111 hasNextBottomFace c100 hasNextFace c100 hasNextFace c001 hasNextFace c010 hasNextBackFace c001

boring to work out if it is right, but I think it is.

## Leave a Reply