(deftheory web-plan "plan web service calls" (<= (True (Know (?part-name2 ?value2)) (do (call-web-service ?a ?part-name1 ?value1 ?part-name2) ?s)) (Web-Service ?a) (Output ?a ?part-name2 ?value2) (Input ?a ?part-name1) (True (Know (?part-name1 ?value1)) ?s)) (True (Know (circumference-circle 8)) s0) (Web-Service Circum-Rad) (Input Circum-Rad circumference-circle) (Output Circum-Rad area-circle RETURN-Circum-Rad) (<= (True (Know (?part-name2 Return-Compute)) (do (call-web-service Compute function ?function ?part-name1 ?value1 ?part-name2) ?s)) (Function ?function ?part-name1 ?part-name2 ) (True (Know (?part-name1 ?value1)) ?s)) (<= (Function ?f ?y ?x) (Yields ?f ?y ?x)) (Yields (* (PI (sq radius-circle))) radius-circle area-circle ) ;; yields area given radius (<= (Function ?g ?x ?y) ;; ?g yields radius given area (Yields ?f ?y ?x) ;; (Yields pi*r2 radius-circle area-circle) (Inv-Func ?f ?y ?g ?x )) ;; ?g = Inverse pi*r2 radius-circle ?g area-circle (<= (Inv-Func (?f (?const (?h ?h-args))) ?x (?i (?g ?g-args)) ?y) ;; ?f=* ?const=PI ?h=SQ ?h-args=radius ?x=radius ?y=area (Inv-Func ?f (?const (?h ?h-args)) (?h ?h-args) ?g ?g-args ?y) ;;?f=* ?g=/ ?g-args=(area PI) (Inv-Func ?h ?h-args ?i (?g ?g-args)) ;; ?i=root (/ (area PI)) ) ;; If ?h-args is a const plus args, then recurses. If ?h-args is only a const, then stops (Inv-Func + (?const ?x) ?x - (?y ?const) ?y) (Inv-Func * (?const ?x) ?x / (?y ?const) ?y) (Inv-Func sq ?x root ?y) ) ;; CL-USER(21): (findx '?i '(Inv-Func SQ radius-circle ?i (/ (area PI)) ) 'web-plan) ;; ROOT ;; CL-USER(23): (findx '?g-args '(Inv-Func * (PI (SQ radius-circle)) (SQ radius-circle) ?g ?g-args area-circle) 'web-plan) ;; / ;; CL-USER(24): (findx '?g-args '(Inv-Func * (PI (SQ radius-circle)) (SQ radius-circle) ?g ?g-args area-circle) 'web-plan) ;; (AREA-CIRCLE PI) ;; CL-USER(25): (findx '?i '(Inv-Func (* (PI (SQ radius-circle))) ?radius-circle (?i (?g ?g-args)) area-circle) 'web-plan) ;; ROOT ;; CL-USER(26): (findx '?g '(Inv-Func (* (PI (SQ radius-circle))) ?radius-circle ?g area-circle) 'web-plan) ;; (ROOT (/ (AREA-CIRCLE PI))) ;; ;; (findx '?x '(True (Know (radius-circle ?y)) ?x) 'web-plan) ;; ;; (DO (CALL-WEB-SERVICE ;; COMPUTE ;; FUNCTION ;; (ROOT (/ (AREA-CIRCLE PI))) ;; AREA-CIRCLE ;; RETURN-CIRCUM-RAD ;; RADIUS-CIRCLE) ;; (DO ;; (CALL-WEB-SERVICE CIRCUM-RAD CIRCUMFERENCE-CIRCLE 8 AREA-CIRCLE) ;; S0) )