use of nars.entity.Sentence in project opennars by opennars.
the class StructuralRules method transformProductImage.
/* -------------------- products and images transform -------------------- */
/**
* Equivalent transformation between products and images {<(*, S, M) --> P>,
* S@(*, S, M)} |- <S --> (/, P, _, M)> {<S --> (/, P, _, M)>, P@(/, P, _,
* M)} |- <(*, S, M) --> P> {<S --> (/, P, _, M)>, M@(/, P, _, M)} |- <M -->
* (/, P, S, _)>
*
* @param inh An Inheritance statement
* @param oldContent The whole content
* @param indices The indices of the TaskLink
* @param task The task
* @param memory Reference to the memory
*/
static void transformProductImage(Inheritance inh, CompoundTerm oldContent, short[] indices, DerivationContext nal) {
final Memory memory = nal.mem();
Term subject = inh.getSubject();
Term predicate = inh.getPredicate();
short index = indices[indices.length - 1];
short side = indices[indices.length - 2];
if (inh.equals(oldContent)) {
if (subject instanceof CompoundTerm) {
transformSubjectPI(index, (CompoundTerm) subject, predicate, nal);
}
if (predicate instanceof CompoundTerm) {
transformPredicatePI(index, subject, (CompoundTerm) predicate, nal);
}
return;
}
Term compT = inh.term[side];
if (!(compT instanceof CompoundTerm))
return;
CompoundTerm comp = (CompoundTerm) compT;
if (comp instanceof Product) {
if (side == 0) {
subject = comp.term[index];
predicate = ImageExt.make((Product) comp, inh.getPredicate(), index);
} else {
subject = ImageInt.make((Product) comp, inh.getSubject(), index);
predicate = comp.term[index];
}
} else if ((comp instanceof ImageExt) && (side == 1)) {
if (index == ((ImageExt) comp).relationIndex) {
subject = Product.make(comp, inh.getSubject(), index);
predicate = comp.term[index];
} else {
subject = comp.term[index];
predicate = ImageExt.make((ImageExt) comp, inh.getSubject(), index);
}
} else if ((comp instanceof ImageInt) && (side == 0)) {
if (index == ((ImageInt) comp).relationIndex) {
subject = comp.term[index];
predicate = Product.make(comp, inh.getPredicate(), index);
} else {
subject = ImageInt.make((ImageInt) comp, inh.getPredicate(), index);
predicate = comp.term[index];
}
} else {
return;
}
CompoundTerm newInh = null;
if (predicate.equals(Term.SEQ_SPATIAL)) {
newInh = (CompoundTerm) Conjunction.make(((CompoundTerm) subject).term, TemporalRules.ORDER_FORWARD, true);
} else if (predicate.equals(Term.SEQ_TEMPORAL)) {
newInh = (CompoundTerm) Conjunction.make(((CompoundTerm) subject).term, TemporalRules.ORDER_FORWARD, false);
} else {
newInh = Inheritance.make(subject, predicate);
}
if (newInh == null)
return;
CompoundTerm content = null;
if (indices.length == 2) {
content = newInh;
} else if ((oldContent instanceof Statement) && (indices[0] == 1)) {
content = Statement.make((Statement) oldContent, oldContent.term[0], newInh, oldContent.getTemporalOrder());
} else {
Term[] componentList;
Term condition = oldContent.term[0];
if (((oldContent instanceof Implication) || (oldContent instanceof Equivalence)) && (condition instanceof Conjunction)) {
componentList = ((CompoundTerm) condition).cloneTerms();
componentList[indices[1]] = newInh;
Term newCond = Terms.term((CompoundTerm) condition, componentList);
content = Statement.make((Statement) oldContent, newCond, ((Statement) oldContent).getPredicate(), oldContent.getTemporalOrder());
} else {
componentList = oldContent.cloneTerms();
componentList[indices[0]] = newInh;
if (oldContent instanceof Conjunction) {
Term newContent = Terms.term(oldContent, componentList);
if (!(newContent instanceof CompoundTerm))
return;
content = (CompoundTerm) newContent;
} else if ((oldContent instanceof Implication) || (oldContent instanceof Equivalence)) {
content = Statement.make((Statement) oldContent, componentList[0], componentList[1], oldContent.getTemporalOrder());
}
}
}
if (content == null)
return;
Sentence sentence = nal.getCurrentTask().sentence;
TruthValue truth = sentence.truth;
BudgetValue budget;
if (sentence.isQuestion() || sentence.isQuest()) {
budget = BudgetFunctions.compoundBackward(content, nal);
} else {
budget = BudgetFunctions.compoundForward(truth, content, nal);
}
nal.singlePremiseTask(content, truth, budget);
}
use of nars.entity.Sentence in project opennars by opennars.
the class StructuralRules method structuralDecompose2.
/**
* {<(S*T) --> (P*T)>, S@(S*T)} |- <S --> P>
*
* @param statement The premise
* @param nal Reference to the memory
*/
static void structuralDecompose2(Statement statement, int index, DerivationContext nal) {
Term subj = statement.getSubject();
Term pred = statement.getPredicate();
if (subj.getClass() != pred.getClass()) {
return;
}
if (!(subj instanceof Product) && !(subj instanceof SetExt) && !(subj instanceof SetInt)) {
// no abduction on other compounds for now, but may change in the future
return;
}
CompoundTerm sub = (CompoundTerm) subj;
CompoundTerm pre = (CompoundTerm) pred;
if (sub.size() != pre.size() || sub.size() <= index) {
return;
}
Term t1 = sub.term[index];
Term t2 = pre.term[index];
Statement content;
int order = statement.getTemporalOrder();
if (switchOrder(sub, (short) index)) {
content = Statement.make(statement, t2, t1, TemporalRules.reverseOrder(order));
} else {
content = Statement.make(statement, t1, t2, order);
}
if (content == null) {
return;
}
Task task = nal.getCurrentTask();
Sentence sentence = task.sentence;
TruthValue truth = sentence.truth;
BudgetValue budget;
if (sentence.isQuestion() || sentence.isQuest()) {
budget = BudgetFunctions.compoundBackward(content, nal);
} else {
budget = BudgetFunctions.compoundForward(truth, content, nal);
}
nal.singlePremiseTask(content, truth, budget);
}
use of nars.entity.Sentence in project opennars by opennars.
the class SyllogisticRules method elimiVarDep.
/**
* {(&&, <#x() --> S>, <#x() --> P>>, <M --> P>} |- <M --> S>
*
* @param compound The compound term to be decomposed
* @param component The part of the compound to be removed
* @param compoundTask Whether the compound comes from the task
* @param nal Reference to the memory
*/
static void elimiVarDep(CompoundTerm compound, Term component, boolean compoundTask, DerivationContext nal) {
Term comp = null;
for (Term t : compound) {
Term[] unify = new Term[] { t, component };
if (Variables.unify(Symbols.VAR_DEPENDENT, unify)) {
comp = t;
break;
}
if (Variables.unify(Symbols.VAR_QUERY, unify)) {
comp = t;
break;
}
}
if (comp == null) {
return;
}
Term content = reduceComponents(compound, comp, nal.mem());
if ((content == null) || ((content instanceof Statement) && ((Statement) content).invalid())) {
return;
}
Task task = nal.getCurrentTask();
Sentence sentence = task.sentence;
Sentence belief = nal.getCurrentBelief();
TruthValue v1 = sentence.truth;
TruthValue v2 = belief.truth;
TruthValue truth = null;
BudgetValue budget;
if (sentence.isQuestion() || sentence.isQuest()) {
budget = (compoundTask ? BudgetFunctions.backward(v2, nal) : BudgetFunctions.backwardWeak(v2, nal));
} else {
if (sentence.isGoal()) {
// to check
truth = (compoundTask ? TruthFunctions.desireDed(v1, v2) : TruthFunctions.desireInd(v1, v2));
} else {
truth = (compoundTask ? TruthFunctions.anonymousAnalogy(v1, v2) : TruthFunctions.anonymousAnalogy(v2, v1));
}
budget = BudgetFunctions.compoundForward(truth, content, nal);
}
nal.doublePremiseTask(content, truth, budget, false, false);
}
use of nars.entity.Sentence in project opennars by opennars.
the class Anticipate method deriveDidntHappen.
protected void deriveDidntHappen(Term aTerm, long expectedOccurenceTime) {
TruthValue truth = expiredTruth;
BudgetValue budget = expiredBudget;
Stamp stamp = new Stamp(nal.memory);
// stamp.setOccurrenceTime(nal.memory.time());
// it did not happen, so the time of when it did not
stamp.setOccurrenceTime(expectedOccurenceTime);
// happen is exactly the time it was expected
Sentence S = new Sentence(aTerm, Symbols.JUDGMENT_MARK, truth, stamp);
Task task = new Task(S, budget, true);
nal.derivedTask(task, false, true, false);
task.setElemOfSequenceBuffer(true);
nal.memory.emit(DISAPPOINT.class, task);
}
use of nars.entity.Sentence in project opennars by opennars.
the class NAR method askNow.
public NAR askNow(String termString, AnswerHandler answered) throws InvalidInputException {
Task t;
addInput(t = new Task(new Sentence(new Narsese(this).parseTerm(termString), Symbols.QUESTION_MARK, null, new Stamp(memory, Tense.Present)), new BudgetValue(Parameters.DEFAULT_QUESTION_PRIORITY, Parameters.DEFAULT_QUESTION_DURABILITY, 1), true));
if (answered != null) {
answered.start(t, this);
}
return this;
}
Aggregations