@@ -120,14 +120,16 @@ fn cases_of_is_tree #t (x:tree_t t) (ft:T.tree t)
120120    T. Leaf  ->  { 
121121      unfold  ( is_tree  x  T. Leaf ); 
122122      fold  ( is_tree_cases  None  ft ); 
123+       rewrite  is_tree_cases  None  ft  as  is_tree_cases  x  ft ; 
123124    } 
124125    T. Node  data  ltree  rtree  ->  { 
125126      unfold  ( is_tree  x  ( T. Node  data  ltree  rtree )); 
126127      with  p  lct  rct .  _ ; 
127128      with  n .  assert  p  |->  n ; 
128129      with  l' .  rewrite  is_tree  lct  l'  as  is_tree  n . left  l' ; 
129130      with  r' .  rewrite  is_tree  rct  r'  as  is_tree  n . right  r' ; 
130-       fold  ( is_tree_cases  ( Some  p )  ( T. Node  data  ltree  rtree )) 
131+       fold  ( is_tree_cases  ( Some  p )  ft ); 
132+       rewrite  ( is_tree_cases  ( Some  p )  ft )  as  is_tree_cases  x  ft ; 
131133    } 
132134  } 
133135} 
@@ -240,8 +242,6 @@ fn node_cons (#t:Type0) (v:t) (ltree:tree_t t) (rtree:tree_t t) (#l:(T.tree t))
240242  ensures  is_tree  y  ( T. Node  v  l  r )  ** ( pure  ( Some ?  y )) 
241243{ 
242244  let  y  =  Box. alloc  {  data = v ;  left  = ltree ;  right  =  rtree  }; 
243-   rewrite  each  ltree  as  ({ data  =  v ;  left  =  ltree ;  right  =  rtree }). left  in  ( is_tree  ltree  l ); 
244-   rewrite  each  rtree  as  ({ data  =  v ;  left  =  ltree ;  right  =  rtree }). right  in  ( is_tree  rtree  r ); 
245245  intro_is_tree_node  ( Some  y )  y ; 
246246  Some  y 
247247} 
@@ -293,18 +293,12 @@ fn rec append_left (#t:Type0) (x:tree_t t) (v:t) (#ft:G.erased (T.tree t))
293293
294294      is_tree_case_some  ( Some  vl )  vl ; 
295295
296-       with  _node  _ltree  _rtree . _ ; 
297- 
298296      let  node  =  !vl ; 
299297
300298      let  left_new  =  append_left  node . left  v ; 
301299
302300      vl  :=  { node  with  left  =  left_new }; 
303301
304-       rewrite  each  left_new  as  ({  node  with  left  =  left_new  }). left  in  ( is_tree  left_new  (( T. append_left  ( reveal  _ltree )  v ))); 
305-       
306-       rewrite  each  node . right  as  ({  node  with  left  =  left_new  }). right  in  ( is_tree  node . right  _rtree ); 
307- 
308302      intro_is_tree_node  x  vl ; 
309303
310304      x 
@@ -344,18 +338,12 @@ fn rec append_right (#t:Type0) (x:tree_t t) (v:t) (#ft:G.erased (T.tree t))
344338    Some  np  ->  { 
345339      is_tree_case_some  ( Some  np )  np ; 
346340
347-       with  _node  _ltree  _rtree . _ ; 
348-       
349341      let  node  =  !np ; 
350342
351343      let  right_new  =  append_right  node . right  v ; 
352344
353345      np  :=  { node  with  right  =  right_new }; 
354346
355-       rewrite  each  right_new  as  ({  node  with  right  =  right_new  }). right  in  ( is_tree  right_new  (( T. append_right  ( reveal  _rtree )  v ))); 
356-       
357-       rewrite  each  node . left  as  ({ node  with  right  =  right_new }). left  in  ( is_tree  node . left  _ltree ); 
358-       
359347      intro_is_tree_node  x  np ; 
360348
361349      x 
0 commit comments