∀ {α : Type u} {C : FreeSemigroup α → Sort l} (x : FreeSemigroup α) (ih1 : (x : α) → C (pure x))
  (ih2 : (x : α) → (y : FreeSemigroup α) → C (pure x) → C y → C (pure x * y)), x.recOnPure ih1 ih2 = x.recOnMul ih1 ih2