A semantic query optimization approach to optimize linear datalog programs