@@ -17,7 +17,6 @@ module Kore.Internal.SideCondition
1717    , top 
1818    , topTODO 
1919    , toPredicate 
20-     , isNormalized 
2120    , toRepresentation 
2221    ) where 
2322
@@ -37,10 +36,14 @@ import Kore.Internal.Condition
3736    ( Condition 
3837    )
3938import  qualified  Kore.Internal.Condition  as  Condition 
40- import  qualified  Kore.Internal.Conditional  as  Conditional 
39+ import  Kore.Internal.MultiAnd 
40+     ( MultiAnd 
41+     )
42+ import  qualified  Kore.Internal.MultiAnd  as  MultiAnd 
4143import  Kore.Internal.Predicate 
4244    ( Predicate 
4345    )
46+ import  qualified  Kore.Internal.Predicate  as  Predicate 
4447import  Kore.Internal.SideCondition.SideCondition  as  SideCondition 
4548import  Kore.Internal.Variable 
4649    ( InternalVariable 
@@ -65,10 +68,11 @@ other purposes, say, to remove redundant parts of the result predicate.
6568-} 
6669newtype  SideCondition  variable  = 
6770    SideCondition 
68-         {  assumedTrue  ::  Condition   variable 
71+         {  assumedTrue  ::  MultiAnd  ( Predicate   variable ) 
6972        } 
7073    deriving  (Eq , Ord , Show )
7174    deriving  (GHC.Generic )
75+     deriving  newtype  (Semigroup , Monoid )
7276    deriving  anyclass  (Hashable , NFData )
7377    deriving  anyclass  (SOP.Generic , SOP.HasDatatypeInfo )
7478    deriving  anyclass  (Debug )
@@ -91,97 +95,112 @@ instance TopBottom (SideCondition variable) where
9195      where 
9296        SideCondition  {assumedTrue} =  sideCondition
9397
94- instance  InternalVariable  variable 
95-     =>  HasFreeVariables  (SideCondition  variable ) variable 
98+ instance  Ord variable  =>  HasFreeVariables  (SideCondition  variable ) variable 
9699  where 
97-     freeVariables sideCondition@ (SideCondition  _) = 
98-         freeVariables assumedTrue
99-       where 
100-         SideCondition  {assumedTrue} =  sideCondition
100+     freeVariables (SideCondition  multiAnd) = 
101+         freeVariables multiAnd
101102
102103instance  InternalVariable  variable  =>  Unparse  (SideCondition  variable ) where 
103-     unparse sideCondition@ (SideCondition  _) = 
104-         unparse assumedTrue
105-       where 
106-         SideCondition  {assumedTrue} =  sideCondition
107- 
108-     unparse2 sideCondition@ (SideCondition  _) = 
109-         unparse2 assumedTrue
110-       where 
111-         SideCondition  {assumedTrue} =  sideCondition
104+     unparse =  unparse .  toPredicate
105+     unparse2 =  unparse2 .  toPredicate
112106
113- instance  From  (Condition  variable ) (SideCondition   variable )
107+ instance  From  (SideCondition  variable ) (MultiAnd  ( Predicate   variable ) )
114108  where 
115-       from =  SideCondition 
109+     from condition@ (SideCondition  _) =  assumedTrue condition
110+     {-# INLINE  from #-}
116111
117- instance  From  (SideCondition  variable ) (Condition  variable ) where 
118-     from =  assumedTrue
112+ instance  From  (MultiAnd  (Predicate  variable )) (SideCondition  variable )
113+   where 
114+     from =  SideCondition 
119115    {-# INLINE  from #-}
120116
121117instance 
122118    InternalVariable  variable 
123119    =>  From  (SideCondition  variable ) (Predicate  variable )
124120  where 
125-     from =  from  @ ( Condition   variable )  .  from  @ ( SideCondition   variable ) 
121+     from =  toPredicate 
126122    {-# INLINE  from #-}
127123
128124instance 
129125    InternalVariable  variable 
130126    =>  From  (Predicate  variable ) (SideCondition  variable )
131127  where 
132-     from =  from @ (Condition  variable ) .  from @ (Predicate  variable )
128+     from =  fromPredicate
129+     {-# INLINE  from #-}
130+ 
131+ instance  InternalVariable  variable  => 
132+     From  (Condition  variable ) (SideCondition  variable )
133+   where 
134+     from =  fromCondition
135+     {-# INLINE  from #-}
136+ 
137+ instance  InternalVariable  variable  => 
138+     From  (SideCondition  variable ) (Condition  variable )
139+   where 
140+     from =  Condition. fromPredicate .  toPredicate
133141    {-# INLINE  from #-}
134142
135- top  ::  InternalVariable   variable   =>   SideCondition  variable 
136- top =  fromCondition  Condition .
143+ top  ::  SideCondition  variable 
144+ top =  SideCondition   MultiAnd .
137145
138146--  |  A 'top' 'Condition' for refactoring which should eventually be removed. 
139- topTODO  ::  InternalVariable   variable   =>   SideCondition  variable 
147+ topTODO  ::  SideCondition  variable 
140148topTODO =  top
141149
142150andCondition
143151    ::  InternalVariable  variable 
144152    =>  SideCondition  variable 
145153    ->  Condition  variable 
146154    ->  SideCondition  variable 
147- andCondition SideCondition  { assumedTrue } newCondition = 
148-     SideCondition  merged
149-   where 
150-     merged =  assumedTrue `Condition.andCondition`  newCondition
155+ andCondition
156+     sideCondition
157+     (from @ (Condition  _ ) @ (SideCondition  _ ) ->  newSideCondition)
158+   = 
159+     newSideCondition <>  sideCondition
151160
152- assumeTrueCondition  ::  Condition  variable  ->  SideCondition  variable 
161+ assumeTrueCondition
162+     ::  InternalVariable  variable 
163+     =>  Condition  variable 
164+     ->  SideCondition  variable 
153165assumeTrueCondition =  fromCondition
154166
155167assumeTruePredicate
156-     ::  InternalVariable  variable  =>  Predicate  variable  ->  SideCondition  variable 
157- assumeTruePredicate predicate = 
158-     assumeTrueCondition (Condition. fromPredicate predicate)
168+     ::  InternalVariable  variable 
169+     =>  Predicate  variable 
170+     ->  SideCondition  variable 
171+ assumeTruePredicate =  fromPredicate
159172
160173toPredicate
161174    ::  InternalVariable  variable 
162175    =>  SideCondition  variable 
163176    ->  Predicate  variable 
164177toPredicate condition@ (SideCondition  _) = 
165-     Condition .
178+     MultiAnd .
166179  where 
167180    SideCondition  { assumedTrue } =  condition
168181
182+ fromPredicate
183+     ::  InternalVariable  variable 
184+     =>  Predicate  variable 
185+     ->  SideCondition  variable 
186+ fromPredicate =  SideCondition  .  MultiAnd. fromPredicate
187+ 
169188mapVariables
170189    ::  (InternalVariable  variable1 , InternalVariable  variable2 )
171190    =>  AdjSomeVariableName  (variable1  ->  variable2 )
172191    ->  SideCondition  variable1 
173192    ->  SideCondition  variable2 
174193mapVariables adj condition@ (SideCondition  _) = 
175-     fromCondition (Condition. mapVariables adj assumedTrue)
194+     MultiAnd. map  (Predicate. mapVariables adj) assumedTrue
195+     &  SideCondition 
176196  where 
177197    SideCondition  { assumedTrue } =  condition
178198
179- fromCondition  ::  Condition  variable  ->  SideCondition  variable 
180- fromCondition =  from
181- 
182- fromPredicate
183-     ::  InternalVariable  variable  =>  Predicate  variable  ->  SideCondition  variable 
184- fromPredicate =  fromCondition .  from
199+ fromCondition
200+     ::  InternalVariable  variable 
201+     =>  Condition  variable 
202+     ->  SideCondition  variable 
203+ fromCondition =  fromPredicate .  Condition. toPredicate
185204
186205toRepresentation
187206    ::  InternalVariable  variable 
@@ -190,6 +209,3 @@ toRepresentation
190209toRepresentation = 
191210    mkRepresentation
192211    .  mapVariables @ _  @ VariableName  (pure  toVariableName)
193- 
194- isNormalized  ::  forall  variable .  Ord variable  =>  SideCondition  variable  ->  Bool 
195- isNormalized =  Conditional. isNormalized .  from @ _  @ (Condition  variable )
0 commit comments