Closed catalin-hritcu closed 7 years ago
The minimal counterexample for this looks like this:
type knd =
| KType : knd
| KKArr : knd -> knd
val ktsubst_beta : knd -> Tot knd
let ktsubst_beta k = k
val tconsts : unit -> Tot knd
let tconsts () = KKArr KType
type kinding : k:knd -> Type =
| KConst : kinding (tconsts())
| KTApp : #k':knd -> hk1:kinding (KKArr k') -> kinding (ktsubst_beta k')
val k_foralle : u:unit -> Tot (kinding KType)
let k_foralle () = KTApp (* KType *) KConst
(* Problem: without the annotation and the explicit k' in KTApp
this causes "Unresolved implicit argument" *)
cf #227
As mentioned there, we are not yet doing full reduction, in particular, no delta steps when trying to unify expressions.
I've been putting off enhancing the expression reducer ... I guess I should just do it.
This problem appears in
micro-fstar.fst
in thek_foralle
proof. After a bit of local simplification the code looks like this:I've put a lot of effort into reproducing this in a smaller setting, but so far without any success. Basically the same code in
bug237.fst
works just fine.