Up to index of Isabelle/HOL/HOL-Algebra/example_Bicomplex
theory Cycletheory Cycle imports Main
begin
constdefs
closed :: "'a set => ('a => 'a) => bool"
"closed A f ≡ ∀ x ∈ A. f x ∈ A"
constdefs
cyclic :: "'a set => ('a => 'a) => bool"
"cyclic A f ≡ ∀ d ∈ A. ∃ n. n > 0 ∧ (f^n) d = d"
constdefs
cyclic_equiv :: "'a set => ('a => 'a) => ('a × 'a) set"
"cyclic_equiv A f ≡ { (a,b) . a ∈ A ∧ b ∈ A ∧ (? n. (f^n) a = b) }"
lemma refl_cyclic_equiv: "refl A (cyclic_equiv A f)"
apply (auto simp add: cyclic_equiv_def refl_def)
apply (rule exI[where x="0"])
apply simp
done
lemma archimedian_law: "(m::nat) > 0 ==> ? q. n < q*m"
apply (induct n)
apply auto
apply (rule_tac x="q+1" in exI)
apply simp
done
lemma cyclic_wrap:
assumes c: "cyclic A f"
assumes x: "x ∈ A"
shows "? n'. (f^n') ((f^n) x) = x"
proof -
from c x have "? m. m > 0 ∧ (f^m)(x) = x" by (auto simp add: Ball_def cyclic_def)
then obtain m where m: "m > 0 ∧ (f^m)(x) = x" ..
with archimedian_law have "? q. n < q*m" by auto
then obtain q where "n < q*m" ..
then have q: "q*m - n + n = q * m" by simp
show "? n'. (f^n')((f^n) x) = x"
apply (rule exI[where x="q*m-n"])
apply (simp only: o_apply[where f="f ^ (q * m - n)" and g="(f ^ n)", symmetric] funpow_add[symmetric] q)
apply (induct q)
apply (simp_all add: funpow_add m)
done
qed
lemma sym_cyclic_equiv: "cyclic A f ==> sym (cyclic_equiv A f)"
by (auto simp add: sym_def cyclic_equiv_def cyclic_wrap)
lemma trans_cyclic_equiv: "trans (cyclic_equiv A f)"
apply (auto simp add: cyclic_equiv_def trans_def)
apply (rule_tac x="na+n" in exI)
apply (simp add: funpow_add)
done
lemma "cyclic A f ==> equiv A (cyclic_equiv A f)"
by (simp add: equiv_def refl_cyclic_equiv sym_cyclic_equiv trans_cyclic_equiv)
constdefs
"cyclic_on A f ≡ closed A f ∧ cyclic A f"
constdefs
"representing A f R ≡ closed A f ∧ cyclic A f ∧ R ⊆ A ∧ (∀ x y. (x ∈ R ∧ y ∈ R ∧ (∃ n. (f^n) (x) = y)) --> x = y) ∧ A = { (f^n) (x) | n x. x ∈ R }"
end
lemma refl_cyclic_equiv:
refl A (cyclic_equiv A f)
lemma archimedian_law:
0 < m ==> ∃q. n < q * m
lemma cyclic_wrap:
[| cyclic A f; x ∈ A |] ==> ∃n'. (f ^ n') ((f ^ n) x) = x
lemma sym_cyclic_equiv:
cyclic A f ==> sym (cyclic_equiv A f)
lemma trans_cyclic_equiv:
trans (cyclic_equiv A f)
lemma
cyclic A f ==> equiv A (cyclic_equiv A f)