creusot_contracts/logic/
set.rs1use crate::{logic::Mapping, prelude::*};
2use std::marker::PhantomData;
3
4#[opaque]
6#[builtin("set.Set.set")]
7pub struct Set<T: ?Sized>(PhantomData<T>);
8
9impl<T: ?Sized> Set<T> {
10 #[logic]
12 #[builtin("set.Set.empty", ascription)]
13 pub fn empty() -> Self {
14 dead
15 }
16
17 #[logic]
19 #[builtin("identity")]
20 pub fn from_predicate(_: Mapping<T, bool>) -> Self {
21 dead
22 }
23
24 #[logic(open, inline)]
26 pub fn contains(self, e: T) -> bool {
27 Self::mem(e, self)
28 }
29
30 #[doc(hidden)]
34 #[logic]
35 #[builtin("set.Set.mem")]
36 pub fn mem(_: T, _: Self) -> bool {
37 dead
38 }
39
40 #[logic(open, inline)]
42 pub fn insert(self, e: T) -> Self {
43 Self::add(e, self)
44 }
45
46 #[doc(hidden)]
50 #[logic]
51 #[builtin("set.Set.add")]
52 pub fn add(_: T, _: Self) -> Self {
53 dead
54 }
55
56 #[logic]
58 #[builtin("set.Set.is_empty")]
59 pub fn is_empty(self) -> bool {
60 dead
61 }
62
63 #[logic(open, inline)]
65 pub fn remove(self, a: T) -> Self {
66 Self::rem(a, self)
67 }
68
69 #[doc(hidden)]
73 #[logic]
74 #[builtin("set.Set.remove")]
75 pub fn rem(_: T, _: Self) -> Self {
76 dead
77 }
78
79 #[logic]
83 #[builtin("set.Set.union")]
84 pub fn union(self, _: Self) -> Self {
85 dead
86 }
87}