You have a few options:
(1) You can deactivate indices of constraints without changing the index set, which is equivalent to removing the constraint from the model until you call activate() on it. E.g.,
instance.c[5].deactivate()
(2) You can delete elements from the set, but you also have to manually remove elements from the constraints and params that it indexes if you don’t want to run into problems later. E.g.,
instance.some_index_set.remove(5)
del instance.some_indexed_constraint[5]
del instance.some_indexed_param[5]
This issue becomes more complicated if you want to add elements. In this case it might be easier to use something like a ConstraintList where you don’t need to keep track of an external set and you can add or remove elements on the fly. However, the current implementation of ConstraintList makes it difficult to keep track which index new items are placed in, so beware of that:
# c is a ConstraintList (assume empty)
instance.c = ConstraintList()
instance.c.add(instance.x >= ...) # goes to index 1
instance.c.add(instance.x >= ...) # goes to index 2
del instance.c[2]
print(len(instance.c)) # there is 1 element in c
instance.c.add(instance.x >= …) # goes to index 3
print(len(instance.c)) # there are 2 elements in c
Finally, when starting from an AbstractModel be sure all of these operations are performed on an instance returned from model.create_instance(…) and not the model itself.
Gabe