====== Una minima modellizzazione in python della grammatica categoriale nella versione di Ajdukiewicz ====== {{:the-lilac-smells.png?400|}} Schema tratto da Kazimierz Ajdukiewicz, //Syntactic Connection// [orig. Die syntaktische Konnexität, «Studia Philosophica» 1 (1935), 1-27], in S. McCall (a c. di) //Polish Logic 1920-1939//, Oxford, 1967, pp. 207-231. Nella formulazione di Ajdukiewicz la grammatica categoriale è totalmente indipendente dalla posizione lineare degli elementi. In questo la formulazione teorica originaria si differenzia da modelli successivi che hanno avuto séguito soprattutto in ambito angolassone (p. es. la grammatica di Joachim Lambek 1922-2014) e che distinguono tra casi in cui l’operando è inserito a destra e casi in cui l’operando è inserito a sinistra. L’impostazione “non linearizzata” di Ajdukiewicz è tuttora utilizzata negli studi di semantica formale. ===== Tipi primitivi ===== n = nome s = frase ===== Tipi funzione ===== * v = s/n = una funzione che riceve un nome/sintagma nominale come argomento e restituisce una frase (verbo intransitivo non impersonale) * a = n/n = una funzione che riceve un nome/sintagma nominale come argomento e restituisce un nome/sintagma nominale (attributo/determinante) * adv = v/v = una funzione che riceve un verbo/sintagma verbale come argomento e restituisce un verbo/sintagma verbale (avverbio adverbale) * vt = v/n = una funzione che riceve un nome/sintagma nominale come argomento e restituisce un v (transitivo con oggetto non saturato > transitivo con oggetto saturato equivalente a un intransitivo) * p = adv/n = una funzione che riceve un nome/sintagma nominale come argomento e restituisce un adv, ossia un avverbio (preposizione) * cop = v/a = una funzione che riceve un aggettivo come argomento e restituisce un verbo/sintagma verbale (copula) * copl = v/adv = una funzione che riceve un avverbio o un sintagma preposizionale come argomento e restituisce un verbo/sintagma verbale (copula locativa) #pip install sympy #pip3 install sympy #python -m pip install simpy from sympy import symbols n = symbols('n') #noun s = symbols('s') #sentence def v(x): #verb if x==n: return s def a(x): #adjective/article/determiner (adnominal) if x==n: return n def adv(x): #adverb if x==v: return v def vt(x): #transitive verb (schönfinkelization/currying Moses Schönfinkel/Haskell B. Curry): transitive predicate=f(a,b)=f1(f2(b))=v(vt(n)) if x==n: return v def p(x): #preposition if x==n: return adv def cop(x): #copula if x==a: return v def copl(x): #locative copula if x==adv: return v Mario=n cammina=v cuoco=n il=a bravo=a lentamente=adv affettuosamente=adv saluta=vt Gino=n cane=n morde=vt un=a cenno=n con=p affetto=n è=cop sta=copl in_=p cucina=n lì =adv a_ =p casa =n test = [ cammina(Mario), #Mario cammina cammina(il(cuoco)), #il cuoco cammina cammina(il(bravo(cuoco))), #il bravo cuoco cammina lentamente(cammina)(Mario), #Mario cammina lentamente saluta(Gino)(Mario), #Mario saluta Gino morde(Mario)(il(cane)), #il cane morde Mario affettuosamente(saluta(Mario))(Gino), #Gino saluta Mario affettuosamente con(affetto)(saluta(Mario))(Gino), #Gino saluta Mario con affetto con(un(cenno))(saluta(Mario))(Gino), #Gino saluta Mario con un cenno è(bravo)(il(cuoco)), #il cuoco è bravo sta(lì)(il(cuoco)), #il cuoco sta lì sta(in_(cucina))(il(cuoco)) #il cuoco sta in cucina ] for i in test: print(i)