theorem Th23:
  J,v |= p => q iff Valid(p, J).v = FALSE or Valid(q, J).v = TRUE
proof
A1: now
A2: now
      assume
A3:   Valid(q, J).v = TRUE;
      assume not J,v |= p => q;
      then Valid(p => q, J).v <> TRUE;
      then Valid(p => q, J).v = FALSE by XBOOLEAN:def 3;
      then Valid('not'(p '&' 'not' q), J).v = FALSE by QC_LANG2:def 2;
      then 'not'(Valid(p '&' 'not' q, J).v) = FALSE by Th10;
      then Valid(p '&' 'not' q, J).v = TRUE by MARGREL1:11;
      then (Valid(p, J).v) '&' (Valid('not' q, J).v) = TRUE by Th12;
      then (Valid(p, J).v) '&' 'not'(Valid(q, J).v) = TRUE by Th10;
      then 'not' (Valid(q, J).v) = TRUE by MARGREL1:12;
      hence contradiction by A3,MARGREL1:11;
    end;
A4: now
      assume Valid(p, J).v = FALSE;
      then (Valid(p, J).v) '&' (Valid('not' q, J).v) = FALSE by MARGREL1:12;
      then Valid(p '&' 'not' q, J).v = FALSE by Th12;
      then 'not'(Valid(p '&' 'not' q, J).v) = TRUE by MARGREL1:11;
      then Valid('not'(p '&' 'not' q), J).v = TRUE by Th10;
      then Valid(p => q, J).v = TRUE by QC_LANG2:def 2;
      hence J,v |= p => q;
    end;
    assume Valid(p, J).v = FALSE or Valid(q, J).v = TRUE;
    hence J,v |= p => q by A4,A2;
  end;
  now
    assume J,v |= p => q;
    then Valid(p => q, J).v = TRUE;
    then Valid('not'(p '&' 'not' q), J).v = TRUE by QC_LANG2:def 2;
    then 'not'(Valid(p '&' 'not' q, J).v) = TRUE by Th10;
    then Valid(p '&' 'not' q, J).v = FALSE by MARGREL1:11;
    then (Valid(p, J).v) '&' (Valid('not' q, J).v) = FALSE by Th12;
    then (Valid(p, J).v) '&' 'not'(Valid(q, J).v) = FALSE by Th10;
    then Valid(p, J).v = FALSE or 'not' (Valid(q, J).v) = FALSE by MARGREL1:12;
    hence Valid(p, J).v = FALSE or Valid(q, J).v = TRUE by MARGREL1:11;
  end;
  hence thesis by A1;
end;
