Lean4
/-- Bitwise `fun a b ↦ a && !b` for `PosNum`. For example, `ldiff 5 9 = 4`:
```
101
1001
----
100
```
-/
def ldiff : PosNum → PosNum → Num
| 1, bit0 _ => 1
| 1, _ => 0
| bit0 p, 1 => Num.pos (bit0 p)
| bit1 p, 1 => Num.pos (bit0 p)
| bit0 p, bit0 q => Num.bit0 (ldiff p q)
| bit0 p, bit1 q => Num.bit0 (ldiff p q)
| bit1 p, bit0 q => Num.bit1 (ldiff p q)
| bit1 p, bit1 q => Num.bit0 (ldiff p q)