(ns nal.deriver.truth (:require [narjure.defaults :refer [horizon] :as d])) | |
https://github.com/opennars/opennars/blob/6611ee7f0b1428676b01ae4a382241a77ae3a346/nars_logic/src/main/java/nars/nal/meta/BeliefFunction.java https://github.com/opennars/opennars/blob/7b27dacec4cdbe77ca03d89296323d49875ac213/nars_logic/src/main/java/nars/truth/TruthFunctions.java | |
(defn t-and (^double [^double a ^double b] (* a b)) (^double [^double a ^double b ^double c] (* a b c)) (^double [^double a ^double b ^double c ^double d] (* a b c d))) | |
(defn t-or (^double [^double a ^double b] (- 1 (* (- 1 a) (- 1 b))))) | |
(defn w2c ^double [^double w] (let [^double h horizon] (/ w (+ w h)))) | |
(defn c2w ^double [^double c] (let [^double h horizon] (/ (* h c) (- 1 c)))) | |
(defn conversion [_ p1] (when-let [[f c] p1] [1 (w2c (and f c))])) | |
(defn negation [[^double f ^double c] _] [(- 1 f) c]) | |
(defn contraposition [[^double f ^double c]] [0 (w2c (and (- 1 f) c))]) | |
(defn revision [[^double f1 ^double c1] [^double f2 ^double c2]] (let [w1 (c2w c1) w2 (c2w c2) w (+ w1 w2)] [(/ (+ (* w1 f1) (* w2 f2)) w) (w2c w)])) | |
(defn deduction [[^double f1 ^double c1] [^double f2 ^double c2]] [(t-and f1 f2) (t-and c1 c2)]) (defn a-deduction [[^double f1 ^double c1] c2] [f1 (t-and f1 c1 c2)]) | |
(defn analogy [[^double f1 ^double c1] [^double f2 ^double c2]] [(t-and f1 f2) (t-and c1 c2 f2)]) | |
(defn resemblance [[^double f1 ^double c1] [^double f2 ^double c2]] [(t-and f1 f2) (t-and c1 c2 (t-or f1 f2))]) | |
(defn abduction [[^double f1 ^double c1] [^double f2 ^double c2]] [f1 (w2c (t-and f2 c1 c2))]) | |
(defn induction [p1 p2] (abduction p2 p1)) | |
(defn exemplification [[^double f1 ^double c1] [^double f2 ^double c2]] [1 (w2c (t-and f1 f2 c1 c2))]) | |
(defn comparison [[^double f1 ^double c1] [^double f2 ^double c2]] (let [f0 (t-or f1 f2) f (if (zero? f0) 0 (/ (t-and f1 f2) f0)) c (w2c (t-and f0 c1 c2))] [f c])) | |
(defn union [[^double f1 ^double c1] [^double f2 ^double c2]] [(t-or f1 f2) (t-and c1 c2)]) | |
(defn intersection [[^double f1 ^double c1] [^double f2 ^double c2]] [(t-and f1 f2) (t-and c1 c2)]) | |
(defn anonymous-analogy [[^double f1 ^double c1] p2] (analogy p2 [f1 (w2c c1)])) | |
(defn decompose-pnn [[^double f1 ^double c1] p2] (when p2 (let [[^double f2 ^double c2] p2 fn (t-and f1 (- 1 f2))] [(- 1 fn) (t-and fn c1 c2)]))) | |
(defn decompose-npp [[^double f1 ^double c1] p2] (when p2 (let [[^double f2 ^double c2] p2 f (t-and (- 1 f1) f2)] [f (t-and f c1 c2)]))) | |
(defn decompose-pnp [[^double f1 ^double c1] p2] (when p2 (let [[^double f2 ^double c2] p2 f (t-and f1 (- 1 f2))] [f (t-and f c1 c2)]))) | |
(defn decompose-ppp [p1 p2] (decompose-npp (negation p1 p2) p2)) | |
(defn decompose-nnn [[^double f1 ^double c1] p2] (when p2 (let [[^double f2 ^double c2] p2 fn (t-and (- 1 f1) (- 1 f2))] [(- 1 fn) (t-and fn c1 c2)]))) | |
(defn difference [[^double f1 ^double c1] [^double f2 ^double c2]] [(t-and f1 (- 1 f2)) (t-and c1 c2)]) | |
(defn structual-intersection [_ p2] (deduction p2 [1 d/belief-confidence])) | |
(defn structual-deduction [p1 _] (deduction p1 [1 d/belief-confidence])) | |
(defn structual-abduction [p1 _] (abduction p1 [1 d/belief-confidence])) | |
(defn reduce-conjunction [p1 p2] (-> (negation p1 p2) (intersection p2) (a-deduction 1) (negation p2))) | |
(defn t-identity [p1 _] p1) | |
(defn belief-identity [p1 p2] (when p2 p1)) | |
(defn belief-structural-deduction [_ p2] (when p2 (deduction p2 [1 d/belief-confidence]))) | |
(defn belief-structural-difference [_ p2] (when p2 (let [[^double f ^double c] (deduction p2 [1 d/belief-confidence])] [(- 1 f) c]))) | |
(defn belief-negation [_ p2] (when p2 (negation p2 nil))) | |
(defn desire-weak [[f1 c1] [f2 c2]] [(t-and f1 f2) (t-and c1 c2 f2 (w2c 1.0))]) | |
(defn desire-induction [[f1 c1] [f2 c2]] [f1 (w2c (t-and f2 c1 c2))]) | |
(defn desire-structural-strong [t _] (analogy t [1.0 d/belief-confidence])) | |
(def tvtypes {:t/structural-deduction structual-abduction :t/struct-int structual-intersection :t/struct-abd structual-abduction :t/identity t-identity :t/conversion conversion :t/contraposition contraposition :t/negation negation :t/comparison comparison :t/intersection intersection :t/union union :t/difference difference :t/decompose-ppp decompose-ppp :t/decompose-pnn decompose-pnn :t/decompose-nnn decompose-nnn :t/decompose-npp decompose-npp :t/decompose-pnp decompose-pnp :t/induction induction :t/abduction abduction :t/deduction deduction :t/exemplification exemplification :t/analogy analogy :t/resemblance resemblance :t/anonymous-analogy anonymous-analogy :t/belief-identity belief-identity :t/belief-structural-deduction belief-structural-deduction :t/belief-structural-difference belief-structural-difference :t/belief-negation belief-negation :t/reduce-conjunction reduce-conjunction}) | |
(def dvtypes {:d/strong analogy :d/deduction intersection :d/weak desire-weak :d/induction desire-induction :d/identity identity :d/negation negation :d/structural-strong desire-structural-strong}) | |