Skip to content

Commit d783a6d

Browse files
committed
prop.gd: add "condition true → property false" implications
1 parent 6c61036 commit d783a6d

File tree

2 files changed

+233
-2
lines changed

2 files changed

+233
-2
lines changed

gap/prop.gd

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,44 @@ InstallTrueMethod(IsNonemptyDigraph, IsDigraph and DigraphHasLoops);
107107
InstallTrueMethod(DigraphHasLoops, IsReflexiveDigraph and DigraphHasAVertex);
108108
InstallTrueMethod(DigraphHasAVertex, IsDigraph and IsNonemptyDigraph);
109109
InstallTrueMethod(DigraphHasAVertex, IsDigraph and IsDirectedTree);
110+
111+
# Implications that something is false
112+
113+
InstallTrueMethod(HasDigraphHasLoops, IsAcyclicDigraph);
114+
InstallTrueMethod(HasDigraphHasLoops, IsTournament);
115+
InstallTrueMethod(HasDigraphHasLoops, IsUndirectedForest);
116+
InstallTrueMethod(HasDigraphHasLoops, IsDirectedTree);
117+
InstallTrueMethod(HasDigraphHasLoops, IsEmptyDigraph);
118+
InstallTrueMethod(HasDigraphHasLoops, IsCompleteDigraph and IsNonemptyDigraph);
119+
InstallTrueMethod(HasDigraphHasLoops, IsBipartiteDigraph);
120+
121+
InstallTrueMethod(HasIsNonemptyDigraph, IsEmptyDigraph);
122+
InstallTrueMethod(HasIsEmptyDigraph, IsNonemptyDigraph);
123+
InstallTrueMethod(HasDigraphHasAVertex, DigraphHasNoVertices);
124+
InstallTrueMethod(HasDigraphHasNoVertices, DigraphHasAVertex);
125+
126+
InstallTrueMethod(HasIsAcyclicDigraph, IsCompleteDigraph and IsNonemptyDigraph);
127+
InstallTrueMethod(HasIsAcyclicDigraph, IsDigraph and DigraphHasLoops);
128+
InstallTrueMethod(HasIsAcyclicDigraph,
129+
IsStronglyConnectedDigraph and IsNonemptyDigraph);
130+
InstallTrueMethod(HasIsAntisymmetricDigraph,
131+
IsCompleteDigraph and IsNonemptyDigraph);
132+
InstallTrueMethod(HasIsChainDigraph, IsDigraph and DigraphHasLoops);
133+
InstallTrueMethod(HasIsChainDigraph, IsSymmetricDigraph and IsNonemptyDigraph);
134+
InstallTrueMethod(HasIsCompleteDigraph, IsDigraph and DigraphHasLoops);
135+
InstallTrueMethod(HasIsReflexiveDigraph,
136+
IsAcyclicDigraph and DigraphHasAVertex);
137+
138+
InstallTrueMethod(HasIsSymmetricDigraph, IsDirectedTree and IsNonemptyDigraph);
139+
InstallTrueMethod(HasIsSymmetricDigraph, IsTournament and IsNonemptyDigraph);
140+
InstallTrueMethod(HasIsSymmetricDigraph,
141+
IsAcyclicDigraph and IsNonemptyDigraph);
142+
143+
InstallTrueMethod(HasIsMultiDigraph, IsChainDigraph);
144+
InstallTrueMethod(HasIsMultiDigraph, IsCompleteDigraph);
145+
InstallTrueMethod(HasIsMultiDigraph, IsCompleteMultipartiteDigraph);
146+
InstallTrueMethod(HasIsMultiDigraph, IsCycleDigraph);
147+
InstallTrueMethod(HasIsMultiDigraph, IsEmptyDigraph);
148+
InstallTrueMethod(HasIsMultiDigraph, IsFunctionalDigraph);
149+
InstallTrueMethod(HasIsMultiDigraph, IsTournament);
150+
InstallTrueMethod(HasIsMultiDigraph, IsUndirectedForest);

tst/standard/prop.tst

Lines changed: 192 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#############################################################################
22
##
33
#W standard/prop.tst
4-
#Y Copyright (C) 2014-17 James D. Mitchell
4+
#Y Copyright (C) 2014-21 James D. Mitchell
55
## Wilf A. Wilson
66
##
77
## Licensing information can be found in the README file of this package.
@@ -139,7 +139,7 @@ gap> gr := Digraph([[1]]);;
139139
gap> DigraphHasLoops(gr);
140140
true
141141
gap> HasIsAcyclicDigraph(gr);
142-
false
142+
true
143143
gap> IsAcyclicDigraph(gr);
144144
false
145145
gap> gr := Digraph([[2], []]);
@@ -1572,6 +1572,196 @@ false
15721572
gap> IsNonemptyDigraph(Digraph([[], [3], []]));
15731573
true
15741574

1575+
# Implications that something is false
1576+
# DigraphHasLoops
1577+
gap> D := Digraph([[2], [], [2]]);;
1578+
gap> SetIsAcyclicDigraph(D, true);
1579+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1580+
true
1581+
1582+
#
1583+
gap> D := Digraph([[2], []]);;
1584+
gap> SetIsTournament(D, true);
1585+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1586+
true
1587+
1588+
#
1589+
gap> D := Digraph([[2], [1, 3, 4], [2], [2], [6], [5]]);;
1590+
gap> SetIsUndirectedForest(D, true);
1591+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1592+
true
1593+
1594+
#
1595+
gap> D := Digraph([[3], [1, 4], [], []]);;
1596+
gap> SetIsDirectedTree(D, true);
1597+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1598+
true
1599+
1600+
#
1601+
gap> D := Digraph([[], []]);;
1602+
gap> SetIsEmptyDigraph(D, true);
1603+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1604+
true
1605+
1606+
#
1607+
gap> D := Digraph([[2, 3], [1, 3], [1, 2]]);;
1608+
gap> SetIsCompleteDigraph(D, true);
1609+
gap> SetIsNonemptyDigraph(D, true);
1610+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1611+
true
1612+
1613+
#
1614+
gap> D := Digraph([[2], []]);;
1615+
gap> SetIsBipartiteDigraph(D, true);
1616+
gap> HasDigraphHasLoops(D) and not DigraphHasLoops(D);
1617+
true
1618+
1619+
# IsAcyclicDigraph
1620+
gap> D := Digraph([[2], [1]]);;
1621+
gap> SetIsCompleteDigraph(D, true);
1622+
gap> SetIsNonemptyDigraph(D, true);
1623+
gap> HasIsAcyclicDigraph(D) and not IsAcyclicDigraph(D);
1624+
true
1625+
1626+
#
1627+
gap> D := Digraph([[2, 3], [2], [2]]);;
1628+
gap> SetDigraphHasLoops(D, true);
1629+
gap> HasIsAcyclicDigraph(D) and not IsAcyclicDigraph(D);
1630+
true
1631+
1632+
#
1633+
gap> D := Digraph([[3], [1], [2]]);;
1634+
gap> SetIsStronglyConnectedDigraph(D, true);
1635+
gap> SetIsNonemptyDigraph(D, true);
1636+
gap> HasIsAcyclicDigraph(D) and not IsAcyclicDigraph(D);
1637+
true
1638+
1639+
# Other
1640+
gap> D := Digraph([[], []]);;
1641+
gap> SetIsEmptyDigraph(D, true);
1642+
gap> HasIsNonemptyDigraph(D) and not IsNonemptyDigraph(D);
1643+
true
1644+
1645+
#
1646+
gap> D := Digraph([[], [1]]);;
1647+
gap> SetIsNonemptyDigraph(D, true);
1648+
gap> HasIsEmptyDigraph(D) and not IsEmptyDigraph(D);
1649+
true
1650+
1651+
#
1652+
gap> D := Digraph([]);;
1653+
gap> SetDigraphHasNoVertices(D, true);
1654+
gap> HasDigraphHasAVertex(D) and not DigraphHasAVertex(D);
1655+
true
1656+
1657+
#
1658+
gap> D := Digraph([[]]);;
1659+
gap> SetDigraphHasAVertex(D, true);
1660+
gap> HasDigraphHasNoVertices(D) and not DigraphHasNoVertices(D);
1661+
true
1662+
1663+
#
1664+
gap> D := Digraph([[2], [1]]);;
1665+
gap> SetIsCompleteDigraph(D, true);
1666+
gap> SetIsNonemptyDigraph(D, true);
1667+
gap> HasIsAntisymmetricDigraph(D) and not IsAntisymmetricDigraph(D);
1668+
true
1669+
1670+
#
1671+
gap> D := Digraph([[2], [3], [3]]);;
1672+
gap> SetDigraphHasLoops(D, true);
1673+
gap> HasIsChainDigraph(D) and not IsChainDigraph(D);
1674+
true
1675+
1676+
#
1677+
gap> D := Digraph([[2, 3], [1], [1, 4], [3]]);;
1678+
gap> SetIsSymmetricDigraph(D, true);
1679+
gap> SetIsNonemptyDigraph(D, true);
1680+
gap> HasIsChainDigraph(D) and not IsChainDigraph(D);
1681+
true
1682+
1683+
#
1684+
gap> D := Digraph([[2], [3], [3]]);;
1685+
gap> SetDigraphHasLoops(D, true);
1686+
gap> HasIsCompleteDigraph(D) and not IsCompleteDigraph(D);
1687+
true
1688+
1689+
#
1690+
gap> D := Digraph([[2], [5], [], [5], [6], []]);;
1691+
gap> SetIsAcyclicDigraph(D, true);
1692+
gap> SetDigraphHasAVertex(D, true);
1693+
gap> HasIsReflexiveDigraph(D) and not IsReflexiveDigraph(D);
1694+
true
1695+
1696+
# IsSymmetricDigraph
1697+
gap> D := Digraph([[3], [], [2]]);;
1698+
gap> SetIsAcyclicDigraph(D, true);
1699+
gap> SetIsNonemptyDigraph(D, true);
1700+
gap> HasIsSymmetricDigraph(D) and not IsSymmetricDigraph(D);
1701+
true
1702+
1703+
#
1704+
gap> D := Digraph([[3], [], [2]]);;
1705+
gap> SetIsDirectedTree(D, true);
1706+
gap> SetIsNonemptyDigraph(D, true);
1707+
gap> HasIsSymmetricDigraph(D) and not IsSymmetricDigraph(D);
1708+
true
1709+
1710+
#
1711+
gap> D := Digraph([[3], [1], [2]]);;
1712+
gap> SetIsTournament(D, true);
1713+
gap> SetIsNonemptyDigraph(D, true);
1714+
gap> HasIsSymmetricDigraph(D) and not IsSymmetricDigraph(D);
1715+
true
1716+
1717+
# IsMultiDigraph
1718+
gap> D := Digraph([[2], [3], [4], []]);;
1719+
gap> SetIsChainDigraph(D, true);
1720+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1721+
true
1722+
1723+
#
1724+
gap> D := Digraph([[2, 3], [3, 1], [2, 1]]);;
1725+
gap> SetIsCompleteDigraph(D, true);
1726+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1727+
true
1728+
1729+
#
1730+
gap> D := Digraph([[2, 3], [3, 1], [2, 1]]);;
1731+
gap> SetIsCompleteMultipartiteDigraph(D, true);
1732+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1733+
true
1734+
1735+
#
1736+
gap> D := Digraph([[2], [1]]);;
1737+
gap> SetIsCycleDigraph(D, true);
1738+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1739+
true
1740+
1741+
#
1742+
gap> D := Digraph([[], []]);;
1743+
gap> SetIsEmptyDigraph(D, true);
1744+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1745+
true
1746+
1747+
#
1748+
gap> D := Digraph([[3], [2], [3], [1]]);;
1749+
gap> SetIsFunctionalDigraph(D, true);
1750+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1751+
true
1752+
1753+
#
1754+
gap> D := Digraph([[3], [1], [2]]);;
1755+
gap> SetIsTournament(D, true);
1756+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1757+
true
1758+
1759+
#
1760+
gap> D := Digraph([[2], [1, 3, 4], [2], [2], [6], [5]]);;
1761+
gap> SetIsUndirectedForest(D, true);
1762+
gap> HasIsMultiDigraph(D) and not IsMultiDigraph(D);
1763+
true
1764+
15751765
# DIGRAPHS_UnbindVariables
15761766
gap> Unbind(adj);
15771767
gap> Unbind(circuit);

0 commit comments

Comments
 (0)