Skip to content

Commit

Permalink
trying to address levels: (probably) infinite loop in whnf, isDefEq?
Browse files Browse the repository at this point in the history
  • Loading branch information
goens committed Jan 24, 2025
1 parent b9eb0d9 commit 54ec708
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
12 changes: 7 additions & 5 deletions Lean/Egg/Core/Gen/StructureProjs.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ open Lean Syntax
structure RawStructProjInfo where
ctor : Name
params : Nat
levels : List Name
levels : List Level
projs : Array Name

private def getStructureCtorAndProjs (structName : Name) : MetaM RawStructProjInfo := do --Elab.Command.CommandElabM Unit := do
private def getStructureCtorAndProjs (structName : Name) :
MetaM RawStructProjInfo := do
let env ← getEnv
match env.find? structName with
| none => throwError s!"Structure {structName} not found"
Expand All @@ -23,8 +24,9 @@ private def getStructureCtorAndProjs (structName : Name) : MetaM RawStructProjIn
--logInfo s!"Constructor: {ctorVal.name}"
let projs := structInfo.fieldNames.map
fun nm => structInfo.structName.append nm
let levels := ctorVal.levelParams.map mkLevelParam
return {ctor := ctorVal.name, params := ctorVal.numParams,
levels := ctorVal.levelParams, projs := projs}
levels := levels, projs := projs}
| _ => throwError s!"{structName} is not a structure"

open Egg
Expand All @@ -48,10 +50,10 @@ private def buildStructureProjEqns (structName : Name) (cfg : Rewrite.Config) :
return acc.push mvar
let mvars ← rawInfo.projs.mapM
fun pr => Meta.mkFreshExprMVar none (userName := pr)
let ctorApp := mkAppN (mkConst rawInfo.ctor) (paramMvars ++ mvars)
let ctorApp := mkAppN (mkConst rawInfo.ctor rawInfo.levels) (paramMvars ++ mvars)
let rawRws := rawInfo.projs.zipWithIndex.map
fun (proj, idx) =>
(mkAppN (mkConst proj) (paramMvars ++ #[ctorApp]), mvars[idx]!)
(mkAppN (mkConst proj rawInfo.levels) (paramMvars ++ #[ctorApp]), mvars[idx]!)
let mut rws := []
for (lhs, rhs) in rawRws do
let rw ← Rewrite.mkDefEq lhs rhs cfg
Expand Down
7 changes: 6 additions & 1 deletion Lean/Egg/Tests/WIP Projections.lean
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ example (x1 x2 : α) : x1 = (x1,x2).1 := by rfl

example (x1 x2 : α) : x1 = (x1,x2).1 := by egg


set_option trace.egg true in
example (x1 x2 : α) : x1 = Prod.fst (Prod.mk x1 x2) := by egg

set_option pp.raw true in
#eval (1,2)

#reduce Prod.fst (Prod.mk ?Prod.fst ?Prod.snd)

open Lean in
Expand Down Expand Up @@ -42,3 +44,6 @@ structure Foo where
y : Nat

example (m n : Nat) : { x := m, y := n : Foo}.x = m := by egg

set_option pp.raw true
#eval (1,2)

0 comments on commit 54ec708

Please sign in to comment.