OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-ure / examples / ure / rules / crisp-modus-ponens-rule.scm

58 lines · scm ref:
; =============================================================================
; Crisp Modus Ponens Rule.
;
; A->B
; A
; |-
; B
;
; See examples/ure/README.md for more details.
; -----------------------------------------------------------------------------

(define crisp-modus-ponens-rule
    (BindLink
        (VariableSet
            (TypedVariable
                (VariableNode "$A")
                (TypeNode "PredicateNode"))
            (TypedVariable
                (VariableNode "$B")
                (TypeNode "PredicateNode")))
        (PresentLink
            (ImplicationLink
                (VariableNode "$A")
                (VariableNode "$B"))
            (VariableNode "$A"))
        (ExecutionOutputLink
            (GroundedSchemaNode "scm: crisp-modus-ponens")
            (ListLink
                (VariableNode "$B")
                (ImplicationLink
                    (VariableNode "$A")
                    (VariableNode "$B"))
                (VariableNode "$A")
                ))))

; -----------------------------------------------------------------------------
; Crisp Modus Ponens Formula
;
; If both confidence and strength of A->B and A are above 0.5 then set
; the TV of B to (stv 1 1)
; -----------------------------------------------------------------------------

(define (crisp-modus-ponens B AB A)
    (let
        ((sA (cog-mean A))
         (cA (cog-confidence A))
         (sAB (cog-mean AB))
         (cAB (cog-confidence AB)))
      (if (and (>= sA 0.5) (>= cA 0.5) (>= sAB 0.5) (>= cAB 0.5))
          (cog-set-tv! B (stv 1 1)))))

; Associate a name to the rule
(define crisp-modus-ponens-rule-name
  (DefinedSchemaNode "crisp-modus-ponens-rule"))
(DefineLink
  crisp-modus-ponens-rule-name
  crisp-modus-ponens-rule)