next up previous contents
Next: Robot Fastening and Disassembly Up: Spatial Reasoning for Robots: Previous: Future Research Directions

EPB/PDO Representation Example

This appendix lists a complete description of a simple scene using the EPB/PDO representation, implemented in LISP. The scene described has been used as input for the path planning system. A scale drawing of the scene, with labels showing how boundary elements have been named, is in figure A.1.

Figure A.1: Scene for EPB/PDO Example (drawn to scale)

The remainder of the appendix is a listing of the LISP representation.

; The following code describes a scene with four objects in it, 
;  objects A,B,C and D.

; All atom names can be arbitrary, but for this example, they are
;  named in the following mnemonic fashion:

; A segment atom is named with the object name, followed by a
;  number; e.g. A3.

; A junction atom is named with the object name, followed by the
;  numbers of the segments on either side; e.g. A3-4

; Object A has 14 sides, but can be regarded at coarser levels of
;  detail, as represented by sides 15 to 20.

(putprop 'A '(A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
              A11 A12 A13 A14 A15 A16 A17 A18 A19 A20
              A1-2 A2-3 A3-4 A4-5 A5-6 A6-7 A7-8 A8-9 A9-10
              A10-11 A11-12 A12-13 A13-14 A14-1 A15-16 A17-18 A18-19)

; Objects B and C have four sides, and D has six:

(putprop 'B '(B1 B2 B3 B4 B1-2 B2-3 B3-4 B4-1) 'boundary)
(putprop 'C '(C1 C2 C3 C4 C1-2 C2-3 C3-4 C4-1) 'boundary)
(putprop 'D '(D1 D2 D3 D4 D5 D6 D1-2 D2-3 D3-4 D4-5
                 D5-6 D6-1) 

; Note that default shape for a segment is a straight line
; (rather than curved or wiggly). No shape property therefore
; needs to be defined for a straight line, because assoc
; will return (curved nil), (wiggly nil) if the assoc list
; is empty.

; Segments on boundary of object A at the finest detail level:

(putprop 'A1 'A 'object)
(putprop 'A1 'segment 'type)
(putprop 'A1 '(A14-1) 'left)
(putprop 'A1 '(A1-2) 'right)
(putprop 'A1 'EQ9 'equidistant)
(putprop 'A1 '(I1 I3 I4 I41 I46 I53) 'internal)
(putprop 'A1 '(E1) 'external)

(putprop 'A2 'A 'object)
(putprop 'A2 'segment 'type)
(putprop 'A2 '(A1-2) 'left)
(putprop 'A2 '(A2-3) 'right)
(putprop 'A2 'EQ3a 'equidistant)
(putprop 'A2 '(I8) 'internal)
(putprop 'A2 '(E2) 'external)

(putprop 'A3 'A 'object)
(putprop 'A3 'segment 'type)
(putprop 'A3 '(A2-3) 'left)
(putprop 'A3 '(A3-4) 'right)
(putprop 'A3 'EQ1 'equidistant)
(putprop 'A3 '(I9 I9a I9b I9c I10 I11 I11a I44 I50) 'internal)
(putprop 'A3 '(E3) 'external)

(putprop 'A4 'A 'object)
(putprop 'A4 'segment 'type)
(putprop 'A4 '(A3-4) 'left)
(putprop 'A4 '(A4-5) 'right)
(putprop 'A4 'EQ5 'equidistant)
(putprop 'A4 '(I13 I14 I39 I51) 'internal)
(putprop 'A4 '(E4) 'external)

(putprop 'A5 'A 'object)
(putprop 'A5 'segment 'type)
(putprop 'A5 '(A4-5) 'left)
(putprop 'A5 '(A5-6) 'right)
(putprop 'A5 'EQ2 'equidistant)
; A5 has no internal proximities - it is down an alleyway
(putprop 'A5 '(E5) 'external)

(putprop 'A6 'A 'object)
(putprop 'A6 'segment 'type)
(putprop 'A6 '(A5-6) 'left)
(putprop 'A6 '(A6-7) 'right)
(putprop 'A6 'EQ3 'equidistant)
(putprop 'A6 '(I14 I38) 'internal)
(putprop 'A6 '(E6 E7 E8 E29) 'external)

(putprop 'A7 'A 'object)
(putprop 'A7 'segment 'type)
(putprop 'A7 '(A6-7) 'left)
(putprop 'A7 '(A7-8) 'right)
(putprop 'A7 'EQ1 'equidistant)
(putprop 'A7 '(I9c I28) 'internal)
; A7 has no external proximities - it is down an alleyway

(putprop 'A8 'A 'object)
(putprop 'A8 'segment 'type)
(putprop 'A8 '(A7-8) 'left)
(putprop 'A8 '(A8-9) 'right)
(putprop 'A8 'EQ1a 'equidistant)
(putprop 'A8 '(I18) 'internal)
(putprop 'A8 '(E8) 'external)

(putprop 'A9 'A 'object)
(putprop 'A9 'segment 'type)
(putprop 'A9 '(A8-9) 'left)
(putprop 'A9 '(A9-10) 'right)
(putprop 'A9 'EQ1 'equidistant)
;internal and external alleyways

(putprop 'A10 'A 'object)
(putprop 'A10 'segment 'type)
(putprop 'A10 '(A9-10) 'left)
(putprop 'A10 '(A10-11) 'right)
(putprop 'A10 'EQ1a 'equidistant)
(putprop 'A10 '(I18) 'internal)
(putprop 'A10 '(E10) 'external)

(putprop 'A11 'A 'object)
(putprop 'A11 'segment 'type)
(putprop 'A11 '(A10-11) 'left)
(putprop 'A11 '(A11-12) 'right)
(putprop 'A11 'EQ1 'equidistant)
(putprop 'A11 '(I3 I19 I4 I25) 'internal)

(putprop 'A12 'A 'object)
(putprop 'A12 'segment 'type)
(putprop 'A12 '(A11-12) 'left)
(putprop 'A12 '(A12-13) 'right)
(putprop 'A12 'EQ3 'equidistant)
(putprop 'A12 '(I20) 'internal)
(putprop 'A12 '(E10 E11 E6 E27) 'external)

(putprop 'A13 'A 'object)
(putprop 'A13 'segment 'type)
(putprop 'A13 '(A12-13) 'left)
(putprop 'A13 '(A13-14) 'right)
(putprop 'A13 'EQ6 'equidistant)
(putprop 'A13 '(I1 I23) 'internal)
(putprop 'A13 '(E12) 'external)

(putprop 'A14 'A 'object)
(putprop 'A14 'segment 'type)
(putprop 'A14 '(A13-14) 'left)
(putprop 'A14 '(A14-1) 'right)
(putprop 'A14 'EQ10 'equidistant)
(putprop 'A14 '(I20 I21 I22 I8 I36 I43 I54) 'internal)
(putprop 'A14 '(E13 E14) 'external)

; Junctions on boundary of object A at the fine detail level 

(putprop 'A1-2 'A 'object)
(putprop 'A1-2 'junction 'type)
(putprop 'A1-2 '((angle right)
                 (flex convex))
(putprop 'A1-2 '(A1) 'left)
(putprop 'A1-2 '(A2) 'right)
(putprop 'A1-2 '(I29) 'internal)
(putprop 'A1-2 '(E15 E15a) 'external)

(putprop 'A2-3 'A 'object)
(putprop 'A2-3 'junction 'type)
(putprop 'A2-3 '((angle right)
                 (flex concave))
(putprop 'A2-3 '(A2) 'left)
(putprop 'A2-3 '(A3) 'right)
(putprop 'A2-3 '(I22 I19 I45) 'internal)
(putprop 'A2-3 '(E16) 'external)

(putprop 'A3-4 'A 'object)
(putprop 'A3-4 'junction 'type)
(putprop 'A3-4 '((angle right)
                 (flex convex))
(putprop 'A3-4 '(A3) 'left)
(putprop 'A3-4 '(A4) 'right)
(putprop 'A3-4 '(I30) 'internal)
(putprop 'A3-4 '(E17 E17a) 'external)

(putprop 'A4-5 'A 'object)
(putprop 'A4-5 'junction 'type)
(putprop 'A4-5 '((angle right)
                 (flex convex))
(putprop 'A4-5 '(A4 A16) 'left)
(putprop 'A4-5 '(A5 A20) 'right)
(putprop 'A4-5 '(I30 I31 I49) 'internal)
(putprop 'A4-5 '(E18 E18a) 'external)

(putprop 'A5-6 'A 'object)
(putprop 'A5-6 'junction 'type)
(putprop 'A5-6 '((angle right)
                 (flex convex))
(putprop 'A5-6 '(A5) 'left)
(putprop 'A5-6 '(A6 A17) 'right)
(putprop 'A5-6 '(I31) 'internal)
(putprop 'A5-6 '(E19 E19a) 'external)

(putprop 'A6-7 'A 'object)
(putprop 'A6-7 'junction 'type)
(putprop 'A6-7 '((angle right)
                 (flex concave))
(putprop 'A6-7 '(A6) 'left)
(putprop 'A6-7 '(A7) 'right)
(putprop 'A6-7 '(I10 I13 I37) 'internal)
(putprop 'A6-7 '(E20) 'external)

(putprop 'A7-8 'A 'object)
(putprop 'A7-8 'junction 'type)
(putprop 'A7-8 '((angle right)
                 (flex concave))
(putprop 'A7-8 '(A7) 'left)
(putprop 'A7-8 '(A8) 'right)
(putprop 'A7-8 '(I9b I27 I32) 'internal)
(putprop 'A7-8 '(E20) 'external)

(putprop 'A8-9 'A 'object)
(putprop 'A8-9 'junction 'type)
(putprop 'A8-9 '((angle right)
                 (flex convex))
(putprop 'A8-9 '(A8) 'left)
(putprop 'A8-9 '(A9) 'right)
(putprop 'A8-9 '(I33) 'internal)
(putprop 'A8-9 '(E7) 'external)

(putprop 'A9-10 'A 'object)
(putprop 'A9-10 'junction 'type)
(putprop 'A9-10 '((angle right)
                 (flex convex))
(putprop 'A9-10 '(A9) 'left)
(putprop 'A9-10 '(A10) 'right)
(putprop 'A9-10 '(I33) 'internal)
(putprop 'A9-10 '(E11) 'external)

(putprop 'A10-11 'A 'object)
(putprop 'A10-11 'junction 'type)
(putprop 'A10-11 '((angle right)
                 (flex concave))
(putprop 'A10-11 '(A10) 'left)
(putprop 'A10-11 '(A11) 'right)
(putprop 'A10-11 '(I9a I26 I32) 'internal)
(putprop 'A10-11 '(E21) 'external)

(putprop 'A11-12 'A 'object)
(putprop 'A11-12 'junction 'type)
(putprop 'A11-12 '((angle right)
                 (flex concave))
(putprop 'A11-12 '(A11) 'left)
(putprop 'A11-12 '(A12) 'right)
(putprop 'A11-12 '(I3 I21 I24) 'internal)
(putprop 'A11-12 '(E21) 'external)

(putprop 'A12-13 'A 'object)
(putprop 'A12-13 'junction 'type)
(putprop 'A12-13 '((angle right)
                 (flex convex))
(putprop 'A12-13 '(A12 A19) 'left)
(putprop 'A12-13 '(A13) 'right)
(putprop 'A12-13 '(I34) 'internal)
(putprop 'A12-13 '(E22 E19a) 'external)

(putprop 'A13-14 'A 'object)
(putprop 'A13-14 'junction 'type)
(putprop 'A13-14 '((angle right)
                 (flex convex))
(putprop 'A13-14 '(A13 A20) 'left)
(putprop 'A13-14 '(A14) 'right)
(putprop 'A13-14 '(I34 I35) 'internal)
(putprop 'A13-14 '(E23 E23a) 'external)

(putprop 'A14-1 'A 'object)
(putprop 'A14-1 'junction 'type)
(putprop 'A14-1 '((angle right)
                 (flex convex))
(putprop 'A14-1 '(A14) 'left)
(putprop 'A14-1 '(A1 A15) 'right)
(putprop 'A14-1 '(I35 I29 I48) 'internal)
(putprop 'A14-1 '(E24) 'external)

; Segments on boundary of object A at coarse detail levels:

(putprop 'A15 'A 'object)
(putprop 'A15 'segment 'type)
(putprop 'A15 '(A14-1) 'left)
(putprop 'A15 '(A15-16) 'right)
(putprop 'A15 'EQ10 'equidistant)
(putprop 'A15 '(I23 I24 I25 I26 I27 I28 I42 I47 I55) 'internal)
(putprop 'A15 '(E25) 'external)

(putprop 'A16 'A 'object)
(putprop 'A16 'segment 'type)
(putprop 'A16 '(A15-16) 'left)
(putprop 'A16 '(A4-5) 'right)
(putprop 'A16 'EQ10 'equidistant)
(putprop 'A16 '(I36 I37 I38 I40 I52) 'internal)
(putprop 'A16 '(E26) 'external)

(putprop 'A17 'A 'object)
(putprop 'A17 'segment 'type)
(putprop 'A17 '(A5-6) 'left)
(putprop 'A17 '(A17-18) 'right)
(putprop 'A17 'EQ1a 'equidistant)
(putprop 'A17 '(I39 I40) 'internal)
(putprop 'A17 '(E27 E28) 'external)

(putprop 'A18 'A 'object)
(putprop 'A18 'segment 'type)
(putprop 'A18 '(A17-18) 'left)
(putprop 'A18 '(A18-19) 'right)
(putprop 'A18 'EQ2 'equidistant)
(putprop 'A18 '(I41 I42) 'internal)
; In an alleyway - no externals

(putprop 'A19 'A 'object)
(putprop 'A19 'segment 'type)
(putprop 'A19 '(A18-19) 'left)
(putprop 'A19 '(A12-13) 'right)
(putprop 'A19 'EQ1a 'equidistant)
(putprop 'A19 '(I43) 'internal)
(putprop 'A19 '(E29 E28) 'external)

(putprop 'A20 'A 'object)
(putprop 'A20 'segment 'type)
(putprop 'A20 '(A4-5) 'left)
(putprop 'A20 '(A13-14) 'right)
(putprop 'A20 'EQ10 'equidistant)
(putprop 'A20 '(I44 I45 I46 I47) 'internal)
(putprop 'A20 '(E30) 'external)

; Junctions that occur between coarse segments only:

(putprop 'A15-16 'A 'object)
(putprop 'A15-16 'junction 'type)
(putprop 'A15-16 '((angle right)
                 (flex convex))
(putprop 'A15-16 '(A15) 'left)
(putprop 'A15-16 '(A16) 'right)
(putprop 'A15-16 '(I48 I49) 'internal)
(putprop 'A15-16 '(E31 E31a) 'external)

(putprop 'A17-18 'A 'object)
(putprop 'A17-18 'junction 'type)
(putprop 'A17-18 '((angle right)
                 (flex concave))
(putprop 'A17-18 '(A17) 'left)
(putprop 'A17-18 '(A18) 'right)
(putprop 'A17-18 '(I50 I51 I52) 'internal)
(putprop 'A17-18 '(E32) 'external)

(putprop 'A18-19 'A 'object)
(putprop 'A18-19 'junction 'type)
(putprop 'A18-19 '((angle right)
                 (flex concave))
(putprop 'A18-19 '(A18) 'left)
(putprop 'A18-19 '(A19) 'right)
(putprop 'A18-19 '(I50 I51 I52) 'internal)
(putprop 'A18-19 '(E32) 'external)
; The following is a description of shape B:

(putprop 'B1 'B 'object)
(putprop 'B1 'segment 'type)
(putprop 'B1 '(B4-1) 'left)
(putprop 'B1 '(B1-2) 'right)
(putprop 'B1 'EQ20 'equidistant)
(putprop 'B1 '(I56) 'internal)

(putprop 'B2 'B 'object)
(putprop 'B2 'segment 'type)
(putprop 'B2 '(B1-2) 'left)
(putprop 'B2 '(B2-3) 'right)
(putprop 'B2 'EQ4 'equidistant)
(putprop 'B2 '(I57) 'internal)

(putprop 'B3 'B 'object)
(putprop 'B3 'segment 'type)
(putprop 'B3 '(B2-3) 'left)
(putprop 'B3 '(B3-4) 'right)
(putprop 'B3 'EQ20 'equidistant)
(putprop 'B3 '(I56) 'internal)
(putprop 'B3 '(E33 E34 E35 E17 E31 E25 E16 E15 E1 E24 E37 E38 E39)

(putprop 'B4 'B 'object)
(putprop 'B4 'segment 'type)
(putprop 'B4 '(B3-4) 'left)
(putprop 'B4 '(B4-1) 'right)
(putprop 'B4 'EQ4 'equidistant)
(putprop 'B4 '(I57) 'internal)

(putprop 'B1-2 'B 'object)
(putprop 'B1-2 'junction 'type)
(putprop 'B1-2 '((angle right)
                 (flex convex))
(putprop 'B1-2 '(B1) 'left)
(putprop 'B1-2 '(B2) 'right)
(putprop 'B1-2 '(I58 I59) 'internal)

(putprop 'B2-3 'B 'object)
(putprop 'B2-3 'junction 'type)
(putprop 'B2-3 '((angle right)
                 (flex convex))
(putprop 'B2-3 '(B2) 'left)
(putprop 'B2-3 '(B3) 'right)
(putprop 'B2-3 '(I59 I60) 'internal)
(putprop 'B2-3 '(E40) 'external)

(putprop 'B3-4 'B 'object)
(putprop 'B3-4 'junction 'type)
(putprop 'B3-4 '((angle right)
                 (flex convex))
(putprop 'B3-4 '(B3) 'left)
(putprop 'B3-4 '(B4) 'right)
(putprop 'B3-4 '(I60 I61) 'internal)
(putprop 'B3-4 '(E41) 'external)

(putprop 'B4-1 'B 'object)
(putprop 'B4-1 'junction 'type)
(putprop 'B4-1 '((angle right)
                 (flex convex))
(putprop 'B4-1 '(B4) 'left)
(putprop 'B4-1 '(B1) 'right)
(putprop 'B4-1 '(I58 I61) 'internal)

; The following is a description of shape C:

(putprop 'C1 'C 'object)
(putprop 'C1 'segment 'type)
(putprop 'C1 '(C4-1) 'left)
(putprop 'C1 '(C1-2) 'right)
(putprop 'C1 'EQ10 'equidistant)
(putprop 'C1 '(I62) 'internal)
(putprop 'C1 '(E33) 'external)

(putprop 'C2 'C 'object)
(putprop 'C2 'segment 'type)
(putprop 'C2 '(C1-2) 'left)
(putprop 'C2 '(C2-3) 'right)
(putprop 'C2 'EQ17 'equidistant)
(putprop 'C2 '(I63) 'internal)

(putprop 'C3 'C 'object)
(putprop 'C3 'segment 'type)
(putprop 'C3 '(C2-3) 'left)
(putprop 'C3 '(C3-4) 'right)
(putprop 'C3 'EQ10 'equidistant)
(putprop 'C3 '(I62) 'internal)

(putprop 'C4 'C 'object)
(putprop 'C4 'segment 'type)
(putprop 'C4 '(C3-4) 'left)
(putprop 'C4 '(C4-1) 'right)
(putprop 'C4 'EQ17 'equidistant)
(putprop 'C4 '(I63) 'internal)
(putprop 'C4 '(E42 E43 E44 E18a E26 E4 E17a E31a E15a) 'external)

(putprop 'C1-2 'C 'object)
(putprop 'C1-2 'junction 'type)
(putprop 'C1-2 '((angle right)
                 (flex convex))
(putprop 'C1-2 '(C1) 'left)
(putprop 'C1-2 '(C2) 'right)
(putprop 'C1-2 '(I64 I65) 'internal)
(putprop 'C1-2 '(E40) 'external)

(putprop 'C2-3 'C 'object)
(putprop 'C2-3 'junction 'type)
(putprop 'C2-3 '((angle right)
                 (flex convex))
(putprop 'C2-3 '(C2) 'left)
(putprop 'C2-3 '(C3) 'right)
(putprop 'C2-3 '(I65 I66) 'internal)

(putprop 'C3-4 'C 'object)
(putprop 'C3-4 'junction 'type)
(putprop 'C3-4 '((angle right)
                 (flex convex))
(putprop 'C3-4 '(C3) 'left)
(putprop 'C3-4 '(C4) 'right)
(putprop 'C3-4 '(I66 I67) 'internal)
(putprop 'C3-4 '(E45) 'external)

(putprop 'C4-1 'C 'object)
(putprop 'C4-1 'junction 'type)
(putprop 'C4-1 '((angle right)
                 (flex convex))
(putprop 'C4-1 '(C4) 'left)
(putprop 'C4-1 '(C1) 'right)
(putprop 'C4-1 '(I64 I67) 'internal)
(putprop 'C4-1 '(E34) 'external)

; The following is a description of shape D:

(putprop 'D1 'D 'object)
(putprop 'D1 'segment 'type)
(putprop 'D1 '(D6-1) 'left)
(putprop 'D1 '(D1-2) 'right)
(putprop 'D1 'EQ4 'equidistant)
(putprop 'D1 '(I68) 'internal)
(putprop 'D1 '(E39) 'external)

(putprop 'D2 'D 'object)
(putprop 'D2 'segment 'type)
(putprop 'D2 '(D1-2) 'left)
(putprop 'D2 '(D2-3) 'right)
(putprop 'D2 'EQ14 'equidistant)
(putprop 'D2 '(I69) 'internal)
(putprop 'D2 '(E13 E23 E44) 'external)

(putprop 'D3 'D 'object)
(putprop 'D3 'segment 'type)
(putprop 'D3 '(D2-3) 'left)
(putprop 'D3 '(D3-4) 'right)
(putprop 'D3 'EQ15a 'equidistant)
(putprop 'D3 '(I70) 'internal)
(putprop 'D3 '(E37 E12 E22 E19 E5) 'external)

(putprop 'D4 'D 'object)
(putprop 'D4 'segment 'type)
(putprop 'D4 '(D3-4) 'left)
(putprop 'D4 '(D4-5) 'right)
(putprop 'D4 'EQ4 'equidistant)
(putprop 'D4 '(I71) 'internal)
(putprop 'D4 '(E42) 'external)

(putprop 'D5 'D 'object)
(putprop 'D5 'segment 'type)
(putprop 'D5 '(D4-5) 'left)
(putprop 'D5 '(D5-6) 'right)
(putprop 'D5 'EQ16a 'equidistant)
(putprop 'D5 '(I68 I70) 'internal)

(putprop 'D6 'D 'object)
(putprop 'D6 'segment 'type)
(putprop 'D6 '(D5-6) 'left)
(putprop 'D6 '(D6-1) 'right)
(putprop 'D6 'EQ15 'equidistant)
(putprop 'D6 '(I69 I71) 'internal)

(putprop 'D1-2 'D 'object)
(putprop 'D1-2 'junction 'type)
(putprop 'D1-2 '((angle right)
                 (flex convex))
(putprop 'D1-2 '(D1) 'left)
(putprop 'D1-2 '(D2) 'right)
(putprop 'D1-2 '(I72) 'internal)
(putprop 'D1-2 '(E38 E14) 'external)

(putprop 'D2-3 'D 'object)
(putprop 'D2-3 'junction 'type)
(putprop 'D2-3 '((angle right)
                 (flex concave))
(putprop 'D2-3 '(D2) 'left)
(putprop 'D2-3 '(D3) 'right)
(putprop 'D2-3 '(I73) 'internal)
(putprop 'D2-3 '(E23a) 'external)

(putprop 'D3-4 'D 'object)
(putprop 'D3-4 'junction 'type)
(putprop 'D3-4 '((angle right)
                 (flex convex))
(putprop 'D3-4 '(D3) 'left)
(putprop 'D3-4 '(D4) 'right)
(putprop 'D3-4 '(I74) 'internal)
(putprop 'D3-4 '(E43) 'external)

(putprop 'D4-5 'D 'object)
(putprop 'D4-5 'junction 'type)
(putprop 'D4-5 '((angle right)
                 (flex convex))
(putprop 'D4-5 '(D4) 'left)
(putprop 'D4-5 '(D5) 'right)
(putprop 'D4-5 '(I74 I75) 'internal)
(putprop 'D4-5 '(E45) 'external)

(putprop 'D5-6 'D 'object)
(putprop 'D5-6 'junction 'type)
(putprop 'D5-6 '((angle right)
                 (flex convex))
(putprop 'D5-6 '(D5) 'left)
(putprop 'D5-6 '(D6) 'right)
(putprop 'D5-6 '(I73 I75 I76) 'internal)

(putprop 'D6-1 'D 'object)
(putprop 'D6-1 'junction 'type)
(putprop 'D6-1 '((angle right)
                 (flex convex))
(putprop 'D6-1 '(D6) 'left)
(putprop 'D6-1 '(D1) 'right)
(putprop 'D6-1 '(I76 I72) 'internal)
(putprop 'D6-1 '(E41) 'external)
; Internal proximity pairs for the whole scene:

(setf I1 '(A1 A13))
(setf I3 '(A1 A11-12))
(setf I4 '(A1 A11))

(setf I8 '(A2 A14))

(setf I9 '(A3 A11))
(setf I9a '(A3 A10-11))
(setf I9b '(A3 A7-8))
(setf I9c '(A3 A7))
(setf I10 '(A3 A6-7))
(setf I11 '(A3 A18))
(setf I11a '(A3 A17-18))

(setf I13 '(A4 A6-7))
(setf I14 '(A4 A6))

(setf I18 '(A8 A10))

(setf I19 '(A11 A2-3))

(setf I20 '(A12 A14))

(setf I21 '(A14 A11-12))
(setf I22 '(A14 A2-3))

(setf I23 '(A15 A13))
(setf I24 '(A15 A11-12))
(setf I25 '(A15 A11))
(setf I26 '(A15 A10-11))
(setf I27 '(A15 A7-8))
(setf I28 '(A15 A7))

(setf I29 '(A1-2 A14-1))

(setf I30 '(A3-4 A4-5))

(setf I31 '(A4-5 A5-6))

(setf I32 '(A7-8 A10-11))

(setf I33 '(A8-9 A9-10))

(setf I34 '(A12-13 A13-14))

(setf I35 '(A13-14 A14-1))

(setf I36 '(A16 A14))
(setf I37 '(A16 A6-7))
(setf I38 '(A16 A6))

(setf I39 '(A17 A4))
(setf I40 '(A17 A16))

(setf I41 '(A18 A1))
(setf I42 '(A18 A15))

(setf I43 '(A19 A14))

(setf I44 '(A20 A3))
(setf I45 '(A20 A2-3))
(setf I46 '(A20 A1))
(setf I47 '(A20 A15))

(setf I48 '(A15-16 A14-1))
(setf I49 '(A15-16 A4-5))

(setf I50 '(A17-18 A3))
(setf I51 '(A17-18 A4))
(setf I52 '(A17-18 A16))

(setf I53 '(A18-19 A1))
(setf I54 '(A18-19 A14))
(setf I55 '(A18-19 A15))

(setf I56 '(B1 B3))
(setf I57 '(B2 B4))

(setf I58 '(B1-2 B4-1))
(setf I59 '(B1-2 B2-3))
(setf I60 '(B2-3 B3-4))
(setf I61 '(B3-4 B4-1))

(setf I62 '(C1 C3))
(setf I63 '(C2 C4))

(setf I64 '(C1-2 C4-1))
(setf I65 '(C1-2 C2-3))
(setf I66 '(C2-3 C3-4))
(setf I67 '(C3-4 C4-1))

(setf I68 '(D1 D5))
(setf I69 '(D2 D6))
(setf I70 '(D3 D5))
(setf I71 '(D4 D6))

(setf I72 '(D1-2 D6-1))
(setf I73 '(D2-3 D5-6))
(setf I74 '(D3-4 D4-5))
(setf I75 '(D4-5 D5-6))
(setf I76 '(D5-6 D6-1))

; External proximity pairs:

(setf E1 '(A1 B3))
(setf E2 '(A2 C4))
(setf E3 '(A3 B3))
(setf E4 '(A4 C4))
(setf E5 '(A5 D3))
(setf E6 '(A6 A12))
(setf E7 '(A6 A8-9))
(setf E8 '(A6 A8))
(setf E10 '(A10 A12))
(setf E11 '(A12 A9-10))
(setf E12 '(A13 D3))
(setf E13 '(A14 D2))
(setf E14 '(A14 D1-2))
(setf E15 '(A1-2 B3))
(setf E15a '(A1-2 C4))
(setf E16 '(A2-3 B3))
(setf E17 '(A3-4 B3))
(setf E17a '(A3-4 C4))
(setf E18 '(A4-5 D3))
(setf E18a '(A4-5 C4))
(setf E19 '(A5-6 D3))
(setf E19a '(A5-6 A12-13))
(setf E20 '(A6-7 A7-8))
(setf E21 '(A10-11 A11-12))
(setf E22 '(A12-13 D3))
(setf E23 '(A13-14 D2))
(setf E23a '(A13-14 D2-3))
(setf E24 '(A14-1 B3))
(setf E25 '(A15 B3))
(setf E26 '(A16 C4))
(setf E27 '(A17 A12))
(setf E28 '(A17 A19))
(setf E29 '(A19 A6))
(setf E30 '(A20 D3))
(setf E31 '(A15-16 B3))
(setf E31a '(A15-16 C4))
(setf E32 '(A17-18 A18-19))

(setf E33 '(B3 C1))
(setf E34 '(B3 C4-1))
(setf E35 '(B3 D3-4))
(setf E37 '(B3 D3))
(setf E38 '(B3 D1-2))
(setf E39 '(B3 D1))
(setf E40 '(B2-3 C1-2))
(setf E41 '(B3-4 D6-1))

(setf E42 '(C4 D4))
(setf E43 '(C4 D3-4))
(setf E44 '(C4 D2))
(setf E45 '(C3-4 D4-5))
; Equidistance lists define which proximities and segment
; sizes are equal:

(setf contact '(E33 E34 E40))

(setf EQ1 '(E8 E21 E10 E20 E7 E11 I33 I32 I18 A3 A7 A9 A11))
(setf EQ1a '(A8 A10 A17 A19))
(setf EQ2 '(E32 E29 E27 E28 E19a E6 I14 I13 I31 I37 I38 I51
                I52 I40 I39 A5 A18))
(setf EQ3 '(E42 E43 E45 A6 A12))
(setf EQ3a '(I9 I9a I9b I9c I10 I19 I50 A2))
(setf EQ4 '(I11 I11a I56 I59 I61 I69 I70 I72 I73 I74 E23 E13
                E14 B2 B4 D1 D4))
(setf EQ5 '(I30 I45 I44 A4))
(setf EQ6 '(I34 I20 I21 I43 I54 A13))
(setf EQ7 '(I3 I4 I24 I25 I26 I27 I28))
(setf EQ8 '(I53 I55 I41 I42))
(setf EQ9 '(I22 I8 I29 A1))
(setf EQ10 '(I63 I64 I66 I46 I47 I48 I49 I36 I35 I1 I23 E1
                 E15 E24 E25 E31 A14 A15 A16 A20 C1 C3))
(setf EQ11 '(E3 E16 E17))
(setf EQ12 '(E38 E39 E41))
(setf EQ13 '(E30 E22 E19 E18 E12 E5 E23a))
(setf EQ14 '(E31a E26 E18a E17a E4 D2))
(setf EQ14a '(E2 E15a))
(setf EQ15 '(I76 I68 D6))
(setf EQ15a '(D3))
(setf EQ16 '(E37 E35 E44))
(setf EQ16a '(I71 I75 D5))
(setf EQ17 '(I67 I65 I62 C2 C4))
(setf EQ20 '(I60 I58 I57 B1 B3))
; Pointers from external proximity pairs to associated 
; equidistance lists:

(putprop 'E33 'contact 'equidistant)
(putprop 'E34 'contact 'equidistant)
(putprop 'E40 'contact 'equidistant)
(putprop 'E8 'EQ1 'equidistant)
(putprop 'E21 'EQ1 'equidistant)
(putprop 'E10 'EQ1 'equidistant)
(putprop 'E20 'EQ1 'equidistant)
(putprop 'E7 'EQ1 'equidistant)
(putprop 'E11 'EQ1 'equidistant)
(putprop 'E32 'EQ2 'equidistant)
(putprop 'E29 'EQ2 'equidistant)
(putprop 'E27 'EQ2 'equidistant)
(putprop 'E28 'EQ2 'equidistant)
(putprop 'E19a 'EQ2 'equidistant)
(putprop 'E6 'EQ2 'equidistant)
(putprop 'E42 'EQ3 'equidistant)
(putprop 'E43 'EQ3 'equidistant)
(putprop 'E45 'EQ3 'equidistant)
(putprop 'E23 'EQ4 'equidistant)
(putprop 'E13 'EQ4 'equidistant)
(putprop 'E14 'EQ4 'equidistant)
(putprop 'E1 'EQ10 'equidistant)
(putprop 'E15 'EQ10 'equidistant)
(putprop 'E24 'EQ10 'equidistant)
(putprop 'E25 'EQ10 'equidistant)
(putprop 'E31 'EQ10 'equidistant)
(putprop 'E3 'EQ11 'equidistant)
(putprop 'E16 'EQ11 'equidistant)
(putprop 'E17 'EQ11 'equidistant)
(putprop 'E38 'EQ12 'equidistant)
(putprop 'E39 'EQ12 'equidistant)
(putprop 'E41 'EQ12 'equidistant)
(putprop 'E30 'EQ13 'equidistant)
(putprop 'E22 'EQ13 'equidistant)
(putprop 'E19 'EQ13 'equidistant)
(putprop 'E18 'EQ13 'equidistant)
(putprop 'E12 'EQ13 'equidistant)
(putprop 'E23a 'EQ13 'equidistant)
(putprop 'E5 'EQ13 'equidistant)
(putprop 'E31a 'EQ14 'equidistant)
(putprop 'E26 'EQ14 'equidistant)
(putprop 'E18a 'EQ14 'equidistant)
(putprop 'E17a 'EQ14 'equidistant)
(putprop 'E4 'EQ14 'equidistant)
(putprop 'E2 'EQ14a 'equidistant)
(putprop 'E15a 'EQ14a 'equidistant)
(putprop 'E37 'EQ16 'equidistant)
(putprop 'E35 'EQ16 'equidistant)
(putprop 'E44 'EQ16 'equidistant)

; Pointers from internal proximity pairs to equidistance lists:

(putprop 'I33 'EQ1 'equidistant)
(putprop 'I32 'EQ1 'equidistant)
(putprop 'I18 'EQ1 'equidistant)
(putprop 'I14 'EQ2 'equidistant)
(putprop 'I13 'EQ2 'equidistant)
(putprop 'I31 'EQ2 'equidistant)
(putprop 'I37 'EQ2 'equidistant)
(putprop 'I38 'EQ2 'equidistant)
(putprop 'I51 'EQ2 'equidistant)
(putprop 'I52 'EQ2 'equidistant)
(putprop 'I40 'EQ2 'equidistant)
(putprop 'I39 'EQ2 'equidistant)
(putprop 'I9 'EQ3a 'equidistant)
(putprop 'I9a 'EQ3a 'equidistant)
(putprop 'I9b 'EQ3a 'equidistant)
(putprop 'I9c 'EQ3a 'equidistant)
(putprop 'I10 'EQ3a 'equidistant)
(putprop 'I19 'EQ3a 'equidistant)
(putprop 'I50 'EQ3a 'equidistant)
(putprop 'I11 'EQ4 'equidistant)
(putprop 'I11a 'EQ4 'equidistant)
(putprop 'I56 'EQ4 'equidistant)
(putprop 'I59 'EQ4 'equidistant)
(putprop 'I61 'EQ4 'equidistant)
(putprop 'I69 'EQ4 'equidistant)
(putprop 'I70 'EQ4 'equidistant)
(putprop 'I72 'EQ4 'equidistant)
(putprop 'I73 'EQ4 'equidistant)
(putprop 'I74 'EQ4 'equidistant)
(putprop 'I30 'EQ5 'equidistant)
(putprop 'I45 'EQ5 'equidistant)
(putprop 'I44 'EQ5 'equidistant)
(putprop 'I34 'EQ6 'equidistant)
(putprop 'I20 'EQ6 'equidistant)
(putprop 'I21 'EQ6 'equidistant)
(putprop 'I43 'EQ6 'equidistant)
(putprop 'I54 'EQ6 'equidistant)
(putprop 'I3 'EQ7 'equidistant)
(putprop 'I4 'EQ7 'equidistant)
(putprop 'I24 'EQ7 'equidistant)
(putprop 'I25 'EQ7 'equidistant)
(putprop 'I26 'EQ7 'equidistant)
(putprop 'I27 'EQ7 'equidistant)
(putprop 'I28 'EQ7 'equidistant)
(putprop 'I53 'EQ8 'equidistant)
(putprop 'I55 'EQ8 'equidistant)
(putprop 'I41 'EQ8 'equidistant)
(putprop 'I42 'EQ8 'equidistant)
(putprop 'I22 'EQ9 'equidistant)
(putprop 'I8 'EQ9 'equidistant)
(putprop 'I29 'EQ9 'equidistant)
(putprop 'I63 'EQ10 'equidistant)
(putprop 'I64 'EQ10 'equidistant)
(putprop 'I66 'EQ10 'equidistant)
(putprop 'I46 'EQ10 'equidistant)
(putprop 'I47 'EQ10 'equidistant)
(putprop 'I48 'EQ10 'equidistant)
(putprop 'I49 'EQ10 'equidistant)
(putprop 'I36 'EQ10 'equidistant)
(putprop 'I35 'EQ10 'equidistant)
(putprop 'I1 'EQ10 'equidistant)
(putprop 'I23 'EQ10 'equidistant)
(putprop 'I76 'EQ15 'equidistant)
(putprop 'I68 'EQ15 'equidistant)
(putprop 'I67 'EQ17 'equidistant)
(putprop 'I65 'EQ17 'equidistant)
(putprop 'I62 'EQ17 'equidistant)
(putprop 'I71 'EQ16a 'equidistant)
(putprop 'I75 'EQ16a 'equidistant)
(putprop 'I60 'EQ20 'equidistant)
(putprop 'I58 'EQ20 'equidistant)
(putprop 'I57 'EQ20 'equidistant)
; Note that the name Inn rather than Enn does not yet
; mean anything. We still have to describe whether each
; proximity is internal or external:

(putprop 'I1 'internal 'type)
(putprop 'I3 'internal 'type)
(putprop 'I4 'internal 'type)
(putprop 'I8 'internal 'type)
(putprop 'I9 'internal 'type)
(putprop 'I9a 'internal 'type)
(putprop 'I9b 'internal 'type)
(putprop 'I9c 'internal 'type)
(putprop 'I10 'internal 'type)
(putprop 'I11 'internal 'type)
(putprop 'I11a 'internal 'type)
(putprop 'I13 'internal 'type)
(putprop 'I14 'internal 'type)
(putprop 'I18 'internal 'type)
(putprop 'I19 'internal 'type)
(putprop 'I20 'internal 'type)
(putprop 'I21 'internal 'type)
(putprop 'I22 'internal 'type)
(putprop 'I23 'internal 'type)
(putprop 'I24 'internal 'type)
(putprop 'I25 'internal 'type)
(putprop 'I26 'internal 'type)
(putprop 'I27 'internal 'type)
(putprop 'I28 'internal 'type)
(putprop 'I29 'internal 'type)
(putprop 'I30 'internal 'type)
(putprop 'I31 'internal 'type)
(putprop 'I32 'internal 'type)
(putprop 'I33 'internal 'type)
(putprop 'I34 'internal 'type)
(putprop 'I35 'internal 'type)
(putprop 'I36 'internal 'type)
(putprop 'I37 'internal 'type)
(putprop 'I38 'internal 'type)
(putprop 'I39 'internal 'type)
(putprop 'I40 'internal 'type)
(putprop 'I41 'internal 'type)
(putprop 'I42 'internal 'type)
(putprop 'I43 'internal 'type)
(putprop 'I44 'internal 'type)
(putprop 'I45 'internal 'type)
(putprop 'I46 'internal 'type)
(putprop 'I47 'internal 'type)
(putprop 'I48 'internal 'type)
(putprop 'I49 'internal 'type)
(putprop 'I50 'internal 'type)
(putprop 'I51 'internal 'type)
(putprop 'I52 'internal 'type)
(putprop 'I53 'internal 'type)
(putprop 'I54 'internal 'type)
(putprop 'I55 'internal 'type)
(putprop 'I56 'internal 'type)
(putprop 'I57 'internal 'type)
(putprop 'I58 'internal 'type)
(putprop 'I59 'internal 'type)
(putprop 'I60 'internal 'type)
(putprop 'I61 'internal 'type)
(putprop 'I62 'internal 'type)
(putprop 'I63 'internal 'type)
(putprop 'I64 'internal 'type)
(putprop 'I65 'internal 'type)
(putprop 'I66 'internal 'type)
(putprop 'I67 'internal 'type)
(putprop 'I68 'internal 'type)
(putprop 'I69 'internal 'type)
(putprop 'I70 'internal 'type)
(putprop 'I71 'internal 'type)
(putprop 'I72 'internal 'type)
(putprop 'I73 'internal 'type)
(putprop 'I74 'internal 'type)
(putprop 'I75 'internal 'type)
(putprop 'I76 'internal 'type)

(putprop 'E1 'external 'type)
(putprop 'E2 'external 'type)
(putprop 'E3 'external 'type)
(putprop 'E4 'external 'type)
(putprop 'E5 'external 'type)
(putprop 'E6 'external 'type)
(putprop 'E7 'external 'type)
(putprop 'E8 'external 'type)
(putprop 'E10 'external 'type)
(putprop 'E11 'external 'type)
(putprop 'E12 'external 'type)
(putprop 'E13 'external 'type)
(putprop 'E14 'external 'type)
(putprop 'E15 'external 'type)
(putprop 'E15a 'external 'type)
(putprop 'E16 'external 'type)
(putprop 'E17 'external 'type)
(putprop 'E17a 'external 'type)
(putprop 'E18 'external 'type)
(putprop 'E18a 'external 'type)
(putprop 'E19 'external 'type)
(putprop 'E19a 'external 'type)
(putprop 'E20 'external 'type)
(putprop 'E21 'external 'type)
(putprop 'E22 'external 'type)
(putprop 'E23 'external 'type)
(putprop 'E23a 'external 'type)
(putprop 'E24 'external 'type)
(putprop 'E25 'external 'type)
(putprop 'E26 'external 'type)
(putprop 'E27 'external 'type)
(putprop 'E28 'external 'type)
(putprop 'E29 'external 'type)
(putprop 'E30 'external 'type)
(putprop 'E31 'external 'type)
(putprop 'E31a 'external 'type)
(putprop 'E32 'external 'type)
(putprop 'E33 'external 'type)
(putprop 'E34 'external 'type)
(putprop 'E35 'external 'type)
(putprop 'E37 'external 'type)
(putprop 'E38 'external 'type)
(putprop 'E39 'external 'type)
(putprop 'E40 'external 'type)
(putprop 'E41 'external 'type)
(putprop 'E42 'external 'type)
(putprop 'E43 'external 'type)
(putprop 'E44 'external 'type)
(putprop 'E45 'external 'type)
; Finally, even though the names for equal distances are
; already alphabetically ordered, the partial ordering must
; be established in lisp:

(putprop 'contact 'EQ1 'larger)
(putprop 'EQ1 'contact 'smaller)
(putprop 'EQ1 'EQ1a 'larger)
(putprop 'EQ1a 'EQ1 'smaller)
(putprop 'EQ1a 'EQ2 'larger)
(putprop 'EQ2 'EQ1a 'smaller)
(putprop 'EQ2 'EQ3 'larger)
(putprop 'EQ3 'EQ2 'smaller)
(putprop 'EQ3 'EQ3a 'larger)
(putprop 'EQ3a 'EQ3 'smaller)
(putprop 'EQ3a 'EQ4 'larger)
(putprop 'EQ4 'EQ3a 'smaller)
(putprop 'EQ4 'EQ5 'larger)
(putprop 'EQ5 'EQ4 'smaller)
(putprop 'EQ5 'EQ6 'larger)
(putprop 'EQ6 'EQ5 'smaller)
(putprop 'EQ6 'EQ7 'larger)
(putprop 'EQ7 'EQ6 'smaller)
(putprop 'EQ7 'EQ8 'larger)
(putprop 'EQ8 'EQ7 'smaller)
(putprop 'EQ8 'EQ9 'larger)
(putprop 'EQ9 'EQ8 'smaller)
(putprop 'EQ9 'EQ10 'larger)
(putprop 'EQ10 'EQ9 'smaller)
(putprop 'EQ10 'EQ11 'larger)
(putprop 'EQ11 'EQ10 'smaller)
(putprop 'EQ11 'EQ12 'larger)
(putprop 'EQ12 'EQ11 'smaller)
(putprop 'EQ12 'EQ13 'larger)
(putprop 'EQ13 'EQ12 'smaller)
(putprop 'EQ13 'EQ14 'larger)
(putprop 'EQ14 'EQ13 'smaller)
(putprop 'EQ14 'EQ14a 'larger)
(putprop 'EQ14a 'EQ14 'smaller)
(putprop 'EQ14a 'EQ15 'larger)
(putprop 'EQ15 'EQ14a 'smaller)
(putprop 'EQ15 'EQ15a 'larger)
(putprop 'EQ15a 'EQ15 'smaller)
(putprop 'EQ15a 'EQ16 'larger)
(putprop 'EQ16 'EQ15a 'smaller)
(putprop 'EQ16 'EQ16a 'larger)
(putprop 'EQ16a 'EQ16 'smaller)
(putprop 'EQ16a 'EQ17 'larger)
(putprop 'EQ17 'EQ16a 'smaller)
(putprop 'EQ17 'EQ20 'larger)
(putprop 'EQ20 'EQ17 'smaller)
(putprop 'EQ17 'EQ20 'larger)
(putprop 'EQ20 'EQ17 'smaller)

Alan Blackwell