Meta-Programming in Logic