reserve Y for non empty set;
reserve Y for non empty set;
reserve Y for non empty set;
reserve Y for non empty set,
  a,b,c,d,e,f,g for Function of Y,BOOLEAN;

theorem Th21:
  (a 'imp' b) '&' (c 'imp' d) '<' (a 'or' c) 'imp' (b 'or' d)
proof
  let z be Element of Y;
A1: ((a 'imp' b) '&' (c 'imp' d)).z =(('not' a 'or' b) '&' (c 'imp' d)).z by
BVFUNC_4:8
    .=(('not' a 'or' b) '&' ('not' c 'or' d)).z by BVFUNC_4:8
    .=('not' a 'or' b).z '&' ('not' c 'or' d).z by MARGREL1:def 20
    .=(('not' a).z 'or' b.z) '&' ('not' c 'or' d).z by BVFUNC_1:def 4
    .=(('not' a).z 'or' b.z) '&' (('not' c).z 'or' (d).z) by BVFUNC_1:def 4;
  assume
A2: ((a 'imp' b) '&' (c 'imp' d)).z=TRUE;
  now
A3: (d).z=TRUE or (d).z=FALSE by XBOOLEAN:def 3;
A4: (b.z 'or' (d).z)=TRUE or (b.z 'or' (d).z)=FALSE by XBOOLEAN:def 3;
A5: (('not' a).z '&' ('not' c).z)=TRUE or (('not' a).z '&' ('not' c).z)=
    FALSE by XBOOLEAN:def 3;
A6: ((a 'or' c) 'imp' (b 'or' d)).z =('not'( a 'or' c) 'or' (b 'or' d)).z
    by BVFUNC_4:8
      .=(('not' a '&' 'not' c) 'or' (b 'or' d)).z by BVFUNC_1:13
      .=('not' a '&' 'not' c).z 'or' (b 'or' d).z by BVFUNC_1:def 4
      .=(('not' a).z '&' ('not' c).z) 'or' (b 'or' d).z by MARGREL1:def 20
      .=(('not' a).z '&' ('not' c).z) 'or' (b.z 'or' (d).z) by BVFUNC_1:def 4;
    assume
A7: ((a 'or' c) 'imp' (b 'or' d)).z<>TRUE;
    now
      per cases by A7,A6,A5,MARGREL1:12;
      case
        ('not' a).z=FALSE;
        thus thesis by A2,A1,A6,A4,A3;
      end;
      case
        ('not' c).z=FALSE;
        thus thesis by A2,A1,A6,A4,A3;
      end;
    end;
    hence thesis;
  end;
  hence thesis;
end;
