A semantic approach to optimize linear datalog programs