@@ -836,17 +836,7 @@ mergeSolverStage (SolverStage x ps spec relevant) plan =
836836 normalizeSolverStage $ SolverStage
837837 y
838838 (ps ++ ps')
839- ( addToErrorSpec
840- ( NE. fromList
841- ( [ " Solving var " ++ show x ++ " fails."
842- , " Merging the Specs"
843- , " 1. " ++ show spec
844- , " 2. " ++ show spec'
845- ]
846- )
847- )
848- (spec <> spec')
849- )
839+ (spec <> spec')
850840 (relevant <> relevant')
851841 Nothing -> stage
852842 | stage@ (SolverStage y ps' spec' relevant') <- plan
@@ -900,27 +890,21 @@ backPropagation relevant (SolverPlan initplan) = SolverPlan (go [] (reverse init
900890 go acc [] = acc
901891 go acc (s@ (SolverStage (x :: Var a ) ps spec _) : plan) = go (s : acc) plan'
902892 where
903- newStages = concatMap ( newStage spec) ps
893+ newStages = concatMap newStage ps
904894 plan' = foldr mergeSolverStage plan newStages
895+
905896 -- Note use of the Term Pattern Equal
906- newStage specl (Assert (Equal (V x') t)) =
907- termVarEqCases specl x' t
908- newStage specr (Assert (Equal t (V x'))) =
909- termVarEqCases specr x' t
910- newStage _ _ = []
911-
912- termVarEqCases :: HasSpec b => Specification a -> Var b -> Term b -> [SolverStage ]
913- termVarEqCases specx x' t
914- | Set. singleton (Name x) == freeVarSet t
915- , Result ctx <- toCtx x t =
916- [SolverStage x' [] (forwardPropagateSpec specx ctx) (Set. insert (Name x) relevant)]
917- termVarEqCases specx x' t
918- | Just Refl <- eqVar x x'
919- , [Name y] <- Set. toList $ freeVarSet t
920- , Result ctx <- toCtx y t =
921- [SolverStage y [] (propagateSpec specx ctx)
922- (Set. insert (Name x') relevant)]
923- termVarEqCases _ _ _ = []
897+ newStage (Assert (Equal tl tr))
898+ | [Name xl] <- Set. toList $ freeVarSet tl
899+ , [Name xr] <- Set. toList $ freeVarSet tr
900+ , Name x `elem` [Name xl, Name xr]
901+ , Result ctxL <- toCtx xl tl
902+ , Result ctxR <- toCtx xr tr
903+ = case (eqVar x xl, eqVar x xr) of
904+ (Just Refl , _) -> [SolverStage xr [] (propagateSpec (forwardPropagateSpec spec ctxL) ctxR) (Set. insert (Name x) relevant)]
905+ (_, Just Refl ) -> [SolverStage xl [] (propagateSpec (forwardPropagateSpec spec ctxR) ctxL) (Set. insert (Name x) relevant)]
906+ _ -> error " The impossible happened"
907+ newStage _ = []
924908
925909-- | Function symbols for `(==.)`
926910data EqW :: [Type ] -> Type -> Type where
0 commit comments