Jump to content

A Practical Guide To Mizar/Relations and Functions

From Wikibooks, open books for an open world

Relations

[edit | edit source]

For this section, this will be the environment used:

environ

 vocabularies XBOOLE_0, TARSKI, ZFMISC_1, SUBSET_1, RELAT_1, VALUED_1;
 notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, XTUPLE_0, RELAT_1;
 constructors TARSKI, SUBSET_1, ZFMISC_1, XBOOLE_0, XTUPLE_0, RELAT_1;
 registrations XBOOLE_0, ZFMISC_1, RELAT_1;
 requirements SUBSET, BOOLE;
 theorems XBOOLE_0, ZFMISC_1, XTUPLE_0, RELAT_1;

begin

A relation is just a set consisting only of ordered pairs:

definition
  let IT be set;
  attr IT is Relation-like means
:: RELAT_1:def 1

  x in IT implies ex y,z st x = [y,z];
end;

registration
  cluster empty -> Relation-like for set;
end;

definition
  mode Relation is Relation-like set;
end;

where x,y,z are objects. For the rest of this section let P,Q,R denote relations. Then we can redefine P = R and P c= R as follows:

definition
  let P,R;
  redefine pred P = R means
:: RELAT_1:def 2
  for a,b holds [a,b] in P iff [a,b] in R;
end;

definition
  let P,A;
  redefine pred P c= R means
:: RELAT_1:def 3
  for a,b holds [a,b] in P implies [a,b] in R;
end;

We can also infer that the intersection and set difference of a relation with a set is a relation again:

registration
  let P;
  let X be set;
  cluster P /\ X -> Relation-like;
  coherence
  proof
    for z being object st z in P /\ X ex x,y being object st z = [x,y]
    proof
      let z be object;
      assume z in P /\ X;
      then z in P by XBOOLE_0:def 4;
      hence thesis by RELAT_1:def 1;
    end;
    hence thesis by RELAT_1:def 1;
  end;
  cluster P \ X -> Relation-like;
  coherence
  proof
    for z being object st z in P \ X ex x,y being object st z = [x,y]
    proof
      let z be object;
      assume z in P \ X;
      then z in P by XBOOLE_0:def 5;
      hence thesis by RELAT_1:def 1;
    end;
    hence thesis by RELAT_1:def 1;
  end;
end;

Similarly, the union of two relations is a relation again.

Exercise 1: Prove cluster P \/ R -> Relation-like;.

Note that the Cartesian product of two sets is of course a relation as well:

registration
  let a, b be set;
  cluster [:a,b:] -> Relation-like;
  coherence
  proof
    for z being object st z in [:a,b:] ex x,y being object st z = [x,y]
    proof
      let z be object;
      assume z in [:a,b:];
      then consider c,d being object such that
        A1: c in a & d in b & z = [c,d] by ZFMISC_1:def 2;
      take c,d;
      thus thesis by A1;
    end;
    hence thesis by RELAT_1:def 1;
  end;
end;

Of course there are functors to get the set of the first or second coordinates of a set containing pairs:

definition
  let X be set;
  func proj1 X -> set means
:: XTUPLE_0:def 12

  x in it iff ex y st [x,y] in X;
  func proj2 X -> set means
:: XTUPLE_0:def 13

  x in it iff ex y st [y,x] in X;
end;

proj is short for projection. If the set X is already a relation, we call the projection to the first coordinate the domain and the projection to the second coordinate the range (or codomain or image) of the relation:

notation
  let R be Relation;
  synonym dom R for proj1 R;
end;

notation
  let R be Relation;
  synonym rng R for proj2 R;
end;

The notation construct is useful to avoid functor definitions like e.g.

definition
  let R be Relation;
  func dom R -> set equals proj1 R;
end;

notation has the advantage that we don't need to reference a definition for Mizar to recognize the equality.

RELAT_1 (as well as XTUPLE_0) contains several statements regarding domain and range for relations, for example:

theorem :: RELAT_1:12
  rng(P \/ R) = rng P \/ rng R;

theorem :: RELAT_1:13
  rng(P /\ R) c= rng P /\ rng R;

Exercise 2: Find P,R such that the subset predicate in RELAT_1:13 becomes proper. I.e. prove ex P,R st rng(P /\ R) <> rng P /\ rng R. You can use RELAT_1:9.

The field of a relation is the union of its domain and range:

definition
  let R;
  func field R -> set equals
:: RELAT_1:def 6
  dom R \/ rng R;
end;

Exercise 3: Prove field(P \/ R) = field P \/ field R (RELAT_1:18) using XTUPLE_0:23, 27 and the commutativity (in-built) and associativity (XBOOLE_1:4) law of the set union.

Exercise Solutions

[edit | edit source]

Exercise 1:

registration
  let P,R;
  cluster P \/ R -> Relation-like;
  coherence
  proof
    for z being object st z in P \/ R ex x,y being object st z = [x,y]
    proof
      let z be object;
      assume z in P \/ R;
      then per cases by XBOOLE_0:def 3;
      suppose z in P;
        hence thesis by RELAT_1:def 1;
      end;
      suppose z in R;
        hence thesis by RELAT_1:def 1;
      end;
    end;
    hence thesis by RELAT_1:def 1;
  end;
end;

Exercise 2:

ex P,R st rng(P /\ R) <> rng P /\ rng R
proof
  set a = {}, b = {{}};
  set P = {[b,a]}, R = {[a,a]};
  take P,R;
  [b,a] <> [a,a] by XTUPLE_0:1;
  then P misses R by ZFMISC_1:11;
  then P /\ R = {} by XBOOLE_0:def 7;
  then A1: rng(P /\ R) = {};
  rng P /\ rng R = {a} /\ rng R by RELAT_1:9
    .= {a} /\ {a} by RELAT_1:9;
  hence thesis by A1;
end;

Exercise 3:

field(P \/ R) = field P \/ field R
proof
  thus field(P \/ R) = dom(P \/ R) \/ rng(P \/ R) by RELAT_1:def 6
    .= dom P \/ dom R \/ rng(P \/ R) by XTUPLE_0:23
    .= dom P \/ dom R \/ (rng P \/ rng R) by XTUPLE_0:27
    .= dom P \/ (dom R \/ (rng P \/ rng R)) by XBOOLE_1:4
    .= dom P \/ (rng P \/ dom R \/ rng R) by XBOOLE_1:4
    .= dom P \/ (rng P \/ (dom R \/ rng R)) by XBOOLE_1:4
    .= dom P \/ (rng P \/ field R) by RELAT_1:def 6
    .= (dom P \/ rng P) \/ field R by XBOOLE_1:4
    .= field P \/ field R by RELAT_1:def 6;
end;