-- sorted set of natural numbers structure NatSet where items : List Nat invariant : List.Pairwise (· < ·) items namespace NatSet -- TODO: binary search instance : Membership Nat NatSet where mem l x := x ∈ l.items instance (x : Nat) (l : NatSet) : Decidable (x ∈ l) := List.instDecidableMemOfLawfulBEq x l.items def empty : NatSet := ⟨[], by simp⟩ def singleton (x : Nat) : NatSet := ⟨[x], by simp⟩ def remove (x : Nat) (l : NatSet) : NatSet where items := l.items.erase x invariant := List.Pairwise.erase x l.invariant def insert (x : Nat) : NatSet → NatSet | ⟨[], h⟩ => ⟨[x], List.pairwise_singleton ..⟩ | l@⟨a::as, h⟩ => if a = x then l else if hlt : x < a then ⟨ x::a::as, by apply List.pairwise_cons.mpr constructor · intro a' hmem have := List.Pairwise.iff sorry · assumption ⟩ else let ⟨rest, hr⟩ := (NatSet.mk as (List.Pairwise.of_cons h)).insert x ⟨ a::rest, by simp [*] sorry, ⟩