diff --git a/library/init/core.lean b/library/init/core.lean index 79e989c94a..fd2501b1f4 100644 --- a/library/init/core.lean +++ b/library/init/core.lean @@ -573,6 +573,7 @@ attribute [elab_simple] bin_tree.node bin_tree.leaf /-- Like `by apply_instance`, but not dependent on the tactic framework. -/ @[reducible] def infer_instance {α : Type u} [i : α] : α := i +@[reducible, elab_simple] def infer_instance_as (α : Type u) [i : α] : α := i /- Boolean operators -/ diff --git a/library/init/lean/ir/ir.lean b/library/init/lean/ir/ir.lean index 33bbb1e3d9..72c9269efc 100644 --- a/library/init/lean/ir/ir.lean +++ b/library/init/lean/ir/ir.lean @@ -5,6 +5,7 @@ Authors: Leonardo de Moura -/ prelude import init.data.rbmap init.data.int init.control.state init.control.except init.control.combinators +import init.lean.name /- Missing @@ -34,15 +35,15 @@ inductive literal | float : string → literal -- for float/double literals def tag := uint16 -def var := string -def fid := string -def blockid := string +def var := name +def fid := name +def blockid := name instance var_has_lt : has_lt var := -show has_lt string, from infer_instance +show has_lt name, from name.has_lt_quick instance blockid_has_lt : has_lt blockid := -show has_lt string, from infer_instance +show has_lt name, from name.has_lt_quick def var_set := rbtree var (<) def blockid_set := rbtree blockid (<) diff --git a/library/init/lean/name.lean b/library/init/lean/name.lean index 92b99271ae..acbb1c28f6 100644 --- a/library/init/lean/name.lean +++ b/library/init/lean/name.lean @@ -80,6 +80,9 @@ instance has_decidable_eq : decidable_eq name protected def has_lt_quick : has_lt name := ⟨λ a b, name.quick_lt a b = tt⟩ +instance : decidable_rel (@has_lt.lt name name.has_lt_quick) := +infer_instance_as (decidable_rel (λ a b, name.quick_lt a b = tt)) + def to_string_with_sep (sep : string) : name → string | anonymous := "[anonymous]" | (mk_string anonymous s) := s