             (weaverworld ?world)
             (equals ?advices (-> ?world .getCrosscuttingMembersSet .getShadowMungers))
             (contains ?advices  ?advice))]))
+
+;TODO: any corner cases?
+(defn
+  advice-method|ajsynthetic
+  "Relation between advice and the AJ synthetic method it is compiled to."
+  [?advice ?method]
+  (all 
+    (advice ?advice)
+    (equals ?method (.getSignature ?advice))))
+
+
+;note: no need to include in annotation/1, as already included in method-annotation/2
+(defn
+  advice-annotation
+  "Relation between advice and one of its annotations."
+  [?advice ?annotation]
+  (fresh [?method]
+         (advice-method|ajsynthetic ?advice ?method)
+         (method-annotation ?method ?annotation)))
 
 
 ;(defn


(defn
  method
  "Relation of method members known to the weaver."
  [?method]
  (fresh [?type]
         (type-method ?type ?method)))



(clojure.core/declare type-pointcutdefinition)



(defn-
  annotated-annotations
  [?target ?annos]
  (all
    (v+ ?target)
    (equals ?annos (.getAnnotations ?target))))


(clojure.core/declare annotation)

(defn-
  annotated-annotation
  [?target ?anno]
  (fresh [?annos]
         (annotated-annotations ?target ?annos)
         (contains ?annos ?anno)
         (annotation ?anno) ;to ensure only those of which the type is exposed to the weaver are returned
         ))

(defn
  type-annotation
  "Relation between a type declarations and its annotation instances."
  [?type ?annotation]
  (all
    (type|reference ?type)
    (annotated-annotation ?type ?annotation)))

(defn
  annotation
