@@ -13,12 +13,15 @@ let mk_lemma_type_ensures bi ps_term pre_term x_term ctors =
1313 let ( ctor_name , ctor_type ) = c in
1414 let binders , _ = collect_arr_bs ctor_type in
1515 let branch_pattern =
16- Pat_Cons ( pack_fv ctor_name ) None (
17- Tactics.Util. map ( fun b ->
18- let b_view = inspect_binder b in
19- ( Pat_Var ( bv_of_binder b ) ( seal ( type_of_binder b )), not ( Q_Explicit ? b_view . binder_qual ))
20- ) binders
21- )
16+ Pat_Cons {
17+ head = ( pack_fv ctor_name );
18+ univs = None ;
19+ subpats = (
20+ Tactics.Util. map ( fun ( b : binder ) ->
21+ ( Pat_Var { v = b ; sort = ( seal b . sort ); }, not ( Q_Explicit ? b . qual ))
22+ ) binders
23+ );
24+ }
2225 in
2326 if GenerateParser. is_open_ctor c then
2427 ( branch_pattern , (` True ))
@@ -54,15 +57,15 @@ let mk_lemma_type opt_concrete_bi type_unapplied params ctors =
5457 let ( bi , parser_params ) = GenerateParser. get_bytes_impl_and_parser_params opt_concrete_bi params in
5558 let ( bytes_term , bytes_like_term ) = bi in
5659 let ( ps_term , _ ) = GenerateParser. parser_from_type bi type_applied in
57- let pre_bv = fresh_bv_named " pre" in
58- let pre_term = pack ( Tv_Var pre_bv ) in
59- let x_bv = fresh_bv_named " x" in
60- let x_term = pack ( Tv_Var x_bv ) in
60+ let pre_binder = fresh_binder_named " pre" (` bytes_compatible_pre (`# bytes_term ) #(`# bytes_like_term )) in
61+ let pre_term = pack ( Tv_Var pre_binder ) in
62+ let x_binder = fresh_binder_named " x" type_applied in
63+ let x_term = pack ( Tv_Var x_binder ) in
6164 let lemma_requires = (` True ) in
6265 let lemma_ensures = mk_lemma_type_ensures bi ps_term pre_term x_term ctors in
6366 let lemma_smtpat = mk_lemma_type_smtpat ps_term pre_term x_term in
6467 let eff = pack_comp ( C_Lemma lemma_requires (`( fun () -> (`# lemma_ensures ))) (`([ smt_pat (`# lemma_smtpat )]))) in
65- mk_arr ( parser_params @ [ mk_binder pre_bv (` bytes_compatible_pre (`# bytes_term ) #(`# bytes_like_term )); mk_binder x_bv type_applied ]) eff
68+ mk_arr ( parser_params @ [ pre_binder ; x_binder ]) eff
6669
6770val apply_propositional_extensionality : p1 : prop -> p2 : prop -> squash ( p1 <==> p2 ) -> squash ( p1 == p2 )
6871let apply_propositional_extensionality p1 p2 _ = FStar.PropositionalExtensionality. apply p1 p2
@@ -98,10 +101,10 @@ let simplify_is_well_formed_lemma () =
98101 smt ()
99102 else (
100103 //Remove garbage from environment
101- Tactics.Util. iter ( fun b ->
102- try clear b
103- with _ -> ()
104- ) ( binders_of_env ( cur_env ()));
104+ // Tactics.Util.iter (fun b ->
105+ // try clear b
106+ // with _ -> ()
107+ // ) (binders_of_env (cur_env()));
105108
106109 //Retrieve the parser and value to unfold / destruct
107110 let ( ps_term , x_term ) =
@@ -190,12 +193,12 @@ let gen_is_well_formed_lemma_def type_fv =
190193 in
191194 let opt_concrete_bi = GenerateParser. get_optional_concrete_bytes_impl type_declaration in
192195 match inspect_sigelt type_declaration with
193- | Sg_Inductive name [] params typ constructors -> (
196+ | Sg_Inductive { nm = name ; univs = []; params ; typ ; ctors = constructors ;} -> (
194197 let lemma_type = mk_lemma_type opt_concrete_bi type_fv params constructors in
195198 let lemma_val = mk_lemma_val lemma_type in
196199 ( lemma_type , lemma_val )
197200 )
198- | Sg_Inductive _ _ _ _ _ -> fail " gen_is_well_formed_lemma_def: higher order types are not supported"
201+ | Sg_Inductive _ -> fail " gen_is_well_formed_lemma_def: higher order types are not supported"
199202 | _ -> fail " gen_is_well_formed_lemma_def: only inductives are supported"
200203
201204val gen_is_well_formed_lemma : term -> Tac decls
@@ -204,10 +207,10 @@ let gen_is_well_formed_lemma type_fv =
204207 let lemma_name = List.Tot. snoc ( moduleof ( top_env ()), " ps_" ^ ( last type_name ) ^ " _is_well_formed" ) in
205208 let ( lemma_type , lemma_val ) = gen_is_well_formed_lemma_def type_fv in
206209 //dump (term_to_string lemma_type);
207- let lemma_letbinding = pack_lb ( {
210+ let lemma_letbinding = {
208211 lb_fv = pack_fv lemma_name ;
209212 lb_us = [];
210213 lb_typ = lemma_type ;
211214 lb_def = lemma_val ;
212- }) in
213- [ pack_sigelt ( Sg_Let false [ lemma_letbinding ])]
215+ } in
216+ [ pack_sigelt ( Sg_Let { isrec = false ; lbs = [ lemma_letbinding ];} )]
0 commit comments