Next: XTAGRedundant, Previous: XTAG1, Up: Principles list
principle.xTAGLinking
D1
, D2
, D3
Link: vec(label(D2) iset(label(D1)))
Link: ^.D3.entry.end
XTAGLinking
(priority 100)
This principle states two constraints:
D1
must have the same
edges as the graph on dimension D2
(same as SameEdges)
D2
it must be the case that on D1
, the incoming edge
label of v' is in Link
(l). That is, contrary to the
less strict LinkingEnd principles, the constraint must hold
regardless of whether Link
(l) is non-empty or not. Another
difference to LinkingEnd is that the order of the dimensions
D1
and D2
is reversed.
Here is the definition of the XTAGLinking
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' Opti(isIn) at 'Opti.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 D2LabelLat = {DIDA2LabelLat D2DIDA} D2LAs = D2LabelLat.constants in if {Helpers.checkModel 'XTAGLinking.oz' Nodes [D1DIDA#daughtersL D2DIDA#labels]} then for Node in Nodes do {FS.equal Node.D1DIDA.model.daughters Node.D2DIDA.model.daughters} end %% for Node1 in Nodes I in 1..{Length Nodes} do for Node2 in Nodes do for D2LA in D2LAs do if {Not {Opti.isIn Node2.index Node1.D2DIDA.model.daughtersL.D2LA}=='out'} then %% XTAGLinking %% %% m -l->2 d => -Link(l)->1 d %% LinkD2LAD1LMRec = {ArgRecProc 'Link' o('^': Node1)} LinkD1LM = LinkD2LAD1LMRec.D2LA in {FD.impl {FS.reified.include Node2.index Node1.D2DIDA.model.daughtersL.D2LA} {FD.reified.greater {FS.card {FS.intersect Node2.D1DIDA.model.labels LinkD1LM}} 0} 1} end end end end end end end