(* Title: Schutz_Spacetime/Util.thy Authors:RichardSchmoetten,JakePalmerandJacquesD.Fleuriot UniversityofEdinburgh,2021
*) theory Util imports Main
begin
text‹Some "utility" proofs -- little proofs that come in handy every now and then.›
text‹
We need this in order to obtain a natural number which can be passed to the ordering function,
distinct from two others, in the case of a finite set of events with cardinality a least 3. ›
lemma is_free_nat: assumes"(m::nat) < n" and"n < c" and"c ≥ 3" shows"∃k::nat. k < m ∨ (m < k ∧ k < n) ∨ (n < k ∧ k < c)" using assms by presburger
lemma card_subset: "[card Y = n; Y ⊆ X]==> card X ≥ n ∨ infinite X" using card_mono by blast
lemma card_subset_finite: "[finite X; card Y = n; Y ⊆ X]==> card X ≥ n" using card_subset by auto
lemma three_subset: "[x ≠ y; x ≠ z; y ≠ z; {x,y,z} ⊆ X]==> card X ≥ 3 ∨ infinite X" apply (case_tac "finite X") apply (auto simp : card_mono) apply (erule_tac Y = "{x,y,z}"in card_subset_finite) by auto
lemma three_in_set3: assumes"card X ≥ 3" obtains x y z where"x∈X"and"y∈X"and"z∈X"and"x≠y"and"x≠z"and"y≠z" using assms by (auto simp add: card_le_Suc_iff numeral_3_eq_3)
lemma card_Collect_nat: assumes"(j::nat)>i" shows"card {i..j} = j-i+1" using card_atLeastAtMost using Suc_diff_le assms le_eq_less_or_eq by presburger
lemma inf_3_elms: assumes"infinite X"shows"(∃x∈X. ∃y∈X. ∃z∈X. x ≠ y ∧ y ≠ z ∧ x ≠z)" proof - obtain x y where1: "x∈X""y∈X""y≠x" by (metis assms finite.emptyI finite.insertI rev_finite_subset singleton_iff subsetI) have"infinite (X-{x,y})" using infinite_remove by (simp add: assms) thenobtain z where2: "z∈X""x≠z""z≠y" using infinite_imp_nonempty by (metis Diff_eq_empty_iff insertCI subset_eq) show ?thesis using12by blast qed
lemma card_3_eq: "card X = 3 ⟷ (∃x y z. X={x,y,z} ∧ x ≠ y ∧ y ≠ z ∧ x ≠ z)"
(is"card X = 3 ⟷ ?card3 X") proof assume asm: "card X = 3"hence"card X ≥ 3"by simp thenobtain x y z where"x ≠ y ∧ y ≠ z ∧ x ≠ z""{x,y,z} ⊆ X" apply (simp add: eval_nat_numeral) by (auto simp add: card_le_Suc_iff) thus"?card3 X" using Finite_Set.card_subset_eq ‹card X = 3› apply (simp add: eval_nat_numeral) by (smt (verit, ccfv_threshold) ‹{x, y, z} ⊆ X› card.empty card.infinite card_insert_if
card_subset_eq empty_iff finite.emptyI insertE nat.distinct(1)) next show"?card3 X ==> card X = 3" by (smt (z3) card.empty card.insert eval_nat_numeral(2) finite.intros(1) finite_insert insertE
insert_absorb insert_not_empty numeral_3_eq_3 semiring_norm(26,27)) qed
lemma card_3_eq': "[card X = 3; card {a,b,c} = 3; {a,b,c} ⊆X]==> X = {a,b,c}" "[card X = 3; a ∈ X; b ∈ X; c ∈ X; a ≠ b; a ≠ c; b ≠ c]==> X = {a,b,c}" proof - show"[card X = 3; card {a,b,c} = 3; {a,b,c} ⊆X]==> X = {a,b,c}" by (metis card.infinite card_subset_eq zero_neq_numeral) thus"[card X = 3; a ∈ X; b ∈ X; c ∈ X; a ≠ b; a ≠ c; b ≠ c]==> X = {a,b,c}" by (meson card_3_dist empty_subsetI insert_subset) qed
lemma card_4_eq: "card X = 4 ⟷ (∃S1. ∃S2. ∃S3. ∃S4. X = {S1, S2, S3, S4} ∧ S1≠ S2∧ S1≠ S3∧ S1≠ S4∧ S2≠ S3∧ S2≠ S4∧ S3≠ S4)"
(is"card X = 4 ⟷ ?card4 X") proof assume"card X = 4" hence"card X ≥ 4"by auto thenobtain S1 S2 S3 S4where 0: "S1∈X ∧ S2∈X ∧ S3∈X ∧ S4∈X"and 1: "S1≠ S2∧ S1≠ S3∧ S1≠ S4∧ S2≠ S3∧ S2≠ S4∧ S3≠ S4" apply (simp add: eval_nat_numeral) by (auto simp add: card_le_Suc_iff) thenhave2: "{S1, S2, S3, S4} ⊆ X""card {S1, S2, S3, S4} = 4"by auto have"X = {S1, S2, S3, S4}" using Finite_Set.card_subset_eq ‹card X = 4› apply (simp add: eval_nat_numeral) by (smt (z3) ‹card X = 4›2 card.infinite card_subset_eq nat.distinct(1)) thus"?card4 X"using1by blast next show"?card4 X ==> card X = 4" by (smt (z3) card.empty card.insert eval_nat_numeral(2) finite.intros(1) finite_insert insertE
insert_absorb insert_not_empty numeral_3_eq_3 semiring_norm(26,27)) qed
text‹These lemmas make life easier with some of the ordering proofs.›
lemma less_3_cases: "n < 3 ==> n = 0 ∨ n = Suc 0 ∨ n = Suc (Suc 0)" by 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.