/*************************************************************************

    File: lexicalKnowledge.pl
    Copyright (C) 2004 Patrick Blackburn & Johan Bos

    This file is part of BB1, version 1.2 (August 2005).

    BB1 is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    BB1 is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with BB1; if not, write to the Free Software Foundation, Inc., 
    59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*************************************************************************/

:- module(lexicalKnowledge,[lexicalKnowledge/3]).

/*========================================================================
   Axioms for Lexical Knowledge: Nouns
========================================================================*/

lexicalKnowledge(event,1,Axiom):-
   Axiom = all(A,imp(event(A),thing(A))).

lexicalKnowledge(entity,1,Axiom):- 
   Axiom = all(A,imp(entity(A),thing(A))).

lexicalKnowledge(object,1,Axiom):- 
   Axiom = all(A,imp(object(A),entity(A))).

lexicalKnowledge(organism,1,Axiom):- 
   Axiom = all(A,imp(organism(A),entity(A))).

lexicalKnowledge(food,1,Axiom):- 
   Axiom = all(A,imp(food(A),object(A))).

lexicalKnowledge(artifact,1,Axiom):- 
   Axiom = all(A,imp(artifact(A),object(A))).

lexicalKnowledge(building,1,Axiom):- 
   Axiom = all(A,imp(building(A),artifact(A))).

lexicalKnowledge(instrument,1,Axiom):- 
   Axiom = all(A,imp(instrument(A),artifact(A))).

lexicalKnowledge(animal,1,Axiom):- 
   Axiom = all(A,imp(animal(A),organism(A))).

lexicalKnowledge(person,1,Axiom):- 
   Axiom = all(A,imp(person(A),organism(A))).

lexicalKnowledge(plant,1,Axiom):- 
   Axiom = all(A,imp(plant(A),organism(A))).

lexicalKnowledge(man,1,Axiom):- 
   Axiom = all(A,imp(man(A),person(A))).

lexicalKnowledge(woman,1,Axiom):- 
   Axiom = all(A,imp(woman(A),person(A))).

lexicalKnowledge(beverage,1,Axiom):- 
   Axiom = all(A,imp(beverage(A),food(A))).

lexicalKnowledge(foodstuff,1,Axiom):- 
   Axiom = all(A,imp(foodstuff(A),food(A))).

lexicalKnowledge(container,1,Axiom):- 
   Axiom = all(A,imp(container(A),instrument(A))).

lexicalKnowledge(device,1,Axiom):- 
   Axiom = all(A,imp(device(A),instrument(A))).

lexicalKnowledge(cup,1,Axiom):- 
   Axiom = all(A,imp(cup(A),container(A))).

lexicalKnowledge(glass,1,Axiom):- 
   Axiom = all(A,imp(glass(A),container(A))).

lexicalKnowledge(burger,1,Axiom):- 
   Axiom = all(A,imp(burger(A),foodstuff(A))).

lexicalKnowledge(qpwc,1,Axiom):- 
   Axiom = all(A,imp(qpwc(A),foodstuff(A))).

lexicalKnowledge(boxer,1,Axiom):- 
   Axiom = all(A,imp(boxer(A),person(A))).

lexicalKnowledge(boss,1,Axiom):- 
   Axiom = all(A,imp(boss(A),person(A))).

lexicalKnowledge(criminal,1,Axiom):- 
   Axiom = all(A,imp(criminal(A),person(A))).

lexicalKnowledge(customer,1,Axiom):- 
   Axiom = all(A,imp(customer(A),person(A))).

lexicalKnowledge(owner,1,Axiom):- 
   Axiom = all(A,imp(owner(A),person(A))).

lexicalKnowledge(robber,1,Axiom):- 
   Axiom = all(A,imp(robber(A),person(A))).

lexicalKnowledge(vehicle,1,Axiom):- 
   Axiom = all(A,imp(vehicle(A),instrument(A))).

lexicalKnowledge(car,1,Axiom):- 
   Axiom = all(A,imp(car(A),vehicle(A))).

lexicalKnowledge(chainsaw,1,Axiom):- 
   Axiom = all(A,imp(chainsaw(A),device(A))).

lexicalKnowledge(drug,1,Axiom):- 
   Axiom = all(A,imp(drug(A),artifact(A))).

lexicalKnowledge(episode,1,Axiom):- 
   Axiom = all(A,imp(episode(A),event(A))).

lexicalKnowledge(footmassage,1,Axiom):- 
   Axiom = all(A,imp(footmassage(A),event(A))).

lexicalKnowledge(fdshake,1,Axiom):- 
   Axiom = all(A,imp(fdshake(A),beverage(A))).

lexicalKnowledge(weapon,1,Axiom):- 
   Axiom = all(A,imp(weapon(A),instrument(A))).

lexicalKnowledge(gun,1,Axiom):- 
   Axiom = all(A,imp(gun(A),weapon(A))).

lexicalKnowledge(hammer,1,Axiom):- 
   Axiom = all(A,imp(hammer(A),device(A))).

lexicalKnowledge(hashbar,1,Axiom):- 
   Axiom = all(A,imp(hashbar(A),building(A))).

lexicalKnowledge(restaurant,1,Axiom):- 
   Axiom = all(A,imp(restaurant(A),building(A))).

lexicalKnowledge(husband,1,Axiom):- 
   Axiom = all(A,imp(husband(A),man(A))).

lexicalKnowledge(joke,1,Axiom):- 
   Axiom = all(A,imp(joke(A),event(A))).

lexicalKnowledge(needle,1,Axiom):- 
   Axiom = all(A,imp(needle(A),device(A))).

lexicalKnowledge(piercing,1,Axiom):- 
   Axiom = all(A,imp(piercing(A),artifact(A))).

lexicalKnowledge(radio,1,Axiom):- 
   Axiom = all(A,imp(radio(A),instrument(A))).

lexicalKnowledge(suitcase,1,Axiom):- 
   Axiom = all(A,imp(suitcase(A),container(A))).

lexicalKnowledge(shotgun,1,Axiom):- 
   Axiom = all(A,imp(shotgun(A),gun(A))).

lexicalKnowledge(sword,1,Axiom):- 
   Axiom = all(A,imp(sword(A),weapon(A))).

lexicalKnowledge(wife,1,Axiom):- 
   Axiom = all(A,imp(wife(A),woman(A))).

lexicalKnowledge(entity,1,Axiom):- 
   Axiom = all(A,imp(entity(A),not(event(A)))).

lexicalKnowledge(organism,1,Axiom):- 
   Axiom = all(A,imp(organism(A),not(object(A)))).

lexicalKnowledge(artifact,1,Axiom):- 
   Axiom = all(A,imp(artifact(A),not(food(A)))).

lexicalKnowledge(person,1,Axiom):- 
   Axiom = all(A,imp(person(A),not(animal(A)))).

lexicalKnowledge(plant,1,Axiom):- 
   Axiom = all(A,imp(plant(A),not(animal(A)))).

lexicalKnowledge(plant,1,Axiom):- 
   Axiom = all(A,imp(plant(A),not(person(A)))).

lexicalKnowledge(instrument,1,Axiom):- 
   Axiom = all(A,imp(instrument(A),not(building(A)))).

lexicalKnowledge(drug,1,Axiom):- 
   Axiom = all(A,imp(drug(A),not(building(A)))).

lexicalKnowledge(piercing,1,Axiom):- 
   Axiom = all(A,imp(piercing(A),not(building(A)))).

lexicalKnowledge(drug,1,Axiom):- 
   Axiom = all(A,imp(drug(A),not(instrument(A)))).

lexicalKnowledge(piercing,1,Axiom):- 
   Axiom = all(A,imp(piercing(A),not(instrument(A)))).

lexicalKnowledge(piercing,1,Axiom):- 
   Axiom = all(A,imp(piercing(A),not(drug(A)))).

lexicalKnowledge(woman,1,Axiom):- 
   Axiom = all(A,imp(woman(A),not(man(A)))).

lexicalKnowledge(device,1,Axiom):- 
   Axiom = all(A,imp(device(A),not(radio(A)))).

lexicalKnowledge(container,1,Axiom):- 
   Axiom = all(A,imp(container(A),not(radio(A)))).

lexicalKnowledge(vehicle,1,Axiom):- 
   Axiom = all(A,imp(vehicle(A),not(radio(A)))).

lexicalKnowledge(weapon,1,Axiom):- 
   Axiom = all(A,imp(weapon(A),not(radio(A)))).

lexicalKnowledge(container,1,Axiom):- 
   Axiom = all(A,imp(container(A),not(device(A)))).

lexicalKnowledge(vehicle,1,Axiom):- 
   Axiom = all(A,imp(vehicle(A),not(device(A)))).

lexicalKnowledge(weapon,1,Axiom):- 
   Axiom = all(A,imp(weapon(A),not(device(A)))).

lexicalKnowledge(vehicle,1,Axiom):- 
   Axiom = all(A,imp(vehicle(A),not(container(A)))).

lexicalKnowledge(weapon,1,Axiom):- 
   Axiom = all(A,imp(weapon(A),not(container(A)))).

lexicalKnowledge(weapon,1,Axiom):- 
   Axiom = all(A,imp(weapon(A),not(vehicle(A)))).

lexicalKnowledge(beverage,1,Axiom):- 
   Axiom = all(A,imp(beverage(A),not(foodstuff(A)))).

lexicalKnowledge(footmassage,1,Axiom):- 
   Axiom = all(A,imp(footmassage(A),not(episode(A)))).

lexicalKnowledge(joke,1,Axiom):- 
   Axiom = all(A,imp(joke(A),not(episode(A)))).

lexicalKnowledge(joke,1,Axiom):- 
   Axiom = all(A,imp(joke(A),not(footmassage(A)))).

lexicalKnowledge(cup,1,Axiom):- 
   Axiom = all(A,imp(cup(A),not(glass(A)))).

lexicalKnowledge(suitcase,1,Axiom):- 
   Axiom = all(A,imp(suitcase(A),not(glass(A)))).

lexicalKnowledge(suitcase,1,Axiom):- 
   Axiom = all(A,imp(suitcase(A),not(cup(A)))).

lexicalKnowledge(chainsaw,1,Axiom):- 
   Axiom = all(A,imp(chainsaw(A),not(hammer(A)))).

lexicalKnowledge(needle,1,Axiom):- 
   Axiom = all(A,imp(needle(A),not(hammer(A)))).

lexicalKnowledge(needle,1,Axiom):- 
   Axiom = all(A,imp(needle(A),not(chainsaw(A)))).

lexicalKnowledge(unmarried,1,Axiom):- 
   Axiom = all(A,imp(unmarried(A),not(married(A)))).

lexicalKnowledge(burger,1,Axiom):- 
   Axiom = all(A,imp(burger(A),not(qpwc(A)))).

lexicalKnowledge(restaurant,1,Axiom):- 
   Axiom = all(A,imp(restaurant(A),not(hashbar(A)))).

lexicalKnowledge(gun,1,Axiom):- 
   Axiom = all(A,imp(gun(A),not(sword(A)))).

lexicalKnowledge(wife,1,Axiom):- 
   Axiom = all(A,imp(wife(A),married(A))).


/*========================================================================
   Axioms for Lexical Knowledge: Proper Names
========================================================================*/

lexicalKnowledge(mia,0,Axiom):- 
   Axiom = all(A,imp(eq(A,mia),woman(A))).

lexicalKnowledge(vincent,0,Axiom):- 
   Axiom = all(A,imp(eq(A,vincent),man(A))).


/*========================================================================
   Axioms for Lexical Knowledge: Adjectives
========================================================================*/

lexicalKnowledge(red,1,Axiom):- 
   Axiom = all(A,imp(red(A),not(blue(A)))).

lexicalKnowledge(big,1,Axiom):- 
   Axiom = all(A,imp(big(A),not(small(A)))).

lexicalKnowledge(sad,1,Axiom):- 
   Axiom = all(A,imp(sad(A),not(happy(A)))).


/*========================================================================
   Axioms for Lexical Knowledge: Intransitive Verbs
========================================================================*/

lexicalKnowledge(collapse,1,Axiom):-
   Axiom = all(X,imp(collapse(X),or(person(X),building(X)))).

lexicalKnowledge(dance,1,Axiom):- 
   Axiom = all(X,imp(dance(X),person(X))).

lexicalKnowledge(die,1,Axiom):- 
   Axiom = all(X,imp(die(X),organism(X))).

lexicalKnowledge(growl,1,Axiom):- 
   Axiom = all(X,imp(growl(X),or(animal(X),person(X)))).


/*========================================================================
   Axioms for Lexical Knowledge: Transitive Verbs
========================================================================*/

lexicalKnowledge(clean,2,Axiom):- 
   Axiom = all(X,all(Y,imp(clean(X,Y),and(person(X),artifact(Y))))).

lexicalKnowledge(drink,2,Axiom):-    
   Axiom = all(X,all(Y,imp(drink(X,Y),and(person(X),beverage(Y))))).

lexicalKnowledge(eat,2,Axiom):- 
   Axiom = all(X,all(Y,imp(eat(X,Y),
               and(or(person(X),animal(X)),
                   and(edible(Y),food(Y)))))).