how to find sample rate of sum of 2 cos signals
Your signal has maximum frequency component of 10Hz which means a sampling rate of 20Hz according to Nyquist theorem should suffice. Then the cut-off frequency of 5Hz in the ideal filter should be enough to retain s(t) and eliminate v(t). However in the digital domain, typically a much higher sample rate is needed to process and display continuous time signals. I used a sampling rate of 100Hz in a simple python script below. Cutoff frequency of the selected FIR filter is still 5Hz to match s(t). It is customary to normalize sampling frequency to \pi in which case cut-off frequency becomes \pi/20 instead of \pi/4 as you showed for the theoretical case.
Below python script:
import numpy as np
from scipy.signal import firwin, lfilter
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt


# sampling frequency in Hz
Fs = 100

# center frequencies of a linearly combined signal 
fc1 = 5
fc2 = 10

# Observe duration in seconds, forumulate a time-axis
T = 5
tvals = np.arange(0, T, 1/Fs)

fig=plt.figure(figsize=(10,10))
s_t = np.cos(2*np.pi*fc1*tvals)
v_t = np.cos(2*np.pi*fc2*tvals)

plt.subplot(3,1,1)
plt.plot(tvals,s_t)
plt.ylabel('low-pass signal')
plt.grid()
x_t = s_t + v_t

plt.subplot(3,1,2)

plt.plot(tvals, x_t)
plt.ylabel('combined signal')
plt.grid()

# Filter Length
N = 31
taps = firwin(N, fc1/Fs)

# Simple FIR filtering
filtered_signal = lfilter(taps, 1.0, x_t)
ll = len(filtered_signal)
plt.subplot(3,1,3)

# Plot final result
plt.plot(tvals[int((N -1)/2):ll], filtered_signal[int((N - 1)/2):ll])
plt.grid()
plt.xlabel('Time')
plt.ylabel('filtered signal')
plt.tight_layout()
plt.show()

will generate a figure like:
Observe the recovered signal after filtering is the same (minus the filter delay effect) as the s(t)