@@ -458,7 +458,7 @@ bool bdd_enginet::property_supported(const exprt &expr)
458458 if (is_LTL (expr))
459459 {
460460 // We can map selected path properties to CTL.
461- return is_Gp (expr) || is_GFp (expr );
461+ return LTL_to_CTL (expr). has_value ( );
462462 }
463463
464464 if (is_SVA (expr))
@@ -514,23 +514,6 @@ void bdd_enginet::check_property(propertyt &property)
514514 message.status () << " Checking " << property.name << messaget::eom;
515515 property.status =propertyt::statust::UNKNOWN;
516516
517- // Our engine knows CTL only.
518- // We map selected path properties to CTL.
519-
520- if (is_Gp (property.normalized_expr ))
521- {
522- // G p --> AG p
523- auto p = to_G_expr (property.normalized_expr ).op ();
524- property.normalized_expr = AG_exprt{p};
525- }
526-
527- if (is_GFp (property.normalized_expr ))
528- {
529- // G F p --> AG AF p
530- auto p = to_F_expr (to_G_expr (property.normalized_expr ).op ()).op ();
531- property.normalized_expr = AG_exprt{AF_exprt{p}};
532- }
533-
534517 if (
535518 property.normalized_expr .id () == ID_sva_always &&
536519 to_sva_always_expr (property.normalized_expr ).op ().id () ==
@@ -555,6 +538,18 @@ void bdd_enginet::check_property(propertyt &property)
555538 property.normalized_expr = AG_exprt{p};
556539 }
557540
541+ // Our engine knows CTL only.
542+ // We map selected path properties to CTL.
543+ if (
544+ has_temporal_operator (property.normalized_expr ) &&
545+ is_LTL (property.normalized_expr ))
546+ {
547+ auto CTL_opt = LTL_to_CTL (property.normalized_expr );
548+ CHECK_RETURN (CTL_opt.has_value ());
549+ property.normalized_expr = CTL_opt.value ();
550+ CHECK_RETURN (is_CTL (property.normalized_expr ));
551+ }
552+
558553 if (is_AGp (property.normalized_expr ))
559554 {
560555 check_AGp (property);
0 commit comments