Skip to content

Commit b4bcc99

Browse files
committed
refactor: avoid using LocalDecl constructors directly
This PR makes changes for compatibility with leanprover/lean4#8804. The key difference is that `nondep := true` should be treated as a cdecl. The `LocalDecl.isLet` will return false for such ldecls.
1 parent c3a19fa commit b4bcc99

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

Aesop/RuleTac/GoalDiff.lean

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ protected def GoalDiff.empty (oldGoal newGoal : MVarId) : GoalDiff := {
6565
def isRPINFEqual (goal₁ goal₂ : MVarId) (e₁ e₂ : Expr) : BaseM Bool :=
6666
return (← goal₁.withContext $ rpinf e₁) == (← goal₂.withContext $ rpinf e₂)
6767

68-
def isRPINFEqualLDecl (goal₁ goal₂ : MVarId) :
69-
(ldecl₁ ldecl₂ : LocalDecl) → BaseM Bool
70-
| .cdecl (type := type₁) .., .cdecl (type := type₂) .. =>
71-
isRPINFEqual goal₁ goal₂ type₁ type
72-
| .ldecl (type := type₁) (value := value₁) .., .ldecl (type := type₂) (value := value₂) .. =>
73-
isRPINFEqual goal₁ goal₂ type₁ type <&&>
74-
isRPINFEqual goal₁ goal₂ value₁ value
68+
def isRPINFEqualLDecl (goal₁ goal₂ : MVarId) (ldecl₁ ldecl₂ : LocalDecl) : BaseM Bool :=
69+
match ldecl₁.isLet, ldecl₂.isLet with
70+
| false, false =>
71+
isRPINFEqual goal₁ goal₂ ldecl₁.type ldecl₂.type
72+
| true, true =>
73+
isRPINFEqual goal₁ goal₂ ldecl₁.type ldecl₂.type <&&>
74+
isRPINFEqual goal₁ goal₂ ldecl₁.value ldecl₂.value
7575
| _, _ => return false
7676

7777
def getNewFVars (oldGoal newGoal : MVarId) (oldLCtx newLCtx : LocalContext) :

Aesop/Util/EqualUpToIds.lean

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -281,19 +281,18 @@ mutual
281281
| _, _ => return false
282282

283283
@[specialize]
284-
unsafe def localDeclsEqualUpToIdsCore :
285-
LocalDecl → LocalDecl → ReaderT GoalContext EqualUpToIdsM Bool
286-
| .cdecl _ _ userName₁ type₁ bi₁ kind₁,
287-
.cdecl _ _ userName₂ type₂ bi₂ kind₂ =>
288-
pure (namesEqualUpToMacroScopes userName₁ userName₂ && bi₁ == bi₂ &&
289-
kind₁ == kind₂) <&&>
290-
exprsEqualUpToIdsCore₁ type₁ type₂
291-
| .ldecl _ _ userName₁ type₁ v₁ _ kind₁,
292-
.ldecl _ _ userName₂ type₂ v₂ _ kind₂ =>
293-
pure (namesEqualUpToMacroScopes userName₁ userName₂ &&
294-
kind₁ == kind₂) <&&>
295-
exprsEqualUpToIdsCore₁ type₁ type₂ <&&>
296-
exprsEqualUpToIdsCore₁ v₁ v₂
284+
unsafe def localDeclsEqualUpToIdsCore (ldecl₁ ldecl₂ : LocalDecl) :
285+
ReaderT GoalContext EqualUpToIdsM Bool :=
286+
match ldecl₁.isLet, ldecl₂.isLet with
287+
| false, false =>
288+
pure (namesEqualUpToMacroScopes ldecl₁.userName ldecl₂.userName && ldecl₁.binderInfo == ldecl₂.binderInfo &&
289+
ldecl₁.kind == ldecl₂.kind) <&&>
290+
exprsEqualUpToIdsCore₁ ldecl₁.type ldecl₂.type
291+
| true, true =>
292+
pure (namesEqualUpToMacroScopes ldecl₁.userName ldecl₂.userName &&
293+
ldecl₁.kind == ldecl₂.kind) <&&>
294+
exprsEqualUpToIdsCore₁ ldecl₁.type ldecl₂.type <&&>
295+
exprsEqualUpToIdsCore₁ ldecl₁.value ldecl₂.value
297296
| _, _ => return false
298297

299298
@[specialize]

0 commit comments

Comments
 (0)