feat(library/standard): add equivalence inductive predicate
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
bef64305cf
commit
8b70ffb0a4
1 changed files with 27 additions and 0 deletions
27
library/standard/equivalence.lean
Normal file
27
library/standard/equivalence.lean
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-- 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
|
Loading…
Reference in a new issue