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.x & b = s.y holds (Following s).[<*x,y*>, '&'] = a '&' b
proof
  set xy = <*x,y*>;
  set S1 = 1GateCircStr(xy, '&'), A1 = 1GateCircuit(x,y, '&');
  reconsider xx = x, yy = y as Vertex of S1 by Th43;
  reconsider v1 = [xy, '&'] as Element of InnerVertices S1 by Th47;
  set S2 = 1GateCircStr(<*y,c*>, '&'), A2 = 1GateCircuit(y,c, '&');
  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.x & b = s.y;
A2: A = A1+*(A2+*A3) by Th25;
  then reconsider s1 = s|the carrier of S1 as State of A1 by Th26;
A3: S = S1+*(S2+*S3) by CIRCCOMB:6;
  then reconsider v = v1 as Element of InnerVertices S by Th21;
  reconsider xx, yy as Vertex of S by A3,Th20;
A4: dom s1 = the carrier of S1 by CIRCUIT1:3;
  thus (Following s).[xy, '&'] = (Following s1).v by A3,A2,CIRCCOMB:64
    .= '&'.<*s1.xx,s1.yy*> by Th48
    .= '&'.<*s.xx,s1.yy*> by A4,FUNCT_1:47
    .= '&'.<*s.xx,s.yy*> by A4,FUNCT_1:47
    .= a '&' b by A1,Def5;
end;
