Reminds be of an issue I filed really long time ago:
https://github.com/FStarLang/FStar/issues/121


On Mon, May 15, 2017 at 4:00 PM, Clément Pit-Claudel via fstar-club
<fstar-club@lists.gforge.inria.fr> wrote:
> Hi all,
>
> I'm having trouble with the (simplified) example below.  Is there a subtle 
> type-inference-related reason for the unfolding lemma to be unprovable?
>
> Thanks!
> Clément.
>
>     module Scratch
>
>     open FStar.List
>
>     assume val pairs_with_sum (n: nat) : list (p: (nat * nat){fst p + snd p 
> == n})
>
>     assume val product (#a #b: Type) (l1: list a) (l2: list b) : list (a * b)
>
>     type bin_tree =
>     | Leaf
>     | Branch of bin_tree * bin_tree
>
>     let rec size bt : nat =
>       match bt with
>       | Leaf -> 0
>       | Branch(l, r) -> 1 + size l + size r
>
>     let rec trees_of_size (s: nat) : list bin_tree =
>       if s = 0 then
>         [Leaf]
>       else
>         List.Tot.concatMap #(p: (nat * nat){(fst p) + (snd p) == s - 1})
>           (fun (s1, s2) -> List.Tot.map Branch (product (trees_of_size s1) 
> (trees_of_size s2)))
>           (pairs_with_sum (s - 1))
>
>     let unfold_tos (s: nat) :
>       Lemma (trees_of_size s ==
>              (if s = 0 then
>                [Leaf]
>              else
>                List.Tot.concatMap #(p: (nat * nat){(fst p) + (snd p) == s - 
> 1})
>                  (fun (s1, s2) -> List.Tot.map Branch (product (trees_of_size 
> s1) (trees_of_size s2)))
>                  (pairs_with_sum (s - 1)))) = ()
> _______________________________________________
> fstar-club mailing list
> fstar-club@lists.gforge.inria.fr
> https://lists.gforge.inria.fr/mailman/listinfo/fstar-club
_______________________________________________
fstar-club mailing list
fstar-club@lists.gforge.inria.fr
https://lists.gforge.inria.fr/mailman/listinfo/fstar-club

Reply via email to