26 lines
808 B
Text
26 lines
808 B
Text
import data.list
|
|
open nat list
|
|
|
|
set_option pp.implicit true
|
|
set_option pp.notation false
|
|
|
|
definition filter {A : Type} (p : A → Prop) [H : decidable_pred p] : list A → list A,
|
|
filter nil := nil,
|
|
filter (h :: t) := if p h then h :: filter t else filter t
|
|
|
|
open decidable
|
|
|
|
definition decidable_eq_nat : Π (a b : nat), decidable (a = b),
|
|
decidable_eq_nat 0 0 := inl rfl,
|
|
decidable_eq_nat 0 (x+1) := inr (ne.symm (succ_ne_zero x)),
|
|
decidable_eq_nat (x+1) 0 := inr (succ_ne_zero x),
|
|
decidable_eq_nat (x+1) (y+1) :=
|
|
decidable.cases_on (decidable_eq_nat x y)
|
|
(λ Hp, inl (congr_arg succ Hp))
|
|
(λ Hn, inr (λ H : x+1 = y+1, absurd (succ.inj H) Hn))
|
|
|
|
/-
|
|
match (decidable_eq_nat x y) with
|
|
(inl Hp) := inl (congr_arg succ Hp),
|
|
(inr Hn) := inr (λ Hs, absurd (succ.inj Hs) Hn)
|
|
-/
|