feat(library/logic/wf): transitive closure of a well-founded relation is well-founded

This commit is contained in:
Leonardo de Moura 2014-11-10 21:06:15 -08:00
parent 22b7a0615f
commit 4ebd3e2c27

View file

@ -115,3 +115,35 @@ context
well_founded.intro (λ a, accessible (H (f a))) well_founded.intro (λ a, accessible (H (f a)))
end end
end inv_image end inv_image
-- Transitive closure
inductive tc {A : Type} (R : A → A → Prop) : A → A → Prop :=
base : ∀a b, R a b → tc R a b,
trans : ∀a b c, tc R a b → tc R b c → tc R a c
-- The transitive closure of a well-founded relation is well-founded
namespace tc
context
parameters {A : Type} {R : A → A → Prop}
notation `R⁺` := tc R
definition accessible {z} (ac: acc R z) : acc R⁺ z :=
acc.rec_on ac
(λ (x : A) (ax : _) (iH : ∀y, R y x → acc (tc R) y),
acc.intro x (λ (y : A) (lt : R⁺ y x),
have gen : x = x → acc (tc R) y, from
tc.rec_on lt
(λa b (H : R a b) (Heq : b = x),
iH a (eq.rec_on Heq H))
(λa b c (H₁ : R⁺ a b) (H₂ : R⁺ b c)
(iH₁ : b = x → acc (tc R) a)
(iH₂ : c = x → acc (tc R) b)
(Heq : c = x),
acc.inv (iH₂ Heq) H₁),
gen rfl))
definition wf (H : well_founded R) : well_founded R⁺ :=
well_founded.intro (λ a, accessible (H a))
end
end tc