1087 rules total — 30 shown (capped at 500). ← back to grammar index
| rule_id | Category | Concept | Summary | Body (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 |