inductive StrictlyIncreasing : List Nat → Prop
| empty     : StrictlyIncreasing []
| singleton : StrictlyIncreasing [x]
| cons : (∀a, a ∈ xs → a > x) → StrictlyIncreasing xs → StrictlyIncreasing (x::xs)

-- sorted set of natural numbers
abbrev NatSet := { xs : List Nat // StrictlyIncreasing xs }

namespace NatSet

def empty : NatSet := ⟨[], .empty⟩
def singleton (x : Nat) : NatSet := ⟨[x], .singleton⟩

def remove (x : Nat) : NatSet → NatSet
| ⟨[], _⟩ => empty
| ⟨a::xs, h⟩ =>
  let tail := ⟨xs, by simp⟩
  if a = x then tail
  else
    ⟨a::xs, h⟩
