Skip to content

Commit

Permalink
adding log:compoundTerm built-in
Browse files Browse the repository at this point in the history
  • Loading branch information
josd committed Feb 23, 2025
1 parent 0f148a6 commit 8e92d13
Show file tree
Hide file tree
Showing 12 changed files with 266 additions and 9 deletions.
1 change: 1 addition & 0 deletions RELEASE
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
EYE release

v11.9.1 (2025-02-23) adding log:compoundTerm built-in
v11.9.0 (2025-02-23) making pl3 branch and using log:herbrand instead
v11.8.2 (2025-02-23) fixing tabling per https://github.com/orgs/eyereasoner/discussions/139#discussioncomment-12290395
v11.8.1 (2025-02-21) supporting --pl3 <uri>
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
11.9.0
11.9.1
1 change: 1 addition & 0 deletions eye-builtins.n3
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ log:callWithCut a e:Builtin.
log:callWithDisjunction a e:Builtin.
log:callWithOptional a e:Builtin.
log:collectAllIn a e:Builtin.
log:compoundTerm a e:Builtin.
log:conclusion a e:Builtin.
log:conjunction a e:Builtin.
log:content a e:Builtin.
Expand Down
7 changes: 6 additions & 1 deletion eye.pl
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
:- catch(use_module(library(process)), _, true).
:- catch(use_module(library(http/http_open)), _, true).

version_info('EYE v11.9.0 (2025-02-23)').
version_info('EYE v11.9.1 (2025-02-23)').

license_info('MIT License

Expand Down Expand Up @@ -7413,6 +7413,11 @@
),
E = C.

'<http://www.w3.org/2000/10/swap/log#compoundTerm>'([literal(A, type('<http://www.w3.org/2001/XMLSchema#string>'))|B], C) :-
\+flag(restricted),
atomify(B, D),
read_term_from_atom(A, C, [variables(D)]).

'<http://www.w3.org/2000/10/swap/log#conclusion>'(A, B) :-
when(
( nonvar(A)
Expand Down
Binary file modified eye.zip
Binary file not shown.
5 changes: 5 additions & 0 deletions reasoning/evolutionary-algorithm/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
----------------------
Evolutionary algorithm
----------------------

See https://en.wikipedia.org/wiki/Evolutionary_algorithm
68 changes: 68 additions & 0 deletions reasoning/evolutionary-algorithm/evolutionary-algorithm-answer.n3
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
% evolution=1 score=26 value='H ENKLACOAMTGRHPENXRF FIDNHL'
% evolution=2 score=25 value='H EAKLACOAMTGRHPENXRF FIANHL'
% evolution=3 score=24 value='H EAKLASOAMTGRHPENXRF FIANHL'
% evolution=4 score=23 value='H EAILASOAFTGRHPENXRF FYANHL'
% evolution=5 score=22 value='H EAILASOAFTGRHPYNXRF FEANHL'
% evolution=6 score=21 value='H EAILAS AFTRRHPYNXRF FEANHL'
% evolution=7 score=20 value='H EAILAS ABTRR PYNXRF FEANHL'
% evolution=8 score=19 value='M EAILAS ABTRR PYNXRF QEANHL'
% evolution=9 score=18 value='M EAILAS WLTRS PYNXRF QEANHL'
% evolution=10 score=17 value='M EAILAS ILTRS PYNXRF QEANHL'
% evolution=11 score=16 value='M EAILAS ITTRS PYNXRF QEANHL'
% evolution=12 score=15 value='M EAILMS ITHRS PYKXRF QEANHL'
% evolution=13 score=14 value='M EAILMS ITHRS PYKXCA QEANHL'
% evolution=14 score=13 value='M EAILMS ITHRS LYKOCA QEANHL'
% evolution=15 score=12 value='M EHILMS ITHRS LYKOCA QEANHL'
% evolution=16 score=11 value='M EHILMS ITHRS LYKECA QEANHL'
% evolution=17 score=10 value='M EHILMS IT DS LYKECA QEANHL'
% evolution=18 score=9 value='M EHINMS IT DS LYKECA QEANHL'
% evolution=19 score=8 value='M WHINMS IT DS LYKECA QEANEL'
% evolution=20 score=7 value='MEWHINMS IT DS LYKECA QEANEL'
% evolution=21 score=7 value='MEHHINGS IT DS LYKECA QEANEL'
% evolution=22 score=6 value='MEHHINGS IT DS LYKE A QEANEL'
% evolution=23 score=6 value='MEHHINAS IT MS LYKE A QEAGEL'
% evolution=24 score=6 value='MEHHINAS IT KS LYKE A QEAGEL'
% evolution=25 score=6 value='MEHHINAS IT HS LYKE A QEAGEL'
% evolution=26 score=6 value='MEHHINAS IT HS L KE A QEAGEL'
% evolution=27 score=6 value='MEHHINAS IT FS L KE A QEAGEL'
% evolution=28 score=6 value='MEHHINAS IT FS L KE A QEAGEL'
% evolution=29 score=5 value='MEHHINAS IT FS LIKE A QEAGEL'
% evolution=30 score=5 value='MEHHINAS IT FS LIKE A QEAGEL'
% evolution=31 score=4 value='MEHHINAS IT FS LIKE A QEASEL'
% evolution=32 score=4 value='MEHHINAS IT FS LIKE A QEASEL'
% evolution=33 score=4 value='ME HINAS IT FS LIKE A QEASEL'
% evolution=34 score=4 value='ME HINAS IT FS LIKE A QEASEL'
% evolution=35 score=3 value='ME HINAS IT FS LIKE A WEASEL'
% evolution=36 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=37 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=38 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=39 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=40 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=41 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=42 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=43 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=44 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=45 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=46 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=47 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=48 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=49 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=50 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=51 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=52 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=53 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=54 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=55 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=56 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=57 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=58 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=59 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=60 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=61 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=62 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=63 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=64 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=65 score=0 value='METHINKS IT IS LIKE A WEASEL'
@prefix : <https://eyereasoner.github.io/ns#>.

"METHINKS IT IS LIKE A WEASEL" :solve true.
104 changes: 104 additions & 0 deletions reasoning/evolutionary-algorithm/evolutionary-algorithm-proof.n3
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
% evolution=1 score=26 value='H ENKLACOAMTGRHPENXRF FIDNHL'
% evolution=2 score=25 value='H EAKLACOAMTGRHPENXRF FIANHL'
% evolution=3 score=24 value='H EAKLASOAMTGRHPENXRF FIANHL'
% evolution=4 score=23 value='H EAILASOAFTGRHPENXRF FYANHL'
% evolution=5 score=22 value='H EAILASOAFTGRHPYNXRF FEANHL'
% evolution=6 score=21 value='H EAILAS AFTRRHPYNXRF FEANHL'
% evolution=7 score=20 value='H EAILAS ABTRR PYNXRF FEANHL'
% evolution=8 score=19 value='M EAILAS ABTRR PYNXRF QEANHL'
% evolution=9 score=18 value='M EAILAS WLTRS PYNXRF QEANHL'
% evolution=10 score=17 value='M EAILAS ILTRS PYNXRF QEANHL'
% evolution=11 score=16 value='M EAILAS ITTRS PYNXRF QEANHL'
% evolution=12 score=15 value='M EAILMS ITHRS PYKXRF QEANHL'
% evolution=13 score=14 value='M EAILMS ITHRS PYKXCA QEANHL'
% evolution=14 score=13 value='M EAILMS ITHRS LYKOCA QEANHL'
% evolution=15 score=12 value='M EHILMS ITHRS LYKOCA QEANHL'
% evolution=16 score=11 value='M EHILMS ITHRS LYKECA QEANHL'
% evolution=17 score=10 value='M EHILMS IT DS LYKECA QEANHL'
% evolution=18 score=9 value='M EHINMS IT DS LYKECA QEANHL'
% evolution=19 score=8 value='M WHINMS IT DS LYKECA QEANEL'
% evolution=20 score=7 value='MEWHINMS IT DS LYKECA QEANEL'
% evolution=21 score=7 value='MEHHINGS IT DS LYKECA QEANEL'
% evolution=22 score=6 value='MEHHINGS IT DS LYKE A QEANEL'
% evolution=23 score=6 value='MEHHINAS IT MS LYKE A QEAGEL'
% evolution=24 score=6 value='MEHHINAS IT KS LYKE A QEAGEL'
% evolution=25 score=6 value='MEHHINAS IT HS LYKE A QEAGEL'
% evolution=26 score=6 value='MEHHINAS IT HS L KE A QEAGEL'
% evolution=27 score=6 value='MEHHINAS IT FS L KE A QEAGEL'
% evolution=28 score=6 value='MEHHINAS IT FS L KE A QEAGEL'
% evolution=29 score=5 value='MEHHINAS IT FS LIKE A QEAGEL'
% evolution=30 score=5 value='MEHHINAS IT FS LIKE A QEAGEL'
% evolution=31 score=4 value='MEHHINAS IT FS LIKE A QEASEL'
% evolution=32 score=4 value='MEHHINAS IT FS LIKE A QEASEL'
% evolution=33 score=4 value='ME HINAS IT FS LIKE A QEASEL'
% evolution=34 score=4 value='ME HINAS IT FS LIKE A QEASEL'
% evolution=35 score=3 value='ME HINAS IT FS LIKE A WEASEL'
% evolution=36 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=37 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=38 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=39 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=40 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=41 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=42 score=3 value='ME HINAS IT BS LIKE A WEASEL'
% evolution=43 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=44 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=45 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=46 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=47 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=48 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=49 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=50 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=51 score=2 value='ME HINKS IT BS LIKE A WEASEL'
% evolution=52 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=53 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=54 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=55 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=56 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=57 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=58 score=2 value='ME HINKS IT AS LIKE A WEASEL'
% evolution=59 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=60 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=61 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=62 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=63 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=64 score=1 value='ME HINKS IT IS LIKE A WEASEL'
% evolution=65 score=0 value='METHINKS IT IS LIKE A WEASEL'
@prefix skolem: <https://eyereasoner.github.io/.well-known/genid/8df1590d-d760-44ac-bfc9-d45adcc43e1c#>.
@prefix r: <http://www.w3.org/2000/10/swap/reason#>.
@prefix : <https://eyereasoner.github.io/ns#>.
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix n3: <http://www.w3.org/2004/06/rei#>.
@prefix var: <http://www.w3.org/2000/10/swap/var#>.

skolem:proof a r:Proof, r:Conjunction;
r:component skolem:lemma1;
r:gives {
"METHINKS IT IS LIKE A WEASEL" :solve true.
}.

skolem:lemma1 a r:Inference;
r:gives {
"METHINKS IT IS LIKE A WEASEL" :solve true.
};
r:evidence (
[ a r:Fact; r:gives {("consult" "./evolutionary-algorithm.pl") log:herbrand true}]
[ a r:Fact; r:gives {("seed(12)") log:compoundTerm "seed(12)"}]
[ a r:Fact; r:gives {("set_random" "seed(12)") log:herbrand true}]
[ a r:Fact; r:gives {"METHINKS IT IS LIKE A WEASEL" :solve true}]
);
r:binding [ r:variable [ n3:uri "http://www.w3.org/2000/10/swap/var#x_0"]; r:boundTo "seed(12)"];
r:rule skolem:lemma2.

skolem:lemma2 a r:Extraction;
r:gives {
@forAll var:x_0. {
("consult" "./evolutionary-algorithm.pl") log:herbrand true.
("seed(12)") log:compoundTerm var:x_0.
("set_random" var:x_0) log:herbrand true.
"METHINKS IT IS LIKE A WEASEL" :solve true.
} => {
"METHINKS IT IS LIKE A WEASEL" :solve true.
}.
};
r:because [ a r:Parsing; r:source <https://eyereasoner.github.io/eye/reasoning/evolutionary-algorithm/evolutionary-algorithm-query.n3>].

10 changes: 10 additions & 0 deletions reasoning/evolutionary-algorithm/evolutionary-algorithm-query.n3
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix : <https://eyereasoner.github.io/ns#>.

{
("consult" "./evolutionary-algorithm.pl") log:herbrand true.
("set_random" ("seed(12)")!log:compoundTerm) log:herbrand true.
"METHINKS IT IS LIKE A WEASEL" :solve true.
} => {
"METHINKS IT IS LIKE A WEASEL" :solve true.
}.
60 changes: 60 additions & 0 deletions reasoning/evolutionary-algorithm/evolutionary-algorithm.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
% Original code from https://rosettacode.org/wiki/Evolutionary_algorithm#Prolog

'<https://eyereasoner.github.io/ns#solve>'(literal(TargetAtom, _), true) :-
atom_codes(TargetAtom, Target),
length(Target, Len),
random_text(Len, Start),
evolve(0, 5, Target, Start). % evolution 0 and 5% probability for a mutation

random_text(0, []). % generate some random text (fixed length)
random_text(Len, [H|T]) :-
succ(L, Len),
random_alpha(H),
random_text(L, T).

random_alpha(Ch) :- % generate a single random character
P is random(26),
( P = 0
-> Ch is 32
; Ch is P+64
).

evolve(Evolution, Probability, Target, mutation(Score, Value)) :-
atom_codes(Val, Value),
format("% evolution=~w score=~w value=~q~n", [Evolution, Score, Val]),
( Score = 0
-> true
; evolve(Evolution, Probability, Target, Value)
).
evolve(Evolution, Probability, Target, Start) :-
findall(mutation(Score, M), % generate 80 mutations, select the best
( between(1, 80, _),
mutate(Probability, Start, M),
score(M, Score, Target)
),
Mutations
),
sort(Mutations, [Best|_]),
succ(Evolution, Evo),
evolve(Evo, Probability, Target, Best).

mutate(_, [], []). % mutate(Probability, Input, Output)
mutate(Probability, [H|Txt], [H|Mut]) :-
R is random(100),
R > Probability,
!,
mutate(Probability, Txt, Mut).
mutate(Probability, [_|Txt], [M|Mut]) :-
random_alpha(M),
mutate(Probability, Txt, Mut).

score(Txt, Score, Target) :-
score(Target, Txt, 0, Score).

score([], [], Score, Score). % score a generated mutation (count diffs)
score([Ht|Tt], [Ht|Tp], C, Score) :-
!,
score(Tt, Tp, C, Score).
score([_|Tt], [_|Tp], C, Score) :-
succ(C, N),
score(Tt, Tp, N, Score).
3 changes: 3 additions & 0 deletions reasoning/evolutionary-algorithm/test
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
eye --quiet --wcache https://eyereasoner.github.io/eye/reasoning .. --nope --query https://eyereasoner.github.io/eye/reasoning/evolutionary-algorithm/evolutionary-algorithm-query.n3 --output evolutionary-algorithm-answer.n3
eye --quiet --wcache https://eyereasoner.github.io/eye/reasoning .. --query https://eyereasoner.github.io/eye/reasoning/evolutionary-algorithm/evolutionary-algorithm-query.n3 --output evolutionary-algorithm-proof.n3
14 changes: 7 additions & 7 deletions reasoning/path/path-answer.n3
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
@prefix : <urn:example:>.

:a :path :a.
:a :path :d.
:a :path :c.
:a :path :b.
:d :path :a.
:d :path :d.
:d :path :c.
:d :path :b.
:c :path :a.
:d :path :a.
:c :path :d.
:c :path :c.
:c :path :b.
:b :path :a.
:c :path :a.
:b :path :d.
:b :path :c.
:b :path :b.
:b :path :a.
:a :path :d.
:a :path :c.
:a :path :b.
:a :path :a.

0 comments on commit 8e92d13

Please sign in to comment.