@@ -535,18 +535,28 @@ def encode_reach(self, cfg1, right, mutant=None,
535
535
]
536
536
return rules
537
537
538
- def encode_nonreach (self , cfg1 , right , mutant = None , bounded = "auto" ):
538
+ def encode_nonreach (self , left , right , mutant = None , bounded = "auto" ):
539
539
self .load_template_eval ()
540
540
Z = self .fresh_atom ("nonreach" )
541
- X = clingo_encode (cfg1 .name )
541
+ X = clingo_encode (left .name )
542
542
Y = clingo_encode (right .name )
543
543
if isinstance (right , ConfigurationVar ):
544
544
pred = "cfg"
545
545
elif isinstance (right , ObservationVar ):
546
546
pred = "obs"
547
547
else :
548
548
raise NotImplementedError
549
- rules = [
549
+
550
+ rules = []
551
+
552
+ if isinstance (left , ObservationVar ):
553
+ satcfg = self .saturating_configuration (free = f"not obs({ X } ,N,_)" ,
554
+ fixed = f"obs({ X } ,N,V)" )
555
+ condition = self .make_saturation_condition (satcfg )
556
+ rules .append (f"{ condition } :- nr_ok({ Z } )" )
557
+ X = satcfg
558
+
559
+ rules += [
550
560
f"mcfg(({ Z } ,1..K),N,V) :- reach_steps({ Z } ,K), cfg({ X } ,N,V)" ,
551
561
f"ext(({ Z } ,I),N,V) :- eval(({ Z } ,I),N,V), not locked(({ Z } ,I),N)" ,
552
562
0 commit comments