Generative rules

1087 rules total — 30 shown (capped at 500). ← back to grammar index

rule_idCategoryConceptSummaryBody (excerpt)N att.
R_42_jati_destruction_vivadin validation jāti Jāti is destroyed by improper use of vivādin svaras in place of vādin or anuvādin svaras IF svara.role == vivadin AND used_as(vadin|anuvadin) THEN jati = DESTROYED 6
dhruva_alankara_restrictions validation dhruvā Not all alankāras are desirable in dhruvās due to excessive stretching; syena, bindu and similar should not be used per own measure; ascendi forbidden_in(dhruva) := {syena, bindu, similar_stretching_alankaras}; prefer(dhruva) := ascending_svaras 3
amsa_combinatorics_hexa_penta_constraints validation hexatonic and pentatonic formations Out of 63 aṁśas, 16 do not permit hexatonic formations (allowing 47) and 33 do not permit pentatonic formations (allowing 30). AMSA_FORMATIONS = { · 'total':63, · 'no_hexa':16,'allowed_hexa':47, · 'no_penta':33,'allowed_penta':30 · } 2
dhruvas_no_excessive_stretch validation dhruvā Excessive syllable stretching via alaṅkāras is undesirable in dhruvās because text-meaning comprehension by the listener is primary. forbid(excessive_stretching(syllable, D)) ; reason := preserve(text_meaning_comprehension) 2
murchana_substitution_madhyama_for_sadja validation mūrchanā Where madhyama is placed by virtue of mūrchanā principle, ṣaḍja can replace it without destroying the jāti or rāga. def substitute_via_murchana(phrase, position): · if phrase[position] == 'madhyama' and placed_by_murchana(phrase, position): · phrase[position] = 's 2
R_1419_alpatva_bahutva_invariant validation alpatva-bahutva Alpatva-bahutva (rareté-abondance) ne change pas dans les formes vikṛtā ; essentielle à l'identité de jāti. VALIDATE invariant(alpatva_bahutva, nyasa) ACROSS vikrta_transformations; required_for jati_identity 1
R_1433_madhyama_no_omission validation madhyama madhyama may not be omitted: it links gandharva and sāman as tonic of sāman and connects the two tetrachords RULE: valid(scale) REQUIRES madhyama ∈ svaras(scale) // links gandharva↔saman, tonic in saman 1
R_478_kalas_validation validation Kalā kalās must not be violated in proper composition VALIDATE composition: NOT violation(kalas) AND NOT violation(split) · ELSE composition INVALID 1
R_5p2_742 validation ṣadjamadhyamā jāti In ṣadjamadhyamā jāti, gāndhāra and niṣāda cannot be auduvita (omitted to form pentatonic) IF jati == sadjamadhyama AND omitted IN {gandhara, nisada} THEN auduvita_valid = FALSE 1
R_712_svarantara_scope validation avakṛṣṭā dhruvās Svarāntara applies only in avakṛṣṭā dhruvās RULE: applies(svarantara, context) IFF context = avakrshta_dhruva 1
R_739_01 validation samvādī Omission of samvadi of amsa forbidden in jāti transformation FUNCTION valid_transform(j, amsa): · IF omits(j, samvadi(amsa)): · RETURN False · RETURN True 1
R_740_sadjodicyava_not_sadava_on_dhaivata validation şadjodicyavā Ṣadjodīcyavā is not ṣāḍava when dhaivata is the aṁśa IF jati == sadjodicyava AND amsa == dhaivata: ASSERT NOT is_sadava (no rsabha-omission) 1
R_906_01 validation daśarūpaka Grāma-rāgas to be performed in daśarūpaka following rules FUNCTION valid_performance(grāma_rāga): · RETURN context == 'daśarūpaka' AND follows_prescribed_rules 1
akara_vowels_are_true_svaras validation ākāra Only vowels beginning with ākāra are true svaras; ṣaḍja and the like exist for the pronunciation of these vowels. def is_true_svara(sound): · return sound.type == 'vowel' and sound.starts_with == 'akara' 1
amsa_constraint_sadjamadhyama_sadava validation aṁśa Şadjamadhyamā is not allowed to be sextonic (six svaras) when niṣāda is the aṁśa. forbid(sadava_form(Şadjamadhyamā), amsa=niṣāda) 1
balavan_vs_sparse_svara validation balavan A balavan (strong) svara is contrasted with the abala (weak) sparse svara: sparseness corresponds to abala, abundance to balavan. def svara_strength(svara): · return 'balavan' if svara.abundant else ('abala' if svara.sparse else 'neutral') 1
gamaka_sthita_in_ela validation gamaka In elā, the gamaka must be rendered sthita (slow/steady). def gamaka_in_ela(form, gamaka): · if form == 'ela': assert gamaka.tempo == 'sthita' 1
kakubha_revagupta_pair_preserves_jati validation kakubha Kakubha (dhaivata-aṁśa) and revagupta (ṛṣabha-aṁśa) used as mutually related pairs do not destroy the jāti or rāga. def kakubha_revagupta_safe(phrase): · if uses_pair(phrase, 'dhaivata','rsabha'): · return True # jati/raga preserved 1
murchana_specified_after_amsa_known validation mūrchanā The mūrchanā of a jāti should be specified only after knowing the predominance of its aṁśa. def assign_murchana(jati): · assert jati.amsa is not None, 'amsa predominance must be known first' · return derive_murchana_from_amsa(jati) 1
padagiti_disambiguation_from_raga_giti validation Pada-giti The label 'pada' qualifies gīti to distinguish it from rāga-rendering gītis (two distinct types). GITI_TYPES = {'pada_giti':'text_rendering','raga_giti':'raga_rendering'} 1
prabandha_defects validation prabandha A defective prabandha exhibits faults: defective by loka or śāstra standards, repetitive, defective in metre, vulgar/indecent, deviation fro defects(prabandha) := {loka_defective, sastra_defective, repetitive, metre_defective, vulgar, order_deviation} 1
purna_state_sparse_nishada_gandhara validation pūrņa In the pūrṇa (complete) state, there is sparseness of niṣāda and gāndhāra. PURNA_STATE = {'sparse_svaras': ['nishada','gandhara']} 1
r_brd_286_vina_pair_tuning validation viņā Two vīṇās must be equal in measure, string, upavādana, daṇḍa, mūrchanā to establish them in ṣaḍjagrāma FUNCTION validate_vina_pair_for_sadjagrama(vina_a, vina_b): · FOR attr IN [measure, string, upavadana, danda, murchana]: · REQUIRE equal(vina_a[attr], vin 1
sadji_nishada_rsabha_not_paryayamsas validation ṣāḍjī In ṣāḍjī, niṣāda and ṛṣabha are not paryāyāṁśas; their sparseness/non-repetition is enacted in antara-mārga. SADJI.update({'paryayamsas_excluded':['nishada','rsabha'],'anabhyasa_in':'antara_marga'}) 1
sadjodicyava_textual_overlap_with_sadjamadhyama validation ṣadjodīcyavā The description of ṣaḍjodīcyavā contains material pertaining to ṣaḍjamadhyamā, and the latter is found under ṣaḍjodīcyavā in the source. TEXT_OVERLAP = {'host':'sadjodicyava','contains':'sadjamadhyama_material'} 1
sankirna_criterion_unclear validation sankīrņā The exact criterion for assigning the sankīrṇā label is not clear (epistemic open issue). criterion(sankirna_assignment) := UNDEFINED 1
saptasvarah_no_seven_shruti_samvada validation sapta-svarāķ 'Sapta' (seven) refers to svaras, not a seven-śruti saṁvāda interval; Mātaṅga does not accept seven-śruti saṁvāda beyond nine and th SAMVADA_INTERVALS = {9,13} # 7 is rejected; arises from a punctuation misreading 1
shuddhakaisikamadhyama_grama_disputed validation śuddhakaiśikamadhyama Śuddhakaiśikamadhyama is a rāga whose grāma classification is disputed (the source refutes the view that it belongs to two grāmas). SHUDDHAKAISIKAMADHYAMA = {'grama_status':'disputed','refuted_view':'belongs_to_two_gramas'} 1
vikalpana_requires_basis validation vikalpana Vikalpana (assumption/imagination) cannot apply when its basis (matṛkās) does not exist. def vikalpana_applicable(basis): · return basis is not None and basis.exists 1
vivadin_substitution_causes_loss validation vivāditva Using a vivādin svara in the position of its counterpart causes loss of jāti and rāga. if substitute(s_correct, s_vivadin): jati_integrity(R) := lost AND raga_integrity(R) := lost 1