chore(library): s/Punit/PUnit/g etc

This commit is contained in:
Sebastian Ullrich 2019-03-21 10:35:52 +01:00 committed by Leonardo de Moura
parent 4b3ca1f679
commit 97e5aa2411
19 changed files with 258 additions and 257 deletions

View file

@ -19,12 +19,12 @@ def List.mmap {m : Type u → Type v} [Monad m] {α : Type w} {β : Type u} (f :
| (h :: t) := do h' ← f h, t' ← List.mmap t, pure (h' :: t')
@[specialize]
def List.mmap' {m : Type u → Type v} [Monad m] {α : Type w} {β : Type u} (f : α → m β) : List α → m Punit
def List.mmap' {m : Type u → Type v} [Monad m] {α : Type w} {β : Type u} (f : α → m β) : List α → m PUnit
| [] := pure ⟨⟩
| (h :: t) := f h *> List.mmap' t
@[specialize]
def List.mfor {m : Type u → Type v} [Monad m] {α : Type w} {β : Type u} (f : α → m β) : List α → m Punit :=
def List.mfor {m : Type u → Type v} [Monad m] {α : Type w} {β : Type u} (f : α → m β) : List α → m PUnit :=
List.mmap' f
def mjoin {m : Type u → Type u} [Monad m] {α : Type u} (a : m (m α)) : m α :=

View file

@ -11,7 +11,7 @@ prelude
import init.control.state init.control.except
universes u v
namespace Estate
namespace EState
inductive Result (ε σ α : Type u)
| ok {} : ασ → Result
@ -44,57 +44,57 @@ protected def Result.repr [HasRepr ε] [HasRepr α] : Result ε σ α → String
instance [HasToString ε] [HasToString α] : HasToString (Result ε σ α) := ⟨Result.toString⟩
instance [HasRepr ε] [HasRepr α] : HasRepr (Result ε σ α) := ⟨Result.repr⟩
end Estate
end EState
def Estate (ε σ α : Type u) := Estate.resultOk Punit σ Punit → Estate.Result ε σ α
def EState (ε σ α : Type u) := EState.resultOk PUnit σ PUnit → EState.Result ε σ α
namespace Estate
namespace EState
variables {ε σ α β : Type u}
instance [Inhabited ε] : Inhabited (Estate ε σ α) :=
instance [Inhabited ε] : Inhabited (EState ε σ α) :=
⟨λ r, match r with
| ⟨Result.ok _ s, _⟩ := Result.error (default ε) s
| ⟨Result.error _ _, h⟩ := unreachableError h⟩
@[inline] protected def pure (a : α) : Estate ε σ α :=
@[inline] protected def pure (a : α) : EState ε σ α :=
λ r, match r with
| ⟨Result.ok _ s, _⟩ := Result.ok a s
| ⟨Result.error _ _, h⟩ := unreachableError h
@[inline] protected def put (s : σ) : Estate ε σ Punit :=
@[inline] protected def put (s : σ) : EState ε σ PUnit :=
λ r, match r with
| ⟨Result.ok _ _, _⟩ := Result.ok ⟨⟩ s
| ⟨Result.error _ _, h⟩ := unreachableError h
@[inline] protected def get : Estate ε σ σ :=
@[inline] protected def get : EState ε σ σ :=
λ r, match r with
| ⟨Result.ok _ s, _⟩ := Result.ok s s
| ⟨Result.error _ _, h⟩ := unreachableError h
@[inline] protected def modify (f : σσ) : Estate ε σ Punit :=
@[inline] protected def modify (f : σσ) : EState ε σ PUnit :=
λ r, match r with
| ⟨Result.ok _ s, _⟩ := Result.ok ⟨⟩ (f s)
| ⟨Result.error _ _, h⟩ := unreachableError h
@[inline] protected def throw (e : ε) : Estate ε σ α :=
@[inline] protected def throw (e : ε) : EState ε σ α :=
λ r, match r with
| ⟨Result.ok _ s, _⟩ := Result.error e s
| ⟨Result.error _ _, h⟩ := unreachableError h
@[inline] protected def catch (x : Estate ε σ α) (handle : ε → Estate ε σ α) : Estate ε σ α :=
@[inline] protected def catch (x : EState ε σ α) (handle : ε → EState ε σ α) : EState ε σ α :=
λ r, match x r with
| Result.error e s := handle e (resultOk.mk ⟨⟩ s)
| ok := ok
@[inline] protected def orelse (x₁ x₂ : Estate ε σ α) : Estate ε σ α :=
@[inline] protected def orelse (x₁ x₂ : EState ε σ α) : EState ε σ α :=
λ r, match x₁ r with
| Result.error _ s := x₂ (resultOk.mk ⟨⟩ s)
| ok := ok
/-- Alternative orelse operator that allows to select which exception should be used.
The default is to use the first exception since the standard `orelse` uses the second. -/
@[inline] protected def orelse' (x₁ x₂ : Estate ε σ α) (useFirstEx := true) : Estate ε σ α :=
@[inline] protected def orelse' (x₁ x₂ : EState ε σ α) (useFirstEx := true) : EState ε σ α :=
λ r, match x₁ r with
| Result.error e₁ s₁ :=
(match x₂ (resultOk.mk ⟨⟩ s₁) with
@ -102,31 +102,31 @@ instance [Inhabited ε] : Inhabited (Estate ε σ α) :=
| ok := ok)
| ok := ok
@[inline] def adaptExcept {ε' : Type u} [HasLift ε ε'] (x : Estate ε σ α) : Estate ε' σ α :=
@[inline] def adaptExcept {ε' : Type u} [HasLift ε ε'] (x : EState ε σ α) : EState ε' σ α :=
λ r, match x r with
| Result.error e s := Result.error (lift e) s
| Result.ok a s := Result.ok a s
@[inline] protected def bind (x : Estate ε σ α) (f : α → Estate ε σ β) : Estate ε σ β :=
@[inline] protected def bind (x : EState ε σ α) (f : α → EState ε σ β) : EState ε σ β :=
λ r, match x r with
| Result.ok a s := f a (resultOk.mk ⟨⟩ s)
| Result.error e s := Result.error e s
@[inline] protected def map (f : α → β) (x : Estate ε σ α) : Estate ε σ β :=
@[inline] protected def map (f : α → β) (x : EState ε σ α) : EState ε σ β :=
λ r, match x r with
| Result.ok a s := Result.ok (f a) s
| Result.error e s := Result.error e s
instance : Monad (Estate ε σ) :=
{ bind := @Estate.bind _ _, pure := @Estate.pure _ _, map := @Estate.map _ _ }
instance : Monad (EState ε σ) :=
{ bind := @EState.bind _ _, pure := @EState.pure _ _, map := @EState.map _ _ }
instance : HasOrelse (Estate ε σ) :=
{ orelse := @Estate.orelse _ _ }
instance : HasOrelse (EState ε σ) :=
{ orelse := @EState.orelse _ _ }
instance : MonadState σ (Estate ε σ) :=
{ put := @Estate.put _ _, get := @Estate.get _ _, modify := @Estate.modify _ _ }
instance : MonadState σ (EState ε σ) :=
{ put := @EState.put _ _, get := @EState.get _ _, modify := @EState.modify _ _ }
instance : MonadExcept ε (Estate ε σ) :=
{ throw := @Estate.throw _ _, catch := @Estate.catch _ _}
instance : MonadExcept ε (EState ε σ) :=
{ throw := @EState.throw _ _, catch := @EState.catch _ _}
end Estate
end EState

View file

@ -52,11 +52,11 @@ section
@[inline] protected def get : StateT σ m σ :=
λ s, pure (s, s)
@[inline] protected def put : σ → StateT σ m Punit :=
λ s' s, pure (Punit.star, s')
@[inline] protected def put : σ → StateT σ m PUnit :=
λ s' s, pure (PUnit.star, s')
@[inline] protected def modify (f : σσ) : StateT σ m Punit :=
λ s, pure (Punit.star, f s)
@[inline] protected def modify (f : σσ) : StateT σ m PUnit :=
λ s, pure (PUnit.star, f s)
@[inline] protected def lift {α : Type u} (t : m α) : StateT σ m α :=
λ s, do a ← t, pure (a, s)
@ -86,12 +86,12 @@ class MonadState (σ : outParam (Type u)) (m : Type u → Type v) :=
/- Obtain the top-most State of a Monad stack. -/
(get {} : m σ)
/- Set the top-most State of a Monad stack. -/
(put {} : σ → m Punit)
(put {} : σ → m PUnit)
/- Map the top-most State of a Monad stack.
Note: `modify f` may be preferable to `f <$> get >>= put` because the latter
does not use the State linearly (without sufficient inlining). -/
(modify {} : (σσ) → m Punit)
(modify {} : (σσ) → m PUnit)
export MonadState (get put modify)
@ -152,7 +152,7 @@ section
variables {σ σ' : Type u} {m m' : Type u → Type v}
def MonadStateAdapter.adaptState' [MonadStateAdapter σ σ' m m'] {α : Type u} (toSigma : σ' → σ) (fromSigma : σσ') : m α → m' α :=
adaptState (λ st, (toSigma st, Punit.star)) (λ st _, fromSigma st)
adaptState (λ st, (toSigma st, PUnit.star)) (λ st _, fromSigma st)
export MonadStateAdapter (adaptState')
instance monadStateAdapterTrans {n n' : Type u → Type v} [MonadFunctor m m' n n'] [MonadStateAdapter σ σ' m m'] : MonadStateAdapter σ σ' n n' :=

View file

@ -127,15 +127,15 @@ a
issues when proving equational lemmas. The equation Compiler uses it as a marker. -/
@[macroInline] abbrev idRhs (α : Sort u) (a : α) : α := a
inductive Punit : Sort u
| star : Punit
inductive PUnit : Sort u
| star : PUnit
/-- An abbreviation for `Punit.{0}`, its most common instantiation.
This Type should be preferred over `Punit` where possible to avoid
/-- An abbreviation for `PUnit.{0}`, its most common instantiation.
This Type should be preferred over `PUnit` where possible to avoid
unnecessary universe parameters. -/
abbrev Unit : Type := Punit
abbrev Unit : Type := PUnit
@[pattern] abbrev Unit.star : Unit := Punit.star
@[pattern] abbrev Unit.star : Unit := PUnit.star
/- Remark: thunks have an efficient implementation in the runtime. -/
structure Thunk (α : Type u) : Type u :=
@ -219,7 +219,7 @@ structure Prod (α : Type u) (β : Type v) :=
/-- Similar to `Prod`, but α and β can be propositions.
We use this Type internally to automatically generate the brecOn recursor. -/
structure Pprod (α : Sort u) (β : Sort v) :=
structure PProd (α : Sort u) (β : Sort v) :=
(fst : α) (snd : β)
structure And (a b : Prop) : Prop :=
@ -265,9 +265,9 @@ inductive Sum (α : Type u) (β : Type v)
| inl {} (val : α) : Sum
| inr {} (val : β) : Sum
inductive Psum (α : Sort u) (β : Sort v)
| inl {} (val : α) : Psum
| inr {} (val : β) : Psum
inductive PSum (α : Sort u) (β : Sort v)
| inl {} (val : α) : PSum
| inr {} (val : β) : PSum
inductive Or (a b : Prop) : Prop
| inl {} (h : a) : Or
@ -282,7 +282,7 @@ Or.inr hb
structure Sigma {α : Type u} (β : α → Type v) :=
mk :: (fst : α) (snd : β fst)
structure Psigma {α : Sort u} (β : α → Sort v) :=
structure PSigma {α : Sort u} (β : α → Sort v) :=
mk :: (fst : α) (snd : β fst)
inductive Bool : Type
@ -296,7 +296,7 @@ structure Subtype {α : Sort u} (p : α → Prop) :=
inductive Exists {α : Sort u} (p : α → Prop) : Prop
| intro (w : α) (h : p w) : Exists
attribute [ppAnonymousCtor] Sigma Psigma Subtype Pprod And
attribute [ppAnonymousCtor] Sigma PSigma Subtype PProd And
class inductive Decidable (p : Prop)
| isFalse (h : ¬p) : Decidable
@ -358,10 +358,10 @@ class HasAppend (α : Type u) := (append : ααα)
class HasAndthen (α : Type u) (β : Type v) (σ : outParam $ Type w) := (andthen : α → β → σ)
class HasUnion (α : Type u) := (union : ααα)
class HasInter (α : Type u) := (inter : ααα)
class HasSdiff (α : Type u) := (sdiff : ααα)
class HasSDiff (α : Type u) := (sdiff : ααα)
class HasEquiv (α : Sort u) := (equiv : αα → Prop)
class HasSubset (α : Type u) := (subset : αα → Prop)
class HasSsubset (α : Type u) := (ssubset : αα → Prop)
class HasSSubset (α : Type u) := (ssubset : αα → Prop)
/- Type classes HasEmptyc and HasInsert are
used to implement polymorphic notation for collections.
Example: {a, b, c}. -/
@ -399,8 +399,8 @@ notation `∅` := HasEmptyc.emptyc _
infix := HasUnion.union
infix ∩ := HasInter.inter
infix ⊆ := HasSubset.subset
infix ⊂ := HasSsubset.ssubset
infix \ := HasSdiff.sdiff
infix ⊂ := HasSSubset.ssubset
infix \ := HasSDiff.sdiff
infix ≈ := HasEquiv.equiv
infixr ^ := HasPow.pow
infixr /\ := And
@ -422,7 +422,7 @@ infix ≥ := ge
infix > := gt
@[reducible] def superset {α : Type u} [HasSubset α] (a b : α) : Prop := HasSubset.subset b a
@[reducible] def ssuperset {α : Type u} [HasSsubset α] (a b : α) : Prop := HasSsubset.ssubset b a
@[reducible] def ssuperset {α : Type u} [HasSSubset α] (a b : α) : Prop := HasSSubset.ssubset b a
infix ⊇ := superset
infix ⊃ := ssuperset
@ -518,12 +518,12 @@ protected def Sum.sizeof {α : Type u} {β : Type v} [HasSizeof α] [HasSizeof
instance (α : Type u) (β : Type v) [HasSizeof α] [HasSizeof β] : HasSizeof (Sum α β) :=
⟨Sum.sizeof⟩
protected def Psum.sizeof {α : Type u} {β : Type v} [HasSizeof α] [HasSizeof β] : (Psum α β) → Nat
| (Psum.inl a) := 1 + sizeof a
| (Psum.inr b) := 1 + sizeof b
protected def PSum.sizeof {α : Type u} {β : Type v} [HasSizeof α] [HasSizeof β] : (PSum α β) → Nat
| (PSum.inl a) := 1 + sizeof a
| (PSum.inr b) := 1 + sizeof b
instance (α : Type u) (β : Type v) [HasSizeof α] [HasSizeof β] : HasSizeof (Psum α β) :=
⟨Psum.sizeof⟩
instance (α : Type u) (β : Type v) [HasSizeof α] [HasSizeof β] : HasSizeof (PSum α β) :=
⟨PSum.sizeof⟩
protected def Sigma.sizeof {α : Type u} {β : α → Type v} [HasSizeof α] [∀ a, HasSizeof (β a)] : Sigma β → Nat
| ⟨a, b⟩ := 1 + sizeof a + sizeof b
@ -531,16 +531,16 @@ protected def Sigma.sizeof {α : Type u} {β : α → Type v} [HasSizeof α] [
instance (α : Type u) (β : α → Type v) [HasSizeof α] [∀ a, HasSizeof (β a)] : HasSizeof (Sigma β) :=
⟨Sigma.sizeof⟩
protected def Psigma.sizeof {α : Type u} {β : α → Type v} [HasSizeof α] [∀ a, HasSizeof (β a)] : Psigma β → Nat
protected def PSigma.sizeof {α : Type u} {β : α → Type v} [HasSizeof α] [∀ a, HasSizeof (β a)] : PSigma β → Nat
| ⟨a, b⟩ := 1 + sizeof a + sizeof b
instance (α : Type u) (β : α → Type v) [HasSizeof α] [∀ a, HasSizeof (β a)] : HasSizeof (Psigma β) :=
⟨Psigma.sizeof⟩
instance (α : Type u) (β : α → Type v) [HasSizeof α] [∀ a, HasSizeof (β a)] : HasSizeof (PSigma β) :=
⟨PSigma.sizeof⟩
protected def Punit.sizeof : Punit → Nat
protected def PUnit.sizeof : PUnit → Nat
| u := 1
instance : HasSizeof Punit := ⟨Punit.sizeof⟩
instance : HasSizeof PUnit := ⟨PUnit.sizeof⟩
protected def Bool.sizeof : Bool → Nat
| b := 1
@ -1420,7 +1420,7 @@ instance : Inhabited True := ⟨trivial⟩
instance : Inhabited Nat := ⟨0⟩
instance : Inhabited PointedType := ⟨{type := Punit, val := ⟨⟩}⟩
instance : Inhabited PointedType := ⟨{type := PUnit, val := ⟨⟩}⟩
class inductive nonempty (α : Sort u) : Prop
| intro (val : α) : nonempty
@ -1667,7 +1667,7 @@ def {u₁ u₂ v₁ v₂} Prod.map {α₁ : Type u₁} {α₂ : Type u₂} {β
/- Dependent products -/
notation `Σ` binders `, ` r:(scoped p, Sigma p) := r
notation `Σ'` binders `, ` r:(scoped p, Psigma p) := r
notation `Σ'` binders `, ` r:(scoped p, PSigma p) := r
theorem exOfPsig {α : Type u} {p : α → Prop} : (Σ' x, p x) → ∃ x, p x
| ⟨x, hx⟩ := ⟨x, hx⟩
@ -1682,25 +1682,25 @@ end
section
variables {α : Sort u} {β : α → Sort v}
protected theorem Psigma.Eq : ∀ {p₁ p₂ : Psigma β} (h₁ : p₁.1 = p₂.1), (Eq.recOn h₁ p₁.2 : β p₂.1) = p₂.2 → p₁ = p₂
protected theorem PSigma.Eq : ∀ {p₁ p₂ : PSigma β} (h₁ : p₁.1 = p₂.1), (Eq.recOn h₁ p₁.2 : β p₂.1) = p₂.2 → p₁ = p₂
| ⟨a, b⟩ ⟨.(a), .(b)⟩ rfl rfl := rfl
end
/- Universe polymorphic unit -/
theorem punitEq (a b : Punit) : a = b :=
Punit.recOn a (Punit.recOn b rfl)
theorem punitEq (a b : PUnit) : a = b :=
PUnit.recOn a (PUnit.recOn b rfl)
theorem punitEqPunit (a : Punit) : a = () :=
theorem punitEqPUnit (a : PUnit) : a = () :=
punitEq a ()
instance : subsingleton Punit :=
instance : subsingleton PUnit :=
subsingleton.intro punitEq
instance : Inhabited Punit :=
instance : Inhabited PUnit :=
⟨()⟩
instance : DecidableEq Punit :=
instance : DecidableEq PUnit :=
{decEq := λ a b, isTrue (punitEq a b)}
/- Setoid -/
@ -1800,13 +1800,13 @@ variable {β : Quot r → Sort v}
local notation `⟦`:max a `⟧` := Quot.mk r a
@[reducible, macroInline]
protected def indep (f : Π a, β ⟦a⟧) (a : α) : Psigma β :=
protected def indep (f : Π a, β ⟦a⟧) (a : α) : PSigma β :=
⟨⟦a⟧, f a⟩
protected theorem indepCoherent (f : Π a, β ⟦a⟧)
(h : ∀ (a b : α) (p : r a b), (Eq.rec (f a) (sound p) : β ⟦b⟧) = f b)
: ∀ a b, r a b → Quot.indep f a = Quot.indep f b :=
λ a b e, Psigma.Eq (sound e) (h a b e)
λ a b e, PSigma.Eq (sound e) (h a b e)
protected theorem liftIndepPr1
(f : Π a, β ⟦a⟧) (h : ∀ (a b : α) (p : r a b), (Eq.rec (f a) (sound p) : β ⟦b⟧) = f b)

View file

@ -11,62 +11,62 @@ universes u v w w'
inductive Rbcolor
| red | black
inductive Rbnode (α : Type u) (β : α → Type v)
| leaf {} : Rbnode
| Node (color : Rbcolor) (lchild : Rbnode) (key : α) (val : β key) (rchild : Rbnode) : Rbnode
inductive RBNode (α : Type u) (β : α → Type v)
| leaf {} : RBNode
| Node (color : Rbcolor) (lchild : RBNode) (key : α) (val : β key) (rchild : RBNode) : RBNode
namespace Rbnode
namespace RBNode
variables {α : Type u} {β : α → Type v} {σ : Type w}
open Rbcolor Nat
def depth (f : Nat → Nat → Nat) : Rbnode α β → Nat
def depth (f : Nat → Nat → Nat) : RBNode α β → Nat
| leaf := 0
| (Node _ l _ _ r) := succ (f (depth l) (depth r))
protected def min : Rbnode α β → Option (Σ k : α, β k)
protected def min : RBNode α β → Option (Σ k : α, β k)
| leaf := none
| (Node _ leaf k v _) := some ⟨k, v⟩
| (Node _ l k v _) := min l
protected def max : Rbnode α β → Option (Σ k : α, β k)
protected def max : RBNode α β → Option (Σ k : α, β k)
| leaf := none
| (Node _ _ k v leaf) := some ⟨k, v⟩
| (Node _ _ k v r) := max r
@[specialize] def fold (f : Π (k : α), β k → σσ) : Rbnode α β → σσ
@[specialize] def fold (f : Π (k : α), β k → σσ) : RBNode α β → σσ
| leaf b := b
| (Node _ l k v r) b := fold r (f k v (fold l b))
@[specialize] def mfold {m : Type w → Type w'} [Monad m] (f : Π (k : α), β k → σ → m σ) : Rbnode α β → σ → m σ
@[specialize] def mfold {m : Type w → Type w'} [Monad m] (f : Π (k : α), β k → σ → m σ) : RBNode α β → σ → m σ
| leaf b := pure b
| (Node _ l k v r) b := do b₁ ← mfold l b, b₂ ← f k v b₁, mfold r b₂
@[specialize] def revFold (f : Π (k : α), β k → σσ) : Rbnode α β → σσ
@[specialize] def revFold (f : Π (k : α), β k → σσ) : RBNode α β → σσ
| leaf b := b
| (Node _ l k v r) b := revFold l (f k v (revFold r b))
@[specialize] def all (p : Π k : α, β k → Bool) : Rbnode α β → Bool
@[specialize] def all (p : Π k : α, β k → Bool) : RBNode α β → Bool
| leaf := true
| (Node _ l k v r) := p k v && all l && all r
@[specialize] def any (p : Π k : α, β k → Bool) : Rbnode α β → Bool
@[specialize] def any (p : Π k : α, β k → Bool) : RBNode α β → Bool
| leaf := false
| (Node _ l k v r) := p k v || any l || any r
def balance1 : Rbnode α β → Rbnode α β → Rbnode α β
def balance1 : RBNode α β → RBNode α β → RBNode α β
| (Node _ _ kv vv t) (Node _ (Node red l kx vx r₁) ky vy r₂) := Node red (Node black l kx vx r₁) ky vy (Node black r₂ kv vv t)
| (Node _ _ kv vv t) (Node _ l₁ ky vy (Node red l₂ kx vx r)) := Node red (Node black l₁ ky vy l₂) kx vx (Node black r kv vv t)
| (Node _ _ kv vv t) (Node _ l ky vy r) := Node black (Node red l ky vy r) kv vv t
| _ _ := leaf -- unreachable
def balance2 : Rbnode α β → Rbnode α β → Rbnode α β
def balance2 : RBNode α β → RBNode α β → RBNode α β
| (Node _ t kv vv _) (Node _ (Node red l kx₁ vx₁ r₁) ky vy r₂) := Node red (Node black t kv vv l) kx₁ vx₁ (Node black r₁ ky vy r₂)
| (Node _ t kv vv _) (Node _ l₁ ky vy (Node red l₂ kx₂ vx₂ r₂)) := Node red (Node black t kv vv l₁) ky vy (Node black l₂ kx₂ vx₂ r₂)
| (Node _ t kv vv _) (Node _ l ky vy r) := Node black t kv vv (Node red l ky vy r)
| _ _ := leaf -- unreachable
def isRed : Rbnode α β → Bool
def isRed : RBNode α β → Bool
| (Node red _ _ _ _) := true
| _ := false
@ -74,7 +74,7 @@ section insert
variables (lt : αα → Prop) [DecidableRel lt]
def ins : Rbnode α β → Π k : α, β k → Rbnode α β
def ins : RBNode α β → Π k : α, β k → RBNode α β
| leaf kx vx := Node red leaf kx vx leaf
| (Node red a ky vy b) kx vx :=
(match cmpUsing lt kx ky with
@ -91,11 +91,11 @@ def ins : Rbnode α β → Π k : α, β k → Rbnode α β
if isRed b then balance2 (Node black a ky vy leaf) (ins b kx vx)
else Node black a ky vy (ins b kx vx)
def setBlack : Rbnode α β → Rbnode α β
def setBlack : RBNode α β → RBNode α β
| (Node _ l k v r) := Node black l k v r
| e := e
def insert (t : Rbnode α β) (k : α) (v : β k) : Rbnode α β :=
def insert (t : RBNode α β) (k : α) (v : β k) : RBNode α β :=
if isRed t then setBlack (ins lt t k v)
else ins lt t k v
@ -106,7 +106,7 @@ variable (lt : αα → Prop)
variable [DecidableRel lt]
def findCore : Rbnode α β → Π k : α, Option (Σ k : α, β k)
def findCore : RBNode α β → Π k : α, Option (Σ k : α, β k)
| leaf x := none
| (Node _ a ky vy b) x :=
(match cmpUsing lt x ky with
@ -114,7 +114,7 @@ def findCore : Rbnode α β → Π k : α, Option (Σ k : α, β k)
| Ordering.Eq := some ⟨ky, vy⟩
| Ordering.gt := findCore b x)
def find {β : Type v} : Rbnode α (λ _, β) → α → Option β
def find {β : Type v} : RBNode α (λ _, β) → α → Option β
| leaf x := none
| (Node _ a ky vy b) x :=
(match cmpUsing lt x ky with
@ -122,7 +122,7 @@ def find {β : Type v} : Rbnode α (λ _, β) → α → Option β
| Ordering.Eq := some vy
| Ordering.gt := find b x)
def lowerBound : Rbnode α β → α → Option (Sigma β) → Option (Sigma β)
def lowerBound : RBNode α β → α → Option (Sigma β) → Option (Sigma β)
| leaf x lb := lb
| (Node _ a ky vy b) x lb :=
(match cmpUsing lt x ky with
@ -132,95 +132,95 @@ def lowerBound : Rbnode α β → α → Option (Sigma β) → Option (Sigma β)
end membership
inductive WellFormed (lt : αα → Prop) : Rbnode α β → Prop
inductive WellFormed (lt : αα → Prop) : RBNode α β → Prop
| leafWff : WellFormed leaf
| insertWff {n n' : Rbnode α β} {k : α} {v : β k} [DecidableRel lt] : WellFormed n → n' = insert lt n k v → WellFormed n'
| insertWff {n n' : RBNode α β} {k : α} {v : β k} [DecidableRel lt] : WellFormed n → n' = insert lt n k v → WellFormed n'
end Rbnode
end RBNode
open Rbnode
open RBNode
/- TODO(Leo): define dRbmap -/
/- TODO(Leo): define dRBMap -/
def Rbmap (α : Type u) (β : Type v) (lt : αα → Prop) : Type (max u v) :=
{t : Rbnode α (λ _, β) // t.WellFormed lt }
def RBMap (α : Type u) (β : Type v) (lt : αα → Prop) : Type (max u v) :=
{t : RBNode α (λ _, β) // t.WellFormed lt }
@[inline] def mkRbmap (α : Type u) (β : Type v) (lt : αα → Prop) : Rbmap α β lt :=
@[inline] def mkRBMap (α : Type u) (β : Type v) (lt : αα → Prop) : RBMap α β lt :=
⟨leaf, WellFormed.leafWff lt⟩
namespace Rbmap
namespace RBMap
variables {α : Type u} {β : Type v} {σ : Type w} {lt : αα → Prop}
def depth (f : Nat → Nat → Nat) (t : Rbmap α β lt) : Nat :=
def depth (f : Nat → Nat → Nat) (t : RBMap α β lt) : Nat :=
t.val.depth f
@[inline] def fold (f : α → β → σσ) : Rbmap α β lt → σσ
@[inline] def fold (f : α → β → σσ) : RBMap α β lt → σσ
| ⟨t, _⟩ b := t.fold f b
@[inline] def revFold (f : α → β → σσ) : Rbmap α β lt → σσ
@[inline] def revFold (f : α → β → σσ) : RBMap α β lt → σσ
| ⟨t, _⟩ b := t.revFold f b
@[inline] def mfold {m : Type w → Type w'} [Monad m] (f : α → β → σ → m σ) : Rbmap α β lt → σ → m σ
@[inline] def mfold {m : Type w → Type w'} [Monad m] (f : α → β → σ → m σ) : RBMap α β lt → σ → m σ
| ⟨t, _⟩ b := t.mfold f b
@[inline] def mfor {m : Type w → Type w'} [Monad m] (f : α → β → m σ) (t : Rbmap α β lt) : m Punit :=
@[inline] def mfor {m : Type w → Type w'} [Monad m] (f : α → β → m σ) (t : RBMap α β lt) : m PUnit :=
t.mfold (λ k v _, f k v *> pure ⟨⟩) ⟨⟩
@[inline] def Empty : Rbmap α β lt → Bool
@[inline] def Empty : RBMap α β lt → Bool
| ⟨leaf, _⟩ := true
| _ := false
@[specialize] def toList : Rbmap α β lt → List (α × β)
@[specialize] def toList : RBMap α β lt → List (α × β)
| ⟨t, _⟩ := t.revFold (λ k v ps, (k, v)::ps) []
@[inline] protected def min : Rbmap α β lt → Option (α × β)
@[inline] protected def min : RBMap α β lt → Option (α × β)
| ⟨t, _⟩ :=
match t.min with
| some ⟨k, v⟩ := some (k, v)
| none := none
@[inline] protected def max : Rbmap α β lt → Option (α × β)
@[inline] protected def max : RBMap α β lt → Option (α × β)
| ⟨t, _⟩ :=
match t.max with
| some ⟨k, v⟩ := some (k, v)
| none := none
instance [HasRepr α] [HasRepr β] : HasRepr (Rbmap α β lt) :=
instance [HasRepr α] [HasRepr β] : HasRepr (RBMap α β lt) :=
⟨λ t, "rbmapOf " ++ repr t.toList⟩
variables [DecidableRel lt]
def insert : Rbmap α β lt → α → β → Rbmap α β lt
def insert : RBMap α β lt → α → β → RBMap α β lt
| ⟨t, w⟩ k v := ⟨t.insert lt k v, WellFormed.insertWff w rfl⟩
@[specialize] def ofList : List (α × β) → Rbmap α β lt
| [] := mkRbmap _ _ _
@[specialize] def ofList : List (α × β) → RBMap α β lt
| [] := mkRBMap _ _ _
| (⟨k,v⟩::xs) := (ofList xs).insert k v
def findCore : Rbmap α β lt → α → Option (Σ k : α, β)
def findCore : RBMap α β lt → α → Option (Σ k : α, β)
| ⟨t, _⟩ x := t.findCore lt x
def find : Rbmap α β lt → α → Option β
def find : RBMap α β lt → α → Option β
| ⟨t, _⟩ x := t.find lt x
/-- (lowerBound k) retrieves the kv pair of the largest key smaller than or equal to `k`,
if it exists. -/
def lowerBound : Rbmap α β lt → α → Option (Σ k : α, β)
def lowerBound : RBMap α β lt → α → Option (Σ k : α, β)
| ⟨t, _⟩ x := t.lowerBound lt x none
@[inline] def contains (t : Rbmap α β lt) (a : α) : Bool :=
@[inline] def contains (t : RBMap α β lt) (a : α) : Bool :=
(t.find a).isSome
def fromList (l : List (α × β)) (lt : αα → Prop) [DecidableRel lt] : Rbmap α β lt :=
l.foldl (λ r p, r.insert p.1 p.2) (mkRbmap α β lt)
def fromList (l : List (α × β)) (lt : αα → Prop) [DecidableRel lt] : RBMap α β lt :=
l.foldl (λ r p, r.insert p.1 p.2) (mkRBMap α β lt)
@[inline] def all : Rbmap α β lt → (α → β → Bool) → Bool
@[inline] def all : RBMap α β lt → (α → β → Bool) → Bool
| ⟨t, _⟩ p := t.all p
@[inline] def any : Rbmap α β lt → (α → β → Bool) → Bool
@[inline] def any : RBMap α β lt → (α → β → Bool) → Bool
| ⟨t, _⟩ p := t.any p
end Rbmap
end RBMap
def rbmapOf {α : Type u} {β : Type v} (l : List (α × β)) (lt : αα → Prop) [DecidableRel lt] : Rbmap α β lt :=
Rbmap.fromList l lt
def rbmapOf {α : Type u} {β : Type v} (l : List (α × β)) (lt : αα → Prop) [DecidableRel lt] : RBMap α β lt :=
RBMap.fromList l lt

View file

@ -7,82 +7,82 @@ prelude
import init.data.rbmap.basic
universes u v w
def Rbtree (α : Type u) (lt : αα → Prop) : Type u :=
Rbmap α Unit lt
def RBTree (α : Type u) (lt : αα → Prop) : Type u :=
RBMap α Unit lt
@[inline] def mkRbtree (α : Type u) (lt : αα → Prop) : Rbtree α lt :=
mkRbmap α Unit lt
@[inline] def mkRBTree (α : Type u) (lt : αα → Prop) : RBTree α lt :=
mkRBMap α Unit lt
namespace Rbtree
namespace RBTree
variables {α : Type u} {β : Type v} {lt : αα → Prop}
@[inline] def depth (f : Nat → Nat → Nat) (t : Rbtree α lt) : Nat :=
Rbmap.depth f t
@[inline] def depth (f : Nat → Nat → Nat) (t : RBTree α lt) : Nat :=
RBMap.depth f t
@[inline] def fold (f : α → β → β) (t : Rbtree α lt) (b : β) : β :=
Rbmap.fold (λ a _ r, f a r) t b
@[inline] def fold (f : α → β → β) (t : RBTree α lt) (b : β) : β :=
RBMap.fold (λ a _ r, f a r) t b
@[inline] def revFold (f : α → β → β) (t : Rbtree α lt) (b : β) : β :=
Rbmap.revFold (λ a _ r, f a r) t b
@[inline] def revFold (f : α → β → β) (t : RBTree α lt) (b : β) : β :=
RBMap.revFold (λ a _ r, f a r) t b
@[inline] def mfold {m : Type v → Type w} [Monad m] (f : α → β → m β) (t : Rbtree α lt) (b : β) : m β :=
Rbmap.mfold (λ a _ r, f a r) t b
@[inline] def mfold {m : Type v → Type w} [Monad m] (f : α → β → m β) (t : RBTree α lt) (b : β) : m β :=
RBMap.mfold (λ a _ r, f a r) t b
@[inline] def mfor {m : Type v → Type w} [Monad m] (f : α → m β) (t : Rbtree α lt) : m Punit :=
@[inline] def mfor {m : Type v → Type w} [Monad m] (f : α → m β) (t : RBTree α lt) : m PUnit :=
t.mfold (λ a _, f a *> pure ⟨⟩) ⟨⟩
@[inline] def Empty (t : Rbtree α lt) : Bool :=
Rbmap.Empty t
@[inline] def Empty (t : RBTree α lt) : Bool :=
RBMap.Empty t
@[specialize] def toList (t : Rbtree α lt) : List α :=
@[specialize] def toList (t : RBTree α lt) : List α :=
t.revFold (::) []
@[inline] protected def min (t : Rbtree α lt) : Option α :=
match Rbmap.min t with
@[inline] protected def min (t : RBTree α lt) : Option α :=
match RBMap.min t with
| some ⟨a, _⟩ := some a
| none := none
@[inline] protected def max (t : Rbtree α lt) : Option α :=
match Rbmap.max t with
@[inline] protected def max (t : RBTree α lt) : Option α :=
match RBMap.max t with
| some ⟨a, _⟩ := some a
| none := none
instance [HasRepr α] : HasRepr (Rbtree α lt) :=
instance [HasRepr α] : HasRepr (RBTree α lt) :=
⟨λ t, "rbtreeOf " ++ repr t.toList⟩
variables [DecidableRel lt]
@[inline] def insert (t : Rbtree α lt) (a : α) : Rbtree α lt :=
Rbmap.insert t a ()
@[inline] def insert (t : RBTree α lt) (a : α) : RBTree α lt :=
RBMap.insert t a ()
@[specialize] def ofList : List α → Rbtree α lt
| [] := mkRbtree _ _
@[specialize] def ofList : List α → RBTree α lt
| [] := mkRBTree _ _
| (x::xs) := (ofList xs).insert x
def find (t : Rbtree α lt) (a : α) : Option α :=
match Rbmap.findCore t a with
def find (t : RBTree α lt) (a : α) : Option α :=
match RBMap.findCore t a with
| some ⟨a, _⟩ := some a
| none := none
@[inline] def contains (t : Rbtree α lt) (a : α) : Bool :=
@[inline] def contains (t : RBTree α lt) (a : α) : Bool :=
(t.find a).isSome
def fromList (l : List α) (lt : αα → Prop) [DecidableRel lt] : Rbtree α lt :=
l.foldl insert (mkRbtree α lt)
def fromList (l : List α) (lt : αα → Prop) [DecidableRel lt] : RBTree α lt :=
l.foldl insert (mkRBTree α lt)
@[inline] def all (t : Rbtree α lt) (p : α → Bool) : Bool :=
Rbmap.all t (λ a _, p a)
@[inline] def all (t : RBTree α lt) (p : α → Bool) : Bool :=
RBMap.all t (λ a _, p a)
@[inline] def any (t : Rbtree α lt) (p : α → Bool) : Bool :=
Rbmap.any t (λ a _, p a)
@[inline] def any (t : RBTree α lt) (p : α → Bool) : Bool :=
RBMap.any t (λ a _, p a)
def subset (t₁ t₂ : Rbtree α lt) : Bool :=
def subset (t₁ t₂ : RBTree α lt) : Bool :=
t₁.all $ λ a, (t₂.find a).toBool
def seteq (t₁ t₂ : Rbtree α lt) : Bool :=
def seteq (t₁ t₂ : RBTree α lt) : Bool :=
subset t₁ t₂ && subset t₂ t₁
end Rbtree
end RBTree
def rbtreeOf {α : Type u} (l : List α) (lt : αα → Prop) [DecidableRel lt] : Rbtree α lt :=
Rbtree.fromList l lt
def rbtreeOf {α : Type u} (l : List α) (lt : αα → Prop) [DecidableRel lt] : RBTree α lt :=
RBTree.fromList l lt

View file

@ -18,10 +18,10 @@ constant IO.RealWorld : Type := Unit
```
-/
@[derive Monad MonadExcept]
def EIO (ε : Type) : Type → Type := Estate ε IO.RealWorld
def EIO (ε : Type) : Type → Type := EState ε IO.RealWorld
instance {ε : Type} {α : Type} [Inhabited ε] : Inhabited (EIO ε α) :=
inferInstanceAs (Inhabited (Estate ε IO.RealWorld α))
inferInstanceAs (Inhabited (EState ε IO.RealWorld α))
/-
In the future, we may want to give more concrete data

View file

@ -57,26 +57,26 @@ open Expander
local attribute [instance] Name.hasLtQuick
-- TODO(Sebastian): move
/-- An Rbmap that remembers the insertion order. -/
structure OrderedRbmap (α β : Type) (lt : αα → Prop) :=
/-- An RBMap that remembers the insertion order. -/
structure OrderedRBMap (α β : Type) (lt : αα → Prop) :=
(entries : List (α × β))
(map : Rbmap α (Nat × β) lt)
(map : RBMap α (Nat × β) lt)
(size : Nat)
namespace OrderedRbmap
variables {α β : Type} {lt : αα → Prop} [DecidableRel lt] (m : OrderedRbmap α β lt)
namespace OrderedRBMap
variables {α β : Type} {lt : αα → Prop} [DecidableRel lt] (m : OrderedRBMap α β lt)
def Empty : OrderedRbmap α β lt := {entries := [], map := mkRbmap _ _ _, size := 0}
def Empty : OrderedRBMap α β lt := {entries := [], map := mkRBMap _ _ _, size := 0}
def insert (k : α) (v : β) : OrderedRbmap α β lt :=
def insert (k : α) (v : β) : OrderedRBMap α β lt :=
{entries := (k, v)::m.entries, map := m.map.insert k (m.size, v), size := m.size + 1}
def find (a : α) : Option (Nat × β) :=
m.map.find a
def ofList (l : List (α × β)) : OrderedRbmap α β lt :=
l.foldl (λ m p, OrderedRbmap.insert m (Prod.fst p) (Prod.snd p)) OrderedRbmap.Empty
end OrderedRbmap
def ofList (l : List (α × β)) : OrderedRBMap α β lt :=
l.foldl (λ m p, OrderedRBMap.insert m (Prod.fst p) (Prod.snd p)) OrderedRBMap.Empty
end OrderedRBMap
structure ElaboratorConfig extends FrontendConfig :=
(initialParserCfg : ModuleParserConfig)
@ -93,11 +93,11 @@ structure Scope :=
(notations : List NotationMacro := [])
/- The set of local universe variables.
We remember their insertion order so that we can keep the order when copying them to declarations. -/
(univs : OrderedRbmap Name Level (<) := OrderedRbmap.Empty)
(univs : OrderedRBMap Name Level (<) := OrderedRBMap.Empty)
/- The set of local variables. -/
(vars : OrderedRbmap Name SectionVar (<) := OrderedRbmap.Empty)
(vars : OrderedRBMap Name SectionVar (<) := OrderedRBMap.Empty)
/- The subset of `vars` that is tagged as always included. -/
(includeVars : Rbtree Name (<) := mkRbtree _ _)
(includeVars : RBTree Name (<) := mkRBTree _ _)
/- The stack of nested active `namespace` commands. -/
(nsStack : List Name := [])
/- The set of active `open` declarations. -/
@ -364,9 +364,9 @@ do cfg ← read,
..st},
match st' with
| some st' := do modifyCurrentScope $ λ sc, {sc with
univs := OrderedRbmap.ofList st'.univs,
vars := OrderedRbmap.ofList st'.vars,
includeVars := Rbtree.ofList st'.includeVars,
univs := OrderedRBMap.ofList st'.univs,
vars := OrderedRBMap.ofList st'.vars,
includeVars := RBTree.ofList st'.includeVars,
Options := st'.Options,
},
modify $ λ st, {..st', ..st}
@ -423,7 +423,7 @@ match dl with
match dl.oldUnivParams with
| some uparams :=
modifyCurrentScope $ λ sc, {sc with univs :=
(uparams.ids.map mangleIdent).foldl (λ m id, OrderedRbmap.insert m id (Level.Param id)) sc.univs}
(uparams.ids.map mangleIdent).foldl (λ m id, OrderedRBMap.insert m id (Level.Param id)) sc.univs}
| none := pure (),
-- do we actually need this??
let uparams := namesToPexpr $ match dl.oldUnivParams with
@ -500,7 +500,7 @@ def Declaration.elaborate : Elaborator :=
match ind.oldUnivParams with
| some uparams :=
modifyCurrentScope $ λ sc, {sc with univs :=
(uparams.ids.map mangleIdent).foldl (λ m id, OrderedRbmap.insert m id (Level.Param id)) sc.univs}
(uparams.ids.map mangleIdent).foldl (λ m id, OrderedRBMap.insert m id (Level.Param id)) sc.univs}
| none := pure (),
let uparams := namesToPexpr $ match ind.oldUnivParams with
| some uparams := uparams.ids.map mangleIdent
@ -531,7 +531,7 @@ def Declaration.elaborate : Elaborator :=
match s.oldUnivParams with
| some uparams :=
modifyCurrentScope $ λ sc, {sc with univs :=
(uparams.ids.map mangleIdent).foldl (λ m id, OrderedRbmap.insert m id (Level.Param id)) sc.univs}
(uparams.ids.map mangleIdent).foldl (λ m id, OrderedRBMap.insert m id (Level.Param id)) sc.univs}
| none := pure (),
let uparams := namesToPexpr $ match s.oldUnivParams with
| some uparams := uparams.ids.map mangleIdent
@ -600,7 +600,7 @@ def include.elaborate : Elaborator :=
modifyCurrentScope $ λ sc, {sc with includeVars :=
v.ids.foldl (λ vars v, vars.insert $ mangleIdent v) sc.includeVars}
-- TODO: Rbmap.remove
-- TODO: RBMap.remove
/-
def omit.elaborate : Elaborator :=
λ stx, do
@ -893,7 +893,7 @@ def eoi.elaborate : Elaborator :=
error cmd "invalid end of input, expected 'end'"
-- TODO(Sebastian): replace with attribute
def elaborators : Rbmap Name Elaborator (<) := Rbmap.fromList [
def elaborators : RBMap Name Elaborator (<) := RBMap.fromList [
(Module.header.name, Module.header.elaborate),
(notation.name, notation.elaborate),
(reserveNotation.name, reserveNotation.elaborate),

View file

@ -471,7 +471,7 @@ def sorry.transform : transformer :=
local attribute [instance] Name.hasLtQuick
-- TODO(Sebastian): replace with attribute
def builtinTransformers : Rbmap Name transformer (<) := Rbmap.fromList [
def builtinTransformers : RBMap Name transformer (<) := RBMap.fromList [
(mixfix.name, mixfix.transform),
(reserveMixfix.name, reserveMixfix.transform),
(bracketedBinders.name, bracketedBinders.transform),
@ -497,7 +497,7 @@ structure ExpanderState :=
(nextScope : MacroScope)
structure ExpanderConfig extends TransformerConfig :=
(transformers : Rbmap Name transformer (<))
(transformers : RBMap Name transformer (<))
instance ExpanderConfig.HasLift : HasLift ExpanderConfig TransformerConfig :=
⟨ExpanderConfig.toTransformerConfig⟩

View file

@ -22,8 +22,8 @@ def DataValue.beq : DataValue → DataValue → Bool
instance DataValue.HasBeq : HasBeq DataValue := ⟨DataValue.beq⟩
/- Remark: we do not use Rbmap here because we need to manipulate Kvmap objects in
C++ and Rbmap is implemented in Lean. So, we use just a List until we can
/- Remark: we do not use RBMap here because we need to manipulate Kvmap objects in
C++ and RBMap is implemented in Lean. So, we use just a List until we can
generate C++ code from Lean code. -/
structure Kvmap :=
(entries : List (Name × DataValue) := [])

View file

@ -157,27 +157,27 @@ end Name
section
local attribute [instance] Name.hasLtQuick
def NameMap (α : Type) := Rbmap Name α (<)
def NameMap (α : Type) := RBMap Name α (<)
variable {α : Type}
@[inline] def mkNameMap : NameMap α :=
mkRbmap Name α (<)
mkRBMap Name α (<)
def NameMap.insert (m : NameMap α) (n : Name) (a : α) :=
Rbmap.insert m n a
RBMap.insert m n a
def NameMap.contains (m : NameMap α) (n : Name) : Bool :=
Rbmap.contains m n
RBMap.contains m n
@[inline] def NameMap.find (m : NameMap α) (n : Name) : Option α :=
Rbmap.find m n
RBMap.find m n
end
section
local attribute [instance] Name.hasLtQuick
def NameSet := Rbtree Name (<)
def NameSet := RBTree Name (<)
@[inline] def mkNameSet : NameSet :=
mkRbtree Name (<)
mkRBTree Name (<)
def NameSet.insert (s : NameSet) (n : Name) :=
Rbtree.insert s n
RBTree.insert s n
def NameSet.contains (s : NameSet) (n : Name) : Bool :=
Rbmap.contains s n
RBMap.contains s n
end
end Lean

View file

@ -84,7 +84,7 @@ local attribute [reducible] BasicParserM ParserT parserCoreT
@[inline] def getCache : BasicParserM ParserCache :=
monadLift (get : StateT ParserCache id _)
@[inline] def putCache : ParserCache → BasicParserM Punit :=
@[inline] def putCache : ParserCache → BasicParserM PUnit :=
λ c, monadLift (put c : StateT ParserCache id _)
end
@ -192,7 +192,7 @@ instance trailingTermParserCoe : HasCoe termParser trailingTermParser :=
local attribute [instance] Name.hasLtQuick
/-- A multimap indexed by tokens. Used for indexing parsers by their leading token. -/
def TokenMap (α : Type) := Rbmap Name (List α) (<)
def TokenMap (α : Type) := RBMap Name (List α) (<)
def TokenMap.insert {α : Type} (map : TokenMap α) (k : Name) (v : α) : TokenMap α :=
match map.find k with
@ -200,7 +200,7 @@ match map.find k with
| some vs := map.insert k (v::vs)
def TokenMap.ofList {α : Type} : List (Name × α) → TokenMap α
| [] := mkRbmap _ _ _
| [] := mkRBMap _ _ _
| (⟨k,v⟩::xs) := (TokenMap.ofList xs).insert k v
instance tokenMapNil.tokens : Parser.HasTokens $ @TokenMap.ofList ρ [] :=
@ -215,8 +215,8 @@ structure CommandParserConfig extends ParserConfig :=
(leadingTermParsers : TokenMap termParser)
(trailingTermParsers : TokenMap trailingTermParser)
-- local Term parsers (such as from `local notation`) hide previous parsers instead of overloading them
(localLeadingTermParsers : TokenMap termParser := mkRbmap _ _ _)
(localTrailingTermParsers : TokenMap trailingTermParser := mkRbmap _ _ _)
(localLeadingTermParsers : TokenMap termParser := mkRBMap _ _ _)
(localTrailingTermParsers : TokenMap trailingTermParser := mkRBMap _ _ _)
instance commandParserConfigCoeParserConfig : HasCoe CommandParserConfig ParserConfig :=
⟨CommandParserConfig.toParserConfig⟩

View file

@ -13,19 +13,19 @@ namespace Lean
namespace Parser
inductive Trie (α : Type)
| Node : Option α → Rbnode Char (λ _, Trie) → Trie
| Node : Option α → RBNode Char (λ _, Trie) → Trie
namespace Trie
variables {α : Type}
protected def mk : Trie α :=
⟨none, Rbnode.leaf⟩
⟨none, RBNode.leaf⟩
private def insertAux (val : α) : Nat → Trie α → String.Iterator → Trie α
| 0 (Trie.Node _ map) _ := Trie.Node (some val) map -- NOTE: overrides old value
| (n+1) (Trie.Node val map) it :=
let t' := (Rbnode.find (<) map it.curr).getOrElse Trie.mk in
Trie.Node val (Rbnode.insert (<) map it.curr (insertAux n t' it.next))
let t' := (RBNode.find (<) map it.curr).getOrElse Trie.mk in
Trie.Node val (RBNode.insert (<) map it.curr (insertAux n t' it.next))
def insert (t : Trie α) (s : String) (val : α) : Trie α :=
insertAux val s.length t s.mkIterator
@ -33,7 +33,7 @@ insertAux val s.length t s.mkIterator
private def findAux : Nat → Trie α → String.Iterator → Option α
| 0 (Trie.Node val _) _ := val
| (n+1) (Trie.Node val map) it := do
t' ← Rbnode.find (<) map it.curr,
t' ← RBNode.find (<) map it.curr,
findAux n t' it.next
def find (t : Trie α) (s : String) : Option α :=
@ -43,7 +43,7 @@ private def matchPrefixAux : Nat → Trie α → String.Iterator → Option (Str
| 0 (Trie.Node val map) it Acc := Prod.mk it <$> val <|> Acc
| (n+1) (Trie.Node val map) it Acc :=
let Acc' := Prod.mk it <$> val <|> Acc in
match Rbnode.find (<) map it.curr with
match RBNode.find (<) map it.curr with
| some t := matchPrefixAux n t it.next Acc'
| none := Acc'
@ -51,7 +51,7 @@ def matchPrefix {α : Type} (t : Trie α) (it : String.Iterator) : Option (Strin
matchPrefixAux it.remaining t it none
private def toStringAux {α : Type} : Trie α → List Format
| (Trie.Node val map) := flip Rbnode.fold map (λ c t Fs,
| (Trie.Node val map) := flip RBNode.fold map (λ c t Fs,
toFormat (repr c) :: (Format.group $ Format.nest 2 $ flip Format.joinSep Format.line $ toStringAux t) :: Fs) []
instance {α : Type} : HasToString (Trie α) :=

View file

@ -37,7 +37,7 @@ end Position
/-- A precomputed cache for quickly mapping Char offsets to positionitions. -/
structure FileMap :=
-- A mapping from Char offset of line start to line index
(lines : Rbmap Nat Nat (<))
(lines : RBMap Nat Nat (<))
namespace FileMap
private def fromStringAux : Nat → String.Iterator → Nat → List (Nat × Nat)
@ -49,7 +49,7 @@ private def fromStringAux : Nat → String.Iterator → Nat → List (Nat × Nat
| other := fromStringAux k it.next line
def fromString (s : String) : FileMap :=
{lines := Rbmap.ofList $ fromStringAux s.length s.mkIterator 1}
{lines := RBMap.ofList $ fromStringAux s.length s.mkIterator 1}
def toPosition (m : FileMap) (off : Nat) : Position :=
match m.lines.lowerBound off with

View file

@ -25,7 +25,7 @@ fmt ++ Format.nest 2 (Format.join $ subtraces.map (λ t, Format.line ++ t.pp))
namespace Trace
def TraceMap := Rbmap Position Trace (<)
def TraceMap := RBMap Position Trace (<)
structure TraceState :=
(opts : Options)
@ -77,7 +77,7 @@ instance (m) [Monad m] : MonadTracer (TraceT m) :=
}
unsafe def TraceT.run {m α} [Monad m] (opts : Options) (x : TraceT m α) : m (α × TraceMap) :=
do (a, st) ← StateT.run x {opts := opts, roots := mkRbmap _ _ _, curPos := none, curTraces := []},
do (a, st) ← StateT.run x {opts := opts, roots := mkRBMap _ _ _, curPos := none, curTraces := []},
pure (a, st.roots)
end Trace

View file

@ -203,14 +203,14 @@ instance HasWellFounded {α : Type u} {β : Type v} [s₁ : HasWellFounded α] [
end Prod
namespace Psigma
namespace PSigma
section
variables {α : Sort u} {β : α → Sort v}
variable (r : αα → Prop)
variable (s : ∀ a, β a → β a → Prop)
-- Lexicographical order based on r and s
inductive Lex : Psigma β → Psigma β → Prop
inductive Lex : PSigma β → PSigma β → Prop
| left : ∀ {a₁ : α} (b₁ : β a₁) {a₂ : α} (b₂ : β a₂), r a₁ a₂ → Lex ⟨a₁, b₁⟩ ⟨a₂, b₂⟩
| right : ∀ (a : α) {b₁ b₂ : β a}, s a b₁ b₂ → Lex ⟨a, b₁⟩ ⟨a, b₂⟩
end
@ -229,7 +229,7 @@ Acc.ndrecOn aca
(ihb : ∀ (y : β xa), s xa y xb → Acc (Lex r s) ⟨xa, y⟩),
Acc.intro ⟨xa, xb⟩ (λ p (lt : p ≺ ⟨xa, xb⟩),
have aux : xa = xa → xb ≅ xb → Acc (Lex r s) p, from
@Psigma.Lex.recOn α β r s (λ p₁ p₂ _, p₂.1 = xa → p₂.2 ≅ xb → Acc (Lex r s) p₁)
@PSigma.Lex.recOn α β r s (λ p₁ p₂ _, p₂.1 = xa → p₂.2 ≅ xb → Acc (Lex r s) p₁)
p ⟨xa, xb⟩ lt
(λ (a₁ : α) (b₁ : β a₁) (a₂ : α) (b₂ : β a₂) (h : r a₁ a₂) (Eq₂ : a₂ = xa) (Eq₃ : b₂ ≅ xb),
have aux : (∀ (y : α), r y xa → ∀ (b : β y), Acc (Lex r s) ⟨y, b⟩) →
@ -269,7 +269,7 @@ section
variables {α : Sort u} {β : Sort v}
-- Reverse lexicographical order based on r and s
inductive RevLex (r : αα → Prop) (s : β → β → Prop) : @Psigma α (λ a, β) → @Psigma α (λ a, β) → Prop
inductive RevLex (r : αα → Prop) (s : β → β → Prop) : @PSigma α (λ a, β) → @PSigma α (λ a, β) → Prop
| left : ∀ {a₁ a₂ : α} (b : β), r a₁ a₂ → RevLex ⟨a₁, b⟩ ⟨a₂, b⟩
| right : ∀ (a₁ : α) {b₁ : β} (a₂ : α) {b₂ : β}, s b₁ b₂ → RevLex ⟨a₁, b₁⟩ ⟨a₂, b₂⟩
end
@ -305,7 +305,7 @@ WellFounded.intro $ λ ⟨a, b⟩, revLexAccessible (apply hb b) (WellFounded.ap
end
section
def skipLeft (α : Type u) {β : Type v} (s : β → β → Prop) : @Psigma α (λ a, β) → @Psigma α (λ a, β) → Prop :=
def skipLeft (α : Type u) {β : Type v} (s : β → β → Prop) : @PSigma α (λ a, β) → @PSigma α (λ a, β) → Prop :=
RevLex emptyRelation s
def skipLeftWf (α : Type u) {β : Type v} {s : β → β → Prop} (hb : WellFounded s) : WellFounded (skipLeft α s) :=
@ -316,10 +316,10 @@ def mkSkipLeft {α : Type u} {β : Type v} {b₁ b₂ : β} {s : β → β → P
RevLex.right _ _ _ h
end
instance HasWellFounded {α : Type u} {β : α → Type v} [s₁ : HasWellFounded α] [s₂ : ∀ a, HasWellFounded (β a)] : HasWellFounded (Psigma β) :=
instance HasWellFounded {α : Type u} {β : α → Type v} [s₁ : HasWellFounded α] [s₂ : ∀ a, HasWellFounded (β a)] : HasWellFounded (PSigma β) :=
{r := Lex s₁.r (λ a, (s₂ a).r), wf := lexWf s₁.wf (λ a, (s₂ a).wf)}
end Psigma
end PSigma
/- Temporary hack for bootstrapping Lean.
TODO: DELETE!!!!

View file

@ -495,14 +495,14 @@ void initialize_constants() {
g_out_param = new name{"outParam"};
g_pexpr = new name{"pexpr"};
g_pexpr_subst = new name{"pexpr", "subst"};
g_punit = new name{"Punit"};
g_punit_cases_on = new name{"Punit", "casesOn"};
g_punit_star = new name{"Punit", "star"};
g_punit = new name{"PUnit"};
g_punit_cases_on = new name{"PUnit", "casesOn"};
g_punit_star = new name{"PUnit", "star"};
g_prod_mk = new name{"Prod", "mk"};
g_pprod = new name{"Pprod"};
g_pprod_mk = new name{"Pprod", "mk"};
g_pprod_fst = new name{"Pprod", "fst"};
g_pprod_snd = new name{"Pprod", "snd"};
g_pprod = new name{"PProd"};
g_pprod_mk = new name{"PProd", "mk"};
g_pprod_fst = new name{"PProd", "fst"};
g_pprod_snd = new name{"PProd", "snd"};
g_propext = new name{"propext"};
g_to_pexpr = new name{"toPexpr"};
g_quot_mk = new name{"Quot", "mk"};
@ -513,11 +513,11 @@ void initialize_constants() {
g_rfl = new name{"rfl"};
g_scope_trace = new name{"scopeTrace"};
g_set_of = new name{"setOf"};
g_psigma = new name{"Psigma"};
g_psigma_cases_on = new name{"Psigma", "casesOn"};
g_psigma_mk = new name{"Psigma", "mk"};
g_psigma_fst = new name{"Psigma", "fst"};
g_psigma_snd = new name{"Psigma", "snd"};
g_psigma = new name{"PSigma"};
g_psigma_cases_on = new name{"PSigma", "casesOn"};
g_psigma_mk = new name{"PSigma", "mk"};
g_psigma_fst = new name{"PSigma", "fst"};
g_psigma_snd = new name{"PSigma", "snd"};
g_singleton = new name{"singleton"};
g_sizeof = new name{"sizeof"};
g_sorry_ax = new name{"sorryAx"};
@ -537,10 +537,10 @@ void initialize_constants() {
g_subtype_mk = new name{"Subtype", "mk"};
g_subtype_val = new name{"Subtype", "val"};
g_subtype_rec = new name{"Subtype", "rec"};
g_psum = new name{"Psum"};
g_psum_cases_on = new name{"Psum", "casesOn"};
g_psum_inl = new name{"Psum", "inl"};
g_psum_inr = new name{"Psum", "inr"};
g_psum = new name{"PSum"};
g_psum_cases_on = new name{"PSum", "casesOn"};
g_psum_inl = new name{"PSum", "inl"};
g_psum_inr = new name{"PSum", "inr"};
g_tactic = new name{"tactic"};
g_tactic_try = new name{"tactic", "try"};
g_tactic_triv = new name{"tactic", "triv"};

View file

@ -206,14 +206,14 @@ Or
outParam
pexpr
pexpr.subst
Punit
Punit.casesOn
Punit.star
PUnit
PUnit.casesOn
PUnit.star
Prod.mk
Pprod
Pprod.mk
Pprod.fst
Pprod.snd
PProd
PProd.mk
PProd.fst
PProd.snd
propext
toPexpr
Quot.mk
@ -224,11 +224,11 @@ repr
rfl
scopeTrace
setOf
Psigma
Psigma.casesOn
Psigma.mk
Psigma.fst
Psigma.snd
PSigma
PSigma.casesOn
PSigma.mk
PSigma.fst
PSigma.snd
singleton
sizeof
sorryAx
@ -248,10 +248,10 @@ Subtype
Subtype.mk
Subtype.val
Subtype.rec
Psum
Psum.casesOn
Psum.inl
Psum.inr
PSum
PSum.casesOn
PSum.inl
PSum.inr
tactic
tactic.try
tactic.triv

View file

@ -5,6 +5,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#pragma once
#pragma clang diagnostic ignored "-Wreturn-std-move"
#include <utility>
#include <algorithm>
#include "runtime/optional.h"