▁( resp . ▁term ▁). ▁ ▁Dep endent ▁types ▁▁ ▁Dep endent ▁types ▁are ▁based ▁on ▁the ▁idea ▁of ▁using ▁scal ars ▁or ▁values ▁to ▁more ▁precisely ▁describe ▁the ▁type ▁of ▁some ▁other ▁value . ▁For ▁example , ▁ ▁might ▁be ▁the ▁type ▁of ▁a ▁ ▁matrix . ▁We ▁can ▁then ▁define ▁typing ▁rules ▁such ▁as ▁the ▁following ▁rule ▁for ▁matrix ▁multiplication : ▁▁▁▁ ▁where ▁, ▁, ▁ ▁are ▁arbitrary ▁positive ▁integer ▁values . ▁A ▁variant ▁of ▁ML ▁called ▁Dep endent ▁ML ▁has ▁been ▁created ▁based ▁on ▁this ▁type ▁system , ▁but ▁because ▁type ▁checking ▁for ▁conventional ▁dependent ▁types ▁is ▁und ec id able , ▁not ▁all ▁programs ▁using ▁them ▁can ▁be ▁type - checked ▁without ▁some ▁kind ▁of ▁limits . ▁Dep endent ▁ML ▁limits ▁the ▁sort ▁of ▁equality ▁it ▁can ▁decide ▁to ▁Pres burger ▁arithmetic . ▁ ▁Other ▁languages ▁such ▁as ▁Ep ig ram ▁make ▁the ▁value ▁of ▁all ▁expressions ▁in ▁the ▁language ▁decid able ▁so ▁that ▁type ▁checking ▁can ▁be ▁decid able . ▁However , ▁in ▁general ▁proof ▁of ▁decid ability ▁is ▁und ec id able , ▁so ▁many ▁programs ▁require ▁hand - written ▁annotations ▁that ▁may ▁be ▁very ▁non - t rivial . ▁As ▁this ▁imp edes ▁the ▁development ▁process , ▁many ▁language ▁implementations ▁provide ▁an ▁easy ▁way ▁out ▁in ▁the ▁form ▁of ▁an ▁option ▁to ▁disable ▁this ▁condition . ▁This , ▁however , ▁comes ▁at ▁the ▁cost ▁of ▁making ▁the ▁type - check er ▁run ▁in ▁an ▁infinite ▁loop ▁when ▁fed ▁programs ▁that ▁do ▁not ▁type - check ,