Replace hardcoded universe levels with a proper level language and constraint solving

This commit is contained in:
2026-04-19 15:50:59 +00:00
parent 963c9f3e94
commit 28c9f2f9f8
8 changed files with 90 additions and 13 deletions
+4 -4
View File
@@ -67,7 +67,7 @@ mutual
let vy eval env y
let vp eval env p
vIdElim vm vr vy vp
| _, .univ i => pure (.univ i)
| _, .univ i => pure (.univ i.normalise)
| env, .letE _ t u => do
let vt eval env t
eval (vt :: env) u
@@ -187,7 +187,7 @@ mutual
let qu quote l u
pure (.id qa qt qu)
| _, .refl => pure .refl
| _, .univ i => pure (.univ i)
| _, .univ i => pure (.univ i.normalise)
end
private def andThen (lhs : EvalM Bool) (rhs : Unit EvalM Bool) : EvalM Bool := do
@@ -239,7 +239,7 @@ mutual
| _, _, _ => pure false
partial def conv : Lvl Val Val EvalM Bool
| _, .univ i, .univ j => pure (i == j)
| _, .univ i, .univ j => Level.eqv i j
| l, .pi a c, .pi a' c' =>
andThen (conv l a a') fun _ => do
let b cApp c (.neu (.var l))
@@ -299,7 +299,7 @@ mutual
end
partial def sub : Lvl Val Val EvalM Bool
| _, .univ i, .univ j => pure (i <= j)
| _, .univ i, .univ j => Level.leq i j
| l, .pi a c, .pi a' c' =>
andThen (sub l a' a) fun _ => do
let b cApp c (.neu (.var l))