
nipkow@10213: (*  Title:      HOL/Transitive_Closure.thy
nipkow@10213:     ID:         $Id$
nipkow@10213:     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
nipkow@10213:     Copyright   1992  University of Cambridge
nipkow@10213: 
nipkow@10213: Relfexive and Transitive closure of a relation
nipkow@10213: 
nipkow@10213: rtrancl is reflexive/transitive closure;
nipkow@10213: trancl  is transitive closure
nipkow@10213: reflcl  is reflexive closure
nipkow@10213: 
nipkow@10213: These postfix operators have MAXIMUM PRIORITY, forcing their operands to be
nipkow@10213:       atomic.
nipkow@10213: *)
nipkow@10213: 
nipkow@10213: Transitive_Closure = Lfp + Relation + 
nipkow@10213: 
nipkow@10213: constdefs
nipkow@10213:   rtrancl :: "('a * 'a)set => ('a * 'a)set"   ("(_^*)" [1000] 999)
nipkow@10213:   "r^*  ==  lfp(%s. Id Un (r O s))"
nipkow@10213: 
nipkow@10213:   trancl  :: "('a * 'a)set => ('a * 'a)set"   ("(_^+)" [1000] 999)
nipkow@10213:   "r^+  ==  r O rtrancl(r)"
nipkow@10213: 
nipkow@10213: syntax
nipkow@10213:   "_reflcl"  :: "('a*'a)set => ('a*'a)set"       ("(_^=)" [1000] 999)
nipkow@10213: 
nipkow@10213: translations
nipkow@10213:   "r^=" == "r Un Id"
nipkow@10213: 
nipkow@10213: end




