@@ -635,14 +635,55 @@ static inline sva_s_until_with_exprt &to_sva_s_until_with_expr(exprt &expr)
635
635
return static_cast <sva_s_until_with_exprt &>(expr);
636
636
}
637
637
638
- class sva_overlapped_implication_exprt : public binary_predicate_exprt
638
+ // / base class for |->, |=>, #-#, #=#
639
+ class sva_implication_base_exprt : public binary_predicate_exprt
639
640
{
640
641
public:
641
- explicit sva_overlapped_implication_exprt (exprt op0, exprt op1)
642
+ explicit sva_implication_base_exprt (
643
+ exprt __antecedent,
644
+ irep_idt __id,
645
+ exprt __consequent)
642
646
: binary_predicate_exprt(
643
- std::move (op0),
647
+ std::move (__antecedent),
648
+ __id,
649
+ std::move(__consequent))
650
+ {
651
+ }
652
+
653
+ // a sequence
654
+ const exprt &antecedent () const
655
+ {
656
+ return lhs ();
657
+ }
658
+
659
+ exprt &antecedent ()
660
+ {
661
+ return lhs ();
662
+ }
663
+
664
+ // a property
665
+ const exprt &consequent () const
666
+ {
667
+ return rhs ();
668
+ }
669
+
670
+ exprt &consequent ()
671
+ {
672
+ return rhs ();
673
+ }
674
+ };
675
+
676
+ // / |->
677
+ class sva_overlapped_implication_exprt : public sva_implication_base_exprt
678
+ {
679
+ public:
680
+ explicit sva_overlapped_implication_exprt (
681
+ exprt __antecedent,
682
+ exprt __consequent)
683
+ : sva_implication_base_exprt(
684
+ std::move (__antecedent),
644
685
ID_sva_overlapped_implication,
645
- std::move(op1 ))
686
+ std::move(__consequent ))
646
687
{
647
688
}
648
689
};
@@ -663,14 +704,17 @@ to_sva_overlapped_implication_expr(exprt &expr)
663
704
return static_cast <sva_overlapped_implication_exprt &>(expr);
664
705
}
665
706
666
- class sva_non_overlapped_implication_exprt : public binary_predicate_exprt
707
+ // / |=>
708
+ class sva_non_overlapped_implication_exprt : public sva_implication_base_exprt
667
709
{
668
710
public:
669
- explicit sva_non_overlapped_implication_exprt (exprt op0, exprt op1)
670
- : binary_predicate_exprt(
671
- std::move (op0),
711
+ explicit sva_non_overlapped_implication_exprt (
712
+ exprt __antecedent,
713
+ exprt __consequent)
714
+ : sva_implication_base_exprt(
715
+ std::move (__antecedent),
672
716
ID_sva_non_overlapped_implication,
673
- std::move(op1 ))
717
+ std::move(__consequent ))
674
718
{
675
719
}
676
720
};
@@ -834,27 +878,19 @@ static inline sva_or_exprt &to_sva_or_expr(exprt &expr)
834
878
return static_cast <sva_or_exprt &>(expr);
835
879
}
836
880
837
- class sva_followed_by_exprt : public binary_predicate_exprt
881
+ // #-#, #=#
882
+ class sva_followed_by_exprt : public sva_implication_base_exprt
838
883
{
839
884
public:
840
- const exprt &sequence () const
841
- {
842
- return op0 ();
843
- }
844
-
845
- exprt &sequence ()
846
- {
847
- return op0 ();
848
- }
849
-
850
- const exprt &property () const
851
- {
852
- return op1 ();
853
- }
854
-
855
- exprt &property ()
885
+ explicit sva_followed_by_exprt (
886
+ exprt __antecedent,
887
+ irep_idt __id,
888
+ exprt __consequent)
889
+ : sva_implication_base_exprt(
890
+ std::move (__antecedent),
891
+ __id,
892
+ std::move(__consequent))
856
893
{
857
- return op1 ();
858
894
}
859
895
};
860
896
0 commit comments