Я использую F* 0.9.6.0 и не могу заставить эту простую программу пройти проверку подтипов:
module Test
open FStar.String
let minlen s n = strlen s >= n
let maxlen s n = strlen s <= n
let isLanguageValid s = (minlen s 2) && (maxlen s 8)
type language = s : string { isLanguageValid s }
let english : language = "en"
let invalid : language = "abcdefghi"
Я ожидаю, что english
пройдет, а invalid
потерпит неудачу. Все, что я пробовал, либо приводило к тому, что оба они были отвергнуты, либо оба были приняты. Что я делаю не так? Я просто хотел бы принять строки определенной длины для этого типа.