Up to index of Isabelle/HOL/raw-confluence-lambda
theory Commutation = Trancl(* Title: HOL/Lambda/Commutation.thy ID: $Id: Commutation.thy,v 1.1 2000/06/26 14:27:36 jjb Exp $ Author: Tobias Nipkow Copyright 1995 TU Muenchen Abstract commutation and confluence notions. *) Commutation = Trancl + consts square :: "[('a*'a)set,('a*'a)set,('a*'a)set,('a*'a)set] => bool" commute :: "[('a*'a)set,('a*'a)set] => bool" confluent, diamond, Church_Rosser :: "('a*'a)set => bool" defs square_def "square R S T U == !x y.(x,y):R --> (!z.(x,z):S --> (? u. (y,u):T & (z,u):U))" commute_def "commute R S == square R S S R" diamond_def "diamond R == commute R R" Church_Rosser_def "Church_Rosser(R) == !x y. (x,y) : (R Un R^-1)^* --> (? z. (x,z) : R^* & (y,z) : R^*)" translations "confluent R" == "diamond(R^*)" end
theorem square_sym:
square R S T U ==> square S R U T
theorem square_subset:
[| square R S T U; T <= T' |] ==> square R S T' U
theorem square_reflcl:
[| square R S T (R^=); S <= T |] ==> square (R^=) S T (R^=)
theorem square_rtrancl:
square R S S T ==> square (R^*) S S (T^*)
theorem square_rtrancl_reflcl_commute:
square R S (S^*) (R^=) ==> commute (R^*) (S^*)
theorem commute_sym:
commute R S ==> commute S R
theorem commute_rtrancl:
commute R S ==> commute (R^*) (S^*)
theorem commute_Un:
[| commute R T; commute S T |] ==> commute (R Un S) T
theorem diamond_Un:
[| diamond R; diamond S; commute R S |] ==> diamond (R Un S)
theorem diamond_confluent:
diamond R ==> confluent R
theorem square_reflcl_confluent:
square R R (R^=) (R^=) ==> confluent R
theorem confluent_Un:
[| confluent R; confluent S; commute (R^*) (S^*) |] ==> confluent (R Un S)
theorem diamond_to_confluence:
[| diamond R; T <= R; R <= T^* |] ==> confluent T
theorem Church_Rosser_confluent:
Church_Rosser R = confluent R