succ prec
indice
Esempio "Raggiungibilita'/Collegamento"
In questo esempio ispirato ad un grafo di nove nodi, il predicato
ricorsivo "raggiunge/2" (can_reach) viene appreso rispetto al predicato
"collegato_a/2" (linked_to) espresso in forma estensionale.
*
foil_predicates([ can_reach/2, linked_to/2]).
foil_cwa(true).
foil_use_negations(false). % Don't use negations of foil_predicates
foil_det_lit_bound(0). % Don't add any determinate literals
% In general, this is a depth limit on
% the search for determinate literals
% Definitions of background predicates
can_reach(0,1).
can_reach(0,2).
can_reach(0,3).
can_reach(0,4).
can_reach(0,5).
can_reach(0,6).
can_reach(0,8).
can_reach(1,2).
can_reach(3,2).
can_reach(3,4).
can_reach(3,5).
can_reach(3,6).
can_reach(3,8).
can_reach(4,5).
can_reach(4,6).
can_reach(4,8).
can_reach(6,8).
can_reach(7,6).
can_reach(7,8).
linked_to(0,1).
linked_to(0,3).
linked_to(1,2).
linked_to(3,2).
linked_to(3,4).
linked_to(4,5).
linked_to(4,6).
linked_to(6,8).
linked_to(7,6).
linked_to(7,8).
======================================================================
=== SWI-PROLOG
======================================================================
Load an example data file: [filename]
Start Foil : foil(Predicate/Arity)
Start Foil measure time : foil_time(Predicate/Arity)
/apl/misc/prolog/foil.pl compiled, 0.01 sec, 23,260 bytes.
Yes
2 ?- [foil_1].
foil_1 compiled, 0.00 sec, 2,396 bytes.
Yes
3 ?- foil(can_reach/2).
Uncovered positives:
[can_reach(0, 1), can_reach(0, 2), can_reach(0, 3), can_reach(0, 4), can_reach(0, 5), can_reach(0, 6), can_reach(0, 8), can_reach(1, 2), can_reach(3, 2), can_reach(3, 4), can_reach(3, 5), can_reach(3, 6), can_reach(3, 8), can_reach(4, 5), can_reach(4, 6), can_reach(4, 8), can_reach(6, 8), can_reach(7, 6), can_reach(7, 8)]
Adding a clause ...
Specializing current clause:
can_reach(A, B).
Covered negatives:
[can_reach(0, 0), can_reach(0, 7), can_reach(1, 0), can_reach(1, 1), can_reach(1, 3), can_reach(1, 4), can_reach(1, 5), can_reach(1, 6), can_reach(1, 7), can_reach(1, 8), can_reach(2, 0), can_reach(2, 1), can_reach(2, 2), can_reach(2, 3), can_reach(2, 4), can_reach(2, 5), can_reach(2, 6), can_reach(2, 7), can_reach(2, 8), can_reach(3, 0), can_reach(3, 1), can_reach(3, 3), can_reach(3, 7), can_reach(4, 0), can_reach(4, 1), can_reach(4, 2), can_reach(4, 3), can_reach(4, 4), can_reach(4, 7), can_reach(5, 0), can_reach(5, 1), can_reach(5, 2), can_reach(5, 3), can_reach(5, 4), can_reach(5, 5), can_reach(5, 6), can_reach(5, 7), can_reach(5, 8), can_reach(6, 0), can_reach(6, 1), can_reach(6, 2), can_reach(6, 3), can_reach(6, 4), can_reach(6, 5), can_reach(6, 6), can_reach(6, 7), can_reach(7, 0), can_reach(7, 1), can_reach(7, 2), can_reach(7, 3), can_reach(7, 4), can_reach(7, 5), can_reach(7, 7), can_reach(8, 0), can_reach(8, 1), can_reach(8, 2), can_reach(8, 3), can_reach(8, 4), can_reach(8, 5), can_reach(8, 6), can_reach(8, 7), can_reach(8, 8)]
Covered positives:
[can_reach(0, 1), can_reach(0, 2), can_reach(0, 3), can_reach(0, 4), can_reach(0, 5), can_reach(0, 6), can_reach(0, 8), can_reach(1, 2), can_reach(3, 2), can_reach(3, 4), can_reach(3, 5), can_reach(3, 6), can_reach(3, 8), can_reach(4, 5), can_reach(4, 6), can_reach(4, 8), can_reach(6, 8), can_reach(7, 6), can_reach(7, 8)]
Gain: -9.40499 Clause: can_reach(A, B) :- linked_to(C, A)
Gain: 14.6299 Clause: can_reach(A, B) :- linked_to(A, C)
Gain: 10.531 Clause: can_reach(A, B) :- linked_to(C, B)
Gain: -7.52399 Clause: can_reach(A, B) :- linked_to(B, C)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, A)
Gain: 0 Clause: can_reach(A, B) :- linked_to(B, A)
Gain: 20.9192 Clause: can_reach(A, B) :- linked_to(A, B)
Gain: 0 Clause: can_reach(A, B) :- linked_to(B, B)
Clause found:
can_reach(A, B) :-
linked_to(A, B).
Uncovered positives:
[can_reach(0, 2), can_reach(0, 4), can_reach(0, 5), can_reach(0, 6), can_reach(0, 8), can_reach(3, 5), can_reach(3, 6), can_reach(3, 8), can_reach(4, 8)]
Adding a clause ...
Specializing current clause:
can_reach(A, B).
Covered negatives:
[can_reach(0, 0), can_reach(0, 7), can_reach(1, 0), can_reach(1, 1), can_reach(1, 3), can_reach(1, 4), can_reach(1, 5), can_reach(1, 6), can_reach(1, 7), can_reach(1, 8), can_reach(2, 0), can_reach(2, 1), can_reach(2, 2), can_reach(2, 3), can_reach(2, 4), can_reach(2, 5), can_reach(2, 6), can_reach(2, 7), can_reach(2, 8), can_reach(3, 0), can_reach(3, 1), can_reach(3, 3), can_reach(3, 7), can_reach(4, 0), can_reach(4, 1), can_reach(4, 2), can_reach(4, 3), can_reach(4, 4), can_reach(4, 7), can_reach(5, 0), can_reach(5, 1), can_reach(5, 2), can_reach(5, 3), can_reach(5, 4), can_reach(5, 5), can_reach(5, 6), can_reach(5, 7), can_reach(5, 8), can_reach(6, 0), can_reach(6, 1), can_reach(6, 2), can_reach(6, 3), can_reach(6, 4), can_reach(6, 5), can_reach(6, 6), can_reach(6, 7), can_reach(7, 0), can_reach(7, 1), can_reach(7, 2), can_reach(7, 3), can_reach(7, 4), can_reach(7, 5), can_reach(7, 7), can_reach(8, 0), can_reach(8, 1), can_reach(8, 2), can_reach(8, 3), can_reach(8, 4), can_reach(8, 5), can_reach(8, 6), can_reach(8, 7), can_reach(8, 8)]
Covered positives:
[can_reach(0, 2), can_reach(0, 4), can_reach(0, 5), can_reach(0, 6), can_reach(0, 8), can_reach(3, 5), can_reach(3, 6), can_reach(3, 8), can_reach(4, 8)]
Gain: -5.58087 Clause: can_reach(A, B) :- linked_to(C, A)
Gain: 8.8184 Clause: can_reach(A, B) :- linked_to(A, C)
Gain: 6.09533 Clause: can_reach(A, B) :- linked_to(C, B)
Gain: -4.18565 Clause: can_reach(A, B) :- linked_to(B, C)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, A)
Gain: 0 Clause: can_reach(A, B) :- linked_to(B, A)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, B)
Gain: 0 Clause: can_reach(A, B) :- linked_to(B, B)
Specializing current clause:
can_reach(A, B) :-
linked_to(A, C).
Covered negatives:
[can_reach(0, 0), can_reach(0, 7), can_reach(1, 0), can_reach(1, 1), can_reach(1, 3), can_reach(1, 4), can_reach(1, 5), can_reach(1, 6), can_reach(1, 7), can_reach(1, 8), can_reach(3, 0), can_reach(3, 1), can_reach(3, 3), can_reach(3, 7), can_reach(4, 0), can_reach(4, 1), can_reach(4, 2), can_reach(4, 3), can_reach(4, 4), can_reach(4, 7), can_reach(6, 0), can_reach(6, 1), can_reach(6, 2), can_reach(6, 3), can_reach(6, 4), can_reach(6, 5), can_reach(6, 6), can_reach(6, 7), can_reach(7, 0), can_reach(7, 1), can_reach(7, 2), can_reach(7, 3), can_reach(7, 4), can_reach(7, 5), can_reach(7, 7)]
Covered positives:
[can_reach(0, 2), can_reach(0, 4), can_reach(0, 5), can_reach(0, 6), can_reach(0, 8), can_reach(3, 5), can_reach(3, 6), can_reach(3, 8), can_reach(4, 8)]
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), can_reach(C, A)
Gain: 18 Clause: can_reach(A, B) :- linked_to(A, C), can_reach(C, B)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), can_reach(A, C)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), can_reach(B, C)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), can_reach(C, C)
Gain: -2.80176 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(D, A)
Gain: 1.52932 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(A, D)
Gain: 6.63269 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(D, B)
Gain: -4.27879 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(B, D)
Gain: -3.58694 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(D, C)
Gain: 7.6025 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(C, D)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(A, A)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(B, A)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(C, A)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(A, B)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(B, B)
Gain: 10 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(C, B)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(A, C)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(B, C)
Gain: 0 Clause: can_reach(A, B) :- linked_to(A, C), linked_to(C, C)
Clause found:
can_reach(A, B) :-
linked_to(A, C),
can_reach(C, B).
Found definition:
can_reach(A, B) :-
linked_to(A, C),
can_reach(C, B).
can_reach(A, B) :-
linked_to(A, B).
Yes
4 ?-
*
succ prec
indice