For robots with links and joints forming closed loops, it is often easier to find an implicit representation of the C-space rather than an explicit parametrization. Consider the 4-bar closed chain shown here. Grubler's formula tells us the 4-bar has one degree of freedom, so it should be possible to parametrize the C-space by a single variable. This representation may be hard to derive and may have subtle singularities, so instead we could view the C-space as a 1-dimensional space embedded in the 4-dimensional space of joint angles, defined by the three loop-closure equations that say the final position and orientation, after going around the loop, must be equal to the initial position and orientation. If we define the vector of joint angles theta, we can rewrite the loop-closure equations in this vector form. These constraints are called holonomic constraints, constraints that reduce the dimension of the C-space. If the robot's configuration is defined by n variables subject to k independent holonomic constraints, then the dimension of the C-space, and the number of degrees of freedom, is n minus k. If the robot is moving, we could ask how these holonomic constraints restrict the velocity of the robot. Since g of theta has to be zero at all times, the time rate of change of g must also be zero at all times. We can write these constraints as a matrix dependent on the configuration theta times the joint velocities theta-dot equal to zero. If we call this matrix A of theta, we can write the velocity constraints as A of theta times theta-dot equals zero, where the A matrix has k rows and n columns. Velocity constraints like this are called Pfaffian constraints. Sometimes we call holonomic constraints "integrable" constraints, since they are essentially the integral of these velocity constraints. In some cases, though, a set of velocity constraints cannot be integrated to equivalent configuration constraints. Consider the chassis of a car driving on a plane. If we define an x-y reference frame, we can represent the configuration of the chassis as q = (phi, x, y), where phi is the chassis angle, and (x,y) refers to the location of a point halfway between the rear wheels. If the forward velocity of the car is v, the x-y velocity is x-dot = v cos phi and y-dot = v sin phi. We can express v as y-dot divided by sin phi and substitute this into our equation for x-dot to get the velocity constraint x-dot times sine phi minus y-dot times cosine phi equals zero. We can write this as a Pfaffian constraint A of q times q-dot equals zero where the single row of the 1 by 3 A matrix is 0, sine of phi, and minus cosine of phi. Unlike a holonomic constraint, this velocity constraint cannot be integrated to give an equivalent configuration constraint. Therefore we call this a nonholonomic constraint. A nonholonomic constraint reduces the space of possible velocities of the car -- the car cannot slide directly to the side -- but it does not reduce the space of configurations. Sideways motion can be achieved by parallel parking, and the car can reach any configuration in the 3-dimensional C-space. A robot can be subject to both holonomic and nonholonomic constraints. Again using the car as an example, if we consider the chassis to be a rigid body in space, then three holonomic constraints keep the chassis confined to the plane, while one nonholonomic constraint prevents sideways sliding. To summarize, holonomic constraints are constraints on configuration, nonholonomic constraints are constraints on velocity, and Pfaffian constraints take the form A of theta times theta-dot equals zero. Determining whether Pfaffian constraints are actually holonomic configuration constraints or only nonholonomic velocity constraints is left to Chapter 13. In the next video we wrap up Chapter 2 by introducing the task space and the workspace.