Linear programming duality