@@ -23,16 +23,29 @@ partial def realToFloat (e : Expr) : MetaM Expr := do
23
23
let translations β discrTree.getMatch e
24
24
for translation in translations do
25
25
let (mvars, _, pattern) β lambdaMetaTelescope translation.real
26
+ trace[Meta.debug] (s! "`real-to-float` trying:\n { pattern} \n { e} " )
27
+ trace[Meta.debug] (s! "`real-to-float` mvars:\n { mvars} " )
26
28
if β isDefEq pattern e then
27
- -- TODO: Search for conditions.
29
+ -- TODO: Search for conditions.
28
30
let args β mvars.mapM instantiateMVars
31
+ trace[Meta.debug] (s! "`real-to-float` matched:\n { pattern} \n { e} " )
29
32
return mkAppNBeta translation.float args
30
33
else
31
34
trace[Meta.debug] "`real-to-float` error: no match for \n {pattern} \n {e}"
32
35
match e with
33
36
| Expr.app a b => return mkApp (β realToFloat a) (β realToFloat b)
34
- | Expr.lam n ty b d => return mkLambda n d (β realToFloat ty) (β realToFloat b)
35
- | Expr.forallE n ty b d => return mkForall n d (β realToFloat ty) (β realToFloat b)
37
+ | Expr.lam n ty b d => do
38
+ withLocalDecl n d (β realToFloat ty) fun fvar => do
39
+ let b := b.instantiate1 fvar
40
+ let bF β realToFloat b
41
+ mkLambdaFVars #[fvar] bF
42
+ -- return mkLambda n d (β realToFloat ty) (β realToFloat b)
43
+ | Expr.forallE n ty b d => do
44
+ withLocalDecl n d (β realToFloat ty) fun fvar => do
45
+ let b := b.instantiate1 fvar
46
+ let bF β realToFloat b
47
+ mkForallFVars #[fvar] bF
48
+ -- return mkForall n d (β realToFloat ty) (β realToFloat b)
36
49
| Expr.mdata m e => return mkMData m (β realToFloat e)
37
50
| Expr.letE n ty t b _ => return mkLet n (β realToFloat ty) (β realToFloat t) (β realToFloat b)
38
51
| Expr.proj typeName idx struct => return mkProj typeName idx (β realToFloat struct)
@@ -183,7 +196,7 @@ addRealToFloat (i) : @instHDiv Real i :=
183
196
addRealToFloat (i) : @HPow.hPow Real Nat Real i :=
184
197
fun f n => Float.pow f (Float.ofNat n)
185
198
186
- addRealToFloat (i) : @HPow.hPow Real Real Real i :=
199
+ addRealToFloat (i) : @HPow.hPow.{ 0 , 0 , 0 } Real Real Real i :=
187
200
fun f n => Float.pow f n
188
201
189
202
addRealToFloat (Ξ²) (i) : @instHPow Real Ξ² i :=
@@ -217,7 +230,7 @@ addRealToFloat : @Real.log :=
217
230
Float.log
218
231
219
232
def Float.norm {n : β} (x : Fin n β Float) : Float :=
220
- Float.sqrt (Vec.Computable.sum (Vec.map (Float.pow Β· 2 ) x ))
233
+ Float.sqrt (Vec.Computable.sum (fun i => (Float.pow (x i) 2 ) ))
221
234
222
235
addRealToFloat (n) (i) : @Norm.norm.{0 } (Fin n β β) i :=
223
236
@Float.norm n
0 commit comments