(define (understand? concept)
;; understanding is true for cached concepts
;; understanding is true for non-simple concepts which
;; can be broken down and
;; understood in peices
;; understanding is attained by producing an explanation
(or (cached? concept)
(and (not (simple? concept))
(all understand? (deconstruct concept))
(understand? concept))
(let ((explanation (explain concept)))
(when explanation
(cache concept explanation)))))
; some procedures omitted
(define (explain concept)
;; to explain a concept requires programming it to the previous AI
;; programming is a subset of theorem proving
(theorem-prover (make-programming-problem (previous-ai) concept)
(lambda (explanation _ _ _ _) ;; success
explanation)
(lambda () ;; failure
#f)))