%
% NAL-Examples.txt
% Pei Wang
% September 2012
%
% Examples for NAL rules in the NAL Prolog program
%
% Each of the examples consists of a goal, followed by one or more expected results
% (among the possible multiple results) To run it, copy the first line, then paste
% it into a Prolog interpreter.
%

:- module(nal_examples,[nal_example_test/2]).

% ----- NAL-1 ----- %

%= revision


nal_example_test(
  revision([inheritance(bird, swimmer), [1, 0.8]], [inheritance(bird, swimmer), [0, 0.5]], R) ,
 [ R = [inheritance(bird, swimmer), [0.8, 0.83]] ]). 


%= choice

nal_example_test(
  choice([inheritance(swan, bird), [1, 0.8]], [inheritance(swan, bird), [0, 0.5]], R) ,
 [ R = [inheritance(swan, bird), [1, 0.8]] ]). 


nal_example_test(
  choice([inheritance(swan, bird), [1, 0.5]], [inheritance(penguin, bird), [0.8, 0.9]], R) ,
 [ R = [inheritance(penguin, bird), [0.8, 0.9]] ]). 


%= deduction

nal_example_test(
  inference([inheritance(bird, animal), [1, 0.9]], [inheritance(robin, bird), [1, 0.9]], [inheritance(robin, animal), T]) ,
 [ T = [1, 0.81] ]). 


%= induction

nal_example_test(
  inference([inheritance(robin, animal), [1, 0.9]], [inheritance(robin, bird), [1, 0.9]], [inheritance(bird, animal), T]) ,
 [ T = [1, 0.45] ]). 


%= abduction

nal_example_test(
  inference([inheritance(bird, animal), [1, 0.9]], [inheritance(robin, animal), [1, 0.9]], [inheritance(robin, bird), T]) ,
 [ T = [1, 0.45] ]). 


%= examplification

nal_example_test(
  inference([inheritance(robin, bird), [1, 0.9]], [inheritance(bird, animal), [1, 0.9]], [inheritance(animal, robin), T]) ,
 [ T = [1, 0.45] ]). 


%= convension

nal_example_test(
  inference([inheritance(swan, bird), [0.9, 0.8]], [inheritance(bird, swan), T]) ,
 [ T = [1, 0.42] ]). 


% ----- NAL-2 ----- %

%= inheritance to similarity

nal_example_test(
  inference([inheritance(swan, robin), [0.9, 0.8]], [inheritance(robin, swan), [0.9, 0.8]], [similarity(swan, robin), T]) ,
 [ T = [0.81, 0.64] ]). 


%= comparison

nal_example_test(
  inference([inheritance(swan, swimmer), [1, 0.9]], [inheritance(swan, bird), [1, 0.9]], [similarity(bird, swimmer), T]) ,
 [ T = [1, 0.45] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [1, 0.9]], [inheritance(chess, competition), [1, 0.9]], [similarity(chess, sport), T]) ,
 [ T = [1, 0.45] ]). 


%= analogy

nal_example_test(
  inference([inheritance(swan, swimmer), [1, 0.9]], [similarity(gull, swan), [0.9, 0.9]], [inheritance(gull, swimmer), T]) ,
 [ T = [0.9, 0.73] ]). 

nal_example_test(
  inference([inheritance(chess, competition), [1, 0.9]], [similarity(sport, competition), [0.9, 0.9]], [inheritance(chess, sport), T]) ,
 [ T = [0.9, 0.73] ]). 


%= resemblance

nal_example_test(
  inference([similarity(swan, robin), [0.8, 0.9]], [similarity(gull, swan), [0.9, 0.8]], [similarity(gull, robin), T]) ,
 [ T = [0.72, 0.71] ]). 


%= instance and property

nal_example_test(
  inference([instance(tweety, bird), [1, 0.9]], [inheritance(S, P), T]) ,
 [ S = ext_set([tweety]),
   P = bird,
   T = [1, 0.9] ]). 

nal_example_test(
  inference([property(raven, black), [1, 0.9]], [inheritance(S, P), T]) ,
 [ S = raven,
   P = int_set([black]),
   T = [1, 0.9] ]). 

nal_example_test(
  inference([inst_prop(tweety, yellow), [1, 0.9]], [inheritance(S, P), T]) ,
 [ S = ext_set([tweety]),
   P = int_set([yellow]),
   T = [1, 0.9] ]). 


%= set definition

nal_example_test(
  inference([inheritance(ext_set([tweety]), ext_set([birdie])), [1, 0.8]], [similarity(S, P), T]) ,
 [ S = ext_set([tweety]),
   P = ext_set([birdie]),
   T = [1, 0.8] ]). 

nal_example_test(
  inference([inheritance(int_set([smart]), int_set([bright])), [1, 0.8]], [similarity(S, P), T]) ,
 [ S = int_set([smart]),
   P = int_set([bright]),
   T = [1, 0.8] ]). 


%= structure transformation

nal_example_test(
  inference([similarity(ext_set([tweety]), ext_set([birdie])), [1, 0.9]], [similarity(tweety, birdie), T]) ,
 [ T = [1, 0.9] ]). 

nal_example_test(
  inference([similarity(int_set([smart]), int_set([bright])), [0.8, 0.9]], [similarity(smart, bright), T]) ,
 [ T = [0.8, 0.9] ]). 


% ----- NAL-3 ----- %

%= compound construction, two premises

nal_example_test(
  inference([inheritance(swan, swimmer), [0.9, 0.9]], [inheritance(swan, bird), [0.8, 0.9]], R) ,
 [ R = [inheritance(swan, ext_intersection([swimmer, bird])), [0.72, 0.81]] ;
   R = [inheritance(swan, int_intersection([swimmer, bird])), [0.98, 0.81]] ;
   R = [inheritance(swan, ext_difference(swimmer, bird)), [0.18, 0.81]] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [0.9, 0.9]], [inheritance(chess, competition), [0.8, 0.9]], R) ,
 [ R = [inheritance(int_intersection([sport, chess]), competition), [0.72, 0.81]] ;
   R = [inheritance(ext_intersection([sport, chess]), competition), [0.98, 0.81]] ;
   R = [inheritance(int_difference(sport, chess), competition), [0.18, 0.81]] ]). 


%= compound construction, single premise

nal_example_test(
  inference([inheritance(swan, swimmer), [0.9, 0.8]], [inheritance(swan, ext_intersection([swimmer, bird])), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(swan, swimmer), [0.9, 0.8]], [inheritance(swan, int_intersection([swimmer, bird])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(swan, swimmer), [0.9, 0.8]], [inheritance(swan, ext_difference(swimmer, bird)), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(swan, swimmer), [0.9, 0.8]], [negation(inheritance(swan, ext_difference(bird, swimmer))), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [0.9, 0.8]], [inheritance(int_intersection([sport, chess]), competition), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [0.9, 0.8]], [inheritance(ext_intersection([sport, chess]), competition), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [0.9, 0.8]], [inheritance(int_difference(sport, chess), competition), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [0.9, 0.8]], [negation(inheritance(int_difference(chess, sport), competition)), V]) ,
 [ V = [0.9, 0.72] ]). 


%= compound destruction, two premises

nal_example_test(
  inference([inheritance(swan, bird), [1, 0.8]], [inheritance(swan, ext_intersection([swimmer, bird])), [0, 0.8]], [inheritance(swan, swimmer), T]) ,
 [ T = [0, 0.64] ]). 

nal_example_test(
  inference([inheritance(swan, bird), [0, 0.8]], [inheritance(swan, int_intersection([swimmer, bird])), [1, 0.8]], [inheritance(swan, swimmer), T]) ,
 [ T = [1, 0.64] ]). 

nal_example_test(
  inference([inheritance(swan, swimmer), [1, 0.8]], [inheritance(swan, ext_difference(swimmer, bird)), [0, 0.8]], [inheritance(swan, bird), T]) ,
 [ T = [1, 0.64] ]). 

nal_example_test(
  inference([inheritance(swan, bird), [0, 0.8]], [inheritance(swan, ext_difference(swimmer, bird)), [0, 0.8]], [inheritance(swan, swimmer), T]) ,
 [ T = [0, 0.64] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [1, 0.8]], [inheritance(int_intersection([sport, chess]), competition), [0, 0.8]], [inheritance(chess, competition), V]) ,
 [ V = [0, 0.64] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [0, 0.8]], [inheritance(ext_intersection([sport, chess]), competition), [1, 0.8]], [inheritance(chess, competition), V]) ,
 [ V = [1, 0.64] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [1, 0.8]], [inheritance(int_difference(sport, chess), competition), [0, 0.8]], [inheritance(chess, competition), V]) ,
 [ V = [1, 0.64] ]). 

nal_example_test(
  inference([inheritance(chess, competition), [0, 0.8]], [inheritance(int_difference(sport, chess), competition), [0, 0.8]], [inheritance(sport, competition), V]) ,
 [ V = [0, 0.64] ]). 


%= compound destruction, single premise

nal_example_test(
  inference([inheritance(swan, ext_intersection([swimmer, bird])), [0.9, 0.8]], [inheritance(swan, swimmer), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(swan, int_intersection([swimmer, bird])), [0.9, 0.8]], [inheritance(swan, swimmer), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(swan, ext_difference(swimmer, bird)), [0.9, 0.8]], [inheritance(swan, swimmer), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(swan, ext_difference(swimmer, bird)), [0.9, 0.8]], [negation(inheritance(swan, bird)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_intersection([sport, chess]), competition), [0.9, 0.8]], [inheritance(sport, competition), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(ext_intersection([sport, chess]), competition), [0.9, 0.8]], [inheritance(sport, competition), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(int_difference(sport, chess), competition), [0.9, 0.8]], [inheritance(sport, competition), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_difference(sport, chess), competition), [0.9, 0.8]], [negation(inheritance(chess, competition)), V]) ,
 [ V = [0.9, 0.72] ]). 


%= operation on both sides of a relation

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(ext_intersection([swimmer, bird]), ext_intersection([swimmer, animal])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(ext_intersection([swimmer, bird]), ext_intersection([swimmer, animal])), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(int_intersection([swimmer, bird]), int_intersection([swimmer, animal])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_intersection([swimmer, bird]), int_intersection([swimmer, animal])), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([similarity(bird, animal), [0.9, 0.8]], [similarity(ext_intersection([swimmer, bird]), ext_intersection([swimmer, animal])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([similarity(ext_intersection([swimmer, bird]), ext_intersection([swimmer, animal])), [0.9, 0.8]], [similarity(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([similarity(bird, animal), [0.9, 0.8]], [similarity(int_intersection([swimmer, bird]), int_intersection([swimmer, animal])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([similarity(int_intersection([swimmer, bird]), int_intersection([swimmer, animal])), [0.9, 0.8]], [similarity(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(ext_difference(bird, swimmer), ext_difference(animal, swimmer)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(ext_difference(bird, swimmer), ext_difference(animal, swimmer)), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(int_difference(bird, swimmer), int_difference(animal, swimmer)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_difference(bird, swimmer), int_difference(animal, swimmer)), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([similarity(bird, animal), [0.9, 0.8]], [similarity(ext_difference(bird, swimmer), ext_difference(animal, swimmer)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([similarity(ext_difference(bird, swimmer), ext_difference(animal, swimmer)), [0.9, 0.8]], [similarity(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([similarity(bird, animal), [0.9, 0.8]], [similarity(int_difference(bird, swimmer), int_difference(animal, swimmer)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([similarity(int_difference(bird, swimmer), int_difference(animal, swimmer)), [0.9, 0.8]], [similarity(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(ext_difference(swimmer, animal), ext_difference(swimmer, bird)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(ext_difference(swimmer, animal), ext_difference(swimmer, bird)), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(int_difference(swimmer, animal), int_difference(swimmer, bird)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_difference(swimmer, animal), int_difference(swimmer, bird)), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([similarity(bird, animal), [0.9, 0.8]], [similarity(ext_difference(swimmer, animal), ext_difference(swimmer, bird)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([similarity(ext_difference(swimmer, animal), ext_difference(swimmer, bird)), [0.9, 0.8]], [similarity(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([similarity(bird, animal), [0.9, 0.8]], [similarity(int_difference(swimmer, animal), int_difference(swimmer, bird)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([similarity(int_difference(swimmer, animal), int_difference(swimmer, bird)), [0.9, 0.8]], [similarity(bird, animal), V]) ,
 [ V = [0.9, 0.44] ]). 


%= set operations

nal_example_test(
  inference([inheritance(ext_set([earth]), ext_set([venus, mars, pluto])), [0.9, 0.8]], [inheritance(ext_set([earth]), ext_set([pluto, saturn])), [0.7, 0.8]], R) ,
 [ R = [inheritance(ext_set([earth]), ext_set([pluto])), [0.63, 0.64]] ;
   R = [inheritance(ext_set([earth]), ext_set([venus, mars, pluto, saturn])), [0.97, 0.64]] ;
   R = [inheritance(ext_set([earth]), ext_set([venus, mars])), [0.27, 0.64]] ]). 

nal_example_test(
  inference([inheritance(int_set([red, green, blue]), int_set([colorful])), [0.9, 0.8]], [inheritance(int_set([purple, green]), int_set([colorful])), [0.7, 0.8]], R) ,
 [ R = [inheritance(int_set([green]), int_set([colorful])), [0.63, 0.64]] ;
   R = [inheritance(int_set([red, blue, purple, green]), int_set([colorful])), [0.97, 0.64]] ;
   R = [inheritance(int_set([red, blue]), int_set([colorful])), [0.271, 0.64]] ]). 


% ----- NAL-4 ----- %

%= extensional image

nal_example_test(
  inference([inheritance(product([acid, base]), reaction), [1, 0.9]], C) ,
 [ C = [inheritance(acid, ext_image(reaction, [nil, base])), [1, 0.9]] ;
   C = [inheritance(base, ext_image(reaction, [acid, nil])), [1, 0.9]] ]). 

nal_example_test(
  inference([inheritance(acid, ext_image(reaction, [nil, base])), [1, 0.9]], C) ,
 [ C = [inheritance(product([acid, base]), reaction), [1, 0.9]] ]). 

nal_example_test(
  inference([inheritance(acid, ext_image(reaction, [acid, nil])), [1, 0.9]], C) ,
 [ C = [inheritance(product([acid, acid]), reaction), [1, 0.9]] ]). 


%= intensional image

nal_example_test(
  inference([inheritance(neutralization, product([acid, base])), [1, 0.9]], C) ,
 [ C = [inheritance(int_image(neutralization, [nil, base]), acid), [1, 0.9]] ;
   C = [inheritance(int_image(neutralization, [acid, nil]), base), [1, 0.9]] ]). 

nal_example_test(
  inference([inheritance(int_image(neutralization, [nil, base]), acid), [1, 0.9]], C) ,
 [ C = [inheritance(neutralization, product([acid, base])), [1, 0.9]] ]). 

nal_example_test(
  inference([inheritance(int_image(neutralization, [acid, nil]), base), [1, 0.9]], C) ,
 [ C = [inheritance(neutralization, product([acid, base])), [1, 0.9]] ]). 


%= operation on both sides of a relation

nal_example_test(
  inference([inheritance(bird, animal), [0.9, 0.8]], [inheritance(product([bird, plant]), product([animal, plant])), V]) ,
 [ V = [0.9, 0.8] ]). 

nal_example_test(
  inference([inheritance(product([plant, bird]), product([plant, animal])), [0.9, 0.8]], [inheritance(bird, animal), V]) ,
 [ V = [0.9, 0.8] ]). 

nal_example_test(
  inference([inheritance(neutralization, reaction), [0.9, 0.8]], [inheritance(ext_image(neutralization, [acid, nil]), ext_image(reaction, [acid, nil])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(ext_image(neutralization, [acid, nil]), ext_image(reaction, [acid, nil])), [0.9, 0.8]], [inheritance(neutralization, reaction), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(neutralization, reaction), [0.9, 0.8]], [inheritance(int_image(neutralization, [acid, nil]), int_image(reaction, [acid, nil])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_image(neutralization, [acid, nil]), int_image(reaction, [acid, nil])), [0.9, 0.8]], [inheritance(neutralization, reaction), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(soda, base), [0.9, 0.8]], [inheritance(ext_image(reaction, [nil, base]), ext_image(reaction, [nil, soda])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(ext_image(reaction, [nil, base]), ext_image(reaction, [nil, soda])), [0.9, 0.8]], [inheritance(soda, base), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(soda, base), [0.9, 0.8]], [inheritance(int_image(neutralization, [nil, base]), int_image(neutralization, [nil, soda])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(int_image(neutralization, [nil, base]), int_image(neutralization, [nil, soda])), [0.9, 0.8]], [inheritance(soda, base), V]) ,
 [ V = [0.9, 0.44] ]). 


% ----- NAL-5 ----- %

%= revision

nal_example_test(
  revision([implication(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, bird)), [0, 0.5]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, bird)), [0.8, 0.83]] ]). 

nal_example_test(
  revision([equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.8]], [equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [0, 0.5]], R) ,
 [ R = [equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [0.8, 0.83]] ]). 


%= choice

nal_example_test(
  choice([implication(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, bird)), [0, 0.5]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.8]] ]). 

nal_example_test(
  choice([implication(inheritance(robin, flyer), inheritance(robin, bird)), [0.8, 0.9]], [implication(inheritance(robin, swimmer), inheritance(robin, bird)), [1, 0.5]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, bird)), [0.8, 0.9]] ]). 


%= deduction

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.5]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.36]] ]). 

nal_example_test(
  inference([equivalence(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.5]], R) ,
 [ R = [equivalence(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.4]] ]). 


%= induction

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, flyer)), [1, 0.5]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.29]] ]). 


%= abduction

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, animal)), [1, 0.5]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, bird)), [1, 0.26]] ]). 


%= examplification

nal_example_test(
  inference([implication(inheritance(robin, flyer), inheritance(robin, bird)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), [1, 0.5]], R) ,
 [ R = [implication(inheritance(robin, animal), inheritance(robin, flyer)), [1, 0.26]] ]). 


%= convension

nal_example_test(
  inference([implication(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.8]], R) ,
 [ R = [implication(inheritance(robin, animal), inheritance(robin, flyer)), [1, 0.42]] ]). 

nal_example_test(
  inference([equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [0.9, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, bird)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([implication(inheritance(robin, flyer), inheritance(robin, bird)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, flyer)), [0.9, 0.8]], R) ,
 [ R = [equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [0.81, 0.64]] ]). 

nal_example_test(
  inference([similarity(swan, bird), [0.9, 0.8]], [inheritance(swan, bird), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(swan, bird), [0.9, 0.8]], [similarity(swan, bird), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(swan, bird), [1, 0.8]], [inheritance(bird, swan), [0.1, 0.8]], R) ,
 [ R = [similarity(swan, bird), [0.1, 0.64]] ]). 


%= comparison

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, flyer)), [0.9, 0.8]], [equivalence(A, B), V]) ,
 [ A = inheritance(robin, flyer),
   B = inheritance(robin, animal),
   V = [0.82, 0.39] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.8]], [equivalence(A, B), V]) ,
 [ % R = [equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [0.818182, 0.387855]] ;
   A = inheritance(robin, flyer),
   B = inheritance(robin, bird),
   V = [0.82, 0.39] ]). 


%= analogy

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [equivalence(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.8]], R) ,
 [ R = [implication(inheritance(robin, bird), inheritance(robin, flyer)), [0.81, 0.58]] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [equivalence(inheritance(robin, flyer), inheritance(robin, bird)), [0.9, 0.8]], R) ,
 [ R = [implication(inheritance(robin, flyer), inheritance(robin, animal)), [0.81, 0.58]] ]). 


%= compound construction, two premises

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, flyer)), [0.9, 0.8]], R) ,
 [ R = [implication(inheritance(robin, bird), conjunction([inheritance(robin, animal), inheritance(robin, flyer)])), [0.81, 0.64]] ;
   R = [implication(inheritance(robin, bird), disjunction([inheritance(robin, animal), inheritance(robin, flyer)])), [0.99, 0.64]] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.8]], R) ,
 [ R = [implication(disjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), [0.81, 0.64]] ;
   R = [implication(conjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), [0.99, 0.64]] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [0.9, 0.9]], [inheritance(robin, flyer), [0.9, 0.9]], [conjunction([inheritance(robin, animal), inheritance(robin, flyer)]), V]) ,
 [ V = [0.81, 0.81] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [0.9, 0.8]], [inheritance(robin, flyer), [0.9, 0.8]], [disjunction([inheritance(robin, animal), inheritance(robin, flyer)]), V]) ,
 [ V = [0.99, 0.64] ]). 


%= compound construction, single premise

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), conjunction([inheritance(robin, animal), inheritance(robin, flyer)])), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), disjunction([inheritance(robin, animal), inheritance(robin, flyer)])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(disjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [implication(conjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [0.9, 0.8]], [conjunction([inheritance(robin, animal), inheritance(robin, flyer)]), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [0.9, 0.8]], [disjunction([inheritance(robin, animal), inheritance(robin, flyer)]), V]) ,
 [ V = [0.9, 0.72] ]). 


%= compound destruction, two premises

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, flyer)), [1, 0.8]], [implication(inheritance(robin, bird), conjunction([inheritance(robin, animal), inheritance(robin, flyer)])), [0, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), T]) ,
 [ T = [0, 0.64] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, flyer)), [0, 0.8]], [implication(inheritance(robin, bird), disjunction([inheritance(robin, animal), inheritance(robin, flyer)])), [1, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), T]) ,
 [ T = [1, 0.64] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [1, 0.8]], [implication(disjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), [0, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, animal)), T]) ,
 [ T = [0, 0.64] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0, 0.8]], [implication(conjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), [1, 0.8]], [implication(inheritance(robin, flyer), inheritance(robin, animal)), T]) ,
 [ T = [1, 0.64] ]). 

nal_example_test(
  inference([inheritance(robin, bird), [1, 0.8]], [conjunction([inheritance(robin, bird), inheritance(robin, flyer)]), [0, 0.8]], R) ,
 [ R = [inheritance(robin, flyer), [0, 0.64]] ]). 

nal_example_test(
  inference([inheritance(robin, bird), [0, 0.8]], [disjunction([inheritance(robin, bird), inheritance(robin, flyer)]), [1, 0.8]], R) ,
 [ R = [inheritance(robin, flyer), [1, 0.64]] ]). 


%= compound destruction, single premise

nal_example_test(
  inference([implication(inheritance(robin, bird), conjunction([inheritance(robin, animal), inheritance(robin, flyer)])), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), disjunction([inheritance(robin, animal), inheritance(robin, flyer)])), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([implication(disjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([implication(conjunction([inheritance(robin, bird), inheritance(robin, flyer)]), inheritance(robin, animal)), [0.9, 0.8]], [implication(inheritance(robin, bird), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([conjunction([inheritance(robin, bird), inheritance(robin, flyer)]), [0.9, 0.8]], [inheritance(robin, bird),V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([disjunction([inheritance(robin, bird), inheritance(robin, flyer)]), [0.9, 0.8]], [inheritance(robin, bird),V]) ,
 [ V = [0.9, 0.44] ]). 


%= operation on both sides of a relation

nal_example_test(
  inference([implication(p, q), [0.9, 0.8]], [implication(conjunction([p, r]), conjunction([q, r])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([implication(conjunction([p, r]), conjunction([q, r])), [0.9, 0.8]], [implication(p, q), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([implication(p, q), [0.9, 0.8]], [implication(disjunction([p, r]), disjunction([q, r])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([implication(disjunction([p, r]), disjunction([q, r])), [0.9, 0.8]], [implication(p, q), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([equivalence(p, q), [0.9, 0.8]], [equivalence(conjunction([p, r]), conjunction([q, r])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([equivalence(conjunction([p, r]), conjunction([q, r])), [0.9, 0.8]], [equivalence(p, q), V]) ,
 [ V = [0.9, 0.44] ]). 

nal_example_test(
  inference([equivalence(p, q), [0.9, 0.8]], [equivalence(disjunction([p, r]), disjunction([q, r])), V]) ,
 [ V = [0.9, 0.72] ]). 

nal_example_test(
  inference([equivalence(disjunction([p, r]), disjunction([q, r])), [0.9, 0.8]], [equivalence(p, q), V]) ,
 [ V = [0.9, 0.44] ]). 


%= negation

nal_example_test(
  inference([negation(inheritance(robin, bird)), [0.9, 0.8]], R) ,
 [ R = [inheritance(robin, bird), [0.1, 0.8]] ]). 

nal_example_test(
  inference([inheritance(robin, bird), [0.2, 0.8]], [negation(inheritance(robin, bird)), T]) ,
 [ T = [0.8, 0.8] ]). 

nal_example_test(
  inference([implication(negation(inheritance(penguin, flyer)), inheritance(penguin, swimmer)), [0.1, 0.8]], [implication(negation(inheritance(penguin, swimmer)), inheritance(penguin, flyer)), T]) ,
 [ T = [0, 0.42] ]). 


%= conditional inference

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [inheritance(robin, bird), [1, 0.5]], R) ,
 [ R = [inheritance(robin, animal), [0.9, 0.36]] ]). 

nal_example_test(
  inference([implication(inheritance(robin, bird), inheritance(robin, animal)), [0.9, 0.8]], [inheritance(robin, animal), [1, 0.5]], R) ,
 [ R = [inheritance(robin, bird), [1, 0.26]] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [0.9, 0.8]], [inheritance(robin, flyer), [1, 0.5]], [implication(inheritance(robin, flyer), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.29] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [1, 0.5]], [equivalence(inheritance(robin, flyer), inheritance(robin, animal)), [0.9, 0.8]], R) ,
 [ R = [inheritance(robin, flyer), [0.9, 0.36]] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [0.9, 0.8]], [inheritance(robin, flyer), [1, 0.5]], [equivalence(inheritance(robin, flyer), inheritance(robin, animal)), V]) ,
 [ V = [0.9, 0.29] ]). 

nal_example_test(
  inference([implication(conjunction([a1, a2, a3]), c), [0.9, 0.9]], [a2, [0.9, 0.9]], R) ,
 [ R = [implication(conjunction([a1, a3]), c), [0.81, 0.66]] ]). 

nal_example_test(
  inference([implication(conjunction([a1, a2, a3]), c), [0.9, 0.9]], [implication(conjunction([a1, a3]), c), [0.9, 0.9]], [a2, V]) ,
 [ V = [0.9, 0.42] ]). 

nal_example_test(
  inference([implication(conjunction([a1, a3]), c), [0.9, 0.9]], [a2, [0.9, 0.9]], [implication(conjunction([a2, a1, a3]), c), V]) ,
 [ V = [0.9, 0.42] ]). 

nal_example_test(
  inference([implication(conjunction([a1, a2, a3]), c), [0.9, 0.9]], [implication(b2, a2), [0.9, 0.9]], R) ,
 [ R = [implication(conjunction([a1, b2, a3]), c), [0.81, 0.66]] ]). 

nal_example_test(
  inference([implication(conjunction([a1, a2, a3]), c), [0.9, 0.9]], [implication(conjunction([a1, b2, a3]), c), [0.9, 0.9]], [implication(b2, a2), V]) ,
 [ V = [0.9, 0.42] ]). 

nal_example_test(
  inference([implication(conjunction([a1, b2, a3]), c), [0.9, 0.9]], [implication(b2, a2), [0.9, 0.9]], R) ,
 [ R = [implication(conjunction([a1, a2, a3]), c), [0.9, 0.42]] ]). 


% ----- NAL-6 ----- %

%= variable unification

nal_example_test(
  revision([implication(inheritance(X, bird), inheritance(X, flyer)), [0.9, 0.8]], [implication(inheritance(Y, bird), inheritance(Y, flyer)), [1, 0.5]], R) ,
 [ R = [implication(inheritance(Y, bird), inheritance(Y, flyer)), [0.92, 0.83]] ]). 

nal_example_test(
  inference([implication(inheritance(X, bird), inheritance(X, animal)), [1, 0.9]], [implication(inheritance(Y, robin), inheritance(Y, bird)), [1, 0.9]], R) ,
 [ R = [implication(inheritance(Y, robin), inheritance(Y, animal)), [1, 0.81]] ]). 
  
nal_example_test(
  inference([implication(inheritance(X, bird), inheritance(X, animal)), [1, 0.9]], [implication(inheritance(Y, robin), inheritance(Y, animal)), [1, 0.9]], R) ,
 [ R = [implication(inheritance(Y, robin), inheritance(Y, bird)), [1, 0.45]] ]). 

nal_example_test(
  inference([implication(inheritance(X, robin), inheritance(X, animal)), [1, 0.9]], [implication(inheritance(Y, robin), inheritance(Y, bird)), [1, 0.9]], R) ,
 [ R = [implication(inheritance(Y, bird), inheritance(Y, animal)), [1, 0.45]] ]). 

nal_example_test(
  inference([implication(inheritance(X, feathered), inheritance(X, bird)), [1, 0.9]], [equivalence(inheritance(Y, flyer), inheritance(Y, bird)), [1, 0.9]], R) ,
 [ R = [implication(inheritance(Y, feathered), inheritance(Y, flyer)), [1, 0.81]] ]). 

nal_example_test(
  inference([implication(inheritance(X, feathered), inheritance(X, flyer)), [1, 0.9]], [implication(inheritance(Y, feathered), inheritance(Y, bird)), [1, 0.9]], R) ,
 [ R = [implication(inheritance(Y, bird), inheritance(Y, flyer)), [1, 0.45]] ]). 

nal_example_test(
  inference([implication(conjunction([inheritance(X, feathered), inheritance(X, flyer)]), inheritance(X, bird)), [1, 0.9]], [implication(inheritance(Y, swimmer), inheritance(Y, feathered)), [1, 0.9]], R) ,
 [ R = [implication(conjunction([inheritance(Y, swimmer), inheritance(Y, flyer)]), inheritance(Y, bird)), [1, 0.81]] ]). 

nal_example_test(
  inference([implication(conjunction([inheritance(X, feathered), inheritance(X, flyer)]), inheritance(X, bird)), [1, 0.9]], [implication(conjunction([inheritance(X, swimmer), inheritance(X, flyer)]), inheritance(X, bird)), [1, 0.9]], R) ,
 [ R = [implication(inheritance(X, swimmer), inheritance(X, feathered)), [1, 0.45]] ]). 

nal_example_test(
  inference([implication(conjunction([inheritance(X, swimmer), inheritance(X, flyer)]), inheritance(X, bird)), [1, 0.9]], [implication(inheritance(Y, swimmer), inheritance(Y, feathered)), [1, 0.9]], R) ,
 [ R = [implication(conjunction([inheritance(Y, feathered), inheritance(Y, flyer)]), inheritance(Y, bird)), [1, 0.45]] ]). 

nal_example_test(
  inference([implication(conjunction([inheritance(X, feathered), inheritance(X, flyer)]), inheritance(X, bird)), [1, 0.9]], [implication(inheritance(Y, swimmer), inheritance(Y, feathered)), [1, 0.9]], R) ,
 [ R = [implication(conjunction([inheritance(Y, swimmer), inheritance(Y, flyer)]), inheritance(Y, bird)), [1, 0.81]] ]). 


%= variable elimination

nal_example_test(
  inference([implication(inheritance(X, bird), inheritance(X, animal)), [1, 0.9]], [inheritance(robin, bird), [1, 0.9]], R) ,
 [ R = [inheritance(robin, animal), [1, 0.81]] ]). 

nal_example_test(
  inference([implication(inheritance(X, bird), inheritance(X, animal)), [1, 0.9]], [inheritance(robin, animal), [1, 0.9]], R) ,
 [ R = [inheritance(robin, bird), [1, 0.45]] ]). 

nal_example_test(
  inference([inheritance(robin, animal), [1, 0.9]], [equivalence(inheritance(X, bird), inheritance(X, animal)), [1, 0.9]], R) ,
 [ R = [inheritance(robin, bird), [1, 0.81]] ]). 

nal_example_test(
  inference([implication(conjunction([inheritance(X, feathered), inheritance(X, flyer)]), inheritance(X, bird)), [1, 0.9]], [inheritance(swan, feathered), [1, 0.9]], R) ,
 [ R = [implication(inheritance(swan, flyer), inheritance(swan, bird)), [1, 0.81]] ]). 

nal_example_test(
  inference([conjunction([inheritance(var(X, []), bird), inheritance(var(X, []), swimmer)]), [1, 0.9]], [inheritance(swan, bird), [1, 0.9]], [inheritance(swan, swimmer), V]) ,
 [ V = [1, 0.42] ]). 

nal_example_test(
  inference([conjunction([inheritance(var(X, []), flyer), inheritance(var(X, []), bird), inheritance(var(X, []), swimmer)]), [1, 0.9]], [inheritance(swan, bird), [1, 0.9]], R) ,
 [ R = [conjunction([inheritance(swan, flyer), inheritance(swan, swimmer)]), [1, 0.42]] ]). 


%= variable introduction

nal_example_test(
  inference([inheritance(robin, animal), [1, 0.9]], [inheritance(robin, bird), [1, 0.9]], R) ,
 [ R = [implication(inheritance(G650, bird), inheritance(G650, animal)), [1, 0.45]] ;
   R = [equivalence(inheritance(G650, bird), inheritance(G650, animal)), [1, 0.45]] ;
   R = [conjunction([inheritance(var(G655, []), bird), inheritance(var(G655, []), animal)]), [1, 0.81]] ]). 

nal_example_test(
  inference([inheritance(sport, competition), [1, 0.9]], [inheritance(chess, competition), [1, 0.9]], R) ,
 [ R = [implication(inheritance(sport, G738), inheritance(chess, G738)), [1, 0.45]] ;
   R = [equivalence(inheritance(sport, G738), inheritance(chess, G738)), [1, 0.45]] ;
   R = [conjunction([inheritance(chess, var(G742, [])), inheritance(sport, var(G742, []))]), [1, 0.81]] ]). 


%= multiple variables

nal_example_test(
  inference([inheritance(key1, ext_image(open, [nil, lock1])), [1, 0.9]], [inheritance(key1, key), [1, 0.9]], R) ,
 [ R = [implication(inheritance(G836, key), inheritance(G836, ext_image(open, [nil, lock1]))), [1, 0.45]] ;
   R = [conjunction([inheritance(var(G841, []), key), inheritance(var(G841, []), ext_image(open, [nil, lock1]))]), [1, 0.81]] ]). 

nal_example_test(
  inference([implication(inheritance(X, key), inheritance(lock1, ext_image(open, [X, nil]))), [1, 0.9]], [inheritance(lock1, lock), [1, 0.9]], R) ,
 [ R = [implication(conjunction([inheritance(X, key), inheritance(G1233, lock)]), inheritance(G1233, ext_image(open, [X, nil]))), [1, 0.45]] ;
   R = [conjunction([implication(inheritance(X, key), inheritance(var(G1233, []), ext_image(open, [X, nil]))), inheritance(var(G1233, []), lock)]), [1, 0.81]] ]). 

nal_example_test(
  inference([conjunction([inheritance(var(X, []), key), inheritance(lock1, ext_image(open, [var(X, []), nil]))]), [1, 0.9]],[inheritance(lock1, lock), [1, 0.9]], R) ,
 [ R = [implication(inheritance(G1367, lock), conjunction([inheritance(G1367, ext_image(open, [var(X, [G1367]), nil])), inheritance(var(X, [G1367]), key)])), [1, 0.45]] ;
   R = [conjunction([inheritance(var(G1372, []), lock), inheritance(var(G1372, []), ext_image(open, [var(X, []), nil])), inheritance(var(X, []), key)]), [1, 0.81]] ]).