(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)))