Skip to content

Commit acc5038

Browse files
committed
refactor: add numFixed to Structural.EqnInfo
1 parent ba3565f commit acc5038

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

src/Lean/Elab/PreDefinition/Structural/Eqns.lean

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ namespace Structural
2121
structure EqnInfo extends EqnInfoCore where
2222
recArgPos : Nat
2323
declNames : Array Name
24+
numFixed : Nat
2425
deriving Inhabited
2526

2627
private partial def mkProof (declName : Name) (type : Expr) : MetaM Expr := do
@@ -81,9 +82,11 @@ def mkEqns (info : EqnInfo) : MetaM (Array Name) :=
8182

8283
builtin_initialize eqnInfoExt : MapDeclarationExtension EqnInfo ← mkMapDeclarationExtension
8384

84-
def registerEqnsInfo (preDef : PreDefinition) (declNames : Array Name) (recArgPos : Nat) : CoreM Unit := do
85+
def registerEqnsInfo (preDef : PreDefinition) (declNames : Array Name) (recArgPos : Nat)
86+
(numFixed : Nat) : CoreM Unit := do
8587
ensureEqnReservedNamesAvailable preDef.declName
86-
modifyEnv fun env => eqnInfoExt.insert env preDef.declName { preDef with recArgPos, declNames }
88+
modifyEnv fun env => eqnInfoExt.insert env preDef.declName
89+
{ preDef with recArgPos, declNames, numFixed }
8790

8891
def getEqnsFor? (declName : Name) : MetaM (Option (Array Name)) := do
8992
if let some info := eqnInfoExt.find? (← getEnv) declName then

src/Lean/Elab/PreDefinition/Structural/Main.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ private def elimMutualRecursion (preDefs : Array PreDefinition) (xs : Array Expr
128128
return (Array.zip preDefs valuesNew).map fun ⟨preDef, valueNew⟩ => { preDef with value := valueNew }
129129

130130
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
132132
withoutModifyingEnv do
133133
preDefs.forM (addAsAxiom ·)
134134
let fnNames := preDefs.map (·.declName)
@@ -154,7 +154,7 @@ private def inferRecArgPos (preDefs : Array PreDefinition) (termArg?s : Array (O
154154
withErasedFVars (xs.extract numFixed xs.size |>.map (·.fvarId!)) do
155155
let xs := xs[:numFixed]
156156
let preDefs' ← elimMutualRecursion preDefs xs recArgInfos
157-
return (recArgPoss, preDefs')
157+
return (recArgPoss, preDefs', numFixed)
158158

159159
def reportTermArg (preDef : PreDefinition) (recArgPos : Nat) : MetaM Unit := do
160160
if let some ref := preDef.termination.terminationBy?? then
@@ -167,7 +167,7 @@ def reportTermArg (preDef : PreDefinition) (recArgPos : Nat) : MetaM Unit := do
167167

168168
def structuralRecursion (preDefs : Array PreDefinition) (termArg?s : Array (Option TerminationArgument)) : TermElabM Unit := do
169169
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
171171
for recArgPos in recArgPoss, preDef in preDefs do
172172
reportTermArg preDef recArgPos
173173
state.addMatchers.forM liftM
@@ -190,7 +190,7 @@ def structuralRecursion (preDefs : Array PreDefinition) (termArg?s : Array (Opti
190190
for theorems and definitions that are propositions.
191191
See issue #2327
192192
-/
193-
registerEqnsInfo preDef (preDefs.map (·.declName)) recArgPos
193+
registerEqnsInfo preDef (preDefs.map (·.declName)) recArgPos numFixed
194194
addSmartUnfoldingDef preDef recArgPos
195195
markAsRecursive preDef.declName
196196
applyAttributesOf preDefsNonRec AttributeApplicationTime.afterCompilation

0 commit comments

Comments
 (0)