section‹Abstract commutation and confluence notions›
theory Commutation imports Main begin
declare [[syntax_ambiguity_warning = false]]
subsection‹Basic definitions›
definition
square :: "['a => 'a => bool, 'a => 'a => bool, 'a => 'a => bool, 'a => 'a => bool] => bool"where "square R S T U = (∀x y. R x y --> (∀z. S x z --> (∃u. T y u ∧ U z u)))"
definition
commute :: "['a => 'a => bool, 'a => 'a => bool] => bool"where "commute R S = square R S S R"
definition
diamond :: "('a => 'a => bool) => bool"where "diamond R = commute R R"
definition
Church_Rosser :: "('a => 'a => bool) => bool"where "Church_Rosser R = (∀x y. (sup R (R-1-1))🪙*🪙* x y ⟶ (∃z. R🪙*🪙* x z ∧ R🪙*🪙* y z))"
abbreviation
confluent :: "('a => 'a => bool) => bool"where "confluent R == diamond (R🪙*🪙*)"
subsection‹Basic lemmas›
subsubsection ‹‹square›\›
lemma square_sym: "square R S T U ==> square S R U T" apply (unfold square_def) apply blast done
lemma square_subset: "[| square R S T U; T ≤ T' |] ==> square R S T' U" apply (unfold square_def) apply (blast dest: predicate2D) done
lemma square_reflcl: "[| square R S T (R🪙=🪙=); S ≤ T |] ==> square (R🪙=🪙=) S T (R🪙=🪙=)" apply (unfold square_def) apply (blast dest: predicate2D) done
lemma square_rtrancl: "square R S S T ==> square (R🪙*🪙*) S S (T🪙*🪙*)" apply (unfold square_def) apply (intro strip) apply (erule rtranclp_induct) apply blast apply (blast intro: rtranclp.rtrancl_into_rtrancl) done
theorem newman: assumes wf: "wfP (R-1-1)" and lc: "∧a b c. R a b ==> R a c ==> ∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d" shows"∧b c. R🪙*🪙* a b ==> R🪙*🪙* a c ==> ∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d" using wf proof induct case (less x b c) have xc: "R🪙*🪙* x c"by fact have xb: "R🪙*🪙* x b"by fact thus ?case proof (rule converse_rtranclpE) assume"x = b" with xc have"R🪙*🪙* b c"by simp thus ?thesis by iprover next fix y assume xy: "R x y" assume yb: "R🪙*🪙* y b" from xc show ?thesis proof (rule converse_rtranclpE) assume"x = c" with xb have"R🪙*🪙* c b"by simp thus ?thesis by iprover next fix y' assume y'c: "R🪙*🪙* y' c" assume xy': "R x y'" with xy have"∃u. R🪙*🪙* y u ∧ R🪙*🪙* y' u"by (rule lc) thenobtain u where yu: "R🪙*🪙* y u"and y'u: "R🪙*🪙* y' u"by iprover from xy have"R-1-1 y x" .. from this and yb yu have"∃d. R🪙*🪙* b d ∧ R🪙*🪙* u d"by (rule less) thenobtain v where bv: "R🪙*🪙* b v"and uv: "R🪙*🪙* u v"by iprover from xy' have"R-1-1 y' x" .. moreoverfrom y'u and uv have"R🪙*🪙* y' v"by (rule rtranclp_trans) moreovernote y'c ultimatelyhave"∃d. R🪙*🪙* v d ∧ R🪙*🪙* c d"by (rule less) thenobtain w where vw: "R🪙*🪙* v w"and cw: "R🪙*🪙* c w"by iprover from bv vw have"R🪙*🪙* b w"by (rule rtranclp_trans) with cw show ?thesis by iprover qed qed qed
text‹ Alternative version. Partly automated by Tobias Nipkow. Takes 2 minutes (2002). This is the maximal amount of automation possible using ‹blast›. ›
theorem newman': assumes wf: "wfP (R-1-1)" and lc: "∧a b c. R a b ==> R a c ==> ∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d" shows"∧b c. R🪙*🪙* a b ==> R🪙*🪙* a c ==> ∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d" using wf proof induct case (less x b c) note IH = ‹∧y b c. [R-1-1 y x; R🪙*🪙* y b; R🪙*🪙* y c] ==>∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d› have xc: "R🪙*🪙* x c"by fact have xb: "R🪙*🪙* x b"by fact thus ?case proof (rule converse_rtranclpE) assume"x = b" with xc have"R🪙*🪙* b c"by simp thus ?thesis by iprover next fix y assume xy: "R x y" assume yb: "R🪙*🪙* y b" from xc show ?thesis proof (rule converse_rtranclpE) assume"x = c" with xb have"R🪙*🪙* c b"by simp thus ?thesis by iprover next fix y' assume y'c: "R🪙*🪙* y' c" assume xy': "R x y'" with xy obtain u where u: "R🪙*🪙* y u""R🪙*🪙* y' u" by (blast dest: lc) from yb u y'c show ?thesis by (blast del: rtranclp.rtrancl_refl
intro: rtranclp_trans
dest: IH [OF conversepI, OF xy] IH [OF conversepI, OF xy']) qed qed qed
text‹ Using the coherent logic prover, the proof of the induction step is completely automatic. ›
lemma eq_imp_rtranclp: "x = y ==> r🪙*🪙* x y" by simp
theorem newman'': assumes wf: "wfP (R-1-1)" and lc: "∧a b c. R a b ==> R a c ==> ∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d" shows"∧b c. R🪙*🪙* a b ==> R🪙*🪙* a c ==> ∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d" using wf proof induct case (less x b c) note IH = ‹∧y b c. [R-1-1 y x; R🪙*🪙* y b; R🪙*🪙* y c] ==>∃d. R🪙*🪙* b d ∧ R🪙*🪙* c d› show ?case by (coherent ‹R🪙*🪙* x c›‹R🪙*🪙* x b›
refl [where 'a='a] sym
eq_imp_rtranclp
r_into_rtranclp [of R]
rtranclp_trans
lc IH [OF conversepI]
converse_rtranclpE) qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-05-03)
¤
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.