Skip to content

Commit 2dcd58a

Browse files
committed
support higher-order syllogism
1 parent b49d1d4 commit 2dcd58a

2 files changed

Lines changed: 20 additions & 15 deletions

File tree

NALInferenceRules.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def nal_conversion(j: NALGrammar.Sentence):
243243
NALGrammar.assert_sentence(j)
244244
# Statement
245245
result_statement = NALGrammar.Statement(j.statement.get_predicate_term(),
246-
j.statement.get_subject_term(), NALSyntax.Copula.Inheritance)
246+
j.statement.get_subject_term(), j.statement.copula)
247247

248248
if j.punctuation == NALSyntax.Punctuation.Judgment:
249249
# compute values of combined evidence
@@ -298,9 +298,10 @@ def nal_deduction(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence):
298298
"""
299299
NALGrammar.assert_sentence(j1)
300300
NALGrammar.assert_sentence(j2)
301+
301302
# Statement
302303
result_statement = NALGrammar.Statement(j2.statement.get_subject_term(),
303-
j1.statement.get_predicate_term(), NALSyntax.Copula.Inheritance)
304+
j1.statement.get_predicate_term(), j1.statement.copula)
304305

305306

306307
if j1.punctuation == NALSyntax.Punctuation.Judgment and j2.punctuation == NALSyntax.Punctuation.Judgment:
@@ -354,19 +355,19 @@ def nal_analogy(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence):
354355
if j1.statement.get_subject_term() == j2.statement.get_predicate_term():
355356
#j1=M-->P, j2=S<->M
356357
result_statement = NALGrammar.Statement(j2.statement.get_subject_term(), j1.statement.get_predicate_term(),
357-
NALSyntax.Copula.Inheritance) # S-->P
358+
j1.statement.copula) # S-->P
358359
elif j1.statement.get_subject_term() == j2.statement.get_subject_term():
359360
# j1=M-->P, j2=M<->S
360361
result_statement = NALGrammar.Statement(j2.statement.get_predicate_term(), j1.statement.get_predicate_term(),
361-
NALSyntax.Copula.Inheritance) # S-->P
362+
j1.statement.copula) # S-->P
362363
elif j1.statement.get_predicate_term() == j2.statement.get_predicate_term():
363364
#j1=P-->M, j2=S<->M
364365
result_statement = NALGrammar.Statement(j1.statement.get_subject_term(), j2.statement.get_subject_term(),
365-
NALSyntax.Copula.Inheritance) # P-->S
366+
j1.statement.copula) # P-->S
366367
elif j1.statement.get_predicate_term() == j2.statement.get_subject_term():
367368
# j1=P-->M, j2=M<->S
368369
result_statement = NALGrammar.Statement(j1.statement.get_subject_term(), j2.statement.get_predicate_term(),
369-
NALSyntax.Copula.Inheritance) # P-->S
370+
j1.statement.copula) # P-->S
370371
else:
371372
assert(False), "Error: Invalid inputs to nal_analogy: " + j1.get_formatted_string() + " and " + j2.get_formatted_string()
372373

@@ -418,19 +419,19 @@ def nal_resemblance(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence):
418419
if j1.statement.get_subject_term() == j2.statement.get_predicate_term():
419420
# j1=M<->P, j2=S<->M
420421
result_statement = NALGrammar.Statement(j2.statement.get_subject_term(), j1.statement.get_predicate_term(),
421-
NALSyntax.Copula.Inheritance) # S<->P
422+
j1.statement.copula) # S<->P
422423
elif j1.statement.get_subject_term() == j2.statement.get_subject_term():
423424
# j1=M<->P, j2=M<->S
424425
result_statement = NALGrammar.Statement(j2.statement.get_predicate_term(), j1.statement.get_predicate_term(),
425-
NALSyntax.Copula.Inheritance) # S<->P
426+
j1.statement.copula) # S<->P
426427
elif j1.statement.get_predicate_term() == j2.statement.get_predicate_term():
427428
# j1=P<->M, j2=S<->M
428429
result_statement = NALGrammar.Statement(j2.statement.get_subject_term(), j1.statement.get_subject_term(),
429-
NALSyntax.Copula.Inheritance) # S<->P
430+
j1.statement.copula) # S<->P
430431
elif j1.statement.get_predicate_term() == j2.statement.get_subject_term():
431432
# j1=P<->M, j2=M<->S
432433
result_statement = NALGrammar.Statement(j2.statement.get_predicate_term(), j2.statement.get_subject_term(),
433-
NALSyntax.Copula.Inheritance) # S<->P
434+
j1.statement.copula) # S<->P
434435
else:
435436
assert (
436437
False), "Error: Invalid inputs to nal_resemblance: " + j1.get_formatted_string() + " and " + j2.get_formatted_string()
@@ -485,7 +486,7 @@ def nal_abduction(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence):
485486
NALGrammar.assert_sentence(j2)
486487

487488
# Statement
488-
result_statement = NALGrammar.Statement(j2.statement.get_subject_term(), j1.statement.get_subject_term(), NALSyntax.Copula.Inheritance)
489+
result_statement = NALGrammar.Statement(j2.statement.get_subject_term(), j1.statement.get_subject_term(), j1.statement.copula)
489490

490491
if j1.punctuation == NALSyntax.Punctuation.Judgment and j2.punctuation == NALSyntax.Punctuation.Judgment:
491492
# Get Truth Value
@@ -531,7 +532,7 @@ def nal_induction(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence):
531532
NALGrammar.assert_sentence(j2)
532533
# Statement
533534
result_statement = NALGrammar.Statement(j2.statement.get_predicate_term(),
534-
j1.statement.get_predicate_term(), NALSyntax.Copula.Inheritance)
535+
j1.statement.get_predicate_term(), j1.statement.copula)
535536

536537
if j1.punctuation == NALSyntax.Punctuation.Judgment and j2.punctuation == NALSyntax.Punctuation.Judgment:
537538
# Get Truth Value
@@ -577,7 +578,7 @@ def nal_exemplification(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence):
577578
NALGrammar.assert_sentence(j2)
578579
# Statement
579580
result_statement = NALGrammar.Statement(j2.statement.get_predicate_term(),
580-
j1.statement.get_subject_term(), NALSyntax.Copula.Inheritance)
581+
j1.statement.get_subject_term(), j1.statement.copula)
581582

582583
if j1.punctuation == NALSyntax.Punctuation.Judgment and j2.punctuation == NALSyntax.Punctuation.Judgment:
583584
# Get Truth Value

NARSInferenceEngine.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,12 @@ def do_inference(j1: NALGrammar.Sentence, j2: NALGrammar.Sentence) -> [NARSDataS
5454
(NALSyntax.Copula.is_symmetric(j1_copula) and not NALSyntax.Copula.is_symmetric(j2_copula))) and \
5555
(j1_subject_term == j2_subject_term and j1_predicate_term == j2_predicate_term)
5656

57-
if tautology:
58-
return derived_tasks # don't do inference, it will result in tautology
57+
# check if copula are the same
58+
different_copulas = (j1_copula != j2_copula)
59+
60+
if tautology or different_copulas:
61+
# can't do inference
62+
return derived_tasks
5963

6064
is_question = isinstance(j1, NALGrammar.Question) or isinstance(j2, NALGrammar.Question)
6165

0 commit comments

Comments
 (0)