reserve x,y,z,c for object,
  f for Function of 2-tuples_on BOOLEAN, BOOLEAN;
reserve s for State of 2GatesCircuit(x,y,c,f);

theorem
  for s being State of MajorityICirc(x,y,c), a,b being Element of
  BOOLEAN st a = s.y & b = s.c holds (Following s).[<*y,c*>, '&'] = a '&' b
proof
  set yc = <*y,c*>;
  set S2 = 1GateCircStr(yc, '&'), A2 = 1GateCircuit(y,c, '&');
  reconsider yy = y, cc = c as Vertex of S2 by Th43;
  reconsider v2 = [yc, '&'] as Element of InnerVertices S2 by Th47;
  set S1 = 1GateCircStr(<*x,y*>, '&'), A1 = 1GateCircuit(x,y, '&');
  set S3 = 1GateCircStr(<*c,x*>, '&'), A3 = 1GateCircuit(c,x, '&');
  set S = MajorityIStr(x,y,c), A = MajorityICirc(x,y,c);
  let s be State of A;
  let a,b be Element of BOOLEAN such that
A1: a = s.y & b = s.c;
A2: S1+*S2 = S2+*S1 by CIRCCOMB:5,47;
  then
A3: S = S2+*(S1+*S3) by CIRCCOMB:6;
  then reconsider v = v2 as Element of InnerVertices S by Th21;
  A1+*A2 = A2+*A1 by CIRCCOMB:22,60;
  then
A4: A = A2+*(A1+*A3) by A2,Th25;
  then reconsider s2 = s|the carrier of S2 as State of A2 by Th26;
  reconsider yy, cc as Vertex of S by A3,Th20;
A5: dom s2 = the carrier of S2 by CIRCUIT1:3;
  thus (Following s).[yc, '&'] = (Following s2).v by A3,A4,CIRCCOMB:64
    .= '&'.<*s2.yy,s2.cc*> by Th48
    .= '&'.<*s.yy,s2.cc*> by A5,FUNCT_1:47
    .= '&'.<*s.yy,s.cc*> by A5,FUNCT_1:47
    .= a '&' b by A1,Def5;
end;
