feat(library/data/set): show that (set A) is a comm_semiring
This commit is contained in:
parent
1aff1f7cde
commit
d12b5613c6
2 changed files with 49 additions and 1 deletions
|
@ -29,6 +29,15 @@ theorem subset.refl (a : set X) : a ⊆ a := take x, assume H, H
|
||||||
theorem subset.trans (a b c : set X) (subab : a ⊆ b) (subbc : b ⊆ c) : a ⊆ c :=
|
theorem subset.trans (a b c : set X) (subab : a ⊆ b) (subbc : b ⊆ c) : a ⊆ c :=
|
||||||
take x, assume ax, subbc (subab ax)
|
take x, assume ax, subbc (subab ax)
|
||||||
|
|
||||||
|
theorem subset.antisymm (a b : set X) (h₁ : a ⊆ b) (h₂ : b ⊆ a) : a = b :=
|
||||||
|
setext (λ x, iff.intro (λ ina, h₁ ina) (λ inb, h₂ inb))
|
||||||
|
|
||||||
|
definition strict_subset (a b : set X) := a ⊆ b ∧ a ≠ b
|
||||||
|
infix `⊂`:50 := strict_subset
|
||||||
|
|
||||||
|
theorem strict_subset.irrefl (a : set X) : ¬ a ⊂ a :=
|
||||||
|
assume h, absurd rfl (and.elim_right h)
|
||||||
|
|
||||||
/- bounded quantification -/
|
/- bounded quantification -/
|
||||||
|
|
||||||
abbreviation bounded_forall (a : set X) (P : X → Prop) := ∀⦃x⦄, x ∈ a → P x
|
abbreviation bounded_forall (a : set X) (P : X → Prop) := ∀⦃x⦄, x ∈ a → P x
|
||||||
|
@ -57,6 +66,10 @@ theorem mem_univ (x : X) : x ∈ univ := trivial
|
||||||
|
|
||||||
theorem mem_univ_eq (x : X) : x ∈ univ = true := rfl
|
theorem mem_univ_eq (x : X) : x ∈ univ = true := rfl
|
||||||
|
|
||||||
|
theorem empty_ne_univ [h : inhabited X] : (empty : set X) ≠ univ :=
|
||||||
|
assume H : empty = univ,
|
||||||
|
absurd (mem_univ (inhabited.value h)) (eq.rec_on H (not_mem_empty _))
|
||||||
|
|
||||||
/- union -/
|
/- union -/
|
||||||
|
|
||||||
definition union [reducible] (a b : set X) : set X := λx, x ∈ a ∨ x ∈ b
|
definition union [reducible] (a b : set X) : set X := λx, x ∈ a ∨ x ∈ b
|
||||||
|
@ -78,7 +91,7 @@ setext (take x, !false_or)
|
||||||
theorem union.comm (a b : set X) : a ∪ b = b ∪ a :=
|
theorem union.comm (a b : set X) : a ∪ b = b ∪ a :=
|
||||||
setext (take x, or.comm)
|
setext (take x, or.comm)
|
||||||
|
|
||||||
theorem union_assoc (a b c : set X) : (a ∪ b) ∪ c = a ∪ (b ∪ c) :=
|
theorem union.assoc (a b c : set X) : (a ∪ b) ∪ c = a ∪ (b ∪ c) :=
|
||||||
setext (take x, or.assoc)
|
setext (take x, or.assoc)
|
||||||
|
|
||||||
/- intersection -/
|
/- intersection -/
|
||||||
|
@ -105,6 +118,12 @@ setext (take x, !and.comm)
|
||||||
theorem inter.assoc (a b c : set X) : (a ∩ b) ∩ c = a ∩ (b ∩ c) :=
|
theorem inter.assoc (a b c : set X) : (a ∩ b) ∩ c = a ∩ (b ∩ c) :=
|
||||||
setext (take x, !and.assoc)
|
setext (take x, !and.assoc)
|
||||||
|
|
||||||
|
theorem inter_univ (a : set X) : a ∩ univ = a :=
|
||||||
|
setext (take x, !and_true)
|
||||||
|
|
||||||
|
theorem univ_inter (a : set X) : univ ∩ a = a :=
|
||||||
|
setext (take x, !true_and)
|
||||||
|
|
||||||
/- distributivity laws -/
|
/- distributivity laws -/
|
||||||
|
|
||||||
theorem inter.distrib_left (s t u : set X) : s ∩ (t ∪ u) = (s ∩ t) ∪ (s ∩ u) :=
|
theorem inter.distrib_left (s t u : set X) : s ∩ (t ∪ u) = (s ∩ t) ∪ (s ∩ u) :=
|
||||||
|
|
29
library/data/set/comm_semiring.lean
Normal file
29
library/data/set/comm_semiring.lean
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/-
|
||||||
|
Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
Released under Apache 2.0 license as described in the file LICENSE.
|
||||||
|
Author: Leonardo de Moura
|
||||||
|
|
||||||
|
(set A) is an instance of a commutative semiring
|
||||||
|
-/
|
||||||
|
import data.set.basic algebra.ring
|
||||||
|
open algebra set
|
||||||
|
|
||||||
|
definition set_comm_semiring [instance] (A : Type) : comm_semiring (set A) :=
|
||||||
|
⦃ comm_semiring,
|
||||||
|
add := union,
|
||||||
|
mul := inter,
|
||||||
|
zero := empty,
|
||||||
|
one := univ,
|
||||||
|
add_assoc := union.assoc,
|
||||||
|
add_comm := union.comm,
|
||||||
|
zero_add := empty_union,
|
||||||
|
add_zero := union_empty,
|
||||||
|
mul_assoc := inter.assoc,
|
||||||
|
mul_comm := inter.comm,
|
||||||
|
zero_mul := empty_inter,
|
||||||
|
mul_zero := inter_empty,
|
||||||
|
one_mul := univ_inter,
|
||||||
|
mul_one := inter_univ,
|
||||||
|
left_distrib := inter.distrib_left,
|
||||||
|
right_distrib := inter.distrib_right
|
||||||
|
⦄
|
Loading…
Reference in a new issue