diff -r 06e6f352df1b -r 69cee87927f0 src/HOL/Transitive_Closure.thy --- a/src/HOL/Transitive_Closure.thy Fri Mar 30 00:01:30 2012 +0100 +++ b/src/HOL/Transitive_Closure.thy Fri Mar 30 09:04:29 2012 +0200 @@ -710,14 +710,24 @@ overloading relpow == "compow :: nat \ ('a \ 'a) set \ ('a \ 'a) set" + relpowp == "compow :: nat \ ('a \ 'a \ bool) \ ('a \ 'a \ bool)" begin primrec relpow :: "nat \ ('a \ 'a) set \ ('a \ 'a) set" where "relpow 0 R = Id" | "relpow (Suc n) R = (R ^^ n) O R" +primrec relpowp :: "nat \ ('a \ 'a \ bool) \ ('a \ 'a \ bool)" where + "relpowp 0 R = HOL.eq" + | "relpowp (Suc n) R = (R ^^ n) OO R" + end +lemma relpowp_relpow_eq [pred_set_conv]: + fixes R :: "'a rel" + shows "(\x y. (x, y) \ R) ^^ n = (\x y. (x, y) \ R ^^ n)" + by (induct n) (simp_all add: rel_compp_rel_comp_eq) + text {* for code generation *} definition relpow :: "nat \ ('a \ 'a) set \ ('a \ 'a) set" where