@@ -72,8 +72,7 @@ private def mkInjectiveTheoremTypeCore? (ctorVal : ConstructorVal) (useEq : Bool
7272 if useEq then
7373 mkArgs2 0 type #[] #[]
7474 else
75- withNewBinderInfos (params.map fun param => (param.fvarId!, BinderInfo.implicit)) <|
76- withNewBinderInfos (args1.map fun arg1 => (arg1.fvarId!, BinderInfo.implicit)) <|
75+ withImplicitBinderInfos (params ++ args1) do
7776 mkArgs2 0 type #[] #[]
7877
7978private def mkInjectiveTheoremType? (ctorVal : ConstructorVal) : MetaM (Option Expr) :=
@@ -189,9 +188,6 @@ def getCtorAppIndices? (ctorApp : Expr) : MetaM (Option (Array Expr)) := do
189188 if val.numIndices == 0 then return some #[]
190189 return some typeArgs[val.numParams...*].toArray
191190
192- private def mkArrows (hs : Array Expr) (type : Expr) : CoreM Expr := do
193- hs.foldrM (init := type) mkArrow
194-
195191private structure MkHInjTypeResult where
196192 thmType : Expr
197193 us : List Level
@@ -202,6 +198,7 @@ private def mkHInjType? (ctorVal : ConstructorVal) : MetaM (Option MkHInjTypeRes
202198 let type ← elimOptParam ctorVal.type
203199 forallBoundedTelescope type ctorVal.numParams fun params type =>
204200 forallTelescope type fun args1 _ => do
201+ withImplicitBinderInfos (params ++ args1) do
205202 let k (args2 : Array Expr) : MetaM (Option MkHInjTypeResult) := do
206203 let lhs := mkAppN (mkAppN (mkConst ctorVal.name us) params) args1
207204 let rhs := mkAppN (mkAppN (mkConst ctorVal.name us) params) args2
@@ -213,7 +210,7 @@ private def mkHInjType? (ctorVal : ConstructorVal) : MetaM (Option MkHInjTypeRes
213210 let some idxs2 ← getCtorAppIndices? rhs | return none
214211 -- **Note** : We dot not skip here because the type of `noConfusion` does not.
215212 let idxEqs ← mkEqs idxs1 idxs2 (skipIfPropOrEq := false )
216- let result ← mkArrows idxEqs result
213+ let result ← mkArrowN idxEqs result
217214 let thmType ← mkForallFVars params (← mkForallFVars args1 (← mkForallFVars args2 result))
218215 return some { thmType, us, numIndices := idxs1.size }
219216 else
@@ -226,9 +223,7 @@ private def mkHInjType? (ctorVal : ConstructorVal) : MetaM (Option MkHInjTypeRes
226223 mkArgs2 (i + 1 ) (b.instantiate1 arg2) (args2.push arg2)
227224 else
228225 k args2
229- withNewBinderInfos (params.map fun param => (param.fvarId!, BinderInfo.implicit)) <|
230- withNewBinderInfos (args1.map fun arg1 => (arg1.fvarId!, BinderInfo.implicit)) <|
231- mkArgs2 0 type #[]
226+ mkArgs2 0 type #[]
232227
233228private def failedToGenHInj (ctorVal : ConstructorVal) : MetaM α :=
234229 throwError "failed to generate heterogeneous injectivity theorem for `{ctorVal.name}`"
0 commit comments