The fun thing about Construct is that it keeps a count of the objects. First, make sure bullets are destroyed when out of layout.
Then keep track, of many objects are on the screen. I typically assign some kind of global variable. NumberOfBulletsOnScreen = 0
Now, when you press the space key (or fire key) count the number of objects on the screen. Number of bullets = bullets.Count
'.Count' is appended after the object name to get the total number of that objects on the screen.
For your conditions down "when space key is pressed (or whatever key is the fire key) AND NumberOfBulletsOnScreen < 0
and the actions would be
spawn new bullet
NumberofBulletsOnScreen = bullets.count
This will work because you will keep a constant track of the bullets on the screen every time you fire. The layout always starts it as 0 so it will always allow you to start firing. As you fire it will raise the number of bullets on the screen. When there are 4, it won't let you fire any more. But you need to make sure to keep track of the number of bullets on the screen when the bullets are destroyed too. So you need one more condition and action.
Condition:
Bullet-On Destroyed
Action:
NumberOfBulletsOnScreen = bullet.Count
That will lower the variable and reset it as bullets are destroyed.