import math

def predict_shelf_life(t_ref, T_ref, T, Ea):
    """
    + Input: 
      - t_ref (float): Thời hạn sử dụng ở nhiệt độ tham chiếu T_ref (VD: số ngày). Ràng buộc: t_ref > 0.
      - T_ref (float): Nhiệt độ tham chiếu (đơn vị: độ C).
      - T (float): Nhiệt độ bảo quản thực tế cần dự đoán (đơn vị: độ C).
      - Ea (float): Năng lượng hoạt hóa của phản ứng suy thoái (đơn vị: J/mol). Ràng buộc: Ea > 0.
      
    + Output: 
      - (float): Trả về thời hạn sử dụng (shelf-life) dự đoán ở nhiệt độ T, có cùng đơn vị đo với tham số t_ref.
      
    + Ý nghĩa của hàm:
      - Hàm dùng để dự đoán thời hạn sử dụng của một sản phẩm khi được bảo quản ở một nhiệt độ mới, dựa vào các thông số động học của phương trình Arrhenius.
      
    + Thuật toán, công thức nếu có:
      - Bước 1: Chuyển đổi nhiệt độ T_ref và T từ thang đo Celsius (độ C) sang Kelvin (độ K) bằng công thức: K = C + 273.15.
      - Bước 2: Sử dụng hằng số khí lý tưởng R = 8.314 J/(mol*K).
      - Bước 3: Áp dụng công thức suy ra từ phương trình Arrhenius để tính hạn sử dụng:
        t = t_ref * exp( (Ea / R) * (1/T_K - 1/T_ref_K) )
    """
    
    # Hằng số khí lý tưởng
    R = 8.314 
    
    # Đổi sang nhiệt độ Kelvin
    T_ref_K = T_ref + 273.15
    T_K = T + 273.15
    
    # Tính toán shelf-life
    t = t_ref * math.exp((Ea / R) * ((1 / T_K) - (1 / T_ref_K)))
    
    return t