27 lines
1 KiB
Text
27 lines
1 KiB
Text
|
-- Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
|||
|
-- Released under Apache 2.0 license as described in the file LICENSE.
|
|||
|
-- Author: Leonardo de Moura
|
|||
|
import logic
|
|||
|
|
|||
|
namespace equivalence
|
|||
|
section
|
|||
|
parameter {A : Type}
|
|||
|
parameter p : A → A → Bool
|
|||
|
infix `∼`:50 := p
|
|||
|
definition reflexive := ∀a, a ∼ a
|
|||
|
definition symmetric := ∀a b, a ∼ b → b ∼ a
|
|||
|
definition transitive := ∀a b c, a ∼ b → b ∼ c → a ∼ c
|
|||
|
end
|
|||
|
|
|||
|
inductive equivalence {A : Type} (p : A → A → Bool) : Bool :=
|
|||
|
| equivalence_intro : reflexive p → symmetric p → transitive p → equivalence p
|
|||
|
|
|||
|
theorem equivalence_reflexive [instance] {A : Type} {p : A → A → Bool} (H : equivalence p) : reflexive p
|
|||
|
:= equivalence_rec (λ r s t, r) H
|
|||
|
|
|||
|
theorem equivalence_symmetric [instance] {A : Type} {p : A → A → Bool} (H : equivalence p) : symmetric p
|
|||
|
:= equivalence_rec (λ r s t, s) H
|
|||
|
|
|||
|
theorem equivalence_transitive [instance] {A : Type} {p : A → A → Bool} (H : equivalence p) : transitive p
|
|||
|
:= equivalence_rec (λ r s t, t) H
|
|||
|
end
|