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.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.