--# -path=.:../prelude:../abstract:../common

concrete ConjunctionCgg of Conjunction = CatCgg **
  open ResCgg, Coordination, Prelude in {



lincat
  [NP] = {s1,s2 :Case => Str ; agr : Agreement};
  [CN] = {s1,s2 : Number => NounState => Str; gender:Gender};
  [AP] = {s1,s2 : Agreement=> Str ; position : Position; isProper : Bool; isPrep: Bool};
  [RS] = {s1,s2 : RForm => Str};
  --[IAdv] = {s1,s2 : Str} ;
 {-
  [S] = {s1,s2 : Str} ;
  [Adv] = {s1,s2 : Str} ;
  [AdV] = {s1,s2 : Str} ;
  
  [RS] = {s1,s2 : Agr => Str ; c : NPCase};
  [CN] = {s1,s2 : Number => Case => Str};
  [DAP] = {s1,s2 : Str ; n : Number};
 -}

 

{-
--1 Conjunction: Coordination

-- Coordination is defined for many different categories; here is
-- a sample. The rules apply to *lists* of two or more elements,
-- and define two general patterns: 
-- - ordinary conjunction: X,...X and X
-- - distributed conjunction: both X,...,X and X
--
--
-- $VP$ conjunctions are not covered here, because their applicability
-- depends on language. Some special cases are defined in 
-- [``Extra`` ../abstract/Extra.gf].


abstract Conjunction = Cat ** {

--2 Rules

  fun
    ConjS    : Conj -> ListS -> S ;       -- he walks and she runs
    ConjRS   : Conj -> ListRS -> RS ;     -- who walks and whose mother runs
    ConjAP   : Conj -> ListAP -> AP ;     -- cold and warm
    ConjNP   : Conj -> ListNP -> NP ;     -- she or we
    ConjAdv  : Conj -> ListAdv -> Adv ;   -- here or there
    ConjAdV  : Conj -> ListAdV -> AdV ;   -- always or sometimes
    ConjIAdv : Conj -> ListIAdv -> IAdv ; -- where and with whom
    ConjCN   : Conj -> ListCN -> CN ;     -- man and woman
    ConjDet  : Conj -> ListDAP -> Det ;   -- his or her

--2 Categories

-- These categories are only used in this module.

  cat
    [S]{2} ; 
    [RS]{2} ; 
    [Adv]{2} ;
    [AdV]{2} ;
    [NP]{2} ; 
    [AP]{2} ;
    [IAdv]{2} ;
    [CN] {2} ;
    [DAP] {2} ;

--2 List constructors

-- The list constructors are derived from the list notation and therefore
-- not given explicitly. But here are their type signatures:

-- overview
    BaseC : C -> C   -> [C] ;  --- for C = AdV, Adv, AP, CN, Det, IAdv, NP, RS, S
    ConsC : C -> [C] -> [C] ;  --- for C = AdV, Adv, AP, CN, Det, IAdv, NP, RS, S

-- complete list

  BaseAP : AP -> AP -> ListAP ;       -- red, white
  ConsAP : AP -> ListAP -> ListAP ;   -- red, white, blue

  BaseAdV : AdV -> AdV -> ListAdV ;     -- always, sometimes
  ConsAdV : AdV -> ListAdV -> ListAdV ; -- always, sometimes, never

  BaseAdv : Adv -> Adv -> ListAdv ;     -- here, there
  ConsAdv : Adv -> ListAdv -> ListAdv ; -- here, there, everywhere

  BaseCN : CN -> CN -> ListCN ;      -- man, woman
  ConsCN : CN -> ListCN -> ListCN ;  -- man, woman, child

  BaseIAdv : IAdv -> IAdv -> ListIAdv ;     -- where, when
  ConsIAdv : IAdv -> ListIAdv -> ListIAdv ; -- where, when, why

  BaseNP : NP -> NP -> ListNP ;      -- John, Mary
  ConsNP : NP -> ListNP -> ListNP ;  -- John, Mary, Bill

  BaseRS : RS -> RS -> ListRS ;       -- who walks, whom I know
  ConsRS : RS -> ListRS -> ListRS ;   -- who wals, whom I know, who is here

  BaseS : S -> S -> ListS ;      -- John walks, Mary runs
  ConsS : S -> ListS -> ListS ;  -- John walks, Mary runs, Bill swims

-}

}
