Up to index of Isabelle/HOL/HOL-Algebra/example_Bicomplex
theory Acc_toolstheory Acc_tools imports Main begin section{*Definition of some results about the accesible part of a relation.*} term acc thm accp.intros lemma wf_imp_subset_accP[rule_format]: "wf {(y,x) . Q y ∧ Q x ∧ r y x} ==> (∀ y x. Q x --> r y x --> Q y) ==> Q x --> accp r x" apply (erule wf_induct) apply clarify apply (rule accp.intros) apply (simp (no_asm_use)) apply blast done lemma subset_accP_imp_wf: assumes Q_subset: "∀ x. Q x --> accp r x" shows "wf ({(a,b). Q b ∧ r a b})" proof - let ?s = "λ y x. Q x ∧ r y x" have "!! y x. ?s y x ==> r y x" by simp then have Q_sub_accP_s: "!! x. Q x ==> accp ?s x" apply (rule accp_subset[simplified le_fun_def le_bool_def, rule_format]) apply (auto simp add: Q_subset) done { fix x have "¬ (Q x) ==> accp ?s x" apply (rule accp.intros) apply auto done with Q_sub_accP_s have "accp ?s x" by auto } note accP_univ = this show ?thesis apply (rule accp_wfPI[simplified wfP_def]) apply (simp add: accP_univ) done qed lemma downchain_contra_imp_subset_accP: assumes downchain:"!! f. (!! i. Q (f i)) ==> (!! i. r (f (Suc i)) (f i)) ==> False" and downclosed: "!! y x. [|Q x; r y x|] ==> Q y" shows "Q x ==> accp r x" apply (rule wf_imp_subset_accP[where Q=Q]) prefer 3 apply simp prefer 2 apply (rule_tac y=y and x=xa in downclosed) apply simp_all apply (simp add: wf_iff_no_infinite_down_chain) apply (insert downchain) apply blast done lemma accP_subset_induct: assumes Q_subset: "∀ x. Q x --> accp r x" assumes Q_downward: "∀ x y. Q x --> r y x --> Q y" assumes Q_a: "Q a" assumes Q_induct: "!! x. Q x ==> ∀ y. r y x --> P y ==> P x" shows "P a" proof - show ?thesis apply (rule_tac accp_subset_induct[where x=a and D=Q and R=r]) apply (simp add: le_fun_def Q_subset le_bool_def) apply (auto simp add: Q_a Q_subset) apply (erule Q_downward[rule_format]) apply simp apply (erule Q_induct[rule_format]) apply simp done qed end
lemma wf_imp_subset_accP:
[| wf {(y, x). Q y ∧ Q x ∧ r y x}; !!y x. [| Q x; r y x |] ==> Q y; Q x |]
==> accp r x
lemma subset_accP_imp_wf:
∀x. Q x --> accp r x ==> wf {(a, b). Q b ∧ r a b}
lemma downchain_contra_imp_subset_accP:
[| !!f. [| !!i. Q (f i); !!i. r (f (Suc i)) (f i) |] ==> False;
!!y x. [| Q x; r y x |] ==> Q y; Q x |]
==> accp r x
lemma accP_subset_induct:
[| ∀x. Q x --> accp r x; ∀x y. Q x --> r y x --> Q y; Q a;
!!x. [| Q x; ∀y. r y x --> P y |] ==> P x |]
==> P a