reserve i,j for Nat;
reserve i,j for Nat,
  x for variable,
  l for quasi-loci;
reserve C for initialized ConstructorSignature,
  c for constructor OperSymbol of C;
reserve a,a9 for quasi-adjective,
  t,t1,t2 for quasi-term,
  T for quasi-type,

  c for Element of Constructors;

theorem
  constrs(a ast T) = (constrs a) \/ (constrs T)
  proof
    set A = {constrs a9: a9 in {a} \/ adjs T};
    set B = {constrs a9: a9 in adjs T};
A1: A = B \/{constrs a}
    proof
      thus A c= B \/{constrs a} proof let z be object;
        assume z in A; then
        consider a9 such that
A2:     z = constrs a9 & a9 in {a} \/ adjs T;
        a9 in {a} or a9 in adjs T by A2,XBOOLE_0:def 3; then
        a9 = a or a9 in adjs T by TARSKI:def 1; then
        z in {constrs a} or z in B by A2,TARSKI:def 1;
        hence thesis by XBOOLE_0:def 3;
      end;
      let z be object; assume
A3:   z in B\/{constrs a};
A4:   a in {a} by TARSKI:def 1;
      per cases by A3,XBOOLE_0:def 3;
      suppose z in B; then
        consider a9 such that
A5:     z = constrs a9 & a9 in adjs T;
        a9 in {a} \/ adjs T by A5,XBOOLE_0:def 3;
        hence thesis by A5;
      end;
      suppose z in {constrs a}; then
        z = constrs a & a in {a} \/ adjs T by A4,TARSKI:def 1,XBOOLE_0:def 3;
        hence thesis;
      end;
    end;
    thus constrs(a ast T) = (constrs the_base_of (a ast T)) \/ union A
    .= (constrs the_base_of T) \/ union A
    .= (constrs the_base_of T) \/ ((union {constrs a}) \/ union B)
    by A1,ZFMISC_1:78
    .= (constrs the_base_of T) \/ ((constrs a) \/ union B) by ZFMISC_1:25
    .= (constrs the_base_of T) \/ (constrs a) \/ union B by XBOOLE_1:4
    .= (constrs a) \/ ((constrs the_base_of T) \/ union B) by XBOOLE_1:4
    .= (constrs a) \/ (constrs T);
  end;
