reserve Y for non empty set;

theorem
  for a,b,c being Function of Y,BOOLEAN holds (a 'imp' b) 'imp' ((
  b 'imp' c) 'imp' (a 'imp' c))=I_el(Y)
proof
  let a,b,c be Function of Y,BOOLEAN;
    let x be Element of Y;
A1: ((a 'imp' b) 'imp' ((b 'imp' c) 'imp' (a 'imp' c))).x =('not' (a 'imp'
    b).x) 'or' ((b 'imp' c) 'imp' (a 'imp' c)).x by BVFUNC_1:def 8
      .=('not' (a 'imp' b).x) 'or' ('not' (b 'imp' c).x 'or' (a 'imp' c).x)
    by BVFUNC_1:def 8;
A2: 'not' (b 'imp' c).x ='not' ('not' b.x 'or' c.x) by BVFUNC_1:def 8
      .=b.x '&' 'not' c.x;
A3: now
      per cases by XBOOLEAN:def 3;
      case
        b.x=TRUE;
        hence ('not' b.x 'or' b.x)=TRUE by BINARITH:10;
      end;
      case
        b.x=FALSE;
        then 'not' b.x 'or' b.x =TRUE 'or' FALSE by MARGREL1:11
          .=TRUE by BINARITH:10;
        hence ('not' b.x 'or' b.x)=TRUE;
      end;
    end;
A4: (a 'imp' c).x ='not' a.x 'or' c.x by BVFUNC_1:def 8;
A5: now
      per cases by XBOOLEAN:def 3;
      case
        c.x=TRUE;
        hence ('not' c.x 'or' c.x)=TRUE by BINARITH:10;
      end;
      case
        c.x=FALSE;
        then 'not' c.x 'or' c.x =TRUE 'or' FALSE by MARGREL1:11
          .=TRUE by BINARITH:10;
        hence ('not' c.x 'or' c.x)=TRUE;
      end;
    end;
A6: now
      per cases by XBOOLEAN:def 3;
      case
        a.x=TRUE;
        hence ('not' a.x 'or' a.x)=TRUE by BINARITH:10;
      end;
      case
        a.x=FALSE;
        then 'not' a.x 'or' a.x =TRUE 'or' FALSE by MARGREL1:11
          .=TRUE by BINARITH:10;
        hence ('not' a.x 'or' a.x)=TRUE;
      end;
    end;
    'not' (a 'imp' b).x ='not' ('not' a.x 'or' b.x) by BVFUNC_1:def 8
      .=a.x '&' 'not' b.x;
    then ('not' (a 'imp' b).x) 'or' ('not' (b 'imp' c).x 'or' (a 'imp' c).x )
    =(((b.x '&' 'not' c.x) 'or' ('not' a.x 'or' c.x)) 'or' a.x) '&' (((b.x '&'
    'not' c.x) 'or' ('not' a.x 'or' c.x)) 'or' 'not' b.x) by A2,A4,XBOOLEAN:9
      .=((b.x '&' 'not' c.x) 'or' ((c.x 'or' 'not' a.x) 'or' a.x)) '&' (((b.
    x '&' 'not' c.x) 'or' ('not' a.x 'or' c.x)) 'or' 'not' b.x) by BINARITH:11
      .=((b.x '&' 'not' c.x) 'or' (c.x 'or' ('not' a.x 'or' a.x))) '&' (((
'not' a.x 'or' c.x) 'or' (b.x '&' 'not' c.x)) 'or' 'not' b.x) by BINARITH:11
      .=((b.x '&' 'not' c.x) 'or' (c.x 'or' ('not' a.x 'or' a.x))) '&' ((
'not' a.x 'or' c.x) 'or' (('not' c.x '&' b.x) 'or' 'not' b.x)) by BINARITH:11
      .=((b.x '&' 'not' c.x) 'or' (c.x 'or' ('not' a.x 'or' a.x))) '&' ((
'not' a.x 'or' c.x) 'or' (('not' b.x 'or' 'not' c.x) '&' ('not' b.x 'or' b.x)))
    by XBOOLEAN:9
      .=((b.x '&' 'not' c.x) 'or' TRUE) '&' (('not' a.x 'or' c.x) 'or' ((
    'not' b.x 'or' 'not' c.x) '&' TRUE)) by A3,A6,BINARITH:10
      .=TRUE '&' (('not' a.x 'or' c.x) 'or' (('not' b.x 'or' 'not' c.x) '&'
    TRUE)) by BINARITH:10
      .=(('not' a.x 'or' c.x) 'or' (TRUE '&' ('not' b.x 'or' 'not' c.x))) by
MARGREL1:14
      .=('not' a.x 'or' c.x) 'or' ('not' c.x 'or' 'not' b.x) by MARGREL1:14
      .=(('not' a.x 'or' c.x) 'or' 'not' c.x) 'or' 'not' b.x by BINARITH:11
      .=('not' a.x 'or' TRUE) 'or' 'not' b.x by A5,BINARITH:11
      .=TRUE 'or' 'not' b.x by BINARITH:10
      .=TRUE by BINARITH:10;
    hence thesis by A1,BVFUNC_1:def 11;
end;
