Czy w Systemie F à la Church możemy zautomatyzować wnioskowanie o typie dla eliminacji dla wszystkich?


9

Pytanie jest następujące. Zasadniczo, gdy ktoś ma taki terminΛX.t, możemy wyeliminować forall poprzez zastosowanie tego terminu do typu, na przykład(ΛX.t)[T]t[X:=T].

Załóżmy teraz, że jest to strzałka i chcemy podać jej argument, wówczas musielibyśmy zastosować ten termin do odpowiedniego typu, aby mógł otrzymać taki argument. O to pytam, czy mogę zautomatyzować: Czy można zbudować funkcjęf biorąc dwa warunki i zwracając typ taki, że f<ΛX.t><r> podaj typ, który należy zastąpić X w t takie, że t może zaakceptować argument r?

Kilka przykładów:

  • f<ΛX.λxXX.t><λxT.x>=T.

  • f<ΛX.λxX.r><(λxR.tT) s>=T


2
Twoje pytanie byłoby nieco bardziej czytelne, jeśli nie podasz argumentu f jako podkatalogu / indeksu górnego, z których każdy zawiera inne podkatalogi / indeks górny.
Dave Clarke

Dla porównania: Ten rodzaj problemu jest jednym z dwóch problemów rozwiązanych przez „Wnioskowanie typu lokalnego” ( dl.acm.org/citation.cfm?id=345100 ). Również istotne powinno być dl.acm.org/citation.cfm?id=1086383 .
Blaisorblade

Odpowiedzi:


8

Nie jestem pewien, czy zrozumiałem pytanie. Najpierw staram się zredukować problem do następującego problemu zjednoczenia:

Biorąc pod uwagę układ F typu τ (X) z dowolną zmienną (typ) X i typ σ.
Czy można znaleźć taki typ γ, że τ (γ) = σ?

Oto pseudo-kod (z wyjątkiem zgłaszanego wyjątku, gdy nie jest jednoznaczny) do rozwiązania tego problemu.

unify (X, σ) = σ
unify (Y, Y) = Y
unify (τ₁ → τ₂, σ₁ → σ₂) = unify(τ₁,σ₁) → unify(τ₂,σ₂)
unify (∀Y.τ(Y), ∀Y.σ(Y)) = ∀Y.unify(τ(Y),σ(Y)) (with Y a fresh variable)
unify (_,_) = raise Not_unifiable

Możesz udowodnić (przez indukcję), że γ = τ (unify (τ (X), σ) działa, jeśli tylko wyjątek nie jest zgłoszony.

Teraz twój problem możesz wziąć

f (ΛX.t) (r) = match type of t with "τ₁ → τ₂" => unify (τ₁, type of r) | _ => fail end

(oczywiście twoja funkcja f powinna przyjąć jako argument kontekst, jeśli twoje terminy są otwarte).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.