@@ -128,7 +128,7 @@ private def elimMutualRecursion (preDefs : Array PreDefinition) (xs : Array Expr
128
128
return (Array.zip preDefs valuesNew).map fun ⟨preDef, valueNew⟩ => { preDef with value := valueNew }
129
129
130
130
private def inferRecArgPos (preDefs : Array PreDefinition) (termArg?s : Array (Option TerminationArgument)) :
131
- M (Array Nat × Array PreDefinition) := do
131
+ M (Array Nat × ( Array PreDefinition) × Nat ) := do
132
132
withoutModifyingEnv do
133
133
preDefs.forM (addAsAxiom ·)
134
134
let fnNames := preDefs.map (·.declName)
@@ -154,7 +154,7 @@ private def inferRecArgPos (preDefs : Array PreDefinition) (termArg?s : Array (O
154
154
withErasedFVars (xs.extract numFixed xs.size |>.map (·.fvarId!)) do
155
155
let xs := xs[:numFixed]
156
156
let preDefs' ← elimMutualRecursion preDefs xs recArgInfos
157
- return (recArgPoss, preDefs')
157
+ return (recArgPoss, preDefs', numFixed )
158
158
159
159
def reportTermArg (preDef : PreDefinition) (recArgPos : Nat) : MetaM Unit := do
160
160
if let some ref := preDef.termination.terminationBy?? then
@@ -167,7 +167,7 @@ def reportTermArg (preDef : PreDefinition) (recArgPos : Nat) : MetaM Unit := do
167
167
168
168
def structuralRecursion (preDefs : Array PreDefinition) (termArg?s : Array (Option TerminationArgument)) : TermElabM Unit := do
169
169
let names := preDefs.map (·.declName)
170
- let ((recArgPoss, preDefsNonRec), state) ← run <| inferRecArgPos preDefs termArg?s
170
+ let ((recArgPoss, preDefsNonRec, numFixed ), state) ← run <| inferRecArgPos preDefs termArg?s
171
171
for recArgPos in recArgPoss, preDef in preDefs do
172
172
reportTermArg preDef recArgPos
173
173
state.addMatchers.forM liftM
@@ -190,7 +190,7 @@ def structuralRecursion (preDefs : Array PreDefinition) (termArg?s : Array (Opti
190
190
for theorems and definitions that are propositions.
191
191
See issue #2327
192
192
-/
193
- registerEqnsInfo preDef (preDefs.map (·.declName)) recArgPos
193
+ registerEqnsInfo preDef (preDefs.map (·.declName)) recArgPos numFixed
194
194
addSmartUnfoldingDef preDef recArgPos
195
195
markAsRecursive preDef.declName
196
196
applyAttributesOf preDefsNonRec AttributeApplicationTime.afterCompilation
0 commit comments