fix: ensure a local instance is not registered multiple times (#4210)
closes #4203
This commit is contained in:
parent
489d2d11ec
commit
3cb6eb0ae6
2 changed files with 31 additions and 1 deletions
|
|
@ -1446,7 +1446,9 @@ def withLocalInstancesImp (decls : List LocalDecl) (k : MetaM α) : MetaM α :=
|
|||
for decl in decls do
|
||||
unless decl.isImplementationDetail do
|
||||
if let some className ← isClass? decl.type then
|
||||
localInsts := localInsts.push { className, fvar := decl.toExpr }
|
||||
-- Ensure we don't add the same local instance multiple times.
|
||||
unless localInsts.any fun localInst => localInst.fvar.fvarId! == decl.fvarId do
|
||||
localInsts := localInsts.push { className, fvar := decl.toExpr }
|
||||
if localInsts.size == size then
|
||||
k
|
||||
else
|
||||
|
|
|
|||
28
tests/lean/run/4203.lean
Normal file
28
tests/lean/run/4203.lean
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
class Fintype (α : Type u) where
|
||||
|
||||
class Preorder (α : Type u) extends LT α, LE α where
|
||||
lt := fun a b => a ≤ b ∧ ¬b ≤ a
|
||||
|
||||
structure Mappish (dIn dOut : Type u) [Fintype dIn] [Fintype dOut] where
|
||||
k : Nat
|
||||
|
||||
variable {dIn dOut dOut₂ : Type} [Fintype dIn] [Fintype dOut] [Fintype dOut₂]
|
||||
|
||||
def IsGood [DecidableEq dOut] [DecidableEq dOut₂] (Λ : Mappish dIn dOut) (Λ₂ : Mappish dIn dOut₂) : Prop :=
|
||||
∃ (D : Mappish dOut (dOut₂)), D.k = Λ.k + Λ₂.k
|
||||
|
||||
/--
|
||||
error: failed to synthesize
|
||||
Fintype v
|
||||
use `set_option diagnostics true` to get diagnostic information
|
||||
-/
|
||||
#guard_msgs in
|
||||
def MappishOrder [DecidableEq dIn] : Preorder
|
||||
(Σ dOut : Sigma (fun t ↦ Fintype t × DecidableEq t), let fin := dOut.snd.1; Mappish dIn dOut.fst) where
|
||||
le Λ₁ Λ₂ := by
|
||||
let u := Λ₁.fst.fst;
|
||||
let v := Λ₂.fst.fst;
|
||||
let ⟨w,x⟩ := Λ₁.fst.snd;
|
||||
let ⟨y,z⟩ := Λ₂.fst.snd;
|
||||
clear y;
|
||||
exact @IsGood dIn v u _ _ _ _ _ Λ₂.snd Λ₁.snd
|
||||
Loading…
Add table
Reference in a new issue