(* Author: Andreas Lochbihler, ETH Zurich
Author: Peter Gammie *)
section‹ The Bird tree ›
text‹
We define the Bird tree following cite‹"Hinze2009JFP"› and prove that it is a
permutation of the Stern-Brocot tree. As a corollary, we derive that the Bird tree also
contains all rational numbers in lowest terms exactly once. ›
lemma mirror_bird: "mirror bird = pure recip ♢ bird" (is"?lhs = ?rhs") proof(rule sym) let ?F = "λt. Node (1, 1) (map_tree succ (map_tree recip t)) (map_tree recip (map_tree succ t))" have *: "mirror bird = ?F (mirror bird)" by(rule tree.expand; simp add: mirror_ap_tree mirror_pure map_tree_ap_tree_pure_tree[symmetric]) show"t = mirror bird" when "t = ?F t"for t using that by corec_unique (fact *) show"pure recip ♢ bird = ?F (pure recip ♢ bird)" by(rule tree.expand; simp add: map_tree_ap_tree_pure_tree; applicative_lifting; simp add: split_beta) qed
primcorec even_odd_mirror :: "bool ==> 'a tree ==> 'a tree" where "∧even. root (even_odd_mirror even t) = root t"
| "∧even. left (even_odd_mirror even t) = even_odd_mirror (¬ even) (if even then right t else left t)"
| "∧even. right (even_odd_mirror even t) = even_odd_mirror (¬ even) (if even then left t else right t)"
definition even_mirror :: "'a tree ==> 'a tree" where"even_mirror = even_odd_mirror True"
definition odd_mirror :: "'a tree ==> 'a tree" where"odd_mirror = even_odd_mirror False"
lemma even_odd_mirror_pure [simp]: fixes even shows "even_odd_mirror even (pure_tree x) = pure_tree x" by(coinduction arbitrary: even) auto
lemma even_odd_mirror_ap_tree [simp]: fixes even shows "even_odd_mirror even (f ♢ x) = even_odd_mirror even f ♢ even_odd_mirror even x" by(coinduction arbitrary: even f x) auto
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.