src/HOL/Data_Structures/Array_Braun.thy
changeset 69206 9660bbf5ce7e
parent 69145 806be481aa57
child 69232 2b913054a9cf
equal deleted inserted replaced
69205:8050734eee3e 69206:9660bbf5ce7e
   264 qed
   264 qed
   265 
   265 
   266 
   266 
   267 subsection "Faster"
   267 subsection "Faster"
   268 
   268 
   269 fun braun_of_rec :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree" where
   269 fun braun_of_naive :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree" where
   270 "braun_of_rec x n = (if n=0 then Leaf
   270 "braun_of_naive x n = (if n=0 then Leaf
   271   else let m = (n-1) div 2
   271   else let m = (n-1) div 2
   272        in if odd n then Node (braun_of_rec x m) x (braun_of_rec x m)
   272        in if odd n then Node (braun_of_naive x m) x (braun_of_naive x m)
   273        else Node (braun_of_rec x (m + 1)) x (braun_of_rec x m))"
   273        else Node (braun_of_naive x (m + 1)) x (braun_of_naive x m))"
   274 
   274 
   275 fun braun2_of :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree * 'a tree" where
   275 fun braun2_of :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree * 'a tree" where
   276 "braun2_of x n = (if n = 0 then (Leaf, Node Leaf x Leaf)
   276 "braun2_of x n = (if n = 0 then (Leaf, Node Leaf x Leaf)
   277   else let (s,t) = braun2_of x ((n-1) div 2)
   277   else let (s,t) = braun2_of x ((n-1) div 2)
   278        in if odd n then (Node s x s, Node t x s) else (Node t x s, Node t x t))"
   278        in if odd n then (Node s x s, Node t x s) else (Node t x s, Node t x t))"