(= (persist $x) (let $_ (add-atom &self $x) $x))
((--> robin bird) (stv 1.0 0.9))
((--> penguin bird) (stv 1.0 0.9))
((--> eagle bird) (stv 1.0 0.9))
((--> bird animal) (stv 0.9 0.9))
((--> animal living) (stv 0.95 0.85))
((--> robin flyer) (stv 0.8 0.85))
((--> penguin swimmer) (stv 0.95 0.9))
((--> eagle predator) (stv 0.9 0.85))
((--> flyer airborne) (stv 0.85 0.8))
((--> swimmer aquatic) (stv 0.9 0.85))
!(map-atom (collapse (match &self ((--> $A $B) (stv $f1 $c1)) (match &self ((--> $B $C) (stv $f2 $c2)) (if (not (== $A $C)) (let* (($f (* $f1 $f2)) ($w (* $f (* $c1 $c2)))) (derived ded $A $C $f (/ $w (+ $w 1)))) nope)))) $x (if (== $x nope) (nop) (persist $x)))
!(map-atom (collapse (match &self ((--> $A $B) (stv $f1 $c1)) (match &self ((--> $C $B) (stv $f2 $c2)) (if (not (== $A $C)) (let $w (* $f1 (* $c1 $c2)) (derived abd $A $C $f2 (/ $w (+ $w 1)))) nope)))) $x (if (== $x nope) (nop) (persist $x)))
!(map-atom (collapse (match &self ((--> $A $B) (stv $f1 $c1)) (match &self ((--> $A $C) (stv $f2 $c2)) (if (not (== $B $C)) (let $w (* $f2 (* $c1 $c2)) (derived ind $B $C $f1 (/ $w (+ $w 1)))) nope)))) $x (if (== $x nope) (nop) (persist $x)))