(define-theory diagrams (representation))
(in-theory 'diagrams)
(DEFINE-RELATION DIAGRAM-DIRECT-PREDECESSOR (?A ?B)
"The fc component X has a direct predecessor Y.
Obviously it is not transitive."
:IFF-DEF
(AND (= (INVERSE DIAGRAM-DIRECT-SUCCESSOR)
DIAGRAM-DIRECT-PREDECESSOR)
(FLOW-CHART-COMPONENT ?A)
(FLOW-CHART-COMPONENT ?B))
:AXIOM-CONSTRAINTS
(AND (RANGE DIAGRAM-DIRECT-PREDECESSOR
FLOW-CHART-COMPONENT)
(DOMAIN DIAGRAM-DIRECT-PREDECESSOR
FLOW-CHART-COMPONENT)))
(DEFINE-RELATION DIAGRAM-DIRECT-SUCCESSOR (?A ?B)
"The fc component X has a direct successor Y.
Obviously it is not transitive."
:DEF
(AND (DIAGRAM-SUCCESSOR ?A ?B)
(FLOW-CHART-COMPONENT ?A)
(FLOW-CHART-COMPONENT ?B)))
(DEFINE-RELATION DIAGRAM-PREDECESSOR (?A ?B)
"To be understood as 'diagram element x
has predecessor y'. This is transitive."
:IFF-DEF
(AND (= (INVERSE DIAGRAM-SUCCESSOR) DIAGRAM-PREDECESSOR)
(FLOW-CHART-COMPONENT ?A)
(FLOW-CHART-COMPONENT ?B))
:AXIOM-CONSTRAINTS
(AND (RANGE DIAGRAM-PREDECESSOR FLOW-CHART-COMPONENT)
(DOMAIN DIAGRAM-PREDECESSOR FLOW-CHART-COMPONENT)))
(DEFINE-RELATION DIAGRAM-SUBDIVISION (?A ?B))
(DEFINE-RELATION DIAGRAM-SUBDIVISION-OF (?A ?B))
(DEFINE-RELATION DIAGRAM-SUCCESSOR (?A ?B)
"To be understood as 'diagram element x
has successor y'. This is transitive."
:DEF
(AND (REPRESENTATION-RELATION ?A ?B)
(FLOW-CHART-COMPONENT ?A)
(FLOW-CHART-COMPONENT ?B)))
(DEFINE-RELATION FIRST-NODE (?A ?B) :IFF-DEF
(AND (= (INVERSE FIRST-NODE-OF) FIRST-NODE)
(FLOW-CHART ?A)
(FLOW-CHART-COMPONENT ?B))
:AXIOM-CONSTRAINTS
(AND (RANGE FIRST-NODE FLOW-CHART-COMPONENT)
(DOMAIN FIRST-NODE FLOW-CHART)))
(DEFINE-RELATION FIRST-NODE-OF (?A ?B) :IFF-DEF
(AND (NOT (EXISTS ?W
(AND (FLOW-CHART-COMPONENT ?W) (DIAGRAM-PREDECESSOR ?A ?W))))
(REPRESENTATION-RELATION ?A ?B)
(FLOW-CHART-COMPONENT ?A)
(FLOW-CHART ?B)))
(DEFINE-RELATION LAST-NODE (?A ?B) :IFF-DEF
(AND (= (INVERSE LAST-NODE-OF) LAST-NODE)
(FLOW-CHART ?A)
(FLOW-CHART-COMPONENT ?B))
:AXIOM-CONSTRAINTS
(AND (RANGE LAST-NODE FLOW-CHART-COMPONENT)
(DOMAIN LAST-NODE FLOW-CHART)))
(DEFINE-RELATION LAST-NODE-OF (?A ?B) :DEF
(AND (REPRESENTATION-RELATION ?A ?B)
(FLOW-CHART-COMPONENT ?A)
(FLOW-CHART ?B))
:CONSTRAINTS
(NOT (EXISTS ?W
(AND (FLOW-CHART-COMPONENT ?W) (DIAGRAM-SUCCESSOR ?A ?W)))))
(DEFINE-CLASS CYCLE-NODE (?SELF)
:DEF (FC-NODE ?SELF) :CONSTRAINTS
(DIAGRAM-SUCCESSOR ?SELF ?SELF))
(DEFINE-CLASS DIAGRAM (?SELF)
:DEF (VISUAL-DOCUMENT ?SELF)
:CONSTRAINTS (VALUE-CARDINALITY ?SELF _STRUCTURED 1))
(DEFINE-CLASS DIAGRAM-OBJECT (?SELF)
:DEF
(AND (VISUAL-DOCUMENT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (DIAGRAM ?A))))
:CONSTRAINTS (EXISTS (?B) (AND (REPRESENTED-BY ?SELF ?B) (ICON ?B))))
(DEFINE-CLASS FC-NODE (?SELF)
:DEF
(AND (DIAGRAM-OBJECT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (FLOW-CHART ?A))))
:AXIOM-DEF
(SUBCLASS-PARTITION FC-NODE
(SETOF JOIN-NODE FORK-NODE SIMPLE-NODE CYCLE-NODE)))
(DEFINE-CLASS FLOW-CHART (?SELF)
:DEF
(AND (DIAGRAM ?SELF)
(EXISTS (?A) (AND (STRICTLY-DEPENDS-ON ?SELF ?A) (GRAPH-THEORY ?A))))
:CONSTRAINTS
(AND (VALUE-CARDINALITY ?SELF FIRST-NODE 1)
(VALUE-CARDINALITY ?SELF LAST-NODE 1)
(EXISTS (?B) (AND (PART ?SELF ?B) (FLOW-CHART-COMPONENT ?B)))))
(DEFINE-CLASS FLOW-CHART-COMPONENT (?SELF)
:IFF-DEF
(AND (THING ?SELF) (OR (FLOW-CHART ?SELF) (FC-NODE ?SELF))) :AXIOM-DEF
(THE-ARCHETYPE FLOW-CHART-COMPONENT REIFIED-PROPERTY))
(DEFINE-CLASS FORK-NODE (?SELF)
:IFF-DEF
(AND (FC-NODE ?SELF)
(MINIMUM-SLOT-CARDINALITY ?SELF DIAGRAM-DIRECT-SUCCESSOR 2)))
(DEFINE-CLASS GRAPH (?SELF)
:DEF
(AND (DOCUMENT ?SELF)
(EXISTS (?A) (AND (STRICTLY-DEPENDS-ON ?SELF ?A) (GRAPH-THEORY ?A))))
:CONSTRAINTS (VALUE-CARDINALITY ?SELF _FORMAL 1) :AXIOM-DEF
(THE-ARCHETYPE GRAPH REIFIED-PROPERTY))
(DEFINE-CLASS GRAPH-THEORY (?SELF)
:DEF (THEORY ?SELF))
(DEFINE-CLASS JOIN-NODE (?SELF) "This resynchronizes two or more
disjunct nodes."
:IFF-DEF
(AND (FC-NODE ?SELF)
(MINIMUM-SLOT-CARDINALITY ?SELF DIAGRAM-DIRECT-PREDECESSOR 2)
(EXISTS (?A) (AND (DIAGRAM-PREDECESSOR ?SELF ?A) (FORK-NODE ?A))))
:AXIOM-DEF (THE-ARCHETYPE JOIN-NODE REIFIED-PROPERTY))
(DEFINE-CLASS LOOK-UP-TABLE (?SELF)
:DEF (TABLE ?SELF))
(DEFINE-CLASS PETRI-NET (?SELF)
"Petri nets are an extension of state-transition
diagrams, useful to represent parallel processes and scripts."
:DEF
(AND (DIAGRAM ?SELF)
(EXISTS (?A) (AND (STRICTLY-DEPENDS-ON ?SELF ?A) (GRAPH-THEORY ?A)))))
(DEFINE-CLASS PN-ARROW (?SELF)
:DEF
(AND (DIAGRAM-OBJECT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (PETRI-NET ?A)))
(EXISTS (?B)
(AND (REPRESENTS ?SELF ?B)
(AND (TIME-SPAN ?B)
(EXISTS (?C) (AND (PRECEDES ?B ?C) (*PHASE ?C)))
(FORALL (?C ?D)
(=> (AND (PRECEDES ?B ?C) (PRECEDES ?B ?D))
(= ?C ?D))))))))
(DEFINE-CLASS PN-BAR (?SELF)
:DEF
(AND (DIAGRAM-OBJECT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (PETRI-NET ?A)))
(EXISTS (?B) (AND (REPRESENTS ?SELF ?B) (*PHASE ?B)))))
(DEFINE-CLASS PN-CIRCLE (?SELF)
:DEF
(AND (DIAGRAM-OBJECT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (PETRI-NET ?A)))
(EXISTS (?B) (AND (REPRESENTS ?SELF ?B) (*STATE ?B)))))
(DEFINE-CLASS SIMPLE-NODE (?SELF) "A node that is not a 'syntactic'
node, i.e. neither a branching, synchro, nor a cycle node."
:DEF (FC-NODE ?SELF))
(DEFINE-CLASS STATE-TRANSITION-DIAGRAM (?SELF)
:DEF
(AND (DIAGRAM ?SELF)
(EXISTS (?A) (AND (STRICTLY-DEPENDS-ON ?SELF ?A) (GRAPH-THEORY ?A)))))
(DEFINE-CLASS STD-ARROW (?SELF)
:DEF
(AND (DIAGRAM-OBJECT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (STATE-TRANSITION-DIAGRAM ?A)))
(EXISTS (?B) (AND (REPRESENTS ?SELF ?B) (*EVENT ?B)))))
(DEFINE-CLASS STD-CIRCLE (?SELF)
:DEF
(AND (DIAGRAM-OBJECT ?SELF)
(EXISTS (?A) (AND (PART-OF ?SELF ?A) (STATE-TRANSITION-DIAGRAM ?A)))
(EXISTS (?B) (AND (REPRESENTS ?SELF ?B) (*STATE ?B)))))
(DEFINE-CLASS TABLE (?SELF)
:DEF (DIAGRAM ?SELF))
(DEFINE-CLASS THE-FIRST-NODE (?SELF)
:IFF-DEF
(AND (FLOW-CHART-COMPONENT ?SELF)
(VALUE-CARDINALITY ?SELF FIRST-NODE-OF 1)
(VALUE-TYPE ?SELF FIRST-NODE-OF FLOW-CHART)))
(DEFINE-CLASS THE-LAST-NODE (?SELF)
:IFF-DEF
(AND (FLOW-CHART-COMPONENT ?SELF)
(VALUE-CARDINALITY ?SELF LAST-NODE-OF 1)
(VALUE-TYPE ?SELF LAST-NODE-OF FLOW-CHART)))