Next: TAG, Previous: SameEdges, Up: Principles list
principle.subgraphs
D1, D2, D3
Start: vec(label(D1) set(label(D2)))
Start: ^.D3.entry.start
Subgraphs (priority 110)
This principle assumes that the Graph principle (Graph) is used
on dimensions D1 and D2.1
The principle creates two sets S1 and S2 for each node
v, and each edge label l on D1: S1 is the
set of nodes (i.e. the subgraph) below an edge labeled l
emanating from v on D1. S2 is the set of nodes
below all edges labeled by a label in Start(l) emanating from
v on D2.
The principle then stipulates for each node v, and each edge
label l on D1:
Start(l) is not empty, then S1 must be
a subset of S2
Here is the definition of the Subgraphs constraint functor:
%% Copyright 2001-2008
%% by Ralph Debusmann <rade@ps.uni-sb.de> (Saarland University) and
%% Denys Duchier <duchier@ps.uni-sb.de> (LIFO, Orleans) and
%% Jorge Marques Pelizzoni <jpeliz@icmc.usp.br> (ICMC, Sao Paulo) and
%% Jochen Setz <info@jochensetz.de> (Saarland University)
%%
functor
import
% System(show)
Helpers(checkModel) at 'Helpers.ozf'
export
Constraint
define
proc {Constraint Nodes G Principle FD FS Select}
DVA2DIDA = Principle.dVA2DIDA
ArgRecProc = Principle.argRecProc
%%
D1DIDA = {DVA2DIDA 'D1'}
D2DIDA = {DVA2DIDA 'D2'}
DIDA2LabelLat = G.dIDA2LabelLat
D1LabelLat = {DIDA2LabelLat D1DIDA}
D1LAs = D1LabelLat.constants
D2LabelLat = {DIDA2LabelLat D2DIDA}
D2LAs = D2LabelLat.constants
in
%% check features
if {Helpers.checkModel 'Subgraphs.oz' Nodes
[D1DIDA#downL
D2DIDA#downL]} then
%% Linking Subgraphs
%%
%% forall v in V: forall l in L_1:
%% Start(v)(l) neq emptyset =>
%% v -l->1+ D1 and v -(Start(v)(l))->2+ D2 and
%% D1 subseteq D2
for Node in Nodes do
StartLALMRec =
{ArgRecProc 'Start' o('^': Node)}
%%
D2DownLMs = {Map D2LAs
fun {$ LA} Node.D2DIDA.model.downL.LA end}
in
for D1LA in D1LAs do
StartLM = StartLALMRec.D1LA
%%
D1M = Node.D1DIDA.model.downL.D1LA
D2M = {Select.union D2DownLMs StartLM}
in
{FD.impl
{FD.nega {FS.reified.equal StartLM FS.value.empty}}
{FS.reified.subset D1M D2M} 1}
end
end
end
end
end