let X = {1,2}

find [op1: Pow(X) -> Pow(X)] {
    all [A:Pow(X), x] x member A -> x member op1(A)
    AND
    all [A:Pow(X)] op1(A) = op1(op1(A))
    AND
    all [A,B: Pow(X)] (all x (x member A -> x member B)) -> (all x (x member op1(A) -> x member op1(B)))
    AND
    printstr "Trying to find one that doesn't commute with "
    AND
    print op1
    AND
    find [op2: Pow(X) -> Pow(X)] {
        op1 . op2 != op2 . op1
        AND
        all [A:Pow(X), x] x member A -> x member op2(A)
        AND
        all [A:Pow(X)] op2(A) = op2(op2(A))
        AND
        all [A,B: Pow(X)] (all x (x member A -> x member B)) -> (all x (x member op1(A) -> x member op1(B)))
    }
}


