inductive attempt
This commit is contained in:
parent
592a4b45e6
commit
3886fb9469
1 changed files with 14 additions and 41 deletions
|
@ -1,47 +1,20 @@
|
|||
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
|
||||
structure NatSet where
|
||||
items : List Nat
|
||||
invariant : List.Pairwise (· < ·) items
|
||||
abbrev NatSet := { xs : List Nat // StrictlyIncreasing xs }
|
||||
|
||||
namespace NatSet
|
||||
|
||||
-- TODO: binary search
|
||||
instance : Membership Nat NatSet where
|
||||
mem l x := x ∈ l.items
|
||||
def empty : NatSet := ⟨[], .empty⟩
|
||||
def singleton (x : Nat) : NatSet := ⟨[x], .singleton⟩
|
||||
|
||||
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
|
||||
⟩
|
||||
def remove (x : Nat) : NatSet → NatSet
|
||||
| ⟨[], _⟩ => empty
|
||||
| ⟨a::xs, h⟩ =>
|
||||
let tail := ⟨xs, by simp⟩
|
||||
if a = x then tail
|
||||
else
|
||||
let ⟨rest, hr⟩ := (NatSet.mk as (List.Pairwise.of_cons h)).insert x
|
||||
⟨
|
||||
a::rest,
|
||||
by
|
||||
simp [*]
|
||||
sorry,
|
||||
⟩
|
||||
⟨a::xs, h⟩
|
||||
|
|
Loading…
Reference in a new issue