@@ -369,4 +369,80 @@ inline smv_identifier_exprt &to_smv_identifier_expr(exprt &expr)
369369 return static_cast <smv_identifier_exprt &>(expr);
370370}
371371
372+ // / set constructor expression
373+ class smv_set_exprt : public multi_ary_exprt
374+ {
375+ public:
376+ explicit smv_set_exprt (exprt::operandst __elements)
377+ : multi_ary_exprt{ID_smv_set, std::move (__elements), typet{ID_smv_set}}
378+ {
379+ }
380+ };
381+
382+ inline const smv_set_exprt &to_smv_set_expr (const exprt &expr)
383+ {
384+ PRECONDITION (expr.id () == ID_smv_set);
385+ smv_set_exprt::check (expr, validation_modet::INVARIANT);
386+ return static_cast <const smv_set_exprt &>(expr);
387+ }
388+
389+ inline smv_set_exprt &to_smv_set_expr (exprt &expr)
390+ {
391+ PRECONDITION (expr.id () == ID_smv_set);
392+ smv_set_exprt::check (expr, validation_modet::INVARIANT);
393+ return static_cast <smv_set_exprt &>(expr);
394+ }
395+
396+ // / set union expression
397+ class smv_union_exprt : public binary_exprt
398+ {
399+ public:
400+ smv_union_exprt (exprt lhs, exprt rhs, typet type)
401+ : binary_exprt{
402+ std::move (lhs),
403+ ID_smv_union,
404+ std::move (rhs),
405+ std::move (type)}
406+ {
407+ }
408+ };
409+
410+ inline const smv_union_exprt &to_smv_union_expr (const exprt &expr)
411+ {
412+ PRECONDITION (expr.id () == ID_smv_union);
413+ smv_union_exprt::check (expr);
414+ return static_cast <const smv_union_exprt &>(expr);
415+ }
416+
417+ inline smv_union_exprt &to_smv_union_expr (exprt &expr)
418+ {
419+ PRECONDITION (expr.id () == ID_smv_union);
420+ smv_union_exprt::check (expr);
421+ return static_cast <smv_union_exprt &>(expr);
422+ }
423+
424+ // / set inclusion expression
425+ class smv_setin_exprt : public binary_predicate_exprt
426+ {
427+ public:
428+ smv_setin_exprt (exprt lhs, exprt rhs)
429+ : binary_predicate_exprt{std::move (lhs), ID_smv_setin, std::move (rhs)}
430+ {
431+ }
432+ };
433+
434+ inline const smv_setin_exprt &to_smv_setin_expr (const exprt &expr)
435+ {
436+ PRECONDITION (expr.id () == ID_smv_setin);
437+ smv_setin_exprt::check (expr);
438+ return static_cast <const smv_setin_exprt &>(expr);
439+ }
440+
441+ inline smv_setin_exprt &to_smv_setin_expr (exprt &expr)
442+ {
443+ PRECONDITION (expr.id () == ID_smv_setin);
444+ smv_setin_exprt::check (expr);
445+ return static_cast <smv_setin_exprt &>(expr);
446+ }
447+
372448#endif // CPROVER_SMV_EXPR_H
0 commit comments