Next: Government1, Previous: Entries, Up: Principles list
principle.government
D
Agr2: tv(T)Govern: vec(label(D) iset(tv(T)))
Agr2: _.D.attrs.agrGovern: ^.D.entry.govern
Government (priority 100)
The government principle establishes government between two nodes connected by an edge.
The type variable tv(T) is typically a tuple of e.g. person,
number, gender etc.
It stipulates for all edges from v to v' labeled
l on D:
Govern(l) is not empty, then Agr2 must be
in Govern(l)
Here is the definition of the Government 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
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
%%
DIDA = {DVA2DIDA 'D'}
DIDA2LabelLat = G.dIDA2LabelLat
LabelLat = {DIDA2LabelLat DIDA}
LAs = LabelLat.constants
in
%% check features
if {Helpers.checkModel 'Government.oz' Nodes
[DIDA#daughtersL]} then
for Node1 in Nodes do
for Node2 in Nodes do
for LA in LAs do
if {Not {Opti.isIn Node2.index Node1.DIDA.model.daughtersL.LA}=='out'} then
GovernLAMRec = {ArgRecProc 'Govern' o('^': Node1
'_': Node2)}
GovernM = GovernLAMRec.LA
Agr2D = {ArgRecProc 'Agr2' o('^': Node1
'_': Node2)}
in
{FD.impl
{FS.reified.include Node2.index Node1.DIDA.model.daughtersL.LA}
{FS.reified.include Agr2D GovernM} 1}
end
end
end
end
end
end
end