
/*     KLONE1.PL     settembre 91   */

/*   predicati top level   */

 differentiates(A,B) :-
        diffs(A,B).
 differentiates(A,B,C,D) :-
        diffs(A,B,C,D).
 generic_concept(A) :-
        work(B),
        net_node(g_conc,A,B).
 generic_role(A) :-
        work(B),
        net_node(g_role,A,C,B).
 generic_role(A,B) :-
        work(C),
        net_node(g_role,A,B,C).
 has_inherited_role(A,B) :-
        work(C),
        super_c(A,D),
        net_arc(role,D,B,C).
 has_modality(A,B,C) :-
        modality_facet(A,B,C).
 has_number(A,B,[C,D]) :-
        number_facet(A,B,[C,D]).
 has_role(A,B) :-
        work(C),
        net_arc(role,A,B,C).
 has_role(A,B) :-
        work(C),
        nonvar(B),
        role(A,B),
        not net_arc(role,A,B,C).
 has_role(A,B) :-
        work(C),
        var(B),
        super_c(A,D),
        net_arc(role,D,B,C),
        not super_r(E,A,B,D).
 has_super_concept(A,B) :-
        super_c(A,B).
 has_super_role(A,B) :-
        super_r(A,B).
 has_super_role(A,B,C,D) :-
        super_r(A,B,C,D).
 has_value(A,B,C) :-
        value_facet(A,B,C).
 has_vr(A,B,C) :-
        vr_facet(A,B,C).
 individual_concept(A) :-
        work(B),
        net_node(i_conc,A,B).
 individuates(A,B) :-
        indiv_c(A,B).
 instance_role(A) :-
        work(B),
        net_node(i_role,A,C,B).
 instance_role(A,B) :-
        work(C),
        net_node(i_role,A,B,C).
 is_role(A) :-
        work(B),
        net_node(g_role,A,C,B).
 is_role(A) :-
        work(B),
        net_node(i_role,A,C,B).
 modifies(A,B) :-
        mods(A,B).
 modifies(A,B,C,D) :-
        mods(A,B,C,D).
 satisfies(A,B) :-
        sats(A,B).
 satisfies(A,B,C,D) :-
        sats(A,B,C,D).
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,1,[C]),
        nonvar(C),
        defined_op(assume,A),
        not A,
        assert_data(C,B),
        write_line(3,['>> ',A]),
        skip_line(2),
        '!'.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,1,[C]),
        nonvar(C),
        defined_op(assume,A),
        call(A),
        msg(assume,A,3),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,1,[C]),
        var(C),
        msg(assume,D,4),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,2,[C,D]),
        nonvar(C),
        nonvar(D),
        defined_op(assume,A),
        not A,
        pred_name(B,E),
        F=..[E,C,D],
        is_consistent(F),
        assert_data(C,D,B),
        (
          (
            B=generic_role
          ;
            B=instance_role
          ),
          write_line(3,['>> ',B,'(',C,')'])
        ;
          write_line(3,['>> ',A])
        ),
        skip_line(2),
        '!'.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,2,[C,D]),
        nonvar(C),
        nonvar(D),
        defined_op(assume,A),
        not A,
        pred_name(B,E),
        F=..[E,C,D],
        neg(F,G,H),
        msg(E,H,G),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,2,[C,D]),
        nonvar(C),
        nonvar(D),
        defined_op(assume,A),
        call(A),
        msg(assume,A,3),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,2,[C,D]),
        (
          var(C)
        ;
          var(D)
        ),
        msg(assume,E,4),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,3,[C,D,E]),
        nonvar(C),
        nonvar(D),
        nonvar(E),
        defined_op(assume,A),
        not A,
        assert_data(C,D,E,B),
        write_line(3,['>> ',A]),
        skip_line(2),
        '!'.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,3,[C,D,E]),
        nonvar(C),
        nonvar(D),
        nonvar(E),
        defined_op(assume,A),
        call(A),
        msg(assume,A,3),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,3,[C,D,E]),
        (
          var(C)
        ;
          (
            var(D)
          ;
            var(E)
          )
        ),
        msg(assume,F,4),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,4,[C,D,E,F]),
        nonvar(C),
        nonvar(D),
        nonvar(E),
        nonvar(F),
        defined_op(assume,A),
        not A,
        assert_data(C,D,E,F,B),
        write_line(3,['>> ',A]),
        skip_line(2),
        '!'.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,4,[C,D,E,F]),
        nonvar(C),
        nonvar(D),
        nonvar(E),
        nonvar(F),
        defined_op(assume,A),
        call(A),
        msg(assume,A,3),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,4,[C,D,E,F]),
        (
          var(C)
        ;
          (
            var(D)
          ;
            (
              var(E)
            ;
              var(name4)
            )
          )
        ),
        msg(assume,G,4),
        '!',
        true.
 assume(A) :-
        nonvar(A),
        formula_structure(A,B,C,D),
        not defined_op(assume,A),
        msg(assume,B,2),
        '!',
        true.
 assume(A) :-
        var(A),
        msg(assume,B,1),
        '!',
        true.
 add(A,B,generic_role) :-
        nonvar(A),
        nonvar(B),
        generic_role(B),
        (
          assume(has_role(A,B)),
          '!'
        ;
          '!',
          fail
        ).
 add(A,B,generic_role) :-
        nonvar(A),
        nonvar(B),
        assume(generic_role(B,A)),
        (
          assume(has_role(A,B)),
          '!'
        ;
          remove(generic_role(B,A)),
          '!',
          fail
        ).
 add(A,B,instance_role) :-
        nonvar(A),
        nonvar(B),
        instance_role(B),
        (
          assume(has_role(A,B)),
          '!'
        ;
          '!',
          fail
        ).
 add(A,B,instance_role) :-
        nonvar(A),
        nonvar(B),
        (
          assume(instance_role(B,A)),
          '!'
        ;
          remove(instance_role(B,A)),
          '!',
          fail
        ).
 add(A,B,vr) :-
        nonvar(B),
        nonvar(A),
        generic_concept(B),
        work(C),
        net_node(g_role,A,D,C),
        assume(has_vr(A,D,B)),
        '!'.
 add(A,B,vr) :-
        nonvar(B),
        nonvar(A),
        work(C),
        net_node(g_role,A,D,C),
        assume(generic_concept(B)),
        (
          assume(has_vr(A,D,B)),
          '!'
        ;
          remove(generic_concept(B)),
          '!',
          fail
        ).
 add(A,B,value) :-
        nonvar(A),
        nonvar(B),
        individual_concept(B),
        work(C),
        net_node(i_role,A,D,C),
        assume(has_value(A,D,B)),
        '!'.
 add(A,B,value) :-
        nonvar(A),
        nonvar(B),
        work(C),
        net_node(i_role,A,D,C),
        assume(individual_concept(B)),
        (
          assume(has_value(A,D,B)),
          '!'
        ;
          remove(individual_concept(B)),
          '!',
          fail
        ).
 change(A,B,C,D) :-
        work(E),
        nonvar(A),
        nonvar(B),
        (
          C==has_number,
          D=[F,G],
          nonvar(F),
          nonvar(G)
        ;
          nonvar(D)
        ),
        pred_name(C,H),
        net_arc(H,I,J,K,E),
        retract(net_arc(H,I,J,K,E)),
        (
          is_consistent(H,I,J,D),
          assert_data(I,J,D,C),
          '!'
        ;
          neg(H,I,J,D,L,M),
          assert_data(I,J,K,C),
          msg(H,M,L),
          '!',
          fail
        ).
 change(A,B,C,D) :-
        work(E),
        nonvar(A),
        nonvar(B),
        (
          C==has_number,
          D=[F,G],
          nonvar(F),
          nonvar(G)
        ;
          nonvar(D)
        ),
        pred_name(C,H),
        not net_arc(H,I,J,K,E),
        (
          is_consistent(H,I,J,D),
          assert_data(I,J,D,C),
          '!'
        ;
          neg(H,I,J,D,L,M),
          msg(H,M,L),
          '!',
          fail
        ).
 working_net(A) :-
        retract(work(B)),
        asserta(work(A)).

