(def-language indicators-language
(embedded-language the-kernel-language)
(base-types uu))
(def-theory indicators
(language indicators-language))
(def-language index-language
(embedded-language indicators-language)
(base-types index))
(def-theory family-indicators
(language index-language)
(component-theories indicators))
(def-quasi-constructor predicate-to-indicator
"lambda(s:[uu,prop], lambda(x:uu, if(s(x), an%individual, ?unit%sort)))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor sort-to-indicator
"lambda(e:uu, lambda(x:uu, an%individual))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-in
"lambda(x:uu,a:sets[uu], #(a(x)))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-subseteq
"lambda(a,b:sets[uu], forall(x:uu, (x in a) implies (x in b)))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-subset
"lambda(a,b:sets[uu], (a subseteq b) and not(a = b))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-empty-indicator
"lambda(e:uu, lambda(x:uu,?unit%sort))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-nonempty-indicator?
"lambda(a:sets[uu], forsome(x:uu, x in a))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-empty-indicator?
"lambda(a:sets[uu], forall(x:uu, not(x in a)))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-complement
"lambda(s:sets[uu], indic(x:uu, (not #(s(x)))))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-union
"lambda(s,t:sets[uu], indic(x:uu, #(s(x)) or #(t(x))))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-intersection
"lambda(s,t:sets[uu], indic(x:uu, #(s(x)) and #(t(x))))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-difference
"lambda(s,t:sets[uu], indic(x:uu, #(s(x)) and (not #(t(x)))))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-sym-difference
"lambda(s,t:sets[uu],
indic(x:uu, (#(s(x)) and (not #(t(x)))) or ((not #(s(x))) and #(t(x)))))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-disjoint
"lambda(s,t:sets[uu], forall(x:uu, not(x in s) or not(x in t)))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-partition?
"lambda(w:sets[sets[uu]],s:sets[uu],
forall(u,v:sets[uu],
((not (u = v)) and (u in w) and (v in w)) implies (u disj v)) and
forall(x:uu, (x in s) iff forsome(u:sets[uu], (u in w) and (x in u))))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-singleton
"lambda(a:uu, indic(x:uu, x=a))"
(language indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-big-union
"lambda(f:[index,sets[uu]], indic(x:uu, forsome(i:index, #(f(i)(x)))))"
(language family-indicators)
(fixed-theories the-kernel-theory))
(def-quasi-constructor i-big-intersection
"lambda(f:[index,sets[uu]], indic(x:uu, forall(i:index, #(f(i)(x)))))"
(language family-indicators)
(fixed-theories the-kernel-theory))
(def-theorem value-of-a-defined-indicator-application
"forall(a:sets[uu],x:uu, (x in a) implies a(x) = an%individual)"
(theory indicators)
(usages transportable-macete)
(proof (simplify)))
(def-theorem meaning-of-indic-from-pred-element
"forall(x:uu,p:[uu,prop], (x in pred_to_indic(p)) iff p(x))"
(theory indicators)
(usages transportable-macete)
(proof (simplify)))
(def-theorem meaning-of-indic-from-sort-element
"forall(x:uu, (x in sort_to_indic(uu)) iff #(x,uu))"
(theory indicators)
(usages transportable-macete)
(proof (simplify-insistently)))