pub fn support(&self) -> Vec<SPPath> {
        let mut s = Vec::new();
        match &self {
            Predicate::AND(x) | Predicate::OR(x) | Predicate::XOR(x) => {
                s.extend(x.iter().flat_map(|p| p.support()))
            }
            Predicate::NOT(x) => s.extend(x.support()),
            Predicate::TRUE | Predicate::FALSE => {}
            Predicate::EQ(x, y)
            | Predicate::NEQ(x, y)
            | Predicate::TON(x, y)
            | Predicate::TOFF(x, y)
            | Predicate::MEMBER(x, y) => {
                if let PredicateValue::SPPath(p, _) = x {
                    s.push(p.clone())
                }
                if let PredicateValue::SPPath(p, _) = y {
                    s.push(p.clone())
                }
            }
        };
        s.sort();
        s.dedup();
        s
    }
/// Return the supporting variables of this expression
Return the supporting variables of this expression
Return the supporting variables of this expression
pub fn support(&self) -> Vec<SPPath> {
        let mut s = Vec::new();
        match &self {
            Predicate::AND(x) | Predicate::OR(x) | Predicate::XOR(x) => {
                s.extend(x.iter().flat_map(|p| p.support()))
            }
            Predicate::NOT(x) => s.extend(x.support()),
            Predicate::TRUE | Predicate::FALSE => {}
            Predicate::EQ(x, y)
            | Predicate::NEQ(x, y)
            | Predicate::TON(x, y)
            | Predicate::TOFF(x, y)
            | Predicate::MEMBER(x, y) => {
                if let PredicateValue::SPPath(p, _) = x {
                    s.push(p.clone())
                }
                if let PredicateValue::SPPath(p, _) = y {
                    s.push(p.clone())
                }
            }
        };
        s.sort();
        s.dedup();
        s
    }
pub fn support ( & self ) -> Vec < SPPath > { let mut s = Vec :: new ( ) ; match & self { Predicate :: AND ( x ) | Predicate :: OR ( x ) | Predicate :: XOR ( x ) => { s . extend ( x . iter ( ) . flat_map ( | p | p . support ( ) ) ) } Predicate :: NOT ( x ) => s . extend ( x . support ( ) ) , Predicate :: TRUE | Predicate :: FALSE => { } Predicate :: EQ ( x , y ) | Predicate :: NEQ ( x , y ) | Predicate :: TON ( x , y ) | Predicate :: TOFF ( x , y ) | Predicate :: MEMBER ( x , y ) => { if let PredicateValue :: SPPath ( p , _ ) = x { s . push ( p . clone ( ) ) } if let PredicateValue :: SPPath ( p , _ ) = y { s . push ( p . clone ( ) ) } } } ; s . sort ( ) ; s . dedup ( ) ; s }
Return the supporting variables of this expression
Return the supporting variables of this expression
&self