section‹Misc› theory OpenFlow_Helpers imports Main begin
lemma hrule: "(S = UNIV) = (∀x. x ∈ S)" by blast
subsection‹Single valuedness on lists›
lemma foldr_True_set: "foldr (λx. (∧) (f x)) l True = (∀x ∈ set l. f x)" by (induction l) simp_all
fun single_valued_code where "single_valued_code [] = True" | "single_valued_code (e#es) = (foldr (λx. (∧) (fst x ≠ fst e ∨ snd x = snd e)) es True ∧ single_valued_code es)" lemma single_valued_code_lam[code_unfold]: "single_valued (set r) = single_valued_code r" proof(induction r) case Nil show ?caseby simp next case (Cons e es) show ?case proof (rule iffI, goal_cases fwd bwd) case bwd have"single_valued (set es)"using Cons.IH conjunct2[OF bwd[unfolded single_valued_code.simps]] .. moreover have"∀x∈set es. fst x ≠ fst e ∨ snd x = snd e" using conjunct1[OF bwd[unfolded single_valued_code.simps(2)], unfolded foldr_True_set] . ultimately show ?caseunfolding single_valued_def by auto next case fwd have"single_valued (set es)"using fwd unfolding single_valued_def by simp with Cons.IH[symmetric] have"single_valued_code es" .. moreover have"∀x∈set es. fst x ≠ fst e ∨ snd x = snd e"using fwd unfolding single_valued_def by clarsimp from conjI[OF this calculation, unfolded foldr_True_set[symmetric]] show ?caseunfolding single_valued_code.simps . qed qed
lemma set_Cons: "e ∈ set (a # as) ⟷ (e = a ∨ e ∈ set as)"by simp
lemma list_all_map: "list_all f (map g l) = list_all (f ∘ g) l" unfolding comp_def by (simp add: list_all_length) (* by(induction l) simp_all *)
lemma distinct_2lcomprI: "distinct as ==> distinct bs ==> (∧a b e i. f a b = f e i ==> a = e ∧ b = i) ==> distinct [f a b. a ← as, b ← bs]" apply(induction as) apply(simp;fail) apply(clarsimp simp only: distinct.simps simp_thms list.map concat.simps map_append distinct_append) apply(rule)
subgoal apply(clarify;fail | subst distinct_map, rule)+ by (rule inj_onI) simp
subgoal by fastforce done
lemma distinct_3lcomprI: "distinct as ==> distinct bs ==> distinct cs ==> (∧a b c e i g. f a b c = f e i g ==> a = e ∧ b = i ∧ c = g) ==> distinct [f a b c. a ← as, b ← bs, c ← cs]" apply(induction as) apply(simp;fail) apply(clarsimp simp only: distinct.simps simp_thms list.map concat.simps map_append distinct_append) apply(rule) apply(rule distinct_2lcomprI; simp_all; fail) apply fastforce done
lemma inter_empty_fst2: "(λ(p, m, a). (p, m)) ` S ∩ (λ(p, m, a). (p, m)) ` T = {} ==> S ∩ T = {}"by blast
subsection‹Cardinality and Existence of Distinct Members›
lemma card1_eI: "1 ≤ card S ==>∃y S'. S = {y} ∪ S' ∧ y ∉ S'" by (metis One_nat_def card.infinite card_le_Suc_iff insert_is_Un leD zero_less_Suc) lemma card2_eI: "2 ≤ card S ==>∃x y. x ≠ y ∧ x ∈ S ∧ y ∈ S" proof goal_cases case (1) thenhave"1 ≤ card S"by simp note card1_eI[OF this] thenobtain x S' where xs: "S = {x} ∪ S' ∧ x ∉ S'"by presburger thenhave"1 ≤ card S'" by (metis 1 Suc_1 card.infinite card_insert_if finite_Un insert_is_Un le0 not_less_eq_eq) thenobtain y where"y ∈ S'"by fastforce thenshow ?caseusing xs by force qed lemma card3_eI: "3 ≤ card S ==>∃x y z. x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ x ∈ S ∧ y ∈ S" proof goal_cases case1 thenhave"2 ≤ card S"by simp note card2_eI[OF this] thenobtain x y S' where xs: "S = {x,y} ∪ S' ∧ x ∉ S' ∧ y ∉ S' ∧ x ≠ y" by (metis Set.set_insert Un_insert_left insert_eq_iff insert_is_Un) thenhave"1 ≤ card S'" using1by (metis One_nat_def Suc_leI Un_insert_left card_gt_0_iff insert_absorb numeral_3_eq_3 singleton_insert_inj_eq card.infinite card_insert_if finite_Un insert_is_Un le0 not_less_eq_eq) (* uuuh *) thenobtain z where"z ∈ S'"by fastforce thenshow ?caseusing xs by force qed
lemma card1_eE: "finite S ==>∃y. y ∈ S ==> 1 ≤ card S"using card_0_eq by fastforce lemma card2_eE: "finite S ==>∃x y. x ≠ y ∧ x ∈ S ∧ y ∈ S ==> 2 ≤ card S" using card1_eE card_Suc_eq card_insert_if by fastforce lemma card3_eE: "finite S ==>∃x y z. x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ x ∈ S ∧ y ∈ S ==> 3 ≤ card S" using card2_eE card_Suc_eq card_insert_if oops
lemma f_Img_ex_set: "{f x|x. P x} = f ` {x. P x}"by auto
lemma set_maps: "set (List.maps f a) = (∪a∈set a. set (f a))" by simp
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.