@@ -137,37 +137,16 @@ to find candidate lemmas.
137137
138138open LazyDiscrTree (InitEntry findMatches)
139139
140- /-- When conclusion is fvar-headed, create an entry keyed by the first concrete argument.
141- For `motive (ite c t e)`, creates entry with key `.const ite 4`.
142- This enables `exact?` to find "eliminator-style" theorems like `iteInduction`. -/
143- private def getFirstArgEntry (type : Expr) (value : Name × DeclMod) :
144- MetaM (Option (InitEntry (Name × DeclMod))) := do
145- let type ← DiscrTree.reduceDT type true
146- let fn := type.getAppFn
147- if !fn.isFVar then return none
148- let args := type.getAppArgs
149- if args.isEmpty then return none
150- let firstArg := args[0 ]!
151- let firstArg ← DiscrTree.reduceDT firstArg false
152- let argFn := firstArg.getAppFn
153- if !argFn.isConst then return none
154- some <$> InitEntry.fromExpr firstArg value
155-
156140private def addImport (name : Name) (constInfo : ConstantInfo) :
157141 MetaM (Array (InitEntry (Name × DeclMod))) :=
158142 -- Don't report lemmas from metaprogramming namespaces.
159143 if name.isMetaprogramming then return #[] else
160144 forallTelescope constInfo.type fun _ type => do
161145 let e ← InitEntry.fromExpr type (name, DeclMod.none)
162- let mut a := #[e]
163- -- If root key is star (fvar-headed), also index by argument structure
164- if e.key == .star then
165- if let some argEntry ← getFirstArgEntry type (name, DeclMod.none) then
166- a := a.push argEntry
167146 if e.key == .const ``Iff 2 then
168- a := a.push ( ← e.mkSubEntry 0 (name, DeclMod.mp))
169- a := a.push (← e.mkSubEntry 1 (name, DeclMod.mpr))
170- pure a
147+ return #[e, ← e.mkSubEntry 0 (name, DeclMod.mp), ← e.mkSubEntry 1 (name, DeclMod.mpr)]
148+ else
149+ return #[e]
171150
172151/-- Stores import discrimination tree. -/
173152private def LibSearchState := IO.Ref (Option (LazyDiscrTree (Name × DeclMod)))
0 commit comments