abstracted a*