(* Title: Relational Characterisation of Paths Author:WalterGuttmann,PeterHoefner Maintainer:WalterGuttmann<walter.guttmannatcanterbury.ac.nz> PeterHoefner<peterathoefner-online.de>
*)
section‹Relational Characterisation of Paths›
text‹
theory provides the relation-algebraic characterisations of paths, as defined in Sections 3--5 of cite‹"BerghammerFurusawaGuttmannHoefner2020"›. ›
lemma no_start_end_points_iff: "no_start_end_points x ⟷ no_start_points x ∧ no_end_points x" by fastforce
lemma has_start_end_points_iff: "has_start_end_points x ⟷ has_start_points x ∧ has_end_points x" by (metis inf_eq_top_iff)
lemma terminating_iff: "terminating x ⟷ backward_terminating x ∧ forward_terminating x" by simp
lemma finite_iff: "finite x ⟷ backward_finite x ∧ forward_finite x" by (simp add: sup_inf_distrib1 inf.boundedI)
lemma no_start_end_points_path_iff: "no_start_end_points_path x ⟷ no_start_points_path x ∧ no_end_points_path x" by fastforce
lemma has_start_end_points_path_iff: "has_start_end_points_path x ⟷ has_start_points_path x ∧ has_end_points_path x" using has_start_end_points_iff by blast
lemma terminating_path_iff: "terminating_path x ⟷ backward_terminating_path x ∧ forward_terminating_path x" by fastforce
lemma finite_path_iff: "finite_path x ⟷ backward_finite_path x ∧ forward_finite_path x" using finite_iff by fastforce
text‹Closure under converse›
lemma connected_conv: "connected x ⟷ connected (xT)" by (metis comp_assoc conv_add conv_contrav conv_iso conv_one star_conv)
lemma conv_many_strongly_connected: "many_strongly_connected x ⟷ many_strongly_connected (xT)" by fastforce
lemma conv_one_strongly_connected: "one_strongly_connected x ⟷ one_strongly_connected (xT)" by (metis comp_assoc conv_contrav conv_iso conv_one star_conv)
lemma conv_path: "path x ⟷ path (xT)" using connected_conv inj_p_fun path_def by fastforce
lemma conv_cycle: "cycle x ⟷ cycle (xT)" using conv_path by fastforce
lemma conv_no_start_points: "no_start_points x ⟷ no_end_points (xT)" by simp
lemma conv_no_start_end_points: "no_start_end_points x ⟷ no_start_end_points (xT)" by fastforce
lemma conv_has_start_points: "has_start_points x ⟷ has_end_points (xT)" by (metis comp_assoc conv_compl conv_contrav conv_invol conv_one)
lemma conv_has_start_end_points: "has_start_end_points x ⟷ has_start_end_points (xT)" by (metis comp_assoc conv_compl conv_contrav conv_invol conv_one inf_eq_top_iff)
lemma conv_backward_terminating: "backward_terminating x ⟷ forward_terminating (xT)" by (metis comp_assoc conv_compl conv_contrav conv_iso conv_one)
lemma conv_backward_finite: "backward_finite x ⟷ forward_finite (xT)" by (metis comp_assoc conv_add conv_compl conv_contrav conv_iso conv_one star_conv)
lemma conv_finite: "finite x ⟷ finite (xT)" by (metis finite_iff conv_backward_finite conv_invol)
lemma conv_no_start_points_path: "no_start_points_path x ⟷ no_end_points_path (xT)" using conv_path by fastforce
lemma conv_no_start_end_points_path: "no_start_end_points_path x ⟷ no_start_end_points_path (xT)" using conv_path by fastforce
lemma conv_has_start_points_path: "has_start_points_path x ⟷ has_end_points_path (xT)" using conv_has_start_points conv_path by fastforce
lemma conv_has_start_end_points_path: "has_start_end_points_path x ⟷ has_start_end_points_path (xT)" using conv_has_start_end_points conv_path by fastforce
lemma conv_backward_terminating_path: "backward_terminating_path x ⟷ forward_terminating_path (xT)" using conv_backward_terminating conv_path by fastforce
lemma conv_terminating_path: "terminating_path x ⟷ terminating_path (xT)" using conv_path conv_terminating by fastforce
lemma conv_backward_finite_path: "backward_finite_path x ⟷ forward_finite_path (xT)" using conv_backward_finite conv_path by fastforce
lemma conv_finite_path: "finite_path x ⟷ finite_path (xT)" using conv_finite conv_path by blast
text‹Equivalences for ‹connected››
lemma connected_iff2: assumes"is_inj x" and"is_p_fun x" shows"connected x ⟷ x;1;xT≤ x\<star> + xT\<star>" proof assume1: "connected x" have"x;1;xT≤ x;1;x;xT" by (metis conv_invol modular_var_3 vector_meet_comp_x') alsohave"... ≤ (x+ + xT\<star>);xT" using1 mult_isor star_star_plus by fastforce alsohave"... ≤ x\<star>;x;xT + xT\<star>" using join_isol star_slide_var by simp alsofrom assms(1) have"... ≤ x\<star> + xT\<star>" by (metis is_inj_def comp_assoc join_iso mult_1_right mult_isol) finallyshow"x;1;xT≤ x\<star> + xT\<star>" . next assume2: "x;1;xT≤ x\<star> + xT\<star>" have"x;1;x ≤ x;1;xT;x" by (simp add: modular_var_3 vector_meet_comp_x) alsohave"... ≤ (x\<star> + xT+);x" using2by (metis mult_isor star_star_plus sup_commute) alsohave"... ≤ x\<star> + xT\<star>;xT;x" using join_iso star_slide_var by simp alsofrom assms(2) have"... ≤ x\<star> + xT\<star>" by (metis comp_assoc is_p_fun_def join_isol mult_1_right mult_isol) finallyshow"connected x" . qed
lemma connected_iff8: "connected x ⟷ (x+)T;1;(x+)T≤ x\<star> + xT\<star>" by (metis connected_iff4 comp_assoc conv_contrav conv_invol conv_one plus_conv star_conv top_plus)
text‹Equivalences and implications for ‹many_strongly_connected››
lemma many_strongly_connected_iff_1: "many_strongly_connected x ⟷ xT≤ x\<star>" apply (rule iffI,simp) by (metis conv_invol conv_iso order.eq_iff star_conv star_invol star_iso)
lemma many_strongly_connected_iff_2: "many_strongly_connected x ⟷ xT≤ x+" proof assume as: "many_strongly_connected x" hence"xT≤ x\<star> ⋅ (-(1') + x)" by (metis many_strongly_connected_iff_1 loop_backward_forward inf_greatest) alsohave"... ≤ (x\<star> ⋅ -(1')) + (x\<star> ⋅ x)" by (simp add: inf_sup_distrib1) alsohave"... ≤ x+" by (metis as order.eq_iff mult_1_right mult_isol star_ref sup.absorb1 conv_invol eq_refl galois_1
inf.absorb_iff1 inf.commute star_unfoldl_eq sup_mono many_strongly_connected_iff_1) finallyshow"xT≤ x+" . next show"xT≤ x+==> many_strongly_connected x" using order_trans star_1l many_strongly_connected_iff_1 by blast qed
lemma many_strongly_connected_iff_3: "many_strongly_connected x ⟷ x ≤ xT\<star>" by (metis conv_invol many_strongly_connected_iff_1)
lemma many_strongly_connected_iff_4: "many_strongly_connected x ⟷ x ≤ xT+" by (metis conv_invol many_strongly_connected_iff_2)
lemma many_strongly_connected_iff_5: "many_strongly_connected x ⟷ x\<star>;xT≤ x+" by (metis comp_assoc conv_contrav conway.dagger_unfoldr_distr star_conv star_denest_var_2
star_invol star_trans_eq star_unfoldl_eq sup.boundedE many_strongly_connected_iff_2)
lemma many_strongly_connected_iff_6: "many_strongly_connected x ⟷ xT;x\<star> ≤ x+" by (metis dual_order.trans star_1l star_conv star_inductl_star star_invol star_slide_var
many_strongly_connected_iff_1 many_strongly_connected_iff_5)
lemma many_strongly_connected_iff_7: "many_strongly_connected x ⟷ xT+ = x+" by (metis order.antisym conv_invol star_slide_var star_unfoldl_eq many_strongly_connected_iff_5)
lemma many_strongly_connected_iff_5_eq: "many_strongly_connected x ⟷ x\<star>;xT = x+" by (metis order.refl star_slide_var many_strongly_connected_iff_5 many_strongly_connected_iff_7)
lemma many_strongly_connected_iff_6_eq: "many_strongly_connected x ⟷ xT;x\<star> = x+" using many_strongly_connected_iff_6 many_strongly_connected_iff_7 by force
lemma one_strongly_connected_implies_7_eq: assumes"one_strongly_connected x" shows"x;1;x = x+" using assms many_strongly_connected_iff_7 one_strongly_connected_iff one_strongly_connected_iff_3_eq by force
lemma one_strongly_connected_implies_8: assumes"one_strongly_connected x" shows"x;1;x ≤ x\<star>" using assms one_strongly_connected_iff by fastforce
lemma one_strongly_connected_iff_4: assumes"is_inj x" shows"one_strongly_connected x ⟷ xT;1;x ≤ x+" proof assume"one_strongly_connected x" thus"xT;1;x ≤ x+" by (simp add: one_strongly_connected_iff_4_eq) next assume1: "xT;1;x ≤ x+" hence"xT;1;xT≤ x\<star>;x;xT" by (metis mult_isor star_slide_var comp_assoc conv_invol modular_var_3 vector_meet_comp_x
order.trans) alsofrom assms have"... ≤ x\<star>" using comp_assoc is_inj_def mult_isol mult_oner by fastforce finallyshow"one_strongly_connected x" using dual_order.trans star_1l by fastforce qed
lemma one_strongly_connected_iff_5: assumes"is_p_fun x" shows"one_strongly_connected x ⟷ x;1;xT≤ x+" apply (rule iffI) using one_strongly_connected_iff_5_eq apply simp by (metis assms comp_assoc mult_double_iso order.trans star_slide_var top_greatest top_plus
many_strongly_connected_iff_12 many_strongly_connected_iff_7 one_strongly_connected_iff_3)
lemma one_strongly_connected_iff_6: assumes"is_p_fun x" and"is_inj x" shows"one_strongly_connected x ⟷ x;1;x ≤ x;x+" proof assume"one_strongly_connected x" thus"x;1;x ≤ x;x+" by (simp add: one_strongly_connected_implies_6_eq) next assume1: "x;1;x ≤ x;x+" have"xT;1;x ≤ xT;x;xT;1;x" by (metis conv_invol mult_isor x_leq_triple_x) alsohave"... ≤ xT;x;1;x" by (metis comp_assoc mult_double_iso top_greatest) alsofrom1have"... ≤ xT;x;x+" by (simp add: comp_assoc mult_isol) alsofrom assms(1) have"... ≤ x+" by (metis comp_assoc is_p_fun_def mult_isor mult_onel) finallyshow"one_strongly_connected x" using assms(2) one_strongly_connected_iff_4 by blast qed
lemma one_strongly_connected_iff_6_eq: assumes"is_p_fun x" and"is_inj x" shows"one_strongly_connected x ⟷ x;1;x = x;x+" apply (rule iffI) using one_strongly_connected_implies_6_eq apply blast by (simp add: assms one_strongly_connected_iff_6)
text‹Start points and end points›
lemma start_end_implies_terminating: assumes"has_start_points x" and"has_end_points x" shows"terminating x" using assms by simp
lemma start_points_end_points_conv: "start_points x = end_points (xT)" by simp
lemma edge_end: assumes"is_point p" and"is_point q" and"p ≠ q" shows"end_points (p;qT) = q" using assms edge_start by simp
lemma loop_no_start: assumes"is_point p" shows"start_points (p;pT) = 0" by simp
lemma loop_no_end: assumes"is_point p" shows"end_points (p;pT) = 0" by simp
lemma start_point_no_predecessor: "x;start_points(x) = 0" by (metis inf_top.right_neutral modular_1_aux')
lemma end_point_no_successor: "xT;end_points(x) = 0" by (metis conv_invol start_point_no_predecessor)
lemma start_to_end: assumes"path x" shows"start_points(x);end_points(x)T≤ x\<star>" proof (cases "end_points(x) = 0") assume"end_points(x) = 0" thus ?thesis by simp next assume ass: "end_points(x) ≠ 0" hence nz: "x;end_points(x) ≠ 0" by (metis comp_res_aux compl_bot_eq inf.left_idem) have a: "x;end_points(x);end_points(x)T≤ x + xT" by (metis end_point_at_most_one assms(1) is_inj_def comp_assoc mult_isol mult_oner le_supI1)
have"start_points(x);end_points(x)T = start_points(x);1;end_points(x)T" using ass by (simp add: comp_assoc is_vector_def one_compl vector_1) alsohave"... = start_points(x);1;x;end_points(x);1;end_points(x)T" using nz tarski by (simp add: comp_assoc) alsohave"... = start_points(x);1;x;end_points(x);end_points(x)T" using ass by (simp add: comp_assoc is_vector_def one_compl vector_1) alsowith a assms(1) have"... ≤ x\<star>" using path_concat_aux_5 comp_assoc eq_refl by simp finallyshow ?thesis . qed
lemma path_acyclic: assumes"has_start_points_path x" shows"is_acyclic x" proof - let ?r = "start_points(x)" have pt: "point(?r)" using assms point_is_point start_point_iff2 by blast have"x+⋅1' = (x+)T⋅x+⋅1'" by (metis conv_e conv_times inf.assoc inf.left_idem inf_le2 many_strongly_connected_iff_7
mult_oner star_subid) alsohave"... ≤ xT;1⋅x+⋅1'" by (metis conv_contrav inf.commute maddux_20 meet_double_iso plus_top star_conv star_slide_var) finallyhave"?r;(x+⋅1') ≤ ?r;(xT;1⋅x+⋅1')" using mult_isol by blast alsohave"... = (?r⋅1;x);(x+⋅1')" by (metis (no_types, lifting) comp_assoc conv_contrav conv_invol conv_one inf.assoc
is_vector_def one_idem_mult vector_2) alsohave"... = ?r;x;(x+⋅1')" by (metis comp_assoc inf_top.right_neutral is_vector_def one_compl one_idem_mult vector_1) alsohave"... ≤ (x\<star> + xT\<star>);(x+⋅1')" using assms(1) mult_isor by (meson connected_iff4 dual_order.trans mult_subdistr path_concat_aux3_3) alsohave"... = x\<star>;(x+⋅1') + xT+;(x+⋅1')" by (metis distrib_right star_star_plus sup.commute) alsohave"... ≤ x\<star>;(x+⋅1') + xT;1" by (metis join_isol mult_isol plus_top top_greatest) finallyhave"?r;(x+⋅1');1 ≤ x\<star>;(x+⋅1');1 + xT;1" by (metis distrib_right inf_absorb2 mult_assoc mult_subdistr one_idem_mult) hence1: "?r;(x+⋅1');1 ≤ xT;1" using assms(1) path_def inj_implies_step_forwards_backwards sup_absorb2 by simp have"x+⋅1' ≤ (x+⋅1');1" by (simp add: maddux_20) alsohave"... ≤ ?rT;?r;(x+⋅1');1" using pt comp_assoc point_def ss423conv by fastforce alsohave"... ≤ ?rT;xT;1" using1by (simp add: comp_assoc mult_isol) alsohave"... = 0" by (metis start_point_no_predecessor annil conv_contrav conv_zero) finallyshow ?thesis using galois_aux le_bot by blast qed
text‹Equivalences for ‹terminating››
lemma backward_terminating_iff1: assumes"path x" shows"backward_terminating x ⟷ has_start_points x ∨ x = 0" proof assume"backward_terminating x" hence"1;x;1 ≤ 1;-(1;x);x;1;1" by (metis mult_isor mult_isol comp_assoc) alsohave"... = -(1;x);x;1" by (metis conv_compl conv_contrav conv_invol conv_one mult_assoc one_compl one_idem_mult) finallyhave"1;x;1 ≤ -(1;x);x;1" .
with tarski show"has_start_points x ∨ x = 0" by (metis top_le) next show"has_start_points x ∨ x = 0 ==> backward_terminating x" by fastforce qed
lemma forward_terminating_iff3: assumes"path x" shows"forward_terminating x ⟷ x ≤ x\<star>;-(x;1)" by (metis assms backward_terminating_iff1 backward_terminating_iff3 end_point_iff2
forward_terminating_iff1 compl_bot_eq conv_compl conv_invol conv_one conv_path
double_compl start_point_iff2)
lemma forward_terminating_iff4: assumes"path x" shows"forward_terminating x ⟷ x ≤ -(1;xT);xT\<star>" using forward_terminating_iff2 conv_contrav conv_iso star_conv assms conv_compl by force
lemma terminating_iff1: assumes"path x" shows"terminating x ⟷ has_start_end_points x ∨ x = 0" using assms backward_terminating_iff1 forward_terminating_iff1 by fastforce
lemma terminating_iff2: assumes"path x" shows"terminating x ⟷ x ≤ xT\<star>;-(xT;1) ⋅ -(1;xT);xT\<star>" using assms backward_terminating_iff2 forward_terminating_iff2 conv_compl conv_iso star_conv by force
lemma terminating_iff3: assumes"path x" shows"terminating x ⟷ x ≤ x\<star>;-(x;1) ⋅ -(1;x);x\<star>" using assms backward_terminating_iff4 forward_terminating_iff3 by fastforce
lemma backward_terminating_path_irreflexive: assumes"backward_terminating_path x" shows"x ≤ -1'" proof - have1: "x;xT≤ 1'" using assms is_inj_def path_def by blast have"x;(xT⋅ 1') ≤ x;xT⋅ x" by (metis inf.bounded_iff inf.commute mult_1_right mult_subdistl) alsohave"... ≤ 1' ⋅ x" using1 meet_iso by blast alsohave"... = 1' ⋅ xT" by (metis conv_e conv_times inf.cobounded1 is_test_def test_eq_conv) finallyhave2: "xT;-(xT⋅ 1') ≤ -(xT⋅ 1')" by (metis compl_le_swap1 conv_galois_1 inf.commute) have"xT⋅ 1' ≤ xT;1" by (simp add: le_infI1 maddux_20) hence"-(xT;1) ≤ -(xT⋅ 1')" using compl_mono by blast hence"xT;-(xT⋅ 1') + -(xT;1) ≤ -(xT⋅ 1')" using2by (simp add: le_supI) hence"xT\<star>;-(xT;1) ≤ -(xT⋅ 1')" by (simp add: rtc_inductl) hence"xT⋅ 1' ⋅ xT\<star>;-(xT;1) = 0" by (simp add: compl_le_swap1 galois_aux) hence"xT⋅ 1' = 0" using assms backward_terminating_iff3 inf.order_iff le_infI1 by blast hence"x ⋅ 1' = 0" by (simp add: conv_self_conjugate) thus ?thesis by (simp add: galois_aux) qed
lemma forward_terminating_path_end_points_1: assumes"forward_terminating_path x" shows"x ≤ x+;end_points x" proof - have1: "-(x;1) ⋅ x = 0" by (simp add: galois_aux maddux_20) have"x = x\<star>;-(x;1) ⋅ x" using assms forward_terminating_iff3 inf.absorb2 by fastforce alsohave"... = (x+;-(x;1) + 1';-(x;1)) ⋅ x" by (simp add: sup.commute) alsohave"... = x+;-(x;1) ⋅ x + -(x;1) ⋅ x" using inf_sup_distrib2 by fastforce alsohave"... = x+;-(x;1) ⋅ x" using1by simp alsohave"... ≤ x+;(-(x;1) ⋅ (x+)T;x)" using modular_1_var by blast alsohave"... = x+;(-(x;1) ⋅ xT+;x)" using plus_conv by fastforce alsohave"... ≤ x+;end_points x" by (metis inf_commute inf_top_right modular_1' mult_subdistl plus_conv plus_top) finallyshow ?thesis . qed
lemma forward_terminating_path_end_points_2: assumes"forward_terminating_path x" shows"xT≤ x\<star>;end_points x" proof - have"xT≤ xT;x;xT" by (metis conv_invol x_leq_triple_x) alsohave"... ≤ xT;x;1" using mult_isol top_greatest by blast alsohave"... ≤ xT;x+;end_points x;1" by (metis assms forward_terminating_path_end_points_1 comp_assoc mult_isol mult_isor) alsohave"... = xT;x+;end_points x" by (metis inf_commute mult_assoc one_compl ra_1) alsohave"... ≤ x\<star>;end_points x" by (metis assms comp_assoc compl_le_swap1 conv_galois_1 conv_invol p_fun_compl path_def) finallyshow ?thesis . qed
lemma forward_terminating_path_end_points_3: assumes"forward_terminating_path x" shows"start_points x ≤ x+;end_points x" proof - have"start_points x ≤ x+;end_points x;1" using assms forward_terminating_path_end_points_1 comp_assoc mult_isor inf.coboundedI1 by blast alsohave"... = x+;end_points x" by (metis inf_commute mult_assoc one_compl ra_1 ) finallyshow ?thesis . qed
lemma backward_terminating_path_start_points_1: assumes"backward_terminating_path x" shows"xT≤ xT+;start_points x" using assms forward_terminating_path_end_points_1 conv_backward_terminating_path by fastforce
lemma backward_terminating_path_start_points_2: assumes"backward_terminating_path x" shows"x ≤ xT\<star>;start_points x" using assms forward_terminating_path_end_points_2 conv_backward_terminating_path by fastforce
lemma backward_terminating_path_start_points_3: assumes"backward_terminating_path x" shows"end_points x ≤ xT+;start_points x" using assms forward_terminating_path_end_points_3 conv_backward_terminating_path by fastforce
(* lemma not shown in the paper; not necessary for other theorems *) lemma path_aux1a: assumes"forward_terminating_path x" shows"x ≠ 0 ⟷ end_points x ≠ 0" using assms end_point_iff2 forward_terminating_iff1 end_point_iff1 galois_aux2 by force
(* lemma not shown in the paper; not necessary for other theorems *) lemma path_aux1b: assumes"backward_terminating_path y" shows"y ≠ 0 ⟷ start_points y ≠ 0" using assms start_point_iff2 backward_terminating_iff1 start_point_iff1 galois_aux2 byforce
(* lemma not shown in the paper; not necessary for other theorems *) lemma path_aux1: assumes"forward_terminating_path x" and"backward_terminating_path y" shows"x ≠ 0 ∨ y ≠ 0 ⟷ end_points x ≠ 0 ∨ start_points y ≠ 0" using assms path_aux1a path_aux1b by blast
text‹Equivalences for ‹finite››
lemma backward_finite_iff_msc: "backward_finite x ⟷ many_strongly_connected x ∨ backward_terminating x" proof assume1: "backward_finite x" thus"many_strongly_connected x ∨ backward_terminating x" proof (cases "-(1;x);x;1 = 0") assume"-(1;x);x;1 = 0" thus"many_strongly_connected x ∨ backward_terminating x" using1by (metis conv_invol many_strongly_connected_iff_1 sup_bot_right) next assume"-(1;x);x;1 ≠ 0" hence"1;-(1;x);x;1 = 1" by (simp add: comp_assoc tarski) hence"-(1;x);x;1 = 1" by (metis comp_assoc conv_compl conv_contrav conv_invol conv_one one_compl) thus"many_strongly_connected x ∨ backward_terminating x" using1by simp qed next assume"many_strongly_connected x ∨ backward_terminating x" thus"backward_finite x" by (metis star_ext sup.coboundedI1 sup.coboundedI2) qed
lemma forward_finite_iff_msc: "forward_finite x ⟷ many_strongly_connected x ∨ forward_terminating x" by (metis backward_finite_iff_msc conv_backward_finite conv_backward_terminating conv_invol)
lemma finite_iff_msc: "finite x ⟷ many_strongly_connected x ∨ terminating x" using backward_finite_iff_msc forward_finite_iff_msc finite_iff by fastforce
text‹Path concatenation›
lemma path_concatenation: assumes"forward_terminating_path x" and"backward_terminating_path y" and"end_points x = start_points y" and"x;1 ⋅ (xT;1 + y;1) ⋅ yT;1 = 0" shows"path (x+y)" proof (cases "y = 0") assume"y = 0" thus ?thesis using assms(1) by fastforce next assume as: "y ≠ 0" show ?thesis proof (unfold path_def; intro conjI) from assms(4) have a: "x;1 ⋅ xT;1 ⋅ yT;1 + x;1 ⋅ y;1 ⋅ yT;1= 0" by (simp add: inf_sup_distrib1 inf_sup_distrib2) hence aux1: "x;1 ⋅ xT;1 ⋅ yT;1 = 0" using sup_eq_bot_iff by blast from a have aux2: "x;1 ⋅ y;1 ⋅ yT;1= 0" using sup_eq_bot_iff by blast
show"is_inj (x + y)" proof (unfold is_inj_def; auto simp add: distrib_left) show"x;xT≤ 1'" using assms(1) path_def is_inj_def by blast show"y;yT≤ 1'" using assms(2) path_def is_inj_def by blast have"y;xT = 0" by (metis assms(3) aux1 annir comp_assoc conv_one le_bot modular_var_2 one_idem_mult
path_concat_aux_2 schroeder_2) thus"y;xT≤ 1'" using bot_least le_bot by blast thus"x;yT≤ 1'" using conv_iso by force qed
show"is_p_fun (x + y)" proof (unfold is_p_fun_def; auto simp add: distrib_left) show"xT;x ≤ 1'" using assms(1) path_def is_p_fun_def by blast show"yT;y ≤ 1'" using assms(2) path_def is_p_fun_def by blast have"yT;x ≤ yT;(y;1 ⋅ x;1)" by (metis conjugation_prop2 inf.commute inf_top.left_neutral maddux_20 mult_isol order_trans
schroeder_1_var) alsohave"... = 0" using assms(3) aux2 annir inf_commute path_concat_aux_1 by fastforce finallyshow"yT;x ≤ 1'" using bot_least le_bot by blast thus"xT;y ≤ 1'" using conv_iso by force qed
show"connected (x + y)" proof (auto simp add: distrib_left) have"x;1;x ≤ x\<star> + xT\<star>" using assms(1) path_def by simp alsohave"... ≤ (x\<star>;y\<star>)\<star> + (xT\<star>;yT\<star>)\<star>" using join_iso join_isol star_subdist by simp finallyshow"x;1;x ≤ (x\<star>;y\<star>)\<star> + (xT\<star>;yT\<star>)\<star>" . have"y;1;y ≤ y\<star> + yT\<star>" using assms(2) path_def by simp alsohave"... ≤ (x\<star>;y\<star>)\<star> + (xT\<star>;yT\<star>)\<star>" by (metis star_denest star_subdist sup.mono sup_commute) finallyshow"y;1;y ≤ (x\<star>;y\<star>)\<star> + (xT\<star>;yT\<star>)\<star>" .
show"y;1;x ≤ (x\<star>;y\<star>)\<star> + (xT\<star>;yT\<star>)\<star>" proof - have"(y;1);1;(1;x) ≤ yT\<star>;xT\<star>" proof (rule_tac v="start_points y"in path_concat_aux_0) show"is_vector (start_points y)" by (metis is_vector_def comp_assoc one_compl one_idem_mult ra_1) show"start_points y ≠ 0" using as by (metis assms(2) conv_compl conv_contrav conv_one inf.orderE inf_bot_right
inf_top.right_neutral maddux_141) have"(start_points y);1;yT≤ y\<star>" by (rule path_concat_aux_5) (simp_all add: assms(2)) thus"y;1;(start_points y)T≤ yT\<star>" by (metis (mono_tags, lifting) conv_iso comp_assoc conv_contrav conv_invol conv_one
star_conv) have"end_points x;1;x ≤ xT\<star>" apply (rule path_concat_aux_5) using assms(1) conv_path by simp_all thus"start_points y;(1;x) ≤ xT\<star>" by (metis assms(3) mult_assoc) qed thus ?thesis by (metis comp_assoc le_supI2 less_eq_def one_idem_mult star_denest star_subdist_var_1
sup.commute) qed
show"x;1;y ≤ (x\<star>;y\<star>)\<star> + (xT\<star>;yT\<star>)\<star>" proof - have"(x;1);1;(1;y) ≤ x\<star>;y\<star>" proof (rule_tac v="start_points y"in path_concat_aux_0) show"is_vector (start_points y)" by (simp add: comp_assoc is_vector_def one_compl vector_1_comm) show"start_points y ≠ 0" using as assms(2,4) backward_terminating_iff1 galois_aux2 start_point_iff1 start_point_iff2 by blast have"end_points x;1;xT≤ xT\<star>" apply (rule path_concat_aux_5) using assms(1) conv_path by simp_all hence"(end_points x;1;xT)T≤ (xT\<star>)T" using conv_iso by blast thus"x;1;(start_points y)T≤ x\<star>" by (simp add: assms(3) comp_assoc star_conv) have"start_points y;1;y ≤ y\<star>" by (rule path_concat_aux_5) (simp_all add: assms(2)) thus"start_points y;(1;y) ≤ y\<star>" by (simp add: mult_assoc) qed thus ?thesis by (metis comp_assoc dual_order.trans le_supI1 one_idem_mult star_ext) qed qed qed qed
lemma start_point_no_cycle: assumes"has_start_points_path x" shows"¬ cycle x" using assms many_strongly_connected_implies_no_start_end_points no_start_end_points_iff
start_point_iff1 start_point_iff2 by blast
lemma end_point_no_cycle: assumes"has_end_points_path x" shows"¬ cycle x" using assms end_point_iff2 end_point_iff1 many_strongly_connected_implies_no_start_end_points
no_start_end_points_iff by blast
lemma cycle_no_points: assumes"cycle x" shows"start_points x = 0" and"end_points x = 0" by (metis assms inf_compl_bot many_strongly_connected_implies_no_start_end_points)+
text‹Path concatenation to cycle›
lemma path_path_equals_cycle_aux: assumes"has_start_end_points_path x" and"has_start_end_points_path y" and"start_points x = end_points y" and"end_points x = start_points y" shows"x ≤ (x+y)T\<star>" proof- let ?e = "end_points(x)" let ?s = "start_points(x)" have sp: "is_point(?s)" using assms(1) start_point_iff2 has_start_end_points_path_iff by blast have ep: "is_point(?e)" using assms(1) end_point_iff2 has_start_end_points_path_iff by blast
have"x ≤ xT\<star>;?s;1 ⋅ 1;?eT;xT\<star>" by (metis assms(1) backward_terminating_path_start_points_2 end_point_iff2 ep
forward_terminating_iff1 forward_terminating_path_end_points_2 comp_assoc
conv_contrav conv_invol conv_iso inf.boundedI point_equations(1) point_equations(4)
star_conv sp start_point_iff2) alsohave"... = xT\<star>;?s;1;?eT;xT\<star>" by (metis inf_commute inf_top_right ra_1) alsohave"... = xT\<star>;?s;?eT;xT\<star>" by (metis ep comp_assoc point_equations(4)) alsohave"... ≤ xT\<star>;yT\<star>;xT\<star>" by (metis (mono_tags, lifting) assms(2-4) start_to_end comp_assoc conv_contrav conv_invol
conv_iso mult_double_iso star_conv) alsohave"... = (x\<star>;y\<star>;x\<star>)T" by (simp add: comp_assoc star_conv) alsohave"... ≤ ((x+y)\<star>;(x+y)\<star>;(x+y)\<star>)T" by (metis conv_invol conv_iso prod_star_closure star_conv star_denest star_ext star_iso
star_trans_eq sup_ge1) alsohave"... = (x+y)T\<star>" by (metis star_conv star_trans_eq) finallyshow x: "x ≤ (x+y)T\<star>" . qed
lemma path_edge_equals_cycle: assumes"has_start_end_points_path x" shows"cycle(x + end_points(x);(start_points x)T)" proof (rule path_path_equals_cycle) let ?s = "start_points x" let ?e = "end_points x" let ?y = "(?e;?sT)"
have sp: "is_point(?s)" using start_point_iff2 assms has_start_end_points_path_iff by blast have ep: "is_point(?e)" using end_point_iff2 assms has_start_end_points_path_iff by blast
show"has_start_end_points_path x" using assms by blast show"has_start_end_points_path ?y" using edge_is_path by (metis assms edge_end edge_start end_point_iff2 end_point_iff1 galois_aux2
has_start_end_points_iff inf.left_idem inf_compl_bot_right start_point_iff2) show"?s = end_points ?y" by (metis sp ep edge_end annil conv_zero inf.left_idem inf_compl_bot_right) thus"?e = start_points ?y" by (metis edge_start ep conv_contrav conv_invol sp) show"x;1 ⋅ (xT;1 + ?e;?sT;1) ⋅ (?e;?sT)T;1 = 0" proof - have"x;1 ⋅ (xT;1 + ?e;?sT;1) ⋅ (?e;?sT)T;1 = x;1 ⋅ (xT;1 + ?e;1;?sT;1) ⋅ (?s;?eT);1" using sp comp_assoc point_equations(3) by fastforce alsohave"... = x;1 ⋅ (xT;1 + ?e;1) ⋅ ?s;1" by (metis sp ep comp_assoc point_equations(1,3)) alsohave"... ≤ 0" by (simp add: sp ep inf.assoc point_equations(1)) finallyshow ?thesis using bot_unique by blast qed qed
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.