Split solver implementation into ASL-dependent and ASL-independent parts.
Decouple Solver from ASL.