namespace latin:/powertypes❚
import rules scala://parser.api.mmt.kwarc.info❚
rule rules:?MMTURILexer❚
fixmeta ur:?LF❚
theory PowerTypes =
include ☞latin:/?TypedEqualityND❙
include ☞latin:/?EquivalenceND❙
power : tp ⟶ tp❘# ℘ 1 prec 100❙
in : {A} tm A ⟶ tm ℘A ⟶ prop❘# 2 ∈ 3 prec 30❙
filter: {A} (tm A ⟶ prop) ⟶ tm ℘A❘# filter 2 prec 50❙
compute : {A,P,x: tm A} ⊦ x ∈ filter P ⇔ P x❙
expand : {A,S:tm ℘A} ⊦ S ≐ filter[x]x∈S❙
filterI : {A,P,x: tm A} ⊦ P x ⟶ ⊦ x ∈ filter P❘
= [A,P,x,p] compute equivEr p❙
filterE : {A,P,x: tm A} ⊦ x ∈ filter P ⟶ ⊦ P x❘# 4 filterE ❘
= [A,P,x,p] compute equivEl p❙
❚
theory Map =
include ?PowerTypes❙
include ☞latin:/?ConjunctionND❙
include ☞latin:/?TypedExistentialQuantificationND❙
map : {A,B} (tm A ⟶ tm B) ⟶ tm ℘A ⟶ tm ℘B❘
= [A,B,f,S] filter[b] ∃[a] a∈S ∧ (b ≐ f a)❘# 4 map 3 prec 40❙
mapI : {A,B,f:tm A ⟶ tm B,S,x} ⊦ x ∈ S ⟶ ⊦ f x ∈ S map f❘
= [A,B,f,S,x,p] filterI existsI x andI p refl❙
mapE : {A,B,f:tm A ⟶ tm B,S,x,C} ⊦ x ∈ S map f ⟶ ({a} ⊦ a∈S ⟶ ⊦ x ≐ f a ⟶ ⊦C) ⟶ ⊦ C❘
= [A,B,f,S,x,C,p,q] p filterE existsE [a,r] q a (r andEl) (r andEr)❙
❚
theory Extensionality =
include ?PowerTypes❙
include ☞latin:/?TypedUniversalQuantificationND❙
extensionality : {A,S,T:tm ℘A} ⊦(∀[x:tm A] x∈S ⇔ x∈T) ⟶ ⊦ S≐T❙
extensionalityI : {A,S,T:tm ℘A} ({x}⊦x∈S⟶⊦x∈T) ⟶ ({x}⊦x∈T⟶⊦x∈S) ⟶ ⊦ S≐T❘
= [A,S,T,f,g] extensionality (forallI [x] equivI ([p] f x p) ([q] g x q))❙
eq_in_left : {A,S,T,x:tm A} ⊦ S≐T ⟶ ⊦ x∈S ⟶ ⊦ x∈T❘
= [A,S,T,x,p,q] p congP ([u]x∈u) q❙
eq_in_right : {A,S,T,x:tm A} ⊦ S≐T ⟶ ⊦ x∈T ⟶ ⊦ x∈S❘
= [A,S,T,x,p,q] p sym congP ([u]x∈u) q❙
❚
theory FiniteSets =
include ?PowerTypes❙
include ☞latin:/?DisjunctionND❙
singleton : {A} tm A ⟶ tm ℘A❘= [A,x] filter [u] u≐x❘# % 2 prec 100❙
singletonI : {A,x: tm A} ⊦ x ∈ %x❘= [A,x] filterI refl❙
singletonE : {A,x,y: tm A} ⊦ x ∈ %y ⟶ ⊦ x≐y❙
uopair : {A} tm A ⟶ tm A ⟶ tm ℘A❘= [A,x,y] filter [u]u≐x ∨ u≐y❘# 2 ,, 3 prec 40❙
uopairI_left : {A,x,y: tm A} ⊦ x ∈ x,,y❘= [A,x,y] filterI (refl orIl)❙
uopairI_right : {A,x,y: tm A} ⊦ y ∈ x,,y❘= [A,x,y] filterI (refl orIr)❙
uopairE : {A,x,y,u:tm A,C} ⊦ u ∈ x,,y ⟶ (⊦u≐x ⟶ ⊦ C) ⟶ (⊦u≐y ⟶ ⊦ C) ⟶ ⊦C❘
= [A,x,y,u,C,p,q,r] p filterE orE q r❙
❚
theory Subset =
include ?PowerTypes❙
include ?Extensionality❙
include ☞latin:/?ImplicationND❙
subset : {A} tm ℘A ⟶ tm ℘A ⟶ prop❘
= [A,S,T] ∀[x] x∈S ⇒ x∈T❘
# 2 ⊆ 3 prec 30❙
subsetI: {A,S,T} ({x: tm A} ⊦x∈S ⟶ ⊦ x∈T) ⟶ ⊦ S⊆T❘
= [A,S,T,f] forallI [x] impI [p] f x p❙
subsetE: {A,S,T,x:tm A} ⊦ S⊆T ⟶ ⊦ x∈S ⟶ ⊦ x∈T❘
= [A,S,T,x,p,q] p forallE x impE q❙
subset_refl : {A,S:tm ℘A} ⊦ S⊆S❘
= [A,S] subsetI [x,p]p❙
subset_trans : {A,R,S,T:tm ℘A} ⊦ R⊆S ⟶ ⊦ S⊆T ⟶ ⊦ R⊆T❘
= [A,R,S,T,p,q] subsetI [x,r] subsetE q (subsetE p r)❙
subset_antisym : {A,S,T:tm ℘A} ⊦ S⊆T ⟶ ⊦ T⊆S ⟶ ⊦ S≐T❘
= [A,S,T,p,q] extensionalityI ([x,r] subsetE p r) ([x,r] subsetE q r)❙
❚
theory FullSet =
include ?PowerTypes❙
include ☞latin:/?TruthND❙
full : {A} tm ℘A❘
= [A] filter [x] true❘
# fullset %I1 prec 50❙
fullI : {A,x} ⊦ x ∈ full A ❘
= [A,x] filterI trueI❙
❚
theory EmptySet =
include ?PowerTypes❙
include ☞latin:/?FalsityND❙
empty : {A} tm ℘A❘
= [A] filter [x] false❘
# ∅ %I1 prec 50❙
emptyE : {A,x} ⊦ x ∈ empty A ⟶ ↯❘
= [A,x,p] p filterE falseE❘
# emptyE 3❙
❚
theory Complement =
include ?PowerTypes❙
include ☞latin:/?NegationND❙
compl : {A} tm ℘A ⟶ tm ℘A ❘
= [A,S] filter [x] ¬ x∈S ❘
# ∁ 2 prec 50❙
complI : {A,S,x:tm A} (⊦x∈S ⟶ ↯) ⟶ ⊦ x∈∁S❘
= [A,S,x,p] filterI notI p❘
# complI 4❙
complE : {A,S,x:tm A} ⊦ x∈∁S ⟶ ⊦ x∈S ⟶ ↯❘
= [A,S,x,p,q] p filterE notE q ❘# complE 4 5❙
❚
theory Intersection =
include ?PowerTypes❙
include ☞latin:/?ConjunctionND❙
inter : {A} tm ℘A ⟶ tm ℘A ⟶ tm ℘A❘
= [A,S,T] filter [x] x∈S ∧ x∈T❘
# 2 ∩ 3 prec 40❙
interEl : {A,S,T,x:tm A} ⊦ x ∈ S∩T ⟶ ⊦ x∈S❘
= [A,S,T, x, p] p filterE andEl❙
interEr : {A,S,T,x:tm A} ⊦ x ∈ S∩T ⟶ ⊦ x∈T❘
= [A,S,T,x,p] p filterE andEr❙
interI : {A,S,T,x:tm A} ⊦ x∈S ⟶ ⊦ x∈T ⟶ ⊦ x ∈ S∩T❘
= [A,S,T,x,p,q] filterI andI p q❙
❚
theory Union =
include ?PowerTypes❙
include ☞latin:/?DisjunctionND❙
union : {A} tm ℘A ⟶ tm ℘A ⟶ tm ℘A ❘
= [A,S,T] filter [x] x∈S ∨ x∈T❘
# 2 ∪ 3 prec 40❙
unionIl: {A,S,T,x:tm A} ⊦ x∈S ⟶ ⊦ x ∈ S∪T❘
= [A,S,T,x,p] filterI (p orIl)❙
unionIr: {A,S,T,x:tm A} ⊦ x∈T ⟶ ⊦ x ∈ S∪T❘
= [A,S,T,x,p] filterI (p orIr)❙
unionE : {A,S,T,x:tm A,C} ⊦ x ∈ S∪T ⟶ (⊦x∈S⟶⊦C) ⟶ (⊦x∈T⟶⊦C) ⟶ ⊦ C❘
= [A,S,T,x,C,p,q,r] p filterE orE q r❙
❚
theory BigIntersection =
include ?PowerTypes❙
include ☞latin:/?ImplicationND❙
include ☞latin:/?TypedUniversalQuantificationND❙
biginter : {A} tm ℘℘A ⟶ tm ℘A ❘
= [A,K] filter [x] ∀[S] S∈K ⇒ x∈S ❘
# ⋂ 2 prec 45❙
biginterI : {A,K,x:tm A} ({S}⊦S∈K⟶⊦x∈S) ⟶ ⊦ x∈⋂K ❘
= [A,K,x,f] filterI (forallI [S] impI [p] f S p)❙
biginterE : {A,K,x:tm A,S} ⊦ x∈⋂K ⟶ ⊦S∈K ⟶ ⊦x∈S❘
= [A,K,x,S,p,q] p filterE forallE S impE q❙
❚
theory BigUnion =
include ?PowerTypes❙
include ☞latin:/?ConjunctionND❙
include ☞latin:/?TypedExistentialQuantificationND❙
bigunion : {A} tm ℘℘A ⟶ tm ℘A ❘
= [A,K] filter [x] ∃ [S] S∈K ∧ x∈S ❘
# ⋃ 2 prec 45❙
bigunionI : {A,K,S,x:tm A} ⊦ S∈K ⟶ ⊦ x∈S ⟶ ⊦ x∈⋃K ❘
= [A,K,S,x,p,q] filterI (existsI S (andI p q))❙
bigunionE : {A,K,x:tm A,C} ⊦ x∈⋃K ⟶ ({S}⊦S∈K⟶⊦x∈S⟶⊦C) ⟶ ⊦ C❘
= [A,K,x,C,p,f] p filterE existsE [S,rs] f S (rs andEl) (rs andEr)❙
❚
theory Lattice =
include ?Extensionality❙
include ?Subset❙
include ?FullSet❙
include ?EmptySet❙
include ?Complement❙
include ?Intersection❙
include ?Union❙
include ?BigIntersection❙
include ?BigUnion❙
❚
theory SubsetRules =
include ?Lattice❙
subset_full : {A,S} ⊦ S ⊆ full A❘
= [A,S] subsetI [x,p] fullI❙
subset_empty : {A,S} ⊦ empty A ⊆ S❘
= [A,S] subsetI [x,p] (emptyE p) inconE❙
subset_union_left : {A,S,T: tm ℘A} ⊦ S ⊆ S ∪ T❘
= [A,S,T] subsetI [x,p] unionIl p❙
subset_union_right : {A,S,T: tm ℘A} ⊦ T ⊆ S ∪ T❘
= [A,S,T] subsetI [x,p] unionIr p❙
subset_union_lub : {A,S,T,C: tm ℘A} ⊦ S ⊆ C ⟶ ⊦ T ⊆ C ⟶ ⊦ S ∪ T ⊆ C❘
= [A,S,T,C,s,t] subsetI [x,st] unionE st ([xs] subsetE s xs) ([xt] subsetE t xt)❙
subset_inter_left : {A,S,T: tm ℘A} ⊦ S ∩ T ⊆ S❘
= [A,S,T] subsetI [x,p] interEl p❙
subset_inter_right : {A,S,T: tm ℘A} ⊦ S ∩ T ⊆ T❘
= [A,S,T] subsetI [x,p] interEr p❙
subset_inter_glb : {A,S,T,C: tm ℘A} ⊦ C ⊆ S ⟶ ⊦ C ⊆ T ⟶ ⊦ C ⊆ S ∩ T❘
= [A,S,T,C,s,t] subsetI [x,xc] interI (subsetE s xc) (subsetE t xc)❙
subset_bigunion : {A,K,S: tm ℘A} ⊦ S ∈ K ⟶ ⊦ S ⊆ ⋃ K❘
= [A,K,S,p] subsetI [x,q] bigunionI p q❙
subset_bigunion_lub : {A,K,C: tm ℘A} ({S} ⊦ S ∈ K ⟶ ⊦ S ⊆ C) ⟶ ⊦ ⋃ K ⊆ C❘
= [A,K,C,f] subsetI [x,p] bigunionE p [S,q,r] subsetE (f S q) r❙
subset_biginter : {A,K,S: tm ℘A} ⊦ S ∈ K ⟶ ⊦ ⋂ K ⊆ S❘
= [A,K,S,p] subsetI [x,q] biginterE q p❙
subset_biginter_glb : {A,K,C: tm ℘A} ({S} ⊦ S ∈ K ⟶ ⊦ C ⊆ S) ⟶ ⊦ C ⊆ ⋂ K❘
= [A,K,C,f] subsetI [x,p] biginterI [S,q] subsetE (f S q) p❙
subset_compl : {A,S,T: tm ℘A} ⊦ S⊆T ⟶ ⊦ ∁T⊆∁S❘
= [A,S,T,p] subsetI [x,q] complI [r] complE q (subsetE p r)❙
❚
theory ComplementRules =
include ?Lattice❙
include ?SubsetRules❙
compl_empty : {A} ⊦ ∁(empty A) ≐ full A❘
= [A] extensionalityI ([x,p] fullI) ([x,p] complI [q] emptyE q)❙
compl_full : {A} ⊦ ∁(full A) ≐ empty A❘
= [A] extensionalityI ([x,p] (complE p fullI) inconE) ([x,p] (emptyE p) inconE)❙
compl_union : {A, S,T: tm ℘A} ⊦ ∁(S∪T) ≐ ∁S ∩ ∁T❘
= [A,S,T] extensionalityI
([x,p] interI (complI [q] complE p (unionIl q))
(complI [q] complE p (unionIr q))
)
([x,p] complI [q,C] unionE q ([r] complE (interEl p) r inconE)
([r] complE (interEr p) r inconE)
)❙
inter_compl : {A,S} ⊦ S ∩ ∁S ≐ empty A❘
= [A,S] extensionalityI ([x,p] (complE (interEr p) (interEl p)) inconE)
([x,p] (emptyE p) inconE)❙
compl_not : {A,S,x:tm A} ⊦¬x∈S ⟶ ⊦x∈∁S❘= [A,S,x,p] complI [q] p notE q❙
include ☞latin:/?PLND❙
union_compl : {A,S} ⊦ S ∪ ∁S ≐ full A❘
= [A,S] extensionalityI
([x,p] fullI)
([x,p] tnd orE ([q] unionIl q) ([q] unionIr (compl_not q)))❙
compl_tnd : {A,S,x: tm A} ⊦ x∈S ∨ x∈∁S❘
= [A,S,x] (eq_in_right union_compl fullI) filterE❙
compl_inter : {A, S,T: tm ℘A} ⊦ ∁(S∩T) ≐ ∁S ∪ ∁T❘
= [A,S,T] extensionalityI
([x,p] compl_tnd orE ([q] compl_tnd orE ([r] complE p (interI q r) inconE) ([r] unionIr r)) ([r] unionIl r))
([x,p] unionE p ([q] subsetE (subset_compl subset_inter_left) q)
([q] subsetE (subset_compl subset_inter_right) q)
)❙
compl_compl : {A, S:tm ℘A} ⊦ ∁∁S ≐ S❘
= [A,S] extensionalityI ([x,p] compl_tnd orE ([q] q) ([q] complE p q inconE)) ([x,p] complI [q] complE q p)❙
❚
theory PowerSFOL =
include ☞latin:/?SFOLEQND❙
include ?PowerTypes❙
include ?FiniteSets❙
include ?Map❙
include ?Lattice❙
include ?SubsetRules❙
include ?ComplementRules❙
❚